deeptwins-engine-3d 0.1.75 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/Build/DeepTwins/Image/noise.png +0 -0
- package/dist/assets/Build/DeepTwins/Workers/CustomRasterClip.worker.js +1 -2
- package/dist/assets/Build/DeepTwins/Workers/MvtVector.worker.js +1 -1
- package/dist/assets/Build/Map3d/ThirdParty/Workers/zip-web-worker.js +640 -0
- package/dist/assets/Build/Map3d/ThirdParty/wasm_splats_bg.wasm +0 -0
- package/dist/assets/Build/Map3d/ThirdParty/zip-module.wasm +0 -0
- package/dist/assets/Build/Map3d/Workers/chunk-27NG6PQR.js +456 -0
- package/dist/assets/Build/Map3d/Workers/chunk-2JVMMMWT.js +353 -0
- package/dist/assets/Build/Map3d/Workers/chunk-2Y2XYQCS.js +1481 -0
- package/dist/assets/Build/Map3d/Workers/chunk-34RF3V5G.js +220 -0
- package/dist/assets/Build/Map3d/Workers/chunk-35H7BYLJ.js +1800 -0
- package/dist/assets/Build/Map3d/Workers/chunk-57OGEF5V.js +435 -0
- package/dist/assets/Build/Map3d/Workers/chunk-5PX3DYJA.js +196 -0
- package/dist/assets/Build/Map3d/Workers/chunk-7B5XGQRN.js +171 -0
- package/dist/assets/Build/Map3d/Workers/chunk-ATLWOZFF.js +39 -0
- package/dist/assets/Build/Map3d/Workers/chunk-BMSUECTA.js +1055 -0
- package/dist/assets/Build/Map3d/Workers/chunk-C6IA4TKW.js +476 -0
- package/dist/assets/Build/Map3d/Workers/chunk-CZ44I32U.js +157 -0
- package/dist/assets/Build/Map3d/Workers/chunk-DE6UV44R.js +122 -0
- package/dist/assets/Build/Map3d/Workers/chunk-DUCCKVOG.js +834 -0
- package/dist/assets/Build/Map3d/Workers/chunk-EBJBPIYX.js +239 -0
- package/dist/assets/Build/Map3d/Workers/chunk-EYSYQ2R6.js +138 -0
- package/dist/assets/Build/Map3d/Workers/chunk-FMCAAUQI.js +368 -0
- package/dist/assets/Build/Map3d/Workers/chunk-GMYZNRRQ.js +2717 -0
- package/dist/assets/Build/Map3d/Workers/chunk-GWPNZZV4.js +781 -0
- package/dist/assets/Build/Map3d/Workers/chunk-HLP2U4KW.js +758 -0
- package/dist/assets/Build/Map3d/Workers/chunk-HSJSUPQV.js +500 -0
- package/dist/assets/Build/Map3d/Workers/chunk-I73Q3AG7.js +58 -0
- package/dist/assets/Build/Map3d/Workers/chunk-IMZ4YIMV.js +511 -0
- package/dist/assets/Build/Map3d/Workers/chunk-IZSK4DVF.js +421 -0
- package/dist/assets/Build/Map3d/Workers/chunk-JKLMRPKK.js +75 -0
- package/dist/assets/Build/Map3d/Workers/chunk-KGM345JM.js +691 -0
- package/dist/assets/Build/Map3d/Workers/chunk-L4IR5U4G.js +102 -0
- package/dist/assets/Build/Map3d/Workers/chunk-MG4EVQH2.js +44 -0
- package/dist/assets/Build/Map3d/Workers/chunk-NXWEFAZJ.js +300 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PDFAJISJ.js +59 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PHWZFJR5.js +100 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PLE7CHBE.js +101 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PN3GIZ5Q.js +163 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PXL5XLHV.js +1073 -0
- package/dist/assets/Build/Map3d/Workers/chunk-QYXOF5JC.js +959 -0
- package/dist/assets/Build/Map3d/Workers/chunk-R2LIFXV3.js +115 -0
- package/dist/assets/Build/Map3d/Workers/chunk-R4W6IRJZ.js +10357 -0
- package/dist/assets/Build/Map3d/Workers/chunk-R5PZXG56.js +1258 -0
- package/dist/assets/Build/Map3d/Workers/chunk-RZQLZIUI.js +629 -0
- package/dist/assets/Build/Map3d/Workers/chunk-SIBDD6Y4.js +390 -0
- package/dist/assets/Build/Map3d/Workers/chunk-U5NN6JTQ.js +398 -0
- package/dist/assets/Build/Map3d/Workers/chunk-UA5RPPP3.js +73 -0
- package/dist/assets/Build/Map3d/Workers/chunk-UXLKFS3C.js +305 -0
- package/dist/assets/Build/Map3d/Workers/chunk-VUX4BQIM.js +37 -0
- package/dist/assets/Build/Map3d/Workers/chunk-WJDUUUJS.js +684 -0
- package/dist/assets/Build/Map3d/Workers/chunk-XBJOJHWX.js +139 -0
- package/dist/assets/Build/Map3d/Workers/chunk-XJDMTNKD.js +634 -0
- package/dist/assets/Build/Map3d/Workers/chunk-XUCXZZE5.js +963 -0
- package/dist/assets/Build/Map3d/Workers/chunk-YIKGVMJ5.js +287 -0
- package/dist/assets/Build/Map3d/Workers/chunk-YTNCIBPQ.js +262 -0
- package/dist/assets/Build/Map3d/Workers/chunk-ZMDUYETO.js +55 -0
- package/dist/assets/Build/Map3d/Workers/chunk-ZW52HXFN.js +2857 -0
- package/dist/esm/analyze/LineOfSightAnalysis.js +1 -326
- package/dist/esm/analyze/SubmergenceAnalysis.js +1 -137
- package/dist/esm/analyze/SunLightAnalysis.js +1 -91
- package/dist/esm/analyze/TerrainExcavationAnalysis.js +1 -612
- package/dist/esm/analyze/ViewshedAnalysis.js +1 -292
- package/dist/esm/cameraControl/ModelRoamHistory.js +1 -639
- package/dist/esm/cameraControl/ModelRoamRealTime.js +1 -874
- package/dist/esm/cameraControl/Roam.js +1 -418
- package/dist/esm/cameraControl/Rotate.js +1 -134
- package/dist/esm/cameraControl/RotateInPlace.js +1 -99
- package/dist/esm/constant.d.ts +90 -0
- package/dist/esm/constant.js +1 -1287
- package/dist/esm/deepTwins/index.js +1 -121
- package/dist/esm/drawCommand/index.js +1 -3
- package/dist/esm/drawCommand/viewShed/Event.js +1 -142
- package/dist/esm/drawCommand/viewShed/RectangularSensorPrimitive.js +1 -1306
- package/dist/esm/drawCommand/viewShed/ViewShadowPrimitive.js +1 -66
- package/dist/esm/drawCommand/viewShed/ViewShedAnalyserLayer.js +1 -466
- package/dist/esm/drawCommand/viewShed/ViewShedMap.js +1 -1238
- package/dist/esm/drawCommand/viewShed/config.js +1 -21
- package/dist/esm/drawCommand/volumeCloud/GeometryPrimitive.js +1 -89
- package/dist/esm/drawCommand/volumeCloud/ImprovedNoise.js +1 -112
- package/dist/esm/drawCommand/volumeCloud/VolumeClouds.js +1 -91
- package/dist/esm/drawer/algorithm.js +1 -314
- package/dist/esm/drawer/common.js +1 -965
- package/dist/esm/drawer/coordinate.js +1 -184
- package/dist/esm/drawer/index.d.ts +1 -1
- package/dist/esm/drawer/index.js +1 -688
- package/dist/esm/drawer/plotUtil.js +1 -266
- package/dist/esm/drawer/shape/Assemble.js +1 -415
- package/dist/esm/drawer/shape/AttackArrow.js +1 -442
- package/dist/esm/drawer/shape/BaseShape.js +1 -383
- package/dist/esm/drawer/shape/Bow.js +1 -375
- package/dist/esm/drawer/shape/Circle.js +1 -461
- package/dist/esm/drawer/shape/Curve.js +1 -386
- package/dist/esm/drawer/shape/DragPoint.js +1 -211
- package/dist/esm/drawer/shape/Elliptic.js +1 -491
- package/dist/esm/drawer/shape/Formation.js +1 -395
- package/dist/esm/drawer/shape/PincerArrow.js +1 -445
- package/dist/esm/drawer/shape/Point.js +1 -131
- package/dist/esm/drawer/shape/Polygon.js +1 -368
- package/dist/esm/drawer/shape/Polyline.js +1 -325
- package/dist/esm/drawer/shape/RegularPolygon.js +1 -468
- package/dist/esm/drawer/shape/RightAngleArrow.js +1 -423
- package/dist/esm/drawer/shape/Sector.js +1 -568
- package/dist/esm/drawer/shape/StraightArrow.js +1 -422
- package/dist/esm/drawer/shape/SwallowtailArrow.js +1 -438
- package/dist/esm/drawer/types.js +1 -11
- package/dist/esm/drawer/utils.js +1 -381
- package/dist/esm/global.css +22 -1
- package/dist/esm/graphicLayer/BaseEntity.js +1 -51
- package/dist/esm/graphicLayer/BaseLayer.js +1 -730
- package/dist/esm/graphicLayer/BasePointPrimitive.js +1 -45
- package/dist/esm/graphicLayer/BasePrimitive.js +1 -36
- package/dist/esm/graphicLayer/BasePrimitiveInstance.js +1 -37
- package/dist/esm/graphicLayer/BaseSource.d.ts +1 -1
- package/dist/esm/graphicLayer/BaseSource.js +1 -630
- package/dist/esm/graphicLayer/BillboardEntity.js +1 -106
- package/dist/esm/graphicLayer/BillboardPrimitive.js +1 -119
- package/dist/esm/graphicLayer/BoxEntity.js +1 -99
- package/dist/esm/graphicLayer/BoxPrimitive.js +1 -48
- package/dist/esm/graphicLayer/BoxPrimitiveInstance.js +1 -91
- package/dist/esm/graphicLayer/EllipseEntity.js +1 -110
- package/dist/esm/graphicLayer/EllipsePrimitive.js +1 -47
- package/dist/esm/graphicLayer/EllipsePrimitiveInstance.js +1 -98
- package/dist/esm/graphicLayer/EllipsoidEntity.js +1 -118
- package/dist/esm/graphicLayer/EllipsoidPrimitive.js +1 -48
- package/dist/esm/graphicLayer/EllipsoidPrimitiveInstance.js +1 -113
- package/dist/esm/graphicLayer/GraphicLayerCollection.js +1 -491
- package/dist/esm/graphicLayer/HtmlEntity.d.ts +4 -0
- package/dist/esm/graphicLayer/HtmlEntity.js +1 -189
- package/dist/esm/graphicLayer/LabelEntity.js +1 -110
- package/dist/esm/graphicLayer/LabelPrimitive.js +1 -127
- package/dist/esm/graphicLayer/ModelEntity.js +1 -122
- package/dist/esm/graphicLayer/ModelPrimitive.js +1 -59
- package/dist/esm/graphicLayer/ModelPrimitiveInstance.js +1 -86
- package/dist/esm/graphicLayer/PointEntity.js +1 -94
- package/dist/esm/graphicLayer/PointPrimitive.js +1 -107
- package/dist/esm/graphicLayer/PolygonEntity.js +1 -103
- package/dist/esm/graphicLayer/PolygonGroundPrimitive.js +1 -49
- package/dist/esm/graphicLayer/PolygonGroundPrimitiveImageMaterialInstance.js +1 -87
- package/dist/esm/graphicLayer/PolygonPrimitive.js +1 -60
- package/dist/esm/graphicLayer/PolygonPrimitiveImageMaterialInstance.js +1 -84
- package/dist/esm/graphicLayer/PolygonPrimitiveInstance.js +1 -101
- package/dist/esm/graphicLayer/PolylineEntity.js +1 -96
- package/dist/esm/graphicLayer/PolylineGroundPrimitive.js +1 -55
- package/dist/esm/graphicLayer/PolylineGroundPrimitiveInstance.js +1 -85
- package/dist/esm/graphicLayer/PolylinePrimitive.js +1 -53
- package/dist/esm/graphicLayer/PolylinePrimitiveInstance.js +1 -85
- package/dist/esm/graphicLayer/PolylineVolumeEntity.js +1 -105
- package/dist/esm/graphicLayer/PolylineVolumePrimitive.js +1 -47
- package/dist/esm/graphicLayer/PolylineVolumePrimitiveInstance.js +1 -94
- package/dist/esm/graphicLayer/WallEntity.js +1 -96
- package/dist/esm/graphicLayer/WallPrimitive.js +1 -47
- package/dist/esm/graphicLayer/WallPrimitiveInstance.js +1 -88
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +1 -173
- package/dist/esm/lowAltitude/BarrierLayer.js +1 -172
- package/dist/esm/lowAltitude/BaseGridMvtLayer.js +1 -122
- package/dist/esm/lowAltitude/FactorLayer.js +1 -199
- package/dist/esm/lowAltitude/FlightPlanning.js +1 -411
- package/dist/esm/lowAltitude/FlightRiskEvaluation.js +1 -543
- package/dist/esm/lowAltitude/GridDraw.js +1 -137
- package/dist/esm/lowAltitude/PoiLayer.js +1 -74
- package/dist/esm/lowAltitude/RoutePlanning.d.ts +85 -0
- package/dist/esm/lowAltitude/RoutePlanning.js +1 -0
- package/dist/esm/lowAltitude/VisitLayer.js +1 -180
- package/dist/esm/map/Event.js +1 -377
- package/dist/esm/map/GroundSkyBox.js +1 -166
- package/dist/esm/map/Map.js +1 -881
- package/dist/esm/map/Property.js +1 -35
- package/dist/esm/material/AtmosphericDispersion.js +1 -569
- package/dist/esm/material/GlobalVolumetricCloud.js +1 -377
- package/dist/esm/material/VolumeCloud.js +1 -115
- package/dist/esm/material/WeatherEffects.js +1 -351
- package/dist/esm/material/entity/BaseMaterialProperty.js +1 -51
- package/dist/esm/material/entity/CircleWaveMaterialProperty.js +1 -101
- package/dist/esm/material/entity/DynamicWallMaterialProperty.js +1 -101
- package/dist/esm/material/entity/ImageGlowingMaterialProperty.js +1 -89
- package/dist/esm/material/entity/ImageMaterialProperty.js +1 -34
- package/dist/esm/material/entity/PolylineTrailLinkMaterialProperty.js +1 -132
- package/dist/esm/material/primitive/BaseMaterialAppearance.js +1 -28
- package/dist/esm/material/primitive/ImageGlowingMaterialAppearance.js +1 -77
- package/dist/esm/material/primitive/ImageMaterialAppearance.js +1 -77
- package/dist/esm/measure/Area.js +1 -220
- package/dist/esm/measure/BaseDraw.js +1 -105
- package/dist/esm/measure/Distance.js +1 -223
- package/dist/esm/measure/index.js +1 -266
- package/dist/esm/measure/types.js +1 -17
- package/dist/esm/measure/utils.js +1 -319
- package/dist/esm/particle/BaseParticle.js +1 -196
- package/dist/esm/particle/FireParticle.js +1 -65
- package/dist/esm/particle/FountainParticle.js +1 -80
- package/dist/esm/particle/SmokeParticle.js +1 -65
- package/dist/esm/particle/common.js +1 -23
- package/dist/esm/particle/index.js +1 -5
- package/dist/esm/property/PositionProperty.js +1 -56
- package/dist/esm/tileLayer/ArcGisLayer.js +1 -41
- package/dist/esm/tileLayer/CustomRasterClipWorkerClient.js +1 -147
- package/dist/esm/tileLayer/CustomRasterLayer.js +1 -1126
- package/dist/esm/tileLayer/ImageryLayer.js +1 -44
- package/dist/esm/tileLayer/MvtVectorLoad.js +1 -1549
- package/dist/esm/tileLayer/MvtVectorWorkerClient.js +1 -126
- package/dist/esm/tileLayer/RasterLayer.js +1 -23
- package/dist/esm/tileLayer/WmsLayer.js +1 -26
- package/dist/esm/tileLayer/WmtsLayer.js +1 -23
- package/dist/esm/tool/BuildClampedPolygonGrid.js +1 -278
- package/dist/esm/tool/Compass.js +1 -282
- package/dist/esm/tool/PrimitiveCluster.js +1 -706
- package/dist/esm/tool/TimerInterval.js +1 -58
- package/dist/esm/tool/common.js +1 -405
- package/dist/esm/tool/fetch.js +1 -222
- package/dist/esm/tool/heatmap.js +1 -631
- package/dist/esm/tool/utils.d.ts +1 -0
- package/dist/esm/tool/utils.js +1 -501
- package/dist/esm/toolTip/index.js +1 -79
- package/dist/esm/videoFusion/BaseVideo.d.ts +7 -0
- package/dist/esm/videoFusion/BaseVideo.js +1 -330
- package/dist/esm/videoFusion/VideoProject.js +1 -230
- package/dist/esm/videoFusion/VideoTexture.js +1 -163
- package/dist/esm/visualization/BaseHeatmap.js +1 -271
- package/dist/esm/visualization/BoundaryHighlight.d.ts +136 -0
- package/dist/esm/visualization/BoundaryHighlight.js +1 -0
- package/dist/esm/visualization/DynamicWater.js +1 -289
- package/dist/esm/visualization/Frustum.js +1 -248
- package/dist/esm/visualization/Heatmap2d.js +1 -97
- package/dist/esm/visualization/Heatmap3d.js +1 -281
- package/dist/esm/visualization/MigrationEffect.js +1 -397
- package/dist/esm/visualization/PointCluster.js +1 -220
- package/dist/esm/visualization/RadarScan.js +1 -333
- package/dist/esm/visualization/SampledTerrainRiver.d.ts +180 -0
- package/dist/esm/visualization/SampledTerrainRiver.js +1 -0
- package/dist/esm/visualization/SampledTerrainWater.d.ts +170 -0
- package/dist/esm/visualization/SampledTerrainWater.js +1 -0
- package/dist/esm/visualization/WindField.d.ts +72 -0
- package/dist/esm/visualization/WindField.js +1 -0
- package/dist/esm/visualization/windCore.d.ts +161 -0
- package/dist/esm/visualization/windCore.js +8 -0
- package/dist/umd/deeptwins-engine-3d.min.css +1 -1
- package/dist/umd/deeptwins-engine-3d.min.js +1 -1
- package/package.json +6 -4
|
@@ -1,377 +1 @@
|
|
|
1
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
5
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
6
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
7
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10
|
-
import * as Cesium from 'deeptwins-cesium';
|
|
11
|
-
var DEFAULT_SKY_AMBIENT_COLOR = '#B4D9F3';
|
|
12
|
-
var DEFAULT_GROUND_AMBIENT_COLOR = '#d6d6d8';
|
|
13
|
-
var DEFAULT_WIND_VECTOR = new Cesium.Cartesian3(100, 0, 0);
|
|
14
|
-
var createDefaultCloudParams = function createDefaultCloudParams() {
|
|
15
|
-
return {
|
|
16
|
-
densityMultiplier: 1.5,
|
|
17
|
-
detailStrength: 0.69,
|
|
18
|
-
cloudSharpness: 1.032,
|
|
19
|
-
rainClouds: 0.45,
|
|
20
|
-
currentWindVectorWC: Cesium.Cartesian3.clone(DEFAULT_WIND_VECTOR),
|
|
21
|
-
cloudCover: 0.039,
|
|
22
|
-
cloudHeight: 8000.0,
|
|
23
|
-
cloudThickness: 1000.0,
|
|
24
|
-
absoluteMaxDistance: 50000000,
|
|
25
|
-
absorption: 0.004,
|
|
26
|
-
windSpeedRatio: 0.3,
|
|
27
|
-
scatteringCoefficient: 0.01,
|
|
28
|
-
illuminationCoefficient: 0.01,
|
|
29
|
-
cloudSeed: Math.random() * 100.0,
|
|
30
|
-
cloudType: 0,
|
|
31
|
-
cloudTurbulence: 0.5,
|
|
32
|
-
cloudClumping: 0.75,
|
|
33
|
-
cloudAnvil: 0,
|
|
34
|
-
skyAmbientColor: DEFAULT_SKY_AMBIENT_COLOR,
|
|
35
|
-
groundAmbientColor: DEFAULT_GROUND_AMBIENT_COLOR,
|
|
36
|
-
maxVisibleHeight: 30000
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
// 全球体积云
|
|
41
|
-
var GlobalVolumetricCloud = /*#__PURE__*/function () {
|
|
42
|
-
function GlobalVolumetricCloud(map) {
|
|
43
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
44
|
-
_classCallCheck(this, GlobalVolumetricCloud);
|
|
45
|
-
// 地图上下文
|
|
46
|
-
_defineProperty(this, "_mapContext", void 0);
|
|
47
|
-
// 当前生效的云参数
|
|
48
|
-
_defineProperty(this, "uniforms", void 0);
|
|
49
|
-
// 构造时的初始参数
|
|
50
|
-
_defineProperty(this, "originalOptions", void 0);
|
|
51
|
-
// 后处理阶段对象
|
|
52
|
-
_defineProperty(this, "postProcessStage", void 0);
|
|
53
|
-
// 天空环境光颜色
|
|
54
|
-
_defineProperty(this, "skyAmbientColor3", void 0);
|
|
55
|
-
// 地面环境光颜色
|
|
56
|
-
_defineProperty(this, "groundAmbientColor3", void 0);
|
|
57
|
-
this._mapContext = map._mapContext;
|
|
58
|
-
var viewer = this.getMap();
|
|
59
|
-
if (!viewer || _typeof(viewer) !== 'object') {
|
|
60
|
-
throw new Error('Invalid Cesium Viewer instance provided');
|
|
61
|
-
}
|
|
62
|
-
if (!viewer.scene || !viewer.scene.postProcessStages) {
|
|
63
|
-
throw new Error('Viewer instance must have valid scene and postProcessStages');
|
|
64
|
-
}
|
|
65
|
-
this.uniforms = this._buildUniforms(options);
|
|
66
|
-
this.originalOptions = this._cloneUniforms(this.uniforms);
|
|
67
|
-
this.postProcessStage = null;
|
|
68
|
-
this.skyAmbientColor3 = {
|
|
69
|
-
r: 0,
|
|
70
|
-
g: 0,
|
|
71
|
-
b: 0
|
|
72
|
-
};
|
|
73
|
-
this.groundAmbientColor3 = {
|
|
74
|
-
r: 0,
|
|
75
|
-
g: 0,
|
|
76
|
-
b: 0
|
|
77
|
-
};
|
|
78
|
-
this._syncAmbientColors();
|
|
79
|
-
|
|
80
|
-
// 初始化云
|
|
81
|
-
this.initialize();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// 获取地图实例
|
|
85
|
-
_createClass(GlobalVolumetricCloud, [{
|
|
86
|
-
key: "getMap",
|
|
87
|
-
value: function getMap() {
|
|
88
|
-
return this._mapContext && this._mapContext.getMap();
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// 克隆云参数,避免引用共享导致外部状态污染
|
|
92
|
-
}, {
|
|
93
|
-
key: "_cloneUniforms",
|
|
94
|
-
value: function _cloneUniforms(params) {
|
|
95
|
-
return _objectSpread(_objectSpread({}, params), {}, {
|
|
96
|
-
currentWindVectorWC: Cesium.Cartesian3.clone(params.currentWindVectorWC)
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// 统一构建参数,支持保留0值并维持随机种子稳定
|
|
101
|
-
}, {
|
|
102
|
-
key: "_buildUniforms",
|
|
103
|
-
value: function _buildUniforms() {
|
|
104
|
-
var _options$densityMulti, _options$detailStreng, _options$cloudSharpne, _options$rainClouds, _options$cloudCover, _options$cloudHeight, _options$cloudThickne, _options$absoluteMaxD, _options$absorption, _options$windSpeedRat, _options$scatteringCo, _options$illumination, _options$cloudSeed, _options$cloudType, _options$cloudTurbule, _options$cloudClumpin, _options$cloudAnvil, _options$skyAmbientCo, _options$groundAmbien, _options$maxVisibleHe;
|
|
105
|
-
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
106
|
-
var baseParams = arguments.length > 1 ? arguments[1] : undefined;
|
|
107
|
-
var fallbackParams = baseParams ? this._cloneUniforms(baseParams) : createDefaultCloudParams();
|
|
108
|
-
var params = {
|
|
109
|
-
densityMultiplier: (_options$densityMulti = options.densityMultiplier) !== null && _options$densityMulti !== void 0 ? _options$densityMulti : fallbackParams.densityMultiplier,
|
|
110
|
-
detailStrength: (_options$detailStreng = options.detailStrength) !== null && _options$detailStreng !== void 0 ? _options$detailStreng : fallbackParams.detailStrength,
|
|
111
|
-
cloudSharpness: (_options$cloudSharpne = options.cloudSharpness) !== null && _options$cloudSharpne !== void 0 ? _options$cloudSharpne : fallbackParams.cloudSharpness,
|
|
112
|
-
rainClouds: (_options$rainClouds = options.rainClouds) !== null && _options$rainClouds !== void 0 ? _options$rainClouds : fallbackParams.rainClouds,
|
|
113
|
-
currentWindVectorWC: options.currentWindVectorWC ? Cesium.Cartesian3.clone(options.currentWindVectorWC) : Cesium.Cartesian3.clone(fallbackParams.currentWindVectorWC),
|
|
114
|
-
cloudCover: (_options$cloudCover = options.cloudCover) !== null && _options$cloudCover !== void 0 ? _options$cloudCover : fallbackParams.cloudCover,
|
|
115
|
-
cloudHeight: (_options$cloudHeight = options.cloudHeight) !== null && _options$cloudHeight !== void 0 ? _options$cloudHeight : fallbackParams.cloudHeight,
|
|
116
|
-
cloudThickness: (_options$cloudThickne = options.cloudThickness) !== null && _options$cloudThickne !== void 0 ? _options$cloudThickne : fallbackParams.cloudThickness,
|
|
117
|
-
absoluteMaxDistance: (_options$absoluteMaxD = options.absoluteMaxDistance) !== null && _options$absoluteMaxD !== void 0 ? _options$absoluteMaxD : fallbackParams.absoluteMaxDistance,
|
|
118
|
-
absorption: (_options$absorption = options.absorption) !== null && _options$absorption !== void 0 ? _options$absorption : fallbackParams.absorption,
|
|
119
|
-
windSpeedRatio: (_options$windSpeedRat = options.windSpeedRatio) !== null && _options$windSpeedRat !== void 0 ? _options$windSpeedRat : fallbackParams.windSpeedRatio,
|
|
120
|
-
scatteringCoefficient: (_options$scatteringCo = options.scatteringCoefficient) !== null && _options$scatteringCo !== void 0 ? _options$scatteringCo : fallbackParams.scatteringCoefficient,
|
|
121
|
-
illuminationCoefficient: (_options$illumination = options.illuminationCoefficient) !== null && _options$illumination !== void 0 ? _options$illumination : fallbackParams.illuminationCoefficient,
|
|
122
|
-
cloudSeed: (_options$cloudSeed = options.cloudSeed) !== null && _options$cloudSeed !== void 0 ? _options$cloudSeed : fallbackParams.cloudSeed,
|
|
123
|
-
cloudType: (_options$cloudType = options.cloudType) !== null && _options$cloudType !== void 0 ? _options$cloudType : fallbackParams.cloudType,
|
|
124
|
-
cloudTurbulence: (_options$cloudTurbule = options.cloudTurbulence) !== null && _options$cloudTurbule !== void 0 ? _options$cloudTurbule : fallbackParams.cloudTurbulence,
|
|
125
|
-
cloudClumping: (_options$cloudClumpin = options.cloudClumping) !== null && _options$cloudClumpin !== void 0 ? _options$cloudClumpin : fallbackParams.cloudClumping,
|
|
126
|
-
cloudAnvil: (_options$cloudAnvil = options.cloudAnvil) !== null && _options$cloudAnvil !== void 0 ? _options$cloudAnvil : fallbackParams.cloudAnvil,
|
|
127
|
-
skyAmbientColor: (_options$skyAmbientCo = options.skyAmbientColor) !== null && _options$skyAmbientCo !== void 0 ? _options$skyAmbientCo : fallbackParams.skyAmbientColor,
|
|
128
|
-
groundAmbientColor: (_options$groundAmbien = options.groundAmbientColor) !== null && _options$groundAmbien !== void 0 ? _options$groundAmbien : fallbackParams.groundAmbientColor,
|
|
129
|
-
maxVisibleHeight: (_options$maxVisibleHe = options.maxVisibleHeight) !== null && _options$maxVisibleHe !== void 0 ? _options$maxVisibleHe : fallbackParams.maxVisibleHeight
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
// 确保 maxVisibleHeight 大于 cloudHeight
|
|
133
|
-
return params.maxVisibleHeight > params.cloudHeight ? params : _objectSpread(_objectSpread({}, params), {}, {
|
|
134
|
-
maxVisibleHeight: params.cloudHeight + 10000
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// 同步环境光颜色缓存,供shader uniforms实时读取
|
|
139
|
-
}, {
|
|
140
|
-
key: "_syncAmbientColors",
|
|
141
|
-
value: function _syncAmbientColors() {
|
|
142
|
-
this.skyAmbientColor3 = this._hexToRgb(this.uniforms.skyAmbientColor, DEFAULT_SKY_AMBIENT_COLOR);
|
|
143
|
-
this.groundAmbientColor3 = this._hexToRgb(this.uniforms.groundAmbientColor, DEFAULT_GROUND_AMBIENT_COLOR);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* 初始化体积云系统
|
|
148
|
-
*
|
|
149
|
-
* 创建并配置体积云后处理阶段,设置所有着色器和uniforms参数。
|
|
150
|
-
* 这是内部方法,通常由构造函数自动调用。
|
|
151
|
-
*
|
|
152
|
-
* @private
|
|
153
|
-
*/
|
|
154
|
-
}, {
|
|
155
|
-
key: "initialize",
|
|
156
|
-
value: function initialize() {
|
|
157
|
-
var _this = this;
|
|
158
|
-
var map = this.getMap();
|
|
159
|
-
if (!map) return;
|
|
160
|
-
var shader = this._createShader();
|
|
161
|
-
this.postProcessStage = new Cesium.PostProcessStage({
|
|
162
|
-
uniforms: {
|
|
163
|
-
realPlanetRadius: function realPlanetRadius() {
|
|
164
|
-
return _this._getRealPlanetRadius();
|
|
165
|
-
},
|
|
166
|
-
windVector: function windVector() {
|
|
167
|
-
return _this.uniforms.currentWindVectorWC;
|
|
168
|
-
},
|
|
169
|
-
cloudCover: function cloudCover() {
|
|
170
|
-
return _this.uniforms.cloudCover;
|
|
171
|
-
},
|
|
172
|
-
cloudHeight: function cloudHeight() {
|
|
173
|
-
return _this.uniforms.cloudHeight;
|
|
174
|
-
},
|
|
175
|
-
cloudThickness: function cloudThickness() {
|
|
176
|
-
return _this.uniforms.cloudThickness;
|
|
177
|
-
},
|
|
178
|
-
absoluteMaxDistance: function absoluteMaxDistance() {
|
|
179
|
-
return _this.uniforms.absoluteMaxDistance;
|
|
180
|
-
},
|
|
181
|
-
absorption: function absorption() {
|
|
182
|
-
return _this.uniforms.absorption;
|
|
183
|
-
},
|
|
184
|
-
windSpeedRatio: function windSpeedRatio() {
|
|
185
|
-
return _this.uniforms.windSpeedRatio;
|
|
186
|
-
},
|
|
187
|
-
scatteringCoefficient: function scatteringCoefficient() {
|
|
188
|
-
return _this.uniforms.scatteringCoefficient;
|
|
189
|
-
},
|
|
190
|
-
illuminationCoefficient: function illuminationCoefficient() {
|
|
191
|
-
return _this.uniforms.illuminationCoefficient;
|
|
192
|
-
},
|
|
193
|
-
cloudSeed: function cloudSeed() {
|
|
194
|
-
return _this.uniforms.cloudSeed;
|
|
195
|
-
},
|
|
196
|
-
cloudType: function cloudType() {
|
|
197
|
-
return _this.uniforms.cloudType;
|
|
198
|
-
},
|
|
199
|
-
cloudTurbulence: function cloudTurbulence() {
|
|
200
|
-
return _this.uniforms.cloudTurbulence;
|
|
201
|
-
},
|
|
202
|
-
cloudClumping: function cloudClumping() {
|
|
203
|
-
return _this.uniforms.cloudClumping;
|
|
204
|
-
},
|
|
205
|
-
cloudAnvil: function cloudAnvil() {
|
|
206
|
-
return _this.uniforms.cloudAnvil;
|
|
207
|
-
},
|
|
208
|
-
maxVisibleHeight: function maxVisibleHeight() {
|
|
209
|
-
return _this.uniforms.maxVisibleHeight;
|
|
210
|
-
},
|
|
211
|
-
densityMultiplier: function densityMultiplier() {
|
|
212
|
-
return _this.uniforms.densityMultiplier;
|
|
213
|
-
},
|
|
214
|
-
detailStrength: function detailStrength() {
|
|
215
|
-
return _this.uniforms.detailStrength;
|
|
216
|
-
},
|
|
217
|
-
cloudSharpness: function cloudSharpness() {
|
|
218
|
-
return _this.uniforms.cloudSharpness;
|
|
219
|
-
},
|
|
220
|
-
rainClouds: function rainClouds() {
|
|
221
|
-
return _this.uniforms.rainClouds;
|
|
222
|
-
},
|
|
223
|
-
skyAmbientColor: function skyAmbientColor() {
|
|
224
|
-
return new Cesium.Cartesian3(_this.skyAmbientColor3.r, _this.skyAmbientColor3.g, _this.skyAmbientColor3.b);
|
|
225
|
-
},
|
|
226
|
-
groundAmbientColor: function groundAmbientColor() {
|
|
227
|
-
return new Cesium.Cartesian3(_this.groundAmbientColor3.r, _this.groundAmbientColor3.g, _this.groundAmbientColor3.b);
|
|
228
|
-
}
|
|
229
|
-
},
|
|
230
|
-
forcePowerOfTwo: true,
|
|
231
|
-
fragmentShader: shader
|
|
232
|
-
});
|
|
233
|
-
map.scene.postProcessStages.add(this.postProcessStage);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* 创建体积云的着色器代码
|
|
238
|
-
*
|
|
239
|
-
* 生成包含体积云渲染算法的完整GLSL着色器代码。
|
|
240
|
-
* 包括云密度计算、光照模型、阴影计算、相位函数等关键算法。
|
|
241
|
-
*
|
|
242
|
-
* @private
|
|
243
|
-
* @returns {string} 包含完整体积云渲染算法的GLSL着色器代码
|
|
244
|
-
*/
|
|
245
|
-
}, {
|
|
246
|
-
key: "_createShader",
|
|
247
|
-
value: function _createShader() {
|
|
248
|
-
return "\n precision highp float;\n uniform float realPlanetRadius;\n uniform vec3 windVector;\n uniform float cloudCover;\n uniform float cloudHeight;\n uniform float cloudThickness;\n uniform float absoluteMaxDistance;\n uniform float absorption;\n uniform float windSpeedRatio;\n uniform float scatteringCoefficient;\n uniform float illuminationCoefficient;\n\n const float PI = 3.14159265359;\n const float TWO_PI = 6.28318530718;\n const float FOUR_PI = 12.5663706144;\n float cloudTop;\n\n #define CLOUDS_MAX_LOD 1\n #define CLOUDS_MARCH_STEP 120.0\n #define CLOUDS_DENS_MARCH_STEP 60.0\n #define MAXIMUM_CLOUDS_STEPS 256\n\n // \u4F53\u79EF\u4ECB\u8D28\u6838\u5FC3\u53C2\u6570\n uniform float cloudSeed;\n uniform float cloudType; // 0-1: \u5C42\u4E91\u5230\u79EF\u4E91\n uniform float cloudTurbulence; // \u6E4D\u6D41\u5F3A\u5EA6\n uniform float cloudClumping; // \u56E2\u5757\u7A0B\u5EA6\n uniform float cloudAnvil; // \u7827\u72B6\u4E91\u7279\u5F81\n uniform float maxVisibleHeight; // \u6700\u5927\u53EF\u89C6\u9AD8\u5EA6\n uniform vec3 skyAmbientColor;\n uniform vec3 groundAmbientColor;\n\n // ===== \u65B0\u589E\u7684\u4F53\u79EF\u4ECB\u8D28\u53C2\u6570 =====\n uniform float densityMultiplier; // \u5BC6\u5EA6\u500D\u589E\u5668\n uniform float detailStrength; // \u7EC6\u8282\u5F3A\u5EA6\n uniform float cloudSharpness; // \u4E91\u8FB9\u754C\u9510\u5EA6\n uniform float rainClouds; // \u96E8\u4E91\u7279\u5F81\n\n // \u5C04\u7EBF\u4E0E\u7403\u4F53\u76F8\u4EA4\n vec2 raySphereIntersect(vec3 r0, vec3 rd, float sr) {\n float a = dot(rd, rd);\n float b = 2.0 * dot(rd, r0);\n float c = dot(r0, r0) - (sr * sr);\n float d = (b * b) - 4.0 * a * c;\n\n if (d < 0.0) return vec2(-1.0, -1.0);\n float squaredD = sqrt(d);\n\n return vec2((-b - squaredD) / (2.0 * a), (-b + squaredD) / (2.0 * a));\n }\n\n float hash12(vec2 p) {\n vec3 p3 = fract(vec3(p.xyx) * .1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n float saturate(float value) {\n return clamp(value, 0.0, 1.0);\n }\n\n float isotropic() {\n return 0.07957747154594767;\n }\n\n // HG\u76F8\u4F4D\u51FD\u6570\n float HenyeyGreenstein(float cosTheta, float g) {\n float g2 = g * g;\n float denominator = 4.0 * PI * pow(1.0 + g2 - 2.0 * g * cosTheta, 1.5);\n return (1.0 - g2) / max(denominator, 0.0001);\n }\n\n // \u6539\u8FDB\u7684\u76F8\u4F4D\u51FD\u6570 - \u66F4\u597D\u7684\u80CC\u5149\u6563\u5C04\n float improvedPhase(float cosTheta) {\n // \u4E3B\u524D\u5411\u6563\u5C04\u74E3 - \u9002\u5EA6\u6291\u5236\n float forwardLobe = HenyeyGreenstein(cosTheta, 0.4) * 0.4;\n\n // \u589E\u5F3A\u7684\u80CC\u5149\u6563\u5C04\u74E3 - \u63D0\u5347\u80CC\u5149\u4EAE\u5EA6\n float backwardLobe = HenyeyGreenstein(cosTheta, -0.3) * 0.4;\n\n // \u5404\u5411\u540C\u6027\u57FA\u7840\u6563\u5C04\n float isotropicPart = isotropic() * 0.2;\n\n return forwardLobe + backwardLobe + isotropicPart;\n }\n // ===== \u8865\u5168\u7684\u4F53\u79EF\u4ECB\u8D28\u5BC6\u5EA6\u51FD\u6570 =====\n // \u67CF\u6797\u566A\u58F0\u51FD\u6570\n vec4 permute(vec4 x) { return mod(((x*34.0)+1.0)*x, 289.0); }\n vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }\n\n float perlinNoise(vec3 P) {\n vec3 i0 = floor(P);\n vec3 f0 = fract(P);\n vec3 f = f0 * f0 * (3.0 - 2.0 * f0);\n vec4 ix = vec4(i0.x, i0.x + 1.0, i0.x, i0.x + 1.0);\n vec4 iy = vec4(i0.y, i0.y, i0.y + 1.0, i0.y + 1.0);\n vec4 iz0 = vec4(i0.z);\n vec4 iz1 = iz0 + 1.0;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 / 7.0;\n vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5;\n gx0 = fract(gx0) - 0.5;\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 / 7.0;\n vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5;\n gx1 = fract(gx1) - 0.5;\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x, gy0.x, gz0.x);\n vec3 g100 = vec3(gx0.y, gy0.y, gz0.y);\n vec3 g010 = vec3(gx0.z, gy0.z, gz0.z);\n vec3 g110 = vec3(gx0.w, gy0.w, gz0.w);\n vec3 g001 = vec3(gx1.x, gy1.x, gz1.x);\n vec3 g101 = vec3(gx1.y, gy1.y, gz1.y);\n vec3 g011 = vec3(gx1.z, gy1.z, gz1.z);\n vec3 g111 = vec3(gx1.w, gy1.w, gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x; g010 *= norm0.y;\n g100 *= norm0.z; g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x; g011 *= norm1.y;\n g101 *= norm1.z; g111 *= norm1.w;\n\n float n000 = dot(g000, f0);\n float n100 = dot(g100, f0 - vec3(1.0, 0.0, 0.0));\n float n010 = dot(g010, f0 - vec3(0.0, 1.0, 0.0));\n float n110 = dot(g110, f0 - vec3(1.0, 1.0, 0.0));\n float n001 = dot(g001, f0 - vec3(0.0, 0.0, 1.0));\n float n101 = dot(g101, f0 - vec3(1.0, 0.0, 1.0));\n float n011 = dot(g011, f0 - vec3(0.0, 1.0, 1.0));\n float n111 = dot(g111, f0 - vec3(1.0, 1.0, 1.0));\n\n vec4 n_z0 = mix(vec4(n000, n100, n010, n110),\n vec4(n001, n101, n011, n111), f.z);\n vec2 n_z1 = mix(n_z0.xy, n_z0.zw, f.y);\n float n = mix(n_z1.x, n_z1.y, f.x);\n\n return 2.2 * n;\n }\n // FBM\u51FD\u6570\n float fBm(vec3 p, int octaves, float persistence, float lacunarity) {\n float value = 0.0;\n float amplitude = 1.0;\n float frequency = 1.0;\n float maxValue = 0.0;\n\n for (int i = 0; i < octaves; i++) {\n value += amplitude * perlinNoise(p * frequency);\n maxValue += amplitude;\n amplitude *= persistence;\n frequency *= lacunarity;\n }\n\n return value / maxValue;\n }\n // \u57DF\u626D\u66F2\u566A\u58F0\n float domainWarpedNoise(vec3 p, float intensity) {\n vec3 q = vec3(\n perlinNoise(p),\n perlinNoise(p + vec3(123.4, 234.5, 345.6)),\n perlinNoise(p + vec3(234.5, 345.6, 456.7))\n );\n vec3 r = vec3(\n perlinNoise(p + 1.0 * q + vec3(123.4, 234.5, 345.6)),\n perlinNoise(p + 1.0 * q + vec3(234.5, 345.6, 456.7)),\n perlinNoise(p + 1.0 * q + vec3(345.6, 456.7, 567.8))\n );\n return perlinNoise(p + intensity * r);\n }\n\n // Worley\u566A\u58F0\n float worleyNoise(vec3 p, float scale) {\n vec3 i = floor(p * scale);\n vec3 f = fract(p * scale);\n\n float minDist1 = 1.0;\n float minDist2 = 1.0;\n\n for (int x = -1; x <= 1; x++) {\n for (int y = -1; y <= 1; y++) {\n for (int z = -1; z <= 1; z++) {\n vec3 neighbor = vec3(float(x), float(y), float(z));\n vec3 random = fract(sin(dot(i + neighbor, vec3(127.1, 311.7, 74.7))) *\n vec3(43758.5453, 22578.1459, 19632.7411));\n vec3 point = neighbor + random - f;\n float dist = length(point);\n\n if (dist < minDist1) {\n minDist2 = minDist1;\n minDist1 = dist;\n } else if (dist < minDist2) {\n minDist2 = dist;\n }\n }\n }\n }\n\n return minDist2 - minDist1;\n }\n // \u4E91\u5C42\u9AD8\u5EA6\u5206\u5E03\u51FD\u6570\n float cloudHeightProfile(float heightRatio, float cloudType) {\n // \u5C42\u4E91 - \u5747\u5300\u5206\u5E03\n if (cloudType < 0.3) {\n return 1.0;\n }\n // \u79EF\u4E91 - \u4E2D\u95F4\u539A\uFF0C\u4E0A\u4E0B\u8584\n else if (cloudType < 0.7) {\n float profile = 1.0 - 4.0 * pow(heightRatio - 0.5, 2.0);\n return max(profile, 0.1);\n }\n // \u7827\u72B6\u4E91 - \u4E0A\u90E8\u6269\u5C55\n else {\n float anvilProfile = 1.0 - pow(heightRatio, 2.0);\n return max(anvilProfile, 0.2);\n }\n }\n\n // \u96E8\u4E91\u5BC6\u5EA6\u7279\u5F81\n float rainCloudDensity(float baseDensity, float heightRatio, float rainFactor) {\n if (rainFactor < 0.1) return baseDensity;\n\n // \u96E8\u4E91\u5E95\u90E8\u66F4\u5BC6\u96C6\n float rainProfile = 1.0 + rainFactor * (1.0 - heightRatio) * 2.0;\n return baseDensity * rainProfile;\n }\n // ===== \u8865\u5168\u7684\u4F53\u79EF\u4ECB\u8D28\u5149\u7167\u6A21\u578B =====\n\n const float preBaseScale = 0.0003;\n const float preFineScale = 0.0003 * 16.0;\n float baseScale = 0.0003;\n // ===== \u8865\u5168\u7684\u4E91\u6735\u5BC6\u5EA6\u51FD\u6570 =====\n float cloudDensity(vec3 p, vec3 windVector, inout float heightRatio) {\n float finalCoverage = cloudCover;\n if (finalCoverage <= 0.001) {\n return 0.0;\n }\n\n float height = length(p) - realPlanetRadius;\n heightRatio = clamp((height - cloudHeight) / cloudThickness, 0.0, 1.0);\n\n // \u57FA\u7840\u9AD8\u5EA6\u56E0\u5B50\n float hLower = cloudHeight;\n float hUpper = cloudHeight + cloudThickness;\n float heightFactor = smoothstep(hLower, hLower + 0.2 * cloudThickness, height) *\n (1.0 - smoothstep(hUpper - 0.2 * cloudThickness, hUpper, height));\n\n vec3 seedOffset = vec3(cloudSeed * 100.0, 0.0, cloudSeed * 50.0);\n vec3 animatedPos = p + windVector * windSpeedRatio + seedOffset;\n\n // \u57FA\u7840\u5F62\u72B6\u566A\u58F0\n float baseShape = fBm(animatedPos * preBaseScale, 4, 0.5, 2.0);\n\n // \u57DF\u626D\u66F2\u589E\u52A0\u7EC6\u8282\n float warpIntensity = mix(0.1, 0.8, cloudTurbulence);\n float baseShape0 = fBm(animatedPos * preBaseScale, 3, 0.5, 2.0);\n float warped = domainWarpedNoise(animatedPos * (preBaseScale * 0.5), warpIntensity * 0.7);\n baseShape = mix(baseShape0, warped, 0.25);\n\n // Worley\u566A\u58F0\u521B\u5EFA\u56E2\u5757\u7ED3\u6784\n float worleyScale = mix(0.0002, 0.0008, cloudClumping);\n float worleyPattern = worleyNoise(animatedPos, worleyScale);\n worleyPattern = saturate(worleyPattern * 1.2 + 0.7);\n\n // \u6839\u636E\u4E91\u7C7B\u578B\u6DF7\u5408\n float cumulusFactor = cloudType;\n float stratusFactor = 1.0 - cloudType;\n\n float cumulusShape = baseShape * worleyPattern;\n cumulusShape = mix(cumulusShape, baseShape, 0.3);\n\n float stratusShape = baseShape * 0.8;\n\n float cloudPattern = mix(stratusShape, cumulusShape, cumulusFactor);\n\n // \u7827\u72B6\u4E91\u7279\u5F81\n float anvilFactor = cloudAnvil * pow(heightRatio, 2.0);\n if (anvilFactor > 0.01) {\n float anvilNoise = fBm(animatedPos * baseScale * 0.3, 3, 0.6, 2.0);\n cloudPattern = mix(cloudPattern, anvilNoise, anvilFactor * 0.5);\n }\n\n // \u7EC6\u8282\u4FB5\u8680\n float fineScale = baseScale * 16.0;\n float fineDetail = fBm(animatedPos * fineScale, 2, 0.7, 2.5);\n float erosionIntensity = mix(0.1, 0.4, cumulusFactor) * detailStrength;\n float erosion = fineDetail * erosionIntensity;\n\n // \u57FA\u7840\u5BC6\u5EA6\u8BA1\u7B97\n float baseDensity = cloudPattern - erosion;\n float coverageThreshold = mix(0.1, -0.3, cloudCover * (0.5 + cumulusFactor * 0.5));\n float dens = saturate(baseDensity - coverageThreshold);\n\n // \u9510\u5316\u8FB9\u754C\n float sharpness = mix(1.2, 2.0, cumulusFactor) * cloudSharpness;\n dens = pow(dens, sharpness);\n\n // \u5E94\u7528\u9AD8\u5EA6\u5206\u5E03\n float verticalProfile = cloudHeightProfile(heightRatio, cloudType);\n dens *= heightFactor * cloudCover * verticalProfile;\n\n // \u5E94\u7528\u96E8\u4E91\u7279\u5F81\n dens = rainCloudDensity(dens, heightRatio, rainClouds);\n\n // \u6700\u7EC8\u5BC6\u5EA6\u8C03\u6574\n dens *= densityMultiplier;\n dens = max(dens, 0.0);\n\n return dens;\n }\n float cloudDensityFast(vec3 p)\n {\n float h = length(p) - realPlanetRadius;\n float heightRatio = clamp((h - cloudHeight) / cloudThickness, 0.0, 1.0);\n\n // \u53EA\u505A\u6700\u57FA\u7840\u7684 shape\uFF0C\u4E0D\u505A Worley\u3001\u4E0D\u505A domain warp\uFF0C\u4E0D\u505A erosion\n float n = perlinNoise(p * 0.00035);\n n = n * n * 1.2; // \u7B80\u5355\u5F3A\u5316\n\n // \u9AD8\u5EA6\u5206\u5E03\n float profile = cloudHeightProfile(heightRatio, cloudType);\n\n return saturate(n * profile * cloudCover * densityMultiplier * 0.8);\n }\n // \u4F53\u79EF\u9634\u5F71\u51FD\u6570 - \u6A21\u62DF\u5149\u7EBF\u5728\u4E91\u5185\u7684\u8870\u51CF\n float volumetricShadow(vec3 p, vec3 lightDir, float stepSize, int steps) {\n float shadow = 1.0;\n vec3 currentPos = p;\n\n for (int i = 0; i < steps; i++) {\n currentPos += lightDir * stepSize;\n float heightRatioDummy;\n float shadowDensity = cloudDensityFast(currentPos);\n\n // \u6307\u6570\u8870\u51CF\u6A21\u62DF\u5149\u7EBF\u5728\u4E91\u5185\u7684\u5438\u6536\n shadow *= exp(-shadowDensity * stepSize * absorption * 2.0);\n\n if (shadow < 0.01) break;\n }\n\n return shadow;\n }\n\n // \u6539\u8FDB\u7684\u73AF\u5883\u5149\u7167\u51FD\u6570\n vec3 calculateAmbientLight(float heightRatio, float dens, float dotLightRay) {\n // \u57FA\u7840\u73AF\u5883\u5149 - \u6839\u636E\u9AD8\u5EA6\u6DF7\u5408\u5730\u9762\u548C\u5929\u7A7A\u989C\u8272\n vec3 baseAmbient = mix(groundAmbientColor, skyAmbientColor, heightRatio);\n\n // \u5BC6\u5EA6\u76F8\u5173\u73AF\u5883\u5149 - \u8584\u4E91\u533A\u57DF\u66F4\u4EAE\n float densityFactor = 1.0 - exp(-dens * 2.0);\n baseAmbient *= (1.0 + densityFactor * 0.5);\n\n // \u80CC\u5149\u589E\u5F3A - \u5F53\u89C6\u7EBF\u4E0E\u5149\u6E90\u65B9\u5411\u63A5\u8FD1\u53CD\u5411\u65F6\n float backLightFactor = smoothstep(-0.8, -0.2, dotLightRay);\n vec3 backLightBoost = skyAmbientColor * backLightFactor * 0.8;\n\n return baseAmbient + backLightBoost;\n }\n\n // \u6539\u8FDB\u7684\u591A\u6563\u5C04\u6A21\u62DF\n float calculateMultiScatter(float dens, float heightRatio, float dotLightRay) {\n // \u57FA\u7840\u591A\u6563\u5C04\n float baseMultiScatter = pow(1.0 - exp(-dens * 1.5), 1.5) * 0.4;\n\n // \u80CC\u5149\u533A\u57DF\u989D\u5916\u591A\u6563\u5C04\n float backScatterBoost = smoothstep(-0.6, 0.0, dotLightRay) * 0.3;\n\n // \u9AD8\u7A7A\u533A\u57DF\u6563\u5C04\u589E\u5F3A\n float heightScatter = heightRatio * 0.2;\n\n return baseMultiScatter + backScatterBoost + heightScatter;\n }\n\n float distanceQualityR = 0.00005;\n float minDistance = 10.0;\n\n // ===== \u8865\u5168\u7684\u4F53\u79EF\u6E32\u67D3\u6838\u5FC3\u51FD\u6570 =====\n vec4 calculate_clouds(vec3 start, vec3 dir, float maxDistance, vec3 light_dir, vec3 wind) {\n vec4 cloud = vec4(0.0, 0.0, 0.0, 1.0);\n float cloudTopRadius = realPlanetRadius + cloudHeight + cloudThickness;\n vec2 toTop = raySphereIntersect(start, dir, cloudTopRadius);\n float cloudBaseRadius = realPlanetRadius + cloudHeight;\n vec2 toCloudBase = raySphereIntersect(start, dir, cloudBaseRadius);\n float startHeight = length(start) - realPlanetRadius;\n\n float tmin = 0.0;\n float tmax = maxDistance;\n cloudTop = cloudHeight + cloudThickness;\n\n // \u8BA1\u7B97\u5C04\u7EBF\u4E0E\u4E91\u5C42\u7684\u4EA4\u70B9\n if (startHeight > cloudTop) {\n if (toTop.x < 0.0) return vec4(0.0);\n tmin = toTop.x;\n if (toCloudBase.x > 0.0) {\n tmax = min(toCloudBase.x, maxDistance);\n } else {\n tmax = min(toTop.y, maxDistance);\n }\n } else if (startHeight < cloudHeight) {\n tmin = toCloudBase.y;\n tmax = min(toTop.y, maxDistance);\n } else {\n if (toCloudBase.x > 0.0) {\n tmax = min(toCloudBase.x, maxDistance);\n } else {\n tmax = min(toTop.y, maxDistance);\n }\n }\n\n tmin = max(tmin, minDistance);\n tmax = min(tmax, absoluteMaxDistance);\n\n if (tmax < tmin) return vec4(0.0);\n\n float rayLength = tmax - tmin;\n float thicknessFactor = cloudThickness / 500.0;\n float baseStepSize = mix(CLOUDS_MARCH_STEP, CLOUDS_MARCH_STEP * 1.5, saturate(thicknessFactor - 1.0));\n\n float maxEffectiveSteps = min(float(MAXIMUM_CLOUDS_STEPS), 200.0 + cloudThickness * 0.2);\n float adaptiveSteps = min(maxEffectiveSteps, rayLength / baseStepSize);\n\n float longMarchStep = rayLength / adaptiveSteps;\n longMarchStep = max(longMarchStep, baseStepSize);\n\n float shortMarchStep = CLOUDS_DENS_MARCH_STEP;\n float numberApproachSteps = (longMarchStep / shortMarchStep) * 1.5;\n\n float distance = tmin;\n\n float jitter = hash12(gl_FragCoord.xy) * 1.2;\n distance += jitter * longMarchStep;\n\n bool inCloud = false;\n float stepsBeforeExitingCloud = 0.0;\n int actualSteps = 0;\n\n // \u9884\u8BA1\u7B97\u5149\u7167\u53C2\u6570\n vec3 sunColor = normalize(czm_lightColor);\n // ===== \u8865\u5168\u7684\u4F53\u79EF\u4ECB\u8D28\u5149\u7167\u8BA1\u7B97 =====\n float dotLightRay = dot(dir, light_dir);\n for (int i = 0; i < MAXIMUM_CLOUDS_STEPS; i++) {\n if (distance > tmax) break;\n if (actualSteps > int(adaptiveSteps)) break;\n\n vec3 position = start + dir * distance;\n float heightRatio;\n float marchStep = inCloud ? shortMarchStep : longMarchStep;\n float dens = cloudDensity(position, wind, heightRatio);\n\n // \u7A7A\u7A7A\u95F4\u8DF3\u8FC7\u4F18\u5316\n if (dens < 0.005) {\n if (inCloud) {\n if (stepsBeforeExitingCloud > 0.0) {\n stepsBeforeExitingCloud -= 1.0;\n } else {\n inCloud = false;\n marchStep = longMarchStep * 2.0;\n }\n }\n distance += marchStep;\n actualSteps++;\n continue;\n }\n\n // \u8FDB\u5165\u4E91\u5C42\u68C0\u6D4B\n if (!inCloud) {\n inCloud = true;\n stepsBeforeExitingCloud = numberApproachSteps;\n distance = max(tmin, distance - longMarchStep);\n continue;\n }\n\n // \u4F53\u79EF\u9634\u5F71\n float shadow = volumetricShadow(position, light_dir, shortMarchStep * 2.0, 8);\n\n // \u4F7F\u7528\u6539\u8FDB\u7684\u76F8\u4F4D\u51FD\u6570\n float sunPhase = improvedPhase(dotLightRay);\n float ambientPhase = isotropic();\n\n // \u9633\u5149\u5F3A\u5EA6\n float sunIntensity = smoothstep(0.0, 0.4, 1.0 - dens) * 0.6 * shadow;\n\n // \u73AF\u5883\u5149\u7167\n vec3 ambientLight = calculateAmbientLight(heightRatio, dens, dotLightRay);\n float ambientIntensity = 2.5;\n\n // \u591A\u6563\u5C04\n float multiScatter = calculateMultiScatter(dens, heightRatio, dotLightRay);\n\n // \u76F4\u63A5\u5149\u7167\n vec3 directLight = sunPhase * sunColor * sunIntensity * 0.5;\n\n // \u73AF\u5883\u5149\u7167\u6563\u5C04\n vec3 ambientScattering = ambientPhase * ambientLight * ambientIntensity * (1.0 + multiScatter);\n\n // \u4FA7\u5149\u548C\u80CC\u5149\u589E\u5F3A\n float sideBackLight = smoothstep(-0.5, 0.3, dotLightRay) * 0.4;\n ambientScattering += ambientLight * sideBackLight * multiScatter;\n\n // \u7EC4\u5408\u5149\u7167\n vec3 stepScattering = cloud.a * scatteringCoefficient * marchStep *\n (directLight + ambientScattering);\n\n // \u80FD\u91CF\u9650\u5236\n float maxStepBrightness = 0.25;\n stepScattering = min(stepScattering, vec3(maxStepBrightness));\n\n cloud.rgb += stepScattering;\n\n // \u900F\u660E\u5EA6\u8BA1\u7B97 - \u4F53\u79EF\u4ECB\u8D28\u7684\u6D88\u5149\n float extinctionCoeff = absorption * (0.8 + 0.2 * dens) * (0.6 + dens*0.4);\n cloud.a *= exp(-extinctionCoeff * marchStep);\n\n // \u63D0\u524D\u7EC8\u6B62\n if (cloud.a < 0.01) {\n cloud.a = 0.0;\n break;\n }\n\n distance += marchStep;\n actualSteps++;\n }\n\n // \u8272\u8C03\u6620\u5C04\n cloud.rgb = cloud.rgb / (cloud.rgb + vec3(0.8));\n\n // \u4EAE\u5EA6\u9650\u5236\n float maxChannel = max(cloud.rgb.r, max(cloud.rgb.g, cloud.rgb.b));\n if (maxChannel > 0.7) {\n float compression = smoothstep(0.7, 1.0, maxChannel) * 0.3;\n cloud.rgb = mix(cloud.rgb, cloud.rgb * (1.0 - compression), compression);\n }\n\n return vec4(cloud.rgb, 1.0 - cloud.a);\n }\n\n uniform sampler2D colorTexture;\n in vec2 v_textureCoordinates;\n\n void main() {\n vec4 color = texture(colorTexture, v_textureCoordinates);\n\n // \u8D85\u8FC7\u6700\u5927\u53EF\u89C6\u9AD8\u5EA6\u5219\u8DF3\u8FC7\u4E91\u6E32\u67D3\n float viewerHeight = length(czm_viewerPositionWC) - realPlanetRadius;\n if (viewerHeight > maxVisibleHeight) {\n out_FragColor = color;\n return;\n }\n // \u63A5\u8FD1\u6700\u5927\u53EF\u89C6\u9AD8\u5EA6\u65F6\u5E73\u6ED1\u6DE1\u51FA\n float heightFade = 1.0 - smoothstep(maxVisibleHeight - 1000.0, maxVisibleHeight, viewerHeight);\n\n vec4 rawDepthColor = texture(czm_globeDepthTexture, v_textureCoordinates);\n\n float depth = czm_unpackDepth(rawDepthColor);\n if (depth == 0.0) {\n depth = 1.0;\n }\n\n vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord.xy, depth);\n vec4 worldCoordinate = czm_inverseView * positionEC;\n vec3 vWorldPosition = worldCoordinate.xyz / worldCoordinate.w;\n vec3 posToEye = vWorldPosition - czm_viewerPositionWC;\n vec3 direction = normalize(posToEye);\n vec3 lightDirection = normalize(czm_sunPositionWC);\n float distance = length(posToEye);\n\n if (depth == 1.0) {\n distance = absoluteMaxDistance;\n }\n\n vec3 wind = windVector * czm_frameNumber * windSpeedRatio;\n vec4 clouds = calculate_clouds(\n czm_viewerPositionWC,\n direction,\n distance,\n lightDirection,\n wind\n );\n\n color = mix(color, clouds, clouds.a * heightFade);\n out_FragColor = color;\n }\n ";
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* 获取真实星球半径 - 与原函数逻辑一致
|
|
253
|
-
* @private
|
|
254
|
-
* @returns {number} 星球半径
|
|
255
|
-
*/
|
|
256
|
-
}, {
|
|
257
|
-
key: "_getRealPlanetRadius",
|
|
258
|
-
value: function _getRealPlanetRadius() {
|
|
259
|
-
var _map$scene;
|
|
260
|
-
var map = this.getMap();
|
|
261
|
-
if (map !== null && map !== void 0 && (_map$scene = map.scene) !== null && _map$scene !== void 0 && _map$scene.globe) {
|
|
262
|
-
return map.scene.globe.ellipsoid.maximumRadius;
|
|
263
|
-
}
|
|
264
|
-
return 6378137.0; // 默认地球赤道半径
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* 更新体积云参数 - 确保所有原函数中的参数都能正确更新
|
|
269
|
-
* @param {Object} params - 要更新的参数对象
|
|
270
|
-
*/
|
|
271
|
-
}, {
|
|
272
|
-
key: "updateParameters",
|
|
273
|
-
value: function updateParameters(params) {
|
|
274
|
-
if (!params || _typeof(params) !== 'object') return this;
|
|
275
|
-
this.uniforms = this._buildUniforms(params, this.uniforms);
|
|
276
|
-
this._syncAmbientColors();
|
|
277
|
-
return this;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* 将十六进制颜色转换为RGB对象
|
|
282
|
-
* @private
|
|
283
|
-
* @param {string} hex - 十六进制颜色字符串
|
|
284
|
-
* @returns {Object} RGB对象
|
|
285
|
-
*/
|
|
286
|
-
}, {
|
|
287
|
-
key: "_hexToRgb",
|
|
288
|
-
value: function _hexToRgb(hex, fallbackHex) {
|
|
289
|
-
var normalizedHex = hex.replace('#', '').trim();
|
|
290
|
-
var safeHex = /^[0-9a-fA-F]{6}$/.test(normalizedHex) ? normalizedHex : fallbackHex.replace('#', '');
|
|
291
|
-
|
|
292
|
-
// 解析RGB值
|
|
293
|
-
var r = parseInt(safeHex.substring(0, 2), 16) / 255;
|
|
294
|
-
var g = parseInt(safeHex.substring(2, 4), 16) / 255;
|
|
295
|
-
var b = parseInt(safeHex.substring(4, 6), 16) / 255;
|
|
296
|
-
return {
|
|
297
|
-
r: r,
|
|
298
|
-
g: g,
|
|
299
|
-
b: b
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* 重置体积云参数到初始状态
|
|
305
|
-
*/
|
|
306
|
-
}, {
|
|
307
|
-
key: "resetParameters",
|
|
308
|
-
value: function resetParameters() {
|
|
309
|
-
this.uniforms = this._cloneUniforms(this.originalOptions);
|
|
310
|
-
this._syncAmbientColors();
|
|
311
|
-
return this;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* 显示体积云
|
|
316
|
-
*
|
|
317
|
-
* 启用后处理阶段,使体积云在场景中可见。
|
|
318
|
-
* 这是一个轻量级操作,只是启用现有的后处理效果。
|
|
319
|
-
*/
|
|
320
|
-
}, {
|
|
321
|
-
key: "show",
|
|
322
|
-
value: function show() {
|
|
323
|
-
if (this.postProcessStage) {
|
|
324
|
-
this.postProcessStage.enabled = true;
|
|
325
|
-
}
|
|
326
|
-
return this;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
/**
|
|
330
|
-
* 隐藏体积云
|
|
331
|
-
*
|
|
332
|
-
* 禁用后处理阶段,从场景中移除体积云效果。
|
|
333
|
-
* 这是一个轻量级操作,不会销毁资源,可以随时通过show()重新启用。
|
|
334
|
-
*/
|
|
335
|
-
}, {
|
|
336
|
-
key: "hide",
|
|
337
|
-
value: function hide() {
|
|
338
|
-
if (this.postProcessStage) {
|
|
339
|
-
this.postProcessStage.enabled = false;
|
|
340
|
-
}
|
|
341
|
-
return this;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
/**
|
|
345
|
-
* 移除体积云并清理资源
|
|
346
|
-
*
|
|
347
|
-
* 从场景中完全移除体积云后处理阶段并释放相关资源。
|
|
348
|
-
* 调用此方法后,必须重新创建新的实例才能再次使用体积云功能。
|
|
349
|
-
*/
|
|
350
|
-
}, {
|
|
351
|
-
key: "destroy",
|
|
352
|
-
value: function destroy() {
|
|
353
|
-
var _map$scene2;
|
|
354
|
-
var map = this.getMap();
|
|
355
|
-
if (this.postProcessStage && map !== null && map !== void 0 && (_map$scene2 = map.scene) !== null && _map$scene2 !== void 0 && _map$scene2.postProcessStages.contains(this.postProcessStage)) {
|
|
356
|
-
map.scene.postProcessStages.remove(this.postProcessStage);
|
|
357
|
-
this.postProcessStage = null;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
* 获取当前云参数
|
|
363
|
-
*
|
|
364
|
-
* 返回当前体积云系统的所有配置参数的副本。
|
|
365
|
-
* 可以用于检查当前设置或保存配置以便稍后恢复。
|
|
366
|
-
*
|
|
367
|
-
* @returns {Object} 当前云参数对象的副本,包含所有19个可配置参数
|
|
368
|
-
*/
|
|
369
|
-
}, {
|
|
370
|
-
key: "getParameters",
|
|
371
|
-
value: function getParameters() {
|
|
372
|
-
return this._cloneUniforms(this.uniforms);
|
|
373
|
-
}
|
|
374
|
-
}]);
|
|
375
|
-
return GlobalVolumetricCloud;
|
|
376
|
-
}();
|
|
377
|
-
export default GlobalVolumetricCloud;
|
|
1
|
+
var _0x1708de=_0xa97a;(function(_0x434a38,_0x596d27){var _0x284b9c=_0xa97a,_0x433422=_0x434a38();while(!![]){try{var _0x1bf23e=parseInt(_0x284b9c(0x128))/0x1*(parseInt(_0x284b9c(0x10d))/0x2)+parseInt(_0x284b9c(0xf7))/0x3*(-parseInt(_0x284b9c(0xfc))/0x4)+parseInt(_0x284b9c(0xff))/0x5+parseInt(_0x284b9c(0x13c))/0x6+parseInt(_0x284b9c(0x116))/0x7+parseInt(_0x284b9c(0x120))/0x8*(-parseInt(_0x284b9c(0x11f))/0x9)+-parseInt(_0x284b9c(0x12c))/0xa*(parseInt(_0x284b9c(0x129))/0xb);if(_0x1bf23e===_0x596d27)break;else _0x433422['push'](_0x433422['shift']());}catch(_0x8e9558){_0x433422['push'](_0x433422['shift']());}}}(_0x5b0b,0x6ecb2));function _0x5b0b(){var _0x182d37=['z2v0twfW','z2v0ugfYyw1LDgvYCW','C2nLBMu','x2HLEfrVuMDI','x21HCenVBNrLEhq','y2XVDwrdB3zLCG','zw51BwvYywjSzq','AwXSDw1PBMf0Aw9Uq29LzMzPy2LLBNq','ChvZAa','BgvUz3rO','zNvUy3rPB24','zgv0ywLSu3rYzw5NDgG','Bwf4vMLZAwjSzuHLAwDODa','ntiXmdK0nKr6CurAza','y2XVDwruDxjIDwXLBMnL','q2fYDgvZAwfUmW','z2v0t3DUuhjVCgvYDhLtEw1IB2XZ','Bwf4Aw11BvjHzgL1CW','z3jVDw5Kqw1IAwvUDenVBg9Y','x2DLDfjLywXqBgfUzxrsywrPDxm','y2XVDwrizwLNAhq','y2XVDwrtzwvK','ndyXnZuXsKHtu0zv','q2fUBM90ignHBgWGysbJBgfZCYbHCYbHigz1BMn0Aw9U','C3LTyM9S','qeb0B1bYAw1PDgL2zsbTDxn0ihjLDhvYBIbHihbYAw1PDgL2zsb2ywX1zs4','B2jQzwn0','mJbHDu1yrey','y3vYCMvUDfDPBMrwzwn0B3jxqW','Dw5PzM9YBxm','mZm0mJu2mhrytKrJtW','y2XVDwruExbL','x2nSB25Lvw5PzM9YBxm','D2LUzfnWzwvKuMf0Aw8','C3vIC3rYAw5N','ywjZB3jWDgLVBG','Cg9ZDfbYB2nLC3ntDgfNzxm','y29UDgfPBNm','A2v5','zgvMyxvSDa','CMfPBKnSB3vKCW','x2j1AwXKvw5PzM9YBxm','x2nYzwf0zvnOywrLCG','DhjPBq','mJq4ntG4zKrLzNno','DxbKyxrLugfYyw1LDgvYCW','C2T5qw1IAwvUDenVBg9YmW','y2XVBMu','y2XVDwrdBhvTCgLUzW','Aw5PDgLHBgL6zq','C3rYAw5N','z2v0t3DUuhjVCgvYDhLezxnJCMLWDg9Y','y2XVDwrbBNzPBa','nJa0mZu5n2ndAgTJAG','CMvWBgfJzq','cIaGicaGicaGicbWCMvJAxnPB24GAgLNAhaGzMXVyxq7cIaGicaGicaGicb1BMLMB3jTigzSB2f0ihjLywXqBgfUzxrsywrPDxm7cIaGicaGicaGicb1BMLMB3jTihzLyZmGD2LUzfzLy3rVCJSkicaGicaGicaGihvUAwzVCM0GzMXVyxqGy2XVDwrdB3zLCJSkicaGicaGicaGihvUAwzVCM0GzMXVyxqGy2XVDwrizwLNAhq7cIaGicaGicaGicb1BMLMB3jTigzSB2f0ignSB3vKvgHPy2TUzxnZoWOGicaGicaGicaGDw5PzM9YBsbMBg9HDcbHyNnVBhv0zu1HEerPC3rHBMnLoWOGicaGicaGicaGDw5PzM9YBsbMBg9HDcbHyNnVCNb0Aw9UoWOGicaGicaGicaGDw5PzM9YBsbMBg9HDcb3Aw5Ku3bLzwrsyxrPBZSkicaGicaGicaGihvUAwzVCM0GzMXVyxqGC2nHDhrLCMLUz0nVzwzMAwnPzw50oWOGicaGicaGicaGDw5PzM9YBsbMBg9HDcbPBgX1BwLUyxrPB25dB2vMzMLJAwvUDdSkcIaGicaGicaGicbJB25ZDcbMBg9HDcbqssa9idmUmtqXntKYnJuZntK7cIaGicaGicaGicbJB25ZDcbMBg9HDcbuv09FueKGpsa2lJi4mZe4ntmWnZe4oWOGicaGicaGicaGy29UC3qGzMXVyxqGrK9vuL9qssa9ideYlJu2nJm3mdyXndq7cIaGicaGicaGicbMBg9HDcbJBg91zfrVCdSkcIaGicaGicaGicaJzgvMAw5Lienmt1veu19nqvHFte9eidekicaGicaGicaGicnKzwzPBMuGq0Xpvurtx01buKnix1nurvaGmtiWlJakicaGicaGicaGicnKzwzPBMuGq0Xpvurtx0rftLnFtufsq0HFu1rfuca2mc4WcIaGicaGicaGicaJzgvMAw5Lie1bweLnvu1Fq0Xpvurtx1nurvbtidi1nGOkicaGicaGicaGic8Vios9K+ENR+s7I+I0QoAGUow/G+wpGUAvSaOGicaGicaGicaGDw5PzM9YBsbMBg9HDcbJBg91zfnLzwq7cIaGicaGicaGicb1BMLMB3jTigzSB2f0ignSB3vKvhLWztSGicaGicaGic8VidaTmtOG5Bgc5lQr5yIW56EV5lQrcIaGicaGicaGicb1BMLMB3jTigzSB2f0ignSB3vKvhvYyNvSzw5JztSGic8VioA5JEA1GEw8UUw6PGOGicaGicaGicaGDw5PzM9YBsbMBg9HDcbJBg91zenSDw1WAw5NoYaGicaVlYdLM6lLNzFNQiVLUQykicaGicaGicaGihvUAwzVCM0GzMXVyxqGy2XVDwrbBNzPBdSGicaGicaGlY8G56cN54Q25lQr54M55B6bcIaGicaGicaGicb1BMLMB3jTigzSB2f0ig1HEfzPC2LIBgvizwLNAhq7ic8VioACGowKP+wpR+INHUMRMow6PGOGicaGicaGicaGDw5PzM9YBsb2zwmZihnREufTyMLLBNrdB2XVCJSkicaGicaGicaGihvUAwzVCM0GDMvJmYbNCM91BMrbBwjPzw50q29SB3i7cGOGicaGicaGicaGlY8Gpt09pt0G5PAW5AkE55Qe5l2t56EV5lUl6lsO5y+c5PwWid09pt09cIaGicaGicaGicb1BMLMB3jTigzSB2f0igrLBNnPDhLnDwX0AxbSAwvYoYaGicaVlYdLR4BLUQBLGi3LOP7LMAGkicaGicaGicaGihvUAwzVCM0GzMXVyxqGzgv0ywLSu3rYzw5NDgG7icaGicaGic8VioE7HUIkGUw8UUw6PGOGicaGicaGicaGDw5PzM9YBsbMBg9HDcbJBg91zfnOyxjWBMvZCZSGicaGicaGlY8G5lQr6l6555wm6zsq5BQMcIaGicaGicaGicb1BMLMB3jTigzSB2f0ihjHAw5dBg91zhm7icaGicaGicaGicaVlYdPM6JKUPhNIBNLVOekcIaGicaGicaGicaVlYdLSitNUR/KUi7NKipKVzpNM7JKUQqkicaGicaGicaGihzLyZiGCMf5u3bOzxjLsw50zxjZzwn0khzLyZmGCJaSihzLyZmGCMqSigzSB2f0ihnYksb7cIaGicaGicaGicaGicaGzMXVyxqGysa9igrVDcHYzcWGCMqPoWOGicaGicaGicaGicaGigzSB2f0igiGpsaYlJaGkIbKB3qOCMqSihiWktSkicaGicaGicaGicaGicbMBg9HDcbJid0Gzg90khiWlcbYmcKGlsaOC3iGkIbZCIK7cIaGicaGicaGicaGicaGzMXVyxqGzca9icHIicOGyIKGlsa0lJaGkIbHicOGyZSkcIaGicaGicaGicaGicaGAwyGkgqGpcaWlJaPihjLDhvYBIb2zwmYkc0XlJaSic0XlJaPoWOGicaGicaGicaGicaGigzSB2f0ihnXDwfYzwreid0GC3fYDcHKktSkcIaGicaGicaGicaGicaGCMv0DxjUihzLyZiOkc1Iic0GC3f1yxjLzeqPic8GkdiUmcaQigePlcaOlwiGkYbZCxvHCMvKrcKGlYaOmI4WicOGysKPoWOGicaGicaGicaGFqOkicaGicaGicaGigzSB2f0igHHC2GXmIH2zwmYihaPihSkicaGicaGicaGicaGicb2zwmZihaZica9igzYywn0khzLyZmOCc54ExGPicOGlJeWmZePoWOGicaGicaGicaGicaGihaZicS9igrVDcHWmYWGCdmUExP4icSGmZmUmZmPoWOGicaGicaGicaGicaGihjLDhvYBIbMCMfJDcGOCdmUEcaRihaZlNKPicOGCdmUEIK7cIaGicaGicaGicb9cGOGicaGicaGicaGzMXVyxqGC2f0DxjHDguOzMXVyxqGDMfSDwuPihSkicaGicaGicaGicaGicbYzxr1CM4Gy2XHBxaODMfSDwuSidaUmcWGms4WktSkicaGicaGicaGih0kcIaGicaGicaGicbMBg9HDcbPC290CM9WAwmOksb7cIaGicaGicaGicaGicaGCMv0DxjUidaUmdC5ntC3ndCXntq1otq3nJC7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8GseFNM7JKVy3LH73MLBakicaGicaGicaGigzSB2f0ieHLBNLLEuDYzwvUC3rLAw4OzMXVyxqGy29ZvgHLDgeSigzSB2f0igCPihSkicaGicaGicaGicaGicbMBg9HDcbNmIa9igCGkIbNoWOGicaGicaGicaGicaGigzSB2f0igrLBM9TAw5HDg9Yid0Gnc4WicOGueKGkIbWB3COms4WicSGzZiGlsaYlJaGkIbNicOGy29ZvgHLDgeSideUnsK7cIaGicaGicaGicaGicaGCMv0DxjUicGXlJaGlsbNmIKGlYbTyxGOzgvUB21PBMf0B3iSidaUmdaWmsK7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8G5Ps56l+B55Qe55U45l2n5yE95PwWic0G5PU05Aw955Qe6iom5ywj5PwJ5BcecIaGicaGicaGicbMBg9HDcbPBxbYB3zLzfbOyxnLkgzSB2f0ignVC1rOzxrHksb7cIaGicaGicaGicaGicaGlY8G5lI75yMn5zcr5PwJ5Bce55oJic0G6ycc5BQM5OQr5yI2cIaGicaGicaGicaGicaGzMXVyxqGzM9YD2fYzeXVyMuGpsbizw55zxLhCMvLBNn0zwLUkgnVC1rOzxrHlcaWlJqPicOGmc40oWOkicaGicaGicaGicaGicaVlYdLOP7LVlRNMOtOG4ZLHyNMLApLSitNK6mGlsdMJ5dLJyFOG4ZLHyNKUQ7LUQykicaGicaGicaGicaGicbMBg9HDcbIywnRD2fYzeXVyMuGpsbizw55zxLhCMvLBNn0zwLUkgnVC1rOzxrHlcaTmc4ZksaQidaUndSkcIaGicaGicaGicaGicaGlY8G5zce5zcr5zcm5OcN5z+656ga5PwJ5BcecIaGicaGicaGicaGicaGzMXVyxqGAxnVDhjVCgLJugfYDca9igLZB3rYB3bPyYGPicOGmc4YoWOkicaGicaGicaGicaGicbYzxr1CM4GzM9YD2fYzeXVyMuGkYbIywnRD2fYzeXVyMuGkYbPC290CM9WAwnqyxj0oWOGicaGicaGicaGFqOGicaGicaGicaGic8Vid09pt09ioIHPEwfQoEAHos9K+ENR+s7I+I0QowVHUw6PUwhVEAvSca9pt09pqOGicaGicaGicaGic8VioAFJ+AEL+wzQUwJSowhVEAvSaOGicaGicaGicaGDMvJncbWzxjTDxrLkhzLyZqGEcKGEYbYzxr1CM4GBw9KkcGOEcOZnc4WksSXlJaPkNGSidi4os4WktSGFqOGicaGicaGicaGDMvJncb0yxLSB3jjBNztCxj0khzLyZqGCIKGEYbYzxr1CM4Gms43oti4ndi5mtqWmde1osaTidaUoduZnZm0nZiWotuZmtqGkIbYoYb9cGOGicaGicaGicaGzMXVyxqGCgvYBgLUtM9PC2uODMvJmYbqksb7cIaGicaGicaGicaGicaGDMvJmYbPmca9igzSB29YkfaPoWOGicaGicaGicaGicaGihzLyZmGzJaGpsbMCMfJDcHqktSkicaGicaGicaGicaGicb2zwmZigyGpsbMmcaQigyWicOGkdmUmcaTidiUmcaQigyWktSkicaGicaGicaGicaGicb2zwm0igL4id0GDMvJncHPmc54lcbPmc54icSGms4WlcbPmc54lcbPmc54icSGms4WktSkicaGicaGicaGicaGicb2zwm0igL5id0GDMvJncHPmc55lcbPmc55lcbPmc55icSGms4WlcbPmc55icSGms4WktSkicaGicaGicaGicaGicb2zwm0igL6mca9ihzLyZqOAtaUEIK7cIaGicaGicaGicaGicaGDMvJncbPEJeGpsbPEJaGkYaXlJa7cGOGicaGicaGicaGicaGihzLyZqGAxH5id0GCgvYBxv0zsHWzxjTDxrLkgL4ksaRigL5ktSkicaGicaGicaGicaGicb2zwm0igL4EtaGpsbWzxjTDxrLkgL4EsaRigL6mcK7cIaGicaGicaGicaGicaGDMvJncbPEhKXid0GCgvYBxv0zsHPEhKGkYbPEJePoWOkicaGicaGicaGicaGicb2zwm0igD4mca9igL4EtaGlYa3lJa7cIaGicaGicaGicaGicaGDMvJncbNEtaGpsbMCMfJDcHMBg9VCIHNEdaPic8GnY4WksaTidaUntSkicaGicaGicaGicaGicbNEdaGpsbMCMfJDcHNEdaPic0Gmc41oWOGicaGicaGicaGicaGihzLyZqGz3OWid0GDMvJncGWlJuPic0GywjZkgD4mcKGlsbHyNmOz3KWktSkicaGicaGicaGicaGicb2zwm0ihn6mca9ihn0zxaOz3OWlcb2zwm0kdaUmcKPoWOGicaGicaGicaGicaGigD4mcaTpsbZEJaGkIaOC3rLCcGWlJaSigD4mcKGlsaWlJuPoWOGicaGicaGicaGicaGigD5mcaTpsbZEJaGkIaOC3rLCcGWlJaSigD5mcKGlsaWlJuPoWOkicaGicaGicaGicaGicb2zwm0igD4msa9igL4EteGlYa3lJa7cIaGicaGicaGicaGicaGDMvJncbNEteGpsbMCMfJDcHMBg9VCIHNEdePic8GnY4WksaTidaUntSkicaGicaGicaGicaGicbNEdeGpsbMCMfJDcHNEdePic0Gmc41oWOGicaGicaGicaGicaGihzLyZqGz3OXid0GDMvJncGWlJuPic0GywjZkgD4msKGlsbHyNmOz3KXktSkicaGicaGicaGicaGicb2zwm0ihn6msa9ihn0zxaOz3OXlcb2zwm0kdaUmcKPoWOGicaGicaGicaGicaGigD4msaTpsbZEJeGkIaOC3rLCcGWlJaSigD4msKGlsaWlJuPoWOGicaGicaGicaGicaGigD5msaTpsbZEJeGkIaOC3rLCcGWlJaSigD5msKGlsaWlJuPoWOkicaGicaGicaGicaGicb2zwmZigCWmdaGpsb2zwmZkgD4mc54lcbNEtaUEcWGz3OWlNGPoWOGicaGicaGicaGicaGihzLyZmGzZeWmca9ihzLyZmOz3GWlNKSigD5mc55lcbNEJaUEsK7cIaGicaGicaGicaGicaGDMvJmYbNmdeWid0GDMvJmYHNEdaUEIWGz3KWlNOSigD6mc56ktSkicaGicaGicaGicaGicb2zwmZigCXmtaGpsb2zwmZkgD4mc53lcbNEtaUDYWGz3OWlNCPoWOGicaGicaGicaGicaGihzLyZmGzZaWmsa9ihzLyZmOz3GXlNGSigD5ms54lcbNEJeUEcK7cIaGicaGicaGicaGicaGDMvJmYbNmtaXid0GDMvJmYHNEdeUEsWGz3KXlNKSigD6ms55ktSkicaGicaGicaGicaGicb2zwmZigCWmteGpsb2zwmZkgD4ms56lcbNEteUEIWGz3OXlNOPoWOGicaGicaGicaGicaGihzLyZmGzZeXmsa9ihzLyZmOz3GXlNCSigD5ms53lcbNEJeUDYK7cGOGicaGicaGicaGicaGihzLyZqGBM9YBtaGpsb0yxLSB3jjBNztCxj0khzLyZqOzg90kgCWmdaSigCWmdaPlcbKB3qOzZaXmcWGzZaXmcKSigrVDcHNmtaWlcbNmtaWksWGzg90kgCXmtaSigCXmtaPksK7cIaGicaGicaGicaGicaGzZaWmcaQpsbUB3jTmc54oYbNmdeWicO9ig5VCM0WlNK7cIaGicaGicaGicaGicaGzZeWmcaQpsbUB3jTmc56oYbNmteWicO9ig5VCM0WlNC7cIaGicaGicaGicaGicaGDMvJncbUB3jTmsa9ihrHEwXVCKLUDLnXCNqODMvJncHKB3qOzZaWmsWGzZaWmsKSigrVDcHNmdeXlcbNmdeXksWGzg90kgCXmdeSigCXmdePlcbKB3qOzZeXmsWGzZeXmsKPktSkicaGicaGicaGicaGicbNmdaXicO9ig5VCM0XlNG7igCWmteGkJ0GBM9YBteUEtSkicaGicaGicaGicaGicbNmtaXicO9ig5VCM0XlNO7igCXmteGkJ0GBM9YBteUDZSkcIaGicaGicaGicaGicaGzMXVyxqGBJaWmca9igrVDcHNmdaWlcbMmcK7cIaGicaGicaGicaGicaGzMXVyxqGBJeWmca9igrVDcHNmtaWlcbMmcaTihzLyZmOms4WlcaWlJaSidaUmcKPoWOGicaGicaGicaGicaGigzSB2f0ig4WmtaGpsbKB3qOzZaXmcWGzJaGlsb2zwmZkdaUmcWGms4WlcaWlJaPktSkicaGicaGicaGicaGicbMBg9HDcbUmteWid0Gzg90kgCXmtaSigyWic0GDMvJmYGXlJaSideUmcWGmc4WksK7cIaGicaGicaGicaGicaGzMXVyxqGBJaWmsa9igrVDcHNmdaXlcbMmcaTihzLyZmOmc4WlcaWlJaSideUmcKPoWOGicaGicaGicaGicaGigzSB2f0ig4XmdeGpsbKB3qOzZeWmsWGzJaGlsb2zwmZkdeUmcWGmc4WlcaXlJaPktSkicaGicaGicaGicaGicbMBg9HDcbUmdeXid0Gzg90kgCWmteSigyWic0GDMvJmYGWlJaSideUmcWGms4WksK7cIaGicaGicaGicaGicaGzMXVyxqGBJeXmsa9igrVDcHNmteXlcbMmcaTihzLyZmOms4WlcaXlJaSideUmcKPoWOkicaGicaGicaGicaGicb2zwm0ig5FEJaGpsbTAxGODMvJncHUmdaWlcbUmtaWlcbUmdeWlcbUmteWksWkicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGDMvJncHUmdaXlcbUmtaXlcbUmdeXlcbUmteXksWGzI56ktSkicaGicaGicaGicaGicb2zwmYig5FEJeGpsbTAxGOBL96mc54EsWGBL96mc56DYWGzI55ktSkicaGicaGicaGicaGicbMBg9HDcbUid0GBwL4kg5FEJeUEcWGBL96ms55lcbMlNGPoWOkicaGicaGicaGicaGicbYzxr1CM4GmI4YicOGBJSkicaGicaGicaGih0kicaGicaGicaGic8ViezctEwhVEAvSaOGicaGicaGicaGzMXVyxqGzKjTkhzLyZmGCcWGAw50ig9JDgf2zxmSigzSB2f0ihbLCNnPC3rLBMnLlcbMBg9HDcbSywn1BMfYAxr5ksb7cIaGicaGicaGicaGicaGzMXVyxqGDMfSDwuGpsaWlJa7cIaGicaGicaGicaGicaGzMXVyxqGyw1WBgL0DwrLid0Gms4WoWOGicaGicaGicaGicaGigzSB2f0igzYzxf1zw5JEsa9ideUmdSkicaGicaGicaGicaGicbMBg9HDcbTyxHwywX1zsa9idaUmdSkcIaGicaGicaGicaGicaGzM9YicHPBNqGAsa9ida7igKGpcbVy3rHDMvZoYbPkYSPihSkicaGicaGicaGicaGicaGicaGDMfSDwuGkZ0Gyw1WBgL0DwrLicOGCgvYBgLUtM9PC2uOCcaQigzYzxf1zw5JEsK7cIaGicaGicaGicaGicaGicaGig1HEfzHBhvLicS9igfTCgXPDhvKztSkicaGicaGicaGicaGicaGicaGyw1WBgL0DwrLicO9ihbLCNnPC3rLBMnLoWOGicaGicaGicaGicaGicaGicbMCMvXDwvUy3KGkJ0GBgfJDw5HCML0EtSkicaGicaGicaGicaGicb9cGOGicaGicaGicaGicaGihjLDhvYBIb2ywX1zsaVig1HEfzHBhvLoWOGicaGicaGicaGFqOGicaGicaGicaGic8ViowFN+AjREABSUwzQUwJSaOGicaGicaGicaGzMXVyxqGzg9TywLUv2fYCgvKtM9PC2uODMvJmYbWlcbMBg9HDcbPBNrLBNnPDhKPihSkicaGicaGicaGicaGicb2zwmZiheGpsb2zwmZkaOGicaGicaGicaGicaGicaGicbWzxjSAw5oB2LZzsHWksWkicaGicaGicaGicaGicaGicaGCgvYBgLUtM9PC2uOCcaRihzLyZmOmtiZlJqSidiZnc41lcaZnduUnIKPlaOGicaGicaGicaGicaGicaGicbWzxjSAw5oB2LZzsHWicSGDMvJmYGYmZqUnsWGmZq1lJySidq1nI43ksKkicaGicaGicaGicaGicaPoWOGicaGicaGicaGicaGihzLyZmGCIa9ihzLyZmOcIaGicaGicaGicaGicaGicaGihbLCMXPBK5VAxnLkhaGkYaXlJaGkIbXicSGDMvJmYGXmJmUncWGmJm0lJuSidm0ns42ksKScIaGicaGicaGicaGicaGicaGihbLCMXPBK5VAxnLkhaGkYaXlJaGkIbXicSGDMvJmYGYmZqUnsWGmZq1lJySidq1nI43ksKScIaGicaGicaGicaGicaGicaGihbLCMXPBK5VAxnLkhaGkYaXlJaGkIbXicSGDMvJmYGZnduUnIWGndu2lJCSidu2nY44ksKkicaGicaGicaGicaGicaPoWOGicaGicaGicaGicaGihjLDhvYBIbWzxjSAw5oB2LZzsHWicSGAw50zw5ZAxr5icOGCIK7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8Gv29YBgv55zMQ5AoWcIaGicaGicaGicbMBg9HDcb3B3jSzxLoB2LZzsH2zwmZihaSigzSB2f0ihnJywXLksb7cIaGicaGicaGicaGicaGDMvJmYbPid0GzMXVB3iOCcaQihnJywXLktSkicaGicaGicaGicaGicb2zwmZigyGpsbMCMfJDcHWicOGC2nHBguPoWOkicaGicaGicaGicaGicbMBg9HDcbTAw5eAxn0msa9ideUmdSkicaGicaGicaGicaGicbMBg9HDcbTAw5eAxn0mIa9ideUmdSkcIaGicaGicaGicaGicaGzM9YicHPBNqGEca9ic0XoYb4idW9ide7ihGRkYKGEWOGicaGicaGicaGicaGicaGicbMB3iGkgLUDcb5id0Glte7ihKGpd0GmtSGEsSRksb7cIaGicaGicaGicaGicaGicaGicaGicbMB3iGkgLUDcb6id0Glte7ihOGpd0GmtSGEISRksb7cIaGicaGicaGicaGicaGicaGicaGicaGicaGDMvJmYbUzwLNAgjVCIa9ihzLyZmOzMXVyxqOEcKSigzSB2f0khKPlcbMBg9HDcH6ksK7cIaGicaGicaGicaGicaGicaGicaGicaGicaGDMvJmYbYyw5KB20GpsbMCMfJDcHZAw4Ozg90kgKGkYbUzwLNAgjVCIWGDMvJmYGXmJCUmsWGmZeXlJCSidC0lJCPksKGkGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGihzLyZmOndm3ntGUntq1mYWGmJi1nZGUmtq1osWGmtK2mZiUnZqXmsKPoWOGicaGicaGicaGicaGicaGicaGicaGicaGihzLyZmGCg9PBNqGpsbUzwLNAgjVCIaRihjHBMrVBsaTigy7cIaGicaGicaGicaGicaGicaGicaGicaGicaGzMXVyxqGzgLZDca9igXLBMD0AcHWB2LUDcK7cGOGicaGicaGicaGicaGicaGicaGicaGicaGigLMicHKAxn0idWGBwLUrgLZDdePihSkicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGBwLUrgLZDdiGpsbTAw5eAxn0mtSkicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGBwLUrgLZDdeGpsbKAxn0oWOGicaGicaGicaGicaGicaGicaGicaGicaGih0GzwXZzsbPzIaOzgLZDca8ig1PBKrPC3qYksb7cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGig1PBKrPC3qYid0GzgLZDdSkicaGicaGicaGicaGicaGicaGicaGicaGicb9cIaGicaGicaGicaGicaGicaGicaGicb9cIaGicaGicaGicaGicaGicaGih0kicaGicaGicaGicaGicb9cGOGicaGicaGicaGicaGihjLDhvYBIbTAw5eAxn0mIaTig1PBKrPC3qXoWOGicaGicaGicaGFqOGicaGicaGicaGlY8G5lQr5Bgc6AUy5BQM5yIg5BId5yE95PwWcIaGicaGicaGicbMBg9HDcbJBg91zeHLAwDODfbYB2zPBguOzMXVyxqGAgvPz2H0uMf0Aw8SigzSB2f0ignSB3vKvhLWzsKGEWOGicaGicaGicaGicaGic8ViowXGUs6KsaTiowDH+wmGowiHUw4GWOGicaGicaGicaGicaGigLMicHJBg91zfr5CguGpcaWlJmPihSkicaGicaGicaGicaGicaGicaGCMv0DxjUideUmdSkicaGicaGicaGicaGicb9cIaGicaGicaGicaGicaGlY8G56EV5lQric0G5lIT6zE05y6A77Ym5lIk5lIl6jAecIaGicaGicaGicaGicaGzwXZzsbPzIaOy2XVDwruExbLidWGmc43ksb7cIaGicaGicaGicaGicaGicaGigzSB2f0ihbYB2zPBguGpsaXlJaGlsa0lJaGkIbWB3COAgvPz2H0uMf0Aw8GlsaWlJuSidiUmcK7cIaGicaGicaGicaGicaGicaGihjLDhvYBIbTyxGOChjVzMLSzsWGmc4XktSkicaGicaGicaGicaGicb9cIaGicaGicaGicaGicaGlY8G56cN54Q25lQric0G5lIk6yoO5OMP5BgvcIaGicaGicaGicaGicaGzwXZzsb7cIaGicaGicaGicaGicaGicaGigzSB2f0igfUDMLSuhjVzMLSzsa9ideUmcaTihbVDYHOzwLNAhrsyxrPBYWGmI4WktSkicaGicaGicaGicaGicaGicaGCMv0DxjUig1HEcHHBNzPBfbYB2zPBguSidaUmIK7cIaGicaGicaGicaGicaGFqOGicaGicaGicaGFqOkicaGicaGicaGic8VioMBQos6KEwVHUw6PUEjUEw+GqOGicaGicaGicaGzMXVyxqGCMfPBKnSB3vKrgvUC2L0EsHMBg9HDcbIyxnLrgvUC2L0EsWGzMXVyxqGAgvPz2H0uMf0Aw8SigzSB2f0ihjHAw5gywn0B3iPihSkicaGicaGicaGicaGicbPzIaOCMfPBKzHy3rVCIa8idaUmsKGCMv0DxjUigjHC2vezw5ZAxr5oWOkicaGicaGicaGicaGicaVlYdPM6JKUPhLUPxPG6JMM7tLR4BPM4ykicaGicaGicaGicaGicbMBg9HDcbYywLUuhjVzMLSzsa9ideUmcaRihjHAw5gywn0B3iGkIaOms4Wic0GAgvPz2H0uMf0Aw8PicOGmI4WoWOGicaGicaGicaGicaGihjLDhvYBIbIyxnLrgvUC2L0EsaQihjHAw5qCM9MAwXLoWOGicaGicaGicaGFqOGicaGicaGicaGlY8Gpt09pt0G6kgL5ywO55Qe5l2t56EV5lUl6lsO5ywj54wN5QIH5z6lid09pt09cGOGicaGicaGicaGy29UC3qGzMXVyxqGChjLqMfZzvnJywXLid0Gmc4WmdaZoWOGicaGicaGicaGy29UC3qGzMXVyxqGChjLrMLUzvnJywXLid0Gmc4WmdaZicOGmtyUmdSkicaGicaGicaGigzSB2f0igjHC2vty2fSzsa9idaUmdaWmZSkicaGicaGicaGicaVlYa9pt09psdOOAxLHAJNMOtKUPhMNlxLR4BLUQBLH73MLBaGpt09pt0kicaGicaGicaGigzSB2f0ignSB3vKrgvUC2L0EsH2zwmZihaSihzLyZmGD2LUzfzLy3rVCIWGAw5VDxqGzMXVyxqGAgvPz2H0uMf0Aw8PihSkicaGicaGicaGicaGicbMBg9HDcbMAw5HBenVDMvYywDLid0Gy2XVDwrdB3zLCJSkicaGicaGicaGicaGicbPzIaOzMLUywXdB3zLCMfNzsa8psaWlJaWmsKGEWOGicaGicaGicaGicaGicaGicbYzxr1CM4Gmc4WoWOGicaGicaGicaGicaGih0kcIaGicaGicaGicaGicaGzMXVyxqGAgvPz2H0id0GBgvUz3rOkhaPic0GCMvHBfbSyw5LDfjHzgL1CZSkicaGicaGicaGicaGicbOzwLNAhrsyxrPBYa9ignSyw1WkcHOzwLNAhqGlsbJBg91zeHLAwDODcKGlYbJBg91zfrOAwnRBMvZCYWGmc4WlcaXlJaPoWOkicaGicaGicaGicaGicaVlYdLN7RNOydPQ5JLUQBLM6dLRzakicaGicaGicaGicaGicbMBg9HDcbOtg93zxiGpsbJBg91zeHLAwDODdSkicaGicaGicaGicaGicbMBg9HDcbOvxbWzxiGpsbJBg91zeHLAwDODcaRignSB3vKvgHPy2TUzxnZoWOGicaGicaGicaGicaGigzSB2f0igHLAwDODezHy3rVCIa9ihnTB290Ahn0zxaOAeXVD2vYlcbOtg93zxiGkYaWlJiGkIbJBg91zfrOAwnRBMvZCYWGAgvPz2H0ksaQcIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaOms4Wic0GC21VB3rOC3rLCcHOvxbWzxiGlsaWlJiGkIbJBg91zfrOAwnRBMvZCYWGAfvWCgvYlcbOzwLNAhqPktSkcIaGicaGicaGicaGicaGDMvJmYbZzwvKt2zMC2v0id0GDMvJmYHJBg91zfnLzwqGkIaXmdaUmcWGmc4WlcbJBg91zfnLzwqGkIa1mc4WktSkicaGicaGicaGicaGicb2zwmZigfUAw1HDgvKug9Zid0GCcaRihDPBMrwzwn0B3iGkIb3Aw5Ku3bLzwrsyxrPBYaRihnLzwrpzMzZzxq7cGOGicaGicaGicaGicaGic8ViowFUUEHGow9OUEkTUwzQUwJSaOGicaGicaGicaGicaGigzSB2f0igjHC2vtAgfWzsa9igzcBsHHBMLTyxrLzfbVCYaQihbYzujHC2vty2fSzsWGncWGmc41lcaYlJaPoWOkicaGicaGicaGicaGicaVlYdLN5/MIA3MM7lLOP7LIQdNU4BOIOikicaGicaGicaGicaGicbMBg9HDcb3yxjWsw50zw5ZAxr5id0GBwL4kdaUmsWGmc44lcbJBg91zfr1CMj1BgvUy2uPoWOGicaGicaGicaGicaGigzSB2f0igjHC2vtAgfWztaGpsbMqM0Oyw5PBwf0zwrqB3mGkIbWCMvcyxnLu2nHBguSidmSidaUnsWGmI4WktSkicaGicaGicaGicaGicbMBg9HDcb3yxjWzwqGpsbKB21HAw5xyxjWzwroB2LZzsHHBMLTyxrLzfbVCYaQicHWCMvcyxnLu2nHBguGkIaWlJuPlcb3yxjWsw50zw5ZAxr5icOGmc43ktSkicaGicaGicaGicaGicbIyxnLu2HHCguGpsbTAxGOyMfZzvnOyxbLmcWGD2fYCgvKlcaWlJi1ktSkcIaGicaGicaGicaGicaGlY8Gv29YBgv55zMQ5AoW5yIB5BU65zUI5z2x57Ut5P6ecIaGicaGicaGicaGicaGzMXVyxqGD29YBgv5u2nHBguGpsbTAxGOmc4WmdaYlcaWlJaWmdGSignSB3vKq2X1BxbPBMCPoWOGicaGicaGicaGicaGigzSB2f0ihDVCMXLEvbHDhrLCM4Gpsb3B3jSzxLoB2LZzsHHBMLTyxrLzfbVCYWGD29YBgv5u2nHBguPoWOGicaGicaGicaGicaGihDVCMXLEvbHDhrLCM4GpsbZyxr1CMf0zsH3B3jSzxLqyxr0zxjUicOGms4YicSGmc43ktSkcIaGicaGicaGicaGicaGlY8G5Qc55O2U5lQr57g75z6l5RE35zcicIaGicaGicaGicaGicaGzMXVyxqGy3vTDwX1C0zHy3rVCIa9ignSB3vKvhLWztSkicaGicaGicaGicaGicbMBg9HDcbZDhjHDhvZrMfJDg9Yid0Gms4Wic0Gy2XVDwruExbLoWOkicaGicaGicaGicaGicbMBg9HDcbJDw11BhvZu2HHCguGpsbIyxnLu2HHCguGkIb3B3jSzxLqyxr0zxjUoWOGicaGicaGicaGicaGign1BxvSDxntAgfWzsa9ig1PEcHJDw11BhvZu2HHCguSigjHC2vtAgfWzsWGmc4ZktSkcIaGicaGicaGicaGicaGzMXVyxqGC3rYyxr1C1nOyxbLid0GyMfZzvnOyxbLicOGmc44oWOkicaGicaGicaGicaGicbMBg9HDcbJBg91zfbHDhrLCM4GpsbTAxGOC3rYyxr1C1nOyxbLlcbJDw11BhvZu2HHCguSign1BxvSDxngywn0B3iPoWOkicaGicaGicaGicaGicaVlYdNOkFNIRBKUPhNIBNLVOekicaGicaGicaGicaGicbMBg9HDcbHBNzPBezHy3rVCIa9ignSB3vKqw52AwWGkIbWB3COAgvPz2H0uMf0Aw8SidiUmcK7cIaGicaGicaGicaGicaGAwyGkgfUDMLSrMfJDg9Yid4Gmc4WmsKGEWOGicaGicaGicaGicaGicaGicbMBg9HDcbHBNzPBe5VAxnLid0GzKjTkgfUAw1HDgvKug9ZicOGyMfZzvnJywXLicOGmc4ZlcaZlcaWlJySidiUmcK7cIaGicaGicaGicaGicaGicaGignSB3vKugf0DgvYBIa9ig1PEcHJBg91zfbHDhrLCM4SigfUDMLStM9PC2uSigfUDMLSrMfJDg9YicOGmc41ktSkicaGicaGicaGicaGicb9cGOGicaGicaGicaGicaGic8VioE7HUIkGUs+TEIAGaOGicaGicaGicaGicaGigzSB2f0igzPBMvty2fSzsa9igjHC2vty2fSzsaQide2lJa7cIaGicaGicaGicaGicaGzMXVyxqGzMLUzurLDgfPBca9igzcBsHHBMLTyxrLzfbVCYaQigzPBMvty2fSzsWGmIWGmc43lcaYlJuPoWOGicaGicaGicaGicaGigzSB2f0igvYB3nPB25jBNrLBNnPDhKGpsbTAxGOmc4XlcaWlJqSign1BxvSDxngywn0B3iPicOGzgv0ywLSu3rYzw5NDgG7cIaGicaGicaGicaGicaGzMXVyxqGzxjVC2LVBIa9igzPBMvezxrHAwWGkIbLCM9ZAw9Usw50zw5ZAxr5oWOkicaGicaGicaGicaGicaVlYdLN7RNOydLR4BLUQBORQhNRPCkicaGicaGicaGicaGicbMBg9HDcbIyxnLrgvUC2L0Esa9ignSB3vKugf0DgvYBIaTigvYB3nPB247cIaGicaGicaGicaGicaGzMXVyxqGy292zxjHz2vuAhjLC2HVBgqGpsbTAxGOmc4XlcaTmc4ZlcbJBg91zenVDMvYicOGkdaUnsaRign1BxvSDxngywn0B3iGkIaWlJuPktSkicaGicaGicaGicaGicbMBg9HDcbKzw5Zid0GC2f0DxjHDguOyMfZzurLBNnPDhKGlsbJB3zLCMfNzvrOCMvZAg9SzcK7cGOGicaGicaGicaGicaGic8VioMuKowmLUI+UEEvJaOGicaGicaGicaGicaGigzSB2f0ihnOyxjWBMvZCYa9ig1PEcGXlJiSidiUmcWGy3vTDwX1C0zHy3rVCIKGkIbJBg91zfnOyxjWBMvZCZSkicaGicaGicaGicaGicbKzw5Zid0GCg93kgrLBNmSihnOyxjWBMvZCYK7cGOGicaGicaGicaGicaGic8Viow6LoEuQoMRMow6PUwiHUw4GWOGicaGicaGicaGicaGigzSB2f0ihzLCNrPy2fSuhjVzMLSzsa9ignSB3vKsgvPz2H0uhjVzMLSzsHOzwLNAhrsyxrPBYWGy2XVDwruExbLktSkicaGicaGicaGicaGicbKzw5ZicO9igHLAwDODezHy3rVCIaQignSB3vKq292zxiGkIb2zxj0AwnHBfbYB2zPBgu7cGOGicaGicaGicaGicaGic8Viow6LoEuQoMBQos6KEEjUEw+GqOGicaGicaGicaGicaGigrLBNmGpsbYywLUq2XVDwrezw5ZAxr5kgrLBNmSigHLAwDODfjHDgLVlcbYywLUq2XVDwrZktSkcIaGicaGicaGicaGicaGlY8G5PYa57Ui5A+g5BQM6lcd5Pw0cIaGicaGicaGicaGicaGzgvUCYaQpsbKzw5ZAxr5txvSDgLWBgLLCJSkicaGicaGicaGicaGicbKzw5Zid0GBwf4kgrLBNmSidaUmcK7cGOGicaGicaGicaGicaGihjLDhvYBIbKzw5ZoWOGicaGicaGicaGFqOGicaGicaGicaGzMXVyxqGy2XVDwrezw5ZAxr5rMfZDcH2zwmZihaPcIaGicaGicaGicb7cIaGicaGicaGicaGicaGzMXVyxqGAca9igXLBMD0AcHWksaTihjLywXqBgfUzxrsywrPDxm7cIaGicaGicaGicaGicaGzMXVyxqGAgvPz2H0uMf0Aw8GpsbJBgfTCcGOAcaTignSB3vKsgvPz2H0ksaVignSB3vKvgHPy2TUzxnZlcaWlJaSideUmcK7cGOGicaGicaGicaGicaGic8ViowpQUwbMUACGowFUUEHGoEAHcbZAgfWzE+8Jos4JEwbMIbxB3jSzxNJGihKUi3LGzOGzg9TywLUihDHCNdVViZKUi3LGzOGzxjVC2LVBGOGicaGicaGicaGicaGigzSB2f0ig4GpsbWzxjSAw5oB2LZzsHWicOGmc4WmdaZnsK7cIaGicaGicaGicaGicaGBIa9ig4GkIbUicOGms4YoYaVlYdNROdLJzxLVlRLJjykcIaGicaGicaGicaGicaGlY8G6AUy5BQM5yIg5BIdcIaGicaGicaGicaGicaGzMXVyxqGChjVzMLSzsa9ignSB3vKsgvPz2H0uhjVzMLSzsHOzwLNAhrsyxrPBYWGy2XVDwruExbLktSkcIaGicaGicaGicaGicaGCMv0DxjUihnHDhvYyxrLkg4GkIbWCM9MAwXLicOGy2XVDwrdB3zLCIaQigrLBNnPDhLnDwX0AxbSAwvYicOGmc44ktSkicaGicaGicaGih0kicaGicaGicaGic8Vios9K+ENR+MyTow9SEwhVEAvScaTioAOOEAlN+wfIEE6V+wCQos6KEwgHEEAHoIHSowhJWOGicaGicaGicaGzMXVyxqGDM9SDw1LDhjPy1nOywrVDYH2zwmZihaSihzLyZmGBgLNAhreAxiSigzSB2f0ihn0zxbtAxPLlcbPBNqGC3rLChmPihSkicaGicaGicaGicaGicbMBg9HDcbZAgfKB3CGpsaXlJa7cIaGicaGicaGicaGicaGDMvJmYbJDxjYzw50ug9Zid0GCdSkcIaGicaGicaGicaGicaGzM9YicHPBNqGAsa9ida7igKGpcbZDgvWCZSGAsSRksb7cIaGicaGicaGicaGicaGicaGign1CNjLBNrqB3mGkZ0GBgLNAhreAxiGkIbZDgvWu2L6ztSkicaGicaGicaGicaGicaGicaGzMXVyxqGAgvPz2H0uMf0Aw9eDw1TEtSkicaGicaGicaGicaGicaGicaGzMXVyxqGC2HHzg93rgvUC2L0Esa9ignSB3vKrgvUC2L0EuzHC3qOy3vYCMvUDfbVCYK7cGOGicaGicaGicaGicaGicaGicaVlYdMJiFMLBdOOBdLH4/MQkhMI5/LHyNNUR/LNkJKUPhLHOxNMOtLKlJMLlykicaGicaGicaGicaGicaGicaGC2HHzg93icO9igv4CcGTC2HHzg93rgvUC2L0EsaQihn0zxbtAxPLicOGywjZB3jWDgLVBIaQidiUmcK7cGOGicaGicaGicaGicaGicaGicbPzIaOC2HHzg93idWGmc4WmsKGyNjLywS7cIaGicaGicaGicaGicaGFqOkicaGicaGicaGicaGicbYzxr1CM4GC2HHzg93oWOGicaGicaGicaGFqOkicaGicaGicaGic8VioAuUEI/M+EAHoEoR+wIG+wfIEEfP+whVEAvSaOGicaGicaGicaGDMvJmYbJywXJDwXHDgvbBwjPzw50tgLNAhqOzMXVyxqGAgvPz2H0uMf0Aw8SigzSB2f0igrLBNmSigzSB2f0igrVDeXPz2H0uMf5ksb7cIaGicaGicaGicaGicaGlY8G5z+656ga546V5Akd5ywjic0G5Qc55O2U6AUy5BQM5RE35zci5zYW6z2I5zkm5AsP56M66AkC6iMYcIaGicaGicaGicaGicaGDMvJmYbIyxnLqw1IAwvUDca9ig1PEcHNCM91BMrbBwjPzw50q29SB3iSihnREufTyMLLBNrdB2XVCIWGAgvPz2H0uMf0Aw8PoWOkicaGicaGicaGicaGicaVlYdLR4BLUQBNM7JLHBpNJQ/LOOpLHyKGlsdOLOtKUPhLJlRLN5/MM7tKUQ4kicaGicaGicaGicaGicbMBg9HDcbKzw5ZAxr5rMfJDg9Yid0Gms4Wic0GzxHWkc1Kzw5ZicOGmI4WktSkicaGicaGicaGicaGicbIyxnLqw1IAwvUDcaQpsaOms4WicSGzgvUC2L0EuzHy3rVCIaQidaUnsK7cGOGicaGicaGicaGicaGic8VioIdJowfIEwINUw8UIaTiow9K+INHUE6V+s4JUwfIEA6KoAwUEwqKEAoPEI/KEwpJEwqKEAxTGOGicaGicaGicaGicaGigzSB2f0igjHy2TmAwDODezHy3rVCIa9ihnTB290Ahn0zxaOltaUocWGltaUmIWGzg90tgLNAhrsyxKPoWOGicaGicaGicaGicaGihzLyZmGyMfJA0XPz2H0qM9VC3qGpsbZA3LbBwjPzw50q29SB3iGkIbIywnRtgLNAhrgywn0B3iGkIaWlJG7cGOGicaGicaGicaGicaGihjLDhvYBIbIyxnLqw1IAwvUDcaRigjHy2TmAwDODejVB3n0oWOGicaGicaGicaGFqOkicaGicaGicaGic8VioAuUEI/M+EAHowKMUAvO+wWHoAOOEAlNWOGicaGicaGicaGzMXVyxqGy2fSy3vSyxrLtxvSDgLty2f0DgvYkgzSB2f0igrLBNmSigzSB2f0igHLAwDODfjHDgLVlcbMBg9HDcbKB3rmAwDODfjHEsKGEWOGicaGicaGicaGicaGic8ViowFUUEHGowKMUAvO+wWHaOGicaGicaGicaGicaGigzSB2f0igjHC2vnDwX0AvnJyxr0zxiGpsbWB3COms4Wic0GzxHWkc1Kzw5ZicOGms41ksWGms41ksaQidaUndSkcIaGicaGicaGicaGicaGlY8G6iom5ywj5yY65z+F6AkD5Asw5AsA5PwJ5BcecIaGicaGicaGicaGicaGzMXVyxqGyMfJA1nJyxr0zxjcB29ZDca9ihnTB290Ahn0zxaOltaUnIWGmc4WlcbKB3rmAwDODfjHEsKGkIaWlJm7cGOGicaGicaGicaGicaGic8VioMRMoEPUUwmUUwFN+AvO+wWHowINUw8UGOGicaGicaGicaGicaGigzSB2f0igHLAwDODfnJyxr0zxiGpsbOzwLNAhrsyxrPBYaQidaUmJSkcIaGicaGicaGicaGicaGCMv0DxjUigjHC2vnDwX0AvnJyxr0zxiGkYbIywnRu2nHDhrLCKjVB3n0icSGAgvPz2H0u2nHDhrLCJSkicaGicaGicaGih0kcIaGicaGicaGicbMBg9HDcbKAxn0yw5Jzvf1ywXPDhLsid0Gmc4WmdaWntSkicaGicaGicaGigzSB2f0ig1PBKrPC3rHBMnLid0GmtaUmdSkcIaGicaGicaGicaVlYa9pt09psdOOAxLHAJNMOtKVzpNP6/MUllMN5pMOlJLV4pLH73MLBaGpt09pt0kicaGicaGicaGihzLyZqGy2fSy3vSyxrLx2nSB3vKCYH2zwmZihn0yxj0lcb2zwmZigrPCIWGzMXVyxqGBwf4rgLZDgfUy2uSihzLyZmGBgLNAhrFzgLYlcb2zwmZihDPBMqPihSkicaGicaGicaGicaGicb2zwm0ignSB3vKid0GDMvJncGWlJaSidaUmcWGmc4WlcaXlJaPoWOGicaGicaGicaGicaGigzSB2f0ignSB3vKvg9WuMfKAxvZid0GCMvHBfbSyw5LDfjHzgL1CYaRignSB3vKsgvPz2H0icSGy2XVDwruAgLJA25LC3m7cIaGicaGicaGicaGicaGDMvJmIb0B1rVCca9ihjHEvnWAgvYzuLUDgvYC2vJDcHZDgfYDcWGzgLYlcbJBg91zfrVCfjHzgL1CYK7cIaGicaGicaGicaGicaGzMXVyxqGy2XVDwrcyxnLuMfKAxvZid0GCMvHBfbSyw5LDfjHzgL1CYaRignSB3vKsgvPz2H0oWOGicaGicaGicaGicaGihzLyZiGDg9dBg91zejHC2uGpsbYyxLtCgHLCMvjBNrLCNnLy3qOC3rHCNqSigrPCIWGy2XVDwrcyxnLuMfKAxvZktSkicaGicaGicaGicaGicbMBg9HDcbZDgfYDeHLAwDODca9igXLBMD0AcHZDgfYDcKGlsbYzwfSugXHBMv0uMfKAxvZoWOkicaGicaGicaGicaGicbMBg9HDcb0BwLUid0Gmc4WoWOGicaGicaGicaGicaGigzSB2f0ihrTyxGGpsbTyxHeAxn0yw5JztSkicaGicaGicaGicaGicbJBg91zfrVCca9ignSB3vKsgvPz2H0icSGy2XVDwruAgLJA25LC3m7cGOGicaGicaGicaGicaGic8VioIUOEEUL+wWHoE6V+s4JUs6KEwXGUEAHos6PoEcUqOGicaGicaGicaGicaGigLMicHZDgfYDeHLAwDODca+ignSB3vKvg9Wksb7cIaGicaGicaGicaGicaGicaGigLMicH0B1rVCc54idWGmc4WksbYzxr1CM4GDMvJncGWlJaPoWOGicaGicaGicaGicaGicaGicb0BwLUid0GDg9uB3aUEdSkicaGicaGicaGicaGicaGicaGAwyGkhrVq2XVDwrcyxnLlNGGpIaWlJaPihSkicaGicaGicaGicaGicaGicaGicaGihrTyxGGpsbTAw4ODg9dBg91zejHC2uUEcWGBwf4rgLZDgfUy2uPoWOGicaGicaGicaGicaGicaGicb9igvSC2uGEWOGicaGicaGicaGicaGicaGicaGicaGDg1HEca9ig1PBIH0B1rVCc55lcbTyxHeAxn0yw5JzsK7cIaGicaGicaGicaGicaGicaGih0kicaGicaGicaGicaGicb9igvSC2uGAwyGkhn0yxj0sgvPz2H0idWGy2XVDwrizwLNAhqPihSkicaGicaGicaGicaGicaGicaGDg1PBIa9ihrVq2XVDwrcyxnLlNK7cIaGicaGicaGicaGicaGicaGihrTyxGGpsbTAw4ODg9uB3aUEsWGBwf4rgLZDgfUy2uPoWOGicaGicaGicaGicaGih0GzwXZzsb7cIaGicaGicaGicaGicaGicaGigLMicH0B0nSB3vKqMfZzs54id4Gmc4Wksb7cIaGicaGicaGicaGicaGicaGicaGicb0Bwf4id0GBwLUkhrVq2XVDwrcyxnLlNGSig1HEerPC3rHBMnLktSkicaGicaGicaGicaGicaGicaGFsbLBhnLihSkicaGicaGicaGicaGicaGicaGicaGihrTyxGGpsbTAw4ODg9uB3aUEsWGBwf4rgLZDgfUy2uPoWOGicaGicaGicaGicaGicaGicb9cIaGicaGicaGicaGicaGFqOkicaGicaGicaGicaGicb0BwLUid0GBwf4khrTAw4Sig1PBKrPC3rHBMnLktSkicaGicaGicaGicaGicb0Bwf4id0GBwLUkhrTyxGSigfIC29SDxrLtwf4rgLZDgfUy2uPoWOkicaGicaGicaGicaGicbPzIaODg1HEca8ihrTAw4PihjLDhvYBIb2zwm0kdaUmcK7cGOGicaGicaGicaGicaGigzSB2f0ihjHEuXLBMD0Aca9ihrTyxGGlsb0BwLUoWOGicaGicaGicaGicaGigzSB2f0ihrOAwnRBMvZC0zHy3rVCIa9ignSB3vKvgHPy2TUzxnZic8GntaWlJa7cIaGicaGicaGicaGicaGzMXVyxqGyMfZzvn0zxbtAxPLid0GBwL4kenmt1veu19nqvjdsf9tvevqlcbdte9vrfnFtufsq0HFu1rfucaQideUnsWGC2f0DxjHDguODgHPy2TUzxnZrMfJDg9Yic0Gms4WksK7cGOGicaGicaGicaGicaGigzSB2f0ig1HEevMzMvJDgL2zvn0zxbZid0GBwLUkgzSB2f0ke1bweLnvu1Fq0Xpvurtx1nurvbtksWGmJaWlJaGkYbJBg91zfrOAwnRBMvZCYaQidaUmIK7cIaGicaGicaGicaGicaGzMXVyxqGywrHChrPDMvtDgvWCYa9ig1PBIHTyxHfzMzLy3rPDMvtDgvWCYWGCMf5tgvUz3rOic8GyMfZzvn0zxbtAxPLktSkcIaGicaGicaGicaGicaGzMXVyxqGBg9Uz01HCMnOu3rLCca9ihjHEuXLBMD0AcaVigfKyxb0AxzLu3rLChm7cIaGicaGicaGicaGicaGBg9Uz01HCMnOu3rLCca9ig1HEcHSB25NtwfYy2HtDgvWlcbIyxnLu3rLCfnPEMuPoWOkicaGicaGicaGicaGicbMBg9HDcbZAg9YDe1HCMnOu3rLCca9ienmt1veu19eru5tx01buKnix1nurva7cIaGicaGicaGicaGicaGzMXVyxqGBNvTyMvYqxbWCM9Hy2HtDgvWCYa9icHSB25NtwfYy2HtDgvWic8GC2HVCNrnyxjJAfn0zxaPicOGms41oWOkicaGicaGicaGicaGicbMBg9HDcbKAxn0yw5Jzsa9ihrTAw47cGOGicaGicaGicaGicaGigzSB2f0igPPDhrLCIa9igHHC2GXmIHNBf9gCMfNq29VCMqUEhKPicOGms4YoWOGicaGicaGicaGicaGigrPC3rHBMnLicS9igPPDhrLCIaQigXVBMDnyxjJAfn0zxa7cGOGicaGicaGicaGicaGigjVB2WGAw5dBg91zca9igzHBhnLoWOGicaGicaGicaGicaGigzSB2f0ihn0zxbZqMvMB3jLrxHPDgLUz0nSB3vKid0Gmc4WoWOGicaGicaGicaGicaGigLUDcbHy3r1ywXtDgvWCYa9ida7cGOGicaGicaGicaGicaGic8VioMIHoIUOEEUL+wfIEEfP+wpGUAvSaOGicaGicaGicaGicaGihzLyZmGC3vUq29SB3iGpsbUB3jTywXPEMuOy3PTx2XPz2H0q29SB3iPoWOGicaGicaGicaGicaGic8Vid09pt09ioIHPEwfQoEAHos9K+ENR+s7I+I0QowfIEEfP+IUOEEULYa9pt09pqOGicaGicaGicaGicaGigzSB2f0igrVDeXPz2H0uMf5id0Gzg90kgrPCIWGBgLNAhrFzgLYktSkicaGicaGicaGicaGicbMB3iGkgLUDcbPid0GmdSGAsa8ie1bweLnvu1Fq0Xpvurtx1nurvbtoYbPkYSPihSkicaGicaGicaGicaGicaGicaGAwyGkgrPC3rHBMnLid4GDg1HEcKGyNjLywS7cIaGicaGicaGicaGicaGicaGigLMicHHy3r1ywXtDgvWCYa+igLUDcHHzgfWDgL2zvn0zxbZksKGyNjLywS7cGOGicaGicaGicaGicaGicaGicb2zwmZihbVC2L0Aw9Uid0GC3rHCNqGkYbKAxiGkIbKAxn0yw5JztSkicaGicaGicaGicaGicaGicaGzMXVyxqGAgvPz2H0uMf0Aw87cIaGicaGicaGicaGicaGicaGigzSB2f0ig1HCMnOu3rLCca9igLUq2XVDwqGpYbZAg9YDe1HCMnOu3rLCca6igXVBMDnyxjJAfn0zxa7cIaGicaGicaGicaGicaGicaGigzSB2f0igrLBNmGpsbJBg91zerLBNnPDhKOCg9ZAxrPB24SihDPBMqSigHLAwDODfjHDgLVktSkcIaGicaGicaGicaGicaGicaGic8VioEPUUEPUUMxToI3S+I/H+s8MowmLGOGicaGicaGicaGicaGicaGicbPzIaOzgvUCYa8idaUmda1ksb7cIaGicaGicaGicaGicaGicaGicaGicbPzIaOAw5dBg91zcKGEWOGicaGicaGicaGicaGicaGicaGicaGicaGigLMicHZDgvWC0jLzM9Yzuv4AxrPBMDdBg91zca+idaUmcKGEWOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicbZDgvWC0jLzM9Yzuv4AxrPBMDdBg91zcaTpsaXlJa7cIaGicaGicaGicaGicaGicaGicaGicaGicaGFsbLBhnLihSkicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGAw5dBg91zca9igzHBhnLoWOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicbTyxjJAfn0zxaGpsbSB25NtwfYy2HtDgvWicOGmI4WoWOGicaGicaGicaGicaGicaGicaGicaGicaGih0kicaGicaGicaGicaGicaGicaGicaGih0kicaGicaGicaGicaGicaGicaGicaGigrPC3rHBMnLicS9ig1HCMnOu3rLCdSkicaGicaGicaGicaGicaGicaGicaGigfJDhvHBfn0zxbZkYS7cIaGicaGicaGicaGicaGicaGicaGicbJB250Aw51ztSkicaGicaGicaGicaGicaGicaGFqOkicaGicaGicaGicaGicaGicaGlY8G6l+B5ywL5lQr5Bgc5Qoa5RwlcIaGicaGicaGicaGicaGicaGigLMicGHAw5dBg91zcKGEWOGicaGicaGicaGicaGicaGicaGicaGAw5dBg91zca9ihrYDwu7cIaGicaGicaGicaGicaGicaGicaGicbZDgvWC0jLzM9Yzuv4AxrPBMDdBg91zca9ig51BwjLCKfWChjVywnOu3rLChm7cIaGicaGicaGicaGicaGicaGicaGicbKAxn0yw5Jzsa9ig1HEcH0BwLUlcbKAxn0yw5JzsaTigXVBMDnyxjJAfn0zxaPoWOGicaGicaGicaGicaGicaGicaGicaGy29UDgLUDwu7cIaGicaGicaGicaGicaGicaGih0kcIaGicaGicaGicaGicaGicaGic8Vios9K+ENR+MyTow9SqOGicaGicaGicaGicaGicaGicbMBg9HDcbZAgfKB3CGpsb2B2X1Bwv0CMLJu2HHzg93khbVC2L0Aw9UlcbSAwDODf9KAxiSihnOB3j0twfYy2HtDgvWicOGmI4Wlca4ktSkcIaGicaGicaGicaGicaGicaGic8Vios9V+EuQoAuUEI/M+EAHoEBUos9JEwhVEAvSaOGicaGicaGicaGicaGicaGicbMBg9HDcbZDw5qAgfZzsa9igLTChjVDMvKugHHC2uOzg90tgLNAhrsyxKPoWOGicaGicaGicaGicaGicaGicbMBg9HDcbHBwjPzw50ugHHC2uGpsbPC290CM9WAwmOktSkcIaGicaGicaGicaGicaGicaGic8VioMyS+wfIEw8UUw6PGOGicaGicaGicaGicaGicaGicbMBg9HDcbZDw5jBNrLBNnPDhKGpsbZBw9VDgHZDgvWkdaUmcWGmc40lcaXlJaGlsbKzw5ZksaQidaUnIaQihnOywrVDZSkcIaGicaGicaGicaGicaGicaGic8VioEoR+wIG+wfIEEfPWOGicaGicaGicaGicaGicaGicb2zwmZigfTyMLLBNrmAwDODca9ignHBgn1Bgf0zufTyMLLBNrmAwDODcHOzwLNAhrsyxrPBYWGzgvUCYWGzg90tgLNAhrsyxKPoWOGicaGicaGicaGicaGicaGicbMBg9HDcbHBwjPzw50sw50zw5ZAxr5id0GmI41oWOkicaGicaGicaGicaGicaGicaGlY8G5AsA5PwJ5BcecIaGicaGicaGicaGicaGicaGigzSB2f0ig11BhrPu2nHDhrLCIa9ignHBgn1Bgf0zu11BhrPu2nHDhrLCIHKzw5ZlcbOzwLNAhrsyxrPBYWGzg90tgLNAhrsyxKPoWOkicaGicaGicaGicaGicaGicaGlY8G55U05O6L5ywj54wNcIaGicaGicaGicaGicaGicaGihzLyZmGzgLYzwn0tgLNAhqGpsbZDw5qAgfZzsaQihn1BKnVBg9YicOGC3vUsw50zw5ZAxr5icOGmc41oWOkicaGicaGicaGicaGicaGicaGlY8G546V5Akd5ywj54wN5PwJ5BcecIaGicaGicaGicaGicaGicaGihzLyZmGyw1IAwvUDfnJyxr0zxjPBMCGpsbHBwjPzw50ugHHC2uGkIbHBwjPzw50tgLNAhqGkIbHBwjPzw50sw50zw5ZAxr5icOGkdeUmcaRig11BhrPu2nHDhrLCIK7cGOGicaGicaGicaGicaGicaGicaVlYdKVQFLHyNLKOZOG4ZLHyNLOP7LVlOkicaGicaGicaGicaGicaGicaGzMXVyxqGC2LKzujHy2TmAwDODca9ihnTB290Ahn0zxaOltaUnsWGmc4ZlcbKB3rmAwDODfjHEsKGkIaWlJq7cIaGicaGicaGicaGicaGicaGigfTyMLLBNrty2f0DgvYAw5NicS9igfTyMLLBNrmAwDODcaQihnPzgvcywnRtgLNAhqGkIbTDwX0AvnJyxr0zxi7cGOGicaGicaGicaGicaGicaGicaVlYdNU4tLKiJLHyNNHACkicaGicaGicaGicaGicaGicaGDMvJmYbZDgvWu2nHDhrLCMLUzYa9ignSB3vKlMeGkIbZy2f0DgvYAw5Nq29LzMzPy2LLBNqGkIbTyxjJAfn0zxaGkGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicHKAxjLy3rmAwDODcaRigfTyMLLBNrty2f0DgvYAw5NktSkcIaGicaGicaGicaGicaGicaGic8VioIdVEMhJ+MzKowiTGOGicaGicaGicaGicaGicaGicbMBg9HDcbTyxHtDgvWqNjPz2H0BMvZCYa9idaUmJu7cIaGicaGicaGicaGicaGicaGihn0zxbty2f0DgvYAw5Nid0GBwLUkhn0zxbty2f0DgvYAw5Nlcb2zwmZkg1HEfn0zxbcCMLNAhrUzxnZksK7cGOGicaGicaGicaGicaGicaGicbJBg91zc5Yz2iGkZ0GC3rLCfnJyxr0zxjPBMC7cGOGicaGicaGicaGicaGicaGicaVlYdPGi/MMi7LUQBORQhNRPCGlsdKVzpNP6/KU4VOTkJNMOtMTOJLHyKkicaGicaGicaGicaGicaGicaGzMXVyxqGzxH0Aw5JDgLVBKnVzwzMid0GywjZB3jWDgLVBIaQicGWlJGGkYaWlJiGkIbKzw5ZksaQicGWlJyGkYbKzw5ZkJaUncK7cIaGicaGicaGicaGicaGicaGignSB3vKlMeGkJ0GzxHWkc1LEhrPBMn0Aw9Uq29LzMyGkIbTyxjJAfn0zxaPoWOkicaGicaGicaGicaGicaGicaGlY8G5O+q5yMn57Ui5Q2IcIaGicaGicaGicaGicaGicaGigLMicHJBg91zc5HidWGmc4WmsKGEWOGicaGicaGicaGicaGicaGicaGicaGy2XVDwqUysa9idaUmdSkicaGicaGicaGicaGicaGicaGicaGigjYzwfRoWOGicaGicaGicaGicaGicaGicb9cGOGicaGicaGicaGicaGicaGicbKAxn0yw5JzsaRpsbTyxjJAfn0zxa7cIaGicaGicaGicaGicaGicaGigfJDhvHBfn0zxbZkYS7cIaGicaGicaGicaGicaGFqOkicaGicaGicaGicaGicaVlYdOIBlOSipMMkdLSiqkicaGicaGicaGicaGicbJBg91zc5Yz2iGpsbJBg91zc5Yz2iGlYaOy2XVDwqUCMDIicSGDMvJmYGWlJGPktSkcIaGicaGicaGicaGicaGlY8G5lQU5BQM6zMq5yI2cIaGicaGicaGicaGicaGzMXVyxqGBwf4q2HHBM5LBca9ig1HEcHJBg91zc5Yz2iUCIWGBwf4kgnSB3vKlNjNyI5NlcbJBg91zc5Yz2iUyIKPoWOGicaGicaGicaGicaGigLMicHTyxHdAgfUBMvSid4Gmc43ksb7cIaGicaGicaGicaGicaGicaGigzSB2f0ignVBxbYzxnZAw9Uid0GC21VB3rOC3rLCcGWlJCSideUmcWGBwf4q2HHBM5LBcKGkIaWlJm7cIaGicaGicaGicaGicaGicaGignSB3vKlNjNyIa9ig1PEcHJBg91zc5Yz2iSignSB3vKlNjNyIaQicGXlJaGlsbJB21WCMvZC2LVBIKSignVBxbYzxnZAw9UktSkicaGicaGicaGicaGicb9cGOGicaGicaGicaGicaGihjLDhvYBIb2zwm0kgnSB3vKlNjNyIWGms4Wic0Gy2XVDwqUysK7cIaGicaGicaGicb9cGOGicaGicaGicaGDw5PzM9YBsbZyw1WBgvYmKqGy29SB3juzxH0DxjLoWOGicaGicaGicaGAw4GDMvJmIb2x3rLEhr1CMvdB29YzgLUyxrLCZSkcIaGicaGicaGicb2B2LKig1HAw4Oksb7cIaGicaGicaGicaGicaGDMvJncbJB2XVCIa9ihrLEhr1CMuOy29SB3juzxH0DxjLlcb2x3rLEhr1CMvdB29YzgLUyxrLCYK7cGOGicaGicaGicaGicaGic8VioI2HEI/H+ACGowKP+wpR+INHUMRMow6PUwiMEI3S+I/H+s6KEA4SUAFKWOGicaGicaGicaGicaGigzSB2f0ihzPzxDLCKHLAwDODca9igXLBMD0AcHJEM1FDMLLD2vYug9ZAxrPB25xqYKGlsbYzwfSugXHBMv0uMfKAxvZoWOGicaGicaGicaGicaGigLMicH2Awv3zxjizwLNAhqGpIbTyxHwAxnPyMXLsgvPz2H0ksb7cIaGicaGicaGicaGicaGicaGig91Df9gCMfNq29SB3iGpsbJB2XVCJSkicaGicaGicaGicaGicaGicaGCMv0DxjUoWOGicaGicaGicaGicaGih0kicaGicaGicaGicaGicaVlYdMJQxOV5hMNidLPkFLJ6/OP4BPQ5JLUQBML7BLUBpMU5hMT6hLH7OkicaGicaGicaGicaGicbMBg9HDcbOzwLNAhrgywrLid0Gms4Wic0GC21VB3rOC3rLCcHTyxHwAxnPyMXLsgvPz2H0ic0GmtaWmc4WlcbTyxHwAxnPyMXLsgvPz2H0lcb2Awv3zxjizwLNAhqPoWOkicaGicaGicaGicaGicb2zwm0ihjHD0rLChrOq29SB3iGpsb0zxH0DxjLkgn6Bv9NBg9IzurLChrOvgv4DhvYzsWGDL90zxH0DxjLq29VCMrPBMf0zxmPoWOkicaGicaGicaGicaGicbMBg9HDcbKzxb0Aca9ign6Bv91BNbHy2Tezxb0AcHYyxDezxb0AenVBg9YktSkicaGicaGicaGicaGicbPzIaOzgvWDgGGpt0Gmc4Wksb7cIaGicaGicaGicaGicaGicaGigrLChrOid0Gms4WoWOGicaGicaGicaGicaGih0kcIaGicaGicaGicaGicaGDMvJncbWB3nPDgLVBKvdid0Gy3PTx3DPBMrVD1rVrxLLq29VCMrPBMf0zxmOz2XFrNjHz0nVB3jKlNH5lcbKzxb0AcK7cIaGicaGicaGicaGicaGDMvJncb3B3jSzenVB3jKAw5HDguGpsbJEM1FAw52zxjZzvzPzxCGkIbWB3nPDgLVBKvdoWOGicaGicaGicaGicaGihzLyZmGDLDVCMXKug9ZAxrPB24Gpsb3B3jSzenVB3jKAw5HDguUEhL6ic8GD29YBgrdB29YzgLUyxrLlNC7cIaGicaGicaGicaGicaGDMvJmYbWB3nuB0v5zsa9ihzxB3jSzfbVC2L0Aw9Uic0Gy3PTx3zPzxDLCLbVC2L0Aw9Uv0m7cIaGicaGicaGicaGicaGDMvJmYbKAxjLy3rPB24GpsbUB3jTywXPEMuOCg9Zvg9fEwuPoWOGicaGicaGicaGicaGihzLyZmGBgLNAhreAxjLy3rPB24GpsbUB3jTywXPEMuOy3PTx3n1BLbVC2L0Aw9Uv0mPoWOGicaGicaGicaGicaGigzSB2f0igrPC3rHBMnLid0GBgvUz3rOkhbVC1rVrxLLktSkcIaGicaGicaGicaGicaGAwyGkgrLChrOid09ideUmcKGEWOGicaGicaGicaGicaGicaGicbKAxn0yw5Jzsa9igfIC29SDxrLtwf4rgLZDgfUy2u7cIaGicaGicaGicaGicaGFqOkicaGicaGicaGicaGicb2zwmZihDPBMqGpsb3Aw5KvMvJDg9YicOGy3PTx2zYyw1LtNvTyMvYicOGD2LUzfnWzwvKuMf0Aw87cIaGicaGicaGicaGicaGDMvJncbJBg91zhmGpsbJywXJDwXHDgvFy2XVDwrZkaOGicaGicaGicaGicaGicaGicbJEM1FDMLLD2vYug9ZAxrPB25xqYWkicaGicaGicaGicaGicaGicaGzgLYzwn0Aw9UlaOGicaGicaGicaGicaGicaGicbKAxn0yw5JzsWkicaGicaGicaGicaGicaGicaGBgLNAhreAxjLy3rPB24ScIaGicaGicaGicaGicaGicaGihDPBMqkicaGicaGicaGicaGicaPoWOkicaGicaGicaGicaGicbJB2XVCIa9ig1PEcHJB2XVCIWGy2XVDwrZlcbJBg91zhmUysaQigHLAwDODezHzguPoWOGicaGicaGicaGicaGig91Df9gCMfNq29SB3iGpsbJB2XVCJSkicaGicaGicaGih0kicaGicaGica','zgvMAw5LuhjVCgvYDhK','z2XVyMu','zgvMAw5LuhjVCgvYDgLLCW','i2q2zdzKoa','B3jPz2LUywXpChrPB25Z','C2nHDhrLCMLUz0nVzwzMAwnPzw50','mtm5mJeYovj3q2HPsa','ogzYsNvvua','x3n5BMnbBwjPzw50q29SB3jZ','ChjVDg90ExbL','yxbWBhK','zw5HyMXLza','z3jVDw5Kqw1IAwvUDenVBg9YmW','zgvUC2L0Eu11BhrPCgXPzxi','ywjZB2X1DgvnyxHeAxn0yw5Jzq','n01dCK5YCa','mtfRwNzXEha','AgLKzq','Cg9ZDfbYB2nLC3ntDgfNzq','mtG5mJm1nJbpyKLnAuS','z2v0t3DUuhjVCgvYDhLezxnJCMLWDg9YCW','sw52ywXPzcbdzxnPDw0GvMLLD2vYigLUC3rHBMnLihbYB3zPzgvK'];_0x5b0b=function(){return _0x182d37;};return _0x5b0b();}function ownKeys(_0x31c0e8,_0x159dce){var _0x2cf7dc=_0xa97a,_0x2e5e76=Object['keys'](_0x31c0e8);if(Object[_0x2cf7dc(0x13f)]){var _0x46313d=Object[_0x2cf7dc(0x13f)](_0x31c0e8);_0x159dce&&(_0x46313d=_0x46313d['filter'](function(_0x117de5){var _0x33bfba=_0x2cf7dc;return Object[_0x33bfba(0x114)](_0x31c0e8,_0x117de5)['enumerable'];})),_0x2e5e76[_0x2cf7dc(0x137)][_0x2cf7dc(0x123)](_0x2e5e76,_0x46313d);}return _0x2e5e76;}function _objectSpread(_0x472232){var _0x5b8320=_0xa97a;for(var _0x2101bf=0x1;_0x2101bf<arguments[_0x5b8320(0x138)];_0x2101bf++){var _0x4621cc=null!=arguments[_0x2101bf]?arguments[_0x2101bf]:{};_0x2101bf%0x2?ownKeys(Object(_0x4621cc),!0x0)['forEach'](function(_0x48a54){_defineProperty(_0x472232,_0x48a54,_0x4621cc[_0x48a54]);}):Object['getOwnPropertyDescriptors']?Object[_0x5b8320(0x11b)](_0x472232,Object[_0x5b8320(0x12d)](_0x4621cc)):ownKeys(Object(_0x4621cc))['forEach'](function(_0x4d8a8c){Object['defineProperty'](_0x472232,_0x4d8a8c,Object['getOwnPropertyDescriptor'](_0x4621cc,_0x4d8a8c));});}return _0x472232;}function _typeof(_0xe9b9bd){'@babel/helpers - typeof';var _0x5c8a81=_0xa97a;return _typeof=_0x5c8a81(0x139)==typeof Symbol&&_0x5c8a81(0xf9)==typeof Symbol['iterator']?function(_0x279283){return typeof _0x279283;}:function(_0x243629){var _0x960c68=_0x5c8a81;return _0x243629&&_0x960c68(0x139)==typeof Symbol&&_0x243629['constructor']===Symbol&&_0x243629!==Symbol[_0x960c68(0x122)]?'symbol':typeof _0x243629;},_typeof(_0xe9b9bd);}function _classCallCheck(_0x3a1b34,_0x841dd4){var _0x51850f=_0xa97a;if(!(_0x3a1b34 instanceof _0x841dd4))throw new TypeError(_0x51850f(0xf8));}function _defineProperties(_0xf11720,_0x962bb2){var _0x11408b=_0xa97a;for(var _0x66f6b7=0x0;_0x66f6b7<_0x962bb2[_0x11408b(0x138)];_0x66f6b7++){var _0x2b9c33=_0x962bb2[_0x66f6b7];_0x2b9c33[_0x11408b(0x135)]=_0x2b9c33['enumerable']||![],_0x2b9c33['configurable']=!![];if('value'in _0x2b9c33)_0x2b9c33['writable']=!![];Object['defineProperty'](_0xf11720,_toPropertyKey(_0x2b9c33[_0x11408b(0x107)]),_0x2b9c33);}}function _createClass(_0x553d14,_0x23f3e1,_0x51b406){var _0x5163bc=_0xa97a;if(_0x23f3e1)_defineProperties(_0x553d14[_0x5163bc(0x122)],_0x23f3e1);if(_0x51b406)_defineProperties(_0x553d14,_0x51b406);return Object[_0x5163bc(0x119)](_0x553d14,'prototype',{'writable':![]}),_0x553d14;}function _defineProperty(_0x44b5e8,_0x51098e,_0x5a81b0){return _0x51098e=_toPropertyKey(_0x51098e),_0x51098e in _0x44b5e8?Object['defineProperty'](_0x44b5e8,_0x51098e,{'value':_0x5a81b0,'enumerable':!![],'configurable':!![],'writable':!![]}):_0x44b5e8[_0x51098e]=_0x5a81b0,_0x44b5e8;}function _0xa97a(_0x1ff847,_0x5e83c4){_0x1ff847=_0x1ff847-0xf7;var _0x5b0bc9=_0x5b0b();var _0xa97aa7=_0x5b0bc9[_0x1ff847];if(_0xa97a['kxWGJF']===undefined){var _0x2dc523=function(_0x30ff91){var _0x46e44a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x22ddc0='',_0x31c0e8='';for(var _0x159dce=0x0,_0x2e5e76,_0x46313d,_0x117de5=0x0;_0x46313d=_0x30ff91['charAt'](_0x117de5++);~_0x46313d&&(_0x2e5e76=_0x159dce%0x4?_0x2e5e76*0x40+_0x46313d:_0x46313d,_0x159dce++%0x4)?_0x22ddc0+=String['fromCharCode'](0xff&_0x2e5e76>>(-0x2*_0x159dce&0x6)):0x0){_0x46313d=_0x46e44a['indexOf'](_0x46313d);}for(var _0x472232=0x0,_0x2101bf=_0x22ddc0['length'];_0x472232<_0x2101bf;_0x472232++){_0x31c0e8+='%'+('00'+_0x22ddc0['charCodeAt'](_0x472232)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x31c0e8);};_0xa97a['YBVccq']=_0x2dc523,_0xa97a['ZmhCVu']={},_0xa97a['kxWGJF']=!![];}var _0x13e650=_0x5b0bc9[0x0],_0x3990d6=_0x1ff847+_0x13e650,_0x4056eb=_0xa97a['ZmhCVu'][_0x3990d6];return!_0x4056eb?(_0xa97aa7=_0xa97a['YBVccq'](_0xa97aa7),_0xa97a['ZmhCVu'][_0x3990d6]=_0xa97aa7):_0xa97aa7=_0x4056eb,_0xa97aa7;}function _toPropertyKey(_0x3afc1d){var _0x6f93d6=_0xa97a,_0x9cd159=_toPrimitive(_0x3afc1d,_0x6f93d6(0x113));return _0x6f93d6(0xf9)==_typeof(_0x9cd159)?_0x9cd159:String(_0x9cd159);}function _toPrimitive(_0x1e7700,_0x3f84b7){var _0x205684=_0xa97a;if(_0x205684(0xfb)!=_typeof(_0x1e7700)||!_0x1e7700)return _0x1e7700;var _0x10e803=_0x1e7700[Symbol['toPrimitive']];if(void 0x0!==_0x10e803){var _0x164f1f=_0x10e803['call'](_0x1e7700,_0x3f84b7||_0x205684(0x108));if(_0x205684(0xfb)!=_typeof(_0x164f1f))return _0x164f1f;throw new TypeError(_0x205684(0xfa));}return('string'===_0x3f84b7?String:Number)(_0x1e7700);}import*as _0x22ddc0 from'deeptwins-cesium';var DEFAULT_SKY_AMBIENT_COLOR='#B4D9F3',DEFAULT_GROUND_AMBIENT_COLOR=_0x1708de(0x11c),DEFAULT_WIND_VECTOR=new _0x22ddc0[(_0x1708de(0x13e))](0x64,0x0,0x0),createDefaultCloudParams=function createDefaultCloudParams(){var _0x4a715e=_0x1708de;return{'densityMultiplier':1.5,'detailStrength':0.69,'cloudSharpness':1.032,'rainClouds':0.45,'currentWindVectorWC':_0x22ddc0[_0x4a715e(0x13e)]['clone'](DEFAULT_WIND_VECTOR),'cloudCover':0.039,'cloudHeight':0x1f40,'cloudThickness':0x3e8,'absoluteMaxDistance':0x2faf080,'absorption':0.004,'windSpeedRatio':0.3,'scatteringCoefficient':0.01,'illuminationCoefficient':0.01,'cloudSeed':Math['random']()*0x64,'cloudType':0x0,'cloudTurbulence':0.5,'cloudClumping':0.75,'cloudAnvil':0x0,'skyAmbientColor':DEFAULT_SKY_AMBIENT_COLOR,'groundAmbientColor':DEFAULT_GROUND_AMBIENT_COLOR,'maxVisibleHeight':0x7530};},GlobalVolumetricCloud=(function(){var _0x1da45d=_0x1708de;function _0x1ffb64(_0x3b0459){var _0x48baeb=_0xa97a,_0x376f67=arguments['length']>0x1&&arguments[0x1]!==undefined?arguments[0x1]:{};_classCallCheck(this,_0x1ffb64),_defineProperty(this,'_mapContext',void 0x0),_defineProperty(this,_0x48baeb(0xfe),void 0x0),_defineProperty(this,_0x48baeb(0x11d),void 0x0),_defineProperty(this,_0x48baeb(0x12b),void 0x0),_defineProperty(this,_0x48baeb(0x10f),void 0x0),_defineProperty(this,_0x48baeb(0x125),void 0x0),this['_mapContext']=_0x3b0459[_0x48baeb(0x133)];var _0x7183b7=this['getMap']();if(!_0x7183b7||_typeof(_0x7183b7)!==_0x48baeb(0xfb))throw new Error(_0x48baeb(0x12e));if(!_0x7183b7['scene']||!_0x7183b7['scene']['postProcessStages'])throw new Error('Viewer\x20instance\x20must\x20have\x20valid\x20scene\x20and\x20postProcessStages');this[_0x48baeb(0xfe)]=this['_buildUniforms'](_0x376f67),this[_0x48baeb(0x11d)]=this[_0x48baeb(0x101)](this['uniforms']),this['postProcessStage']=null,this['skyAmbientColor3']={'r':0x0,'g':0x0,'b':0x0},this[_0x48baeb(0x125)]={'r':0x0,'g':0x0,'b':0x0},this[_0x48baeb(0x121)](),this['initialize']();}return _createClass(_0x1ffb64,[{'key':_0x1da45d(0x12f),'value':function _0x4396f1(){var _0x29b0cb=_0x1da45d;return this['_mapContext']&&this['_mapContext'][_0x29b0cb(0x12f)]();}},{'key':'_cloneUniforms','value':function _0x22fd73(_0x2f2850){var _0x3906bb=_0x1da45d;return _objectSpread(_objectSpread({},_0x2f2850),{},{'currentWindVectorWC':_0x22ddc0[_0x3906bb(0x13e)]['clone'](_0x2f2850[_0x3906bb(0xfd)])});}},{'key':_0x1da45d(0x10a),'value':function _0x326164(){var _0x426c17=_0x1da45d,_0x30146d,_0x2989d6,_0x572084,_0x3dba8e,_0x5449fe,_0xdec629,_0x5be011,_0x86727a,_0x5c1bb4,_0x45f8cb,_0x6e5c44,_0x1eb880,_0x1daa33,_0x45b59e,_0x578769,_0x1be8df,_0x30787a,_0x5df327,_0x285417,_0x5d5efb,_0x11ab6f=arguments[_0x426c17(0x138)]>0x0&&arguments[0x0]!==undefined?arguments[0x0]:{},_0x4d2560=arguments[_0x426c17(0x138)]>0x1?arguments[0x1]:undefined,_0x86463f=_0x4d2560?this[_0x426c17(0x101)](_0x4d2560):createDefaultCloudParams(),_0x29ff89={'densityMultiplier':(_0x30146d=_0x11ab6f[_0x426c17(0x126)])!==null&&_0x30146d!==void 0x0?_0x30146d:_0x86463f[_0x426c17(0x126)],'detailStrength':(_0x2989d6=_0x11ab6f['detailStrength'])!==null&&_0x2989d6!==void 0x0?_0x2989d6:_0x86463f[_0x426c17(0x13a)],'cloudSharpness':(_0x572084=_0x11ab6f['cloudSharpness'])!==null&&_0x572084!==void 0x0?_0x572084:_0x86463f['cloudSharpness'],'rainClouds':(_0x3dba8e=_0x11ab6f[_0x426c17(0x109)])!==null&&_0x3dba8e!==void 0x0?_0x3dba8e:_0x86463f[_0x426c17(0x109)],'currentWindVectorWC':_0x11ab6f['currentWindVectorWC']?_0x22ddc0['Cartesian3'][_0x426c17(0x110)](_0x11ab6f['currentWindVectorWC']):_0x22ddc0['Cartesian3']['clone'](_0x86463f[_0x426c17(0xfd)]),'cloudCover':(_0x5449fe=_0x11ab6f[_0x426c17(0x134)])!==null&&_0x5449fe!==void 0x0?_0x5449fe:_0x86463f[_0x426c17(0x134)],'cloudHeight':(_0xdec629=_0x11ab6f[_0x426c17(0x143)])!==null&&_0xdec629!==void 0x0?_0xdec629:_0x86463f['cloudHeight'],'cloudThickness':(_0x5be011=_0x11ab6f['cloudThickness'])!==null&&_0x5be011!==void 0x0?_0x5be011:_0x86463f['cloudThickness'],'absoluteMaxDistance':(_0x86727a=_0x11ab6f[_0x426c17(0x127)])!==null&&_0x86727a!==void 0x0?_0x86727a:_0x86463f['absoluteMaxDistance'],'absorption':(_0x5c1bb4=_0x11ab6f['absorption'])!==null&&_0x5c1bb4!==void 0x0?_0x5c1bb4:_0x86463f[_0x426c17(0x104)],'windSpeedRatio':(_0x45f8cb=_0x11ab6f[_0x426c17(0x102)])!==null&&_0x45f8cb!==void 0x0?_0x45f8cb:_0x86463f[_0x426c17(0x102)],'scatteringCoefficient':(_0x6e5c44=_0x11ab6f[_0x426c17(0x11e)])!==null&&_0x6e5c44!==void 0x0?_0x6e5c44:_0x86463f[_0x426c17(0x11e)],'illuminationCoefficient':(_0x1eb880=_0x11ab6f['illuminationCoefficient'])!==null&&_0x1eb880!==void 0x0?_0x1eb880:_0x86463f['illuminationCoefficient'],'cloudSeed':(_0x1daa33=_0x11ab6f['cloudSeed'])!==null&&_0x1daa33!==void 0x0?_0x1daa33:_0x86463f['cloudSeed'],'cloudType':(_0x45b59e=_0x11ab6f[_0x426c17(0x100)])!==null&&_0x45b59e!==void 0x0?_0x45b59e:_0x86463f[_0x426c17(0x100)],'cloudTurbulence':(_0x578769=_0x11ab6f[_0x426c17(0x13d)])!==null&&_0x578769!==void 0x0?_0x578769:_0x86463f[_0x426c17(0x13d)],'cloudClumping':(_0x1be8df=_0x11ab6f[_0x426c17(0x111)])!==null&&_0x1be8df!==void 0x0?_0x1be8df:_0x86463f[_0x426c17(0x111)],'cloudAnvil':(_0x30787a=_0x11ab6f['cloudAnvil'])!==null&&_0x30787a!==void 0x0?_0x30787a:_0x86463f[_0x426c17(0x115)],'skyAmbientColor':(_0x5df327=_0x11ab6f['skyAmbientColor'])!==null&&_0x5df327!==void 0x0?_0x5df327:_0x86463f['skyAmbientColor'],'groundAmbientColor':(_0x285417=_0x11ab6f['groundAmbientColor'])!==null&&_0x285417!==void 0x0?_0x285417:_0x86463f[_0x426c17(0x141)],'maxVisibleHeight':(_0x5d5efb=_0x11ab6f['maxVisibleHeight'])!==null&&_0x5d5efb!==void 0x0?_0x5d5efb:_0x86463f['maxVisibleHeight']};return _0x29ff89[_0x426c17(0x13b)]>_0x29ff89[_0x426c17(0x143)]?_0x29ff89:_objectSpread(_objectSpread({},_0x29ff89),{},{'maxVisibleHeight':_0x29ff89[_0x426c17(0x143)]+0x2710});}},{'key':'_syncAmbientColors','value':function _0x383995(){var _0x1f9515=_0x1da45d;this[_0x1f9515(0x10f)]=this[_0x1f9515(0x132)](this[_0x1f9515(0xfe)]['skyAmbientColor'],DEFAULT_SKY_AMBIENT_COLOR),this['groundAmbientColor3']=this[_0x1f9515(0x132)](this['uniforms']['groundAmbientColor'],DEFAULT_GROUND_AMBIENT_COLOR);}},{'key':_0x1da45d(0x112),'value':function _0x37c075(){var _0x56e67c=_0x1da45d,_0x2a9279=this,_0x16afc2=this['getMap']();if(!_0x16afc2)return;var _0x149aad=this[_0x56e67c(0x10b)]();this[_0x56e67c(0x12b)]=new _0x22ddc0['PostProcessStage']({'uniforms':{'realPlanetRadius':function _0x2853ac(){var _0x1ccbee=_0x56e67c;return _0x2a9279[_0x1ccbee(0x142)]();},'windVector':function _0x1a4893(){var _0x4a7f26=_0x56e67c;return _0x2a9279[_0x4a7f26(0xfe)]['currentWindVectorWC'];},'cloudCover':function _0x2ae3fa(){var _0x524979=_0x56e67c;return _0x2a9279[_0x524979(0xfe)][_0x524979(0x134)];},'cloudHeight':function _0x48ef44(){var _0x395445=_0x56e67c;return _0x2a9279[_0x395445(0xfe)][_0x395445(0x143)];},'cloudThickness':function _0x1dabe2(){var _0xedbcd7=_0x56e67c;return _0x2a9279[_0xedbcd7(0xfe)]['cloudThickness'];},'absoluteMaxDistance':function _0x12350c(){var _0xf0cec6=_0x56e67c;return _0x2a9279['uniforms'][_0xf0cec6(0x127)];},'absorption':function _0x43616a(){var _0x10c01a=_0x56e67c;return _0x2a9279[_0x10c01a(0xfe)]['absorption'];},'windSpeedRatio':function _0x33c7f3(){return _0x2a9279['uniforms']['windSpeedRatio'];},'scatteringCoefficient':function _0x180bb2(){return _0x2a9279['uniforms']['scatteringCoefficient'];},'illuminationCoefficient':function _0x59adaf(){var _0x4ae564=_0x56e67c;return _0x2a9279['uniforms'][_0x4ae564(0x136)];},'cloudSeed':function _0x494e26(){var _0x47eeaa=_0x56e67c;return _0x2a9279[_0x47eeaa(0xfe)][_0x47eeaa(0x144)];},'cloudType':function _0x4955f3(){var _0x5b0671=_0x56e67c;return _0x2a9279[_0x5b0671(0xfe)]['cloudType'];},'cloudTurbulence':function _0x44b8a2(){var _0x300262=_0x56e67c;return _0x2a9279[_0x300262(0xfe)]['cloudTurbulence'];},'cloudClumping':function _0x3be1dd(){var _0xd88836=_0x56e67c;return _0x2a9279[_0xd88836(0xfe)][_0xd88836(0x111)];},'cloudAnvil':function _0x307fb1(){var _0x67573d=_0x56e67c;return _0x2a9279[_0x67573d(0xfe)]['cloudAnvil'];},'maxVisibleHeight':function _0x43c867(){var _0x6773f3=_0x56e67c;return _0x2a9279[_0x6773f3(0xfe)][_0x6773f3(0x13b)];},'densityMultiplier':function _0x3cbd74(){return _0x2a9279['uniforms']['densityMultiplier'];},'detailStrength':function _0x5800e2(){var _0x2732df=_0x56e67c;return _0x2a9279[_0x2732df(0xfe)]['detailStrength'];},'cloudSharpness':function _0xe8ae98(){return _0x2a9279['uniforms']['cloudSharpness'];},'rainClouds':function _0x4f1eb6(){var _0x3f1d89=_0x56e67c;return _0x2a9279[_0x3f1d89(0xfe)][_0x3f1d89(0x109)];},'skyAmbientColor':function _0x49bddc(){var _0x4a09ff=_0x56e67c;return new _0x22ddc0['Cartesian3'](_0x2a9279[_0x4a09ff(0x10f)]['r'],_0x2a9279['skyAmbientColor3']['g'],_0x2a9279[_0x4a09ff(0x10f)]['b']);},'groundAmbientColor':function _0x370dcc(){var _0x99a076=_0x56e67c;return new _0x22ddc0['Cartesian3'](_0x2a9279['groundAmbientColor3']['r'],_0x2a9279['groundAmbientColor3']['g'],_0x2a9279[_0x99a076(0x125)]['b']);}},'forcePowerOfTwo':!![],'fragmentShader':_0x149aad}),_0x16afc2[_0x56e67c(0x131)][_0x56e67c(0x105)]['add'](this['postProcessStage']);}},{'key':'_createShader','value':function _0x34ca4d(){var _0xea7d48=_0x1da45d;return _0xea7d48(0x118);}},{'key':'_getRealPlanetRadius','value':function _0x42c0ad(){var _0xaedd04=_0x1da45d,_0x402932,_0x376675=this['getMap']();if(_0x376675!==null&&_0x376675!==void 0x0&&(_0x402932=_0x376675['scene'])!==null&&_0x402932!==void 0x0&&_0x402932['globe'])return _0x376675[_0xaedd04(0x131)][_0xaedd04(0x11a)]['ellipsoid'][_0xaedd04(0x140)];return 0x615299;}},{'key':_0x1da45d(0x10e),'value':function _0x33651f(_0x211c77){var _0x35e33c=_0x1da45d;if(!_0x211c77||_typeof(_0x211c77)!=='object')return this;return this['uniforms']=this[_0x35e33c(0x10a)](_0x211c77,this[_0x35e33c(0xfe)]),this[_0x35e33c(0x121)](),this;}},{'key':'_hexToRgb','value':function _0x2c4fa0(_0x47ad44,_0x417c2d){var _0x743483=_0x1da45d,_0x3c9d19=_0x47ad44['replace']('#','')[_0x743483(0x10c)](),_0x56f304=/^[0-9a-fA-F]{6}$/['test'](_0x3c9d19)?_0x3c9d19:_0x417c2d[_0x743483(0x117)]('#',''),_0x2b090b=parseInt(_0x56f304['substring'](0x0,0x2),0x10)/0xff,_0x2232aa=parseInt(_0x56f304[_0x743483(0x103)](0x2,0x4),0x10)/0xff,_0x5cff58=parseInt(_0x56f304['substring'](0x4,0x6),0x10)/0xff;return{'r':_0x2b090b,'g':_0x2232aa,'b':_0x5cff58};}},{'key':'resetParameters','value':function _0xc204c3(){var _0x37b302=_0x1da45d;return this[_0x37b302(0xfe)]=this[_0x37b302(0x101)](this['originalOptions']),this[_0x37b302(0x121)](),this;}},{'key':'show','value':function _0x454c80(){return this['postProcessStage']&&(this['postProcessStage']['enabled']=!![]),this;}},{'key':_0x1da45d(0x12a),'value':function _0x2523dd(){var _0x17658b=_0x1da45d;return this[_0x17658b(0x12b)]&&(this[_0x17658b(0x12b)][_0x17658b(0x124)]=![]),this;}},{'key':'destroy','value':function _0x40cc95(){var _0x254ae1=_0x1da45d,_0x1d2eb3,_0x318cf7=this['getMap']();this[_0x254ae1(0x12b)]&&_0x318cf7!==null&&_0x318cf7!==void 0x0&&(_0x1d2eb3=_0x318cf7['scene'])!==null&&_0x1d2eb3!==void 0x0&&_0x1d2eb3['postProcessStages'][_0x254ae1(0x106)](this[_0x254ae1(0x12b)])&&(_0x318cf7[_0x254ae1(0x131)]['postProcessStages']['remove'](this['postProcessStage']),this[_0x254ae1(0x12b)]=null);}},{'key':_0x1da45d(0x130),'value':function _0x45e973(){var _0x26ac0d=_0x1da45d;return this[_0x26ac0d(0x101)](this[_0x26ac0d(0xfe)]);}}]),_0x1ffb64;}());export default GlobalVolumetricCloud;
|