@iweather-js/iweather-gl 0.0.49 → 0.0.51
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/index.js
CHANGED
|
@@ -32,7 +32,7 @@ var d4=Object.defineProperty;var D2=(e,t)=>{for(var o in t)d4(e,o,{get:t[o],enum
|
|
|
32
32
|
};
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
|
-
`};getMaskUniforms(){let e=this.getMaskTexture(),t=this.getRenderBounds();if(e&&t)return{u_mask:e,u_maskBounds:t,u_hasMask:!0};return{}}}class W extends o1{bounds;isAnimation=!0;t=0;data;nextData;maskLayer;constructor(e){super({id:e.id});this.bounds=e.bounds,this.maskLayer=e.maskLayer}setIsAnimation(e=!0){this.isAnimation=e}setBounds(e){this.bounds=e}onMount(){}setMaskLayer(e){this.maskLayer=e}updateData(e,t,o){if(!t)t=e;if(e&&t&&this.data!==e)this.setBounds(e.bounds),this.setTextureOptions(this.gl,{u_image0:e.texture_mercator||{src:e.data_mercator,mag:this.gl.LINEAR,min:this.gl.LINEAR,wrap:this.gl.CLAMP_TO_EDGE},u_image1:t.texture_mercator||{src:t.data_mercator,mag:this.gl.LINEAR,min:this.gl.LINEAR,wrap:this.gl.CLAMP_TO_EDGE}});this.data=e,this.nextData=t,this.t=this.isAnimation?o:0,this.rerender()}onClear(){this.data=void 0,this.nextData=void 0,this.t=0,this.rerender()}get maskShaderData(){return F2.shaderData}get maskUniforms(){return this.maskLayer?this.maskLayer.getMaskUniforms():{}}}import*as a1 from"twgl.js";class E1 extends W{palette;renderType=1;isBicubic=!1;constructor(e){super(e);this.palette=e.palette}getVertShader(e){return`
|
|
35
|
+
`};getMaskUniforms(){let e=this.getMaskTexture(),t=this.getRenderBounds();if(e&&t)return{u_mask:e,u_maskBounds:t,u_hasMask:!0};return{}}}class W extends o1{bounds;isAnimation=!0;t=0;data;nextData;maskLayer;constructor(e){super({id:e.id});this.bounds=e.bounds,this.maskLayer=e.maskLayer}setIsAnimation(e=!0){this.isAnimation=e}setBounds(e){this.bounds=e}onMount(){}setMaskLayer(e){this.maskLayer=e,this.rerender()}updateData(e,t,o){if(!t)t=e;if(e&&t&&this.data!==e)this.setBounds(e.bounds),this.setTextureOptions(this.gl,{u_image0:e.texture_mercator||{src:e.data_mercator,mag:this.gl.LINEAR,min:this.gl.LINEAR,wrap:this.gl.CLAMP_TO_EDGE},u_image1:t.texture_mercator||{src:t.data_mercator,mag:this.gl.LINEAR,min:this.gl.LINEAR,wrap:this.gl.CLAMP_TO_EDGE}});this.data=e,this.nextData=t,this.t=this.isAnimation?o:0,this.rerender()}onClear(){this.data=void 0,this.nextData=void 0,this.t=0,this.rerender()}get maskShaderData(){return F2.shaderData}get maskUniforms(){return this.maskLayer?this.maskLayer.getMaskUniforms():{u_hasMask:!1}}}import*as a1 from"twgl.js";class E1 extends W{palette;renderType=1;isBicubic=!1;constructor(e){super(e);this.palette=e.palette}getVertShader(e){return`
|
|
36
36
|
#version 300 es
|
|
37
37
|
|
|
38
38
|
${e.shaderData.vertexShaderPrelude}
|
|
@@ -568,7 +568,7 @@ void main() {
|
|
|
568
568
|
}else{
|
|
569
569
|
v_iconColor = vec4(u_iconColor.rgb / 255.0, u_iconColor.a);
|
|
570
570
|
}
|
|
571
|
-
}`}function X1(e,t,o){let p=e.getZoom(),y=o[t],i=y+(y-1)*(Math.pow(2,Math.floor(p))-1);return{rowCount:i,colCount:i}}import{uniq as F8}from"lodash-es";function q1(e,t,o,p){let y=b8(e,o,p),i=new Float32Array(t*4);try{i.set(y.flat())}catch(n){console.info("ERROR:",t,y.flat().length,n)}return{buffer:i,list:y}}function b8(e,t,o){let p=z2(e);if(p[2]>180){let i=[p[0],p[1],180,p[3]],n=[-180,p[1],p[2],p[3]],a={topLeft:[i[0],i[3]],bottomLeft:[i[0],i[1]],topRight:[i[2],i[3]],bottomRight:[i[2],i[1]]},s={topLeft:[n[0],n[3]],bottomLeft:[n[0],n[1]],topRight:[n[2],n[3]],bottomRight:[n[2],n[1]]},l=f2(a,t,o),g=f2(s,t,o),u=F8([...l,...g]);return h3(u,t,o)}else{let i=[p[0],p[3]],n=[p[0],p[1]],a=[p[2],p[3]],s=[p[2],p[1]],g=f2({topLeft:i,bottomLeft:n,topRight:a,bottomRight:s},t,o);return h3(g,t,o)}}function h3(e,t,o){return e.map((y)=>{let i=Math.floor(y/o),a=y%o/(o-1),s=i/(t-1);return[a,s]})}function f2(e,t,o){let p=K1(e.topLeft,t,o),y=K1(e.bottomLeft,t,o),i=K1(e.topRight,t,o),n=K1(e.bottomRight,t,o),a=Math.max(0,Math.min(Math.floor(p/o),Math.floor(y/o),Math.floor(i/o),Math.floor(n/o))),s=Math.min(t-1,Math.max(Math.floor(p/o),Math.floor(y/o),Math.floor(i/o),Math.floor(n/o))),l=Math.max(0,Math.min(p%o,y%o,i%o,n%o)),g=Math.min(o-1,Math.max(p%o,y%o,i%o,n%o)),u=[];for(let m=a;m<=s;m++)for(let c=l;c<=g;c++)u.push(m*o+c);return u}var f8=(e)=>{let t=e[0],o=e[1],p=(t+180)/360,y=o*Math.PI/180,i=(1-Math.log(Math.tan(y)+1/Math.cos(y))/Math.PI)/2;return[p,i]},K1=(e,t,o)=>{let[p,y]=f8(e),i=Math.round(y*(t-1)),n=Math.round(p*(o-1));return i*o+n};import*as G1 from"maplibre-gl";function Q1(e){let t=G1.MercatorCoordinate.fromLngLat({lng:e[0],lat:e[3]}),o=G1.MercatorCoordinate.fromLngLat({lng:e[0],lat:e[1]}),p=G1.MercatorCoordinate.fromLngLat({lng:e[2],lat:e[3]}),y=G1.MercatorCoordinate.fromLngLat({lng:e[2],lat:e[1]}),i=[Object.values(t).slice(0,2),Object.values(o).slice(0,2),Object.values(p).slice(0,2),Object.values(y).slice(0,2)].flat();return[t.x,t.y,y.x,y.y]}import*as h1 from"maplibre-gl";function P1(e,t){let o=e.getCenter(),p=new h1.LngLat(o.lng-1,o.lat),y=new h1.LngLat(o.lng+1,o.lat),i=e.project(p),n=e.project(y),a=h1.MercatorCoordinate.fromLngLat(p),s=h1.MercatorCoordinate.fromLngLat(y);return t/(n.x-i.x)*(s.x-a.x)/2}class _8 extends W{options={iconColor:k2,largeValueIconColor:V2,largeValue:A2,iconSize:27,gridDensity:3,iconOpacity:1,filterValue:0,gridType:"WindBarb"};iconColor=Object.values(new O(this.options.iconColor).toRgb());largeValueIconColor=Object.values(new O(this.options.largeValueIconColor).toRgb());iconTextureLoaded=!1;SHADER_MAP=new Map;onMount(){this.loadWinnIconTexture()}onUnMount(){}getShader(e,t){let{shaderData:o}=t;if(e instanceof WebGLRenderingContext)throw Error("gl is not WebGL2RenderingContext");if(this.SHADER_MAP.has(o.variantName))return this.SHADER_MAP.get(o.variantName);let p=A.createProgramInfo(e,[f3(),v1],{transformFeedbackVaryings:["a_windInfoOut"]}),y=40000,i=A.createBufferInfoFromArrays(e,{a_windInfoOut:{numComponents:4,data:new Float32Array(y*4),drawType:e.DYNAMIC_DRAW},a_position:{numComponents:2,data:new Float32Array(y*2),drawType:e.DYNAMIC_DRAW}}),n=A.createTransformFeedback(e,p,i),a=this.createProgramInfo("grid-wind-draw",t,()=>v3(t,this.maskShaderData.vs),()=>_3(t,this.maskShaderData.fs)),s=A.createBufferInfoFromArrays(e,{...A.primitives.createXYQuadVertices(),windInfo:{numComponents:4,buffer:i.attribs.a_windInfoOut.buffer,divisor:1}}),l=A.createVertexArrayInfo(e,a,s);return this.SHADER_MAP.set(o.variantName,{feedbackProgramInfo:p,drawProgramInfo:a,feedback:n,drawVertexArrayInfo:l,tfBufferInfo:i,numInstances:y}),this.SHADER_MAP.get(o.variantName)}loadWinnIconTexture(e="/huishang/assets/map/icons/winds/v4/wind-icons.png"){let t=this.gl2;this.setTextureOptions(t,{u_texture:{src:e,mag:t.LINEAR,min:t.LINEAR,wrap:t.CLAMP_TO_EDGE}},()=>{this.iconTextureLoaded=!0,this.map.triggerRepaint()})}setOptions(e){this.options={...this.options,...e},this.iconColor=Object.values(new O(this.options.iconColor).toRgb()),this.largeValueIconColor=Object.values(new O(this.options.largeValueIconColor).toRgb()),this.map.triggerRepaint()}onRender(e,t){if(!this.data||!this.nextData)return;if(!this.bounds)return;let o=this.gl2,{feedbackProgramInfo:p,drawProgramInfo:y,feedback:i,drawVertexArrayInfo:n,tfBufferInfo:a,numInstances:s}=this.getShader(o,e);o.bindBuffer(o.ARRAY_BUFFER,null),o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,null),o.enable(o.RASTERIZER_DISCARD),o.useProgram(p.program),o.bindTransformFeedback(o.TRANSFORM_FEEDBACK,i),o.beginTransformFeedback(o.POINTS),A.setUniformsAndBindTextures(p,{...this.textures,u_image1_value_range:[this.data.minWindu,this.data.maxWindu,this.data.minWindv,this.data.maxWindv],u_image2_value_range:[this.nextData.minWindu,this.nextData.maxWindu,this.nextData.minWindv,this.nextData.maxWindv],u_bounds:Q1(this.bounds),u_filter_winds:this.options.filterValue,t:this.t});let l=P1(this.map,this.options.iconSize),g=X1(this.map,this.options.gridDensity,{1:18,2:22,3:28}),u=q1(this.map,s,g.rowCount,g.colCount);A.setAttribInfoBufferFromArray(o,a.attribs.a_position,u.buffer),A.setBuffersAndAttributes(o,p,a),A.drawBufferInfo(o,a,o.POINTS),o.endTransformFeedback(),o.bindTransformFeedback(o.TRANSFORM_FEEDBACK,null),o.disable(o.RASTERIZER_DISCARD);for(let m of t)A.drawObjectList(o,[{programInfo:y,vertexArrayInfo:n,uniforms:{bounds:this.bounds,u_projection_fallback_matrix:e.defaultProjectionData.fallbackMatrix,u_projection_matrix:e.defaultProjectionData.mainMatrix,u_projection_tile_mercator_coords:e.defaultProjectionData.tileMercatorCoords,u_projection_clipping_plane:e.defaultProjectionData.clippingPlane,u_projection_transition:e.defaultProjectionData.projectionTransition,offset:m,size:l,u_texture_exists:this.iconTextureLoaded?1:0,u_iconColor:this.iconColor,u_iconOpacity:this.options.iconOpacity,u_large_value:this.options.largeValue,u_large_value_iconColor:this.largeValueIconColor,iconsTextureSize:[1188,54],iconSize:[54,54],...this.maskUniforms,...this.textures},instanceCount:u.list.length}])}}import*as B from"twgl.js";var H1=`
|
|
571
|
+
}`}function X1(e,t,o){let p=e.getZoom(),y=o[t],i=y+(y-1)*(Math.pow(2,Math.floor(p))-1);return{rowCount:i,colCount:i}}import{uniq as F8}from"lodash-es";function q1(e,t,o,p){let y=b8(e,o,p),i=new Float32Array(t*4);try{i.set(y.flat())}catch(n){console.info("ERROR:",t,y.flat().length,n)}return{buffer:i,list:y}}function b8(e,t,o){let p=z2(e);if(p[2]>180){let i=[p[0],p[1],180,p[3]],n=[-180,p[1],p[2],p[3]],a={topLeft:[i[0],i[3]],bottomLeft:[i[0],i[1]],topRight:[i[2],i[3]],bottomRight:[i[2],i[1]]},s={topLeft:[n[0],n[3]],bottomLeft:[n[0],n[1]],topRight:[n[2],n[3]],bottomRight:[n[2],n[1]]},l=f2(a,t,o),g=f2(s,t,o),u=F8([...l,...g]);return h3(u,t,o)}else{let i=[p[0],p[3]],n=[p[0],p[1]],a=[p[2],p[3]],s=[p[2],p[1]],g=f2({topLeft:i,bottomLeft:n,topRight:a,bottomRight:s},t,o);return h3(g,t,o)}}function h3(e,t,o){return e.map((y)=>{let i=Math.floor(y/o),a=y%o/(o-1),s=i/(t-1);return[a,s]})}function f2(e,t,o){let p=K1(e.topLeft,t,o),y=K1(e.bottomLeft,t,o),i=K1(e.topRight,t,o),n=K1(e.bottomRight,t,o),a=Math.max(0,Math.min(Math.floor(p/o),Math.floor(y/o),Math.floor(i/o),Math.floor(n/o))),s=Math.min(t-1,Math.max(Math.floor(p/o),Math.floor(y/o),Math.floor(i/o),Math.floor(n/o))),l=Math.max(0,Math.min(p%o,y%o,i%o,n%o)),g=Math.min(o-1,Math.max(p%o,y%o,i%o,n%o)),u=[];for(let m=a;m<=s;m++)for(let c=l;c<=g;c++)u.push(m*o+c);return u}var f8=(e)=>{let t=e[0],o=e[1],p=(t+180)/360,y=o*Math.PI/180,i=(1-Math.log(Math.tan(y)+1/Math.cos(y))/Math.PI)/2;return[p,i]},K1=(e,t,o)=>{let[p,y]=f8(e),i=Math.round(y*(t-1)),n=Math.round(p*(o-1));return i*o+n};import*as G1 from"maplibre-gl";function Q1(e){let t=G1.MercatorCoordinate.fromLngLat({lng:e[0],lat:e[3]}),o=G1.MercatorCoordinate.fromLngLat({lng:e[0],lat:e[1]}),p=G1.MercatorCoordinate.fromLngLat({lng:e[2],lat:e[3]}),y=G1.MercatorCoordinate.fromLngLat({lng:e[2],lat:e[1]}),i=[Object.values(t).slice(0,2),Object.values(o).slice(0,2),Object.values(p).slice(0,2),Object.values(y).slice(0,2)].flat();return[t.x,t.y,y.x,y.y]}import*as h1 from"maplibre-gl";function P1(e,t){let o=e.getCenter(),p=new h1.LngLat(o.lng-1,o.lat),y=new h1.LngLat(o.lng+1,o.lat),i=e.project(p),n=e.project(y),a=h1.MercatorCoordinate.fromLngLat(p),s=h1.MercatorCoordinate.fromLngLat(y);return t/(n.x-i.x)*(s.x-a.x)/2}class _8 extends W{options={iconColor:k2,largeValueIconColor:V2,largeValue:A2,iconSize:27,gridDensity:3,iconOpacity:1,filterValue:0,gridType:"WindBarb"};iconColor=Object.values(new O(this.options.iconColor).toRgb());largeValueIconColor=Object.values(new O(this.options.largeValueIconColor).toRgb());iconTextureLoaded=!1;SHADER_MAP=new Map;onMount(){this.loadWinnIconTexture()}onUnMount(){}getShader(e,t){let{shaderData:o}=t;if(e instanceof WebGLRenderingContext)throw Error("gl is not WebGL2RenderingContext");if(this.SHADER_MAP.has(o.variantName))return this.SHADER_MAP.get(o.variantName);let p=A.createProgramInfo(e,[f3(),v1],{transformFeedbackVaryings:["a_windInfoOut"]}),y=40000,i=A.createBufferInfoFromArrays(e,{a_windInfoOut:{numComponents:4,data:new Float32Array(y*4),drawType:e.DYNAMIC_DRAW},a_position:{numComponents:2,data:new Float32Array(y*2),drawType:e.DYNAMIC_DRAW}}),n=A.createTransformFeedback(e,p,i),a=this.createProgramInfo("grid-wind-draw",t,()=>v3(t,this.maskShaderData.vs),()=>_3(t,this.maskShaderData.fs)),s=A.createBufferInfoFromArrays(e,{...A.primitives.createXYQuadVertices(),windInfo:{numComponents:4,buffer:i.attribs.a_windInfoOut.buffer,divisor:1}}),l=A.createVertexArrayInfo(e,a,s);return this.SHADER_MAP.set(o.variantName,{feedbackProgramInfo:p,drawProgramInfo:a,feedback:n,drawVertexArrayInfo:l,tfBufferInfo:i,numInstances:y}),this.SHADER_MAP.get(o.variantName)}loadWinnIconTexture(e="/huishang/assets/map/icons/winds/v4/wind-icons.png"){let t=this.gl2;this.setTextureOptions(t,{u_texture:{src:e,mag:t.LINEAR,min:t.LINEAR,wrap:t.CLAMP_TO_EDGE}},()=>{this.iconTextureLoaded=!0,this.map.triggerRepaint()})}setOptions(e){this.options={...this.options,...e},this.iconColor=Object.values(new O(this.options.iconColor).toRgb()),this.largeValueIconColor=Object.values(new O(this.options.largeValueIconColor).toRgb()),this.map.triggerRepaint()}onRender(e,t){if(!this.data||!this.nextData)return;if(!this.bounds)return;let o=this.gl2,{feedbackProgramInfo:p,drawProgramInfo:y,feedback:i,drawVertexArrayInfo:n,tfBufferInfo:a,numInstances:s}=this.getShader(o,e);o.bindBuffer(o.ARRAY_BUFFER,null),o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,null),o.enable(o.RASTERIZER_DISCARD),o.useProgram(p.program),o.bindTransformFeedback(o.TRANSFORM_FEEDBACK,i),o.beginTransformFeedback(o.POINTS),A.setUniformsAndBindTextures(p,{...this.textures,u_image1_value_range:[this.data.minWindu,this.data.maxWindu,this.data.minWindv,this.data.maxWindv],u_image2_value_range:[this.nextData.minWindu,this.nextData.maxWindu,this.nextData.minWindv,this.nextData.maxWindv],u_bounds:Q1(this.bounds),u_filter_winds:this.options.filterValue,t:this.t});let l=P1(this.map,this.options.iconSize),g=X1(this.map,this.options.gridDensity,{1:18,2:22,3:28}),u=q1(this.map,s,g.rowCount,g.colCount);A.setAttribInfoBufferFromArray(o,a.attribs.a_position,u.buffer),A.setBuffersAndAttributes(o,p,a),A.drawBufferInfo(o,a,o.POINTS),o.endTransformFeedback(),o.bindTransformFeedback(o.TRANSFORM_FEEDBACK,null),o.disable(o.RASTERIZER_DISCARD),console.info("=======this.maskUniforms=======",this.maskUniforms);for(let m of t)A.drawObjectList(o,[{programInfo:y,vertexArrayInfo:n,uniforms:{bounds:this.bounds,u_projection_fallback_matrix:e.defaultProjectionData.fallbackMatrix,u_projection_matrix:e.defaultProjectionData.mainMatrix,u_projection_tile_mercator_coords:e.defaultProjectionData.tileMercatorCoords,u_projection_clipping_plane:e.defaultProjectionData.clippingPlane,u_projection_transition:e.defaultProjectionData.projectionTransition,offset:m,size:l,u_texture_exists:this.iconTextureLoaded?1:0,u_iconColor:this.iconColor,u_iconOpacity:this.options.iconOpacity,u_large_value:this.options.largeValue,u_large_value_iconColor:this.largeValueIconColor,iconsTextureSize:[1188,54],iconSize:[54,54],...this.maskUniforms,...this.textures},instanceCount:u.list.length}])}}import*as B from"twgl.js";var H1=`
|
|
572
572
|
#define PI 3.1415926535897932384626433832795
|
|
573
573
|
|
|
574
574
|
// UV转经纬度 (UV是0-1范围)
|
|
@@ -1943,4 +1943,4 @@ void main() {
|
|
|
1943
1943
|
}
|
|
1944
1944
|
`}class c5 extends N1{getUniforms(){if(!this.data||!this.nextData)return{};return{u_image1_value_range:[this.data.minWindu,this.data.maxWindu,this.data.minWindv,this.data.maxWindv],u_image2_value_range:[this.nextData.minWindu,this.nextData.maxWindu,this.nextData.minWindv,this.nextData.maxWindv]}}getComputeVs(){return g4()}}class d5{fetchers;mock;constructor(e){this.fetchers=e.fetchers,this.mock=e.mock}}class M5{getDefOptions(){let e=this.getDataReqOptions({}),t=this.getDataResOptions({}),o=Object.keys(e).reduce((y,i)=>{return y[i]={enable:!1},y},{}),p=Object.keys(t).reduce((y,i)=>{return y[i]=void 0,y},{});return{...o,...p}}}class P5{params;layerMgrMap=void 0;constructor(e){this.params=e}getDefLayerOptions(){let e=this.layerMgrMap||this.params.createLayers();return Object.keys(e).reduce((t,o)=>{return t[o]={enable:!1},t},{})}}class F5{productMap={};products=[];groupConfig;constructor(e){e.products.reduce((t,o)=>{return t[o.type]=o,t},this.productMap),this.groupConfig=e.groupConfig,this.products=Object.values(this.productMap)}initCtx(e){Object.values(this.productMap).forEach((t)=>{t.initCtx(e)})}findProduct(e){return this.productMap[e]}get firstProduct(){return Object.values(this.productMap)[0]}}class b5{cityList;boundsPadding;isAddCityMask;customCityCoordinate={};constructor(e){this.cityList=e.cityListOptions,this.boundsPadding=e.boundsPadding||{top:0,bottom:0,left:0,right:0},this.isAddCityMask=e.isAddCityMask||!1}findCityInfo(e){let{china:t,province:o,city:p,county:y}=e,i=t?.gb||o?.gb||p?.gb||y?.gb;return this.cityList.find((a)=>a.adcode===i)}}import{SubscribeMgr as f5}from"@iweather-js/iweather-lib";import{debounce as _5,isEqual as l4,pick as v5}from"lodash-es";class h5{ctx;subscribeMgr=new f5;enabledLayerMgrs={};async mount(e){this.ctx=e;let{gisStore:t,configStore:o}=e,{map:p}=e.gisStore.getState();if(!p)return;t.getState().apply({type:"changeValue",value:{allLayerMgrs:o.getState().layerMgrConfig.params.createLayers()}});let{allLayerMgrs:y}=t.getState(),{dataReqOptionsConfig:i}=this.ctx.configStore.getState();this.subscribeMgr.add(this.ctx.gisStore.subscribe((a)=>{return{dataReqOptions:i.getDataReqOptions(a),allLayerOptopns:a.query.allLayerOptopns()}},async(a,s)=>{let l=a.allLayerOptopns,g=t.getState().query.enabledLayerOptopns(),u=v5(y,Object.keys(g));if(await Promise.all(Object.keys(y).map(async(m)=>{let c=y[m],M=l[m];if(c.initCtx(e,m),c.setEnable(M.enable),c.enable)await c.mount(M),c.setLayerOptions(M);else await c.unmount()})),!l4(a.dataReqOptions,s.dataReqOptions))Object.values(u).forEach((m)=>m.loadData());else Object.values(u).forEach((m)=>{if(m.checkIsLoadData())m.loadData()});this.enabledLayerMgrs=u},{equalityFn:l4,fireImmediately:!0}));let n=_5(()=>{Object.values(this.enabledLayerMgrs).forEach((a)=>a.boundsChange(p.getBounds()))},100);p.on("moveend",n),this.subscribeMgr.add(()=>{p.off("moveend",n)})}unmount(){this.subscribeMgr.dispose(),Object.values(this.ctx.gisStore.getState().allLayerMgrs).map((e)=>e.unmount())}}import{SubscribeMgr as x5}from"@iweather-js/iweather-lib";import{isEqual as h2}from"lodash-es";class C5{layerMgrHub;ctx;subscribeMgr=new x5;constructor(e){this.layerMgrHub=e}async mount(e){this.ctx=e,this.subscribeMgr.add(this.ctx.gisStore.subscribe((t)=>{let o=this.ctx.gisStore.getState();return{layersData:t.layersData,productType:t.productType,playMode:t.playMode,dataReqOptions:this.ctx.configStore.getState().dataReqOptionsConfig.getDataReqOptions(o)}},(t)=>{let{productType:o,playMode:p}=t,{productConfig:y}=this.ctx.configStore.getState(),n=y.findProduct(o).getTimeBarInfo(this.ctx.gisStore.getState());this.ctx.gisStore.getState().apply({type:"changeValue",value:{timeBarInfo:n,currTm:n?p==="timing"?n.timingTimeBar.initTime:n.frameTimeBar?.initTime:void 0}})},{equalityFn:h2,fireImmediately:!0})),this.subscribeMgr.add(this.ctx.gisStore.subscribe((t)=>t.currTm,(t)=>Object.values(this.layerMgrHub.enabledLayerMgrs).forEach((o)=>o.timeChange(t)),{equalityFn:h2})),this.subscribeMgr.add(this.ctx.gisStore.subscribe((t)=>t.devCustomGrayImageByMercator,(t)=>{Object.values(this.layerMgrHub.enabledLayerMgrs).forEach((o)=>o.loadData())},{equalityFn:h2}))}unmount(){this.subscribeMgr.dispose()}}import{clamp as T5}from"lodash-es";function L5(e,t){let o=t[0],p=t[1];return(T5(e,o,p)-o)/(p-o)}class x2{isDestroyed=!1;data=[];curr=void 0;setData(e){this.data=e.sort((t,o)=>t.beginTm-o.beginTm)}addData(e){this.data=[...this.data,...e].sort((t,o)=>t.beginTm-o.beginTm)}first(){return this.data[0]}find(e){let t=this.data.findLastIndex((o)=>e>=o.beginTm);if(t===-1)this.curr={data1:void 0,data2:void 0,p:0};else{let o=this.data[t],p=this.data[t+1],y=L5(e,[o.beginTm,o.endTm]);this.curr={data1:o,data2:p,p:y}}return this.curr}isEmpty(){return this.data.length===0}destroy(){this.isDestroyed=!0,this.data=[]}}import{AbortControllersMgr as I5}from"@iweather-js/iweather-lib";class D5{abortControllersMgr=new I5;setDataRes(e,t){e.gisStore.getState().apply({type:"changeValue",value:t})}onBeforeLoadData(e){return}async loadData(e){this.onBeforeLoadData(e);let t=await this.onLoadData(e),o=await this.onChangeDataRes(e,t);if(o)this.setDataRes(e,o);return t}abort(){this.abortControllersMgr.abort()}async onChangeDataRes(e,t){return}async loadMaxValue(e,t){return null}}import{AbortControllersMgr as O5,SubscribeMgr as E5}from"@iweather-js/iweather-lib";import{debounce as G5,isEqual as k5}from"lodash-es";class C2{dataFindMgrs=[];create(){let e=new x2;return this.dataFindMgrs.push(e),e}clear(){this.dataFindMgrs.forEach((e)=>e.destroy())}}class T2{layerIds=[];sourceIds=[];addMapLayer(e,t,o){let p=o&&!!e.getLayer(o)?o:void 0;if(e.addLayer(t,p),!this.layerIds.includes(t.id))this.layerIds.push(t.id);return t}addMapSource(e,t,o){if(e.addSource(t,o),!this.sourceIds.includes(t))this.sourceIds.push(t)}removeMapLayer(e,t){if(e.getLayer(t))e.removeLayer(t)}removeMapSource(e,t){if(e.getSource(t))e.removeSource(t)}setLayerVisible(e,t,o){if(e&&!!e.getLayer(t))e.setLayoutProperty(t,"visibility",o?"visible":"none")}isLayerVisible(e,t){return e?.getLayoutProperty(t,"visibility")==="visible"}hasMapLayer(e,t){return e?.getLayer(t)!==void 0}getMapLayer(e,t){return e?.getLayer(t)}clear(e){this.layerIds.forEach((t)=>this.removeMapLayer(e,t)),this.sourceIds.forEach((t)=>this.removeMapSource(e,t)),this.layerIds=[],this.sourceIds=[]}clearCustomLayers(e){this.layerIds.map((t)=>this.getMapLayer(e,t)).filter((t)=>t!==void 0).filter((t)=>t.implementation instanceof o1).map((t)=>t.implementation).forEach((t)=>t.clear())}}class L2{imgs={};addImages(e,t){Object.entries(t).forEach(([o,{src:p}])=>{if(!e.hasImage(o))e.loadImage(p).then((y)=>{this.imgs[o]={src:p},e.addImage(o,y.data)})})}clear(e){Object.keys(this.imgs).forEach((t)=>{if(this.imgs[t])e.removeImage(t),delete this.imgs[t]})}}class V5{props;enable=!0;isMounted=!1;isReload=!1;ctx;data;layerOptions;prevLayerOptions;layerName;abortControllersMgr=new O5;subscribeMgr=E5.create();mapImgDo=new L2;dataFindMgrDo=new C2;layerMgrDo=new T2;constructor(e){this.props=e}initCtx(e,t){return this.ctx=e,this.layerName=t,this}getLayerInfo(e){return""}get dataLoaderMgr(){return this.props.dataLoaderMgr}get map(){return this.ctx.gisStore.getState().map}getGisValue(){return this.ctx.gisStore.getState()}setLayerOptions(e){if(this.prevLayerOptions=this.layerOptions,this.layerOptions=e,!this.enable)return;if(!this.isMounted)return;if(!this.map)return;if(!this.ctx.gisStore.getState().mapIsLoaded)return;if(k5(e,this.prevLayerOptions))return;this.onLayerOptionsChange(e,this.prevLayerOptions)}checkIsLoadData(){if(!this.layerOptions)return!1;return this.onIsLoadData(this.layerOptions,this.prevLayerOptions)}async mount(e){if(!this.enable)return this;if(this.isMounted)return this;if(!this.map)return this;if(!this.ctx.gisStore.getState().mapIsLoaded)return this;return await this.onMount(e),this.isMounted=!0,this}unmount(){if(!this.isMounted)return;this.isMounted=!1,this.clear(),this.onUnmount(),this.clearStoreData(),this.layerOptions=void 0,this.dataLoaderMgr?.abort(),this.abortControllersMgr.abort(),this.subscribeMgr.dispose(),this.layerMgrDo.clear(this.map),this.mapImgDo.clear(this.map)}timeChange(e){if(!this.enable)return;if(!this.map)return;if(!this.isMounted)return;let t=e??this.ctx.gisStore.getState().currTm;if(t)this.onTimeChange(t)}playStateChange(e){if(!this.enable)return;this.onPlayStateChange(e)}onPlayStateChange(e){}saveDataToStore(e){if(!this.layerName)return;let t=this.onTimingData(e);this.ctx.gisStore.getState().apply({type:"setLayersData",name:this.layerName,data:t})}clearStoreData(){if(!this.layerName)return;this.ctx.gisStore.getState().apply({type:"setLayersData",name:this.layerName,data:void 0})}async initData(e){if(!this.enable)return;if(!this.isMounted)return;if(!this.map)return;this.data=e,this.saveDataToStore(e),await this.onInitData(e),this.timeChange()}beforeReloadData(){}async loadData(){if(!this.enable)return;if(!this.isMounted)return;if(!this.dataLoaderMgr)return;if(this.beforeReloadData(),this.clear(),this.dataLoaderMgr.loadData(this.ctx).then((e)=>{this.initData(e)}),this.isReload)this.reloadMaxValue();if(this.isReload===!1)this.isReload=!0}boundsChange(e){this.reloadMaxValue()}reloadMaxValue=G5(async()=>{if(!this.enable)return;if(!this.isMounted)return;if(!this.map)return;if(!this.dataLoaderMgr)return;let e=await this.dataLoaderMgr.loadMaxValue(this.ctx,this.map.getBounds());if(e)this.onMaxValueChange(e)},300);onMaxValueChange(e){}clear(){this.onClear(),this.dataFindMgrDo.clear(),this.layerMgrDo.clearCustomLayers(this.map),this.timeChange()}createDataFindMgr(){return this.dataFindMgrDo.create()}loadMapImages(e){this.mapImgDo.addImages(this.map,e)}removeMapLayer(e){this.layerMgrDo.removeMapLayer(this.map,e)}removeMapSource(e){this.layerMgrDo.removeMapSource(this.map,e)}setLayerVisible(e,t){this.layerMgrDo.setLayerVisible(this.map,e,t)}isLayerVisible(e){return this.layerMgrDo.isLayerVisible(this.map,e)}hasMapLayer(e){return this.layerMgrDo.hasMapLayer(this.map,e)}getMapLayer(e){return this.layerMgrDo.getMapLayer(this.map,e)}addMapLayer(e,t){return this.layerMgrDo.addMapLayer(this.map,e,t)}addMapSource(e,t){return this.layerMgrDo.addMapSource(this.map,e,t)}setEnable(e){this.enable=e}}import{format as m4}from"date-fns";class A5{type;_ctx;constructor(e){this.type=e}getUpdateGisValueEffect(e,t){return}getDisplayLayerInfos(e){return[]}getSubGroupName(){return""}supportedForecastModels(){return[]}isSupportedMultiModelContrast(){return this.supportedForecastModels().length>1}getDefConfig(e){return j1(this.ctx,{layerOptions:{...e?.layerOptions},gisStyleOptions:{...e?.gisStyleOptions}})}initCtx(e){this._ctx=e}get ctx(){if(!this._ctx)throw Error("ctx is not initialized");return this._ctx}formatCurrTime(e){return m4(new Date(e),"yyyy/MM/dd HH:mm")}formatTimeBar(e){let t=new Date(e).getHours();return{value:m4(new Date(e),"M/d HH:mm"),highlight:t===8}}isNew(){return!1}}function $(e,t){if(!e)return;switch(t.type){case"setProjectionType":e.setProjection({type:t.projectionType});break;case"setShowSky":if(t.showSky)e.setSky({"atmosphere-blend":["interpolate",["linear"],["zoom"],0,1,2,0,7,0]}),e.setLight({anchor:"map",position:[1.5,90,80]});else e.setSky(void 0),e.setLight(void 0);break;case"disableZoom":if(t.isDisable)e.scrollZoom.disable();else e.scrollZoom.enable();break;case"disableMove":if(t.isDisable)e.dragPan.disable();else e.dragPan.enable();break;case"setBaseState":{t.center!==void 0&&e.setCenter(t.center),t.zoom!==void 0&&e.setZoom(t.zoom),t.maxZoom!==void 0&&e.setMaxZoom(t.maxZoom),t.minZoom!==void 0&&e.setMinZoom(t.minZoom),t.bearing!==void 0&&e.setBearing(t.bearing),t.pitch!==void 0&&e.setPitch(t.pitch);break}case"flyTo":if(t.zoom!==void 0&&t.center!==void 0&&t.pitch!==void 0&&t.bearing!==void 0)e.flyTo({zoom:t.zoom,center:t.center,pitch:t.pitch,bearing:t.bearing},{animate:!!t.duration,duration:t.duration??0});break;case"fitBounds":if(t.bounds)e.fitBounds(t.bounds,{animate:!!t.duration,duration:t.duration??0});break}}import N5 from"maplibre-gl";function Nr(e,t){let{center:o,zoom:p,pitch:y,bearing:i,bounds:n}=t.gisStore.getState();return new N5.Map({container:e,style:{version:8,glyphs:"/huishang/assets/map/glyphs/{fontstack}/{range}.pbf",sources:{},layers:[]},center:o,zoom:p,pitch:y,bearing:i,bounds:n,maxPitch:80,maplibreLogo:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}})}import B5 from"mitt";var u1=B5();function x1(e){let t=e.getPitch(),o=e.getBearing(),p=e.getBounds(),y=e.getCenter().toArray(),i=e.getZoom();return{pitch:t,bearing:o,zoom:i,bounds:[Number(p.getWest().toFixed(6)),Number(p.getSouth().toFixed(6)),Number(p.getEast().toFixed(6)),Number(p.getNorth().toFixed(6))],center:y}}function Zr(e){let{gisStore:t}=e,{map:o}=t.getState();if(!o)throw Error("map not found");let p=()=>{if(!o)return;let{enableScreenshot:y,screenshot:i}=t.getState(),{bounds:n}=x1(o);if(!n)return;if(!y)return;let a=o.getCanvas().toDataURL("image/jpeg",0.5);if(i&&!i.startsWith("data:image")){console.info("检测截图:",i);try{let s=i.substring(i.lastIndexOf("/")+1).split("_")[1];if(s.substring(0,s.lastIndexOf("."))===n.map((g)=>g.toFixed(2)).join("|")){console.info("截图未变化,不进行截图修改:",i);return}}catch(s){console.error("截图解析错误:",i);return}}t.getState().apply({type:"changeValue",value:{screenshot:a}})};return o.on("idle",p),()=>{o.off("idle",p)}}function qr(e){let{gisStore:t}=e,{mapId:o,map:p,mapGroup:y}=t.getState();if(!p)return()=>{};let i=!1,n=()=>{if(!p)return;if(i)return;if(!t.getState().enableMapSync)return;u1.emit("syncMapMove",{fromMapGroup:y,fromMapId:o,state:x1(p)})},a=(s)=>{if(s.fromMapId===o)return;if(!s.fromMapGroup||s.fromMapGroup!==y)return;if(!t.getState().enableMapSync)return;i=!0,p.jumpTo({center:s.state.center,zoom:s.state.zoom,bearing:s.state.bearing,pitch:s.state.pitch}),i=!1};return p.on("move",n),u1.on("syncMapMove",a),()=>{p.off("move",n),u1.off("syncMapMove",a)}}import{isEqual as w5}from"lodash-es";function Sr(e){let{gisStore:t,configStore:o}=e,{mapId:p,map:y,mapGroup:i}=t.getState();if(!y)return()=>{};let n=!1,a=t.subscribe((l)=>l.currTm,(l)=>{if(n)return;if(!t.getState().enableMapSyncTime)return;if(!l)return;u1.emit("syncTime",{fromMapGroup:i,fromMapId:p,currTm:l})},{equalityFn:w5}),s=(l)=>{if(l.fromMapId===p)return;if(!l.fromMapGroup||l.fromMapGroup!==i)return;if(!t.getState().enableMapSyncTime)return;if(!o.getState().dataReqOptionsConfig.enableTimeSync(t.getState()))return;n=!0,t.getState().apply({type:"changeValue",value:{currTm:l.currTm}}),n=!1};return u1.on("syncTime",s),()=>{u1.off("syncTime",s),a()}}import{debounce as u4}from"lodash-es";function pp(e){let{gisStore:t}=e,{map:o}=t.getState();if(!o)throw Error("map not found");let p=!1,y=u4(()=>{p=!1},1000),i=()=>{p=!0,$(o,{type:"fitBounds",bounds:t.getState().bounds}),y()},n=u4(()=>{if(p)return;t.getState().apply({type:"changeValue",value:{mapStateToStoreSyncing:!0}}),t.getState().apply({type:"changeValue",value:x1(o)}),t.getState().apply({type:"changeValue",value:{mapStateToStoreSyncing:!1}})},200);return o.on("zoomend",n),o.on("moveend",n),o.on("pitchend",n),o.on("resize",i),()=>{o.off("zoomend",n),o.off("moveend",n),o.off("pitchend",n),o.off("resize",i)}}import{SubscribeMgr as W5}from"@iweather-js/iweather-lib";import{isEqual as e2}from"lodash-es";function sp(e){let{gisStore:t}=e,{map:o}=t.getState();if(!o)throw Error("map not found");let p=new W5;return p.add(t.subscribe((y)=>y.projectionType,(y)=>{if(t.getState().mapStateToStoreSyncing)return;$(o,{type:"setProjectionType",projectionType:y})},{equalityFn:e2})),p.add(t.subscribe((y)=>y.showSky,(y)=>{if(t.getState().mapStateToStoreSyncing)return;$(o,{type:"setShowSky",showSky:y})},{equalityFn:e2})),p.add(t.subscribe((y)=>y.disableZoom,(y)=>{if(t.getState().mapStateToStoreSyncing)return;$(o,{type:"disableZoom",isDisable:y})},{equalityFn:e2})),p.add(t.subscribe((y)=>y.bounds,(y)=>{if(t.getState().mapStateToStoreSyncing)return;$(o,{type:"fitBounds",bounds:y,duration:1000})},{equalityFn:e2})),()=>{p.dispose()}}function mp(e,t){let{gisStore:o}=t;setTimeout(()=>{e.resize()},1);let{showSky:p,projectionType:y,disableZoom:i,disableMove:n,boundsPadding:a,bounds:s,maxZoom:l,minZoom:g,mapBackgroundColor:u,renderWorldCopies:m,boundsLockMinZoom:c}=o.getState();if(e.setMaxZoom(l),e.setMinZoom(g),$(e,{type:"setShowSky",showSky:p}),$(e,{type:"disableZoom",isDisable:i}),$(e,{type:"disableMove",isDisable:n}),$(e,{type:"setProjectionType",projectionType:y}),e.setRenderWorldCopies(m),s)e.fitBounds(s,{animate:!1,duration:0,padding:a});if(c&&s)e.setMinZoom(e.cameraForBounds(s,{padding:a})?.zoom);e.setStyle({...e.getStyle(),layers:[{id:"background",type:"background",layout:{visibility:"visible"},paint:{"background-color":u||"transparent","background-opacity":1}}]})}import j5 from"maplibre-gl";class B1{infoMarker=null;infoMarkerEl=null;static map={};static getInstance(e){if(!B1.map[e])B1.map[e]=new B1;return B1.map[e]}constructor(){this.infoMarkerEl=document.createElement("div"),this.infoMarkerEl.className="hidden",this.infoMarker=new j5.Marker({element:this.infoMarkerEl})}hide(e){try{this.infoMarker?.removeClassName("visible"),this.infoMarker?.addClassName("invisible"),e.getCanvas().style.cursor="grab"}catch(t){console.info("MarkerMgr hide error")}}show(e,t){try{this.infoMarker.setLngLat(t.lngLat).addTo(e),this.infoMarker.removeClassName("invisible"),this.infoMarker.addClassName("visible"),this.infoMarkerEl.innerHTML=t.html,e.getCanvas().style.cursor="pointer"}catch(o){console.info("MarkerMgr show error")}}setEnable(e){if(e)this.infoMarker.removeClassName("hidden");else this.infoMarker.addClassName("hidden")}}import J5 from"maplibre-gl";class F1{static timer=null;static infoMarker;static infoMarkerEl;static hide(e){if(this.timer)clearTimeout(this.timer);this.timer=setTimeout(()=>{F1.infoMarker.removeClassName("marker_visible"),this.timer=null,e.getCanvas().style.cursor="grab"},300)}static show(e,t){if(this.timer)clearTimeout(this.timer);if(!F1.infoMarker)F1.infoMarkerEl=document.createElement("div"),F1.infoMarkerEl.className="marker font-[JinBuTi]",F1.infoMarker=new J5.Marker({element:F1.infoMarkerEl});let{lng:o,lat:p}=t;this.infoMarker.setLngLat({lat:p,lng:o}).addTo(e).addClassName("marker_visible"),this.infoMarkerEl.innerHTML=t.html,e.getCanvas().style.cursor="pointer"}}import{SubscribeMgr as $5}from"@iweather-js/iweather-lib";import{isEqual as Z5}from"lodash-es";var w1=null,t2=!1,I2=!1,U5=0.1;function c4(e){let{gisStore:t}=e,{map:o}=t.getState();if(I2&&o){let p=o.getCenter();o.panTo([p.lng+U5,p.lat],{animate:!1})}requestAnimationFrame(()=>c4(e))}function vp(e){let{gisStore:t}=e,o=t.getState().map;if(!o)throw Error("map is not found");let p=$5.create(),y=()=>{let{autoRotation:a}=t.getState();if(!a)return;if(a.bounds)$(o,{type:"fitBounds",bounds:a.bounds,duration:500});else if(a.pos)$(o,{type:"flyTo",center:a.pos.center,zoom:a.pos.zoom,duration:500});setTimeout(()=>{if(t2)I2=!0},500)},i=()=>{if(w1)clearTimeout(w1);I2=!1},n=()=>{let a=t.getState().autoRotation?.speed;if(!a)return;if(w1)clearTimeout(w1);w1=setTimeout(()=>{if(t2)y()},a)};return o.on("dragend",n),o.on("mouseup",n),o.on("zoomend",n),o.on("touchend",n),o.on("mousedown",i),o.on("dragstart",i),o.on("touchstart",i),o.on("wheel",i),p.add(t.subscribe((a)=>a.autoRotation?.enable&&a.projectionType==="globe",(a)=>{if(!a)t2=!1,i();else t2=!0,y()},{fireImmediately:!0,equalityFn:Z5})),c4(e),()=>{o.off("dragend",n),o.off("mouseup",n),o.off("zoomend",n),o.off("touchend",n),o.off("mousedown",i),o.off("dragstart",i),o.off("touchstart",i),o.off("wheel",i),p.dispose()}}export{H2 as wrapLongitude,W4 as wrapBounds,B2 as toGisValue,l6 as toColorPaletteFns,t0 as toAdcodeInfoVo,sp as syncStoreStateToMapHandler,pp as syncMapStateToStoreHandler,d6 as scaleColorPaletteConfig,n6 as readImageWithWindExif,i6 as readImageWithCommonExif,K2 as parseExifDataRangeWithWind,X2 as parseExifDataRange,u2 as parseExifBounds,S7 as parseExif3dSize,A7 as mapgl,Sr as mapSyncTimeHandler,qr as mapSyncMoveHandler,u1 as mapSyncEvent,Zr as mapScreenshotHandler,vp as mapAutoRotation,$ as mapAction,mp as initMapState,R2 as getVisibleWraps,z2 as getViewportBounds,Y6 as getProvinceNames,r3 as getProvince,x1 as getMapState,J6 as getLand,N2 as getInitValue,j1 as getGisValue,F4 as getDefLayerOptions,P4 as getDefGisStyleOptions,i3 as getCounty,p3 as getCity,t3 as getChina,I7 as createMultiMapStatusStore,Nr as createMap,S2 as createGridMesh,F7 as createGisStore,h7 as createConfigStore,z7 as createColorPalette,o8 as WindColorLayer,C5 as TimeMgrHub,O4 as StepRangeUnit,E2 as PlaySpeedByTiming,G2 as PlaySpeedByFrame,e7 as PROJECTION_TYPES,F2 as MaskLayer,B1 as MarkerMgr,s5 as Maplibre3DProfileLayerV3,i5 as Maplibre3DProfileLayerV0,r5 as Maplibre3DProfileLayer,h8 as MapLibreWindParticleLayer,h5 as LayerMgrHub,S5 as LEVEL_MAP_HIGHLIGHT_VALUE,z5 as LEVELS,F5 as IProductConfig,A5 as IProduct,S as INFINITY_VALUE,P5 as ILayerMgrConfig,V5 as ILayerMgr,M5 as IDataReqOptionsConfig,d5 as IDataFetchConfig,b5 as ICityConfig,F1 as HoverMarker,c5 as GridWindValueLayer,_8 as GridWindLayer,u5 as GridValueLayer,y2 as GridRenderIconSize,W1 as GridDensity,r7 as GRID_ICON_SIZE_OPTIONS,t7 as GRID_DENSITY_TYPES,W as ExTimingLayer,o1 as ExCustomLayer,D5 as DataLoaderMgr,x2 as DataFindMgr,V2 as DEF_WIND_LARGE_VALUE_ICON_COLOR,A2 as DEF_WIND_LARGE_VALUE,k2 as DEF_WIND_ICON_COLOR,c1 as DEF_MAP_CONFIG,o7 as DEF_CHINA_LAYER_LINE_COLOR,c8 as ContourValueLayer,P8 as ContourLayerByValue,y8 as ContourLayer,t8 as CommonColorLayer,O2 as ColorRenderType,E1 as ColorLayer,E7 as COLOR_PALETTE_CONFIG,R5 as BASEMAP_TYPES};
|
|
1945
1945
|
|
|
1946
|
-
//# debugId=
|
|
1946
|
+
//# debugId=F7F4AD2FD8FF218B64756E2164756E21
|