tds-map-methods 0.1.15 → 0.1.16
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/README.md +11 -4
- package/index.cjs +12 -12
- package/index.js +1422 -1410
- package/package.json +1 -1
- package/types/components/map/methods/createMic.d.ts +3 -0
- package/types/components/map/methods/micLayer.d.ts +3 -0
- package/types/typings/layer.d.ts +7 -1
package/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Le=require("dayjs"),et=require("lodash-es"),sr=require("@turf/turf"),Jr=require("dayjs/plugin/utc.js"),jn=require("ol"),Un=require("ol/View.js"),at=require("ol/proj.js"),Zr=require("ol/layer/Tile.js"),Kr=require("ol/source.js"),Wt=require("ol/source/ImageCanvas.js"),Nt=require("ol/layer/Image.js"),qt=require("d3-contour"),_r=require("ol/format/GeoJSON.js"),Ke=require("ol/layer/Vector.js"),ct=require("ol/source/Vector.js"),V=require("ol/style.js"),er=require("ol/Feature.js"),tr=require("ol/geom.js");function Wn(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const k=Wn(sr);function Yn(){}const $r={serviceBaseUrl:"",serviceAuthorization:"",ncssBaseUrl:"/ncss/grid",requestTimeout:6e4,imageSize:2048,typhoonServiceBaseUrl:"",typhoonDataPath:"data/script/mdp_typhoon/output",typhoonAuthorization:""};let Ae={...$r};function rr(n){return String(n??"").trim().replace(/\/+$/,"")}function Fr(n,e){const t=Number(n);return Number.isFinite(t)&&t>0?Math.round(t):e}function en(n){Ae={...Ae,...n,serviceBaseUrl:n.serviceBaseUrl===void 0?Ae.serviceBaseUrl:rr(n.serviceBaseUrl),serviceAuthorization:n.serviceAuthorization===void 0?Ae.serviceAuthorization:String(n.serviceAuthorization),ncssBaseUrl:n.ncssBaseUrl===void 0?Ae.ncssBaseUrl:rr(n.ncssBaseUrl),requestTimeout:Fr(n.requestTimeout,Ae.requestTimeout),imageSize:Fr(n.imageSize,Ae.imageSize),typhoonServiceBaseUrl:n.typhoonServiceBaseUrl===void 0?Ae.typhoonServiceBaseUrl:rr(n.typhoonServiceBaseUrl),typhoonDataPath:n.typhoonDataPath===void 0?Ae.typhoonDataPath:String(n.typhoonDataPath).replace(/^\/+|\/+$/g,""),typhoonAuthorization:n.typhoonAuthorization===void 0?Ae.typhoonAuthorization:String(n.typhoonAuthorization)}}function ve(){return{...Ae}}function Jn(){Ae={...$r}}function Zn(n){return String(n??"").trim().replace(/\/+$/,"")}function Kn(n){return/^(?:[a-z]+:)?\/\//i.test(n)||/^(?:data|blob):/i.test(n)}function tn(n,e){const t=String(n||"").trim();if(!t||Kn(t))return t;const r=ve(),i=Zn(e===void 0?r.serviceBaseUrl:e);return i?t===i||t.startsWith(i+"/")?t:i+"/"+t.replace(/^\/+/,""):t.startsWith("/")?t:"/"+t}function _n(n,e){const t=new AbortController,r=()=>t.abort(n?.reason);n?.aborted?r():n?.addEventListener("abort",r,{once:!0});const i=e>0?setTimeout(()=>t.abort(new Error("Request timeout")),e):void 0;return{signal:t.signal,cleanup(){i&&clearTimeout(i),n?.removeEventListener("abort",r)}}}async function $n(n){try{return(await n.text()).slice(0,240)}catch{return""}}async function Yt(n,e={}){const t=ve(),r=Number(e.timeout??t.requestTimeout),i=_n(e.signal,Number.isFinite(r)?r:6e4),o=new Headers(e.headers),s=e.authorization??t.serviceAuthorization;s&&!o.has("Authorization")&&o.set("Authorization",s);try{const u=await fetch(tn(n,e.baseUrl),{credentials:e.credentials??"include",signal:i.signal,headers:o});if(!u.ok){const l=await $n(u);throw new Error("TDS request failed: "+u.status+" "+u.statusText+(l?"; "+l:""))}return u}finally{i.cleanup()}}function eo(n,e){if(!e)return n;const t=new URLSearchParams;Object.entries(e).forEach(([i,o])=>{o!=null&&t.set(i,String(o))});const r=t.toString();return r?n+(n.includes("?")?"&":"?")+r:n}async function Jt(n,e,t,r={}){const i=await Yt(eo(n,e),{...r,authorization:t??r.authorization});switch(r.responseType??"json"){case"response":return i;case"text":return await i.text();case"blob":return await i.blob();case"arrayBuffer":case"arraybuffer":return await i.arrayBuffer();default:return await i.json()}}async function pr(n,e,t){const r=await Yt(n,{...t,authorization:e??t?.authorization}),i=(r.headers.get("content-type")||"").toLowerCase(),o=await r.text(),s=o.trimStart().toLowerCase();if(i.includes("text/html")||s.startsWith("<!doctype html")||s.startsWith("<html"))throw new Error("TDS XML response is HTML. Check serviceBaseUrl/ncssBaseUrl: "+r.url+"; "+o.slice(0,240));return o}function rn(n,e,t){return pr(n,e,t)}function to(n,e,t,r){return Jt(n,e,t,{...r,responseType:"text"})}function ro(n,e,t){return Jt(n,void 0,e,{...t,responseType:"arrayBuffer"})}function no(n){return new Promise((e,t)=>{const r=new FileReader;r.onload=()=>typeof r.result=="string"?e(r.result):t(new Error("Blob to base64 failed")),r.onerror=()=>t(r.error??new Error("Read blob failed")),r.readAsDataURL(n)})}async function nn(n,e,t,r){const s=await Jt(n,typeof e=="string"?void 0:e,typeof e=="string"?e:t,{...r,responseType:"blob"});return no(s)}function oo(n,e){return nn(n,e)}function io(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Qt={exports:{}},wt={},Pe={},We={},Sr;function Zt(){if(Sr)return We;Sr=1;function n(o,s,u){if(u===void 0&&(u=Array.prototype),o&&typeof u.find=="function")return u.find.call(o,s);for(var l=0;l<o.length;l++)if(Object.prototype.hasOwnProperty.call(o,l)){var d=o[l];if(s.call(void 0,d,l,o))return d}}function e(o,s){return s===void 0&&(s=Object),s&&typeof s.freeze=="function"?s.freeze(o):o}function t(o,s){if(o===null||typeof o!="object")throw new TypeError("target is not an object");for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&(o[u]=s[u]);return o}var r=e({HTML:"text/html",isHTML:function(o){return o===r.HTML},XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),i=e({HTML:"http://www.w3.org/1999/xhtml",isHTML:function(o){return o===i.HTML},SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});return We.assign=t,We.find=n,We.freeze=e,We.MIME_TYPE=r,We.NAMESPACE=i,We}var Mr;function on(){if(Mr)return Pe;Mr=1;var n=Zt(),e=n.find,t=n.NAMESPACE;function r(c){return c!==""}function i(c){return c?c.split(/[\t\n\f\r ]+/).filter(r):[]}function o(c,h){return c.hasOwnProperty(h)||(c[h]=!0),c}function s(c){if(!c)return[];var h=i(c);return Object.keys(h.reduce(o,{}))}function u(c){return function(h){return c&&c.indexOf(h)!==-1}}function l(c,h){for(var p in c)Object.prototype.hasOwnProperty.call(c,p)&&(h[p]=c[p])}function d(c,h){var p=c.prototype;if(!(p instanceof h)){let T=function(){};T.prototype=h.prototype,T=new T,l(p,T),c.prototype=p=T}p.constructor!=c&&(typeof c!="function"&&console.error("unknown Class:"+c),p.constructor=c)}var f={},a=f.ELEMENT_NODE=1,D=f.ATTRIBUTE_NODE=2,A=f.TEXT_NODE=3,m=f.CDATA_SECTION_NODE=4,C=f.ENTITY_REFERENCE_NODE=5,v=f.ENTITY_NODE=6,E=f.PROCESSING_INSTRUCTION_NODE=7,P=f.COMMENT_NODE=8,x=f.DOCUMENT_NODE=9,M=f.DOCUMENT_TYPE_NODE=10,F=f.DOCUMENT_FRAGMENT_NODE=11,S=f.NOTATION_NODE=12,y={},I={};y.INDEX_SIZE_ERR=(I[1]="Index size error",1),y.DOMSTRING_SIZE_ERR=(I[2]="DOMString size error",2);var b=y.HIERARCHY_REQUEST_ERR=(I[3]="Hierarchy request error",3);y.WRONG_DOCUMENT_ERR=(I[4]="Wrong document",4),y.INVALID_CHARACTER_ERR=(I[5]="Invalid character",5),y.NO_DATA_ALLOWED_ERR=(I[6]="No data allowed",6),y.NO_MODIFICATION_ALLOWED_ERR=(I[7]="No modification allowed",7);var N=y.NOT_FOUND_ERR=(I[8]="Not found",8);y.NOT_SUPPORTED_ERR=(I[9]="Not supported",9);var L=y.INUSE_ATTRIBUTE_ERR=(I[10]="Attribute in use",10);y.INVALID_STATE_ERR=(I[11]="Invalid state",11),y.SYNTAX_ERR=(I[12]="Syntax error",12),y.INVALID_MODIFICATION_ERR=(I[13]="Invalid modification",13),y.NAMESPACE_ERR=(I[14]="Invalid namespace",14),y.INVALID_ACCESS_ERR=(I[15]="Invalid access",15);function X(c,h){if(h instanceof Error)var p=h;else p=this,Error.call(this,I[c]),this.message=I[c],Error.captureStackTrace&&Error.captureStackTrace(this,X);return p.code=c,h&&(this.message=this.message+": "+h),p}X.prototype=Error.prototype,l(y,X);function z(){}z.prototype={length:0,item:function(c){return c>=0&&c<this.length?this[c]:null},toString:function(c,h){for(var p=[],T=0;T<this.length;T++)Ie(this[T],p,c,h);return p.join("")},filter:function(c){return Array.prototype.filter.call(this,c)},indexOf:function(c){return Array.prototype.indexOf.call(this,c)}};function g(c,h){this._node=c,this._refresh=h,w(this)}function w(c){var h=c._node._inc||c._node.ownerDocument._inc;if(c._inc!==h){var p=c._refresh(c._node);if(Pr(c,"length",p.length),!c.$$length||p.length<c.$$length)for(var T=p.length;T in c;T++)Object.prototype.hasOwnProperty.call(c,T)&&delete c[T];l(p,c),c._inc=h}}g.prototype.item=function(c){return w(this),this[c]||null},d(g,z);function B(){}function O(c,h){for(var p=c.length;p--;)if(c[p]===h)return p}function H(c,h,p,T){if(T?h[O(h,T)]=p:h[h.length++]=p,c){p.ownerElement=c;var q=c.ownerDocument;q&&(T&&_(q,c,T),W(q,c,p))}}function R(c,h,p){var T=O(h,p);if(T>=0){for(var q=h.length-1;T<q;)h[T]=h[++T];if(h.length=q,c){var j=c.ownerDocument;j&&(_(j,c,p),p.ownerElement=null)}}else throw new X(N,new Error(c.tagName+"@"+p))}B.prototype={length:0,item:z.prototype.item,getNamedItem:function(c){for(var h=this.length;h--;){var p=this[h];if(p.nodeName==c)return p}},setNamedItem:function(c){var h=c.ownerElement;if(h&&h!=this._ownerElement)throw new X(L);var p=this.getNamedItem(c.nodeName);return H(this._ownerElement,this,c,p),p},setNamedItemNS:function(c){var h=c.ownerElement,p;if(h&&h!=this._ownerElement)throw new X(L);return p=this.getNamedItemNS(c.namespaceURI,c.localName),H(this._ownerElement,this,c,p),p},removeNamedItem:function(c){var h=this.getNamedItem(c);return R(this._ownerElement,this,h),h},removeNamedItemNS:function(c,h){var p=this.getNamedItemNS(c,h);return R(this._ownerElement,this,p),p},getNamedItemNS:function(c,h){for(var p=this.length;p--;){var T=this[p];if(T.localName==h&&T.namespaceURI==c)return T}return null}};function G(){}G.prototype={hasFeature:function(c,h){return!0},createDocument:function(c,h,p){var T=new U;if(T.implementation=this,T.childNodes=new z,T.doctype=p||null,p&&T.appendChild(p),h){var q=T.createElementNS(c,h);T.appendChild(q)}return T},createDocumentType:function(c,h,p){var T=new Qe;return T.name=c,T.nodeName=c,T.publicId=h||"",T.systemId=p||"",T}};function Q(){}Q.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(c,h){return fe(this,c,h)},replaceChild:function(c,h){fe(this,c,h,ye),h&&this.removeChild(h)},removeChild:function(c){return Y(this,c)},appendChild:function(c){return this.insertBefore(c,null)},hasChildNodes:function(){return this.firstChild!=null},cloneNode:function(c){return st(this.ownerDocument||this,this,c)},normalize:function(){for(var c=this.firstChild;c;){var h=c.nextSibling;h&&h.nodeType==A&&c.nodeType==A?(this.removeChild(h),c.appendData(h.data)):(c.normalize(),c=h)}},isSupported:function(c,h){return this.ownerDocument.implementation.hasFeature(c,h)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(c){for(var h=this;h;){var p=h._nsMap;if(p){for(var T in p)if(Object.prototype.hasOwnProperty.call(p,T)&&p[T]===c)return T}h=h.nodeType==D?h.ownerDocument:h.parentNode}return null},lookupNamespaceURI:function(c){for(var h=this;h;){var p=h._nsMap;if(p&&Object.prototype.hasOwnProperty.call(p,c))return p[c];h=h.nodeType==D?h.ownerDocument:h.parentNode}return null},isDefaultNamespace:function(c){var h=this.lookupPrefix(c);return h==null}};function Z(c){return c=="<"&&"<"||c==">"&&">"||c=="&"&&"&"||c=='"'&&"""||"&#"+c.charCodeAt()+";"}l(f,Q),l(f,Q.prototype);function J(c,h){if(h(c))return!0;if(c=c.firstChild)do if(J(c,h))return!0;while(c=c.nextSibling)}function U(){this.ownerDocument=this}function W(c,h,p){c&&c._inc++;var T=p.namespaceURI;T===t.XMLNS&&(h._nsMap[p.prefix?p.localName:""]=p.value)}function _(c,h,p,T){c&&c._inc++;var q=p.namespaceURI;q===t.XMLNS&&delete h._nsMap[p.prefix?p.localName:""]}function K(c,h,p){if(c&&c._inc){c._inc++;var T=h.childNodes;if(p)T[T.length++]=p;else{for(var q=h.firstChild,j=0;q;)T[j++]=q,q=q.nextSibling;T.length=j,delete T[T.length]}}}function Y(c,h){var p=h.previousSibling,T=h.nextSibling;return p?p.nextSibling=T:c.firstChild=T,T?T.previousSibling=p:c.lastChild=p,h.parentNode=null,h.previousSibling=null,h.nextSibling=null,K(c.ownerDocument,c),h}function re(c){return c&&(c.nodeType===Q.DOCUMENT_NODE||c.nodeType===Q.DOCUMENT_FRAGMENT_NODE||c.nodeType===Q.ELEMENT_NODE)}function ae(c){return c&&(ee(c)||ce(c)||$(c)||c.nodeType===Q.DOCUMENT_FRAGMENT_NODE||c.nodeType===Q.COMMENT_NODE||c.nodeType===Q.PROCESSING_INSTRUCTION_NODE)}function $(c){return c&&c.nodeType===Q.DOCUMENT_TYPE_NODE}function ee(c){return c&&c.nodeType===Q.ELEMENT_NODE}function ce(c){return c&&c.nodeType===Q.TEXT_NODE}function oe(c,h){var p=c.childNodes||[];if(e(p,ee)||$(h))return!1;var T=e(p,$);return!(h&&T&&p.indexOf(T)>p.indexOf(h))}function ge(c,h){var p=c.childNodes||[];function T(j){return ee(j)&&j!==h}if(e(p,T))return!1;var q=e(p,$);return!(h&&q&&p.indexOf(q)>p.indexOf(h))}function ue(c,h,p){if(!re(c))throw new X(b,"Unexpected parent node type "+c.nodeType);if(p&&p.parentNode!==c)throw new X(N,"child not in parent");if(!ae(h)||$(h)&&c.nodeType!==Q.DOCUMENT_NODE)throw new X(b,"Unexpected node type "+h.nodeType+" for parent node type "+c.nodeType)}function De(c,h,p){var T=c.childNodes||[],q=h.childNodes||[];if(h.nodeType===Q.DOCUMENT_FRAGMENT_NODE){var j=q.filter(ee);if(j.length>1||e(q,ce))throw new X(b,"More than one element or text in fragment");if(j.length===1&&!oe(c,p))throw new X(b,"Element in fragment can not be inserted before doctype")}if(ee(h)&&!oe(c,p))throw new X(b,"Only one element can be added and only after doctype");if($(h)){if(e(T,$))throw new X(b,"Only one doctype is allowed");var ne=e(T,ee);if(p&&T.indexOf(ne)<T.indexOf(p))throw new X(b,"Doctype can only be inserted before an element");if(!p&&ne)throw new X(b,"Doctype can not be appended since element is present")}}function ye(c,h,p){var T=c.childNodes||[],q=h.childNodes||[];if(h.nodeType===Q.DOCUMENT_FRAGMENT_NODE){var j=q.filter(ee);if(j.length>1||e(q,ce))throw new X(b,"More than one element or text in fragment");if(j.length===1&&!ge(c,p))throw new X(b,"Element in fragment can not be inserted before doctype")}if(ee(h)&&!ge(c,p))throw new X(b,"Only one element can be added and only after doctype");if($(h)){if(e(T,function(we){return $(we)&&we!==p}))throw new X(b,"Only one doctype is allowed");var ne=e(T,ee);if(p&&T.indexOf(ne)<T.indexOf(p))throw new X(b,"Doctype can only be inserted before an element")}}function fe(c,h,p,T){ue(c,h,p),c.nodeType===Q.DOCUMENT_NODE&&(T||De)(c,h,p);var q=h.parentNode;if(q&&q.removeChild(h),h.nodeType===F){var j=h.firstChild;if(j==null)return h;var ne=h.lastChild}else j=ne=h;var he=p?p.previousSibling:c.lastChild;j.previousSibling=he,ne.nextSibling=p,he?he.nextSibling=j:c.firstChild=j,p==null?c.lastChild=ne:p.previousSibling=ne;do{j.parentNode=c;var we=c.ownerDocument||c;be(j,we)}while(j!==ne&&(j=j.nextSibling));return K(c.ownerDocument||c,c),h.nodeType==F&&(h.firstChild=h.lastChild=null),h}function be(c,h){if(c.ownerDocument!==h){if(c.ownerDocument=h,c.nodeType===a&&c.attributes)for(var p=0;p<c.attributes.length;p++){var T=c.attributes.item(p);T&&(T.ownerDocument=h)}for(var q=c.firstChild;q;)be(q,h),q=q.nextSibling}}function te(c,h){h.parentNode&&h.parentNode.removeChild(h),h.parentNode=c,h.previousSibling=c.lastChild,h.nextSibling=null,h.previousSibling?h.previousSibling.nextSibling=h:c.firstChild=h,c.lastChild=h,K(c.ownerDocument,c,h);var p=c.ownerDocument||c;return be(h,p),h}U.prototype={nodeName:"#document",nodeType:x,doctype:null,documentElement:null,_inc:1,insertBefore:function(c,h){if(c.nodeType==F){for(var p=c.firstChild;p;){var T=p.nextSibling;this.insertBefore(p,h),p=T}return c}return fe(this,c,h),be(c,this),this.documentElement===null&&c.nodeType===a&&(this.documentElement=c),c},removeChild:function(c){return this.documentElement==c&&(this.documentElement=null),Y(this,c)},replaceChild:function(c,h){fe(this,c,h,ye),be(c,this),h&&this.removeChild(h),ee(c)&&(this.documentElement=c)},importNode:function(c,h){return yt(this,c,h)},getElementById:function(c){var h=null;return J(this.documentElement,function(p){if(p.nodeType==a&&p.getAttribute("id")==c)return h=p,!0}),h},getElementsByClassName:function(c){var h=s(c);return new g(this,function(p){var T=[];return h.length>0&&J(p.documentElement,function(q){if(q!==p&&q.nodeType===a){var j=q.getAttribute("class");if(j){var ne=c===j;if(!ne){var he=s(j);ne=h.every(u(he))}ne&&T.push(q)}}}),T})},createElement:function(c){var h=new ie;h.ownerDocument=this,h.nodeName=c,h.tagName=c,h.localName=c,h.childNodes=new z;var p=h.attributes=new B;return p._ownerElement=h,h},createDocumentFragment:function(){var c=new ot;return c.ownerDocument=this,c.childNodes=new z,c},createTextNode:function(c){var h=new Se;return h.ownerDocument=this,h.appendData(c),h},createComment:function(c){var h=new gt;return h.ownerDocument=this,h.appendData(c),h},createCDATASection:function(c){var h=new mt;return h.ownerDocument=this,h.appendData(c),h},createProcessingInstruction:function(c,h){var p=new Oe;return p.ownerDocument=this,p.tagName=p.nodeName=p.target=c,p.nodeValue=p.data=h,p},createAttribute:function(c){var h=new xe;return h.ownerDocument=this,h.name=c,h.nodeName=c,h.localName=c,h.specified=!0,h},createEntityReference:function(c){var h=new Me;return h.ownerDocument=this,h.nodeName=c,h},createElementNS:function(c,h){var p=new ie,T=h.split(":"),q=p.attributes=new B;return p.childNodes=new z,p.ownerDocument=this,p.nodeName=h,p.tagName=h,p.namespaceURI=c,T.length==2?(p.prefix=T[0],p.localName=T[1]):p.localName=h,q._ownerElement=p,p},createAttributeNS:function(c,h){var p=new xe,T=h.split(":");return p.ownerDocument=this,p.nodeName=h,p.name=h,p.namespaceURI=c,p.specified=!0,T.length==2?(p.prefix=T[0],p.localName=T[1]):p.localName=h,p}},d(U,Q);function ie(){this._nsMap={}}ie.prototype={nodeType:a,hasAttribute:function(c){return this.getAttributeNode(c)!=null},getAttribute:function(c){var h=this.getAttributeNode(c);return h&&h.value||""},getAttributeNode:function(c){return this.attributes.getNamedItem(c)},setAttribute:function(c,h){var p=this.ownerDocument.createAttribute(c);p.value=p.nodeValue=""+h,this.setAttributeNode(p)},removeAttribute:function(c){var h=this.getAttributeNode(c);h&&this.removeAttributeNode(h)},appendChild:function(c){return c.nodeType===F?this.insertBefore(c,null):te(this,c)},setAttributeNode:function(c){return this.attributes.setNamedItem(c)},setAttributeNodeNS:function(c){return this.attributes.setNamedItemNS(c)},removeAttributeNode:function(c){return this.attributes.removeNamedItem(c.nodeName)},removeAttributeNS:function(c,h){var p=this.getAttributeNodeNS(c,h);p&&this.removeAttributeNode(p)},hasAttributeNS:function(c,h){return this.getAttributeNodeNS(c,h)!=null},getAttributeNS:function(c,h){var p=this.getAttributeNodeNS(c,h);return p&&p.value||""},setAttributeNS:function(c,h,p){var T=this.ownerDocument.createAttributeNS(c,h);T.value=T.nodeValue=""+p,this.setAttributeNode(T)},getAttributeNodeNS:function(c,h){return this.attributes.getNamedItemNS(c,h)},getElementsByTagName:function(c){return new g(this,function(h){var p=[];return J(h,function(T){T!==h&&T.nodeType==a&&(c==="*"||T.tagName==c)&&p.push(T)}),p})},getElementsByTagNameNS:function(c,h){return new g(this,function(p){var T=[];return J(p,function(q){q!==p&&q.nodeType===a&&(c==="*"||q.namespaceURI===c)&&(h==="*"||q.localName==h)&&T.push(q)}),T})}},U.prototype.getElementsByTagName=ie.prototype.getElementsByTagName,U.prototype.getElementsByTagNameNS=ie.prototype.getElementsByTagNameNS,d(ie,Q);function xe(){}xe.prototype.nodeType=D,d(xe,Q);function Be(){}Be.prototype={data:"",substringData:function(c,h){return this.data.substring(c,c+h)},appendData:function(c){c=this.data+c,this.nodeValue=this.data=c,this.length=c.length},insertData:function(c,h){this.replaceData(c,0,h)},appendChild:function(c){throw new Error(I[b])},deleteData:function(c,h){this.replaceData(c,h,"")},replaceData:function(c,h,p){var T=this.data.substring(0,c),q=this.data.substring(c+h);p=T+p+q,this.nodeValue=this.data=p,this.length=p.length}},d(Be,Q);function Se(){}Se.prototype={nodeName:"#text",nodeType:A,splitText:function(c){var h=this.data,p=h.substring(c);h=h.substring(0,c),this.data=this.nodeValue=h,this.length=h.length;var T=this.ownerDocument.createTextNode(p);return this.parentNode&&this.parentNode.insertBefore(T,this.nextSibling),T}},d(Se,Be);function gt(){}gt.prototype={nodeName:"#comment",nodeType:P},d(gt,Be);function mt(){}mt.prototype={nodeName:"#cdata-section",nodeType:m},d(mt,Be);function Qe(){}Qe.prototype.nodeType=M,d(Qe,Q);function At(){}At.prototype.nodeType=S,d(At,Q);function Ge(){}Ge.prototype.nodeType=v,d(Ge,Q);function Me(){}Me.prototype.nodeType=C,d(Me,Q);function ot(){}ot.prototype.nodeName="#document-fragment",ot.prototype.nodeType=F,d(ot,Q);function Oe(){}Oe.prototype.nodeType=E,d(Oe,Q);function it(){}it.prototype.serializeToString=function(c,h,p){return pt.call(c,h,p)},Q.prototype.toString=pt;function pt(c,h){var p=[],T=this.nodeType==9&&this.documentElement||this,q=T.prefix,j=T.namespaceURI;if(j&&q==null){var q=T.lookupPrefix(j);if(q==null)var ne=[{namespace:j,prefix:null}]}return Ie(this,p,c,h,ne),p.join("")}function vt(c,h,p){var T=c.prefix||"",q=c.namespaceURI;if(!q||T==="xml"&&q===t.XML||q===t.XMLNS)return!1;for(var j=p.length;j--;){var ne=p[j];if(ne.prefix===T)return ne.namespace!==q}return!0}function Dt(c,h,p){c.push(" ",h,'="',p.replace(/[<>&"\t\n\r]/g,Z),'"')}function Ie(c,h,p,T,q){if(q||(q=[]),T)if(c=T(c),c){if(typeof c=="string"){h.push(c);return}}else return;switch(c.nodeType){case a:var j=c.attributes,ne=j.length,le=c.firstChild,he=c.tagName;p=t.isHTML(c.namespaceURI)||p;var we=he;if(!p&&!c.prefix&&c.namespaceURI){for(var Xe,Ne=0;Ne<j.length;Ne++)if(j.item(Ne).name==="xmlns"){Xe=j.item(Ne).value;break}if(!Xe)for(var ke=q.length-1;ke>=0;ke--){var Ve=q[ke];if(Ve.prefix===""&&Ve.namespace===c.namespaceURI){Xe=Ve.namespace;break}}if(Xe!==c.namespaceURI)for(var ke=q.length-1;ke>=0;ke--){var Ve=q[ke];if(Ve.namespace===c.namespaceURI){Ve.prefix&&(we=Ve.prefix+":"+he);break}}}h.push("<",we);for(var je=0;je<ne;je++){var Ee=j.item(je);Ee.prefix=="xmlns"?q.push({prefix:Ee.localName,namespace:Ee.value}):Ee.nodeName=="xmlns"&&q.push({prefix:"",namespace:Ee.value})}for(var je=0;je<ne;je++){var Ee=j.item(je);if(vt(Ee,p,q)){var Ue=Ee.prefix||"",bt=Ee.namespaceURI;Dt(h,Ue?"xmlns:"+Ue:"xmlns",bt),q.push({prefix:Ue,namespace:bt})}Ie(Ee,h,p,T,q)}if(he===we&&vt(c,p,q)){var Ue=c.prefix||"",bt=c.namespaceURI;Dt(h,Ue?"xmlns:"+Ue:"xmlns",bt),q.push({prefix:Ue,namespace:bt})}if(le||p&&!/^(?:meta|link|img|br|hr|input)$/i.test(he)){if(h.push(">"),p&&/^script$/i.test(he))for(;le;)le.data?h.push(le.data):Ie(le,h,p,T,q.slice()),le=le.nextSibling;else for(;le;)Ie(le,h,p,T,q.slice()),le=le.nextSibling;h.push("</",we,">")}else h.push("/>");return;case x:case F:for(var le=c.firstChild;le;)Ie(le,h,p,T,q.slice()),le=le.nextSibling;return;case D:return Dt(h,c.name,c.value);case A:return h.push(c.data.replace(/[<&>]/g,Z));case m:return h.push("<![CDATA[",c.data,"]]>");case P:return h.push("<!--",c.data,"-->");case M:var Tr=c.publicId,ut=c.systemId;if(h.push("<!DOCTYPE ",c.name),Tr)h.push(" PUBLIC ",Tr),ut&&ut!="."&&h.push(" ",ut),h.push(">");else if(ut&&ut!=".")h.push(" SYSTEM ",ut,">");else{var Lr=c.internalSubset;Lr&&h.push(" [",Lr,"]"),h.push(">")}return;case E:return h.push("<?",c.target," ",c.data,"?>");case C:return h.push("&",c.nodeName,";");default:h.push("??",c.nodeName)}}function yt(c,h,p){var T;switch(h.nodeType){case a:T=h.cloneNode(!1),T.ownerDocument=c;case F:break;case D:p=!0;break}if(T||(T=h.cloneNode(!1)),T.ownerDocument=c,T.parentNode=null,p)for(var q=h.firstChild;q;)T.appendChild(yt(c,q,p)),q=q.nextSibling;return T}function st(c,h,p){var T=new h.constructor;for(var q in h)if(Object.prototype.hasOwnProperty.call(h,q)){var j=h[q];typeof j!="object"&&j!=T[q]&&(T[q]=j)}switch(h.childNodes&&(T.childNodes=new z),T.ownerDocument=c,T.nodeType){case a:var ne=h.attributes,he=T.attributes=new B,we=ne.length;he._ownerElement=T;for(var Xe=0;Xe<we;Xe++)T.setAttributeNode(st(c,ne.item(Xe),!0));break;case D:p=!0}if(p)for(var Ne=h.firstChild;Ne;)T.appendChild(st(c,Ne,p)),Ne=Ne.nextSibling;return T}function Pr(c,h,p){c[h]=p}try{if(Object.defineProperty){let c=function(h){switch(h.nodeType){case a:case F:var p=[];for(h=h.firstChild;h;)h.nodeType!==7&&h.nodeType!==8&&p.push(c(h)),h=h.nextSibling;return p.join("");default:return h.nodeValue}};Object.defineProperty(g.prototype,"length",{get:function(){return w(this),this.$$length}}),Object.defineProperty(Q.prototype,"textContent",{get:function(){return c(this)},set:function(h){switch(this.nodeType){case a:case F:for(;this.firstChild;)this.removeChild(this.firstChild);(h||String(h))&&this.appendChild(this.ownerDocument.createTextNode(h));break;default:this.data=h,this.value=h,this.nodeValue=h}}}),Pr=function(h,p,T){h["$$"+p]=T}}}catch{}return Pe.DocumentType=Qe,Pe.DOMException=X,Pe.DOMImplementation=G,Pe.Element=ie,Pe.Node=Q,Pe.NodeList=z,Pe.XMLSerializer=it,Pe}var Ct={},nr={},Or;function so(){return Or||(Or=1,(function(n){var e=Zt().freeze;n.XML_ENTITIES=e({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),n.HTML_ENTITIES=e({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"",InvisibleTimes:"",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"",NegativeThickSpace:"",NegativeThinSpace:"",NegativeVeryThinSpace:"",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:`
|
|
2
|
-
`,nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:" ",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:" ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"",zwnj:""}),n.entityMap=n.HTML_ENTITIES})(nr)),nr}var Lt={},Ir;function uo(){if(Ir)return Lt;Ir=1;var n=Zt().NAMESPACE,e=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,t=new RegExp("[\\-\\.0-9"+e.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),r=new RegExp("^"+e.source+t.source+"*(?::"+e.source+t.source+"*)?$"),i=0,o=1,s=2,u=3,l=4,d=5,f=6,a=7;function D(b,N){this.message=b,this.locator=N,Error.captureStackTrace&&Error.captureStackTrace(this,D)}D.prototype=new Error,D.prototype.name=D.name;function A(){}A.prototype={parse:function(b,N,L){var X=this.domBuilder;X.startDocument(),M(N,N={}),m(b,N,L,X,this.errorHandler),X.endDocument()}};function m(b,N,L,X,z){function g(te){if(te>65535){te-=65536;var ie=55296+(te>>10),xe=56320+(te&1023);return String.fromCharCode(ie,xe)}else return String.fromCharCode(te)}function w(te){var ie=te.slice(1,-1);return Object.hasOwnProperty.call(L,ie)?L[ie]:ie.charAt(0)==="#"?g(parseInt(ie.substr(1).replace("x","0x"))):(z.error("entity not found:"+te),te)}function B(te){if(te>U){var ie=b.substring(U,te).replace(/&#?\w+;/g,w);Q&&O(U),X.characters(ie,0,te-U),U=te}}function O(te,ie){for(;te>=R&&(ie=G.exec(b));)H=ie.index,R=H+ie[0].length,Q.lineNumber++;Q.columnNumber=te-H+1}for(var H=0,R=0,G=/.*(?:\r\n?|\n)|.*$/g,Q=X.locator,Z=[{currentNSMap:N}],J={},U=0;;){try{var W=b.indexOf("<",U);if(W<0){if(!b.substr(U).match(/^\s*$/)){var _=X.doc,K=_.createTextNode(b.substr(U));_.appendChild(K),X.currentElement=K}return}switch(W>U&&B(W),b.charAt(W+1)){case"/":var ue=b.indexOf(">",W+3),Y=b.substring(W+2,ue).replace(/[ \t\n\r]+$/g,""),re=Z.pop();ue<0?(Y=b.substring(W+2).replace(/[\s<].*/,""),z.error("end tag name: "+Y+" is not complete:"+re.tagName),ue=W+1+Y.length):Y.match(/\s</)&&(Y=Y.replace(/[\s<].*/,""),z.error("end tag name: "+Y+" maybe not complete"),ue=W+1+Y.length);var ae=re.localNSMap,$=re.tagName==Y,ee=$||re.tagName&&re.tagName.toLowerCase()==Y.toLowerCase();if(ee){if(X.endElement(re.uri,re.localName,Y),ae)for(var ce in ae)Object.prototype.hasOwnProperty.call(ae,ce)&&X.endPrefixMapping(ce);$||z.fatalError("end tag name: "+Y+" is not match the current start tagName:"+re.tagName)}else Z.push(re);ue++;break;case"?":Q&&O(W),ue=S(b,W,X);break;case"!":Q&&O(W),ue=F(b,W,X,z);break;default:Q&&O(W);var oe=new y,ge=Z[Z.length-1].currentNSMap,ue=v(b,W,oe,ge,w,z),De=oe.length;if(!oe.closed&&x(b,ue,oe.tagName,J)&&(oe.closed=!0,L.nbsp||z.warning("unclosed xml attribute")),Q&&De){for(var ye=C(Q,{}),fe=0;fe<De;fe++){var be=oe[fe];O(be.offset),be.locator=C(Q,{})}X.locator=ye,E(oe,X,ge)&&Z.push(oe),X.locator=Q}else E(oe,X,ge)&&Z.push(oe);n.isHTML(oe.uri)&&!oe.closed?ue=P(b,ue,oe.tagName,w,X):ue++}}catch(te){if(te instanceof D)throw te;z.error("element parse error: "+te),ue=-1}ue>U?U=ue:B(Math.max(W,U)+1)}}function C(b,N){return N.lineNumber=b.lineNumber,N.columnNumber=b.columnNumber,N}function v(b,N,L,X,z,g){function w(Q,Z,J){L.attributeNames.hasOwnProperty(Q)&&g.fatalError("Attribute "+Q+" redefined"),L.addValue(Q,Z.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,z),J)}for(var B,O,H=++N,R=i;;){var G=b.charAt(H);switch(G){case"=":if(R===o)B=b.slice(N,H),R=u;else if(R===s)R=u;else throw new Error("attribute equal must after attrName");break;case"'":case'"':if(R===u||R===o)if(R===o&&(g.warning('attribute value must after "="'),B=b.slice(N,H)),N=H+1,H=b.indexOf(G,N),H>0)O=b.slice(N,H),w(B,O,N-1),R=d;else throw new Error("attribute value no end '"+G+"' match");else if(R==l)O=b.slice(N,H),w(B,O,N),g.warning('attribute "'+B+'" missed start quot('+G+")!!"),N=H+1,R=d;else throw new Error('attribute value must after "="');break;case"/":switch(R){case i:L.setTagName(b.slice(N,H));case d:case f:case a:R=a,L.closed=!0;case l:case o:break;case s:L.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return g.error("unexpected end of input"),R==i&&L.setTagName(b.slice(N,H)),H;case">":switch(R){case i:L.setTagName(b.slice(N,H));case d:case f:case a:break;case l:case o:O=b.slice(N,H),O.slice(-1)==="/"&&(L.closed=!0,O=O.slice(0,-1));case s:R===s&&(O=B),R==l?(g.warning('attribute "'+O+'" missed quot(")!'),w(B,O,N)):((!n.isHTML(X[""])||!O.match(/^(?:disabled|checked|selected)$/i))&&g.warning('attribute "'+O+'" missed value!! "'+O+'" instead!!'),w(O,O,N));break;case u:throw new Error("attribute value missed!!")}return H;case"":G=" ";default:if(G<=" ")switch(R){case i:L.setTagName(b.slice(N,H)),R=f;break;case o:B=b.slice(N,H),R=s;break;case l:var O=b.slice(N,H);g.warning('attribute "'+O+'" missed quot(")!!'),w(B,O,N);case d:R=f;break}else switch(R){case s:L.tagName,(!n.isHTML(X[""])||!B.match(/^(?:disabled|checked|selected)$/i))&&g.warning('attribute "'+B+'" missed value!! "'+B+'" instead2!!'),w(B,B,N),N=H,R=o;break;case d:g.warning('attribute space is required"'+B+'"!!');case f:R=o,N=H;break;case u:R=l,N=H;break;case a:throw new Error("elements closed character '/' and '>' must be connected to")}}H++}}function E(b,N,L){for(var X=b.tagName,z=null,G=b.length;G--;){var g=b[G],w=g.qName,B=g.value,Q=w.indexOf(":");if(Q>0)var O=g.prefix=w.slice(0,Q),H=w.slice(Q+1),R=O==="xmlns"&&H;else H=w,O=null,R=w==="xmlns"&&"";g.localName=H,R!==!1&&(z==null&&(z={},M(L,L={})),L[R]=z[R]=B,g.uri=n.XMLNS,N.startPrefixMapping(R,B))}for(var G=b.length;G--;){g=b[G];var O=g.prefix;O&&(O==="xml"&&(g.uri=n.XML),O!=="xmlns"&&(g.uri=L[O||""]))}var Q=X.indexOf(":");Q>0?(O=b.prefix=X.slice(0,Q),H=b.localName=X.slice(Q+1)):(O=null,H=b.localName=X);var Z=b.uri=L[O||""];if(N.startElement(Z,H,X,b),b.closed){if(N.endElement(Z,H,X),z)for(O in z)Object.prototype.hasOwnProperty.call(z,O)&&N.endPrefixMapping(O)}else return b.currentNSMap=L,b.localNSMap=z,!0}function P(b,N,L,X,z){if(/^(?:script|textarea)$/i.test(L)){var g=b.indexOf("</"+L+">",N),w=b.substring(N+1,g);if(/[&<]/.test(w))return/^script$/i.test(L)?(z.characters(w,0,w.length),g):(w=w.replace(/&#?\w+;/g,X),z.characters(w,0,w.length),g)}return N+1}function x(b,N,L,X){var z=X[L];return z==null&&(z=b.lastIndexOf("</"+L+">"),z<N&&(z=b.lastIndexOf("</"+L)),X[L]=z),z<N}function M(b,N){for(var L in b)Object.prototype.hasOwnProperty.call(b,L)&&(N[L]=b[L])}function F(b,N,L,X){var z=b.charAt(N+2);switch(z){case"-":if(b.charAt(N+3)==="-"){var g=b.indexOf("-->",N+4);return g>N?(L.comment(b,N+4,g-N-4),g+3):(X.error("Unclosed comment"),-1)}else return-1;default:if(b.substr(N+3,6)=="CDATA["){var g=b.indexOf("]]>",N+9);return L.startCDATA(),L.characters(b,N+9,g-N-9),L.endCDATA(),g+3}var w=I(b,N),B=w.length;if(B>1&&/!doctype/i.test(w[0][0])){var O=w[1][0],H=!1,R=!1;B>3&&(/^public$/i.test(w[2][0])?(H=w[3][0],R=B>4&&w[4][0]):/^system$/i.test(w[2][0])&&(R=w[3][0]));var G=w[B-1];return L.startDTD(O,H,R),L.endDTD(),G.index+G[0].length}}return-1}function S(b,N,L){var X=b.indexOf("?>",N);if(X){var z=b.substring(N,X).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return z?(z[0].length,L.processingInstruction(z[1],z[2]),X+2):-1}return-1}function y(){this.attributeNames={}}y.prototype={setTagName:function(b){if(!r.test(b))throw new Error("invalid tagName:"+b);this.tagName=b},addValue:function(b,N,L){if(!r.test(b))throw new Error("invalid attribute:"+b);this.attributeNames[b]=this.length,this[this.length++]={qName:b,value:N,offset:L}},length:0,getLocalName:function(b){return this[b].localName},getLocator:function(b){return this[b].locator},getQName:function(b){return this[b].qName},getURI:function(b){return this[b].uri},getValue:function(b){return this[b].value}};function I(b,N){var L,X=[],z=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;for(z.lastIndex=N,z.exec(b);L=z.exec(b);)if(X.push(L),L[1])return X}return Lt.XMLReader=A,Lt.ParseError=D,Lt}var Xr;function ao(){if(Xr)return Ct;Xr=1;var n=Zt(),e=on(),t=so(),r=uo(),i=e.DOMImplementation,o=n.NAMESPACE,s=r.ParseError,u=r.XMLReader;function l(v){return v.replace(/\r[\n\u0085]/g,`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Le=require("dayjs"),tt=require("lodash-es"),ur=require("@turf/turf"),Zr=require("dayjs/plugin/utc.js"),Un=require("ol"),Wn=require("ol/View.js"),at=require("ol/proj.js"),Kr=require("ol/layer/Tile.js"),_r=require("ol/source.js"),Wt=require("ol/source/ImageCanvas.js"),Nt=require("ol/layer/Image.js"),qt=require("d3-contour"),$r=require("ol/format/GeoJSON.js"),Ke=require("ol/layer/Vector.js"),ct=require("ol/source/Vector.js"),V=require("ol/style.js"),er=require("ol/Feature.js"),tr=require("ol/geom.js");function Yn(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const G=Yn(ur);function Jn(){}const en={serviceBaseUrl:"",serviceAuthorization:"",ncssBaseUrl:"/ncss/grid",requestTimeout:6e4,imageSize:2048,typhoonServiceBaseUrl:"",typhoonDataPath:"data/script/mdp_typhoon/output",typhoonAuthorization:""};let Ae={...en};function rr(n){return String(n??"").trim().replace(/\/+$/,"")}function Sr(n,e){const t=Number(n);return Number.isFinite(t)&&t>0?Math.round(t):e}function tn(n){Ae={...Ae,...n,serviceBaseUrl:n.serviceBaseUrl===void 0?Ae.serviceBaseUrl:rr(n.serviceBaseUrl),serviceAuthorization:n.serviceAuthorization===void 0?Ae.serviceAuthorization:String(n.serviceAuthorization),ncssBaseUrl:n.ncssBaseUrl===void 0?Ae.ncssBaseUrl:rr(n.ncssBaseUrl),requestTimeout:Sr(n.requestTimeout,Ae.requestTimeout),imageSize:Sr(n.imageSize,Ae.imageSize),typhoonServiceBaseUrl:n.typhoonServiceBaseUrl===void 0?Ae.typhoonServiceBaseUrl:rr(n.typhoonServiceBaseUrl),typhoonDataPath:n.typhoonDataPath===void 0?Ae.typhoonDataPath:String(n.typhoonDataPath).replace(/^\/+|\/+$/g,""),typhoonAuthorization:n.typhoonAuthorization===void 0?Ae.typhoonAuthorization:String(n.typhoonAuthorization)}}function ve(){return{...Ae}}function Zn(){Ae={...en}}function Kn(n){return String(n??"").trim().replace(/\/+$/,"")}function _n(n){return/^(?:[a-z]+:)?\/\//i.test(n)||/^(?:data|blob):/i.test(n)}function rn(n,e){const t=String(n||"").trim();if(!t||_n(t))return t;const r=ve(),i=Kn(e===void 0?r.serviceBaseUrl:e);return i?t===i||t.startsWith(i+"/")?t:i+"/"+t.replace(/^\/+/,""):t.startsWith("/")?t:"/"+t}function $n(n,e){const t=new AbortController,r=()=>t.abort(n?.reason);n?.aborted?r():n?.addEventListener("abort",r,{once:!0});const i=e>0?setTimeout(()=>t.abort(new Error("Request timeout")),e):void 0;return{signal:t.signal,cleanup(){i&&clearTimeout(i),n?.removeEventListener("abort",r)}}}async function eo(n){try{return(await n.text()).slice(0,240)}catch{return""}}async function Yt(n,e={}){const t=ve(),r=Number(e.timeout??t.requestTimeout),i=$n(e.signal,Number.isFinite(r)?r:6e4),o=new Headers(e.headers),s=e.authorization??t.serviceAuthorization;s&&!o.has("Authorization")&&o.set("Authorization",s);try{const u=await fetch(rn(n,e.baseUrl),{credentials:e.credentials??"include",signal:i.signal,headers:o});if(!u.ok){const l=await eo(u);throw new Error("TDS request failed: "+u.status+" "+u.statusText+(l?"; "+l:""))}return u}finally{i.cleanup()}}function to(n,e){if(!e)return n;const t=new URLSearchParams;Object.entries(e).forEach(([i,o])=>{o!=null&&t.set(i,String(o))});const r=t.toString();return r?n+(n.includes("?")?"&":"?")+r:n}async function Jt(n,e,t,r={}){const i=await Yt(to(n,e),{...r,authorization:t??r.authorization});switch(r.responseType??"json"){case"response":return i;case"text":return await i.text();case"blob":return await i.blob();case"arrayBuffer":case"arraybuffer":return await i.arrayBuffer();default:return await i.json()}}async function vr(n,e,t){const r=await Yt(n,{...t,authorization:e??t?.authorization}),i=(r.headers.get("content-type")||"").toLowerCase(),o=await r.text(),s=o.trimStart().toLowerCase();if(i.includes("text/html")||s.startsWith("<!doctype html")||s.startsWith("<html"))throw new Error("TDS XML response is HTML. Check serviceBaseUrl/ncssBaseUrl: "+r.url+"; "+o.slice(0,240));return o}function nn(n,e,t){return vr(n,e,t)}function ro(n,e,t,r){return Jt(n,e,t,{...r,responseType:"text"})}function no(n,e,t){return Jt(n,void 0,e,{...t,responseType:"arrayBuffer"})}function oo(n){return new Promise((e,t)=>{const r=new FileReader;r.onload=()=>typeof r.result=="string"?e(r.result):t(new Error("Blob to base64 failed")),r.onerror=()=>t(r.error??new Error("Read blob failed")),r.readAsDataURL(n)})}async function on(n,e,t,r){const s=await Jt(n,typeof e=="string"?void 0:e,typeof e=="string"?e:t,{...r,responseType:"blob"});return oo(s)}function io(n,e){return on(n,e)}function so(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Qt={exports:{}},wt={},Pe={},We={},Mr;function Zt(){if(Mr)return We;Mr=1;function n(o,s,u){if(u===void 0&&(u=Array.prototype),o&&typeof u.find=="function")return u.find.call(o,s);for(var l=0;l<o.length;l++)if(Object.prototype.hasOwnProperty.call(o,l)){var d=o[l];if(s.call(void 0,d,l,o))return d}}function e(o,s){return s===void 0&&(s=Object),s&&typeof s.freeze=="function"?s.freeze(o):o}function t(o,s){if(o===null||typeof o!="object")throw new TypeError("target is not an object");for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&(o[u]=s[u]);return o}var r=e({HTML:"text/html",isHTML:function(o){return o===r.HTML},XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),i=e({HTML:"http://www.w3.org/1999/xhtml",isHTML:function(o){return o===i.HTML},SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});return We.assign=t,We.find=n,We.freeze=e,We.MIME_TYPE=r,We.NAMESPACE=i,We}var Or;function sn(){if(Or)return Pe;Or=1;var n=Zt(),e=n.find,t=n.NAMESPACE;function r(c){return c!==""}function i(c){return c?c.split(/[\t\n\f\r ]+/).filter(r):[]}function o(c,h){return c.hasOwnProperty(h)||(c[h]=!0),c}function s(c){if(!c)return[];var h=i(c);return Object.keys(h.reduce(o,{}))}function u(c){return function(h){return c&&c.indexOf(h)!==-1}}function l(c,h){for(var p in c)Object.prototype.hasOwnProperty.call(c,p)&&(h[p]=c[p])}function d(c,h){var p=c.prototype;if(!(p instanceof h)){let P=function(){};P.prototype=h.prototype,P=new P,l(p,P),c.prototype=p=P}p.constructor!=c&&(typeof c!="function"&&console.error("unknown Class:"+c),p.constructor=c)}var f={},a=f.ELEMENT_NODE=1,D=f.ATTRIBUTE_NODE=2,A=f.TEXT_NODE=3,m=f.CDATA_SECTION_NODE=4,C=f.ENTITY_REFERENCE_NODE=5,v=f.ENTITY_NODE=6,E=f.PROCESSING_INSTRUCTION_NODE=7,N=f.COMMENT_NODE=8,T=f.DOCUMENT_NODE=9,O=f.DOCUMENT_TYPE_NODE=10,I=f.DOCUMENT_FRAGMENT_NODE=11,F=f.NOTATION_NODE=12,b={},S={};b.INDEX_SIZE_ERR=(S[1]="Index size error",1),b.DOMSTRING_SIZE_ERR=(S[2]="DOMString size error",2);var y=b.HIERARCHY_REQUEST_ERR=(S[3]="Hierarchy request error",3);b.WRONG_DOCUMENT_ERR=(S[4]="Wrong document",4),b.INVALID_CHARACTER_ERR=(S[5]="Invalid character",5),b.NO_DATA_ALLOWED_ERR=(S[6]="No data allowed",6),b.NO_MODIFICATION_ALLOWED_ERR=(S[7]="No modification allowed",7);var x=b.NOT_FOUND_ERR=(S[8]="Not found",8);b.NOT_SUPPORTED_ERR=(S[9]="Not supported",9);var L=b.INUSE_ATTRIBUTE_ERR=(S[10]="Attribute in use",10);b.INVALID_STATE_ERR=(S[11]="Invalid state",11),b.SYNTAX_ERR=(S[12]="Syntax error",12),b.INVALID_MODIFICATION_ERR=(S[13]="Invalid modification",13),b.NAMESPACE_ERR=(S[14]="Invalid namespace",14),b.INVALID_ACCESS_ERR=(S[15]="Invalid access",15);function X(c,h){if(h instanceof Error)var p=h;else p=this,Error.call(this,S[c]),this.message=S[c],Error.captureStackTrace&&Error.captureStackTrace(this,X);return p.code=c,h&&(this.message=this.message+": "+h),p}X.prototype=Error.prototype,l(b,X);function R(){}R.prototype={length:0,item:function(c){return c>=0&&c<this.length?this[c]:null},toString:function(c,h){for(var p=[],P=0;P<this.length;P++)Ie(this[P],p,c,h);return p.join("")},filter:function(c){return Array.prototype.filter.call(this,c)},indexOf:function(c){return Array.prototype.indexOf.call(this,c)}};function g(c,h){this._node=c,this._refresh=h,w(this)}function w(c){var h=c._node._inc||c._node.ownerDocument._inc;if(c._inc!==h){var p=c._refresh(c._node);if(Tr(c,"length",p.length),!c.$$length||p.length<c.$$length)for(var P=p.length;P in c;P++)Object.prototype.hasOwnProperty.call(c,P)&&delete c[P];l(p,c),c._inc=h}}g.prototype.item=function(c){return w(this),this[c]||null},d(g,R);function B(){}function M(c,h){for(var p=c.length;p--;)if(c[p]===h)return p}function H(c,h,p,P){if(P?h[M(h,P)]=p:h[h.length++]=p,c){p.ownerElement=c;var q=c.ownerDocument;q&&(P&&_(q,c,P),W(q,c,p))}}function z(c,h,p){var P=M(h,p);if(P>=0){for(var q=h.length-1;P<q;)h[P]=h[++P];if(h.length=q,c){var j=c.ownerDocument;j&&(_(j,c,p),p.ownerElement=null)}}else throw new X(x,new Error(c.tagName+"@"+p))}B.prototype={length:0,item:R.prototype.item,getNamedItem:function(c){for(var h=this.length;h--;){var p=this[h];if(p.nodeName==c)return p}},setNamedItem:function(c){var h=c.ownerElement;if(h&&h!=this._ownerElement)throw new X(L);var p=this.getNamedItem(c.nodeName);return H(this._ownerElement,this,c,p),p},setNamedItemNS:function(c){var h=c.ownerElement,p;if(h&&h!=this._ownerElement)throw new X(L);return p=this.getNamedItemNS(c.namespaceURI,c.localName),H(this._ownerElement,this,c,p),p},removeNamedItem:function(c){var h=this.getNamedItem(c);return z(this._ownerElement,this,h),h},removeNamedItemNS:function(c,h){var p=this.getNamedItemNS(c,h);return z(this._ownerElement,this,p),p},getNamedItemNS:function(c,h){for(var p=this.length;p--;){var P=this[p];if(P.localName==h&&P.namespaceURI==c)return P}return null}};function k(){}k.prototype={hasFeature:function(c,h){return!0},createDocument:function(c,h,p){var P=new U;if(P.implementation=this,P.childNodes=new R,P.doctype=p||null,p&&P.appendChild(p),h){var q=P.createElementNS(c,h);P.appendChild(q)}return P},createDocumentType:function(c,h,p){var P=new Qe;return P.name=c,P.nodeName=c,P.publicId=h||"",P.systemId=p||"",P}};function Q(){}Q.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(c,h){return fe(this,c,h)},replaceChild:function(c,h){fe(this,c,h,ye),h&&this.removeChild(h)},removeChild:function(c){return Y(this,c)},appendChild:function(c){return this.insertBefore(c,null)},hasChildNodes:function(){return this.firstChild!=null},cloneNode:function(c){return st(this.ownerDocument||this,this,c)},normalize:function(){for(var c=this.firstChild;c;){var h=c.nextSibling;h&&h.nodeType==A&&c.nodeType==A?(this.removeChild(h),c.appendData(h.data)):(c.normalize(),c=h)}},isSupported:function(c,h){return this.ownerDocument.implementation.hasFeature(c,h)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(c){for(var h=this;h;){var p=h._nsMap;if(p){for(var P in p)if(Object.prototype.hasOwnProperty.call(p,P)&&p[P]===c)return P}h=h.nodeType==D?h.ownerDocument:h.parentNode}return null},lookupNamespaceURI:function(c){for(var h=this;h;){var p=h._nsMap;if(p&&Object.prototype.hasOwnProperty.call(p,c))return p[c];h=h.nodeType==D?h.ownerDocument:h.parentNode}return null},isDefaultNamespace:function(c){var h=this.lookupPrefix(c);return h==null}};function Z(c){return c=="<"&&"<"||c==">"&&">"||c=="&"&&"&"||c=='"'&&"""||"&#"+c.charCodeAt()+";"}l(f,Q),l(f,Q.prototype);function J(c,h){if(h(c))return!0;if(c=c.firstChild)do if(J(c,h))return!0;while(c=c.nextSibling)}function U(){this.ownerDocument=this}function W(c,h,p){c&&c._inc++;var P=p.namespaceURI;P===t.XMLNS&&(h._nsMap[p.prefix?p.localName:""]=p.value)}function _(c,h,p,P){c&&c._inc++;var q=p.namespaceURI;q===t.XMLNS&&delete h._nsMap[p.prefix?p.localName:""]}function K(c,h,p){if(c&&c._inc){c._inc++;var P=h.childNodes;if(p)P[P.length++]=p;else{for(var q=h.firstChild,j=0;q;)P[j++]=q,q=q.nextSibling;P.length=j,delete P[P.length]}}}function Y(c,h){var p=h.previousSibling,P=h.nextSibling;return p?p.nextSibling=P:c.firstChild=P,P?P.previousSibling=p:c.lastChild=p,h.parentNode=null,h.previousSibling=null,h.nextSibling=null,K(c.ownerDocument,c),h}function re(c){return c&&(c.nodeType===Q.DOCUMENT_NODE||c.nodeType===Q.DOCUMENT_FRAGMENT_NODE||c.nodeType===Q.ELEMENT_NODE)}function ae(c){return c&&(ee(c)||ce(c)||$(c)||c.nodeType===Q.DOCUMENT_FRAGMENT_NODE||c.nodeType===Q.COMMENT_NODE||c.nodeType===Q.PROCESSING_INSTRUCTION_NODE)}function $(c){return c&&c.nodeType===Q.DOCUMENT_TYPE_NODE}function ee(c){return c&&c.nodeType===Q.ELEMENT_NODE}function ce(c){return c&&c.nodeType===Q.TEXT_NODE}function oe(c,h){var p=c.childNodes||[];if(e(p,ee)||$(h))return!1;var P=e(p,$);return!(h&&P&&p.indexOf(P)>p.indexOf(h))}function ge(c,h){var p=c.childNodes||[];function P(j){return ee(j)&&j!==h}if(e(p,P))return!1;var q=e(p,$);return!(h&&q&&p.indexOf(q)>p.indexOf(h))}function ue(c,h,p){if(!re(c))throw new X(y,"Unexpected parent node type "+c.nodeType);if(p&&p.parentNode!==c)throw new X(x,"child not in parent");if(!ae(h)||$(h)&&c.nodeType!==Q.DOCUMENT_NODE)throw new X(y,"Unexpected node type "+h.nodeType+" for parent node type "+c.nodeType)}function De(c,h,p){var P=c.childNodes||[],q=h.childNodes||[];if(h.nodeType===Q.DOCUMENT_FRAGMENT_NODE){var j=q.filter(ee);if(j.length>1||e(q,ce))throw new X(y,"More than one element or text in fragment");if(j.length===1&&!oe(c,p))throw new X(y,"Element in fragment can not be inserted before doctype")}if(ee(h)&&!oe(c,p))throw new X(y,"Only one element can be added and only after doctype");if($(h)){if(e(P,$))throw new X(y,"Only one doctype is allowed");var ne=e(P,ee);if(p&&P.indexOf(ne)<P.indexOf(p))throw new X(y,"Doctype can only be inserted before an element");if(!p&&ne)throw new X(y,"Doctype can not be appended since element is present")}}function ye(c,h,p){var P=c.childNodes||[],q=h.childNodes||[];if(h.nodeType===Q.DOCUMENT_FRAGMENT_NODE){var j=q.filter(ee);if(j.length>1||e(q,ce))throw new X(y,"More than one element or text in fragment");if(j.length===1&&!ge(c,p))throw new X(y,"Element in fragment can not be inserted before doctype")}if(ee(h)&&!ge(c,p))throw new X(y,"Only one element can be added and only after doctype");if($(h)){if(e(P,function(we){return $(we)&&we!==p}))throw new X(y,"Only one doctype is allowed");var ne=e(P,ee);if(p&&P.indexOf(ne)<P.indexOf(p))throw new X(y,"Doctype can only be inserted before an element")}}function fe(c,h,p,P){ue(c,h,p),c.nodeType===Q.DOCUMENT_NODE&&(P||De)(c,h,p);var q=h.parentNode;if(q&&q.removeChild(h),h.nodeType===I){var j=h.firstChild;if(j==null)return h;var ne=h.lastChild}else j=ne=h;var he=p?p.previousSibling:c.lastChild;j.previousSibling=he,ne.nextSibling=p,he?he.nextSibling=j:c.firstChild=j,p==null?c.lastChild=ne:p.previousSibling=ne;do{j.parentNode=c;var we=c.ownerDocument||c;be(j,we)}while(j!==ne&&(j=j.nextSibling));return K(c.ownerDocument||c,c),h.nodeType==I&&(h.firstChild=h.lastChild=null),h}function be(c,h){if(c.ownerDocument!==h){if(c.ownerDocument=h,c.nodeType===a&&c.attributes)for(var p=0;p<c.attributes.length;p++){var P=c.attributes.item(p);P&&(P.ownerDocument=h)}for(var q=c.firstChild;q;)be(q,h),q=q.nextSibling}}function te(c,h){h.parentNode&&h.parentNode.removeChild(h),h.parentNode=c,h.previousSibling=c.lastChild,h.nextSibling=null,h.previousSibling?h.previousSibling.nextSibling=h:c.firstChild=h,c.lastChild=h,K(c.ownerDocument,c,h);var p=c.ownerDocument||c;return be(h,p),h}U.prototype={nodeName:"#document",nodeType:T,doctype:null,documentElement:null,_inc:1,insertBefore:function(c,h){if(c.nodeType==I){for(var p=c.firstChild;p;){var P=p.nextSibling;this.insertBefore(p,h),p=P}return c}return fe(this,c,h),be(c,this),this.documentElement===null&&c.nodeType===a&&(this.documentElement=c),c},removeChild:function(c){return this.documentElement==c&&(this.documentElement=null),Y(this,c)},replaceChild:function(c,h){fe(this,c,h,ye),be(c,this),h&&this.removeChild(h),ee(c)&&(this.documentElement=c)},importNode:function(c,h){return yt(this,c,h)},getElementById:function(c){var h=null;return J(this.documentElement,function(p){if(p.nodeType==a&&p.getAttribute("id")==c)return h=p,!0}),h},getElementsByClassName:function(c){var h=s(c);return new g(this,function(p){var P=[];return h.length>0&&J(p.documentElement,function(q){if(q!==p&&q.nodeType===a){var j=q.getAttribute("class");if(j){var ne=c===j;if(!ne){var he=s(j);ne=h.every(u(he))}ne&&P.push(q)}}}),P})},createElement:function(c){var h=new ie;h.ownerDocument=this,h.nodeName=c,h.tagName=c,h.localName=c,h.childNodes=new R;var p=h.attributes=new B;return p._ownerElement=h,h},createDocumentFragment:function(){var c=new ot;return c.ownerDocument=this,c.childNodes=new R,c},createTextNode:function(c){var h=new Se;return h.ownerDocument=this,h.appendData(c),h},createComment:function(c){var h=new gt;return h.ownerDocument=this,h.appendData(c),h},createCDATASection:function(c){var h=new mt;return h.ownerDocument=this,h.appendData(c),h},createProcessingInstruction:function(c,h){var p=new Oe;return p.ownerDocument=this,p.tagName=p.nodeName=p.target=c,p.nodeValue=p.data=h,p},createAttribute:function(c){var h=new xe;return h.ownerDocument=this,h.name=c,h.nodeName=c,h.localName=c,h.specified=!0,h},createEntityReference:function(c){var h=new Me;return h.ownerDocument=this,h.nodeName=c,h},createElementNS:function(c,h){var p=new ie,P=h.split(":"),q=p.attributes=new B;return p.childNodes=new R,p.ownerDocument=this,p.nodeName=h,p.tagName=h,p.namespaceURI=c,P.length==2?(p.prefix=P[0],p.localName=P[1]):p.localName=h,q._ownerElement=p,p},createAttributeNS:function(c,h){var p=new xe,P=h.split(":");return p.ownerDocument=this,p.nodeName=h,p.name=h,p.namespaceURI=c,p.specified=!0,P.length==2?(p.prefix=P[0],p.localName=P[1]):p.localName=h,p}},d(U,Q);function ie(){this._nsMap={}}ie.prototype={nodeType:a,hasAttribute:function(c){return this.getAttributeNode(c)!=null},getAttribute:function(c){var h=this.getAttributeNode(c);return h&&h.value||""},getAttributeNode:function(c){return this.attributes.getNamedItem(c)},setAttribute:function(c,h){var p=this.ownerDocument.createAttribute(c);p.value=p.nodeValue=""+h,this.setAttributeNode(p)},removeAttribute:function(c){var h=this.getAttributeNode(c);h&&this.removeAttributeNode(h)},appendChild:function(c){return c.nodeType===I?this.insertBefore(c,null):te(this,c)},setAttributeNode:function(c){return this.attributes.setNamedItem(c)},setAttributeNodeNS:function(c){return this.attributes.setNamedItemNS(c)},removeAttributeNode:function(c){return this.attributes.removeNamedItem(c.nodeName)},removeAttributeNS:function(c,h){var p=this.getAttributeNodeNS(c,h);p&&this.removeAttributeNode(p)},hasAttributeNS:function(c,h){return this.getAttributeNodeNS(c,h)!=null},getAttributeNS:function(c,h){var p=this.getAttributeNodeNS(c,h);return p&&p.value||""},setAttributeNS:function(c,h,p){var P=this.ownerDocument.createAttributeNS(c,h);P.value=P.nodeValue=""+p,this.setAttributeNode(P)},getAttributeNodeNS:function(c,h){return this.attributes.getNamedItemNS(c,h)},getElementsByTagName:function(c){return new g(this,function(h){var p=[];return J(h,function(P){P!==h&&P.nodeType==a&&(c==="*"||P.tagName==c)&&p.push(P)}),p})},getElementsByTagNameNS:function(c,h){return new g(this,function(p){var P=[];return J(p,function(q){q!==p&&q.nodeType===a&&(c==="*"||q.namespaceURI===c)&&(h==="*"||q.localName==h)&&P.push(q)}),P})}},U.prototype.getElementsByTagName=ie.prototype.getElementsByTagName,U.prototype.getElementsByTagNameNS=ie.prototype.getElementsByTagNameNS,d(ie,Q);function xe(){}xe.prototype.nodeType=D,d(xe,Q);function Be(){}Be.prototype={data:"",substringData:function(c,h){return this.data.substring(c,c+h)},appendData:function(c){c=this.data+c,this.nodeValue=this.data=c,this.length=c.length},insertData:function(c,h){this.replaceData(c,0,h)},appendChild:function(c){throw new Error(S[y])},deleteData:function(c,h){this.replaceData(c,h,"")},replaceData:function(c,h,p){var P=this.data.substring(0,c),q=this.data.substring(c+h);p=P+p+q,this.nodeValue=this.data=p,this.length=p.length}},d(Be,Q);function Se(){}Se.prototype={nodeName:"#text",nodeType:A,splitText:function(c){var h=this.data,p=h.substring(c);h=h.substring(0,c),this.data=this.nodeValue=h,this.length=h.length;var P=this.ownerDocument.createTextNode(p);return this.parentNode&&this.parentNode.insertBefore(P,this.nextSibling),P}},d(Se,Be);function gt(){}gt.prototype={nodeName:"#comment",nodeType:N},d(gt,Be);function mt(){}mt.prototype={nodeName:"#cdata-section",nodeType:m},d(mt,Be);function Qe(){}Qe.prototype.nodeType=O,d(Qe,Q);function At(){}At.prototype.nodeType=F,d(At,Q);function ke(){}ke.prototype.nodeType=v,d(ke,Q);function Me(){}Me.prototype.nodeType=C,d(Me,Q);function ot(){}ot.prototype.nodeName="#document-fragment",ot.prototype.nodeType=I,d(ot,Q);function Oe(){}Oe.prototype.nodeType=E,d(Oe,Q);function it(){}it.prototype.serializeToString=function(c,h,p){return pt.call(c,h,p)},Q.prototype.toString=pt;function pt(c,h){var p=[],P=this.nodeType==9&&this.documentElement||this,q=P.prefix,j=P.namespaceURI;if(j&&q==null){var q=P.lookupPrefix(j);if(q==null)var ne=[{namespace:j,prefix:null}]}return Ie(this,p,c,h,ne),p.join("")}function vt(c,h,p){var P=c.prefix||"",q=c.namespaceURI;if(!q||P==="xml"&&q===t.XML||q===t.XMLNS)return!1;for(var j=p.length;j--;){var ne=p[j];if(ne.prefix===P)return ne.namespace!==q}return!0}function Dt(c,h,p){c.push(" ",h,'="',p.replace(/[<>&"\t\n\r]/g,Z),'"')}function Ie(c,h,p,P,q){if(q||(q=[]),P)if(c=P(c),c){if(typeof c=="string"){h.push(c);return}}else return;switch(c.nodeType){case a:var j=c.attributes,ne=j.length,le=c.firstChild,he=c.tagName;p=t.isHTML(c.namespaceURI)||p;var we=he;if(!p&&!c.prefix&&c.namespaceURI){for(var Xe,Ne=0;Ne<j.length;Ne++)if(j.item(Ne).name==="xmlns"){Xe=j.item(Ne).value;break}if(!Xe)for(var Ge=q.length-1;Ge>=0;Ge--){var Ve=q[Ge];if(Ve.prefix===""&&Ve.namespace===c.namespaceURI){Xe=Ve.namespace;break}}if(Xe!==c.namespaceURI)for(var Ge=q.length-1;Ge>=0;Ge--){var Ve=q[Ge];if(Ve.namespace===c.namespaceURI){Ve.prefix&&(we=Ve.prefix+":"+he);break}}}h.push("<",we);for(var je=0;je<ne;je++){var Ee=j.item(je);Ee.prefix=="xmlns"?q.push({prefix:Ee.localName,namespace:Ee.value}):Ee.nodeName=="xmlns"&&q.push({prefix:"",namespace:Ee.value})}for(var je=0;je<ne;je++){var Ee=j.item(je);if(vt(Ee,p,q)){var Ue=Ee.prefix||"",bt=Ee.namespaceURI;Dt(h,Ue?"xmlns:"+Ue:"xmlns",bt),q.push({prefix:Ue,namespace:bt})}Ie(Ee,h,p,P,q)}if(he===we&&vt(c,p,q)){var Ue=c.prefix||"",bt=c.namespaceURI;Dt(h,Ue?"xmlns:"+Ue:"xmlns",bt),q.push({prefix:Ue,namespace:bt})}if(le||p&&!/^(?:meta|link|img|br|hr|input)$/i.test(he)){if(h.push(">"),p&&/^script$/i.test(he))for(;le;)le.data?h.push(le.data):Ie(le,h,p,P,q.slice()),le=le.nextSibling;else for(;le;)Ie(le,h,p,P,q.slice()),le=le.nextSibling;h.push("</",we,">")}else h.push("/>");return;case T:case I:for(var le=c.firstChild;le;)Ie(le,h,p,P,q.slice()),le=le.nextSibling;return;case D:return Dt(h,c.name,c.value);case A:return h.push(c.data.replace(/[<&>]/g,Z));case m:return h.push("<![CDATA[",c.data,"]]>");case N:return h.push("<!--",c.data,"-->");case O:var Lr=c.publicId,ut=c.systemId;if(h.push("<!DOCTYPE ",c.name),Lr)h.push(" PUBLIC ",Lr),ut&&ut!="."&&h.push(" ",ut),h.push(">");else if(ut&&ut!=".")h.push(" SYSTEM ",ut,">");else{var Fr=c.internalSubset;Fr&&h.push(" [",Fr,"]"),h.push(">")}return;case E:return h.push("<?",c.target," ",c.data,"?>");case C:return h.push("&",c.nodeName,";");default:h.push("??",c.nodeName)}}function yt(c,h,p){var P;switch(h.nodeType){case a:P=h.cloneNode(!1),P.ownerDocument=c;case I:break;case D:p=!0;break}if(P||(P=h.cloneNode(!1)),P.ownerDocument=c,P.parentNode=null,p)for(var q=h.firstChild;q;)P.appendChild(yt(c,q,p)),q=q.nextSibling;return P}function st(c,h,p){var P=new h.constructor;for(var q in h)if(Object.prototype.hasOwnProperty.call(h,q)){var j=h[q];typeof j!="object"&&j!=P[q]&&(P[q]=j)}switch(h.childNodes&&(P.childNodes=new R),P.ownerDocument=c,P.nodeType){case a:var ne=h.attributes,he=P.attributes=new B,we=ne.length;he._ownerElement=P;for(var Xe=0;Xe<we;Xe++)P.setAttributeNode(st(c,ne.item(Xe),!0));break;case D:p=!0}if(p)for(var Ne=h.firstChild;Ne;)P.appendChild(st(c,Ne,p)),Ne=Ne.nextSibling;return P}function Tr(c,h,p){c[h]=p}try{if(Object.defineProperty){let c=function(h){switch(h.nodeType){case a:case I:var p=[];for(h=h.firstChild;h;)h.nodeType!==7&&h.nodeType!==8&&p.push(c(h)),h=h.nextSibling;return p.join("");default:return h.nodeValue}};Object.defineProperty(g.prototype,"length",{get:function(){return w(this),this.$$length}}),Object.defineProperty(Q.prototype,"textContent",{get:function(){return c(this)},set:function(h){switch(this.nodeType){case a:case I:for(;this.firstChild;)this.removeChild(this.firstChild);(h||String(h))&&this.appendChild(this.ownerDocument.createTextNode(h));break;default:this.data=h,this.value=h,this.nodeValue=h}}}),Tr=function(h,p,P){h["$$"+p]=P}}}catch{}return Pe.DocumentType=Qe,Pe.DOMException=X,Pe.DOMImplementation=k,Pe.Element=ie,Pe.Node=Q,Pe.NodeList=R,Pe.XMLSerializer=it,Pe}var Ct={},nr={},Ir;function uo(){return Ir||(Ir=1,(function(n){var e=Zt().freeze;n.XML_ENTITIES=e({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),n.HTML_ENTITIES=e({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"",InvisibleTimes:"",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"",NegativeThickSpace:"",NegativeThinSpace:"",NegativeVeryThinSpace:"",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:`
|
|
2
|
+
`,nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:" ",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:" ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"",zwnj:""}),n.entityMap=n.HTML_ENTITIES})(nr)),nr}var Lt={},Xr;function ao(){if(Xr)return Lt;Xr=1;var n=Zt().NAMESPACE,e=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,t=new RegExp("[\\-\\.0-9"+e.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),r=new RegExp("^"+e.source+t.source+"*(?::"+e.source+t.source+"*)?$"),i=0,o=1,s=2,u=3,l=4,d=5,f=6,a=7;function D(y,x){this.message=y,this.locator=x,Error.captureStackTrace&&Error.captureStackTrace(this,D)}D.prototype=new Error,D.prototype.name=D.name;function A(){}A.prototype={parse:function(y,x,L){var X=this.domBuilder;X.startDocument(),O(x,x={}),m(y,x,L,X,this.errorHandler),X.endDocument()}};function m(y,x,L,X,R){function g(te){if(te>65535){te-=65536;var ie=55296+(te>>10),xe=56320+(te&1023);return String.fromCharCode(ie,xe)}else return String.fromCharCode(te)}function w(te){var ie=te.slice(1,-1);return Object.hasOwnProperty.call(L,ie)?L[ie]:ie.charAt(0)==="#"?g(parseInt(ie.substr(1).replace("x","0x"))):(R.error("entity not found:"+te),te)}function B(te){if(te>U){var ie=y.substring(U,te).replace(/&#?\w+;/g,w);Q&&M(U),X.characters(ie,0,te-U),U=te}}function M(te,ie){for(;te>=z&&(ie=k.exec(y));)H=ie.index,z=H+ie[0].length,Q.lineNumber++;Q.columnNumber=te-H+1}for(var H=0,z=0,k=/.*(?:\r\n?|\n)|.*$/g,Q=X.locator,Z=[{currentNSMap:x}],J={},U=0;;){try{var W=y.indexOf("<",U);if(W<0){if(!y.substr(U).match(/^\s*$/)){var _=X.doc,K=_.createTextNode(y.substr(U));_.appendChild(K),X.currentElement=K}return}switch(W>U&&B(W),y.charAt(W+1)){case"/":var ue=y.indexOf(">",W+3),Y=y.substring(W+2,ue).replace(/[ \t\n\r]+$/g,""),re=Z.pop();ue<0?(Y=y.substring(W+2).replace(/[\s<].*/,""),R.error("end tag name: "+Y+" is not complete:"+re.tagName),ue=W+1+Y.length):Y.match(/\s</)&&(Y=Y.replace(/[\s<].*/,""),R.error("end tag name: "+Y+" maybe not complete"),ue=W+1+Y.length);var ae=re.localNSMap,$=re.tagName==Y,ee=$||re.tagName&&re.tagName.toLowerCase()==Y.toLowerCase();if(ee){if(X.endElement(re.uri,re.localName,Y),ae)for(var ce in ae)Object.prototype.hasOwnProperty.call(ae,ce)&&X.endPrefixMapping(ce);$||R.fatalError("end tag name: "+Y+" is not match the current start tagName:"+re.tagName)}else Z.push(re);ue++;break;case"?":Q&&M(W),ue=F(y,W,X);break;case"!":Q&&M(W),ue=I(y,W,X,R);break;default:Q&&M(W);var oe=new b,ge=Z[Z.length-1].currentNSMap,ue=v(y,W,oe,ge,w,R),De=oe.length;if(!oe.closed&&T(y,ue,oe.tagName,J)&&(oe.closed=!0,L.nbsp||R.warning("unclosed xml attribute")),Q&&De){for(var ye=C(Q,{}),fe=0;fe<De;fe++){var be=oe[fe];M(be.offset),be.locator=C(Q,{})}X.locator=ye,E(oe,X,ge)&&Z.push(oe),X.locator=Q}else E(oe,X,ge)&&Z.push(oe);n.isHTML(oe.uri)&&!oe.closed?ue=N(y,ue,oe.tagName,w,X):ue++}}catch(te){if(te instanceof D)throw te;R.error("element parse error: "+te),ue=-1}ue>U?U=ue:B(Math.max(W,U)+1)}}function C(y,x){return x.lineNumber=y.lineNumber,x.columnNumber=y.columnNumber,x}function v(y,x,L,X,R,g){function w(Q,Z,J){L.attributeNames.hasOwnProperty(Q)&&g.fatalError("Attribute "+Q+" redefined"),L.addValue(Q,Z.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,R),J)}for(var B,M,H=++x,z=i;;){var k=y.charAt(H);switch(k){case"=":if(z===o)B=y.slice(x,H),z=u;else if(z===s)z=u;else throw new Error("attribute equal must after attrName");break;case"'":case'"':if(z===u||z===o)if(z===o&&(g.warning('attribute value must after "="'),B=y.slice(x,H)),x=H+1,H=y.indexOf(k,x),H>0)M=y.slice(x,H),w(B,M,x-1),z=d;else throw new Error("attribute value no end '"+k+"' match");else if(z==l)M=y.slice(x,H),w(B,M,x),g.warning('attribute "'+B+'" missed start quot('+k+")!!"),x=H+1,z=d;else throw new Error('attribute value must after "="');break;case"/":switch(z){case i:L.setTagName(y.slice(x,H));case d:case f:case a:z=a,L.closed=!0;case l:case o:break;case s:L.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return g.error("unexpected end of input"),z==i&&L.setTagName(y.slice(x,H)),H;case">":switch(z){case i:L.setTagName(y.slice(x,H));case d:case f:case a:break;case l:case o:M=y.slice(x,H),M.slice(-1)==="/"&&(L.closed=!0,M=M.slice(0,-1));case s:z===s&&(M=B),z==l?(g.warning('attribute "'+M+'" missed quot(")!'),w(B,M,x)):((!n.isHTML(X[""])||!M.match(/^(?:disabled|checked|selected)$/i))&&g.warning('attribute "'+M+'" missed value!! "'+M+'" instead!!'),w(M,M,x));break;case u:throw new Error("attribute value missed!!")}return H;case"":k=" ";default:if(k<=" ")switch(z){case i:L.setTagName(y.slice(x,H)),z=f;break;case o:B=y.slice(x,H),z=s;break;case l:var M=y.slice(x,H);g.warning('attribute "'+M+'" missed quot(")!!'),w(B,M,x);case d:z=f;break}else switch(z){case s:L.tagName,(!n.isHTML(X[""])||!B.match(/^(?:disabled|checked|selected)$/i))&&g.warning('attribute "'+B+'" missed value!! "'+B+'" instead2!!'),w(B,B,x),x=H,z=o;break;case d:g.warning('attribute space is required"'+B+'"!!');case f:z=o,x=H;break;case u:z=l,x=H;break;case a:throw new Error("elements closed character '/' and '>' must be connected to")}}H++}}function E(y,x,L){for(var X=y.tagName,R=null,k=y.length;k--;){var g=y[k],w=g.qName,B=g.value,Q=w.indexOf(":");if(Q>0)var M=g.prefix=w.slice(0,Q),H=w.slice(Q+1),z=M==="xmlns"&&H;else H=w,M=null,z=w==="xmlns"&&"";g.localName=H,z!==!1&&(R==null&&(R={},O(L,L={})),L[z]=R[z]=B,g.uri=n.XMLNS,x.startPrefixMapping(z,B))}for(var k=y.length;k--;){g=y[k];var M=g.prefix;M&&(M==="xml"&&(g.uri=n.XML),M!=="xmlns"&&(g.uri=L[M||""]))}var Q=X.indexOf(":");Q>0?(M=y.prefix=X.slice(0,Q),H=y.localName=X.slice(Q+1)):(M=null,H=y.localName=X);var Z=y.uri=L[M||""];if(x.startElement(Z,H,X,y),y.closed){if(x.endElement(Z,H,X),R)for(M in R)Object.prototype.hasOwnProperty.call(R,M)&&x.endPrefixMapping(M)}else return y.currentNSMap=L,y.localNSMap=R,!0}function N(y,x,L,X,R){if(/^(?:script|textarea)$/i.test(L)){var g=y.indexOf("</"+L+">",x),w=y.substring(x+1,g);if(/[&<]/.test(w))return/^script$/i.test(L)?(R.characters(w,0,w.length),g):(w=w.replace(/&#?\w+;/g,X),R.characters(w,0,w.length),g)}return x+1}function T(y,x,L,X){var R=X[L];return R==null&&(R=y.lastIndexOf("</"+L+">"),R<x&&(R=y.lastIndexOf("</"+L)),X[L]=R),R<x}function O(y,x){for(var L in y)Object.prototype.hasOwnProperty.call(y,L)&&(x[L]=y[L])}function I(y,x,L,X){var R=y.charAt(x+2);switch(R){case"-":if(y.charAt(x+3)==="-"){var g=y.indexOf("-->",x+4);return g>x?(L.comment(y,x+4,g-x-4),g+3):(X.error("Unclosed comment"),-1)}else return-1;default:if(y.substr(x+3,6)=="CDATA["){var g=y.indexOf("]]>",x+9);return L.startCDATA(),L.characters(y,x+9,g-x-9),L.endCDATA(),g+3}var w=S(y,x),B=w.length;if(B>1&&/!doctype/i.test(w[0][0])){var M=w[1][0],H=!1,z=!1;B>3&&(/^public$/i.test(w[2][0])?(H=w[3][0],z=B>4&&w[4][0]):/^system$/i.test(w[2][0])&&(z=w[3][0]));var k=w[B-1];return L.startDTD(M,H,z),L.endDTD(),k.index+k[0].length}}return-1}function F(y,x,L){var X=y.indexOf("?>",x);if(X){var R=y.substring(x,X).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return R?(R[0].length,L.processingInstruction(R[1],R[2]),X+2):-1}return-1}function b(){this.attributeNames={}}b.prototype={setTagName:function(y){if(!r.test(y))throw new Error("invalid tagName:"+y);this.tagName=y},addValue:function(y,x,L){if(!r.test(y))throw new Error("invalid attribute:"+y);this.attributeNames[y]=this.length,this[this.length++]={qName:y,value:x,offset:L}},length:0,getLocalName:function(y){return this[y].localName},getLocator:function(y){return this[y].locator},getQName:function(y){return this[y].qName},getURI:function(y){return this[y].uri},getValue:function(y){return this[y].value}};function S(y,x){var L,X=[],R=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;for(R.lastIndex=x,R.exec(y);L=R.exec(y);)if(X.push(L),L[1])return X}return Lt.XMLReader=A,Lt.ParseError=D,Lt}var Hr;function co(){if(Hr)return Ct;Hr=1;var n=Zt(),e=sn(),t=uo(),r=ao(),i=e.DOMImplementation,o=n.NAMESPACE,s=r.ParseError,u=r.XMLReader;function l(v){return v.replace(/\r[\n\u0085]/g,`
|
|
3
3
|
`).replace(/[\r\u0085\u2028]/g,`
|
|
4
|
-
`)}function d(v){this.options=v||{locator:{}}}d.prototype.parseFromString=function(v,E){var
|
|
5
|
-
@`+(v.systemId||"")+"#[line:"+v.lineNumber+",col:"+v.columnNumber+"]"}function m(v,E,
|
|
6
|
-
`)),r.escapeMode&&(B.__text=a(B.__text)),r.stripWhitespaces&&(B.__text=B.__text.trim()),delete B["#text"],r.arrayAccessForm==="property"&&delete B["#text_asArray"],B.__text=m(B.__text,"#text",w+".#text")),B.hasOwnProperty("#cdata-section")&&(B.__cdata=B["#cdata-section"],delete B["#cdata-section"],r.arrayAccessForm==="property"&&delete B["#cdata-section_asArray"]),B.__cnt===1&&B.__text&&!r.keepText?B=B.__text:B.__cnt===0&&r.emptyNodeForm==="text"?B="":B.__cnt>1&&B.__text!==void 0&&r.skipEmptyTextNodesForObj&&(r.stripWhitespaces&&B.__text===""||B.__text.trim()==="")&&delete B.__text,delete B.__cnt,!r.keepCData&&!B.hasOwnProperty("__text")&&B.hasOwnProperty("__cdata")&&Object.keys(B).length===1?B.__cdata?B.__cdata:"":(r.enableToStringFunc&&(B.__text||B.__cdata)&&(B.toString=function(){return(this.__text?this.__text:"")+(this.__cdata?this.__cdata:"")}),B)}function E(g,w){return g.nodeType===u.DOCUMENT_NODE?C(g):g.nodeType===u.ELEMENT_NODE?v(g,w):g.nodeType===u.TEXT_NODE||g.nodeType===u.CDATA_SECTION_NODE?g.nodeValue:null}function P(g,w,B,O){var H="<"+(g&&g.__prefix?g.__prefix+":":"")+w;if(B)for(var R=0;R<B.length;R++){var G=B[R],Q=g[G];r.escapeMode&&(Q=f(Q)),H+=" "+G.substr(r.attributePrefix.length)+"=",r.useDoubleQuotes?H+='"'+Q+'"':H+="'"+Q+"'"}return O?H+=" />":H+=">",H}function x(g,w){return"</"+(g&&g.__prefix?g.__prefix+":":"")+w+">"}function M(g,w){return g.indexOf(w,g.length-w.length)!==-1}function F(g,w){return!!(r.arrayAccessForm==="property"&&M(w.toString(),"_asArray")||w.toString().indexOf(r.attributePrefix)===0||w.toString().indexOf("__")===0||g[w]instanceof Function)}function S(g){var w=0;if(g instanceof Object)for(var B in g)F(g,B)||w++;return w}function y(g){var w=[];if(g instanceof Object)for(var B in g)B.toString().indexOf("__")===-1&&B.toString().indexOf(r.attributePrefix)===0&&w.push(B);return w}function I(g){var w="";return g.__cdata&&(w+="<![CDATA["+g.__cdata+"]]>"),(g.__text||typeof g.__text=="number"||typeof g.__text=="boolean")&&(r.escapeMode?w+=f(g.__text):w+=g.__text),w}function b(g){var w="";return g instanceof Object?w+=I(g):g!==null&&(r.escapeMode?w+=f(g):w+=g),w}function N(g,w,B){var O="";if(g.length===0)O+=P(g,w,B,!0);else for(var H=0;H<g.length;H++)O+=L(g[H],w,y(g[H]));return O}function L(g,w,B){var O="";if(r.jsAttributeFilter&&r.jsAttributeFilter.call(null,w,g))return O;if(r.jsAttributeConverter&&(g=r.jsAttributeConverter.call(null,w,g)),(g==null||g==="")&&r.selfClosingElements)O+=P(g,w,B,!0);else if(typeof g=="object")if(Object.prototype.toString.call(g)==="[object Array]")O+=N(g,w,B);else if(g instanceof Date)O+=P(g,w,B,!1),O+=r.jsDateUTC?g.toUTCString():g.toISOString(),O+=x(g,w);else{var H=S(g);H>0||typeof g.__text=="number"||typeof g.__text=="boolean"||g.__text||g.__cdata?(O+=P(g,w,B,!1),O+=X(g),O+=x(g,w)):r.selfClosingElements?O+=P(g,w,B,!0):(O+=P(g,w,B,!1),O+=x(g,w))}else O+=P(g,w,B,!1),O+=b(g),O+=x(g,w);return O}function X(g){var w="",B=S(g);if(B>0){for(var O in g)if(!F(g,O)){var H=g[O],R=y(H);w+=L(H,O,R)}}return w+=b(g),w}function z(g){if(g===void 0||typeof g!="string")return null;var w=null,B=null;if(e)w=new e(r.xmldomOptions),B=w.parseFromString(g,"text/xml");else if(window&&window.DOMParser){w=new window.DOMParser;var O=null,H=window.ActiveXObject||"ActiveXObject"in window;if(!H&&document.all&&!document.addEventListener)try{O=w.parseFromString("INVALID","text/xml").childNodes[0].namespaceURI}catch{O=null}try{B=w.parseFromString(g,"text/xml"),O!==null&&B.getElementsByTagNameNS(O,"parsererror").length>0&&(B=null)}catch{B=null}}else g.indexOf("<?")===0&&(g=g.substr(g.indexOf("?>")+2)),B=new ActiveXObject("Microsoft.XMLDOM"),B.async="false",B.loadXML(g);return B}this.asArray=function(w){return w==null?[]:w instanceof Array?w:[w]},this.toXmlDateTime=function(w){return w instanceof Date?w.toISOString():typeof w=="number"?new Date(w).toISOString():null},this.asDateTime=function(w){return typeof w=="string"?A(w):w},this.xml2dom=function(w){return z(w)},this.dom2js=function(w){return E(w,null)},this.js2dom=function(w){var B=this.js2xml(w);return z(B)},this.xml2js=function(w){var B=z(w);return B!=null?this.dom2js(B):null},this.js2xml=function(w){return X(w)},this.getVersion=function(){return i}}})})(Qt)),Qt.exports}var ho=fo();const go=io(ho);Le.extend(Jr);const zr="#sym:";async function mo(n,e,t){const r=await fetch(n,{credentials:"include",signal:t,headers:e?{Authorization:e}:void 0}),i=(r.headers.get("content-type")||"").toLowerCase();if(!r.ok){const s=await r.text();throw new Error(`Image request failed: ${r.status} ${r.statusText}; ${s.slice(0,240)}`)}if(!i.includes("image/")){const s=await r.text();throw new Error(`Image response has invalid content type: ${i}; ${s.slice(0,240)}`)}const o=await r.blob();return new Promise((s,u)=>{const l=new FileReader;l.onload=()=>typeof l.result=="string"?s(l.result):u(new Error("Failed to convert image to data URL")),l.onerror=()=>u(l.error??new Error("Failed to read image response")),l.readAsDataURL(o)})}function vr(n){if(typeof n=="function")return n;if(typeof n!="string"||!n.startsWith(zr))return;const e=n.slice(zr.length).trim();if(!e)return;const r=globalThis.__layerSymbols?.[e];if(typeof r=="function")return r;console.warn(`[LayerSymbol] 未找到符号函数: ${n}`)}function dt(n){const e=k.bboxPolygon(n),t=k.toMercator(e),[[r,i],,[o,s]]=t.geometry.coordinates[0];return[r,i,o,s]}function Et(n,e,t){return n+(e-n)*t}function Kt(n,e,t,r=5,i=1.2){function o(f,a,D){return Math.exp(-(f*f+a*a)/(2*D*D))}const s=Math.floor(r/2);let u=[],l=0;for(let f=-s;f<=s;f++)for(let a=-s;a<=s;a++){const D=o(a,f,i);u.push(D),l+=D}u=u.map(f=>f/l);const d=Array.from({length:t},()=>Array(e).fill(void 0));for(let f=0;f<t;f++)for(let a=0;a<e;a++){if(n[f][a]===void 0){d[f][a]=void 0;continue}let D=0,A=0,m=0;for(let C=-s;C<=s;C++)for(let v=-s;v<=s;v++){const E=Math.min(e-1,Math.max(0,a+v)),P=Math.min(t-1,Math.max(0,f+C)),x=n[P][E];x!==void 0&&(D+=x*u[m],A+=u[m]),m++}d[f][a]=A>0?D/A:void 0}return d}function _e(n,e=1,t=3){const r=Number(n);return Number.isFinite(r)?Math.max(0,Math.min(t,r)):e}function Dr(n,e,t,r){const i=_e(r);if(i===0)return n;const o=Math.max(1,Math.ceil(i*2));return Kt(n,e,t,o*2+1,i*1.2)}function sn(n,e,t,r,i){const[o,s,u,l]=i,d=o+(u-o)*(n/(t-1)),f=l-(l-s)*(e/(r-1));return[d,f]}function un(n,e,t,r,i){const[o,s,u,l]=i,d=o+(u-o)*(n/(t-1)),f=l-(l-s)*(e/(r-1));return[d,f]}function Ao(n,e,t,r){return n.map(i=>{const o=i.coordinates.map(s=>s.map(u=>u.map(([l,d])=>un(l,d,e,t,r))));return{...i,coordinates:o,properties:i.properties}})}function po(n,e,t,r){return n.map(i=>{const o=i.coordinates.map(s=>s.map(u=>u.map(([l,d])=>sn(l,d,e,t,r))));return{...i,coordinates:o}})}function Vt(n,e,t,r,i){const o=Math.floor(e),s=Math.min(o+1,r-1),u=Math.floor(t),l=Math.min(u+1,i-1),d=n[u*r+o],f=n[u*r+s],a=n[l*r+o],D=n[l*r+s],A=e-o,m=t-u;return d*(1-A)*(1-m)+f*A*(1-m)+a*(1-A)*m+D*A*m}async function tt(n,e,t,r,i){let o=0,s=0;const u=document.createElement("canvas"),l=u.getContext("2d"),d=new Image,f=await mo(n,r,i?.signal);return d.src=f,new Promise((a,D)=>{d.onload=()=>{o=d.width,s=d.height,u.width=o,u.height=s,l.clearRect(0,0,o,s),l.drawImage(d,0,0);const m=l.getImageData(0,0,o,s).data,[C,v]=e,E=(L,X)=>{const z=(X*o+L)*4;return[m[z]??0,m[z+1]??0,m[z+2]??0,m[z+3]??0]},P=(L,X,z,g,w=4)=>Math.abs(L-g[0])<=w&&Math.abs(X-g[1])<=w&&Math.abs(z-g[2])<=w,x=i?.detectNoDataByBorderColor!==!1;let M=[];const F=(L,X,z)=>M.some(g=>P(L,X,z,g,6));if(x){const L=E(0,0),X=E(Math.max(0,o-1),0),z=E(0,Math.max(0,s-1)),g=E(Math.max(0,o-1),Math.max(0,s-1)),w=[L,X,z,g].filter(H=>H[3]>0).map(H=>[H[0],H[1],H[2]]),B=[];for(const H of w){const R=B.find(G=>P(H[0],H[1],H[2],G.rgb,6));R?R.count+=1:B.push({rgb:H,count:1})}B.sort((H,R)=>R.count-H.count);const O=B[0];M=O&&O.count>=3?[O.rgb]:[]}const S=o*s,y=new Uint8Array(S),I=[],b=L=>{if(L<0||L>=S||y[L])return;const X=L*4,z=m[X]??0,g=m[X+1]??0,w=m[X+2]??0;(m[X+3]??0)>0&&M.length>0&&F(z,g,w)&&(y[L]=1,I.push(L))};for(let L=0;L<o;L++)b(L),b((s-1)*o+L);for(let L=0;L<s;L++)b(L*o),b(L*o+(o-1));for(let L=0;L<I.length;L++){const X=I[L],z=X%o,g=Math.floor(X/o);z>0&&b(X-1),z<o-1&&b(X+1),g>0&&b(X-o),g<s-1&&b(X+o)}const N=[];for(let L=0;L<s;L++)for(let X=0;X<o;X++){const z=(L*o+X)*4,g=L*o+X,w=m[z]??0,B=m[z+1]??0,O=m[z+2]??0;if((m[z+3]??0)===0||y[g]===1){N.push(void 0);continue}const R=.299*w+.587*B+.114*O,G=C+R/255*(v-C);G<C?t?.[0]?N.push(void 0):N.push(C):G>v?t?.[1]?N.push(void 0):N.push(v):N.push(G)}a({grayArr:N,width:o,height:s})},d.onerror=()=>D(new Error(`Failed to decode image response: ${n}`))})}function Je(n){return n=n.trim(),n.endsWith("%")?parseFloat(n)/100*255:parseFloat(n)}function ur(n){return n=n.trim(),n.endsWith("%")?parseFloat(n)/100:parseFloat(n)}function Ze(n){return isFinite(n)?Math.max(0,Math.min(255,Math.round(n))):0}function xt(n){if(!n)return[0,0,0,0];n=n.trim();const e=n.match(/rgba?\(\s*([0-9.+%]+)[,\s]+([0-9.+%]+)[,\s]+([0-9.+%]+)(?:[,\s]+([0-9.+%]+))?\s*\)/i);if(e){const t=Je(e[1]),r=Je(e[2]),i=Je(e[3]),o=e[4]?ur(e[4]):1;return[Ze(t),Ze(r),Ze(i),Math.round(o*255)]}if(n[0]==="#"){let t=n.slice(1);if(t.length===3&&(t=t.split("").map(r=>r+r).join("")),t.length===6){const r=parseInt(t.slice(0,2),16),i=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16);return[r,i,o,255]}}try{const t=document.createElement("canvas").getContext("2d");t.fillStyle=n;const r=t.fillStyle;if(r&&r!==""){const i=r.match(/rgba?\(([^)]+)\)/);if(i){const o=i[1].split(",").map(f=>f.trim()),s=Je(o[0]),u=Je(o[1]),l=Je(o[2]),d=o[3]?ur(o[3]):1;return[Ze(s),Ze(u),Ze(l),Math.round(d*255)]}}}catch{}return[0,0,0,0]}function yr(n,e){if(!Array.isArray(n)||n.length===0)return[];if(!e||e.length!==2)return n;const t=Number(e[0]),r=Number(e[1]);if(!isFinite(t)||!isFinite(r))return n;const i=n.length,o=Math.max(0,Math.min(i,Math.floor(Math.min(t,r)))),s=Math.max(0,Math.min(i,Math.ceil(Math.max(t,r))));return n.slice(o,s)}function ht(n,e){const t=yr(n,e);if(!t.length)return;const r=t.find(u=>u?.scope?.length),i=[...t].reverse().find(u=>u?.scope?.length),o=r?.scope?.length?Number(r.scope[0]):void 0,s=i?.scope?.length?Number(i.scope[i.scope.length-1]):void 0;if(!(typeof o>"u"||isNaN(o)))return typeof s>"u"||isNaN(s)?[o,o]:[o,s]}function Ce(n,e){const t=[],r={},i=yr(n,e);for(const s of i){const u=s?.scope?.length?Number(s.scope[0]):NaN;isNaN(u)||(t.push(u),r[u]=s.color)}return{uniqueThresholds:Array.from(new Set(t)).sort((s,u)=>s-u),colorMap:r}}const or=new globalThis.Map;function vo(n){const e=n?.config,t=(e?.legend??[]).map(r=>({name:r?.name,scope:r?.scope??[],color:r?.color}));return JSON.stringify({url:n?.url,authorization:n?.authorization??"",extent:e?.extent??[],scope:e?.scope??[],legendScope:e?.legendScope??[],legend:t})}async function Pt(n){const e=vo(n),t=or.get(e);if(t)return t;const r=(async()=>{const{config:i,url:o,authorization:s}=n;if(!i)return;const{extent:u,scope:l,legend:d,legendScope:f}=i;if(!u)return;const a=dt(u),D=[-99999,99999];et.isNumber(l?.[0])&&(D[0]=l[0]),et.isNumber(l?.[1])&&(D[1]=l[1]);const{grayArr:A,width:m,height:C}=await tt(o,D,void 0,s,{signal:n.signal}),{uniqueThresholds:v,colorMap:E}=Ce(d,f),P=[];for(let S=0;S<C;S++){P[S]=[];for(let y=0;y<m;y++)P[S][y]=A[S*m+y]}const x=Kt(P,m,C),M=[],F=[];for(let S=0;S<C;S++){M[S]=[],F[S]=[];for(let y=0;y<m;y++){const I=P[S]&&typeof P[S][y]<"u"?P[S][y]:void 0;M[S][y]=I==null||isNaN(Number(I))?NaN:Number(I);const b=x[S]&&typeof x[S][y]<"u"?x[S][y]:void 0;F[S][y]=b==null||isNaN(Number(b))?NaN:Number(b)}}return{width:m,height:C,extent:a,rawArr2D:M,smoothArr2D:F,uniqueThresholds:v,colorMap:E}})();or.set(e,r);try{return await r}finally{or.delete(e)}}function an(n,e,t){const r=n[2]-n[0],i=n[3]-n[1],o=r/i;let s=e,u=Math.round(s/o);return u>t&&(u=t,s=Math.round(u*o)),{width:s,height:u}}function br(n,e){const t=dt(n),{width:r,height:i}=an(t,e,e);return{bbox:t,width:r,height:i}}function ar(n,e,t){const r=F=>{if(Array.isArray(F)&&F.length>=2){const S=Number(F[0]),y=Number(F[1]);if(Number.isFinite(S)&&Number.isFinite(y))return[S,y]}if(typeof F=="string"){const S=F.split(",").map(y=>Number(y.trim())).filter(y=>Number.isFinite(y));if(S.length>=2)return[S[0],S[1]]}},i=ve(),o=Number(t?.imageSize??i.imageSize),s=Number.isFinite(o)&&o>0?Math.round(o):i.imageSize,{bbox:u,width:l,height:d}=br(n.config.extent,s),f=n?.config?.layerConfig??{},a=f.LAYERS,D=String(f.VERSION??"1.1.1"),A=D.startsWith("1.3")?{CRS:"EPSG:3857"}:{SRS:"EPSG:3857"},m=r(n?.config?.scope)??[0,0],C=r(n?.config?.componentScope)??r(n?.config?.uvScope)??r(f.COMPONENT_SCALE_RANGE)??r(f.COMPONENT_SCOPE)??r(f.UV_SCOPE);let v=m;if(et.isArray(a)&&a.length>1)if(C){const F=Math.max(Math.abs(C[0]),Math.abs(C[1]));v=[-F,F]}else{const F=Number(m[0]),S=Number(m[1]);if(Number.isFinite(F)&&Number.isFinite(S)){const y=Math.max(Math.abs(F),Math.abs(S));v=[-y,y]}}const E=v.toString(),P=String(t?.serviceBaseUrl??n?.serviceBaseUrl??n?.config?.serviceBaseUrl??i.serviceBaseUrl).replace(/\/$/,""),x=String(n.url||"").replace(/^\/+/,""),M=`${P}/wms/${x}`;if(et.isArray(a)){const F=[];return a.forEach(S=>{const y={SERVICE:"WMS",VERSION:D,REQUEST:"GetMap",FORMAT:"image/png",...f,...A,TIME:Le(e).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:E,BBOX:u.join(","),WIDTH:""+l,HEIGHT:""+d};y.LAYERS=S,F.push(`${M}?${new URLSearchParams(y).toString()}`)}),F}else{const F={SERVICE:"WMS",VERSION:D,REQUEST:"GetMap",FORMAT:"image/png",...f,...A,TIME:Le(e).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:E,BBOX:u.join(","),WIDTH:""+l,HEIGHT:""+d};return`${M}?${new URLSearchParams(F).toString()}`}}function Do(n,e,t,r){if(!e||e.length===0)return[0,0,0,0];if(r==="discrete"||r==="grid"){let i=e[0];for(let s=0;s<e.length&&n>=e[s];s++)i=e[s];const o=t[e.indexOf(i)];return[o[0],o[1],o[2],o[3]??255]}else{if(n<=e[0]){const m=t[0];return[m[0],m[1],m[2],m[3]??255]}if(n>=e[e.length-1]){const m=t[t.length-1];return[m[0],m[1],m[2],m[3]??255]}let i=0;for(let m=0;m<e.length-1;m++)if(n>=e[m]&&n<=e[m+1]){i=m;break}const o=e[i],s=e[i+1],u=(n-o)/(s-o),l=t[i],d=t[i+1],f=Math.round(Et(l[0],d[0],u)),a=Math.round(Et(l[1],d[1],u)),D=Math.round(Et(l[2],d[2],u)),A=Math.round(Et(l[3]??255,d[3]??255,u));return[f,a,D,A]}}const yo=new go({attributePrefix:""});function jt(n,e){const t=yo.xml2js(n);if(!e)return t;const r=t?.catalog?.dataset?.[e];return r===void 0||Array.isArray(r)?r:[r]}function cn(n){const e=jt(n),t=e?.gridDataset;if(!t){const s=Object.keys(e||{}).join(", ")||"none";throw new Error("Invalid NCSS dataset XML: expected gridDataset root, received: "+s)}const r=t.gridSet?.grid;if(!r)throw new Error("Invalid NCSS dataset XML: gridDataset.gridSet.grid is missing");let i=r;et.isObject(i)&&(i=[i]);const o=Array.isArray(t.axis)?t.axis:[t.axis].filter(Boolean);return{latLonBox:t.LatLonBox,timeSpan:t.TimeSpan,axis:o,grid:i}}function bo(n){const e=String(n||"").split("."),t=e[e.length-1]?.toLowerCase()||"other";return["png","jpg","jpeg","xlsx","xls","csv","txt","json","geojson","grb","grib1","grib2","grb2","gr2","nc"].includes(t)?t:"other"}function cr(n){const{xmlJson:e,type:t}=n;return e.map(r=>t==="menu"?{label:r["xlink:title"],key:r.ID,url:r.ID,type:t,isLeaf:!1}:{label:r.name,key:r.ID,url:r.urlPath,type:t,isLeaf:!0,fileType:bo(r.name)})}async function wr(n,e,t,r,i,o,s){const u=ve(),l=[t.west,t.south,t.east,t.north],{bbox:d,width:f,height:a}=br(l,u.imageSize),D=new URLSearchParams({service:"WMS",version:"1.3.0",request:"GetMetadata",item:"minmax",layers:e,styles:"",CRS:"EPSG:3857",BBOX:d.join(","),time:r||"",width:String(f),height:String(a)}),A=o??u.serviceBaseUrl,m=String(n).replace(/^\/+/,""),C=await Yt("wms/"+m+"?"+D.toString(),{baseUrl:A,authorization:i,signal:s}),v=(C.headers.get("content-type")||"").toLowerCase();if(!v.includes("json")){const E=await C.text();throw new Error("WMS min/max response has invalid content type: "+(v||"unknown")+"; "+E.slice(0,240))}return await C.json()}async function ln(n,e,t={}){try{const r=String(n).replace(/^\/+|\/+$/g,""),i=await pr("catalog/"+r+"/catalog.xml",e,{baseUrl:t.serviceBaseUrl,signal:t.signal}),o=jt(i,"catalogRef"),s=jt(i,"dataset"),u=[];let l="";return o?.length&&(u.push(...cr({xmlJson:o,type:"menu"})),l="menu"),s?.length&&(u.push(...cr({xmlJson:s,type:"file"})),l="file"),{type:l,data:u}}catch{return}}async function Gt(n){const e=ve(),t=n.authorization??e.serviceAuthorization,r=n.serviceBaseUrl??e.serviceBaseUrl;let i=n.filePath,o;for(let P=0;P<6;P++){if(o=await ln(i,t,{serviceBaseUrl:r,signal:n.signal}),!o?.data.length)return;if(o.data.reverse(),o.type==="file")break;if(o.type!=="menu"||!o.data[0]?.url)return;i=o.data[0].url}if(!o?.data.length||o.type!=="file")return;const s=n.fileNamePattern?new RegExp(n.fileNamePattern):void 0,u=s?o.data.filter(P=>s.test(P.label)):o.data,l=u[0];if(!l)return;const d=n.url||l.url||i+"/"+l.label,f="/"+String(d).replace(/^\/+/,""),a=n.ncssBaseUrl??e.ncssBaseUrl,D=await rn(a.replace(/\/$/,"")+f+"/dataset.xml",t,{baseUrl:r,signal:n.signal}),{latLonBox:A,timeSpan:m,axis:C}=cn(D),v=C.find(P=>P.name==="time"),E=[];if(v&&m?.begin){const P=Number(v.values?.npts),x=String(v.attribute?.find(S=>S.name==="units")?.value||"").toLowerCase(),M=x.includes("hour")?"hour":x.includes("minute")?"minute":"second",F=Number(v.values?.resolution);if(P>1&&Number.isFinite(F)&&F!==0)for(let S=0;S<P;S++)E.push(Le(m.begin).add(S*F,M).format("YYYYMMDDHHmmss"));else E.push(Le(m.begin).format("YYYYMMDDHHmmss"))}return{type:"file",latLonBox:A,timeList:E,fileList:u,url:f,authorization:t}}Le.extend(Jr);function lr(n,e){if(n&&typeof n=="object"){const t=n,r={north:Number(t.north),south:Number(t.south),east:Number(t.east),west:Number(t.west)};if(Object.values(r).every(Number.isFinite))return r}if(Array.isArray(e)&&e.length>=4){const[t,r,i,o]=e.map(Number);if([o,r,i,t].every(Number.isFinite))return{north:o,south:r,east:i,west:t}}}function wo(n){return(Array.isArray(n)?n:[n]).map(e=>String(e??"").trim()).filter(Boolean)}async function Co(n,e,t,r,i,o){const s=n.config?.scope,u=Number(s?.[0]),l=Number(s?.[1]),d=Number.isFinite(u),f=Number.isFinite(l);if(d&&f)return[u,l];const a=wo(n.config?.layerConfig?.LAYERS),D=lr(void 0,n.config?.extent)??lr(i);if(!a.length)throw new Error('Layer "'+n.id+'" has no WMS LAYERS setting');if(!D)throw new Error('Layer "'+n.id+'" has no valid extent');const A=ve(),m=n.serviceBaseUrl??o.serviceBaseUrl??A.serviceBaseUrl,C=t?Le(t).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"):void 0,v=await Promise.all(a.map(F=>wr(e,F,D,C,r,m,o.signal))),E=Math.min(...v.map(F=>Number(F.min))),P=Math.max(...v.map(F=>Number(F.max))),x=d?u:E,M=f?l:P;if(!Number.isFinite(x)||!Number.isFinite(M))throw new Error('Invalid WMS min/max response for layer "'+n.id+'"');return[x,M]}async function Bo(n,e={}){const t=Array.isArray(n.type)?n.type:[n.type];if(t.includes("typhoon"))return{...n,show:!0};const r=ve();let i=n.url,o=n.time,s=[],u=n.authorization??e.authorization??r.serviceAuthorization,l;if(!i){let m=await Gt({filePath:n.filePath,fileNamePattern:n.fileNamePattern,authorization:u,serviceBaseUrl:n.serviceBaseUrl??e.serviceBaseUrl,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal});if(!m?.fileList?.length&&n.fallbackFilePath&&(m=await Gt({filePath:n.fallbackFilePath,fileNamePattern:n.fileNamePattern,authorization:n.fallbackAuthorization??u,serviceBaseUrl:n.serviceBaseUrl??e.serviceBaseUrl,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal})),!m?.fileList?.length||!m.timeList?.length&&!o)return null;i=m.url??m.fileList[0]?.url,s=m.timeList,o=o??m.timeList[0],u=m.authorization??u,l=m.latLonBox}if(!i)return null;if(t.includes("micaps"))return{...n,show:!0,time:o,authorization:u,url:i};const d=await Co(n,i,o,u,l,e),f=d?{...n,config:{...n.config,scope:d}}:n,a=n.serviceBaseUrl??e.serviceBaseUrl??r.serviceBaseUrl;let D=f.config;const A=n.config.fusionConfig;if(A)try{const m=String(i).match(/G005_(\d{10})\d{7}\.GRB2$/)?.[1];if(A.fileNamePattern?.includes("{cycle}")&&!m)throw new Error("Unable to find the PPH/R01 forecast cycle");const C=A.fileNamePattern?.replace("{cycle}",m??""),v=await Gt({filePath:A.filePath,fileNamePattern:C,authorization:A.authorization??u,serviceBaseUrl:A.serviceBaseUrl??a,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal}),E=o?Le(o).format("YYYYMMDDHHmmss"):void 0,P=E&&v?.timeList.includes(E)?E:s.find(M=>v?.timeList.includes(M)),x=v?.url??v?.fileList[0]?.url;if(P&&x){const M=lr(l,n.config.extent);let F=A.scope;if(M)try{const b=Le(P).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),N=await wr(x,A.layerName,M,b,A.authorization??u,A.serviceBaseUrl??a,e.signal);Number.isFinite(N.min)&&Number.isFinite(N.max)&&(F=[Math.min(0,N.min),Math.max(N.max,1)])}catch{}const S=A.serviceBaseUrl??a,y=ar({...n,url:x,config:{...n.config,scope:F,layerConfig:{...n.config.layerConfig??{},LAYERS:A.layerName}}},P,{serviceBaseUrl:S}),I=Array.isArray(y)?y[0]:y;if(!I)throw new Error("Unable to build the R01 WMS URL");D={...f.config,fusionConfig:{...A,scope:F,url:I}},o=P}else D={...f.config,fusionConfig:{...A,url:void 0}}}catch(m){console.warn('[LayerRequest] fusion data unavailable for "'+n.id+'"',m),D={...f.config,fusionConfig:{...A,url:void 0}}}return{...f,config:D,show:!0,time:o,authorization:u,url:ar({...f,url:i},o??"",{serviceBaseUrl:a})}}let Ft=null;const Ye=64,$e=-1e30;function Ut(n,e,t){const r=n*e,i=new Float32Array(r);for(let o=0;o<e;o++)for(let s=0;s<n;s++){const u=o*n+s,l=t?.[o]?.[s];i[u]=l==null||isNaN(Number(l))?$e:Number(l)}return i}function Eo(n,e,t){const r=n*e,i=new Uint8Array(r);for(let o=0;o<e;o++)for(let s=0;s<n;s++){const u=o*n+s,l=t?.[o]?.[s];i[u]=l==null||isNaN(Number(l))?0:255}return i}async function xo(){return Ft||(Ft=(async()=>{const n=navigator?.gpu;if(!n)return null;const e=await n.requestAdapter();return e?await e.requestDevice():null})(),Ft)}function No(){return`
|
|
4
|
+
`)}function d(v){this.options=v||{locator:{}}}d.prototype.parseFromString=function(v,E){var N=this.options,T=new u,O=N.domBuilder||new a,I=N.errorHandler,F=N.locator,b=N.xmlns||{},S=/\/x?html?$/.test(E),y=S?t.HTML_ENTITIES:t.XML_ENTITIES;F&&O.setDocumentLocator(F),T.errorHandler=f(I,O,F),T.domBuilder=N.domBuilder||O,S&&(b[""]=o.HTML),b.xml=b.xml||o.XML;var x=N.normalizeLineEndings||l;return v&&typeof v=="string"?T.parse(x(v),b,y):T.errorHandler.error("invalid doc source"),O.doc};function f(v,E,N){if(!v){if(E instanceof a)return E;v=E}var T={},O=v instanceof Function;N=N||{};function I(F){var b=v[F];!b&&O&&(b=v.length==2?function(S){v(F,S)}:v),T[F]=b&&function(S){b("[xmldom "+F+"] "+S+A(N))}||function(){}}return I("warning"),I("error"),I("fatalError"),T}function a(){this.cdata=!1}function D(v,E){E.lineNumber=v.lineNumber,E.columnNumber=v.columnNumber}a.prototype={startDocument:function(){this.doc=new i().createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(v,E,N,T){var O=this.doc,I=O.createElementNS(v,N||E),F=T.length;C(this,I),this.currentElement=I,this.locator&&D(this.locator,I);for(var b=0;b<F;b++){var v=T.getURI(b),S=T.getValue(b),N=T.getQName(b),y=O.createAttributeNS(v,N);this.locator&&D(T.getLocator(b),y),y.value=y.nodeValue=S,I.setAttributeNode(y)}},endElement:function(v,E,N){var T=this.currentElement;T.tagName,this.currentElement=T.parentNode},startPrefixMapping:function(v,E){},endPrefixMapping:function(v){},processingInstruction:function(v,E){var N=this.doc.createProcessingInstruction(v,E);this.locator&&D(this.locator,N),C(this,N)},ignorableWhitespace:function(v,E,N){},characters:function(v,E,N){if(v=m.apply(this,arguments),v){if(this.cdata)var T=this.doc.createCDATASection(v);else var T=this.doc.createTextNode(v);this.currentElement?this.currentElement.appendChild(T):/^\s*$/.test(v)&&this.doc.appendChild(T),this.locator&&D(this.locator,T)}},skippedEntity:function(v){},endDocument:function(){this.doc.normalize()},setDocumentLocator:function(v){(this.locator=v)&&(v.lineNumber=0)},comment:function(v,E,N){v=m.apply(this,arguments);var T=this.doc.createComment(v);this.locator&&D(this.locator,T),C(this,T)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(v,E,N){var T=this.doc.implementation;if(T&&T.createDocumentType){var O=T.createDocumentType(v,E,N);this.locator&&D(this.locator,O),C(this,O),this.doc.doctype=O}},warning:function(v){console.warn("[xmldom warning] "+v,A(this.locator))},error:function(v){console.error("[xmldom error] "+v,A(this.locator))},fatalError:function(v){throw new s(v,this.locator)}};function A(v){if(v)return`
|
|
5
|
+
@`+(v.systemId||"")+"#[line:"+v.lineNumber+",col:"+v.columnNumber+"]"}function m(v,E,N){return typeof v=="string"?v.substr(E,N):v.length>=E+N||E?new java.lang.String(v,E,N)+"":v}"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(v){a.prototype[v]=function(){return null}});function C(v,E){v.currentElement?v.currentElement.appendChild(E):v.doc.appendChild(E)}return Ct.__DOMHandler=a,Ct.normalizeLineEndings=l,Ct.DOMParser=d,Ct}var Rr;function lo(){if(Rr)return wt;Rr=1;var n=sn();return wt.DOMImplementation=n.DOMImplementation,wt.XMLSerializer=n.XMLSerializer,wt.DOMParser=co().DOMParser,wt}var fo=Qt.exports,zr;function ho(){return zr||(zr=1,(function(n){(function(e,t){n.exports?n.exports=t(lo().DOMParser):e.X2JS=t()})(fo,function(e){return function(r){var i="3.4.4";r=r||{};function o(){r.arrayAccessForm=r.arrayAccessForm||"none",r.emptyNodeForm=r.emptyNodeForm||"text",r.jsAttributeFilter=r.jsAttributeFilter,r.jsAttributeConverter=r.jsAttributeConverter,r.attributeConverters=r.attributeConverters||[],r.datetimeAccessFormPaths=r.datetimeAccessFormPaths||[],r.arrayAccessFormPaths=r.arrayAccessFormPaths||[],r.xmldomOptions=r.xmldomOptions||{},r.enableToStringFunc===void 0&&(r.enableToStringFunc=!0),r.skipEmptyTextNodesForObj===void 0&&(r.skipEmptyTextNodesForObj=!0),r.stripWhitespaces===void 0&&(r.stripWhitespaces=!0),r.useDoubleQuotes===void 0&&(r.useDoubleQuotes=!0),r.ignoreRoot===void 0&&(r.ignoreRoot=!1),r.escapeMode===void 0&&(r.escapeMode=!0),r.attributePrefix===void 0&&(r.attributePrefix="_"),r.selfClosingElements===void 0&&(r.selfClosingElements=!0),r.keepCData===void 0&&(r.keepCData=!1),r.keepText===void 0&&(r.keepText=!1),r.jsDateUTC===void 0&&(r.jsDateUTC=!1)}function s(){function g(w){var B=String(w);return B.length===1&&(B="0"+B),B}typeof String.prototype.trim!="function"&&(String.prototype.trim=function(){return this.replace(/^\s+|^\n+|(\s|\n)+$/g,"")}),typeof Date.prototype.toISOString!="function"&&(Date.prototype.toISOString=function(){var B=1e3;return this.getUTCFullYear()+"-"+g(this.getUTCMonth()+1)+"-"+g(this.getUTCDate())+"T"+g(this.getUTCHours())+":"+g(this.getUTCMinutes())+":"+g(this.getUTCSeconds())+"."+String((this.getUTCMilliseconds()/B).toFixed(3)).slice(2,5)+"Z"})}o(),s();var u={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,COMMENT_NODE:8,DOCUMENT_NODE:9};function l(g){var w=g.localName;return w==null&&(w=g.baseName),(w==null||w==="")&&(w=g.nodeName),w}function d(g){return g.prefix}function f(g){return typeof g=="string"?g.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"):g}function a(g){return g.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}function D(g,w,B){if(r.arrayAccessForm==="property"&&(g[w]instanceof Array?g[w+"_asArray"]=g[w]:g[w+"_asArray"]=[g[w]]),!(g[w]instanceof Array)&&r.arrayAccessFormPaths.length>0){for(var M=!1,H=0;H<r.arrayAccessFormPaths.length;H++){var z=r.arrayAccessFormPaths[H];if(typeof z=="string"){if(z===B){M=!0;break}}else if(z instanceof RegExp){if(z.test(B)){M=!0;break}}else if(typeof z=="function"&&z(w,B)){M=!0;break}}M&&(g[w]=[g[w]])}}function A(g){var w=60,B=g.split(/[-T:+Z]/g),M=new Date(B[0],B[1]-1,B[2]),H=B[5].split(".");if(M.setHours(B[3],B[4],H[0]),H.length>1&&M.setMilliseconds(H[1]),B[6]&&B[7]){var z=B[6]*w+Number(B[7]),k=/\d\d-\d\d:\d\d$/.test(g)?"-":"+";z=0+(k==="-"?-1*z:z),M.setMinutes(M.getMinutes()-z-M.getTimezoneOffset())}else g.indexOf("Z",g.length-1)!==-1&&(M=new Date(Date.UTC(M.getFullYear(),M.getMonth(),M.getDate(),M.getHours(),M.getMinutes(),M.getSeconds(),M.getMilliseconds())));return M}function m(g,w,B){if(r.datetimeAccessFormPaths.length>0)for(var M=B.split(".#")[0],H=0;H<r.datetimeAccessFormPaths.length;H++){var z=r.datetimeAccessFormPaths[H];if(typeof z=="string"){if(z===M)return A(g)}else if(z instanceof RegExp){if(z.test(M))return A(g)}else if(typeof z=="function"&&z(M))return A(g)}return g}function C(g){for(var w={},B=g.childNodes,M=0;M<B.length;M++){var H=B.item(M);if(H.nodeType===u.ELEMENT_NODE){var z=l(H);r.ignoreRoot?w=E(H,z):w[z]=E(H,z)}}return w}function v(g,w){var B={};B.__cnt=0;for(var M=g.childNodes,H=0;H<M.length;H++){var z=M.item(H),k=l(z);z.nodeType!==u.COMMENT_NODE&&(B.__cnt++,B[k]==null?(B[k]=E(z,w+"."+k),D(B,k,w+"."+k)):(B[k]instanceof Array||(B[k]=[B[k]],D(B,k,w+"."+k)),B[k][B[k].length]=E(z,w+"."+k)))}for(var Q=0;Q<g.attributes.length;Q++){var Z=g.attributes.item(Q);B.__cnt++;for(var J=Z.value,U=0;U<r.attributeConverters.length;U++){var W=r.attributeConverters[U];W.test.call(null,Z.name,Z.value)&&(J=W.convert.call(null,Z.name,Z.value))}B[r.attributePrefix+Z.name]=J}var _=d(g);return _&&(B.__cnt++,B.__prefix=_),B["#text"]&&(B.__text=B["#text"],B.__text instanceof Array&&(B.__text=B.__text.join(`
|
|
6
|
+
`)),r.escapeMode&&(B.__text=a(B.__text)),r.stripWhitespaces&&(B.__text=B.__text.trim()),delete B["#text"],r.arrayAccessForm==="property"&&delete B["#text_asArray"],B.__text=m(B.__text,"#text",w+".#text")),B.hasOwnProperty("#cdata-section")&&(B.__cdata=B["#cdata-section"],delete B["#cdata-section"],r.arrayAccessForm==="property"&&delete B["#cdata-section_asArray"]),B.__cnt===1&&B.__text&&!r.keepText?B=B.__text:B.__cnt===0&&r.emptyNodeForm==="text"?B="":B.__cnt>1&&B.__text!==void 0&&r.skipEmptyTextNodesForObj&&(r.stripWhitespaces&&B.__text===""||B.__text.trim()==="")&&delete B.__text,delete B.__cnt,!r.keepCData&&!B.hasOwnProperty("__text")&&B.hasOwnProperty("__cdata")&&Object.keys(B).length===1?B.__cdata?B.__cdata:"":(r.enableToStringFunc&&(B.__text||B.__cdata)&&(B.toString=function(){return(this.__text?this.__text:"")+(this.__cdata?this.__cdata:"")}),B)}function E(g,w){return g.nodeType===u.DOCUMENT_NODE?C(g):g.nodeType===u.ELEMENT_NODE?v(g,w):g.nodeType===u.TEXT_NODE||g.nodeType===u.CDATA_SECTION_NODE?g.nodeValue:null}function N(g,w,B,M){var H="<"+(g&&g.__prefix?g.__prefix+":":"")+w;if(B)for(var z=0;z<B.length;z++){var k=B[z],Q=g[k];r.escapeMode&&(Q=f(Q)),H+=" "+k.substr(r.attributePrefix.length)+"=",r.useDoubleQuotes?H+='"'+Q+'"':H+="'"+Q+"'"}return M?H+=" />":H+=">",H}function T(g,w){return"</"+(g&&g.__prefix?g.__prefix+":":"")+w+">"}function O(g,w){return g.indexOf(w,g.length-w.length)!==-1}function I(g,w){return!!(r.arrayAccessForm==="property"&&O(w.toString(),"_asArray")||w.toString().indexOf(r.attributePrefix)===0||w.toString().indexOf("__")===0||g[w]instanceof Function)}function F(g){var w=0;if(g instanceof Object)for(var B in g)I(g,B)||w++;return w}function b(g){var w=[];if(g instanceof Object)for(var B in g)B.toString().indexOf("__")===-1&&B.toString().indexOf(r.attributePrefix)===0&&w.push(B);return w}function S(g){var w="";return g.__cdata&&(w+="<![CDATA["+g.__cdata+"]]>"),(g.__text||typeof g.__text=="number"||typeof g.__text=="boolean")&&(r.escapeMode?w+=f(g.__text):w+=g.__text),w}function y(g){var w="";return g instanceof Object?w+=S(g):g!==null&&(r.escapeMode?w+=f(g):w+=g),w}function x(g,w,B){var M="";if(g.length===0)M+=N(g,w,B,!0);else for(var H=0;H<g.length;H++)M+=L(g[H],w,b(g[H]));return M}function L(g,w,B){var M="";if(r.jsAttributeFilter&&r.jsAttributeFilter.call(null,w,g))return M;if(r.jsAttributeConverter&&(g=r.jsAttributeConverter.call(null,w,g)),(g==null||g==="")&&r.selfClosingElements)M+=N(g,w,B,!0);else if(typeof g=="object")if(Object.prototype.toString.call(g)==="[object Array]")M+=x(g,w,B);else if(g instanceof Date)M+=N(g,w,B,!1),M+=r.jsDateUTC?g.toUTCString():g.toISOString(),M+=T(g,w);else{var H=F(g);H>0||typeof g.__text=="number"||typeof g.__text=="boolean"||g.__text||g.__cdata?(M+=N(g,w,B,!1),M+=X(g),M+=T(g,w)):r.selfClosingElements?M+=N(g,w,B,!0):(M+=N(g,w,B,!1),M+=T(g,w))}else M+=N(g,w,B,!1),M+=y(g),M+=T(g,w);return M}function X(g){var w="",B=F(g);if(B>0){for(var M in g)if(!I(g,M)){var H=g[M],z=b(H);w+=L(H,M,z)}}return w+=y(g),w}function R(g){if(g===void 0||typeof g!="string")return null;var w=null,B=null;if(e)w=new e(r.xmldomOptions),B=w.parseFromString(g,"text/xml");else if(window&&window.DOMParser){w=new window.DOMParser;var M=null,H=window.ActiveXObject||"ActiveXObject"in window;if(!H&&document.all&&!document.addEventListener)try{M=w.parseFromString("INVALID","text/xml").childNodes[0].namespaceURI}catch{M=null}try{B=w.parseFromString(g,"text/xml"),M!==null&&B.getElementsByTagNameNS(M,"parsererror").length>0&&(B=null)}catch{B=null}}else g.indexOf("<?")===0&&(g=g.substr(g.indexOf("?>")+2)),B=new ActiveXObject("Microsoft.XMLDOM"),B.async="false",B.loadXML(g);return B}this.asArray=function(w){return w==null?[]:w instanceof Array?w:[w]},this.toXmlDateTime=function(w){return w instanceof Date?w.toISOString():typeof w=="number"?new Date(w).toISOString():null},this.asDateTime=function(w){return typeof w=="string"?A(w):w},this.xml2dom=function(w){return R(w)},this.dom2js=function(w){return E(w,null)},this.js2dom=function(w){var B=this.js2xml(w);return R(B)},this.xml2js=function(w){var B=R(w);return B!=null?this.dom2js(B):null},this.js2xml=function(w){return X(w)},this.getVersion=function(){return i}}})})(Qt)),Qt.exports}var go=ho();const mo=so(go);Le.extend(Zr);const qr="#sym:";async function Ao(n,e,t){const r=await fetch(n,{credentials:"include",signal:t,headers:e?{Authorization:e}:void 0}),i=(r.headers.get("content-type")||"").toLowerCase();if(!r.ok){const s=await r.text();throw new Error(`Image request failed: ${r.status} ${r.statusText}; ${s.slice(0,240)}`)}if(!i.includes("image/")){const s=await r.text();throw new Error(`Image response has invalid content type: ${i}; ${s.slice(0,240)}`)}const o=await r.blob();return new Promise((s,u)=>{const l=new FileReader;l.onload=()=>typeof l.result=="string"?s(l.result):u(new Error("Failed to convert image to data URL")),l.onerror=()=>u(l.error??new Error("Failed to read image response")),l.readAsDataURL(o)})}function Dr(n){if(typeof n=="function")return n;if(typeof n!="string"||!n.startsWith(qr))return;const e=n.slice(qr.length).trim();if(!e)return;const r=globalThis.__layerSymbols?.[e];if(typeof r=="function")return r;console.warn(`[LayerSymbol] 未找到符号函数: ${n}`)}function dt(n){const e=G.bboxPolygon(n),t=G.toMercator(e),[[r,i],,[o,s]]=t.geometry.coordinates[0];return[r,i,o,s]}function Et(n,e,t){return n+(e-n)*t}function Kt(n,e,t,r=5,i=1.2){function o(f,a,D){return Math.exp(-(f*f+a*a)/(2*D*D))}const s=Math.floor(r/2);let u=[],l=0;for(let f=-s;f<=s;f++)for(let a=-s;a<=s;a++){const D=o(a,f,i);u.push(D),l+=D}u=u.map(f=>f/l);const d=Array.from({length:t},()=>Array(e).fill(void 0));for(let f=0;f<t;f++)for(let a=0;a<e;a++){if(n[f][a]===void 0){d[f][a]=void 0;continue}let D=0,A=0,m=0;for(let C=-s;C<=s;C++)for(let v=-s;v<=s;v++){const E=Math.min(e-1,Math.max(0,a+v)),N=Math.min(t-1,Math.max(0,f+C)),T=n[N][E];T!==void 0&&(D+=T*u[m],A+=u[m]),m++}d[f][a]=A>0?D/A:void 0}return d}function _e(n,e=1,t=3){const r=Number(n);return Number.isFinite(r)?Math.max(0,Math.min(t,r)):e}function yr(n,e,t,r){const i=_e(r);if(i===0)return n;const o=Math.max(1,Math.ceil(i*2));return Kt(n,e,t,o*2+1,i*1.2)}function un(n,e,t,r,i){const[o,s,u,l]=i,d=o+(u-o)*(n/(t-1)),f=l-(l-s)*(e/(r-1));return[d,f]}function an(n,e,t,r,i){const[o,s,u,l]=i,d=o+(u-o)*(n/(t-1)),f=l-(l-s)*(e/(r-1));return[d,f]}function po(n,e,t,r){return n.map(i=>{const o=i.coordinates.map(s=>s.map(u=>u.map(([l,d])=>an(l,d,e,t,r))));return{...i,coordinates:o,properties:i.properties}})}function vo(n,e,t,r){return n.map(i=>{const o=i.coordinates.map(s=>s.map(u=>u.map(([l,d])=>un(l,d,e,t,r))));return{...i,coordinates:o}})}function Vt(n,e,t,r,i){const o=Math.floor(e),s=Math.min(o+1,r-1),u=Math.floor(t),l=Math.min(u+1,i-1),d=n[u*r+o],f=n[u*r+s],a=n[l*r+o],D=n[l*r+s],A=e-o,m=t-u;return d*(1-A)*(1-m)+f*A*(1-m)+a*(1-A)*m+D*A*m}async function rt(n,e,t,r,i){let o=0,s=0;const u=document.createElement("canvas"),l=u.getContext("2d"),d=new Image,f=await Ao(n,r,i?.signal);return d.src=f,new Promise((a,D)=>{d.onload=()=>{o=d.width,s=d.height,u.width=o,u.height=s,l.clearRect(0,0,o,s),l.drawImage(d,0,0);const m=l.getImageData(0,0,o,s).data,[C,v]=e,E=(L,X)=>{const R=(X*o+L)*4;return[m[R]??0,m[R+1]??0,m[R+2]??0,m[R+3]??0]},N=(L,X,R,g,w=4)=>Math.abs(L-g[0])<=w&&Math.abs(X-g[1])<=w&&Math.abs(R-g[2])<=w,T=i?.detectNoDataByBorderColor!==!1;let O=[];const I=(L,X,R)=>O.some(g=>N(L,X,R,g,6));if(T){const L=E(0,0),X=E(Math.max(0,o-1),0),R=E(0,Math.max(0,s-1)),g=E(Math.max(0,o-1),Math.max(0,s-1)),w=[L,X,R,g].filter(H=>H[3]>0).map(H=>[H[0],H[1],H[2]]),B=[];for(const H of w){const z=B.find(k=>N(H[0],H[1],H[2],k.rgb,6));z?z.count+=1:B.push({rgb:H,count:1})}B.sort((H,z)=>z.count-H.count);const M=B[0];O=M&&M.count>=3?[M.rgb]:[]}const F=o*s,b=new Uint8Array(F),S=[],y=L=>{if(L<0||L>=F||b[L])return;const X=L*4,R=m[X]??0,g=m[X+1]??0,w=m[X+2]??0;(m[X+3]??0)>0&&O.length>0&&I(R,g,w)&&(b[L]=1,S.push(L))};for(let L=0;L<o;L++)y(L),y((s-1)*o+L);for(let L=0;L<s;L++)y(L*o),y(L*o+(o-1));for(let L=0;L<S.length;L++){const X=S[L],R=X%o,g=Math.floor(X/o);R>0&&y(X-1),R<o-1&&y(X+1),g>0&&y(X-o),g<s-1&&y(X+o)}const x=[];for(let L=0;L<s;L++)for(let X=0;X<o;X++){const R=(L*o+X)*4,g=L*o+X,w=m[R]??0,B=m[R+1]??0,M=m[R+2]??0;if((m[R+3]??0)===0||b[g]===1){x.push(void 0);continue}const z=.299*w+.587*B+.114*M,k=C+z/255*(v-C);k<C?t?.[0]?x.push(void 0):x.push(C):k>v?t?.[1]?x.push(void 0):x.push(v):x.push(k)}a({grayArr:x,width:o,height:s})},d.onerror=()=>D(new Error(`Failed to decode image response: ${n}`))})}function Je(n){return n=n.trim(),n.endsWith("%")?parseFloat(n)/100*255:parseFloat(n)}function ar(n){return n=n.trim(),n.endsWith("%")?parseFloat(n)/100:parseFloat(n)}function Ze(n){return isFinite(n)?Math.max(0,Math.min(255,Math.round(n))):0}function xt(n){if(!n)return[0,0,0,0];n=n.trim();const e=n.match(/rgba?\(\s*([0-9.+%]+)[,\s]+([0-9.+%]+)[,\s]+([0-9.+%]+)(?:[,\s]+([0-9.+%]+))?\s*\)/i);if(e){const t=Je(e[1]),r=Je(e[2]),i=Je(e[3]),o=e[4]?ar(e[4]):1;return[Ze(t),Ze(r),Ze(i),Math.round(o*255)]}if(n[0]==="#"){let t=n.slice(1);if(t.length===3&&(t=t.split("").map(r=>r+r).join("")),t.length===6){const r=parseInt(t.slice(0,2),16),i=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16);return[r,i,o,255]}}try{const t=document.createElement("canvas").getContext("2d");t.fillStyle=n;const r=t.fillStyle;if(r&&r!==""){const i=r.match(/rgba?\(([^)]+)\)/);if(i){const o=i[1].split(",").map(f=>f.trim()),s=Je(o[0]),u=Je(o[1]),l=Je(o[2]),d=o[3]?ar(o[3]):1;return[Ze(s),Ze(u),Ze(l),Math.round(d*255)]}}}catch{}return[0,0,0,0]}function br(n,e){if(!Array.isArray(n)||n.length===0)return[];if(!e||e.length!==2)return n;const t=Number(e[0]),r=Number(e[1]);if(!isFinite(t)||!isFinite(r))return n;const i=n.length,o=Math.max(0,Math.min(i,Math.floor(Math.min(t,r)))),s=Math.max(0,Math.min(i,Math.ceil(Math.max(t,r))));return n.slice(o,s)}function ht(n,e){const t=br(n,e);if(!t.length)return;const r=t.find(u=>u?.scope?.length),i=[...t].reverse().find(u=>u?.scope?.length),o=r?.scope?.length?Number(r.scope[0]):void 0,s=i?.scope?.length?Number(i.scope[i.scope.length-1]):void 0;if(!(typeof o>"u"||isNaN(o)))return typeof s>"u"||isNaN(s)?[o,o]:[o,s]}function Ce(n,e){const t=[],r={},i=br(n,e);for(const s of i){const u=s?.scope?.length?Number(s.scope[0]):NaN;isNaN(u)||(t.push(u),r[u]=s.color)}return{uniqueThresholds:Array.from(new Set(t)).sort((s,u)=>s-u),colorMap:r}}const or=new globalThis.Map;function Do(n){const e=n?.config,t=(e?.legend??[]).map(r=>({name:r?.name,scope:r?.scope??[],color:r?.color}));return JSON.stringify({url:n?.url,authorization:n?.authorization??"",extent:e?.extent??[],scope:e?.scope??[],legendScope:e?.legendScope??[],legend:t})}async function Pt(n){const e=Do(n),t=or.get(e);if(t)return t;const r=(async()=>{const{config:i,url:o,authorization:s}=n;if(!i)return;const{extent:u,scope:l,legend:d,legendScope:f}=i;if(!u)return;const a=dt(u),D=[-99999,99999];tt.isNumber(l?.[0])&&(D[0]=l[0]),tt.isNumber(l?.[1])&&(D[1]=l[1]);const{grayArr:A,width:m,height:C}=await rt(o,D,void 0,s,{signal:n.signal}),{uniqueThresholds:v,colorMap:E}=Ce(d,f),N=[];for(let F=0;F<C;F++){N[F]=[];for(let b=0;b<m;b++)N[F][b]=A[F*m+b]}const T=Kt(N,m,C),O=[],I=[];for(let F=0;F<C;F++){O[F]=[],I[F]=[];for(let b=0;b<m;b++){const S=N[F]&&typeof N[F][b]<"u"?N[F][b]:void 0;O[F][b]=S==null||isNaN(Number(S))?NaN:Number(S);const y=T[F]&&typeof T[F][b]<"u"?T[F][b]:void 0;I[F][b]=y==null||isNaN(Number(y))?NaN:Number(y)}}return{width:m,height:C,extent:a,rawArr2D:O,smoothArr2D:I,uniqueThresholds:v,colorMap:E}})();or.set(e,r);try{return await r}finally{or.delete(e)}}function cn(n,e,t){const r=n[2]-n[0],i=n[3]-n[1],o=r/i;let s=e,u=Math.round(s/o);return u>t&&(u=t,s=Math.round(u*o)),{width:s,height:u}}function wr(n,e){const t=dt(n),{width:r,height:i}=cn(t,e,e);return{bbox:t,width:r,height:i}}function cr(n,e,t){const r=I=>{if(Array.isArray(I)&&I.length>=2){const F=Number(I[0]),b=Number(I[1]);if(Number.isFinite(F)&&Number.isFinite(b))return[F,b]}if(typeof I=="string"){const F=I.split(",").map(b=>Number(b.trim())).filter(b=>Number.isFinite(b));if(F.length>=2)return[F[0],F[1]]}},i=ve(),o=Number(t?.imageSize??i.imageSize),s=Number.isFinite(o)&&o>0?Math.round(o):i.imageSize,{bbox:u,width:l,height:d}=wr(n.config.extent,s),f=n?.config?.layerConfig??{},a=f.LAYERS,D=String(f.VERSION??"1.1.1"),A=D.startsWith("1.3")?{CRS:"EPSG:3857"}:{SRS:"EPSG:3857"},m=r(n?.config?.scope)??[0,0],C=r(n?.config?.componentScope)??r(n?.config?.uvScope)??r(f.COMPONENT_SCALE_RANGE)??r(f.COMPONENT_SCOPE)??r(f.UV_SCOPE);let v=m;if(tt.isArray(a)&&a.length>1)if(C){const I=Math.max(Math.abs(C[0]),Math.abs(C[1]));v=[-I,I]}else{const I=Number(m[0]),F=Number(m[1]);if(Number.isFinite(I)&&Number.isFinite(F)){const b=Math.max(Math.abs(I),Math.abs(F));v=[-b,b]}}const E=v.toString(),N=String(t?.serviceBaseUrl??n?.serviceBaseUrl??n?.config?.serviceBaseUrl??i.serviceBaseUrl).replace(/\/$/,""),T=String(n.url||"").replace(/^\/+/,""),O=`${N}/wms/${T}`;if(tt.isArray(a)){const I=[];return a.forEach(F=>{const b={SERVICE:"WMS",VERSION:D,REQUEST:"GetMap",FORMAT:"image/png",...f,...A,TIME:Le(e).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:E,BBOX:u.join(","),WIDTH:""+l,HEIGHT:""+d};b.LAYERS=F,I.push(`${O}?${new URLSearchParams(b).toString()}`)}),I}else{const I={SERVICE:"WMS",VERSION:D,REQUEST:"GetMap",FORMAT:"image/png",...f,...A,TIME:Le(e).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),COLORSCALERANGE:E,BBOX:u.join(","),WIDTH:""+l,HEIGHT:""+d};return`${O}?${new URLSearchParams(I).toString()}`}}function yo(n,e,t,r){if(!e||e.length===0)return[0,0,0,0];if(r==="discrete"||r==="grid"){let i=e[0];for(let s=0;s<e.length&&n>=e[s];s++)i=e[s];const o=t[e.indexOf(i)];return[o[0],o[1],o[2],o[3]??255]}else{if(n<=e[0]){const m=t[0];return[m[0],m[1],m[2],m[3]??255]}if(n>=e[e.length-1]){const m=t[t.length-1];return[m[0],m[1],m[2],m[3]??255]}let i=0;for(let m=0;m<e.length-1;m++)if(n>=e[m]&&n<=e[m+1]){i=m;break}const o=e[i],s=e[i+1],u=(n-o)/(s-o),l=t[i],d=t[i+1],f=Math.round(Et(l[0],d[0],u)),a=Math.round(Et(l[1],d[1],u)),D=Math.round(Et(l[2],d[2],u)),A=Math.round(Et(l[3]??255,d[3]??255,u));return[f,a,D,A]}}const bo=new mo({attributePrefix:""});function jt(n,e){const t=bo.xml2js(n);if(!e)return t;const r=t?.catalog?.dataset?.[e];return r===void 0||Array.isArray(r)?r:[r]}function ln(n){const e=jt(n),t=e?.gridDataset;if(!t){const s=Object.keys(e||{}).join(", ")||"none";throw new Error("Invalid NCSS dataset XML: expected gridDataset root, received: "+s)}const r=t.gridSet?.grid;if(!r)throw new Error("Invalid NCSS dataset XML: gridDataset.gridSet.grid is missing");let i=r;tt.isObject(i)&&(i=[i]);const o=Array.isArray(t.axis)?t.axis:[t.axis].filter(Boolean);return{latLonBox:t.LatLonBox,timeSpan:t.TimeSpan,axis:o,grid:i}}function wo(n){const e=String(n||"").split("."),t=e[e.length-1]?.toLowerCase()||"other";return["png","jpg","jpeg","xlsx","xls","csv","txt","json","geojson","grb","grib1","grib2","grb2","gr2","nc"].includes(t)?t:"other"}function lr(n){const{xmlJson:e,type:t}=n;return e.map(r=>t==="menu"?{label:r["xlink:title"],key:r.ID,url:r.ID,type:t,isLeaf:!1}:{label:r.name,key:r.ID,url:r.urlPath,type:t,isLeaf:!0,fileType:wo(r.name)})}async function Cr(n,e,t,r,i,o,s){const u=ve(),l=[t.west,t.south,t.east,t.north],{bbox:d,width:f,height:a}=wr(l,u.imageSize),D=new URLSearchParams({service:"WMS",version:"1.3.0",request:"GetMetadata",item:"minmax",layers:e,styles:"",CRS:"EPSG:3857",BBOX:d.join(","),time:r||"",width:String(f),height:String(a)}),A=o??u.serviceBaseUrl,m=String(n).replace(/^\/+/,""),C=await Yt("wms/"+m+"?"+D.toString(),{baseUrl:A,authorization:i,signal:s}),v=(C.headers.get("content-type")||"").toLowerCase();if(!v.includes("json")){const E=await C.text();throw new Error("WMS min/max response has invalid content type: "+(v||"unknown")+"; "+E.slice(0,240))}return await C.json()}async function fn(n,e,t={}){try{const r=String(n).replace(/^\/+|\/+$/g,""),i=await vr("catalog/"+r+"/catalog.xml",e,{baseUrl:t.serviceBaseUrl,signal:t.signal}),o=jt(i,"catalogRef"),s=jt(i,"dataset"),u=[];let l="";return o?.length&&(u.push(...lr({xmlJson:o,type:"menu"})),l="menu"),s?.length&&(u.push(...lr({xmlJson:s,type:"file"})),l="file"),{type:l,data:u}}catch{return}}async function kt(n){const e=ve(),t=n.authorization??e.serviceAuthorization,r=n.serviceBaseUrl??e.serviceBaseUrl;let i=n.filePath,o;for(let N=0;N<6;N++){if(o=await fn(i,t,{serviceBaseUrl:r,signal:n.signal}),!o?.data.length)return;if(o.data.reverse(),o.type==="file")break;if(o.type!=="menu"||!o.data[0]?.url)return;i=o.data[0].url}if(!o?.data.length||o.type!=="file")return;const s=n.fileNamePattern?new RegExp(n.fileNamePattern):void 0,u=s?o.data.filter(N=>s.test(N.label)):o.data,l=u[0];if(!l)return;const d=n.url||l.url||i+"/"+l.label,f="/"+String(d).replace(/^\/+/,""),a=n.ncssBaseUrl??e.ncssBaseUrl,D=await nn(a.replace(/\/$/,"")+f+"/dataset.xml",t,{baseUrl:r,signal:n.signal}),{latLonBox:A,timeSpan:m,axis:C}=ln(D),v=C.find(N=>N.name==="time"),E=[];if(v&&m?.begin){const N=Number(v.values?.npts),T=String(v.attribute?.find(F=>F.name==="units")?.value||"").toLowerCase(),O=T.includes("hour")?"hour":T.includes("minute")?"minute":"second",I=Number(v.values?.resolution);if(N>1&&Number.isFinite(I)&&I!==0)for(let F=0;F<N;F++)E.push(Le(m.begin).add(F*I,O).format("YYYYMMDDHHmmss"));else E.push(Le(m.begin).format("YYYYMMDDHHmmss"))}return{type:"file",latLonBox:A,timeList:E,fileList:u,url:f,authorization:t}}Le.extend(Zr);function fr(n,e){if(n&&typeof n=="object"){const t=n,r={north:Number(t.north),south:Number(t.south),east:Number(t.east),west:Number(t.west)};if(Object.values(r).every(Number.isFinite))return r}if(Array.isArray(e)&&e.length>=4){const[t,r,i,o]=e.map(Number);if([o,r,i,t].every(Number.isFinite))return{north:o,south:r,east:i,west:t}}}function Co(n){return(Array.isArray(n)?n:[n]).map(e=>String(e??"").trim()).filter(Boolean)}async function Bo(n,e,t,r,i,o){const s=n.config?.scope,u=Number(s?.[0]),l=Number(s?.[1]),d=Number.isFinite(u),f=Number.isFinite(l);if(d&&f)return[u,l];const a=Co(n.config?.layerConfig?.LAYERS),D=fr(void 0,n.config?.extent)??fr(i);if(!a.length)throw new Error('Layer "'+n.id+'" has no WMS LAYERS setting');if(!D)throw new Error('Layer "'+n.id+'" has no valid extent');const A=ve(),m=n.serviceBaseUrl??o.serviceBaseUrl??A.serviceBaseUrl,C=t?Le(t).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"):void 0,v=await Promise.all(a.map(I=>Cr(e,I,D,C,r,m,o.signal))),E=Math.min(...v.map(I=>Number(I.min))),N=Math.max(...v.map(I=>Number(I.max))),T=d?u:E,O=f?l:N;if(!Number.isFinite(T)||!Number.isFinite(O))throw new Error('Invalid WMS min/max response for layer "'+n.id+'"');return[T,O]}async function Eo(n,e={}){const t=Array.isArray(n.type)?n.type:[n.type];if(t.includes("typhoon"))return{...n,show:!0};const r=ve();let i=n.url,o=n.time,s=[],u=n.authorization??e.authorization??r.serviceAuthorization,l;if(!i){let m=await kt({filePath:n.filePath,fileNamePattern:n.fileNamePattern,authorization:u,serviceBaseUrl:n.serviceBaseUrl??e.serviceBaseUrl,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal});if(!m?.fileList?.length&&n.fallbackFilePath&&(m=await kt({filePath:n.fallbackFilePath,fileNamePattern:n.fileNamePattern,authorization:n.fallbackAuthorization??u,serviceBaseUrl:n.serviceBaseUrl??e.serviceBaseUrl,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal})),!m?.fileList?.length||!m.timeList?.length&&!o)return null;i=m.url??m.fileList[0]?.url,s=m.timeList,o=o??m.timeList[0],u=m.authorization??u,l=m.latLonBox}if(!i)return null;if(t.includes("micaps"))return{...n,show:!0,time:o,authorization:u,url:i};const d=await Bo(n,i,o,u,l,e),f=d?{...n,config:{...n.config,scope:d}}:n,a=n.serviceBaseUrl??e.serviceBaseUrl??r.serviceBaseUrl;let D=f.config;const A=n.config.fusionConfig;if(A)try{const m=String(i).match(/G005_(\d{10})\d{7}\.GRB2$/)?.[1];if(A.fileNamePattern?.includes("{cycle}")&&!m)throw new Error("Unable to find the PPH/R01 forecast cycle");const C=A.fileNamePattern?.replace("{cycle}",m??""),v=await kt({filePath:A.filePath,fileNamePattern:C,authorization:A.authorization??u,serviceBaseUrl:A.serviceBaseUrl??a,ncssBaseUrl:e.ncssBaseUrl,signal:e.signal}),E=o?Le(o).format("YYYYMMDDHHmmss"):void 0,N=E&&v?.timeList.includes(E)?E:s.find(O=>v?.timeList.includes(O)),T=v?.url??v?.fileList[0]?.url;if(N&&T){const O=fr(l,n.config.extent);let I=A.scope;if(O)try{const y=Le(N).utc().format("YYYY-MM-DDTHH:mm:ss.000[Z]"),x=await Cr(T,A.layerName,O,y,A.authorization??u,A.serviceBaseUrl??a,e.signal);Number.isFinite(x.min)&&Number.isFinite(x.max)&&(I=[Math.min(0,x.min),Math.max(x.max,1)])}catch{}const F=A.serviceBaseUrl??a,b=cr({...n,url:T,config:{...n.config,scope:I,layerConfig:{...n.config.layerConfig??{},LAYERS:A.layerName}}},N,{serviceBaseUrl:F}),S=Array.isArray(b)?b[0]:b;if(!S)throw new Error("Unable to build the R01 WMS URL");D={...f.config,fusionConfig:{...A,scope:I,url:S}},o=N}else D={...f.config,fusionConfig:{...A,url:void 0}}}catch(m){console.warn('[LayerRequest] fusion data unavailable for "'+n.id+'"',m),D={...f.config,fusionConfig:{...A,url:void 0}}}return{...f,config:D,show:!0,time:o,authorization:u,url:cr({...f,url:i},o??"",{serviceBaseUrl:a})}}let Ft=null;const Ye=64,et=-1e30;function Ut(n,e,t){const r=n*e,i=new Float32Array(r);for(let o=0;o<e;o++)for(let s=0;s<n;s++){const u=o*n+s,l=t?.[o]?.[s];i[u]=l==null||isNaN(Number(l))?et:Number(l)}return i}function xo(n,e,t){const r=n*e,i=new Uint8Array(r);for(let o=0;o<e;o++)for(let s=0;s<n;s++){const u=o*n+s,l=t?.[o]?.[s];i[u]=l==null||isNaN(Number(l))?0:255}return i}async function No(){return Ft||(Ft=(async()=>{const n=navigator?.gpu;if(!n)return null;const e=await n.requestAdapter();return e?await e.requestDevice():null})(),Ft)}function Po(){return`
|
|
7
7
|
struct Params {
|
|
8
8
|
width: u32,
|
|
9
9
|
height: u32,
|
|
@@ -83,7 +83,7 @@ fn colorGradient(v: f32) -> vec4<f32> {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
fn isMaskVisible(v: f32) -> bool {
|
|
86
|
-
if (v <= ${
|
|
86
|
+
if (v <= ${et/10}) {
|
|
87
87
|
return false;
|
|
88
88
|
}
|
|
89
89
|
if (params.hasMin == 1u && v < params.minScope) {
|
|
@@ -135,7 +135,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
let v = values[idx];
|
|
138
|
-
if (v <= ${
|
|
138
|
+
if (v <= ${et/10}) {
|
|
139
139
|
outPixels[idx] = 0u;
|
|
140
140
|
return;
|
|
141
141
|
}
|
|
@@ -155,7 +155,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
155
155
|
|
|
156
156
|
outPixels[idx] = packRGBA(color);
|
|
157
157
|
}
|
|
158
|
-
`}function Bt(n,e,t){const r=n.createBuffer({size:e.byteLength,usage:t,mappedAtCreation:!0});return new Uint8Array(r.getMappedRange()).set(new Uint8Array(e)),r.unmap(),r}function
|
|
158
|
+
`}function Bt(n,e,t){const r=n.createBuffer({size:e.byteLength,usage:t,mappedAtCreation:!0});return new Uint8Array(r.getMappedRange()).set(new Uint8Array(e)),r.unmap(),r}function hn(n){return typeof n<"u"&&n!==null&&Number.isFinite(Number(n))}function Qr(n,e){if(!hn(n))return!1;const t=Number(n);if(t<=et/10)return!1;const r=e&&typeof e[0]<"u",i=e&&typeof e[1]<"u";return!(r&&t<Number(e[0])||i&&t>Number(e[1]))}function To(n,e,t){const r=Math.max(0,Math.min(1,(t-n)/(e-n)));return r*r*(3-2*r)}function Lo(n,e,t,r){if(!e.length||!t.length)return[0,0,0,0];const i=Math.min(e.length,t.length)-1;if(i<0)return[0,0,0,0];if(r!=="gradient"||i===0){let u=0;for(let l=0;l<=i;l++){const d=e[l]??Number.NEGATIVE_INFINITY;if(n>=d)u=l;else break}return t[u]??[0,0,0,0]}const o=e[0]??0,s=e[i]??o;if(n<=o)return t[0]??[0,0,0,0];if(n>=s)return t[i]??[0,0,0,0];for(let u=0;u<i;u++){const l=e[u]??0,d=e[u+1]??l;if(n<l||n>d)continue;const f=t[u]??[0,0,0,0],a=t[u+1]??f,D=Math.max(d-l,1e-6),A=Math.max(0,Math.min(1,(n-l)/D));return[f[0]+(a[0]-f[0])*A,f[1]+(a[1]-f[1])*A,f[2]+(a[2]-f[2])*A,f[3]+(a[3]-f[3])*A]}return t[i]??[0,0,0,0]}function Fo(n){const{width:e,height:t,rawArr2D:r,smoothArr2D:i,thresholds:o,colorsRGBA:s,colorMode:u="discrete",scope:l,softenMaskEdge:d=!0}=n;if(!e||!t||!o.length||!s.length)return null;const f=document.createElement("canvas");f.width=e,f.height=t;const a=f.getContext("2d");if(!a)return null;const D=a.createImageData(e,t),A=D.data;for(let m=0;m<t;m++)for(let C=0;C<e;C++){const E=(m*e+C)*4,N=r?.[m]?.[C];if(!Qr(N,l)){A[E]=0,A[E+1]=0,A[E+2]=0,A[E+3]=0;continue}const T=i?.[m]?.[C];if(!hn(T)){A[E]=0,A[E+1]=0,A[E+2]=0,A[E+3]=0;continue}const O=Lo(Number(T),o,s,u);let I=0,F=0;for(let L=m-1;L<=m+1;L++)for(let X=C-1;X<=C+1;X++)L<0||X<0||L>=t||X>=e||(F+=1,Qr(r?.[L]?.[X],l)&&(I+=1));const b=F?I/F:0,S=d?To(.58,.9,b):1,y=O[3]??255,x=Math.max(0,Math.min(255,Math.round(y*S)));A[E]=Math.max(0,Math.min(255,Math.round(O[0]??0))),A[E+1]=Math.max(0,Math.min(255,Math.round(O[1]??0))),A[E+2]=Math.max(0,Math.min(255,Math.round(O[2]??0))),A[E+3]=x}return a.putImageData(D,0,0),f}function kr(n,e,t){const r=n.createShader(e);if(!r)return null;if(n.shaderSource(r,t),n.compileShader(r),!n.getShaderParameter(r,n.COMPILE_STATUS)){const i=n.getShaderInfoLog(r)??"";throw n.deleteShader(r),new Error(i||"WebGL shader compile failed")}return r}function So(n,e,t){const r=kr(n,n.VERTEX_SHADER,e),i=kr(n,n.FRAGMENT_SHADER,t);if(!r||!i)throw new Error("WebGL shader creation failed");const o=n.createProgram();if(!o)throw n.deleteShader(r),n.deleteShader(i),new Error("WebGL program creation failed");if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),n.deleteShader(r),n.deleteShader(i),!n.getProgramParameter(o,n.LINK_STATUS)){const s=n.getProgramInfoLog(o)??"";throw n.deleteProgram(o),new Error(s||"WebGL program link failed")}return o}function Mo(n){const{width:e,height:t,rawArr2D:r,smoothArr2D:i,thresholds:o,colorsRGBA:s,colorMode:u="discrete",scope:l,softenMaskEdge:d=!0}=n;if(!e||!t||!o.length||!s.length)return null;const f=document.createElement("canvas");f.width=e,f.height=t;const a=f.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!0});if(!a)return null;const D=`#version 300 es
|
|
159
159
|
in vec2 a_position;
|
|
160
160
|
out vec2 v_uv;
|
|
161
161
|
void main() {
|
|
@@ -182,7 +182,7 @@ uniform int u_softenMaskEdge;
|
|
|
182
182
|
uniform sampler2D u_validMask;
|
|
183
183
|
|
|
184
184
|
bool isMaskVisible(float maskV) {
|
|
185
|
-
if (maskV <= ${
|
|
185
|
+
if (maskV <= ${et/10}) return false;
|
|
186
186
|
if (u_hasMin == 1 && maskV < u_minScope) return false;
|
|
187
187
|
if (u_hasMax == 1 && maskV > u_maxScope) return false;
|
|
188
188
|
return true;
|
|
@@ -214,7 +214,7 @@ float sampleValueGradient(vec2 uv) {
|
|
|
214
214
|
float v10 = texture(u_values, uv10).r;
|
|
215
215
|
float v01 = texture(u_values, uv01).r;
|
|
216
216
|
float v11 = texture(u_values, uv11).r;
|
|
217
|
-
float invalid = ${
|
|
217
|
+
float invalid = ${et/10};
|
|
218
218
|
|
|
219
219
|
if (v00 <= invalid || v10 <= invalid || v01 <= invalid || v11 <= invalid) {
|
|
220
220
|
return sampleValueAt(uv);
|
|
@@ -269,7 +269,7 @@ void main() {
|
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
float v = (u_colorMode == 1) ? sampleValueGradient(v_uv) : sampleValueAt(v_uv);
|
|
272
|
-
if (v <= ${
|
|
272
|
+
if (v <= ${et/10}) {
|
|
273
273
|
outColor = vec4(0.0);
|
|
274
274
|
return;
|
|
275
275
|
}
|
|
@@ -277,4 +277,4 @@ void main() {
|
|
|
277
277
|
vec4 c = (u_colorMode == 1) ? colorGradient(v) : colorDiscrete(v);
|
|
278
278
|
float edgeAlpha = (u_softenMaskEdge == 1) ? edgeAAAlpha(v_uv) : 1.0;
|
|
279
279
|
outColor = vec4(c.rgb / 255.0, (c.a / 255.0) * edgeAlpha);
|
|
280
|
-
}`;try{const m=Fo(a,D,A);a.useProgram(m);const C=new Float32Array([-1,-1,1,-1,-1,1,1,1]),v=a.createBuffer();if(!v)return a.deleteProgram(m),null;a.bindBuffer(a.ARRAY_BUFFER,v),a.bufferData(a.ARRAY_BUFFER,C,a.STATIC_DRAW);const E=a.getAttribLocation(m,"a_position");if(E<0)return a.deleteBuffer(v),a.deleteProgram(m),null;a.enableVertexAttribArray(E),a.vertexAttribPointer(E,2,a.FLOAT,!1,0,0);const P=a.createTexture();if(!P)return a.deleteBuffer(v),a.deleteProgram(m),null;const x=a.createTexture();if(!x)return a.deleteTexture(P),a.deleteBuffer(v),a.deleteProgram(m),null;const M=a.createTexture();if(!M)return a.deleteTexture(x),a.deleteTexture(P),a.deleteBuffer(v),a.deleteProgram(m),null;const F=Ut(e,t,i),S=Ut(e,t,r),y=Eo(e,t,r);a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,P),a.pixelStorei(a.UNPACK_ALIGNMENT,1),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R32F,e,t,0,a.RED,a.FLOAT,F),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,x),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R32F,e,t,0,a.RED,a.FLOAT,S),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,M),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R8,e,t,0,a.RED,a.UNSIGNED_BYTE,y);const I=new Float32Array(Ye),b=new Float32Array(Ye*4),N=Math.min(o.length,Ye);for(let w=0;w<N;w++){I[w]=o[w]??0;const B=s[w]??[0,0,0,0],O=w*4;b[O]=B[0],b[O+1]=B[1],b[O+2]=B[2],b[O+3]=B[3]??255}const L=l&&typeof l[0]<"u"?Number(l[0]):0,X=l&&typeof l[1]<"u"?Number(l[1]):0,z=l&&typeof l[0]<"u"?1:0,g=l&&typeof l[1]<"u"?1:0;return a.uniform1i(a.getUniformLocation(m,"u_values"),0),a.uniform1i(a.getUniformLocation(m,"u_maskValues"),1),a.uniform1i(a.getUniformLocation(m,"u_validMask"),2),a.uniform1i(a.getUniformLocation(m,"u_thresholdCount"),N),a.uniform1i(a.getUniformLocation(m,"u_colorMode"),u==="gradient"?1:0),a.uniform1fv(a.getUniformLocation(m,"u_thresholds"),I),a.uniform4fv(a.getUniformLocation(m,"u_colors"),b),a.uniform1f(a.getUniformLocation(m,"u_minScope"),L),a.uniform1f(a.getUniformLocation(m,"u_maxScope"),X),a.uniform1i(a.getUniformLocation(m,"u_hasMin"),z),a.uniform1i(a.getUniformLocation(m,"u_hasMax"),g),a.uniform1i(a.getUniformLocation(m,"u_softenMaskEdge"),d?1:0),a.viewport(0,0,e,t),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.drawArrays(a.TRIANGLE_STRIP,0,4),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,null),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,null),a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,null),a.bindBuffer(a.ARRAY_BUFFER,null),a.deleteTexture(M),a.deleteTexture(P),a.deleteTexture(x),a.deleteBuffer(v),a.deleteProgram(m),f}catch(m){return console.warn("[FcstLayer] WebGL2 渲染失败",m),null}}async function Mo(n){const{width:e,height:t,rawArr2D:r,smoothArr2D:i,thresholds:o,colorsRGBA:s,colorMode:u="discrete",scope:l,softenMaskEdge:d=!0}=n;if(!e||!t||!o.length||!s.length)return null;try{const f=await xo();if(!f)return null;f.pushErrorScope("validation");const a=e*t,D=Ut(e,t,i),A=Ut(e,t,r),m=new Float32Array(o),C=new Float32Array(m.length*4);for(let _=0;_<m.length;_++){const K=s[_]??[0,0,0,0],Y=_*4;C[Y]=K[0],C[Y+1]=K[1],C[Y+2]=K[2],C[Y+3]=K[3]??255}const v=l&&typeof l[0]<"u"?Number(l[0]):0,E=l&&typeof l[1]<"u"?Number(l[1]):0,P=l&&typeof l[0]<"u"?1:0,x=l&&typeof l[1]<"u"?1:0,M=new ArrayBuffer(48),F=new DataView(M);F.setUint32(0,e,!0),F.setUint32(4,t,!0),F.setUint32(8,m.length,!0),F.setUint32(12,u==="gradient"?1:0,!0),F.setFloat32(16,v,!0),F.setFloat32(20,E,!0),F.setUint32(24,P,!0),F.setUint32(28,x,!0),F.setUint32(32,d?1:0,!0);const S=globalThis.GPUBufferUsage,y=globalThis.GPUMapMode,I=Bt(f,D.buffer,S.STORAGE|S.COPY_DST),b=Bt(f,A.buffer,S.STORAGE|S.COPY_DST),N=Bt(f,m.buffer,S.STORAGE|S.COPY_DST),L=Bt(f,C.buffer,S.STORAGE|S.COPY_DST),X=Bt(f,M,S.UNIFORM|S.COPY_DST),z=a*4,g=f.createBuffer({size:z,usage:S.STORAGE|S.COPY_SRC}),w=f.createBuffer({size:z,usage:S.COPY_DST|S.MAP_READ}),B=f.createShaderModule({code:No()}),O=f.createComputePipeline({layout:"auto",compute:{module:B,entryPoint:"main"}}),H=f.createBindGroup({layout:O.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:I}},{binding:1,resource:{buffer:b}},{binding:2,resource:{buffer:N}},{binding:3,resource:{buffer:L}},{binding:4,resource:{buffer:X}},{binding:5,resource:{buffer:g}}]}),R=f.createCommandEncoder(),G=R.beginComputePass();G.setPipeline(O),G.setBindGroup(0,H),G.dispatchWorkgroups(Math.ceil(a/64)),G.end(),R.copyBufferToBuffer(g,0,w,0,z),f.queue.submit([R.finish()]);const Q=await f.popErrorScope();if(Q)return I.destroy(),b.destroy(),N.destroy(),L.destroy(),X.destroy(),g.destroy(),w.destroy(),console.warn("[FcstLayer] WebGPU validation error",Q),null;await w.mapAsync(y.READ);const Z=w.getMappedRange(),J=new Uint8ClampedArray(Z.slice(0));w.unmap();const U=document.createElement("canvas");U.width=e,U.height=t;const W=U.getContext("2d");return W?(W.putImageData(new ImageData(J,e,t),0,0),I.destroy(),b.destroy(),N.destroy(),L.destroy(),X.destroy(),g.destroy(),w.destroy(),U):null}catch(f){return console.warn("[FcstLayer] WebGPU 渲染失败",f),null}}async function hn(n){const e=So(n);if(e)return e;const t=await Mo(n);if(t)return console.warn("[FcstLayer] 当前环境不支持 WebGL2,已自动使用 WebGPU"),t;const r=Lo(n);return r?(console.warn("[FcstLayer] GPU 渲染不可用,已自动回退到 Canvas2D CPU 渲染"),r):(console.warn("[FcstLayer] 渲染不可用:WebGL2/WebGPU/Canvas2D 都不可用"),null)}const St=5,Oo=12,Io=8;class Cr{map;options;contourCache;contourLoadingTasks;rasterRenderCache;rasterRenderLoadingTasks;layerData;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.contourCache=new Map,this.contourLoadingTasks=new globalThis.Map,this.rasterRenderCache=new globalThis.Map,this.rasterRenderLoadingTasks=new globalThis.Map,this.ready=this.add()}beginSourceRequest(){return this.abortController.abort(),this.abortController=new AbortController,++this.sourceRequestVersion}isCurrentRequest(e){return e===this.sourceRequestVersion&&!this.abortController.signal.aborted}getRequestOptions(){return{...this.options,config:{...this.options?.config??{}},signal:this.abortController.signal}}getContourCacheKey(e=this.options){const t=e?.config??{};return JSON.stringify({url:e?.url??"",authorization:e?.authorization??"",compareUrl:e?.compareUrl??"",zeroCompare:e?.zeroCompare===!0,fusionConfig:e?.config?.fusionConfig?{url:e.config.fusionConfig.url??"",serviceBaseUrl:e.config.fusionConfig.serviceBaseUrl??"",authorization:e.config.fusionConfig.authorization??"",layerName:e.config.fusionConfig.layerName,scope:e.config.fusionConfig.scope,precipitationThreshold:e.config.fusionConfig.precipitationThreshold??0}:void 0,extent:t.extent??[],scope:t.scope??[]})}setCachedContourData(e,t){for(this.contourCache.delete(e),this.contourCache.set(e,t);this.contourCache.size>Oo;){const r=this.contourCache.keys().next().value;if(r===void 0)break;this.contourCache.delete(r)}}getRasterRenderCacheKey(e,t){const r=e?.config??{},i=Object.keys(t).map(Number).filter(Number.isFinite).sort((o,s)=>o-s).map(o=>[o,t[o]]);return JSON.stringify({data:this.getContourCacheKey(e),mode:r.mode??"discrete",colors:i,valueTransform:typeof r.valueTransform=="function"?String(r.valueTransform):r.valueTransform??"",alignWithIsoline:r.alignWithIsoline===!0,isolineSmooth:r.isolineSmooth!==!1,isolineSmoothness:_e(r.isolineSmoothness)})}setCachedRasterRender(e,t){for(this.rasterRenderCache.delete(e),this.rasterRenderCache.set(e,t);this.rasterRenderCache.size>Io;){const r=this.rasterRenderCache.keys().next().value;if(r===void 0)break;this.rasterRenderCache.delete(r)}}async add(){const{id:e,config:t}=this.options,{zIndex:r=10,opacity:i=1}=t,o=de(this.map,e),s=o?.getZIndex()??r,u=this.beginSourceRequest(),l=this.getRequestOptions(),d=await this.getSourceFromCache(l);if(!this.isCurrentRequest(u))return;const f=d??await this.getSourceFromParams(l);if(!this.isCurrentRequest(u)||!f)return;const a=new Nt({className:e,source:f,zIndex:s,opacity:i,visible:o?.getVisible()??!0});return Fe(this.map,e),this.map.addLayer(a),a}async getSourceFromParams(e=this.options){const{config:t}=e,{mode:r,legend:i,legendScope:o}=t,s=await this.getOrLoadContourData(e);if(!s||e?.signal?.aborted)return;const{rawArr2D:u,smoothArr2D:l,extent:d,width:f,height:a}=s,D=this.getValueTransformFn(e),A=this.applyValueTransform2D(u,"raw",D),m=this.applyValueTransform2D(l,"smooth",D),{colorMap:C}=Ce(i),{colorMap:v}=Ce(i,o),E=ht(i,o)??t.scope;return await this.getFcstRasterSource({smoothArr2D:m,rawArr2D:A,extent:d,width:f,height:a,colorMap:C,selectedColorMap:v,colorMode:r,scope:E,rasterCacheKey:this.getRasterRenderCacheKey(e,C)},e)}async getOrLoadContourData(e=this.options){const t=this.getContourCacheKey(e),r=this.contourCache.get(t);if(r&&r.schemaVersion===St)return this.contourCache.delete(t),this.contourCache.set(t,r),r;const i=this.contourLoadingTasks.get(t);if(i)return i;const o=(async()=>{const s=e?.config?.fusionConfig;let u;if(s?.url)u=await this.fuseDataSources({url:e.url,authorization:e.authorization,serviceBaseUrl:e.serviceBaseUrl,config:{...e.config,fusionConfig:void 0}},{url:s.url,authorization:s.authorization??e.authorization,serviceBaseUrl:s.serviceBaseUrl??e.serviceBaseUrl,config:{...e.config,fusionConfig:void 0,scope:s.scope,layerConfig:{...e.config.layerConfig??{},LAYERS:s.layerName}}},(C,v)=>{const E=Math.round(C);return v>(s.precipitationThreshold??0)&&E>=1&&E<=4?E:void 0}),u&&(u={...u,smoothArr2D:u.rawArr2D.map(C=>C.slice())});else{if(s)return null;u=await Pt(e)}if(!u)return null;const{uniqueThresholds:l,rawArr2D:d,smoothArr2D:f,extent:a,width:D,height:A}=u,m={schemaVersion:St,uniqueThresholds:l,rawArr2D:d,smoothArr2D:f,extent:a,width:D,height:A};return this.setCachedContourData(t,m),m})();this.contourLoadingTasks.set(t,o);try{return await o}finally{this.contourLoadingTasks.get(t)===o&&this.contourLoadingTasks.delete(t)}}resolveFusionSource(e){const t=this.options,r=typeof e=="string"?{url:e}:e,i=r.url?.trim();if(!i)throw new TypeError("FcstLayer fusion source URL cannot be empty");const o=typeof e=="string"?this.abortController.signal:e.signal;return{...t,...r,url:i,signal:o??this.abortController.signal,config:{...t?.config??{},...typeof e=="string"?{}:e.config??{}}}}resolveFusionMethod(e){if(typeof e=="function")return e;switch(e){case"add":return(t,r)=>t+r;case"subtract":return(t,r)=>t-r;case"multiply":return(t,r)=>t*r;case"divide":return(t,r)=>r===0?void 0:t/r;case"average":return(t,r)=>(t+r)/2;case"min":return(t,r)=>Math.min(t,r);case"max":return(t,r)=>Math.max(t,r);default:throw new TypeError(`Unsupported FcstLayer fusion method: ${String(e)}`)}}assertFusionDataCompatible(e,t){if(e.width!==t.width||e.height!==t.height||e.width<=0||e.height<=0)throw new RangeError(`FcstLayer fusion requires matching grid sizes; received ${e.width}x${e.height} and ${t.width}x${t.height}`);if(!e.extent.every((o,s)=>{const u=t.extent[s];if(typeof u!="number"||!Number.isFinite(o)||!Number.isFinite(u))return!1;const l=Math.max(1,Math.abs(o),Math.abs(u))*1e-9;return Math.abs(o-u)<=l}))throw new RangeError(`FcstLayer fusion requires matching extents; received [${e.extent.join(", ")}] and [${t.extent.join(", ")}]`);const i=[["first raw",e.rawArr2D],["first smooth",e.smoothArr2D],["second raw",t.rawArr2D],["second smooth",t.smoothArr2D]];for(const[o,s]of i)if(s.length!==e.height||s.some(u=>!u||u.length!==e.width))throw new RangeError(`FcstLayer fusion received an invalid ${o} grid`)}fuseGrid(e,t,r,i,o,s){const u=Array.from({length:i},()=>Array(r).fill(NaN));for(let l=0;l<i;l++)for(let d=0;d<r;d++){const f=e[l]?.[d],a=t[l]?.[d];if(f==null||a==null)continue;const D=Number(f),A=Number(a);if(!Number.isFinite(D)||!Number.isFinite(A))continue;const m=s(D,A,{x:d,y:l,width:r,height:i,source:o});if(m==null)continue;const C=Number(m);u[l][d]=Number.isFinite(C)?C:NaN}return u}async fuseDataSources(e,t,r="average"){const i=this.resolveFusionMethod(r),o=this.resolveFusionSource(e),s=this.resolveFusionSource(t),[u,l]=await Promise.all([this.getOrLoadContourData(o),this.getOrLoadContourData(s)]);if(!u||!l||o.signal?.aborted||s.signal?.aborted)return null;this.assertFusionDataCompatible(u,l);const{width:d,height:f,extent:a,uniqueThresholds:D}=u;return{uniqueThresholds:D,rawArr2D:this.fuseGrid(u.rawArr2D,l.rawArr2D,d,f,"raw",i),smoothArr2D:this.fuseGrid(u.smoothArr2D,l.smoothArr2D,d,f,"smooth",i),extent:a,width:d,height:f}}async getValueByLonLat(e,t,r=!1){if(!Number.isFinite(e)||!Number.isFinite(t))return null;const i={...this.options,config:{...this.options?.config??{}}},o=await this.getOrLoadContourData(i);if(!o)return null;const{rawArr2D:s,smoothArr2D:u,extent:l,width:d,height:f}=o,a=r?u:s;if(!a||d<=0||f<=0)return null;const D=at.fromLonLat([e,t]);if(D.length<2)return null;const A=D[0],m=D[1],[C,v,E,P]=l,x=E-C,M=P-v;if(x<=0||M<=0||A<C||A>E||m<v||m>P)return null;const F=(A-C)/x*(d-1),S=(P-m)/M*(f-1),y=Math.max(0,Math.min(d-1,Math.round(F))),I=Math.max(0,Math.min(f-1,Math.round(S))),b=a?.[I]?.[y];if(b==null||isNaN(Number(b)))return null;const N=this.applyValueTransformValue(Number(b),{x:y,y:I,width:d,height:f,source:r?"smooth":"raw"},this.getValueTransformFn(i));return N==null||isNaN(Number(N))?null:Number(N)}async getValueByLngLat(e,t,r=!1){return this.getValueByLonLat(e,t,r)}async getSourceFromCache(e=this.options){const{config:t}=e,{mode:r,legend:i,legendScope:o}=t,s=this.getContourCacheKey(e);if(this.contourCache.has(s)){const u=this.contourCache.get(s);if(!u||u.schemaVersion!==St)return this.contourCache.delete(s),null;this.contourCache.delete(s),this.contourCache.set(s,u);const{colorMap:l}=Ce(i),{colorMap:d}=Ce(i,o),f=this.getValueTransformFn(e),a=this.applyValueTransform2D(u.rawArr2D,"raw",f),D=this.applyValueTransform2D(u.smoothArr2D,"smooth",f);return await this.getFcstRasterSource({...u,rawArr2D:a,smoothArr2D:D,colorMap:l,selectedColorMap:d,colorMode:r,scope:ht(i,o)??t.scope,rasterCacheKey:this.getRasterRenderCacheKey(e,l)},e)}return null}async getFcstRasterSource(e,t=this.options){const{rawArr2D:r,smoothArr2D:i,extent:o,width:s,height:u,colorMap:l,selectedColorMap:d=l,colorMode:f="discrete",scope:a,rasterCacheKey:D=this.getRasterRenderCacheKey(t,l)}=e,A=Object.keys(l).map(y=>Number(y)).filter(y=>!isNaN(y)).sort((y,I)=>y-I),m=A.map(y=>xt(l[y]));let C=this.rasterRenderCache.get(D);if(C)this.rasterRenderCache.delete(D),this.rasterRenderCache.set(D,C);else{let y=this.rasterRenderLoadingTasks.get(D);y||(y=(async()=>{const I=t?.config?.alignWithIsoline===!0,b=t?.config?.isolineSmooth===!1?0:_e(t?.config?.isolineSmoothness),N=I?Dr(r,s,u,b):i,L=r,X=I&&f!=="gradient"?this.createIsolineContourFills(N,s,u,A,m,void 0,t):void 0;let z;if(I&&f!=="gradient"?(z=document.createElement("canvas"),z.width=Math.max(1,Math.floor(s)),z.height=Math.max(1,Math.floor(u))):z=await hn({width:Math.max(1,Math.floor(s)),height:Math.max(1,Math.floor(u)),rawArr2D:L,smoothArr2D:N,thresholds:A,colorsRGBA:m,colorMode:f,scope:[],softenMaskEdge:!I}),!z)return null;const g={canvas:z,renderMask:L,renderValues:N,contourFills:X};return this.setCachedRasterRender(D,g),g})(),this.rasterRenderLoadingTasks.set(D,y));try{C=await y??void 0}finally{this.rasterRenderLoadingTasks.get(D)===y&&this.rasterRenderLoadingTasks.delete(D)}}if(!C)return null;const v=Object.keys(d).map(Number).filter(Number.isFinite).sort((y,I)=>y-I),E=new Set(v),P=C.contourFills?.filter(y=>E.has(y.threshold)),x=v[0],M=v[v.length-1],F=typeof M=="number"&&A.some(y=>y>M),S=typeof x=="number"&&Number.isFinite(x)&&typeof M=="number"&&Number.isFinite(M)?this.createLegendEdgeColorCanvas(C.renderValues,s,u,x,M,xt(d[x]),xt(d[M])):void 0;return this.createFcstCanvasSource(C.canvas,o,f,C.renderMask,a,t,P,t?.config?.alignWithIsoline===!0?C.renderValues:void 0,S,F)}getValueTransformFn(e=this.options){return vr(e?.config?.valueTransform)}applyValueTransformValue(e,t,r=this.getValueTransformFn()){if(!r)return e;try{const i=r(e,t);return i==null||isNaN(Number(i))?NaN:Number(i)}catch(i){return console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",i),e}}applyValueTransform2D(e,t,r=this.getValueTransformFn()){if(!r)return e;const i=e.length,o=e[0]?.length??0,s=Array.from({length:i},()=>Array(o).fill(void 0));let u=!1;for(let l=0;l<i;l++)for(let d=0;d<o;d++){const f=e[l]?.[d];if(f==null||isNaN(Number(f))){s[l][d]=NaN;continue}try{const a=r(Number(f),{x:d,y:l,width:o,height:i,source:t});s[l][d]=a==null||!Number.isFinite(Number(a))?NaN:Number(a)}catch(a){u||(console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",a),u=!0),s[l][d]=Number(f)}}return s}isMaskSmoothEnabled(e=this.options){return e?.config?.smooth===!0}getMaskSmoothIterations(e=this.options){const t=e?.config?.smoothIterations,r=Math.floor(Number(t??2));return Number.isFinite(r)?Math.max(1,Math.min(5,r)):2}chaikinSmoothRing(e,t=2){if(!e.length)return e;let r=e.slice();const i=r[0],o=r[r.length-1];if(i&&o&&i[0]===o[0]&&i[1]===o[1]&&r.length>2&&(r=r.slice(0,-1)),r.length<3)return e;for(let l=0;l<t;l++){const d=[],f=r.length;for(let a=0;a<f;a++){const D=r[a],A=r[(a+1)%f];if(!D||!A)continue;const m=D[0],C=D[1],v=A[0],E=A[1];if(typeof m!="number"||typeof C!="number"||typeof v!="number"||typeof E!="number")continue;const P=.75*m+.25*v,x=.75*C+.25*E,M=.25*m+.75*v,F=.25*C+.75*E;d.push([P,x],[M,F])}if(r=d,r.length<3)break}const u=r[0];return r.length&&u?[...r,u]:e}smoothMaskContourPolygons(e,t){if(!e.length)return e;const r=[];for(const i of e){const o=[];for(let s=0;s<i.length;s++){const u=i[s];if(!u||u.length<4){u&&o.push(u);continue}o.push(this.chaikinSmoothRing(u,t))}r.push(o)}return r.length?r:e}createVisibleMaskContourPath(e,t,r,i,o=!1,s=this.options){if(!o)return null;const u=this.getMaskSmoothIterations(s),l=t*r;if(!l)return null;const d=i&&typeof i[0]<"u",f=i&&typeof i[1]<"u",a=d?Number(i[0]):0,D=f?Number(i[1]):0,A=new Float32Array(l);let m=0;for(let x=0;x<r;x++)for(let M=0;M<t;M++){const F=x*t+M,S=e?.[x]?.[M],y=S==null||isNaN(Number(S))?void 0:Number(S);y!==void 0&&(!d||y>=a)&&(!f||y<=D)&&(A[F]=1,m+=1)}if(!m)return null;const C=qt.contours().size([t,r]).thresholds([.5])(A);if(!C.length)return null;const v=[];for(const x of C){const M=x.coordinates??[];for(const F of M)v.push(F)}const E=o?this.smoothMaskContourPolygons(v,u):v,P=new Path2D;for(const x of E)for(const M of x){if(!M.length)continue;const F=M[0];if(!(!F||typeof F[0]!="number"||typeof F[1]!="number")){P.moveTo(F[0],F[1]);for(let S=1;S<M.length;S++){const y=M[S];!y||typeof y[0]!="number"||typeof y[1]!="number"||P.lineTo(y[0],y[1])}P.closePath()}}return P}createIsolineContourPath(e,t,r,i,o=this.options){const s=i&&typeof i[0]<"u"?Number(i[0]):NaN,u=i&&typeof i[1]<"u"?Number(i[1]):1/0;if(!Number.isFinite(s))return null;const l=new Float64Array(t*r);let d=0;for(let A=0;A<r;A++){const m=e[A];for(let C=0;C<t;C++){const v=m?.[C],E=v!==void 0&&Number.isFinite(v)&&v<=u;l[A*t+C]=E?v:NaN,E&&v>=s&&(d+=1)}}if(!d)return null;const f=o?.config?.isolineSmooth===!1?0:_e(o?.config?.isolineSmoothness),a=qt.contours().size([t,r]).thresholds([s]).smooth(f>0)(l);if(!a.length)return null;const D=new Path2D;for(const A of a)for(const m of A.coordinates??[])for(const C of m){const v=C[0];if(v){D.moveTo(v[0],v[1]);for(let E=1;E<C.length;E++){const P=C[E];P&&D.lineTo(P[0],P[1])}D.closePath()}}return D}createIsolineContourFills(e,t,r,i,o,s,u=this.options){const l=s&&typeof s[0]<"u"?Number(s[0]):-1/0,d=s&&typeof s[1]<"u"?Number(s[1]):1/0,f=i.filter(E=>E>=l&&E<=d);if(!f.length||t<2||r<2)return[];const a=new Float64Array(t*r);for(let E=0;E<r;E++){const P=e[E];for(let x=0;x<t;x++){const M=P?.[x];a[E*t+x]=M!==void 0&&Number.isFinite(M)?M:NaN}}const D=u?.config?.isolineSmooth===!1?0:_e(u?.config?.isolineSmoothness),A=qt.contours().size([t,r]).thresholds(f).smooth(D>0)(a),m=new globalThis.Map;i.forEach((E,P)=>{const x=o[P];x&&m.set(E,x)});const C=(E,P)=>{for(const x of P.coordinates??[])for(const M of x){const F=M[0];if(!F)continue;const S=F[0],y=F[1];if(!(typeof S!="number"||typeof y!="number")){E.moveTo(S,y);for(let I=1;I<M.length;I++){const b=M[I],N=b?.[0],L=b?.[1];typeof N=="number"&&typeof L=="number"&&E.lineTo(N,L)}E.closePath()}}},v=[];for(let E=0;E<A.length;E++){const P=A[E],x=Number(P.value),M=m.get(x);if(!M)continue;const F=new Path2D;C(F,P);const S=A[E+1];S&&C(F,S);const y=Math.max(0,Math.min(1,(M[3]??255)/255));v.push({threshold:x,path:F,color:`rgba(${M[0]}, ${M[1]}, ${M[2]}, ${y})`})}return v}createScopeMaskCanvas(e,t,r,i,o=!1){const s=i&&typeof i[0]<"u",u=i&&typeof i[1]<"u";if(!s&&!u)return null;const l=s?Number(i[0]):-1/0,d=u?Number(i[1]):1/0,f=document.createElement("canvas");f.width=Math.max(1,Math.floor(t)),f.height=Math.max(1,Math.floor(r));const a=f.getContext("2d");if(!a)return null;const D=a.createImageData(f.width,f.height),A=D.data;for(let m=0;m<f.height;m++){const C=e[m];for(let v=0;v<f.width;v++){const E=C?.[v];E===void 0||!Number.isFinite(E)||E<l||(o?E>=d:E>d)||(A[(m*f.width+v)*4+3]=255)}}return a.putImageData(D,0,0),f}createLegendEdgeColorCanvas(e,t,r,i,o,s,u){const l=document.createElement("canvas");l.width=Math.max(1,Math.floor(t)),l.height=Math.max(1,Math.floor(r));const d=l.getContext("2d");if(!d)return null;const f=d.createImageData(l.width,l.height),a=f.data;for(let D=0;D<l.height;D++){const A=e[D];for(let m=0;m<l.width;m++){const C=A?.[m];if(C===void 0||!Number.isFinite(C))continue;const v=C<=i?s:C>=o?u:void 0;if(!v)continue;const E=(D*l.width+m)*4;a[E]=v[0],a[E+1]=v[1],a[E+2]=v[2],a[E+3]=v[3]}}return d.putImageData(f,0,0),l}createFcstCanvasSource(e,t,r="discrete",i,o,s=this.options,u,l,d,f=!1){const a=document.createElement("canvas"),D=r==="gradient",A=s?.config?.pixelSnap===!0,m=s?.config?.useDevicePixelRatio===!0,C=s?.config?.alignWithIsoline===!0,v=i?this.createScopeMaskCanvas(C?l??i:i,e.width,e.height,o,f):null;return new Wt({projection:"EPSG:3857",ratio:1,interpolate:D&&!C,canvasFunction:(P,x,M,F)=>{const S=m?Math.max(1,M||1):1,y=F??[1,1],I=Math.max(1,Math.floor((y[0]??1)*S)),b=Math.max(1,Math.floor((y[1]??1)*S));a.width!==I&&(a.width=I),a.height!==b&&(a.height=b);const N=a.getContext("2d",{alpha:!0});if(!N)return a;N.clearRect(0,0,I,b);const[L,X,z,g]=P,[w,B,O,H]=t,R=z-L,G=g-X;if(R<=0||G<=0)return a;const Q=I/R,Z=b/G,J=(w-L)*Q,U=(g-H)*Z,W=(O-w)*Q,_=(H-B)*Z;if(W<=0||_<=0)return a;const K=A?Math.floor(J):J,Y=A?Math.floor(U):U,re=A?Math.ceil(J+W):J+W,ae=A?Math.ceil(U+_):U+_,$=Math.max(1,re-K),ee=Math.max(1,ae-Y);if(u?.length){N.save(),N.translate(K,Y),N.scale($/e.width,ee/e.height);for(const ce of u)N.fillStyle=ce.color,N.fill(ce.path,"evenodd");return N.restore(),a}return N.imageSmoothingEnabled=D&&!C,D&&!C&&(N.imageSmoothingQuality="high"),N.drawImage(e,K,Y,$,ee),d&&(N.save(),N.globalCompositeOperation="source-atop",N.imageSmoothingEnabled=D&&!C,D&&!C&&(N.imageSmoothingQuality="high"),N.drawImage(d,K,Y,$,ee),N.restore()),v&&(N.save(),N.globalCompositeOperation="destination-in",N.imageSmoothingEnabled=D&&!C,D&&!C&&(N.imageSmoothingQuality="high"),N.drawImage(v,K,Y,$,ee),N.restore()),a}})}async preload(e){const t={...this.options,config:{...this.options?.config??{}},url:e},r=await Pt(t);if(!r)return;const{uniqueThresholds:i,rawArr2D:o,smoothArr2D:s,extent:u,width:l,height:d}=r,f=this.getContourCacheKey(t);this.setCachedContourData(f,{schemaVersion:St,uniqueThresholds:i,rawArr2D:o,smoothArr2D:s,extent:u,width:l,height:d})}delete(){this.abortController.abort(),this.sourceRequestVersion++,Fe(this.map,this.options.id),this.contourCache.clear(),this.contourLoadingTasks.clear(),this.rasterRenderCache.clear(),this.rasterRenderLoadingTasks.clear()}toggleVisible(e){pe(this.map,this.options.id,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options?.config??{},...e?.config??{}}};const t=this.beginSourceRequest(),r=this.getRequestOptions(),{id:i}=this.options,o=de(this.map,i);if(!o){this.ready=this.add(),await this.ready;return}const s=await this.getSourceFromCache(r);if(!this.isCurrentRequest(t))return;const u=s??await this.getSourceFromParams(r);if(!this.isCurrentRequest(t)||!u)return;o.setSource(u);const l=Number(r.config?.opacity);Number.isFinite(l)&&o.setOpacity(Math.max(0,Math.min(1,l)));const d=Number(r.config?.zIndex);Number.isFinite(d)&&o.setZIndex(d)}}const Mt=1,Tt=new globalThis.Map;function fr(n,e){Tt.set(n,e)}function _t(n){return Tt.get(n)}function dn(n){Tt.delete(n)}function gn(n){Tt.forEach(e=>n(e))}function mn(){Tt.clear()}class kt{map;options;contourCache;externalGridDataProvider;constructor(e,t,r){this.map=e,this.options=t,this.contourCache=new Map,this.externalGridDataProvider=r,this.add()}getClassName(){return`${this.options.id}-gridValue`}getRuntimeConfig(){const e=this.options?.config??{},t=e.gridConfig??{};return{...e,...t}}async add(){const e=this.getRuntimeConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):10,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const s=o?o.getZIndex():t+1,u=await this.getSourceFromCache()??await this.getSourceFromParams();if(!u)return;const l=new Nt({className:i,source:u,zIndex:s,opacity:r});return this.map.addLayer(l),l}getCacheKey(){const{id:e,url:t}=this.options;return`${e}${t}`}async getOrLoadGridData(){const e=this.getCacheKey(),t=this.contourCache.get(e);if(t&&t.schemaVersion===Mt)return t;if(this.externalGridDataProvider){const o=await this.externalGridDataProvider();if(!o)return null;const s={schemaVersion:Mt,rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height};return this.contourCache.set(e,s),s}const r=await Pt(this.options);if(!r)return null;const i={schemaVersion:Mt,rawArr2D:r.rawArr2D,extent:r.extent,width:r.width,height:r.height};return this.contourCache.set(e,i),i}async getSourceFromCache(){const e=this.getCacheKey(),t=this.contourCache.get(e);return!t||t.schemaVersion!==Mt?(t&&this.contourCache.delete(e),null):this.createGridCanvasSource(t)}async getSourceFromParams(){const e=await this.getOrLoadGridData();return e?this.createGridCanvasSource(e):null}getTextDrawOptions(){const e=this.getRuntimeConfig(),t=Math.max(8,Math.floor(Number(e.pixelStep??40))),r=Math.max(10,Math.floor(Number(e.fontSize??14))),i=Math.max(0,Math.floor(Number(e.decimals??1))),o=String(e.fontColor??"#000"),s=String(e.strokeColor??"#fff"),u=Math.max(0,Number(e.strokeWidth??2)),l=String(e.fontFamily??"Arial, sans-serif"),d=e.useDevicePixelRatio===!0;return{pixelStep:t,fontSize:r,decimals:i,fontColor:o,strokeColor:s,strokeWidth:u,fontFamily:l,useDevicePixelRatio:d}}isValueInScope(e,t){if(!Number.isFinite(e))return!1;if(!t||t.length!==2)return!0;const r=Number(t[0]),i=Number(t[1]);if(!Number.isFinite(r)||!Number.isFinite(i))return!0;const o=Math.min(r,i),s=Math.max(r,i);return e>=o&&e<=s}interpolateValue(e,t,r,i,o){const s=Math.floor(i),u=Math.ceil(i),l=Math.floor(o),d=Math.ceil(o);if(s<0||u>=t||l<0||d>=r)return null;const f=Number(e[l]?.[s]),a=Number(e[l]?.[u]),D=Number(e[d]?.[s]),A=Number(e[d]?.[u]);if(![f,a,D,A].every(v=>Number.isFinite(v)))return null;const m=i-s,C=o-l;return f*(1-m)*(1-C)+a*m*(1-C)+D*(1-m)*C+A*m*C}getValueTransformFn(){const e=this.getRuntimeConfig();return vr(e?.valueTransform)}applyValueTransformValue(e,t){const r=this.getValueTransformFn();if(!r)return e;try{const i=r(e,t);return i==null||isNaN(Number(i))?NaN:Number(i)}catch(i){return console.warn("[GridLayer] valueTransform 执行失败,已回退原始值",i),e}}createGridCanvasSource(e){const t=document.createElement("canvas"),{rawArr2D:r,extent:i,width:o,height:s}=e,u=this.getTextDrawOptions(),l=this.getRuntimeConfig(),d=typeof l?.valueTransform=="function"||typeof l?.valueTransform=="string"&&l.valueTransform.trim().length>0,f=l?.valueTransformAffectsScope!==!1,a=ht(this.options.config.legend,this.options.config.legendScope)??this.options.config.scope;return new Wt({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(D,A,m,C)=>{const v=C??[1,1],E=Math.max(1,Math.floor(v[0]??1)),P=Math.max(1,Math.floor(v[1]??1)),x=this.map.getSize(),M=Math.max(1,Math.floor(x?.[0]??E)),F=Math.max(1,Math.floor(x?.[1]??P)),S=E/M,y=P/F,I=u.useDevicePixelRatio?Math.max(1,Number(m||1)):1,b=Math.max(.01,(S+y)*.5/I),N=E,L=P,X=M,z=F;t.width!==N&&(t.width=N),t.height!==L&&(t.height=L);const g=t.getContext("2d",{alpha:!0});if(!g)return t;g.setTransform(1,0,0,1,0,0),g.clearRect(0,0,N,L),g.font=`${Math.max(10,Math.round(u.fontSize*b))}px ${u.fontFamily}`,g.fillStyle=u.fontColor,g.strokeStyle=u.strokeColor,g.lineWidth=Math.max(0,u.strokeWidth*b),g.lineJoin="round",g.miterLimit=2,g.textAlign="center",g.textBaseline="middle";const[w,B,O,H]=D,[R,G,Q,Z]=i,J=O-w,U=H-B,W=Q-R,_=Z-G;if(J<=0||U<=0||W<=0||_<=0)return t;const K=Math.max(8,Math.round(u.pixelStep));for(let Y=K/2;Y<z;Y+=K)for(let re=K/2;re<X;re+=K){const ae=w+re/X*J,$=H-Y/z*U;if(ae<R||ae>Q||$<G||$>Z)continue;const ee=(ae-R)/W*(o-1),ce=(Z-$)/_*(s-1),oe=this.interpolateValue(r,o,s,ee,ce);if(oe===null)continue;const ge=this.applyValueTransformValue(oe,{x:ee,y:ce,width:o,height:s,source:"raw"});if(!Number.isFinite(ge))continue;const ue=d&&!f?oe:ge;if(!this.isValueInScope(ue,a))continue;const De=ge.toFixed(u.decimals),ye=re*S,fe=Y*y;g.lineWidth>0&&g.strokeText(De,ye,fe),g.fillText(De,ye,fe)}return t}})}delete(){Fe(this.map,this.getClassName()),this.contourCache.clear()}toggleVisible(e){pe(this.map,this.getClassName(),e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){await this.add();return}const r=await this.getSourceFromCache()??await this.getSourceFromParams();r&&t.setSource(r)}}class An{map;options;contourCache;constructor(e,t){this.map=e,this.options=t,this.contourCache=new Map,this.add()}async add(){console.time();const{id:e,config:t}=this.options,{zIndex:r=10}=t,i=de(this.map,e);i&&this.delete();const o=i?i.getZIndex():r??1200,s=this.getSourceFromCache();if(s){const l=new Nt({source:s,className:e+"-arrow",zIndex:o});return this.map.addLayer(l),l}const u=await this.getArrowParams();if(u){const l=this.getArrowSource({...u,extent:this.options.config.extent,config:this.options.config}),d=new Nt({source:l,className:e+"-arrow",zIndex:o});this.map.addLayer(d)}console.timeEnd()}async getArrowParams(){const{id:e,url:t,config:r}=this.options,{cache:i,scope:o}=r,s=e+t,u=[-99999,99999];et.isNumber(o?.[0])&&(u[0]=o[0]),et.isNumber(o?.[1])&&(u[1]=o[1]);const{grayArr:l,width:d,height:f}=await tt(t,u);if(!(!l||!d||!f))return i&&this.contourCache.set(s,{grayArr:l,width:d,height:f}),{grayArr:l,width:d,height:f}}getArrowSource(e){const{grayArr:t,width:r,height:i,extent:o,config:s}=e,{pixelStep:u=20,fontSize:l=12,color:d="rgb(255,255,255)"}=s,f={angle:t,width:r,height:i},a=dt(o);return this.createArrowCanvasSource(f,a,{pixelStep:u,fontSize:l,color:d})}createArrowCanvasSource(e,t,r){const{pixelStep:i=20,fontSize:o=12,color:s="rgb(255,255,255)"}=r,u=document.createElement("canvas");return new Wt({projection:"EPSG:3857",ratio:1,canvasFunction:(l,d,f,a)=>{const D=a??[1,1],A=Math.max(1,Math.floor((D[0]??1)*f)),m=Math.max(1,Math.floor((D[1]??1)*f));u.width!==A&&(u.width=A),u.height!==m&&(u.height=m);const C=u.getContext("2d",{alpha:!0});if(!C)return u;C.clearRect(0,0,A,m),C.fillStyle=s,C.font=`${Math.max(1,Math.floor(o*f))}px Arial`,C.textAlign="center",C.textBaseline="middle";const[v,E,P,x]=l,[M,F,S,y]=t,I=P-v,b=x-E;if(I<=0||b<=0)return u;const N=Math.max(v,M),L=Math.max(E,F),X=Math.min(P,S),z=Math.min(x,y);if(N>=X||L>=z)return u;const g=S-M,w=y-F;if(g<=0||w<=0)return u;const B=Math.max(1,A-1),O=Math.max(1,m-1),H=Math.max(1,Math.floor(i*f)),R=Math.max(g/Math.max(1,e.width-1),w/Math.max(1,e.height-1)),G=R>0&&isFinite(d)?Math.max(1,Math.floor(d/R)):1,Q=Math.max(H,Math.min(H*6,H*G)),Z=Math.max(0,Math.floor((N-v)/I*B)),J=Math.min(A-1,Math.ceil((X-v)/I*B)),U=Math.max(0,Math.floor((x-z)/b*O)),W=Math.min(m-1,Math.ceil((x-L)/b*O));if(Z>J||U>W)return u;for(let _=U;_<=W;_+=Q)for(let K=Z;K<=J;K+=Q){const Y=v+I*K/B,re=x-b*_/O;if(Y<M||Y>S||re<F||re>y)continue;const ae=(Y-M)/g*(e.width-1),$=(y-re)/w*(e.height-1),ee=Vt(e.angle,ae,$,e.width,e.height);if(!isFinite(ee))continue;const ce=(ee-90)*Math.PI/180;C.save(),C.translate(K,_),C.rotate(ce),C.fillText("→",0,0),C.restore()}return u}})}getSourceFromCache(){const{id:e,url:t,config:r}=this.options,{scope:i,cache:o,extent:s,pixelStep:u=20,fontSize:l=12,color:d="rgb(255,255,255)"}=r,f=e+t;if(o&&this.contourCache.has(f)){const a=this.contourCache.get(f);return this.getArrowSource({...a,extent:s,scope:i,pixelStep:u,fontSize:l,color:d})}return null}delete(){Fe(this.map,this.options.id+"-arrow"),this.contourCache.clear()}toggleVisible(e){pe(this.map,this.options.id+"-arrow",e)}}const Xo="data:image/png;base64,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",pn="26",Br=new Set(["25","26","47","55","64"]),Er=new Set(["21","22","23","65","66"]),$t="24",Te=Object.freeze({symbolId:"28",participatesInPrecipitationCut:!1,transparentFill:!0,boundaryColor:"#ffa809",boundaryWidth:3,showMarker:!0,iconScale:.16}),lt=Te.symbolId,rt=Object.freeze({symbolId:"38",color:"#ff0000",width:3,tickSpacing:22,tickLength:16}),vn=new Set([...Br,...Er,$t]),Dn=new Set([...vn,lt]),Ho=6,Ro=["","-notes","-filtered","-other","-frost"],He=new globalThis.Map,Ot=new globalThis.Map,hr=new WeakMap,Gr=new globalThis.Map,It={0:"#9CF790",10:"#37A600",25:"#67B4F8",50:"#0002FE",100:"#FA03F0",250:"#710100",400:"#ffa10c",600:"#fe6301"},zo={0:"#cccccc","2.5":"#a1a1a1",5:"#707070",10:"#454545",20:"#7345e6",30:"#4d0074"},qo={0:"#c3e7b9",10:"#7ec179",25:"#95c5e0",50:"#3b3a9f",100:"#b05dae"},kr=Object.freeze({timeRange:"",timeTotal:0,publicTime:""});function Qo(){return new DOMException("The operation was aborted","AbortError")}function ft(n){if(n?.aborted)throw n.reason??Qo()}function yn(n,e){let t=hr.get(n);t||(t=new globalThis.Map,hr.set(n,t));const r=(t.get(e)??0)+1;return t.set(e,r),r}function Vr(n,e,t){return hr.get(n)?.get(e)===t}function Go(n){return JSON.stringify({filePath:n.filePath,authorization:n.authorization??""})}function ko(n,e){for(He.delete(n),He.set(n,e);He.size>Ho;){const t=He.keys().next().value;if(t===void 0)break;He.delete(t)}}function bn(n,e){const t=new Set(Ro.map(r=>`${e}${r}`));for(const r of[...n.getLayers().getArray()])t.has(r.getClassName())&&n.removeLayer(r)}function qe(n){const e=String(n??"").trim();return Dn.has(e)?e:pn}function dr(n,e,t=.05){const r=n[0]-e[0],i=n[1]-e[1];return r*r+i*i<t*t}function wn(n){let e=0;for(let t=0;t<n.length-1;t++){const[r,i]=n[t],[o,s]=n[t+1];e+=(o-r)*(s+i)}return e>0}function Vo(n){const e=[];let t=n.findIndex(o=>/^CLOSED_CONTOURS:/i.test(o));if(t<0)return k.featureCollection(e);const r=n[t].match(/CLOSED_CONTOURS:\s*(\d+)/i);let i=r?Number.parseInt(r[1],10):0;for(t++;i>0&&t<n.length;){const o=n[t].trim().match(/^(\d+)\s+(\d+)$/);if(!o){t++;continue}let s=Number.parseInt(o[2],10);const u=[];for(t++;s>0&&t<n.length;){const D=n[t].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let A=0;A+2<D.length&&s>0;A+=3)u.push([D[A],D[A+1]]),s--;t++}let l=!1;t<n.length&&/^NoLabel\s+0[^\s]*/.test(n[t].trim())&&(l=!0,t++);let d="3";const f=t<n.length?n[t].trim().match(/^([0-9]+(?:\.[0-9]+)?)\s+1$/):null;f&&(d=f[1],t++);const a=u[u.length-1];if(u.length>3&&!dr(u[0],a,.1)&&u.push([...u[0]]),u.length>3&&dr(u[0],u[u.length-1],.1)){wn(u)&&u.reverse();const D=u[0],A=u[u.length-1];(D[0]!==A[0]||D[1]!==A[1])&&u.push([...u[0]]),e.push(k.polygon([u],{level:d,noLabelZero:l}))}i--}return e.sort((o,s)=>Number(o.properties?.level)-Number(s.properties?.level)),k.featureCollection(e)}function jo(n){const e=[];let t=n.findIndex(r=>/^NOTES_SYMBOL:/i.test(r));if(t<0)return e;for(t++;t<n.length;){const r=n[t].trim();if(!r||!/^\d+\s/.test(r))break;const i=r.split(/\s+/),o=i[5],s=Number.parseFloat(i[1]),u=Number.parseFloat(i[2]);o&&Number.isFinite(s)&&Number.isFinite(u)&&e.push({type:"Feature",geometry:{type:"Point",coordinates:[s,u]},properties:{text:o,noteValue:o,rawLine:r,rawParts:i}}),t++}return e}function Uo(n){const e=[];let t=n.findIndex(r=>/^SYMBOLS:/i.test(r));if(t<0)return e;for(t++;t<n.length;){const r=n[t].trim();if(!r||/^[A-Z_]+:/.test(r))break;const i=r.split(/\s+/).filter(Boolean),o=Number.parseFloat(i[1]),s=Number.parseFloat(i[2]);i.length>=3&&Number.isFinite(o)&&Number.isFinite(s)&&e.push({type:"Feature",geometry:{type:"Point",coordinates:[o,s]},properties:{symbolId:i[0],alt:Number.parseFloat(i[3]??"0"),angle:Number.parseFloat(i[4]??"0")}}),t++}return e}function Wo(n){const e=[],t=n.findIndex(s=>/^CLOSED_CONTOURS:/i.test(s)),r=t<0?n.length:t,i=/^(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)\s+(\d+)\s*$/;let o=0;for(;o<r;){const s=n[o].trim().match(i);if(!s){o++;continue}const u=s[1],l=Number(s[2]),d=u===rt.symbolId;let f=Number.parseInt(s[3],10);const a=[];for(o++;o<r&&f>0;){const m=n[o].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let C=0;C+2<m.length&&f>0;C+=3)a.push([m[C],m[C+1]]),f--;o++}let D=!1;if(o<r&&/^NoLabel\s+0[^\s]*/.test(n[o].trim())&&(D=!0,o++),a.length<2)continue;const A=!d&&a.length>3&&dr(a[0],a[a.length-1],.1);A&&wn(a)&&a.reverse(),e.push({type:"Feature",geometry:{type:A?"Polygon":"LineString",coordinates:A?[a]:a},properties:{level:u,symbolId:u,lineWidth:l,noLabelZero:D}})}return e}function Yo(n){for(const e of n){const t=e.trim().match(/^(\d{4})\s+(\d{1,2})\s+(\d{1,2})\s+(\d{1,2})\s+(\d+)$/);if(!t)continue;const[,r,i,o,s,u]=t,l=Number(r),d=Number(i),f=Number(o),a=Number(s),D=Number(u),A=new Date(Date.UTC(l,d-1,f,a));if(A.getUTCFullYear()!==l||A.getUTCMonth()!==d-1||A.getUTCDate()!==f||A.getUTCHours()!==a||!Number.isFinite(D))return kr;const m=new Date(A.getTime()+D*60*60*1e3),C=P=>({year:P.getUTCFullYear(),month:P.getUTCMonth()+1,day:P.getUTCDate(),hour:String(P.getUTCHours()).padStart(2,"0")}),v=C(A),E=C(m);return{timeRange:`${v.year}年${v.month}月${v.day}日${v.hour}时-${E.month}月${E.day}日${E.hour}时`,timeTotal:D,publicTime:`${v.year}-${String(v.month).padStart(2,"0")}-${String(v.day).padStart(2,"0")} ${v.hour}:00:00`}}return kr}function me(n){try{const e=k.bbox(n);return e.length<4||e.slice(0,4).some(t=>!Number.isFinite(t))?null:[e[0],e[1],e[2],e[3]]}catch{return null}}function nt(n,e){return!n||!e?!0:!(n[2]<e[0]||n[0]>e[2]||n[3]<e[1]||n[1]>e[3])}function xr(n){if(!/polygon/i.test(String(n?.geometry?.type??"")))return[n];try{return k.flatten(n).features.map(e=>({...e,properties:{...n.properties??{},...e.properties??{}}}))}catch{return[n]}}function Jo(n,e){try{const t=k.area(n),r=k.area(e);return Number.isFinite(t)&&Number.isFinite(r)&&t>0&&t<r*.999999&&(k.booleanWithin(n,e)||k.booleanContains(e,n))}catch{return!1}}function Cn(n){if(n.length<=1||!n.every(s=>Number(s?.properties?.level)===0))return n;const e=n.flatMap(xr),t=e.map(s=>{try{return k.area(s)}catch{return 0}}),r=new globalThis.Map;if(e.forEach((s,u)=>{let l=-1,d=Number.POSITIVE_INFINITY;e.forEach((f,a)=>{const D=t[a]??0;u===a||D>=d||!nt(me(s),me(f))||!Jo(s,f)||(l=a,d=D)}),l>=0&&r.set(u,l)}),!r.size)return e;const i=new globalThis.Map;r.forEach((s,u)=>{const l=i.get(s)??[];l.push(e[u]),i.set(s,l)});const o=[];return e.forEach((s,u)=>{if(r.has(u))return;let l=[s];for(const d of i.get(u)??[])l=l.flatMap(f=>{try{if(!nt(me(f),me(d))||!k.booleanIntersects(f,d))return[f];const a=k.difference(k.featureCollection([f,d]));return a?k.flatten(a).features.map(D=>({...D,properties:{...s.properties??{},...D.properties??{}}})):[]}catch{return[f]}});o.push(...l)}),o}function Zo(n){const e=new globalThis.Map,t=[];for(const i of n){if(!/polygon/i.test(String(i?.geometry?.type??""))){t.push(i);continue}const o=`${qe(i.properties?.symbolId)}__${String(i.properties?.level??"")}`,s=e.get(o)??[];s.push(i),e.set(o,s)}const r=[];return e.forEach(i=>{const o=Cn(i);if(o.length<=1){r.push(...o);return}try{const s=k.union(k.featureCollection(o));if(!s){r.push(...o);return}k.flatten(s).features.forEach(u=>{u.properties={...o[0]?.properties??{},...u.properties??{}},r.push(u)})}catch{r.push(...o)}}),[...t,...r]}function Ko(n,e){const t=new globalThis.Map,r=[];for(const o of n){if(!/polygon/i.test(String(o?.geometry?.type??""))){r.push(o);continue}const s=qe(o.properties?.symbolId),u=t.get(s)??[];u.push(o),t.set(s,u)}const i=[];return t.forEach(o=>{const s=o.slice().sort((l,d)=>Number(d.properties?.level)-Number(l.properties?.level)),u=[];for(const l of s){ft(e);let d=xr(l);for(const f of u)if(d=d.flatMap(a=>{try{if(!nt(me(a),f.bbox))return[a];if(!k.booleanIntersects(a,f.feature))return[a];const D=k.difference(k.featureCollection([a,f.feature]));return D?k.flatten(D).features.map(A=>({...A,properties:{...l.properties??{},...A.properties??{}}})):[]}catch{return[a]}}),!d.length)break;for(const f of d)u.push({feature:f,bbox:me(f)});i.push(...d)}}),[...r,...i]}function _o(n,e=1e-6){if(!n.length)return[];const t=(o,s)=>{const u=o[0]-s[0],l=o[1]-s[1];return u*u+l*l<=e*e},r=[];for(const o of n)(!r.length||!t(o,r[r.length-1]))&&r.push([...o]);if(r.length>1&&!t(r[0],r[r.length-1])&&r.push([...r[0]]),r.length<4)return n;const i=[r[0]];for(let o=1;o<r.length-1;o++){const s=r[o-1],u=r[o],l=r[o+1];Math.abs((u[0]-s[0])*(l[1]-s[1])-(u[1]-s[1])*(l[0]-s[0]))>e&&i.push(u)}return i.push(r[r.length-1]),i.length>=4?i:r}function $o(n,e,t=.001){if(n?.geometry?.type!=="Polygon"||!/linestring/i.test(e?.geometry?.type??""))return k.featureCollection([n]);if(e.geometry.type==="LineString"){const l=e.geometry.coordinates;if(k.booleanPointInPolygon(k.point(l[0]),n)||k.booleanPointInPolygon(k.point(l[l.length-1]),n))return k.featureCollection([n])}const r=k.lineIntersect(e,n),i=k.explode(e);for(const l of i.features.slice(0,-1))r.features.push(l);const o=k.buffer(e,t,{units:"kilometers"});if(!o)return k.featureCollection([n]);const s=k.difference(k.featureCollection([n,o]));if(!s?.geometry)return k.featureCollection([n]);const u=xr(s).map((l,d)=>{const f=l.geometry.coordinates[0];for(let a=0;a<f.length;a++){const D=k.point(f[a]),A=r.features.find(m=>k.distance(m,D,{units:"kilometers"})<=t*2);A&&(f[a]=[...A.geometry.coordinates])}return l.geometry.coordinates[0]=_o(f),l.properties={...n.properties??{},id:`${n.properties?.id??"poly"}-${d}`},l});return k.featureCollection(u)}function ei(n,e,t){const r=e.filter(f=>String(f.properties?.symbolId)===lt).map(f=>k.point(f.geometry.coordinates,f.properties));if(!r.length)return n;const i=n.map((f,a)=>({feature:f,index:a,bbox:me(f),level:Number(f.properties?.level)})).filter(({feature:f,level:a})=>/polygon/i.test(String(f.geometry?.type??""))&&Number.isFinite(a)),o=new Set,s=[];for(const f of r){let a,D=Number.POSITIVE_INFINITY;for(const A of t)try{if(!k.booleanPointInPolygon(f,A))continue;const m=k.area(A);m<D&&(a=A,D=m)}catch{}if(a){for(const A of i)if(!(A.level!==Number(a.properties?.level)||o.has(A.index))){try{if(!k.booleanPointInPolygon(f,A.feature))continue}catch{continue}o.add(A.index),s.push(A)}}}for(;s.length;){const f=s.pop();for(const a of i)if(!(o.has(a.index)||a.level!==f.level||!nt(a.bbox,f.bbox))){try{if(!k.booleanIntersects(f.feature,a.feature))continue}catch{continue}o.add(a.index),s.push(a)}}const u=n.map((f,a)=>o.has(a)?{...f,properties:{...f.properties??{},symbolId:lt,isFreezingRain:!0}}:f),l=new globalThis.Map;for(const{feature:f,index:a,level:D}of i){if(!o.has(a))continue;const A=l.get(D)??[];A.push(f),l.set(D,A)}const d=[];return l.forEach((f,a)=>{try{const D=f.length===1?f[0]:k.union(k.featureCollection(f));if(!D)return;d.push({...D,properties:{level:String(f[0]?.properties?.level??a),symbolId:lt,isFreezingRainBoundary:!0}})}catch{}}),[...u,...d]}function ti(n,e){const t=n.filter(s=>/polygon/i.test(String(s?.geometry?.type??""))&&qe(s?.properties?.symbolId)===$t);if(!t.length)return n;let r;try{r=t.length===1?t[0]:k.union(k.featureCollection(t))}catch(s){return console.warn("Unable to combine sleet contours; retaining overlapping precipitation.",s),n}if(!r)return n;const i=me(r),o=[];for(const s of n){if(ft(e),!/polygon/i.test(String(s?.geometry?.type??""))||!Br.has(qe(s?.properties?.symbolId))||!nt(me(s),i)){o.push(s);continue}try{if(!k.booleanIntersects(s,r)){o.push(s);continue}const u=k.difference(k.featureCollection([s,r]));if(!u)continue;k.flatten(u).features.forEach(l=>{l.properties={...s.properties??{},...l.properties??{}},o.push(l)})}catch(u){console.warn("Unable to subtract sleet from precipitation contour.",u),o.push(s)}}return o}function ri(n,e){const t=n.split(/\r?\n/),r=Vo(t),i=Yo(t),o=jo(t),s=Uo(t).filter(y=>Dn.has(String(y.properties?.symbolId))),u=Wo(t),l=u.filter(y=>y.properties?.symbolId===rt.symbolId),d=u.filter(y=>y.geometry?.type==="LineString"&&Number(y.properties?.level)===0);ft(e);let f=r.features;const a=f.filter(y=>Number(y.properties?.level)===0&&/polygon/i.test(String(y.geometry?.type??"")));if(a.length>1){const y=new Set(a),I=Cn(a),b=f.findIndex(L=>y.has(L)),N=f.filter(L=>!y.has(L));N.splice(b<0?N.length:b,0,...I),f=N}const D=k.featureCollection(f);let A=f;if(A.length>1)try{const y=k.union(D);y&&(A=k.flatten(y).features.map((I,b)=>({...I,properties:{...I.properties??{},id:I.properties?.id??`u-${b}`}})))}catch{A=f}const m=d.map(y=>({feature:y,bbox:me(y)}));for(const y of m)ft(e),A=A.flatMap(I=>{try{if(!nt(me(I),y.bbox))return[I];if(!k.booleanIntersects(I,y.feature))return[I];const b=$o(I,y.feature);return b.features.length?b.features:[I]}catch{return[I]}});const C=s.filter(y=>vn.has(String(y.properties?.symbolId))).map(y=>({feature:y,point:k.point(y.geometry.coordinates,y.properties)})),v=A.map(y=>{let I=pn;for(const b of C)try{if(k.booleanPointInPolygon(b.point,y)){I=qe(b.feature.properties?.symbolId);break}}catch{}return{...y,properties:{symbolId:I}}}),E=f.map(y=>({feature:y,bbox:me(y)})),P=[];for(const y of v){ft(e);const I=me(y);for(const b of E)if(nt(I,b.bbox))try{const N=k.intersect(k.featureCollection([y,b.feature]));if(!N)continue;const L={...b.feature.properties??{},...y.properties??{}};k.flatten(N).features.forEach(X=>{X.properties={...L,...X.properties??{}},P.push(X)})}catch{}}const x=ei(P,s,r.features),M=Te.participatesInPrecipitationCut?[]:x.filter(y=>y.properties?.isFreezingRain||y.properties?.isFreezingRainBoundary),F=x.filter(y=>Te.participatesInPrecipitationCut||!y.properties?.isFreezingRain&&!y.properties?.isFreezingRainBoundary);return{vectorFeatures:[...Ko(ti(Zo(F),e),e),...M],noteFeatures:o,symbolFeatures:s,otherFeatures:d,frostFeatures:l,timeRange:i}}async function Bn(n){const e=Go(n),t=He.get(e);if(t)return He.delete(e),He.set(e,t),t;if(!n.signal){const i=Ot.get(e);if(i)return i}const r=(async()=>{const i=n.authorization?{Authorization:n.authorization}:void 0,o=await fetch(n.filePath,{headers:i,signal:n.signal});if(!o.ok)throw new Error(`MICAPS request failed: ${o.status} ${o.statusText}`);const s=ri(await o.text(),n.signal);return ko(e,s),s})();n.signal||Ot.set(e,r);try{return await r}finally{!n.signal&&Ot.get(e)===r&&Ot.delete(e)}}async function ni(n,e){await Promise.all(n.map(t=>Bn({filePath:t})))}function ir(n,e,t){const r=Number(e);if(!Number.isFinite(r))return t;const i=Object.keys(n).map(Number).filter(Number.isFinite).sort((o,s)=>o-s);if(!i.length||r<i[0])return t;for(let o=0;o<i.length-1;o++){const s=i[o],u=i[o+1];if(r>=s&&r<u)return n[String(s)]??t}return n[String(i[i.length-1])]??t}function oi(n,e){if(!n?.length)return[];if(!e||e.length!==2)return n;const[t,r]=e;return n.slice(Math.max(0,Math.min(n.length,t)),Math.max(0,Math.min(n.length,r)))}function ii(n,e){const t=Number(n);if(!Number.isFinite(t))return;const r=e.filter(i=>i.scope?.length===2);for(let i=0;i<r.length;i++){const o=r[i],s=o.scope;if(!s||s.length!==2)continue;const u=s[0],l=s[1];if(!(u===void 0||l===void 0)&&t>=u&&(t<l||i===r.length-1&&t<=l))return o.color}}function si(n,e,t,r){const i=qe(n);if(Er.has(i))return ir(zo,e,It[0]);if(i===$t)return ir(qo,e,It[0]);const o=Br.has(i)?ii(e,oi(t,r)):void 0;return o||ir(It,e,It[0])}function ui(n,e=10,t=4){if(typeof document>"u")return null;const r=globalThis.devicePixelRatio||1,i=`${n}_${e}_${t}_${r}`,o=Gr.get(i);if(o)return o;const s=document.createElement("canvas");s.width=Math.ceil(e*r),s.height=Math.ceil(e*r);const u=s.getContext("2d");if(!u)return null;u.setTransform(r,0,0,r,0,0),u.strokeStyle=n,u.lineWidth=t,u.beginPath();for(let d=0;d<=e*2;d+=e)u.moveTo(d-e*2,e*2),u.lineTo(d+e*2,-e*2);u.stroke();const l=u.createPattern(s,"repeat");return l&&Gr.set(i,l),l}function ai(n,e){return new V.Style({renderer:(t,r)=>{const i=t;if(i.length<2)return;const{context:o,pixelRatio:s}=r,u=rt.tickSpacing*s,l=rt.tickLength*s;let d=u;o.save(),o.strokeStyle=e,o.lineWidth=n*s,o.lineCap="round",o.beginPath();for(let f=1;f<i.length;f++){const a=i[f-1],D=i[f],A=D[0]-a[0],m=D[1]-a[1],C=Math.hypot(A,m);if(C){for(;d<=C;){const v=d/C,E=a[0]+A*v,P=a[1]+m*v,x=m/C,M=-A/C;o.moveTo(E,P),o.lineTo(E+x*l,P+M*l),d+=u}d-=C}}o.stroke(),o.restore()}})}function ci(n,e,t){const{className:r,opacity:i=.8,showText:o=!1,showFillcolor:s=!0,showIsoline:u=!0,showPointMarkers:l=!1,showFrostLine:d=!0,legend:f,legendScope:a}=t,D={dataProjection:"EPSG:4326",featureProjection:n.getView().getProjection()},A=x=>new _r().readFeatures({type:"FeatureCollection",features:x},D),m=typeof t.frostLineColor=="string"&&t.frostLineColor.trim()?t.frostLineColor:rt.color,C=new globalThis.Map,v=new Ke({className:r,opacity:Math.max(0,Math.min(1,i)),zIndex:t.zIndex??10,visible:t.visible??!0,source:new ct({features:A(e.vectorFeatures)}),style:x=>{const M=qe(x.get("symbolId")),F=x.get("isFreezingRain")===!0,S=x.get("isFreezingRainBoundary")===!0,y=x.get("level"),I=`${M}_${String(y)}_${F}_${S}_${o}_${s}_${u}`,b=C.get(I);if(b)return b;if(S){const L=[new V.Style({zIndex:3,stroke:new V.Stroke({color:Te.boundaryColor,width:Te.boundaryWidth})})];return C.set(I,L),L}const N=[];if(s&&(!F||!Te.transparentFill)){const L=si(M,y,f,a);N.push(new V.Style({fill:new V.Fill({color:M==="24"?ui(L)??L:L})}))}return(u&&!F||o)&&N.push(new V.Style({zIndex:1,stroke:u&&!F?new V.Stroke({color:"#000",width:1}):void 0,text:o?new V.Text({text:String(y??""),font:"bold 16px sans-serif",fill:new V.Fill({color:"#333"}),stroke:new V.Stroke({color:"#fff",width:3}),placement:"line",overflow:!0}):void 0})),C.set(I,N),N}}),E=[v];if(d&&e.frostFeatures.length){const x=new globalThis.Map;E.push(new Ke({className:`${r}-frost`,zIndex:(t.zIndex??10)+1,visible:t.visible??!0,source:new ct({features:A(e.frostFeatures)}),style:M=>{const F=Number(M.get("lineWidth")),S=Number.isFinite(F)&&F>0?F:rt.width;let y=x.get(S);return y||(y=[new V.Style({stroke:new V.Stroke({color:m,width:S})}),ai(S,m)],x.set(S,y)),y}}))}if(e.noteFeatures.length&&(o||l)){const x=new globalThis.Map;E.push(new Ke({className:`${r}-notes`,zIndex:(t.zIndex??10)+2,visible:t.visible??!0,source:new ct({features:A(e.noteFeatures)}),style:M=>{const F=String(M.get("text")??""),S=`${F}_${o}_${l}`;let y=x.get(S);return y||(y=new V.Style({image:l?new V.Circle({radius:4,fill:new V.Fill({color:"#ffffffcc"}),stroke:new V.Stroke({color:"#ff4d4f",width:1.5})}):void 0,text:o?new V.Text({text:F,font:"bold 14px sans-serif",fill:new V.Fill({color:"#ff4d4f"}),stroke:new V.Stroke({color:"#fff",width:2}),offsetY:-12}):void 0}),x.set(S,y)),y}}))}const P=e.symbolFeatures.filter(x=>String(x.properties?.symbolId)===lt?Te.showMarker:l);if(P.length){const x=new globalThis.Map;E.push(new Ke({className:`${r}-filtered`,zIndex:(t.zIndex??10)+3,visible:t.visible??!0,source:new ct({features:A(P)}),style:M=>{const F=qe(M.get("symbolId"));let S=x.get(F);if(!S){if(F===lt)S=new V.Style({image:new V.Icon({src:Xo,anchor:[.5,.5],scale:Te.iconScale})});else{const y=Er.has(F)?"#5f4bb6":F===$t?"#2f7ea1":"#2d9f3b";S=new V.Style({image:new V.Circle({radius:5,fill:new V.Fill({color:y}),stroke:new V.Stroke({color:"#fff",width:1.5})})})}x.set(F,S)}return S}}))}return v.set("timeRange",e.timeRange),E}async function En(n,e){if(!e.className||!e.filePath)return;const t=yn(n,e.className),r=await Bn(e);if(ft(e.signal),!Vr(n,e.className,t))return;const i=n.getLayers().getArray().find(s=>s.getClassName()===e.className),o=ci(n,r,{...e,zIndex:i?.getZIndex()??e.zIndex,visible:i?.getVisible()??e.visible});if(Vr(n,e.className,t))return bn(n,e.className),o.forEach(s=>n.addLayer(s)),o[0]}function xn(n,e){yn(n,e),bn(n,e)}class Nn{map;options;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.ready=this.add()}beginSourceRequest(){return this.abortController.abort(),this.abortController=new AbortController,++this.sourceRequestVersion}getMicContourOptions(e){const t=this.options.config??{};return{className:this.options.id,filePath:e,authorization:this.options.authorization,legend:t.legend??[],legendScope:t.legendScope??[],zIndex:Number.isFinite(Number(t.zIndex))?Number(t.zIndex):10,opacity:Number.isFinite(Number(t.opacity))?Number(t.opacity):.8,showText:this.options.showText??t.showText??!1,showFillcolor:this.options.showFillcolor??t.showFillcolor??!0,showIsoline:this.options.showIsoline??t.showIsoline??!0,showPointMarkers:this.options.showPointMarkers??t.showPointMarkers??!1,showFrostLine:this.options.showFrostLine??t.showFrostLine??!0,frostLineColor:this.options.frostLineColor??t.frostLineColor}}async add(){const e=this.beginSourceRequest(),t=this.abortController,r=this.options.url;if(r)try{if(await En(this.map,{...this.getMicContourOptions(r),signal:t.signal}),e!==this.sourceRequestVersion||t.signal.aborted)return}catch(i){if(t.signal.aborted)return;throw i}}delete(){this.abortController.abort(),this.sourceRequestVersion++,xn(this.map,this.options.id)}toggleVisible(e){pe(this.map,this.options.id,e),pe(this.map,`${this.options.id}-notes`,e),pe(this.map,`${this.options.id}-filtered`,e),pe(this.map,`${this.options.id}-other`,e),pe(this.map,`${this.options.id}-frost`,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}},this.ready=this.add(),await this.ready}}const li=8,fi=8,hi=3,gr="rgba(0,0,0,0.8)",Re=new globalThis.Map,Xt=new globalThis.Map,ze=new globalThis.Map,Ht=new globalThis.Map,mr=new WeakMap;function Nr(n,e){return n.getLayers().getArray().find(t=>t.getClassName()===e)}function Pn(n,e){for(const t of[...n.getLayers().getArray()])t.getClassName()===e&&n.removeLayer(t)}function Tn(n){const{url:e,time:t="",authorization:r="",config:i}=n,{legend:o=[]}=i;return JSON.stringify({url:e,time:t,authorization:r,extent:i.extent??[],scope:i.scope??[],thresholds:o.map(s=>s.scope??[]),isolineSmooth:i.isolineSmooth!==!1,isolineSmoothness:Ln(i)})}function di(n){const{url:e,time:t="",authorization:r="",config:i}=n;return JSON.stringify({url:e,time:t,authorization:r,extent:i.extent??[],scope:i.scope??[]})}function Ln(n){return n.isolineSmooth===!1?0:_e(n.isolineSmoothness)}function gi(n,e){for(Re.delete(n),Re.set(n,e);Re.size>li;){const t=Re.keys().next().value;if(t===void 0)break;Re.delete(t)}}function mi(n,e){for(ze.delete(n),ze.set(n,e);ze.size>fi;){const t=ze.keys().next().value;if(t===void 0)break;ze.delete(t)}}async function Ai(n){const e=di(n),t=ze.get(e);if(t)return ze.delete(e),ze.set(e,t),t;const r=Ht.get(e);if(r)return r;const i=(async()=>{const o=await Pt(n);if(!o)return;const s={rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height};return mi(e,s),s})();Ht.set(e,i);try{return await i}finally{Ht.get(e)===i&&Ht.delete(e)}}function Fn(n,e){let t=mr.get(n);t||(t=new globalThis.Map,mr.set(n,t));const r=(t.get(e)??0)+1;return t.set(e,r),r}function pi(n,e,t){return mr.get(n)?.get(e)===t}function vi(n){return typeof n.isolineBorderColor=="string"?n.isolineBorderColor:typeof n.isolineColor=="string"?n.isolineColor:n.isolineColor===!0?Ce(n.legend??[],n.legendScope).colorMap:gr}function Di(n){return Ce(n.legend??[],n.legendScope).colorMap}function jr(n){if(typeof n=="string")return()=>n;const e=Object.keys(n).map(Number).filter(Number.isFinite).sort((t,r)=>t-r);return t=>{const r=n[t];if(r)return r;let i=0,o=e.length-1,s=-1;for(;i<=o;){const u=i+o>>1;e[u]<=t?(s=u,i=u+1):o=u-1}return s<0?gr:n[e[s]]||gr}}function yi(n,e,t){const r=n(e),[i,o,s,u]=xt(r);return[i,o,s,u/255*Math.max(0,Math.min(1,t))]}function Ur(n,e,t,r){const i=new globalThis.Map,o=[],[s,u,l,d]=r,f=(l-s)/e,a=(d-u)/t,D=m=>{if(!Array.isArray(m)||m.length<2)return null;const C=[];for(const v of m)!Array.isArray(v)||v.length<2||!Number.isFinite(v[0])||!Number.isFinite(v[1])||C.push([s+v[0]*f,d-v[1]*a]);return C.length>=2?C:null},A=(m,C)=>{const v=i.get(m)??[];v.push(C),i.set(m,v)};for(const m of n){const C=Number(m.value);if(!(!Number.isFinite(C)||!Array.isArray(m.coordinates))){if(m.type==="Polygon"){const v=m.coordinates.map(D).filter(E=>!!E);v.length&&(o.push({type:"Polygon",coordinates:v,value:C}),v.forEach(E=>A(C,E)))}else if(m.type==="MultiPolygon"){const v=[];for(const E of m.coordinates){const P=E.map(D).filter(x=>!!x);P.length&&(v.push(P),P.forEach(x=>A(C,x)))}v.length&&o.push({type:"MultiPolygon",coordinates:v,value:C})}}}return{lines:[...i.entries()].map(([m,C])=>C.length===1?{type:"LineString",coordinates:C[0],value:m}:{type:"MultiLineString",coordinates:C,value:m}),polygons:o.sort((m,C)=>m.value-C.value)}}function bi(n){const e=r=>!r||!Array.isArray(r.coordinates)||r.type!=="Polygon"&&r.type!=="MultiPolygon"?null:{type:"Feature",properties:{},geometry:r.type==="Polygon"?{type:"Polygon",coordinates:r.coordinates}:{type:"MultiPolygon",coordinates:r.coordinates}},t=[];for(let r=0;r<n.length;r++){const i=n[r],o=Number(i?.value),s=e(i);if(!s||!Number.isFinite(o))continue;const u=e(n[r+1]),l=u?sr.difference(sr.featureCollection([s,u])):s;l&&t.push({type:l.geometry.type,coordinates:l.geometry.coordinates,value:o})}return t}async function wi(n){const e=await Ai(n);if(!e)return{lines:[],polygons:[]};const{rawArr2D:t,extent:r,width:i,height:o}=e,{uniqueThresholds:s}=Ce(n.config.legend??[]);if(i<2||o<2||s.length===0)return{lines:[],polygons:[]};const u=Ln(n.config),l=Dr(t,i,o,u),d=new Float64Array(i*o);for(let A=0;A<o;A++){const m=l[A];for(let C=0;C<i;C++){const v=m?.[C];d[A*i+C]=v===void 0||!Number.isFinite(v)?NaN:v}}const f=qt.contours().size([i,o]).thresholds(s).smooth(u>0)(d),a=Ur(f,i,o,r),D=Ur(bi(f),i,o,r);return{lines:a.lines,polygons:D.polygons}}async function Sn(n,e){const t=Re.get(n);if(t)return Re.delete(n),Re.set(n,t),t;const r=Xt.get(n);if(r)return r;const i=wi(e);Xt.set(n,i);try{const o=await i;return gi(n,o),o}finally{Xt.get(n)===i&&Xt.delete(n)}}function Mn(n){const{map:e,id:t,isolineGeoJSON:r,contourGeoJSON:i=[],colorMap:o,fillColorMap:s={},fillContours:u=!1,fillOpacity:l=.7,lineWidth:d=1.2,showLabel:f=!0,zIndex:a=9999,visible:D=!0,geometryCacheKey:A,visibleThresholds:m}=n,C=jr(o),v=jr(s),E=m?new Set(m):void 0,P=new globalThis.Map,x=y=>{const I=Number(y.get("value"));if(E&&!E.has(I))return;const b=y.get("geometryKind")==="fill"?"fill":"line";if(b==="fill"&&!u)return;const N=`${b}:${I}`;let L=P.get(N);return L||(b==="fill"?(L=new V.Style({fill:new V.Fill({color:yi(v,I,l)}),zIndex:0}),P.set(N,L),L):(L=new V.Style({stroke:new V.Stroke({color:C(I),width:d}),text:f?new V.Text({text:Number.isInteger(I)?String(I):String(Number(I.toFixed(1))),fill:new V.Fill({color:"#fff"}),stroke:new V.Stroke({color:"#000",width:3}),placement:"line",overflow:!1}):void 0,zIndex:1}),P.set(N,L),L))},M=Nr(e,t);if(A&&M instanceof Ke&&M.get("isolineGeometryCacheKey")===A)return M.setStyle(x),M.setZIndex(a),M.setVisible(D),M.setDeclutter(f),M.changed(),M;const F=new _r().readFeatures({type:"FeatureCollection",features:[...u||A?i.map(({value:y,...I})=>({type:"Feature",geometry:I,properties:{value:y,geometryKind:"fill"}})):[],...r.map(({value:y,...I})=>({type:"Feature",geometry:I,properties:{value:y,geometryKind:"line"}}))]},{dataProjection:"EPSG:3857",featureProjection:e.getView().getProjection()}),S=new Ke({className:t,source:new ct({features:F}),zIndex:a,visible:D,declutter:f,style:x});return A&&S.set("isolineGeometryCacheKey",A),Pn(e,t),e.addLayer(S),S}async function On(n,e){const{id:t,config:r}=e,i=Fn(n,t);if(!e.url||e.signal?.aborted)return;const o=Tn(e),s=await Sn(o,e);if(e.signal?.aborted||!pi(n,t,i))return;const u=Nr(n,t),{uniqueThresholds:l}=Ce(r.legend??[],r.legendScope);return Mn({map:n,id:t,isolineGeoJSON:s.lines,contourGeoJSON:s.polygons,colorMap:vi(r),fillColorMap:Di(r),fillContours:r.isolineFill===!0,fillOpacity:r.opacity,lineWidth:r.isolineLineWidth??r.lineWidth,showLabel:r.showIsolineValue??r.showIsolineLabel??!0,zIndex:r.zIndex??u?.getZIndex(),visible:u?.getVisible()??!0,geometryCacheKey:o,visibleThresholds:l})}async function Ci(n,e){const t=[...e],r=async()=>{for(;t.length;){if(n.signal?.aborted)return;const i=t.shift(),o=i,s=typeof o?.format=="function"?o.format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"):String(i),u={...n,time:s};await Sn(Tn(u),u)}};await Promise.all(Array.from({length:Math.min(hi,t.length)},()=>r()))}function In(n,e){Fn(n,e),Pn(n,e)}function Xn(n,e,t){const r=Nr(n,e);r&&r.setVisible(t)}class Hn{map;options;ready;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.ready=this.render()}async render(){this.abortController.abort();const e=new AbortController;this.abortController=e;const t=this.options.url;if(t)try{await On(this.map,{...this.options,url:t,signal:e.signal})}catch(r){if(e.signal.aborted)return;throw r}}delete(){this.abortController.abort(),In(this.map,this.options.id)}toggleVisible(e){Xn(this.map,this.options.id,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e.config??{}}},this.ready=this.render(),await this.ready}}const Wr=2;class Rn extends Cr{windVectorCache=new Map;windVectorLoadingTasks=new globalThis.Map;normalizeUrls(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&!!t):typeof e=="string"&&e?[e]:[]}parseScopeValue(e){if(Array.isArray(e)&&e.length>=2){const t=Number(e[0]),r=Number(e[1]);if(Number.isFinite(t)&&Number.isFinite(r))return[t,r]}if(typeof e=="string"){const t=e.split(",").map(r=>Number(r.trim())).filter(r=>Number.isFinite(r));if(t.length>=2)return[t[0],t[1]]}}getComponentScope(e=this.options){const t=e?.config??{},r=t.layerConfig??{},i=this.parseScopeValue(t.componentScope)??this.parseScopeValue(t.uvScope)??this.parseScopeValue(r.COMPONENT_SCALE_RANGE)??this.parseScopeValue(r.COMPONENT_SCOPE)??this.parseScopeValue(r.UV_SCOPE);if(i){const u=Math.max(Math.abs(i[0]),Math.abs(i[1]));return[-u,u]}const o=[t?.scope?.[0],t?.scope?.[1]].map(u=>Math.abs(Number(u))).filter(u=>Number.isFinite(u)),s=o.length?Math.max(...o):60;return[-s,s]}buildWindSpeedGrid(e,t,r,i){const o=Array.from({length:i},()=>Array(r).fill(void 0));for(let s=0;s<i;s++)for(let u=0;u<r;u++){const l=s*r+u,d=e[l],f=t[l],a=typeof d<"u"&&Number.isFinite(Number(d)),D=typeof f<"u"&&Number.isFinite(Number(f));if(!a&&!D)continue;const A=a?Number(d):0,m=D?Number(f):0;o[s][u]=Math.sqrt(A*A+m*m)}return o}prepareGrid(e,t,r){const i=Array.from({length:r},()=>Array(t).fill(NaN));for(let o=0;o<r;o++)for(let s=0;s<t;s++){const u=e[o]?.[s];i[o][s]=u==null||isNaN(Number(u))?NaN:Number(u)}return i}getWindVectorCacheKey(e=this.options){const t=this.normalizeUrls(e?.url);return JSON.stringify({urls:t,authorization:e?.authorization??"",extent:e?.config?.extent,scope:this.getComponentScope(e)})}async getOrLoadWindVectorData(e=this.options){const{url:t,config:r,authorization:i}=e;if(!r?.extent||!Array.isArray(t))return null;const o=this.normalizeUrls(t);if(o.length<2)return null;const s=this.getWindVectorCacheKey(e),u=this.windVectorCache.get(s);if(u)return u;const l=this.windVectorLoadingTasks.get(s);if(l)return l;const d=(async()=>{const f=this.getComponentScope(e),[a,D]=await Promise.all([tt(o[0],f,void 0,i,{detectNoDataByBorderColor:!1}),tt(o[1],f,void 0,i,{detectNoDataByBorderColor:!1})]),A=Math.min(a?.width??0,D?.width??0),m=Math.min(a?.height??0,D?.height??0);if(!A||!m||!a?.grayArr||!D?.grayArr)return null;const C=new Float32Array(A*m),v=new Float32Array(A*m);for(let P=0;P<A*m;P++){const x=Number(a.grayArr[P]),M=Number(D.grayArr[P]);C[P]=Number.isFinite(x)?x:0,v[P]=Number.isFinite(M)?M:0}const E={width:A,height:m,u:C,v,extent:dt(r.extent)};return this.windVectorCache.set(s,E),E})();this.windVectorLoadingTasks.set(s,d);try{return await d}finally{this.windVectorLoadingTasks.get(s)===d&&this.windVectorLoadingTasks.delete(s)}}async getOrLoadContourData(e=this.options){const{url:t,config:r}=e;if(!r?.extent)return null;if(!Array.isArray(t))return super.getOrLoadContourData(e);const i=this.normalizeUrls(t);if(i.length<2)return null;const o=JSON.stringify({urls:i,authorization:e?.authorization??"",extent:r.extent,scope:this.getComponentScope(e)}),s=this.contourCache.get(o);if(s&&s.schemaVersion===Wr)return s;const u=this.contourLoadingTasks.get(o);if(u)return u;const l=(async()=>{const d=await this.getOrLoadWindVectorData(e);if(!d)return null;const{u:f,v:a,width:D,height:A,extent:m}=d,C=this.buildWindSpeedGrid(f,a,D,A),v=Kt(C,D,A),E=this.prepareGrid(C,D,A),P=this.prepareGrid(v,D,A),x={schemaVersion:Wr,rawArr2D:E,smoothArr2D:P,extent:m,width:D,height:A};return this.contourCache.set(o,x),x})();this.contourLoadingTasks.set(o,l);try{return await l}finally{this.contourLoadingTasks.get(o)===l&&this.contourLoadingTasks.delete(o)}}async getSourceFromParams(e=this.options){const{config:t,url:r}=e;if(!t?.extent)return;if(!Array.isArray(r))return super.getSourceFromParams(e);const i=await this.getOrLoadContourData(e);if(!i)return;const{rawArr2D:o,smoothArr2D:s,extent:u,width:l,height:d}=i,f=this.getValueTransformFn(e),a=this.applyValueTransform2D(o,"raw",f),D=this.applyValueTransform2D(s,"smooth",f),{colorMap:A}=Ce(t.legend,t.legendScope),m=ht(t.legend,t.legendScope)??t.scope;return this.getFcstRasterSource({rawArr2D:a,smoothArr2D:D,extent:u,width:l,height:d,colorMap:A,colorMode:t.mode,scope:m},e)}}const Bi="data:image/png;base64,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";class Ar{map;options;contourCache;iconImagePromise;externalWindDataProvider;constructor(e,t,r){this.map=e,this.options=t,this.contourCache=new Map,this.iconImagePromise=null,this.externalWindDataProvider=r,this.add()}getClassName(){return this.options.id+"-windShaft"}normalizeUrls(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&!!t):typeof e=="string"&&e?[e]:[]}getComponentScope(){const e=this.options?.config??{},t=e.layerConfig??{},r=u=>{if(Array.isArray(u)&&u.length>=2){const l=Number(u[0]),d=Number(u[1]);if(Number.isFinite(l)&&Number.isFinite(d))return[l,d]}if(typeof u=="string"){const l=u.split(",").map(d=>Number(d.trim())).filter(d=>Number.isFinite(d));if(l.length>=2)return[l[0],l[1]]}},i=r(e.componentScope)??r(e.uvScope)??r(t.COMPONENT_SCALE_RANGE)??r(t.COMPONENT_SCOPE)??r(t.UV_SCOPE);if(i){const u=Number(i[0]),l=Number(i[1]);if(Number.isFinite(u)&&Number.isFinite(l)){const d=Math.max(Math.abs(u),Math.abs(l));return[-d,d]}}const o=[e?.scope?.[0],e?.scope?.[1]].map(u=>Math.abs(Number(u))).filter(u=>Number.isFinite(u)),s=o.length?Math.max(...o):60;return[-s,s]}getCacheKey(){const e=this.normalizeUrls(this.options?.url);return JSON.stringify({id:this.options?.id,urls:e,extent:this.options?.config?.extent,scope:this.getComponentScope()})}getRuntimeConfig(){return this.options.config}getVisibleWindSpeedScope(){const e=this.getRuntimeConfig();return ht(e.legend,e.legendScope)??e.scope}getWindShaftConfig(){const e=this.getRuntimeConfig(),t=e.windShaftConfig??{},r=e.gridConfig??{},i=(o,s)=>{const u=Number(o);return Number.isFinite(u)?u:s};return{pixelStep:Math.max(8,i(t.pixelStep??r.pixelStep??e.pixelStep,40)),fontSize:Math.max(10,i(t.fontSize??r.fontSize??e.fontSize,26)),color:String(t.color??e.color??"rgb(255,255,255)"),minWindSpeed:Math.max(0,i(t.minWindSpeed,.01)),speedLevelStep:Math.max(.1,i(t.speedLevelStep,2)),maxLevel:Math.max(1,Math.floor(i(t.maxLevel,30))),spriteCellSize:Math.max(1,Math.floor(i(t.spriteCellSize,32))),baseFontSize:Math.max(1,i(t.baseFontSize,32)),iconYOffsetRatio:Math.max(0,i(t.iconYOffsetRatio,.7)),firstRowMaxLevel:Math.max(0,Math.floor(i(t.firstRowMaxLevel,3))),firstRowStartX:Math.floor(i(t.firstRowStartX,28)),firstRowY:Math.floor(i(t.firstRowY,4)),secondRowOffsetX:Math.floor(i(t.secondRowOffsetX,4)),secondRowY:Math.floor(i(t.secondRowY,5))}}async getIconImage(){return this.iconImagePromise?this.iconImagePromise:(this.iconImagePromise=new Promise((e,t)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>e(r),r.onerror=()=>t(new Error("Failed to load wind shaft sprite image")),r.src=Bi}),this.iconImagePromise)}async getOrLoadWindData(){const e=this.getRuntimeConfig();if(!e?.extent)return null;const t=this.getCacheKey(),r=this.contourCache.get(t);if(r)return r;if(this.externalWindDataProvider){const A=await this.externalWindDataProvider();if(A)return this.contourCache.set(t,A),A}const i=this.normalizeUrls(this.options?.url);if(i.length<2)return null;const o=this.getComponentScope(),[s,u]=await Promise.all([tt(i[0],o,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1}),tt(i[1],o,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1})]),l=Math.min(s?.width??0,u?.width??0),d=Math.min(s?.height??0,u?.height??0);if(!l||!d)return null;const f=new Float32Array(l*d),a=new Float32Array(l*d);for(let A=0;A<l*d;A++){const m=Number(s.grayArr[A]),C=Number(u.grayArr[A]);f[A]=Number.isFinite(m)?m:0,a[A]=Number.isFinite(C)?C:0}const D={width:l,height:d,u:f,v:a,extent:dt(e.extent)};return this.contourCache.set(t,D),D}createWindShaftSource(e,t){const r=this.getWindShaftConfig(),{pixelStep:i,fontSize:o,color:s,minWindSpeed:u,speedLevelStep:l,maxLevel:d,spriteCellSize:f,baseFontSize:a,iconYOffsetRatio:D,firstRowMaxLevel:A,firstRowStartX:m,firstRowY:C,secondRowOffsetX:v,secondRowY:E}=r,P=this.getVisibleWindSpeedScope(),x=document.createElement("canvas"),[M,F,S,y]=e.extent,I=S-M,b=y-F;return new Wt({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(N,L,X,z)=>{const g=z??[1,1],w=Math.max(1,Math.floor(g[0]??1)),B=Math.max(1,Math.floor(g[1]??1));x.width!==w&&(x.width=w),x.height!==B&&(x.height=B);const O=this.map.getSize(),H=Math.max(1,Math.floor(O?.[0]??w)),R=Math.max(1,Math.floor(O?.[1]??B)),G=w/H,Q=B/R,Z=(G+Q)*.5,J=x.getContext("2d",{alpha:!0});if(!J)return x;J.clearRect(0,0,w,B);const U=o/a*Z,W=f*U,_=f*U,[K,Y,re,ae]=N,$=re-K,ee=ae-Y;if($<=0||ee<=0||I<=0||b<=0)return x;const ce=Math.max(K,M),oe=Math.max(Y,F),ge=Math.min(re,S),ue=Math.min(ae,y);if(ce>=ge||oe>=ue)return x;const De=Math.max(1,H-1),ye=Math.max(1,R-1),fe=Math.max(8,Math.round(i)),be=Math.max(0,Math.floor((ce-K)/$*De)),te=Math.min(H-1,Math.ceil((ge-K)/$*De)),ie=Math.max(0,Math.floor((ae-ue)/ee*ye)),xe=Math.min(R-1,Math.ceil((ae-oe)/ee*ye));if(be>te||ie>xe)return x;for(let Be=ie;Be<=xe;Be+=fe)for(let Se=be;Se<=te;Se+=fe){const gt=K+$*Se/De,mt=ae-ee*Be/ye,Qe=(gt-M)/I*(e.width-1),At=(y-mt)/b*(e.height-1),Ge=Vt(e.u,Qe,At,e.width,e.height),Me=Vt(e.v,Qe,At,e.width,e.height);if(!Number.isFinite(Ge)||!Number.isFinite(Me))continue;const ot=Math.atan2(Ge,Me)*(180/Math.PI),Oe=Math.sqrt(Ge*Ge+Me*Me);if(Oe<=u)continue;if(Array.isArray(P)&&P.length===2){const yt=Math.min(Number(P[0]),Number(P[1])),st=Math.max(Number(P[0]),Number(P[1]));if(Number.isFinite(yt)&&Number.isFinite(st)&&(Oe<yt||Oe>st))continue}const it=Math.min(Math.ceil(Oe/l),d-1);let pt=m+it,vt=C;it>A&&(pt=it-v,vt=E),J.save();const Dt=Se*G,Ie=Be*Q;J.translate(Dt,Ie),J.rotate(ot*Math.PI/180),J.drawImage(t,pt*f,vt*f,f,f,-W/2,-_*D,W,_),J.globalCompositeOperation="source-atop",J.fillStyle=s,J.fillRect(-W/2,-_*D,W,_),J.globalCompositeOperation="source-over",J.restore()}return x}})}async getSourceFromCache(){const e=this.getCacheKey(),t=this.contourCache.get(e);if(!t)return null;const r=await this.getIconImage();return this.createWindShaftSource(t,r)}async getSourceFromParams(){const e=await this.getOrLoadWindData();if(!e)return null;const t=await this.getIconImage();return this.createWindShaftSource(e,t)}async add(){const e=this.getRuntimeConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):1200,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const s=o?o.getZIndex():t+1,u=await this.getSourceFromCache()??await this.getSourceFromParams();if(!u)return;const l=new Nt({source:u,className:i,zIndex:s,opacity:r});this.map.addLayer(l)}delete(){Fe(this.map,this.getClassName()),this.contourCache.clear(),this.iconImagePromise=null}toggleVisible(e){pe(this.map,this.getClassName(),e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){await this.add();return}const r=await this.getSourceFromCache()??await this.getSourceFromParams();r&&t.setSource(r)}}class zn{map;options;constructor(e,t){this.map=e,this.options=t,this.add()}getClassName(){return this.options.id}getConfig(){return this.options?.config??{}}normalizeParamValue(e){if(e!=null)return Array.isArray(e)?e.join(","):typeof e=="boolean"?e?"true":"false":String(e)}buildWmsParams(){const t=this.getConfig().layerConfig??{},r={};return Object.keys(t).forEach(i=>{const o=this.normalizeParamValue(t[i]);typeof o<"u"&&(r[i]=o)}),r}splitUrlAndParams(e){const[t,r=""]=e.split("?"),i={};return r?(new URLSearchParams(r).forEach((s,u)=>{i[u]=s}),{baseUrl:t,urlParams:i}):{baseUrl:t,urlParams:i}}getTintColorRGB(){const t=(this.options?.config?.layerConfig??{}).TINTCOLOR;if(typeof t>"u"||t===null)return null;const r=String(t).trim();if(!r)return null;const i=r.replace(/^0x/i,"#"),o=i.startsWith("#")?i.slice(1):i;if(/^[0-9a-fA-F]{3}$/.test(o)){const u=parseInt(o[0]+o[0],16),l=parseInt(o[1]+o[1],16),d=parseInt(o[2]+o[2],16);return[u,l,d]}if(/^[0-9a-fA-F]{6}$/.test(o)){const u=parseInt(o.slice(0,2),16),l=parseInt(o.slice(2,4),16),d=parseInt(o.slice(4,6),16);return[u,l,d]}const s=r.split(",").map(u=>Number(u.trim()));return s.length===3&&s.every(u=>Number.isFinite(u)&&u>=0&&u<=255)?[Math.round(s[0]),Math.round(s[1]),Math.round(s[2])]:null}tintBlobToDataUrl(e,t){return new Promise((r,i)=>{const o=new Image,s=URL.createObjectURL(e);o.onload=()=>{const u=document.createElement("canvas");u.width=o.width,u.height=o.height;const l=u.getContext("2d",{willReadFrequently:!0});if(!l){URL.revokeObjectURL(s),i(new Error("Failed to create 2d context for tint"));return}l.clearRect(0,0,u.width,u.height),l.drawImage(o,0,0);const d=l.getImageData(0,0,u.width,u.height),f=d.data;for(let a=0;a<f.length;a+=4)(f[a+3]??0)!==0&&(f[a]=t[0],f[a+1]=t[1],f[a+2]=t[2]);l.putImageData(d,0,0),URL.revokeObjectURL(s),r(u.toDataURL("image/png"))},o.onerror=()=>{URL.revokeObjectURL(s),i(new Error("Failed to decode image for tint"))},o.src=s})}createSource(){const e=this.options?.url;if(!e)return null;const t=this.options?.authorization,r=this.getTintColorRGB(),{baseUrl:i,urlParams:o}=this.splitUrlAndParams(e),s={...o,...this.buildWmsParams()};return new Kr.TileWMS({interpolate:!0,url:i,params:s,tileLoadFunction:(u,l)=>{const d=u.getImage();if(!t&&!r){d.src=l;return}fetch(l,{credentials:"include",headers:t?{Authorization:t}:void 0}).then(async f=>{const a=(f.headers.get("content-type")||"").toLowerCase();if(!f.ok){const D=await f.text();throw new Error(`WMS tile request failed: ${f.status} ${f.statusText}; ${D.slice(0,240)}`)}if(!a.includes("image/")){const D=await f.text();throw new Error(`WMS tile response is not image: ${a}; ${D.slice(0,240)}`)}return f.blob()}).then(async f=>{if(r){d.src=await this.tintBlobToDataUrl(f,r);return}const a=URL.createObjectURL(f);d.onload=()=>{URL.revokeObjectURL(a),d.onload=null,d.onerror=null},d.onerror=()=>{URL.revokeObjectURL(a),d.onload=null,d.onerror=null},d.src=a}).catch(f=>{console.error("[WmsLayer] tile load failed",{src:l,hasAuthorization:!!t,error:f}),d.src="data:image/gif;base64,R0lGODlhAQABAAAAACw="})}})}add(){const e=this.getConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):10,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const s=o?o.getZIndex():t,u=this.createSource();if(!u)return;const l=new Zr({className:i,source:u,zIndex:s,opacity:r});this.map.addLayer(l)}delete(){Fe(this.map,this.getClassName())}toggleVisible(e){pe(this.map,this.getClassName(),e)}updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){this.add();return}const r=this.createSource();r&&t.setSource(r);const i=this.getConfig(),o=Number(i.zIndex),s=Number(i.opacity);Number.isFinite(o)&&t.setZIndex(o),Number.isFinite(s)&&t.setOpacity(s)}updateColor(e){const r={...this.options?.config?.layerConfig??{}};typeof e.styles<"u"&&(r.STYLES=e.styles),typeof e.colorScaleRange<"u"&&(r.COLORSCALERANGE=Array.isArray(e.colorScaleRange)?e.colorScaleRange.join(","):String(e.colorScaleRange)),typeof e.numColorBands<"u"&&(r.NUMCOLORBANDS=String(e.numColorBands)),typeof e.aboveMaxColor<"u"&&(r.ABOVEMAXCOLOR=e.aboveMaxColor),typeof e.belowMinColor<"u"&&(r.BELOWMINCOLOR=e.belowMinColor),typeof e.bgColor<"u"&&(r.BGCOLOR=e.bgColor),typeof e.logScale<"u"&&(r.LOGSCALE=typeof e.logScale=="boolean"?e.logScale?"true":"false":e.logScale),this.updateParams({...this.options,config:{...this.options.config,layerConfig:r}})}}function Ei(n){return String(n??"").trim().replace(/\/+$/,"")}function xi(n,e){const t=ve();return`${Ei(e||t.typhoonServiceBaseUrl||t.serviceBaseUrl)}/${n.replace(/^\/+/,"")}`}async function qn(n,e){const t=ve(),r=e?.authorization??t.typhoonAuthorization,i=await fetch(xi(n,e?.serviceBaseUrl),{credentials:"include",signal:e?.signal,headers:r?{Authorization:r}:void 0}),o=(i.headers.get("content-type")||"").toLowerCase();if(!i.ok){const s=await i.text();throw new Error(`Typhoon request failed: ${i.status} ${i.statusText}; ${s.slice(0,240)}`)}if(!o.includes("application/json")&&!o.includes("+json")){const s=await i.text();throw new Error(`Typhoon response has invalid content type: ${o||"unknown"}; ${s.slice(0,240)}`)}return await i.json()}function Qn(n){const e=n?.dataPath||ve().typhoonDataPath;return qn(`fileServer/${e}/typhoon_list.json`,n)}function Gn(n,e){const t=e?.dataPath||ve().typhoonDataPath;return qn(`fileServer/${t}/${n}.json`,e)}const Ni=["BABJ|WTPQ20","RJTD|WTPQ51","RJTD|WTPQ50"],Yr=["#d9480f","#1971c2","#2b8a3e","#862e9c","#0b7285","#c92a2a"],Pi={TD:"热带低压",TS:"热带风暴","TROPICAL STORM":"热带风暴",STS:"强热带风暴",TY:"台风",STY:"强台风",SuperTY:"超强台风"};function Rt(n){return Array.isArray(n)?n:Array.isArray(n?.points)?n.points:[]}function Ti(n){return Number.isFinite(n?.lon)&&Number.isFinite(n?.lat)}function zt(n){return n.filter(Ti).slice().sort((e,t)=>{const r=Date.parse(e.datetime||""),i=Date.parse(t.datetime||"");return Number.isFinite(r)&&Number.isFinite(i)&&r!==i?r-i:Number(e.validtime||0)-Number(t.validtime||0)})}class kn{map;options;abortController;styleCache;constructor(e,t){this.map=e,this.options=t,this.abortController=null,this.styleCache=new globalThis.Map,this.add()}getClassName(){return this.options.id}getConfig(){return this.options.config?.typhoonConfig??{}}async add(){de(this.map,this.getClassName())&&this.delete(),this.abortController?.abort(),this.abortController=new AbortController;try{const t=await Qn({serviceBaseUrl:this.getConfig().serviceBaseUrl,dataPath:this.getConfig().dataPath,authorization:this.options.authorization,signal:this.abortController.signal});if(this.abortController.signal.aborted)return;const r=this.getSelectedTyphoonNums(t),i=await Promise.all(r.map(o=>Gn(o,{serviceBaseUrl:this.getConfig().serviceBaseUrl,dataPath:this.getConfig().dataPath,authorization:this.options.authorization,signal:this.abortController?.signal})));if(this.abortController.signal.aborted)return;this.render(t,i)}catch(t){console.error("[TyphoonLayer] load failed",t)}}getSelectedTyphoonNums(e){const t=this.getConfig().typhoonNums?.filter(Boolean);if(t?.length)return t;const r=e[0],i=r?r.num_inati||r.num_nati:"";return i?[i]:[]}getPrimarySource(e,t){const r=t==="obs"?e.obs:e.fcst,i=Object.keys(r??{});return(this.getConfig().sourcePriority??Ni).find(s=>i.includes(s))??i[0]}getLastPoint(e){return e.length?e[e.length-1]:void 0}findForecastBasePoint(e,t){if(t)for(let r=e.length-1;r>=0;r--){const i=e[r];if(i.file_ts===t.file_ts||i.datetime===t.datetime)return i}}getForecastAnchorPoint(e,t,r,i){const o=r[0];if(!o)return;const s=zt(Rt(e.obs?.[t])),u=this.findForecastBasePoint(s,o);if(u)return u;const l=this.getLastPoint(s);if(l)return l;const d=i?zt(Rt(e.obs?.[i])):[];return this.findForecastBasePoint(d,o)??this.getLastPoint(d)}render(e,t){const r=Number.isFinite(Number(this.options.config?.zIndex))?Number(this.options.config.zIndex):30,i=de(this.map,this.getClassName());i&&this.delete();const o=i?i.getZIndex():r,s=new ct;t.forEach((l,d)=>{const f=e.find(a=>a.num_inati===l.typhoon_num);this.appendTyphoonFeatures(s,l,f,Yr[d%Yr.length])});const u=new Ke({className:this.getClassName(),source:s,zIndex:o,style:l=>this.createStyle(l)});this.map.addLayer(u),this.getConfig().fitToExtent!==!1&&!s.isEmpty()&&this.map.getView().fit(s.getExtent(),{padding:[80,80,80,80],duration:350,maxZoom:7})}appendTyphoonFeatures(e,t,r,i){const o=r?.name_cn||t.name_cn||t.name_en||t.typhoon_num,s=this.getPrimarySource(t,"obs");if(Object.entries(t.obs??{}).forEach(([d,f])=>{const a=zt(Rt(f));if(!a.length)return;const D=d===s;this.addLineFeature(e,a,{kind:"obs",sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num}),D&&this.addPointFeatures(e,a,{kind:"obs",sourceName:d,color:i,typhoonName:o,typhoonNum:t.typhoon_num})}),this.getConfig().showForecast===!1)return;const l=this.getPrimarySource(t,"fcst");Object.entries(t.fcst??{}).forEach(([d,f])=>{const a=zt(Rt(f));if(!a.length)return;const D=d===l,A=this.getForecastAnchorPoint(t,d,a,s),m=A?[A,...a]:a;this.addLineFeature(e,m,{kind:"fcst",sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num}),this.addForecastLabelFeature(e,a[a.length-1],{sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num})})}addLineFeature(e,t,r){if(!(t.length<2))for(let i=1;i<t.length;i++){const o=t[i-1],s=t[i],u=new tr.LineString([at.fromLonLat([o.lon,o.lat]),at.fromLonLat([s.lon,s.lat])]);e.addFeature(new er({geometry:u,featureType:`${r.kind}-line`,grade:s.grade,...r}))}}addPointFeatures(e,t,r){t.forEach((i,o)=>{const s=o===t.length-1,u=new er({geometry:new tr.Point(at.fromLonLat([i.lon,i.lat])),featureType:s?"latest-point":"obs-point",datetime:i.datetime,grade:i.grade,windMax:i.wind_max_ms,pressure:i.prs_hpa,...r});e.addFeature(u)})}addForecastLabelFeature(e,t,r){const i=new er({geometry:new tr.Point(at.fromLonLat([t.lon,t.lat])),featureType:"fcst-label",datetime:t.datetime,grade:t.grade,windMax:t.wind_max_ms,pressure:t.prs_hpa,...r});e.addFeature(i)}createStyle(e){const t=String(e.get("featureType")||""),r=String(e.get("color")||"#d9480f"),i=String(e.get("sourceName")||""),o=String(e.get("grade")||""),s=String(e.get("typhoonName")||""),u=!!e.get("isPrimary"),l=[t,r,i,o,s,u].join("|"),d=this.styleCache.get(l);if(d)return d;const f=this.getGradeColor(o,r);let a;if(t==="obs-line")a=new V.Style({stroke:new V.Stroke({color:u?f:`${f}80`,width:u?3:1.5})});else if(t==="fcst-line")a=new V.Style({stroke:new V.Stroke({color:u?f:`${f}80`,width:u?2:1.25,lineDash:[8,8]})});else if(t==="fcst-label")a=new V.Style({image:new V.Circle({radius:u?4.5:3.5,fill:new V.Fill({color:f}),stroke:new V.Stroke({color:"#fff",width:1.5})}),text:new V.Text({text:i,font:u?"bold 12px sans-serif":"12px sans-serif",fill:new V.Fill({color:"#1f2937"}),stroke:new V.Stroke({color:"#fff",width:4}),offsetX:8,offsetY:-8,textAlign:"left"})});else{const D=t==="latest-point";a=new V.Style({image:new V.Circle({radius:D?6:4,fill:new V.Fill({color:f}),stroke:new V.Stroke({color:"#fff",width:D?2:1.5})}),text:D?new V.Text({text:s,font:"bold 13px sans-serif",fill:new V.Fill({color:"#1f2937"}),stroke:new V.Stroke({color:"#fff",width:4}),offsetY:-16}):void 0})}return this.styleCache.set(l,a),a}getGradeColor(e,t){const r=String(e||"").trim();if(!r)return t;const i=Pi[r]||r,o=this.options.config.legend.find(u=>u.name===i),s=this.options.config.legend.find(u=>u.name==="其他");return o?.color||s?.color||t}delete(){this.abortController?.abort(),Fe(this.map,this.getClassName())}toggleVisible(e){pe(this.map,this.getClassName(),e)}updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}},this.add()}}const Li={center:[118.7969,32.0603],zoom:5,layers:[]};function Fi(n,e){e?.mapMethodsConfig&&en(e.mapMethodsConfig);const t={...Li,...e??{}};return new Promise(r=>{const i=new jn.Map({target:n,layers:[],view:new Un({center:at.fromLonLat(t.center),zoom:t.zoom}),controls:[]});t.layers.forEach(o=>{Vn(i,o)}),r(i)})}function de(n,e){return n.getLayers().getArray().find(r=>r.getClassName()===e)}function Fe(n,e){const t=de(n,e);t&&n.removeLayer(t)}function Vn(n,e){const t=new Zr({className:e.id,source:new Kr.XYZ({...e.source}),zIndex:e.zIndex??0});n.addLayer(t)}function Si(n,e){Fe(n,e)}function pe(n,e,t){if(!n)return;const r=de(n,e);r&&r.setVisible(t)}const se=[];function Mi(n,e){if(!n)return;const t=Array.isArray(e.type)?e.type:[e.type];if(t.includes("gradual")){const r=new Cr(n,e);if(se.push(r),t.includes("grid")){const i={...e,type:"grid"},o=new kt(n,i,async()=>{const s=await r.getOrLoadContourData();return s?{rawArr2D:s.rawArr2D,extent:s.extent,width:s.width,height:s.height}:null});fr(e.id,o)}}else if(t.includes("uv")){const r=new Rn(n,e);if(se.push(r),t.includes("grid")){const i={...e,type:"grid"},o=new kt(n,i,async()=>{const s=await r.getOrLoadContourData();return s?{rawArr2D:s.rawArr2D,extent:s.extent,width:s.width,height:s.height}:null});fr(e.id,o)}if(t.includes("windShaft")){const i=new Ar(n,e,async()=>r.getOrLoadWindVectorData());se.push(i)}}else if(t.includes("grid")){const r=new kt(n,e);se.push(r)}else if(t.includes("arrow")){const r=new An(n,e);se.push(r)}else if(t.includes("micaps")){const r=new Nn(n,e);se.push(r)}else if(t.includes("isoline")||t.includes("contour")){const r=new Hn(n,e);se.push(r)}else if(t.includes("wms")){const r=new zn(n,e);se.push(r)}else if(t.includes("typhoon")){const r=new kn(n,e);se.push(r)}else if(t.includes("windShaft")){const r=new Ar(n,e);se.push(r)}}function Oi(n){for(let t=se.length-1;t>=0;t--)se[t].options.id===n&&(se[t].delete(),se.splice(t,1));const e=_t(n);e&&(e.delete(),dn(n))}function Ii(){se.forEach(n=>{n.delete()}),gn(n=>{n.delete()}),mn(),se.length=0}function Xi(n,e){se.filter(i=>i.options.id===n).forEach(i=>{i.toggleVisible(e)});const r=_t(n);r&&r.toggleVisible(e)}function Hi(n){const e=se.filter(r=>r.options.id===n.id);console.log("🚀 ~ updateLayer ~ layer:",se,n,e),e.forEach(r=>{r.updateParams(n)});const t=_t(n.id);t&&t.updateParams({...n,type:"grid"})}function Ri(n,e){se.filter(r=>r.options.id===n).forEach(r=>{typeof r.updateColor=="function"&&r.updateColor(e)})}function zi(){return se}function qi(){const n=new globalThis.Map;return se.forEach(e=>{const t=e?.options;!t?.id||n.has(t.id)||n.set(t.id,t)}),Array.from(n.values())}function Qi(n,e,t,r,i=!1){if(!n)return Promise.resolve(null);const o=se.find(s=>s.options.id===e);return o&&typeof o.getValueByLonLat=="function"?o.getValueByLonLat(t,r,i):Promise.resolve(null)}exports.ArrowLayer=An;exports.CommonMethods=Yn;exports.FcstLayer=Cr;exports.GridLayer=kt;exports.IsolineLayer=Hn;exports.MIC_FREEZING_RAIN_DEFAULTS=Te;exports.MIC_FROST_LINE_DEFAULTS=rt;exports.MicLayer=Nn;exports.TyphoonLayer=kn;exports.WindLayer=Rn;exports.WindShaft=Ar;exports.WmsLayer=zn;exports.addIsolineLayer=Mn;exports.addTile=Vn;exports.bboxFromLonlatTo3857=dt;exports.bilinearInterpolate=Vt;exports.clampByte=Ze;exports.clearAllLayers=Ii;exports.clearLinkedGridLayerMap=mn;exports.configureMapMethods=en;exports.convertContourGeoJSONTo3857=po;exports.convertContourGeoJSONToLngLat=Ao;exports.createIsoline=On;exports.createMicContour=En;exports.createTdsRequestUrl=tn;exports.deleteLinkedGridLayer=dn;exports.fetchExcel=ro;exports.fetchImageBase64=nn;exports.fetchTdsGet=Jt;exports.fetchTdsImageBase64=oo;exports.fetchTdsResponse=Yt;exports.fetchTxtOrJson=to;exports.fetchXMLFromUrl=rn;exports.fetchXmlData=pr;exports.forEachLinkedGridLayer=gn;exports.gaussianBlur2D=Kt;exports.generateLegend=Ce;exports.getContourParams=Pt;exports.getGrayDataFromImage=tt;exports.getLayerByClassName=de;exports.getLegendItemsByScope=yr;exports.getLegendValueScope=ht;exports.getLinkedGridLayer=_t;exports.getLoadedLayerOptions=qi;exports.getLoadedLayers=zi;exports.getMapMethodsConfig=ve;exports.getMenuList=ln;exports.getNCXmlData=cn;exports.getNodeData=cr;exports.getRasterRequestGeometry=br;exports.getTyphoonDetail=Gn;exports.getTyphoonList=Qn;exports.getUrlFromTime=ar;exports.getValueByLonLat=Qi;exports.getVariableMinMax=wr;exports.getWidthAndHeight=an;exports.getXmlData=Gt;exports.initMap=Fi;exports.lerp=Et;exports.loadLayer=Mi;exports.mapValueToRGBA=Do;exports.normalizeSmoothnessLevel=_e;exports.parseAlpha=ur;exports.parseColorToRGBA=xt;exports.parseCssNumber=Je;exports.parseXML=jt;exports.pixelTo3857=sn;exports.pixelToLngLat=un;exports.preloadIsoline=Ci;exports.preloadMicContours=ni;exports.removeIsolineLayer=In;exports.removeLayer=Fe;exports.removeLayerById=Oi;exports.removeMicContour=xn;exports.removeTile=Si;exports.renderFcstCanvasByWebGPU=hn;exports.resetMapMethodsConfig=Jn;exports.resolveLayerLoadOptions=Bo;exports.resolveSymFunction=vr;exports.setLinkedGridLayer=fr;exports.smoothGridByLevel=Dr;exports.toggleIsolineLayer=Xn;exports.toggleLayerShowHide=pe;exports.toggleVisibleById=Xi;exports.updateLayer=Hi;exports.updateWmsLayerColor=Ri;
|
|
280
|
+
}`;try{const m=So(a,D,A);a.useProgram(m);const C=new Float32Array([-1,-1,1,-1,-1,1,1,1]),v=a.createBuffer();if(!v)return a.deleteProgram(m),null;a.bindBuffer(a.ARRAY_BUFFER,v),a.bufferData(a.ARRAY_BUFFER,C,a.STATIC_DRAW);const E=a.getAttribLocation(m,"a_position");if(E<0)return a.deleteBuffer(v),a.deleteProgram(m),null;a.enableVertexAttribArray(E),a.vertexAttribPointer(E,2,a.FLOAT,!1,0,0);const N=a.createTexture();if(!N)return a.deleteBuffer(v),a.deleteProgram(m),null;const T=a.createTexture();if(!T)return a.deleteTexture(N),a.deleteBuffer(v),a.deleteProgram(m),null;const O=a.createTexture();if(!O)return a.deleteTexture(T),a.deleteTexture(N),a.deleteBuffer(v),a.deleteProgram(m),null;const I=Ut(e,t,i),F=Ut(e,t,r),b=xo(e,t,r);a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,N),a.pixelStorei(a.UNPACK_ALIGNMENT,1),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R32F,e,t,0,a.RED,a.FLOAT,I),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,T),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R32F,e,t,0,a.RED,a.FLOAT,F),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,O),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.R8,e,t,0,a.RED,a.UNSIGNED_BYTE,b);const S=new Float32Array(Ye),y=new Float32Array(Ye*4),x=Math.min(o.length,Ye);for(let w=0;w<x;w++){S[w]=o[w]??0;const B=s[w]??[0,0,0,0],M=w*4;y[M]=B[0],y[M+1]=B[1],y[M+2]=B[2],y[M+3]=B[3]??255}const L=l&&typeof l[0]<"u"?Number(l[0]):0,X=l&&typeof l[1]<"u"?Number(l[1]):0,R=l&&typeof l[0]<"u"?1:0,g=l&&typeof l[1]<"u"?1:0;return a.uniform1i(a.getUniformLocation(m,"u_values"),0),a.uniform1i(a.getUniformLocation(m,"u_maskValues"),1),a.uniform1i(a.getUniformLocation(m,"u_validMask"),2),a.uniform1i(a.getUniformLocation(m,"u_thresholdCount"),x),a.uniform1i(a.getUniformLocation(m,"u_colorMode"),u==="gradient"?1:0),a.uniform1fv(a.getUniformLocation(m,"u_thresholds"),S),a.uniform4fv(a.getUniformLocation(m,"u_colors"),y),a.uniform1f(a.getUniformLocation(m,"u_minScope"),L),a.uniform1f(a.getUniformLocation(m,"u_maxScope"),X),a.uniform1i(a.getUniformLocation(m,"u_hasMin"),R),a.uniform1i(a.getUniformLocation(m,"u_hasMax"),g),a.uniform1i(a.getUniformLocation(m,"u_softenMaskEdge"),d?1:0),a.viewport(0,0,e,t),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.drawArrays(a.TRIANGLE_STRIP,0,4),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,null),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,null),a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,null),a.bindBuffer(a.ARRAY_BUFFER,null),a.deleteTexture(O),a.deleteTexture(N),a.deleteTexture(T),a.deleteBuffer(v),a.deleteProgram(m),f}catch(m){return console.warn("[FcstLayer] WebGL2 渲染失败",m),null}}async function Oo(n){const{width:e,height:t,rawArr2D:r,smoothArr2D:i,thresholds:o,colorsRGBA:s,colorMode:u="discrete",scope:l,softenMaskEdge:d=!0}=n;if(!e||!t||!o.length||!s.length)return null;try{const f=await No();if(!f)return null;f.pushErrorScope("validation");const a=e*t,D=Ut(e,t,i),A=Ut(e,t,r),m=new Float32Array(o),C=new Float32Array(m.length*4);for(let _=0;_<m.length;_++){const K=s[_]??[0,0,0,0],Y=_*4;C[Y]=K[0],C[Y+1]=K[1],C[Y+2]=K[2],C[Y+3]=K[3]??255}const v=l&&typeof l[0]<"u"?Number(l[0]):0,E=l&&typeof l[1]<"u"?Number(l[1]):0,N=l&&typeof l[0]<"u"?1:0,T=l&&typeof l[1]<"u"?1:0,O=new ArrayBuffer(48),I=new DataView(O);I.setUint32(0,e,!0),I.setUint32(4,t,!0),I.setUint32(8,m.length,!0),I.setUint32(12,u==="gradient"?1:0,!0),I.setFloat32(16,v,!0),I.setFloat32(20,E,!0),I.setUint32(24,N,!0),I.setUint32(28,T,!0),I.setUint32(32,d?1:0,!0);const F=globalThis.GPUBufferUsage,b=globalThis.GPUMapMode,S=Bt(f,D.buffer,F.STORAGE|F.COPY_DST),y=Bt(f,A.buffer,F.STORAGE|F.COPY_DST),x=Bt(f,m.buffer,F.STORAGE|F.COPY_DST),L=Bt(f,C.buffer,F.STORAGE|F.COPY_DST),X=Bt(f,O,F.UNIFORM|F.COPY_DST),R=a*4,g=f.createBuffer({size:R,usage:F.STORAGE|F.COPY_SRC}),w=f.createBuffer({size:R,usage:F.COPY_DST|F.MAP_READ}),B=f.createShaderModule({code:Po()}),M=f.createComputePipeline({layout:"auto",compute:{module:B,entryPoint:"main"}}),H=f.createBindGroup({layout:M.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:S}},{binding:1,resource:{buffer:y}},{binding:2,resource:{buffer:x}},{binding:3,resource:{buffer:L}},{binding:4,resource:{buffer:X}},{binding:5,resource:{buffer:g}}]}),z=f.createCommandEncoder(),k=z.beginComputePass();k.setPipeline(M),k.setBindGroup(0,H),k.dispatchWorkgroups(Math.ceil(a/64)),k.end(),z.copyBufferToBuffer(g,0,w,0,R),f.queue.submit([z.finish()]);const Q=await f.popErrorScope();if(Q)return S.destroy(),y.destroy(),x.destroy(),L.destroy(),X.destroy(),g.destroy(),w.destroy(),console.warn("[FcstLayer] WebGPU validation error",Q),null;await w.mapAsync(b.READ);const Z=w.getMappedRange(),J=new Uint8ClampedArray(Z.slice(0));w.unmap();const U=document.createElement("canvas");U.width=e,U.height=t;const W=U.getContext("2d");return W?(W.putImageData(new ImageData(J,e,t),0,0),S.destroy(),y.destroy(),x.destroy(),L.destroy(),X.destroy(),g.destroy(),w.destroy(),U):null}catch(f){return console.warn("[FcstLayer] WebGPU 渲染失败",f),null}}async function dn(n){const e=Mo(n);if(e)return e;const t=await Oo(n);if(t)return console.warn("[FcstLayer] 当前环境不支持 WebGL2,已自动使用 WebGPU"),t;const r=Fo(n);return r?(console.warn("[FcstLayer] GPU 渲染不可用,已自动回退到 Canvas2D CPU 渲染"),r):(console.warn("[FcstLayer] 渲染不可用:WebGL2/WebGPU/Canvas2D 都不可用"),null)}const St=5,Io=12,Xo=8;class Br{map;options;contourCache;contourLoadingTasks;rasterRenderCache;rasterRenderLoadingTasks;layerData;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.contourCache=new Map,this.contourLoadingTasks=new globalThis.Map,this.rasterRenderCache=new globalThis.Map,this.rasterRenderLoadingTasks=new globalThis.Map,this.ready=this.add()}beginSourceRequest(){return this.abortController.abort(),this.abortController=new AbortController,++this.sourceRequestVersion}isCurrentRequest(e){return e===this.sourceRequestVersion&&!this.abortController.signal.aborted}getRequestOptions(){return{...this.options,config:{...this.options?.config??{}},signal:this.abortController.signal}}getContourCacheKey(e=this.options){const t=e?.config??{};return JSON.stringify({url:e?.url??"",authorization:e?.authorization??"",compareUrl:e?.compareUrl??"",zeroCompare:e?.zeroCompare===!0,fusionConfig:e?.config?.fusionConfig?{url:e.config.fusionConfig.url??"",serviceBaseUrl:e.config.fusionConfig.serviceBaseUrl??"",authorization:e.config.fusionConfig.authorization??"",layerName:e.config.fusionConfig.layerName,scope:e.config.fusionConfig.scope,precipitationThreshold:e.config.fusionConfig.precipitationThreshold??0}:void 0,extent:t.extent??[],scope:t.scope??[]})}setCachedContourData(e,t){for(this.contourCache.delete(e),this.contourCache.set(e,t);this.contourCache.size>Io;){const r=this.contourCache.keys().next().value;if(r===void 0)break;this.contourCache.delete(r)}}getRasterRenderCacheKey(e,t){const r=e?.config??{},i=Object.keys(t).map(Number).filter(Number.isFinite).sort((o,s)=>o-s).map(o=>[o,t[o]]);return JSON.stringify({data:this.getContourCacheKey(e),mode:r.mode??"discrete",colors:i,valueTransform:typeof r.valueTransform=="function"?String(r.valueTransform):r.valueTransform??"",alignWithIsoline:r.alignWithIsoline===!0,isolineSmooth:r.isolineSmooth!==!1,isolineSmoothness:_e(r.isolineSmoothness)})}setCachedRasterRender(e,t){for(this.rasterRenderCache.delete(e),this.rasterRenderCache.set(e,t);this.rasterRenderCache.size>Xo;){const r=this.rasterRenderCache.keys().next().value;if(r===void 0)break;this.rasterRenderCache.delete(r)}}async add(){const{id:e,config:t}=this.options,{zIndex:r=10,opacity:i=1}=t,o=de(this.map,e),s=o?.getZIndex()??r,u=this.beginSourceRequest(),l=this.getRequestOptions(),d=await this.getSourceFromCache(l);if(!this.isCurrentRequest(u))return;const f=d??await this.getSourceFromParams(l);if(!this.isCurrentRequest(u)||!f)return;const a=new Nt({className:e,source:f,zIndex:s,opacity:i,visible:o?.getVisible()??!0});return Fe(this.map,e),this.map.addLayer(a),a}async getSourceFromParams(e=this.options){const{config:t}=e,{mode:r,legend:i,legendScope:o}=t,s=await this.getOrLoadContourData(e);if(!s||e?.signal?.aborted)return;const{rawArr2D:u,smoothArr2D:l,extent:d,width:f,height:a}=s,D=this.getValueTransformFn(e),A=this.applyValueTransform2D(u,"raw",D),m=this.applyValueTransform2D(l,"smooth",D),{colorMap:C}=Ce(i),{colorMap:v}=Ce(i,o),E=ht(i,o)??t.scope;return await this.getFcstRasterSource({smoothArr2D:m,rawArr2D:A,extent:d,width:f,height:a,colorMap:C,selectedColorMap:v,colorMode:r,scope:E,rasterCacheKey:this.getRasterRenderCacheKey(e,C)},e)}async getOrLoadContourData(e=this.options){const t=this.getContourCacheKey(e),r=this.contourCache.get(t);if(r&&r.schemaVersion===St)return this.contourCache.delete(t),this.contourCache.set(t,r),r;const i=this.contourLoadingTasks.get(t);if(i)return i;const o=(async()=>{const s=e?.config?.fusionConfig;let u;if(s?.url)u=await this.fuseDataSources({url:e.url,authorization:e.authorization,serviceBaseUrl:e.serviceBaseUrl,config:{...e.config,fusionConfig:void 0}},{url:s.url,authorization:s.authorization??e.authorization,serviceBaseUrl:s.serviceBaseUrl??e.serviceBaseUrl,config:{...e.config,fusionConfig:void 0,scope:s.scope,layerConfig:{...e.config.layerConfig??{},LAYERS:s.layerName}}},(C,v)=>{const E=Math.round(C);return v>(s.precipitationThreshold??0)&&E>=1&&E<=4?E:void 0}),u&&(u={...u,smoothArr2D:u.rawArr2D.map(C=>C.slice())});else{if(s)return null;u=await Pt(e)}if(!u)return null;const{uniqueThresholds:l,rawArr2D:d,smoothArr2D:f,extent:a,width:D,height:A}=u,m={schemaVersion:St,uniqueThresholds:l,rawArr2D:d,smoothArr2D:f,extent:a,width:D,height:A};return this.setCachedContourData(t,m),m})();this.contourLoadingTasks.set(t,o);try{return await o}finally{this.contourLoadingTasks.get(t)===o&&this.contourLoadingTasks.delete(t)}}resolveFusionSource(e){const t=this.options,r=typeof e=="string"?{url:e}:e,i=r.url?.trim();if(!i)throw new TypeError("FcstLayer fusion source URL cannot be empty");const o=typeof e=="string"?this.abortController.signal:e.signal;return{...t,...r,url:i,signal:o??this.abortController.signal,config:{...t?.config??{},...typeof e=="string"?{}:e.config??{}}}}resolveFusionMethod(e){if(typeof e=="function")return e;switch(e){case"add":return(t,r)=>t+r;case"subtract":return(t,r)=>t-r;case"multiply":return(t,r)=>t*r;case"divide":return(t,r)=>r===0?void 0:t/r;case"average":return(t,r)=>(t+r)/2;case"min":return(t,r)=>Math.min(t,r);case"max":return(t,r)=>Math.max(t,r);default:throw new TypeError(`Unsupported FcstLayer fusion method: ${String(e)}`)}}assertFusionDataCompatible(e,t){if(e.width!==t.width||e.height!==t.height||e.width<=0||e.height<=0)throw new RangeError(`FcstLayer fusion requires matching grid sizes; received ${e.width}x${e.height} and ${t.width}x${t.height}`);if(!e.extent.every((o,s)=>{const u=t.extent[s];if(typeof u!="number"||!Number.isFinite(o)||!Number.isFinite(u))return!1;const l=Math.max(1,Math.abs(o),Math.abs(u))*1e-9;return Math.abs(o-u)<=l}))throw new RangeError(`FcstLayer fusion requires matching extents; received [${e.extent.join(", ")}] and [${t.extent.join(", ")}]`);const i=[["first raw",e.rawArr2D],["first smooth",e.smoothArr2D],["second raw",t.rawArr2D],["second smooth",t.smoothArr2D]];for(const[o,s]of i)if(s.length!==e.height||s.some(u=>!u||u.length!==e.width))throw new RangeError(`FcstLayer fusion received an invalid ${o} grid`)}fuseGrid(e,t,r,i,o,s){const u=Array.from({length:i},()=>Array(r).fill(NaN));for(let l=0;l<i;l++)for(let d=0;d<r;d++){const f=e[l]?.[d],a=t[l]?.[d];if(f==null||a==null)continue;const D=Number(f),A=Number(a);if(!Number.isFinite(D)||!Number.isFinite(A))continue;const m=s(D,A,{x:d,y:l,width:r,height:i,source:o});if(m==null)continue;const C=Number(m);u[l][d]=Number.isFinite(C)?C:NaN}return u}async fuseDataSources(e,t,r="average"){const i=this.resolveFusionMethod(r),o=this.resolveFusionSource(e),s=this.resolveFusionSource(t),[u,l]=await Promise.all([this.getOrLoadContourData(o),this.getOrLoadContourData(s)]);if(!u||!l||o.signal?.aborted||s.signal?.aborted)return null;this.assertFusionDataCompatible(u,l);const{width:d,height:f,extent:a,uniqueThresholds:D}=u;return{uniqueThresholds:D,rawArr2D:this.fuseGrid(u.rawArr2D,l.rawArr2D,d,f,"raw",i),smoothArr2D:this.fuseGrid(u.smoothArr2D,l.smoothArr2D,d,f,"smooth",i),extent:a,width:d,height:f}}async getValueByLonLat(e,t,r=!1){if(!Number.isFinite(e)||!Number.isFinite(t))return null;const i={...this.options,config:{...this.options?.config??{}}},o=await this.getOrLoadContourData(i);if(!o)return null;const{rawArr2D:s,smoothArr2D:u,extent:l,width:d,height:f}=o,a=r?u:s;if(!a||d<=0||f<=0)return null;const D=at.fromLonLat([e,t]);if(D.length<2)return null;const A=D[0],m=D[1],[C,v,E,N]=l,T=E-C,O=N-v;if(T<=0||O<=0||A<C||A>E||m<v||m>N)return null;const I=(A-C)/T*(d-1),F=(N-m)/O*(f-1),b=Math.max(0,Math.min(d-1,Math.round(I))),S=Math.max(0,Math.min(f-1,Math.round(F))),y=a?.[S]?.[b];if(y==null||isNaN(Number(y)))return null;const x=this.applyValueTransformValue(Number(y),{x:b,y:S,width:d,height:f,source:r?"smooth":"raw"},this.getValueTransformFn(i));return x==null||isNaN(Number(x))?null:Number(x)}async getValueByLngLat(e,t,r=!1){return this.getValueByLonLat(e,t,r)}async getSourceFromCache(e=this.options){const{config:t}=e,{mode:r,legend:i,legendScope:o}=t,s=this.getContourCacheKey(e);if(this.contourCache.has(s)){const u=this.contourCache.get(s);if(!u||u.schemaVersion!==St)return this.contourCache.delete(s),null;this.contourCache.delete(s),this.contourCache.set(s,u);const{colorMap:l}=Ce(i),{colorMap:d}=Ce(i,o),f=this.getValueTransformFn(e),a=this.applyValueTransform2D(u.rawArr2D,"raw",f),D=this.applyValueTransform2D(u.smoothArr2D,"smooth",f);return await this.getFcstRasterSource({...u,rawArr2D:a,smoothArr2D:D,colorMap:l,selectedColorMap:d,colorMode:r,scope:ht(i,o)??t.scope,rasterCacheKey:this.getRasterRenderCacheKey(e,l)},e)}return null}async getFcstRasterSource(e,t=this.options){const{rawArr2D:r,smoothArr2D:i,extent:o,width:s,height:u,colorMap:l,selectedColorMap:d=l,colorMode:f="discrete",scope:a,rasterCacheKey:D=this.getRasterRenderCacheKey(t,l)}=e,A=Object.keys(l).map(b=>Number(b)).filter(b=>!isNaN(b)).sort((b,S)=>b-S),m=A.map(b=>xt(l[b]));let C=this.rasterRenderCache.get(D);if(C)this.rasterRenderCache.delete(D),this.rasterRenderCache.set(D,C);else{let b=this.rasterRenderLoadingTasks.get(D);b||(b=(async()=>{const S=t?.config?.alignWithIsoline===!0,y=t?.config?.isolineSmooth===!1?0:_e(t?.config?.isolineSmoothness),x=S?yr(r,s,u,y):i,L=r,X=S&&f!=="gradient"?this.createIsolineContourFills(x,s,u,A,m,void 0,t):void 0;let R;if(S&&f!=="gradient"?(R=document.createElement("canvas"),R.width=Math.max(1,Math.floor(s)),R.height=Math.max(1,Math.floor(u))):R=await dn({width:Math.max(1,Math.floor(s)),height:Math.max(1,Math.floor(u)),rawArr2D:L,smoothArr2D:x,thresholds:A,colorsRGBA:m,colorMode:f,scope:[],softenMaskEdge:!S}),!R)return null;const g={canvas:R,renderMask:L,renderValues:x,contourFills:X};return this.setCachedRasterRender(D,g),g})(),this.rasterRenderLoadingTasks.set(D,b));try{C=await b??void 0}finally{this.rasterRenderLoadingTasks.get(D)===b&&this.rasterRenderLoadingTasks.delete(D)}}if(!C)return null;const v=Object.keys(d).map(Number).filter(Number.isFinite).sort((b,S)=>b-S),E=new Set(v),N=C.contourFills?.filter(b=>E.has(b.threshold)),T=v[0],O=v[v.length-1],I=typeof O=="number"&&A.some(b=>b>O),F=typeof T=="number"&&Number.isFinite(T)&&typeof O=="number"&&Number.isFinite(O)?this.createLegendEdgeColorCanvas(C.renderValues,s,u,T,O,xt(d[T]),xt(d[O])):void 0;return this.createFcstCanvasSource(C.canvas,o,f,C.renderMask,a,t,N,t?.config?.alignWithIsoline===!0?C.renderValues:void 0,F,I)}getValueTransformFn(e=this.options){return Dr(e?.config?.valueTransform)}applyValueTransformValue(e,t,r=this.getValueTransformFn()){if(!r)return e;try{const i=r(e,t);return i==null||isNaN(Number(i))?NaN:Number(i)}catch(i){return console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",i),e}}applyValueTransform2D(e,t,r=this.getValueTransformFn()){if(!r)return e;const i=e.length,o=e[0]?.length??0,s=Array.from({length:i},()=>Array(o).fill(void 0));let u=!1;for(let l=0;l<i;l++)for(let d=0;d<o;d++){const f=e[l]?.[d];if(f==null||isNaN(Number(f))){s[l][d]=NaN;continue}try{const a=r(Number(f),{x:d,y:l,width:o,height:i,source:t});s[l][d]=a==null||!Number.isFinite(Number(a))?NaN:Number(a)}catch(a){u||(console.warn("[FcstLayer] valueTransform 执行失败,已回退原始值",a),u=!0),s[l][d]=Number(f)}}return s}isMaskSmoothEnabled(e=this.options){return e?.config?.smooth===!0}getMaskSmoothIterations(e=this.options){const t=e?.config?.smoothIterations,r=Math.floor(Number(t??2));return Number.isFinite(r)?Math.max(1,Math.min(5,r)):2}chaikinSmoothRing(e,t=2){if(!e.length)return e;let r=e.slice();const i=r[0],o=r[r.length-1];if(i&&o&&i[0]===o[0]&&i[1]===o[1]&&r.length>2&&(r=r.slice(0,-1)),r.length<3)return e;for(let l=0;l<t;l++){const d=[],f=r.length;for(let a=0;a<f;a++){const D=r[a],A=r[(a+1)%f];if(!D||!A)continue;const m=D[0],C=D[1],v=A[0],E=A[1];if(typeof m!="number"||typeof C!="number"||typeof v!="number"||typeof E!="number")continue;const N=.75*m+.25*v,T=.75*C+.25*E,O=.25*m+.75*v,I=.25*C+.75*E;d.push([N,T],[O,I])}if(r=d,r.length<3)break}const u=r[0];return r.length&&u?[...r,u]:e}smoothMaskContourPolygons(e,t){if(!e.length)return e;const r=[];for(const i of e){const o=[];for(let s=0;s<i.length;s++){const u=i[s];if(!u||u.length<4){u&&o.push(u);continue}o.push(this.chaikinSmoothRing(u,t))}r.push(o)}return r.length?r:e}createVisibleMaskContourPath(e,t,r,i,o=!1,s=this.options){if(!o)return null;const u=this.getMaskSmoothIterations(s),l=t*r;if(!l)return null;const d=i&&typeof i[0]<"u",f=i&&typeof i[1]<"u",a=d?Number(i[0]):0,D=f?Number(i[1]):0,A=new Float32Array(l);let m=0;for(let T=0;T<r;T++)for(let O=0;O<t;O++){const I=T*t+O,F=e?.[T]?.[O],b=F==null||isNaN(Number(F))?void 0:Number(F);b!==void 0&&(!d||b>=a)&&(!f||b<=D)&&(A[I]=1,m+=1)}if(!m)return null;const C=qt.contours().size([t,r]).thresholds([.5])(A);if(!C.length)return null;const v=[];for(const T of C){const O=T.coordinates??[];for(const I of O)v.push(I)}const E=o?this.smoothMaskContourPolygons(v,u):v,N=new Path2D;for(const T of E)for(const O of T){if(!O.length)continue;const I=O[0];if(!(!I||typeof I[0]!="number"||typeof I[1]!="number")){N.moveTo(I[0],I[1]);for(let F=1;F<O.length;F++){const b=O[F];!b||typeof b[0]!="number"||typeof b[1]!="number"||N.lineTo(b[0],b[1])}N.closePath()}}return N}createIsolineContourPath(e,t,r,i,o=this.options){const s=i&&typeof i[0]<"u"?Number(i[0]):NaN,u=i&&typeof i[1]<"u"?Number(i[1]):1/0;if(!Number.isFinite(s))return null;const l=new Float64Array(t*r);let d=0;for(let A=0;A<r;A++){const m=e[A];for(let C=0;C<t;C++){const v=m?.[C],E=v!==void 0&&Number.isFinite(v)&&v<=u;l[A*t+C]=E?v:NaN,E&&v>=s&&(d+=1)}}if(!d)return null;const f=o?.config?.isolineSmooth===!1?0:_e(o?.config?.isolineSmoothness),a=qt.contours().size([t,r]).thresholds([s]).smooth(f>0)(l);if(!a.length)return null;const D=new Path2D;for(const A of a)for(const m of A.coordinates??[])for(const C of m){const v=C[0];if(v){D.moveTo(v[0],v[1]);for(let E=1;E<C.length;E++){const N=C[E];N&&D.lineTo(N[0],N[1])}D.closePath()}}return D}createIsolineContourFills(e,t,r,i,o,s,u=this.options){const l=s&&typeof s[0]<"u"?Number(s[0]):-1/0,d=s&&typeof s[1]<"u"?Number(s[1]):1/0,f=i.filter(E=>E>=l&&E<=d);if(!f.length||t<2||r<2)return[];const a=new Float64Array(t*r);for(let E=0;E<r;E++){const N=e[E];for(let T=0;T<t;T++){const O=N?.[T];a[E*t+T]=O!==void 0&&Number.isFinite(O)?O:NaN}}const D=u?.config?.isolineSmooth===!1?0:_e(u?.config?.isolineSmoothness),A=qt.contours().size([t,r]).thresholds(f).smooth(D>0)(a),m=new globalThis.Map;i.forEach((E,N)=>{const T=o[N];T&&m.set(E,T)});const C=(E,N)=>{for(const T of N.coordinates??[])for(const O of T){const I=O[0];if(!I)continue;const F=I[0],b=I[1];if(!(typeof F!="number"||typeof b!="number")){E.moveTo(F,b);for(let S=1;S<O.length;S++){const y=O[S],x=y?.[0],L=y?.[1];typeof x=="number"&&typeof L=="number"&&E.lineTo(x,L)}E.closePath()}}},v=[];for(let E=0;E<A.length;E++){const N=A[E],T=Number(N.value),O=m.get(T);if(!O)continue;const I=new Path2D;C(I,N);const F=A[E+1];F&&C(I,F);const b=Math.max(0,Math.min(1,(O[3]??255)/255));v.push({threshold:T,path:I,color:`rgba(${O[0]}, ${O[1]}, ${O[2]}, ${b})`})}return v}createScopeMaskCanvas(e,t,r,i,o=!1){const s=i&&typeof i[0]<"u",u=i&&typeof i[1]<"u";if(!s&&!u)return null;const l=s?Number(i[0]):-1/0,d=u?Number(i[1]):1/0,f=document.createElement("canvas");f.width=Math.max(1,Math.floor(t)),f.height=Math.max(1,Math.floor(r));const a=f.getContext("2d");if(!a)return null;const D=a.createImageData(f.width,f.height),A=D.data;for(let m=0;m<f.height;m++){const C=e[m];for(let v=0;v<f.width;v++){const E=C?.[v];E===void 0||!Number.isFinite(E)||E<l||(o?E>=d:E>d)||(A[(m*f.width+v)*4+3]=255)}}return a.putImageData(D,0,0),f}createLegendEdgeColorCanvas(e,t,r,i,o,s,u){const l=document.createElement("canvas");l.width=Math.max(1,Math.floor(t)),l.height=Math.max(1,Math.floor(r));const d=l.getContext("2d");if(!d)return null;const f=d.createImageData(l.width,l.height),a=f.data;for(let D=0;D<l.height;D++){const A=e[D];for(let m=0;m<l.width;m++){const C=A?.[m];if(C===void 0||!Number.isFinite(C))continue;const v=C<=i?s:C>=o?u:void 0;if(!v)continue;const E=(D*l.width+m)*4;a[E]=v[0],a[E+1]=v[1],a[E+2]=v[2],a[E+3]=v[3]}}return d.putImageData(f,0,0),l}createFcstCanvasSource(e,t,r="discrete",i,o,s=this.options,u,l,d,f=!1){const a=document.createElement("canvas"),D=r==="gradient",A=s?.config?.pixelSnap===!0,m=s?.config?.useDevicePixelRatio===!0,C=s?.config?.alignWithIsoline===!0,v=i?this.createScopeMaskCanvas(C?l??i:i,e.width,e.height,o,f):null;return new Wt({projection:"EPSG:3857",ratio:1,interpolate:D&&!C,canvasFunction:(N,T,O,I)=>{const F=m?Math.max(1,O||1):1,b=I??[1,1],S=Math.max(1,Math.floor((b[0]??1)*F)),y=Math.max(1,Math.floor((b[1]??1)*F));a.width!==S&&(a.width=S),a.height!==y&&(a.height=y);const x=a.getContext("2d",{alpha:!0});if(!x)return a;x.clearRect(0,0,S,y);const[L,X,R,g]=N,[w,B,M,H]=t,z=R-L,k=g-X;if(z<=0||k<=0)return a;const Q=S/z,Z=y/k,J=(w-L)*Q,U=(g-H)*Z,W=(M-w)*Q,_=(H-B)*Z;if(W<=0||_<=0)return a;const K=A?Math.floor(J):J,Y=A?Math.floor(U):U,re=A?Math.ceil(J+W):J+W,ae=A?Math.ceil(U+_):U+_,$=Math.max(1,re-K),ee=Math.max(1,ae-Y);if(u?.length){x.save(),x.translate(K,Y),x.scale($/e.width,ee/e.height);for(const ce of u)x.fillStyle=ce.color,x.fill(ce.path,"evenodd");return x.restore(),a}return x.imageSmoothingEnabled=D&&!C,D&&!C&&(x.imageSmoothingQuality="high"),x.drawImage(e,K,Y,$,ee),d&&(x.save(),x.globalCompositeOperation="source-atop",x.imageSmoothingEnabled=D&&!C,D&&!C&&(x.imageSmoothingQuality="high"),x.drawImage(d,K,Y,$,ee),x.restore()),v&&(x.save(),x.globalCompositeOperation="destination-in",x.imageSmoothingEnabled=D&&!C,D&&!C&&(x.imageSmoothingQuality="high"),x.drawImage(v,K,Y,$,ee),x.restore()),a}})}async preload(e){const t={...this.options,config:{...this.options?.config??{}},url:e},r=await Pt(t);if(!r)return;const{uniqueThresholds:i,rawArr2D:o,smoothArr2D:s,extent:u,width:l,height:d}=r,f=this.getContourCacheKey(t);this.setCachedContourData(f,{schemaVersion:St,uniqueThresholds:i,rawArr2D:o,smoothArr2D:s,extent:u,width:l,height:d})}delete(){this.abortController.abort(),this.sourceRequestVersion++,Fe(this.map,this.options.id),this.contourCache.clear(),this.contourLoadingTasks.clear(),this.rasterRenderCache.clear(),this.rasterRenderLoadingTasks.clear()}toggleVisible(e){pe(this.map,this.options.id,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options?.config??{},...e?.config??{}}};const t=this.beginSourceRequest(),r=this.getRequestOptions(),{id:i}=this.options,o=de(this.map,i);if(!o){this.ready=this.add(),await this.ready;return}const s=await this.getSourceFromCache(r);if(!this.isCurrentRequest(t))return;const u=s??await this.getSourceFromParams(r);if(!this.isCurrentRequest(t)||!u)return;o.setSource(u);const l=Number(r.config?.opacity);Number.isFinite(l)&&o.setOpacity(Math.max(0,Math.min(1,l)));const d=Number(r.config?.zIndex);Number.isFinite(d)&&o.setZIndex(d)}}const Mt=1,Tt=new globalThis.Map;function hr(n,e){Tt.set(n,e)}function _t(n){return Tt.get(n)}function gn(n){Tt.delete(n)}function mn(n){Tt.forEach(e=>n(e))}function An(){Tt.clear()}class Gt{map;options;contourCache;externalGridDataProvider;constructor(e,t,r){this.map=e,this.options=t,this.contourCache=new Map,this.externalGridDataProvider=r,this.add()}getClassName(){return`${this.options.id}-gridValue`}getRuntimeConfig(){const e=this.options?.config??{},t=e.gridConfig??{};return{...e,...t}}async add(){const e=this.getRuntimeConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):10,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const s=o?o.getZIndex():t+1,u=await this.getSourceFromCache()??await this.getSourceFromParams();if(!u)return;const l=new Nt({className:i,source:u,zIndex:s,opacity:r});return this.map.addLayer(l),l}getCacheKey(){const{id:e,url:t}=this.options;return`${e}${t}`}async getOrLoadGridData(){const e=this.getCacheKey(),t=this.contourCache.get(e);if(t&&t.schemaVersion===Mt)return t;if(this.externalGridDataProvider){const o=await this.externalGridDataProvider();if(!o)return null;const s={schemaVersion:Mt,rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height};return this.contourCache.set(e,s),s}const r=await Pt(this.options);if(!r)return null;const i={schemaVersion:Mt,rawArr2D:r.rawArr2D,extent:r.extent,width:r.width,height:r.height};return this.contourCache.set(e,i),i}async getSourceFromCache(){const e=this.getCacheKey(),t=this.contourCache.get(e);return!t||t.schemaVersion!==Mt?(t&&this.contourCache.delete(e),null):this.createGridCanvasSource(t)}async getSourceFromParams(){const e=await this.getOrLoadGridData();return e?this.createGridCanvasSource(e):null}getTextDrawOptions(){const e=this.getRuntimeConfig(),t=Math.max(8,Math.floor(Number(e.pixelStep??40))),r=Math.max(10,Math.floor(Number(e.fontSize??14))),i=Math.max(0,Math.floor(Number(e.decimals??1))),o=String(e.fontColor??"#000"),s=String(e.strokeColor??"#fff"),u=Math.max(0,Number(e.strokeWidth??2)),l=String(e.fontFamily??"Arial, sans-serif"),d=e.useDevicePixelRatio===!0;return{pixelStep:t,fontSize:r,decimals:i,fontColor:o,strokeColor:s,strokeWidth:u,fontFamily:l,useDevicePixelRatio:d}}isValueInScope(e,t){if(!Number.isFinite(e))return!1;if(!t||t.length!==2)return!0;const r=Number(t[0]),i=Number(t[1]);if(!Number.isFinite(r)||!Number.isFinite(i))return!0;const o=Math.min(r,i),s=Math.max(r,i);return e>=o&&e<=s}interpolateValue(e,t,r,i,o){const s=Math.floor(i),u=Math.ceil(i),l=Math.floor(o),d=Math.ceil(o);if(s<0||u>=t||l<0||d>=r)return null;const f=Number(e[l]?.[s]),a=Number(e[l]?.[u]),D=Number(e[d]?.[s]),A=Number(e[d]?.[u]);if(![f,a,D,A].every(v=>Number.isFinite(v)))return null;const m=i-s,C=o-l;return f*(1-m)*(1-C)+a*m*(1-C)+D*(1-m)*C+A*m*C}getValueTransformFn(){const e=this.getRuntimeConfig();return Dr(e?.valueTransform)}applyValueTransformValue(e,t){const r=this.getValueTransformFn();if(!r)return e;try{const i=r(e,t);return i==null||isNaN(Number(i))?NaN:Number(i)}catch(i){return console.warn("[GridLayer] valueTransform 执行失败,已回退原始值",i),e}}createGridCanvasSource(e){const t=document.createElement("canvas"),{rawArr2D:r,extent:i,width:o,height:s}=e,u=this.getTextDrawOptions(),l=this.getRuntimeConfig(),d=typeof l?.valueTransform=="function"||typeof l?.valueTransform=="string"&&l.valueTransform.trim().length>0,f=l?.valueTransformAffectsScope!==!1,a=ht(this.options.config.legend,this.options.config.legendScope)??this.options.config.scope;return new Wt({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(D,A,m,C)=>{const v=C??[1,1],E=Math.max(1,Math.floor(v[0]??1)),N=Math.max(1,Math.floor(v[1]??1)),T=this.map.getSize(),O=Math.max(1,Math.floor(T?.[0]??E)),I=Math.max(1,Math.floor(T?.[1]??N)),F=E/O,b=N/I,S=u.useDevicePixelRatio?Math.max(1,Number(m||1)):1,y=Math.max(.01,(F+b)*.5/S),x=E,L=N,X=O,R=I;t.width!==x&&(t.width=x),t.height!==L&&(t.height=L);const g=t.getContext("2d",{alpha:!0});if(!g)return t;g.setTransform(1,0,0,1,0,0),g.clearRect(0,0,x,L),g.font=`${Math.max(10,Math.round(u.fontSize*y))}px ${u.fontFamily}`,g.fillStyle=u.fontColor,g.strokeStyle=u.strokeColor,g.lineWidth=Math.max(0,u.strokeWidth*y),g.lineJoin="round",g.miterLimit=2,g.textAlign="center",g.textBaseline="middle";const[w,B,M,H]=D,[z,k,Q,Z]=i,J=M-w,U=H-B,W=Q-z,_=Z-k;if(J<=0||U<=0||W<=0||_<=0)return t;const K=Math.max(8,Math.round(u.pixelStep));for(let Y=K/2;Y<R;Y+=K)for(let re=K/2;re<X;re+=K){const ae=w+re/X*J,$=H-Y/R*U;if(ae<z||ae>Q||$<k||$>Z)continue;const ee=(ae-z)/W*(o-1),ce=(Z-$)/_*(s-1),oe=this.interpolateValue(r,o,s,ee,ce);if(oe===null)continue;const ge=this.applyValueTransformValue(oe,{x:ee,y:ce,width:o,height:s,source:"raw"});if(!Number.isFinite(ge))continue;const ue=d&&!f?oe:ge;if(!this.isValueInScope(ue,a))continue;const De=ge.toFixed(u.decimals),ye=re*F,fe=Y*b;g.lineWidth>0&&g.strokeText(De,ye,fe),g.fillText(De,ye,fe)}return t}})}delete(){Fe(this.map,this.getClassName()),this.contourCache.clear()}toggleVisible(e){pe(this.map,this.getClassName(),e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){await this.add();return}const r=await this.getSourceFromCache()??await this.getSourceFromParams();r&&t.setSource(r)}}class pn{map;options;contourCache;constructor(e,t){this.map=e,this.options=t,this.contourCache=new Map,this.add()}async add(){console.time();const{id:e,config:t}=this.options,{zIndex:r=10}=t,i=de(this.map,e);i&&this.delete();const o=i?i.getZIndex():r??1200,s=this.getSourceFromCache();if(s){const l=new Nt({source:s,className:e+"-arrow",zIndex:o});return this.map.addLayer(l),l}const u=await this.getArrowParams();if(u){const l=this.getArrowSource({...u,extent:this.options.config.extent,config:this.options.config}),d=new Nt({source:l,className:e+"-arrow",zIndex:o});this.map.addLayer(d)}console.timeEnd()}async getArrowParams(){const{id:e,url:t,config:r}=this.options,{cache:i,scope:o}=r,s=e+t,u=[-99999,99999];tt.isNumber(o?.[0])&&(u[0]=o[0]),tt.isNumber(o?.[1])&&(u[1]=o[1]);const{grayArr:l,width:d,height:f}=await rt(t,u);if(!(!l||!d||!f))return i&&this.contourCache.set(s,{grayArr:l,width:d,height:f}),{grayArr:l,width:d,height:f}}getArrowSource(e){const{grayArr:t,width:r,height:i,extent:o,config:s}=e,{pixelStep:u=20,fontSize:l=12,color:d="rgb(255,255,255)"}=s,f={angle:t,width:r,height:i},a=dt(o);return this.createArrowCanvasSource(f,a,{pixelStep:u,fontSize:l,color:d})}createArrowCanvasSource(e,t,r){const{pixelStep:i=20,fontSize:o=12,color:s="rgb(255,255,255)"}=r,u=document.createElement("canvas");return new Wt({projection:"EPSG:3857",ratio:1,canvasFunction:(l,d,f,a)=>{const D=a??[1,1],A=Math.max(1,Math.floor((D[0]??1)*f)),m=Math.max(1,Math.floor((D[1]??1)*f));u.width!==A&&(u.width=A),u.height!==m&&(u.height=m);const C=u.getContext("2d",{alpha:!0});if(!C)return u;C.clearRect(0,0,A,m),C.fillStyle=s,C.font=`${Math.max(1,Math.floor(o*f))}px Arial`,C.textAlign="center",C.textBaseline="middle";const[v,E,N,T]=l,[O,I,F,b]=t,S=N-v,y=T-E;if(S<=0||y<=0)return u;const x=Math.max(v,O),L=Math.max(E,I),X=Math.min(N,F),R=Math.min(T,b);if(x>=X||L>=R)return u;const g=F-O,w=b-I;if(g<=0||w<=0)return u;const B=Math.max(1,A-1),M=Math.max(1,m-1),H=Math.max(1,Math.floor(i*f)),z=Math.max(g/Math.max(1,e.width-1),w/Math.max(1,e.height-1)),k=z>0&&isFinite(d)?Math.max(1,Math.floor(d/z)):1,Q=Math.max(H,Math.min(H*6,H*k)),Z=Math.max(0,Math.floor((x-v)/S*B)),J=Math.min(A-1,Math.ceil((X-v)/S*B)),U=Math.max(0,Math.floor((T-R)/y*M)),W=Math.min(m-1,Math.ceil((T-L)/y*M));if(Z>J||U>W)return u;for(let _=U;_<=W;_+=Q)for(let K=Z;K<=J;K+=Q){const Y=v+S*K/B,re=T-y*_/M;if(Y<O||Y>F||re<I||re>b)continue;const ae=(Y-O)/g*(e.width-1),$=(b-re)/w*(e.height-1),ee=Vt(e.angle,ae,$,e.width,e.height);if(!isFinite(ee))continue;const ce=(ee-90)*Math.PI/180;C.save(),C.translate(K,_),C.rotate(ce),C.fillText("→",0,0),C.restore()}return u}})}getSourceFromCache(){const{id:e,url:t,config:r}=this.options,{scope:i,cache:o,extent:s,pixelStep:u=20,fontSize:l=12,color:d="rgb(255,255,255)"}=r,f=e+t;if(o&&this.contourCache.has(f)){const a=this.contourCache.get(f);return this.getArrowSource({...a,extent:s,scope:i,pixelStep:u,fontSize:l,color:d})}return null}delete(){Fe(this.map,this.options.id+"-arrow"),this.contourCache.clear()}toggleVisible(e){pe(this.map,this.options.id+"-arrow",e)}}const Ho="data:image/png;base64,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",vn="26",Er=new Set(["25","26","47","55","64"]),xr=new Set(["21","22","23","65","66"]),$t="24",Te=Object.freeze({symbolId:"28",participatesInPrecipitationCut:!1,transparentFill:!0,boundaryColor:"#ffa809",boundaryWidth:3,showMarker:!0,iconScale:.16}),lt=Te.symbolId,$e=Object.freeze({symbolId:"38",color:"#ff0000",width:3,tickSpacing:22,tickLength:16}),Dn=new Set([...Er,...xr,$t]),yn=new Set([...Dn,lt]),Ro=6,zo=["","-notes","-filtered","-other","-frost"],He=new globalThis.Map,Ot=new globalThis.Map,dr=new WeakMap,Gr=new globalThis.Map,It={0:"#9CF790",10:"#37A600",25:"#67B4F8",50:"#0002FE",100:"#FA03F0",250:"#710100",400:"#ffa10c",600:"#fe6301"},qo={0:"#cccccc","2.5":"#a1a1a1",5:"#707070",10:"#454545",20:"#7345e6",30:"#4d0074"},Qo={0:"#c3e7b9",10:"#7ec179",25:"#95c5e0",50:"#3b3a9f",100:"#b05dae"},Vr=Object.freeze({timeRange:"",timeTotal:0,publicTime:""});function ko(){return new DOMException("The operation was aborted","AbortError")}function ft(n){if(n?.aborted)throw n.reason??ko()}function bn(n,e){let t=dr.get(n);t||(t=new globalThis.Map,dr.set(n,t));const r=(t.get(e)??0)+1;return t.set(e,r),r}function jr(n,e,t){return dr.get(n)?.get(e)===t}function Go(n){return JSON.stringify({filePath:n.filePath,authorization:n.authorization??""})}function Vo(n,e){for(He.delete(n),He.set(n,e);He.size>Ro;){const t=He.keys().next().value;if(t===void 0)break;He.delete(t)}}function wn(n,e){const t=new Set(zo.map(r=>`${e}${r}`));for(const r of[...n.getLayers().getArray()])t.has(r.getClassName())&&n.removeLayer(r)}function qe(n){const e=String(n??"").trim();return yn.has(e)?e:vn}function gr(n,e,t=.05){const r=n[0]-e[0],i=n[1]-e[1];return r*r+i*i<t*t}function Cn(n){let e=0;for(let t=0;t<n.length-1;t++){const[r,i]=n[t],[o,s]=n[t+1];e+=(o-r)*(s+i)}return e>0}function jo(n){const e=[];let t=n.findIndex(o=>/^CLOSED_CONTOURS:/i.test(o));if(t<0)return G.featureCollection(e);const r=n[t].match(/CLOSED_CONTOURS:\s*(\d+)/i);let i=r?Number.parseInt(r[1],10):0;for(t++;i>0&&t<n.length;){const o=n[t].trim().match(/^(\d+)\s+(\d+)$/);if(!o){t++;continue}let s=Number.parseInt(o[2],10);const u=[];for(t++;s>0&&t<n.length;){const D=n[t].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let A=0;A+2<D.length&&s>0;A+=3)u.push([D[A],D[A+1]]),s--;t++}let l=!1;t<n.length&&/^NoLabel\s+0[^\s]*/.test(n[t].trim())&&(l=!0,t++);let d="3";const f=t<n.length?n[t].trim().match(/^([0-9]+(?:\.[0-9]+)?)\s+1$/):null;f&&(d=f[1],t++);const a=u[u.length-1];if(u.length>3&&!gr(u[0],a,.1)&&u.push([...u[0]]),u.length>3&&gr(u[0],u[u.length-1],.1)){Cn(u)&&u.reverse();const D=u[0],A=u[u.length-1];(D[0]!==A[0]||D[1]!==A[1])&&u.push([...u[0]]),e.push(G.polygon([u],{level:d,noLabelZero:l}))}i--}return e.sort((o,s)=>Number(o.properties?.level)-Number(s.properties?.level)),G.featureCollection(e)}function Uo(n){const e=[];let t=n.findIndex(r=>/^NOTES_SYMBOL:/i.test(r));if(t<0)return e;for(t++;t<n.length;){const r=n[t].trim();if(!r||!/^\d+\s/.test(r))break;const i=r.split(/\s+/),o=i[5],s=Number.parseFloat(i[1]),u=Number.parseFloat(i[2]);o&&Number.isFinite(s)&&Number.isFinite(u)&&e.push({type:"Feature",geometry:{type:"Point",coordinates:[s,u]},properties:{text:o,noteValue:o,rawLine:r,rawParts:i}}),t++}return e}function Wo(n){const e=[];let t=n.findIndex(r=>/^SYMBOLS:/i.test(r));if(t<0)return e;for(t++;t<n.length;){const r=n[t].trim();if(!r||/^[A-Z_]+:/.test(r))break;const i=r.split(/\s+/).filter(Boolean),o=Number.parseFloat(i[1]),s=Number.parseFloat(i[2]);i.length>=3&&Number.isFinite(o)&&Number.isFinite(s)&&e.push({type:"Feature",geometry:{type:"Point",coordinates:[o,s]},properties:{symbolId:i[0],alt:Number.parseFloat(i[3]??"0"),angle:Number.parseFloat(i[4]??"0")}}),t++}return e}function Yo(n){const e=[],t=n.findIndex(s=>/^CLOSED_CONTOURS:/i.test(s)),r=t<0?n.length:t,i=/^(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)\s+(\d+)\s*$/;let o=0;for(;o<r;){const s=n[o].trim().match(i);if(!s){o++;continue}const u=s[1],l=Number(s[2]),d=u===$e.symbolId;let f=Number.parseInt(s[3],10);const a=[];for(o++;o<r&&f>0;){const m=n[o].trim().split(/\s+/).map(Number).filter(Number.isFinite);for(let C=0;C+2<m.length&&f>0;C+=3)a.push([m[C],m[C+1]]),f--;o++}let D=!1;if(o<r&&/^NoLabel\s+0[^\s]*/.test(n[o].trim())&&(D=!0,o++),a.length<2)continue;const A=!d&&a.length>3&&gr(a[0],a[a.length-1],.1);A&&Cn(a)&&a.reverse(),e.push({type:"Feature",geometry:{type:A?"Polygon":"LineString",coordinates:A?[a]:a},properties:{level:u,symbolId:u,lineWidth:l,noLabelZero:D}})}return e}function Jo(n){for(const e of n){const t=e.trim().match(/^(\d{4})\s+(\d{1,2})\s+(\d{1,2})\s+(\d{1,2})\s+(\d+)$/);if(!t)continue;const[,r,i,o,s,u]=t,l=Number(r),d=Number(i),f=Number(o),a=Number(s),D=Number(u),A=new Date(Date.UTC(l,d-1,f,a));if(A.getUTCFullYear()!==l||A.getUTCMonth()!==d-1||A.getUTCDate()!==f||A.getUTCHours()!==a||!Number.isFinite(D))return Vr;const m=new Date(A.getTime()+D*60*60*1e3),C=N=>({year:N.getUTCFullYear(),month:N.getUTCMonth()+1,day:N.getUTCDate(),hour:String(N.getUTCHours()).padStart(2,"0")}),v=C(A),E=C(m);return{timeRange:`${v.year}年${v.month}月${v.day}日${v.hour}时-${E.month}月${E.day}日${E.hour}时`,timeTotal:D,publicTime:`${v.year}-${String(v.month).padStart(2,"0")}-${String(v.day).padStart(2,"0")} ${v.hour}:00:00`}}return Vr}function me(n){try{const e=G.bbox(n);return e.length<4||e.slice(0,4).some(t=>!Number.isFinite(t))?null:[e[0],e[1],e[2],e[3]]}catch{return null}}function nt(n,e){return!n||!e?!0:!(n[2]<e[0]||n[0]>e[2]||n[3]<e[1]||n[1]>e[3])}function Nr(n){if(!/polygon/i.test(String(n?.geometry?.type??"")))return[n];try{return G.flatten(n).features.map(e=>({...e,properties:{...n.properties??{},...e.properties??{}}}))}catch{return[n]}}function Zo(n,e){try{const t=G.area(n),r=G.area(e);return Number.isFinite(t)&&Number.isFinite(r)&&t>0&&t<r*.999999&&(G.booleanWithin(n,e)||G.booleanContains(e,n))}catch{return!1}}function Bn(n){if(n.length<=1||!n.every(s=>Number(s?.properties?.level)===0))return n;const e=n.flatMap(Nr),t=e.map(s=>{try{return G.area(s)}catch{return 0}}),r=new globalThis.Map;if(e.forEach((s,u)=>{let l=-1,d=Number.POSITIVE_INFINITY;e.forEach((f,a)=>{const D=t[a]??0;u===a||D>=d||!nt(me(s),me(f))||!Zo(s,f)||(l=a,d=D)}),l>=0&&r.set(u,l)}),!r.size)return e;const i=new globalThis.Map;r.forEach((s,u)=>{const l=i.get(s)??[];l.push(e[u]),i.set(s,l)});const o=[];return e.forEach((s,u)=>{if(r.has(u))return;let l=[s];for(const d of i.get(u)??[])l=l.flatMap(f=>{try{if(!nt(me(f),me(d))||!G.booleanIntersects(f,d))return[f];const a=G.difference(G.featureCollection([f,d]));return a?G.flatten(a).features.map(D=>({...D,properties:{...s.properties??{},...D.properties??{}}})):[]}catch{return[f]}});o.push(...l)}),o}function Ko(n){const e=new globalThis.Map,t=[];for(const i of n){if(!/polygon/i.test(String(i?.geometry?.type??""))){t.push(i);continue}const o=`${qe(i.properties?.symbolId)}__${String(i.properties?.level??"")}`,s=e.get(o)??[];s.push(i),e.set(o,s)}const r=[];return e.forEach(i=>{const o=Bn(i);if(o.length<=1){r.push(...o);return}try{const s=G.union(G.featureCollection(o));if(!s){r.push(...o);return}G.flatten(s).features.forEach(u=>{u.properties={...o[0]?.properties??{},...u.properties??{}},r.push(u)})}catch{r.push(...o)}}),[...t,...r]}function _o(n,e){const t=new globalThis.Map,r=[];for(const o of n){if(!/polygon/i.test(String(o?.geometry?.type??""))){r.push(o);continue}const s=qe(o.properties?.symbolId),u=t.get(s)??[];u.push(o),t.set(s,u)}const i=[];return t.forEach(o=>{const s=o.slice().sort((l,d)=>Number(d.properties?.level)-Number(l.properties?.level)),u=[];for(const l of s){ft(e);let d=Nr(l);for(const f of u)if(d=d.flatMap(a=>{try{if(!nt(me(a),f.bbox))return[a];if(!G.booleanIntersects(a,f.feature))return[a];const D=G.difference(G.featureCollection([a,f.feature]));return D?G.flatten(D).features.map(A=>({...A,properties:{...l.properties??{},...A.properties??{}}})):[]}catch{return[a]}}),!d.length)break;for(const f of d)u.push({feature:f,bbox:me(f)});i.push(...d)}}),[...r,...i]}function $o(n,e=1e-6){if(!n.length)return[];const t=(o,s)=>{const u=o[0]-s[0],l=o[1]-s[1];return u*u+l*l<=e*e},r=[];for(const o of n)(!r.length||!t(o,r[r.length-1]))&&r.push([...o]);if(r.length>1&&!t(r[0],r[r.length-1])&&r.push([...r[0]]),r.length<4)return n;const i=[r[0]];for(let o=1;o<r.length-1;o++){const s=r[o-1],u=r[o],l=r[o+1];Math.abs((u[0]-s[0])*(l[1]-s[1])-(u[1]-s[1])*(l[0]-s[0]))>e&&i.push(u)}return i.push(r[r.length-1]),i.length>=4?i:r}function ei(n,e,t=.001){if(n?.geometry?.type!=="Polygon"||!/linestring/i.test(e?.geometry?.type??""))return G.featureCollection([n]);if(e.geometry.type==="LineString"){const l=e.geometry.coordinates;if(G.booleanPointInPolygon(G.point(l[0]),n)||G.booleanPointInPolygon(G.point(l[l.length-1]),n))return G.featureCollection([n])}const r=G.lineIntersect(e,n),i=G.explode(e);for(const l of i.features.slice(0,-1))r.features.push(l);const o=G.buffer(e,t,{units:"kilometers"});if(!o)return G.featureCollection([n]);const s=G.difference(G.featureCollection([n,o]));if(!s?.geometry)return G.featureCollection([n]);const u=Nr(s).map((l,d)=>{const f=l.geometry.coordinates[0];for(let a=0;a<f.length;a++){const D=G.point(f[a]),A=r.features.find(m=>G.distance(m,D,{units:"kilometers"})<=t*2);A&&(f[a]=[...A.geometry.coordinates])}return l.geometry.coordinates[0]=$o(f),l.properties={...n.properties??{},id:`${n.properties?.id??"poly"}-${d}`},l});return G.featureCollection(u)}function ti(n,e,t){const r=e.filter(f=>String(f.properties?.symbolId)===lt).map(f=>G.point(f.geometry.coordinates,f.properties));if(!r.length)return n;const i=n.map((f,a)=>({feature:f,index:a,bbox:me(f),level:Number(f.properties?.level)})).filter(({feature:f,level:a})=>/polygon/i.test(String(f.geometry?.type??""))&&Number.isFinite(a)),o=new Set,s=[];for(const f of r){let a,D=Number.POSITIVE_INFINITY;for(const A of t)try{if(!G.booleanPointInPolygon(f,A))continue;const m=G.area(A);m<D&&(a=A,D=m)}catch{}if(a){for(const A of i)if(!(A.level!==Number(a.properties?.level)||o.has(A.index))){try{if(!G.booleanPointInPolygon(f,A.feature))continue}catch{continue}o.add(A.index),s.push(A)}}}for(;s.length;){const f=s.pop();for(const a of i)if(!(o.has(a.index)||a.level!==f.level||!nt(a.bbox,f.bbox))){try{if(!G.booleanIntersects(f.feature,a.feature))continue}catch{continue}o.add(a.index),s.push(a)}}const u=n.map((f,a)=>o.has(a)?{...f,properties:{...f.properties??{},symbolId:lt,isFreezingRain:!0}}:f),l=new globalThis.Map;for(const{feature:f,index:a,level:D}of i){if(!o.has(a))continue;const A=l.get(D)??[];A.push(f),l.set(D,A)}const d=[];return l.forEach((f,a)=>{try{const D=f.length===1?f[0]:G.union(G.featureCollection(f));if(!D)return;d.push({...D,properties:{level:String(f[0]?.properties?.level??a),symbolId:lt,isFreezingRainBoundary:!0}})}catch{}}),[...u,...d]}function ri(n,e){const t=n.filter(s=>/polygon/i.test(String(s?.geometry?.type??""))&&qe(s?.properties?.symbolId)===$t);if(!t.length)return n;let r;try{r=t.length===1?t[0]:G.union(G.featureCollection(t))}catch(s){return console.warn("Unable to combine sleet contours; retaining overlapping precipitation.",s),n}if(!r)return n;const i=me(r),o=[];for(const s of n){if(ft(e),!/polygon/i.test(String(s?.geometry?.type??""))||!Er.has(qe(s?.properties?.symbolId))||!nt(me(s),i)){o.push(s);continue}try{if(!G.booleanIntersects(s,r)){o.push(s);continue}const u=G.difference(G.featureCollection([s,r]));if(!u)continue;G.flatten(u).features.forEach(l=>{l.properties={...s.properties??{},...l.properties??{}},o.push(l)})}catch(u){console.warn("Unable to subtract sleet from precipitation contour.",u),o.push(s)}}return o}function ni(n,e){const t=n.split(/\r?\n/),r=jo(t),i=Jo(t),o=Uo(t),s=Wo(t).filter(b=>yn.has(String(b.properties?.symbolId))),u=Yo(t),l=u.filter(b=>b.properties?.symbolId===$e.symbolId),d=u.filter(b=>b.geometry?.type==="LineString"&&Number(b.properties?.level)===0);ft(e);let f=r.features;const a=f.filter(b=>Number(b.properties?.level)===0&&/polygon/i.test(String(b.geometry?.type??"")));if(a.length>1){const b=new Set(a),S=Bn(a),y=f.findIndex(L=>b.has(L)),x=f.filter(L=>!b.has(L));x.splice(y<0?x.length:y,0,...S),f=x}const D=G.featureCollection(f);let A=f;if(A.length>1)try{const b=G.union(D);b&&(A=G.flatten(b).features.map((S,y)=>({...S,properties:{...S.properties??{},id:S.properties?.id??`u-${y}`}})))}catch{A=f}const m=d.map(b=>({feature:b,bbox:me(b)}));for(const b of m)ft(e),A=A.flatMap(S=>{try{if(!nt(me(S),b.bbox))return[S];if(!G.booleanIntersects(S,b.feature))return[S];const y=ei(S,b.feature);return y.features.length?y.features:[S]}catch{return[S]}});const C=s.filter(b=>Dn.has(String(b.properties?.symbolId))).map(b=>({feature:b,point:G.point(b.geometry.coordinates,b.properties)})),v=A.map(b=>{let S=vn;for(const y of C)try{if(G.booleanPointInPolygon(y.point,b)){S=qe(y.feature.properties?.symbolId);break}}catch{}return{...b,properties:{symbolId:S}}}),E=f.map(b=>({feature:b,bbox:me(b)})),N=[];for(const b of v){ft(e);const S=me(b);for(const y of E)if(nt(S,y.bbox))try{const x=G.intersect(G.featureCollection([b,y.feature]));if(!x)continue;const L={...y.feature.properties??{},...b.properties??{}};G.flatten(x).features.forEach(X=>{X.properties={...L,...X.properties??{}},N.push(X)})}catch{}}const T=ti(N,s,r.features),O=Te.participatesInPrecipitationCut?[]:T.filter(b=>b.properties?.isFreezingRain||b.properties?.isFreezingRainBoundary),I=T.filter(b=>Te.participatesInPrecipitationCut||!b.properties?.isFreezingRain&&!b.properties?.isFreezingRainBoundary);return{vectorFeatures:[..._o(ri(Ko(I),e),e),...O],noteFeatures:o,symbolFeatures:s,otherFeatures:d,frostFeatures:l,timeRange:i}}async function En(n){const e=Go(n),t=He.get(e);if(t)return He.delete(e),He.set(e,t),t;if(!n.signal){const i=Ot.get(e);if(i)return i}const r=(async()=>{const i=n.authorization?{Authorization:n.authorization}:void 0,o=await fetch(n.filePath,{headers:i,signal:n.signal});if(!o.ok)throw new Error(`MICAPS request failed: ${o.status} ${o.statusText}`);const s=ni(await o.text(),n.signal);return Vo(e,s),s})();n.signal||Ot.set(e,r);try{return await r}finally{!n.signal&&Ot.get(e)===r&&Ot.delete(e)}}async function oi(n,e){await Promise.all(n.map(t=>En({filePath:t})))}function ir(n,e,t){const r=Number(e);if(!Number.isFinite(r))return t;const i=Object.keys(n).map(Number).filter(Number.isFinite).sort((o,s)=>o-s);if(!i.length||r<i[0])return t;for(let o=0;o<i.length-1;o++){const s=i[o],u=i[o+1];if(r>=s&&r<u)return n[String(s)]??t}return n[String(i[i.length-1])]??t}function ii(n,e){if(!n?.length)return[];if(!e||e.length!==2)return n;const[t,r]=e;return n.slice(Math.max(0,Math.min(n.length,t)),Math.max(0,Math.min(n.length,r)))}function si(n,e){const t=Number(n);if(!Number.isFinite(t))return;const r=e.filter(i=>i.scope?.length===2);for(let i=0;i<r.length;i++){const o=r[i],s=o.scope;if(!s||s.length!==2)continue;const u=s[0],l=s[1];if(!(u===void 0||l===void 0)&&t>=u&&(t<l||i===r.length-1&&t<=l))return o.color}}function ui(n,e,t,r){const i=qe(n);if(xr.has(i))return ir(qo,e,It[0]);if(i===$t)return ir(Qo,e,It[0]);const o=Er.has(i)?si(e,ii(t,r)):void 0;return o||ir(It,e,It[0])}function ai(n,e=10,t=4){if(typeof document>"u")return null;const r=globalThis.devicePixelRatio||1,i=`${n}_${e}_${t}_${r}`,o=Gr.get(i);if(o)return o;const s=document.createElement("canvas");s.width=Math.ceil(e*r),s.height=Math.ceil(e*r);const u=s.getContext("2d");if(!u)return null;u.setTransform(r,0,0,r,0,0),u.strokeStyle=n,u.lineWidth=t,u.beginPath();for(let d=0;d<=e*2;d+=e)u.moveTo(d-e*2,e*2),u.lineTo(d+e*2,-e*2);u.stroke();const l=u.createPattern(s,"repeat");return l&&Gr.set(i,l),l}function sr(n){const e=Number(n);return Number.isFinite(e)&&e>0?e:void 0}function ci(n,e,t,r){return new V.Style({renderer:(i,o)=>{const s=i;if(s.length<2)return;const{context:u,pixelRatio:l}=o,d=t*l,f=r*l;let a=d;u.save(),u.strokeStyle=e,u.lineWidth=n*l,u.lineCap="round",u.beginPath();for(let D=1;D<s.length;D++){const A=s[D-1],m=s[D],C=m[0]-A[0],v=m[1]-A[1],E=Math.hypot(C,v);if(E){for(;a<=E;){const N=a/E,T=A[0]+C*N,O=A[1]+v*N,I=v/E,F=-C/E;u.moveTo(T,O),u.lineTo(T+I*f,O+F*f),a+=d}a-=E}}u.stroke(),u.restore()}})}function li(n,e,t){const{className:r,opacity:i=.8,showText:o=!1,showFillcolor:s=!0,showIsoline:u=!0,showPointMarkers:l=!1,showFrostLine:d=!0,legend:f,legendScope:a}=t,D={dataProjection:"EPSG:4326",featureProjection:n.getView().getProjection()},A=F=>new $r().readFeatures({type:"FeatureCollection",features:F},D),m=typeof t.frostLineColor=="string"&&t.frostLineColor.trim()?t.frostLineColor:$e.color,C=sr(t.frostLineWidth),v=sr(t.frostLineTickSpacing)??$e.tickSpacing,E=sr(t.frostLineTickLength)??$e.tickLength,N=new globalThis.Map,T=new Ke({className:r,opacity:Math.max(0,Math.min(1,i)),zIndex:t.zIndex??10,visible:t.visible??!0,source:new ct({features:A(e.vectorFeatures)}),style:F=>{const b=qe(F.get("symbolId")),S=F.get("isFreezingRain")===!0,y=F.get("isFreezingRainBoundary")===!0,x=F.get("level"),L=`${b}_${String(x)}_${S}_${y}_${o}_${s}_${u}`,X=N.get(L);if(X)return X;if(y){const g=[new V.Style({zIndex:3,stroke:new V.Stroke({color:Te.boundaryColor,width:Te.boundaryWidth})})];return N.set(L,g),g}const R=[];if(s&&(!S||!Te.transparentFill)){const g=ui(b,x,f,a);R.push(new V.Style({fill:new V.Fill({color:b==="24"?ai(g)??g:g})}))}return(u&&!S||o)&&R.push(new V.Style({zIndex:1,stroke:u&&!S?new V.Stroke({color:"#000",width:1}):void 0,text:o?new V.Text({text:String(x??""),font:"bold 16px sans-serif",fill:new V.Fill({color:"#333"}),stroke:new V.Stroke({color:"#fff",width:3}),placement:"line",overflow:!0}):void 0})),N.set(L,R),R}}),O=[T];if(d&&e.frostFeatures.length){const F=new globalThis.Map;O.push(new Ke({className:`${r}-frost`,zIndex:(t.zIndex??10)+1,visible:t.visible??!0,source:new ct({features:A(e.frostFeatures)}),style:b=>{const S=Number(b.get("lineWidth")),y=C??(Number.isFinite(S)&&S>0?S:$e.width);let x=F.get(y);return x||(x=[new V.Style({stroke:new V.Stroke({color:m,width:y})}),ci(y,m,v,E)],F.set(y,x)),x}}))}if(e.noteFeatures.length&&(o||l)){const F=new globalThis.Map;O.push(new Ke({className:`${r}-notes`,zIndex:(t.zIndex??10)+2,visible:t.visible??!0,source:new ct({features:A(e.noteFeatures)}),style:b=>{const S=String(b.get("text")??""),y=`${S}_${o}_${l}`;let x=F.get(y);return x||(x=new V.Style({image:l?new V.Circle({radius:4,fill:new V.Fill({color:"#ffffffcc"}),stroke:new V.Stroke({color:"#ff4d4f",width:1.5})}):void 0,text:o?new V.Text({text:S,font:"bold 14px sans-serif",fill:new V.Fill({color:"#ff4d4f"}),stroke:new V.Stroke({color:"#fff",width:2}),offsetY:-12}):void 0}),F.set(y,x)),x}}))}const I=e.symbolFeatures.filter(F=>String(F.properties?.symbolId)===lt?Te.showMarker:l);if(I.length){const F=new globalThis.Map;O.push(new Ke({className:`${r}-filtered`,zIndex:(t.zIndex??10)+3,visible:t.visible??!0,source:new ct({features:A(I)}),style:b=>{const S=qe(b.get("symbolId"));let y=F.get(S);if(!y){if(S===lt)y=new V.Style({image:new V.Icon({src:Ho,anchor:[.5,.5],scale:Te.iconScale})});else{const x=xr.has(S)?"#5f4bb6":S===$t?"#2f7ea1":"#2d9f3b";y=new V.Style({image:new V.Circle({radius:5,fill:new V.Fill({color:x}),stroke:new V.Stroke({color:"#fff",width:1.5})})})}F.set(S,y)}return y}}))}return T.set("timeRange",e.timeRange),O}async function xn(n,e){if(!e.className||!e.filePath)return;const t=bn(n,e.className),r=await En(e);if(ft(e.signal),!jr(n,e.className,t))return;const i=n.getLayers().getArray().find(s=>s.getClassName()===e.className),o=li(n,r,{...e,zIndex:i?.getZIndex()??e.zIndex,visible:i?.getVisible()??e.visible});if(jr(n,e.className,t))return wn(n,e.className),o.forEach(s=>n.addLayer(s)),o[0]}function Nn(n,e){bn(n,e),wn(n,e)}class Pn{map;options;ready;sourceRequestVersion=0;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.ready=this.add()}beginSourceRequest(){return this.abortController.abort(),this.abortController=new AbortController,++this.sourceRequestVersion}getMicContourOptions(e){const t=this.options.config??{};return{className:this.options.id,filePath:e,authorization:this.options.authorization,legend:t.legend??[],legendScope:t.legendScope??[],zIndex:Number.isFinite(Number(t.zIndex))?Number(t.zIndex):10,opacity:Number.isFinite(Number(t.opacity))?Number(t.opacity):.8,showText:this.options.showText??t.showText??!1,showFillcolor:this.options.showFillcolor??t.showFillcolor??!0,showIsoline:this.options.showIsoline??t.showIsoline??!0,showPointMarkers:this.options.showPointMarkers??t.showPointMarkers??!1,showFrostLine:this.options.showFrostLine??t.showFrostLine??!0,frostLineColor:this.options.frostLineColor??t.frostLineColor,frostLineWidth:this.options.frostLineWidth??t.frostLineWidth,frostLineTickSpacing:this.options.frostLineTickSpacing??t.frostLineTickSpacing,frostLineTickLength:this.options.frostLineTickLength??t.frostLineTickLength}}async add(){const e=this.beginSourceRequest(),t=this.abortController,r=this.options.url;if(r)try{if(await xn(this.map,{...this.getMicContourOptions(r),signal:t.signal}),e!==this.sourceRequestVersion||t.signal.aborted)return}catch(i){if(t.signal.aborted)return;throw i}}delete(){this.abortController.abort(),this.sourceRequestVersion++,Nn(this.map,this.options.id)}toggleVisible(e){pe(this.map,this.options.id,e),pe(this.map,`${this.options.id}-notes`,e),pe(this.map,`${this.options.id}-filtered`,e),pe(this.map,`${this.options.id}-other`,e),pe(this.map,`${this.options.id}-frost`,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}},this.ready=this.add(),await this.ready}}const fi=8,hi=8,di=3,mr="rgba(0,0,0,0.8)",Re=new globalThis.Map,Xt=new globalThis.Map,ze=new globalThis.Map,Ht=new globalThis.Map,Ar=new WeakMap;function Pr(n,e){return n.getLayers().getArray().find(t=>t.getClassName()===e)}function Tn(n,e){for(const t of[...n.getLayers().getArray()])t.getClassName()===e&&n.removeLayer(t)}function Ln(n){const{url:e,time:t="",authorization:r="",config:i}=n,{legend:o=[]}=i;return JSON.stringify({url:e,time:t,authorization:r,extent:i.extent??[],scope:i.scope??[],thresholds:o.map(s=>s.scope??[]),isolineSmooth:i.isolineSmooth!==!1,isolineSmoothness:Fn(i)})}function gi(n){const{url:e,time:t="",authorization:r="",config:i}=n;return JSON.stringify({url:e,time:t,authorization:r,extent:i.extent??[],scope:i.scope??[]})}function Fn(n){return n.isolineSmooth===!1?0:_e(n.isolineSmoothness)}function mi(n,e){for(Re.delete(n),Re.set(n,e);Re.size>fi;){const t=Re.keys().next().value;if(t===void 0)break;Re.delete(t)}}function Ai(n,e){for(ze.delete(n),ze.set(n,e);ze.size>hi;){const t=ze.keys().next().value;if(t===void 0)break;ze.delete(t)}}async function pi(n){const e=gi(n),t=ze.get(e);if(t)return ze.delete(e),ze.set(e,t),t;const r=Ht.get(e);if(r)return r;const i=(async()=>{const o=await Pt(n);if(!o)return;const s={rawArr2D:o.rawArr2D,extent:o.extent,width:o.width,height:o.height};return Ai(e,s),s})();Ht.set(e,i);try{return await i}finally{Ht.get(e)===i&&Ht.delete(e)}}function Sn(n,e){let t=Ar.get(n);t||(t=new globalThis.Map,Ar.set(n,t));const r=(t.get(e)??0)+1;return t.set(e,r),r}function vi(n,e,t){return Ar.get(n)?.get(e)===t}function Di(n){return typeof n.isolineBorderColor=="string"?n.isolineBorderColor:typeof n.isolineColor=="string"?n.isolineColor:n.isolineColor===!0?Ce(n.legend??[],n.legendScope).colorMap:mr}function yi(n){return Ce(n.legend??[],n.legendScope).colorMap}function Ur(n){if(typeof n=="string")return()=>n;const e=Object.keys(n).map(Number).filter(Number.isFinite).sort((t,r)=>t-r);return t=>{const r=n[t];if(r)return r;let i=0,o=e.length-1,s=-1;for(;i<=o;){const u=i+o>>1;e[u]<=t?(s=u,i=u+1):o=u-1}return s<0?mr:n[e[s]]||mr}}function bi(n,e,t){const r=n(e),[i,o,s,u]=xt(r);return[i,o,s,u/255*Math.max(0,Math.min(1,t))]}function Wr(n,e,t,r){const i=new globalThis.Map,o=[],[s,u,l,d]=r,f=(l-s)/e,a=(d-u)/t,D=m=>{if(!Array.isArray(m)||m.length<2)return null;const C=[];for(const v of m)!Array.isArray(v)||v.length<2||!Number.isFinite(v[0])||!Number.isFinite(v[1])||C.push([s+v[0]*f,d-v[1]*a]);return C.length>=2?C:null},A=(m,C)=>{const v=i.get(m)??[];v.push(C),i.set(m,v)};for(const m of n){const C=Number(m.value);if(!(!Number.isFinite(C)||!Array.isArray(m.coordinates))){if(m.type==="Polygon"){const v=m.coordinates.map(D).filter(E=>!!E);v.length&&(o.push({type:"Polygon",coordinates:v,value:C}),v.forEach(E=>A(C,E)))}else if(m.type==="MultiPolygon"){const v=[];for(const E of m.coordinates){const N=E.map(D).filter(T=>!!T);N.length&&(v.push(N),N.forEach(T=>A(C,T)))}v.length&&o.push({type:"MultiPolygon",coordinates:v,value:C})}}}return{lines:[...i.entries()].map(([m,C])=>C.length===1?{type:"LineString",coordinates:C[0],value:m}:{type:"MultiLineString",coordinates:C,value:m}),polygons:o.sort((m,C)=>m.value-C.value)}}function wi(n){const e=r=>!r||!Array.isArray(r.coordinates)||r.type!=="Polygon"&&r.type!=="MultiPolygon"?null:{type:"Feature",properties:{},geometry:r.type==="Polygon"?{type:"Polygon",coordinates:r.coordinates}:{type:"MultiPolygon",coordinates:r.coordinates}},t=[];for(let r=0;r<n.length;r++){const i=n[r],o=Number(i?.value),s=e(i);if(!s||!Number.isFinite(o))continue;const u=e(n[r+1]),l=u?ur.difference(ur.featureCollection([s,u])):s;l&&t.push({type:l.geometry.type,coordinates:l.geometry.coordinates,value:o})}return t}async function Ci(n){const e=await pi(n);if(!e)return{lines:[],polygons:[]};const{rawArr2D:t,extent:r,width:i,height:o}=e,{uniqueThresholds:s}=Ce(n.config.legend??[]);if(i<2||o<2||s.length===0)return{lines:[],polygons:[]};const u=Fn(n.config),l=yr(t,i,o,u),d=new Float64Array(i*o);for(let A=0;A<o;A++){const m=l[A];for(let C=0;C<i;C++){const v=m?.[C];d[A*i+C]=v===void 0||!Number.isFinite(v)?NaN:v}}const f=qt.contours().size([i,o]).thresholds(s).smooth(u>0)(d),a=Wr(f,i,o,r),D=Wr(wi(f),i,o,r);return{lines:a.lines,polygons:D.polygons}}async function Mn(n,e){const t=Re.get(n);if(t)return Re.delete(n),Re.set(n,t),t;const r=Xt.get(n);if(r)return r;const i=Ci(e);Xt.set(n,i);try{const o=await i;return mi(n,o),o}finally{Xt.get(n)===i&&Xt.delete(n)}}function On(n){const{map:e,id:t,isolineGeoJSON:r,contourGeoJSON:i=[],colorMap:o,fillColorMap:s={},fillContours:u=!1,fillOpacity:l=.7,lineWidth:d=1.2,showLabel:f=!0,zIndex:a=9999,visible:D=!0,geometryCacheKey:A,visibleThresholds:m}=n,C=Ur(o),v=Ur(s),E=m?new Set(m):void 0,N=new globalThis.Map,T=b=>{const S=Number(b.get("value"));if(E&&!E.has(S))return;const y=b.get("geometryKind")==="fill"?"fill":"line";if(y==="fill"&&!u)return;const x=`${y}:${S}`;let L=N.get(x);return L||(y==="fill"?(L=new V.Style({fill:new V.Fill({color:bi(v,S,l)}),zIndex:0}),N.set(x,L),L):(L=new V.Style({stroke:new V.Stroke({color:C(S),width:d}),text:f?new V.Text({text:Number.isInteger(S)?String(S):String(Number(S.toFixed(1))),fill:new V.Fill({color:"#fff"}),stroke:new V.Stroke({color:"#000",width:3}),placement:"line",overflow:!1}):void 0,zIndex:1}),N.set(x,L),L))},O=Pr(e,t);if(A&&O instanceof Ke&&O.get("isolineGeometryCacheKey")===A)return O.setStyle(T),O.setZIndex(a),O.setVisible(D),O.setDeclutter(f),O.changed(),O;const I=new $r().readFeatures({type:"FeatureCollection",features:[...u||A?i.map(({value:b,...S})=>({type:"Feature",geometry:S,properties:{value:b,geometryKind:"fill"}})):[],...r.map(({value:b,...S})=>({type:"Feature",geometry:S,properties:{value:b,geometryKind:"line"}}))]},{dataProjection:"EPSG:3857",featureProjection:e.getView().getProjection()}),F=new Ke({className:t,source:new ct({features:I}),zIndex:a,visible:D,declutter:f,style:T});return A&&F.set("isolineGeometryCacheKey",A),Tn(e,t),e.addLayer(F),F}async function In(n,e){const{id:t,config:r}=e,i=Sn(n,t);if(!e.url||e.signal?.aborted)return;const o=Ln(e),s=await Mn(o,e);if(e.signal?.aborted||!vi(n,t,i))return;const u=Pr(n,t),{uniqueThresholds:l}=Ce(r.legend??[],r.legendScope);return On({map:n,id:t,isolineGeoJSON:s.lines,contourGeoJSON:s.polygons,colorMap:Di(r),fillColorMap:yi(r),fillContours:r.isolineFill===!0,fillOpacity:r.opacity,lineWidth:r.isolineLineWidth??r.lineWidth,showLabel:r.showIsolineValue??r.showIsolineLabel??!0,zIndex:r.zIndex??u?.getZIndex(),visible:u?.getVisible()??!0,geometryCacheKey:o,visibleThresholds:l})}async function Bi(n,e){const t=[...e],r=async()=>{for(;t.length;){if(n.signal?.aborted)return;const i=t.shift(),o=i,s=typeof o?.format=="function"?o.format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"):String(i),u={...n,time:s};await Mn(Ln(u),u)}};await Promise.all(Array.from({length:Math.min(di,t.length)},()=>r()))}function Xn(n,e){Sn(n,e),Tn(n,e)}function Hn(n,e,t){const r=Pr(n,e);r&&r.setVisible(t)}class Rn{map;options;ready;abortController=new AbortController;constructor(e,t){this.map=e,this.options=t,this.ready=this.render()}async render(){this.abortController.abort();const e=new AbortController;this.abortController=e;const t=this.options.url;if(t)try{await In(this.map,{...this.options,url:t,signal:e.signal})}catch(r){if(e.signal.aborted)return;throw r}}delete(){this.abortController.abort(),Xn(this.map,this.options.id)}toggleVisible(e){Hn(this.map,this.options.id,e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e.config??{}}},this.ready=this.render(),await this.ready}}const Yr=2;class zn extends Br{windVectorCache=new Map;windVectorLoadingTasks=new globalThis.Map;normalizeUrls(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&!!t):typeof e=="string"&&e?[e]:[]}parseScopeValue(e){if(Array.isArray(e)&&e.length>=2){const t=Number(e[0]),r=Number(e[1]);if(Number.isFinite(t)&&Number.isFinite(r))return[t,r]}if(typeof e=="string"){const t=e.split(",").map(r=>Number(r.trim())).filter(r=>Number.isFinite(r));if(t.length>=2)return[t[0],t[1]]}}getComponentScope(e=this.options){const t=e?.config??{},r=t.layerConfig??{},i=this.parseScopeValue(t.componentScope)??this.parseScopeValue(t.uvScope)??this.parseScopeValue(r.COMPONENT_SCALE_RANGE)??this.parseScopeValue(r.COMPONENT_SCOPE)??this.parseScopeValue(r.UV_SCOPE);if(i){const u=Math.max(Math.abs(i[0]),Math.abs(i[1]));return[-u,u]}const o=[t?.scope?.[0],t?.scope?.[1]].map(u=>Math.abs(Number(u))).filter(u=>Number.isFinite(u)),s=o.length?Math.max(...o):60;return[-s,s]}buildWindSpeedGrid(e,t,r,i){const o=Array.from({length:i},()=>Array(r).fill(void 0));for(let s=0;s<i;s++)for(let u=0;u<r;u++){const l=s*r+u,d=e[l],f=t[l],a=typeof d<"u"&&Number.isFinite(Number(d)),D=typeof f<"u"&&Number.isFinite(Number(f));if(!a&&!D)continue;const A=a?Number(d):0,m=D?Number(f):0;o[s][u]=Math.sqrt(A*A+m*m)}return o}prepareGrid(e,t,r){const i=Array.from({length:r},()=>Array(t).fill(NaN));for(let o=0;o<r;o++)for(let s=0;s<t;s++){const u=e[o]?.[s];i[o][s]=u==null||isNaN(Number(u))?NaN:Number(u)}return i}getWindVectorCacheKey(e=this.options){const t=this.normalizeUrls(e?.url);return JSON.stringify({urls:t,authorization:e?.authorization??"",extent:e?.config?.extent,scope:this.getComponentScope(e)})}async getOrLoadWindVectorData(e=this.options){const{url:t,config:r,authorization:i}=e;if(!r?.extent||!Array.isArray(t))return null;const o=this.normalizeUrls(t);if(o.length<2)return null;const s=this.getWindVectorCacheKey(e),u=this.windVectorCache.get(s);if(u)return u;const l=this.windVectorLoadingTasks.get(s);if(l)return l;const d=(async()=>{const f=this.getComponentScope(e),[a,D]=await Promise.all([rt(o[0],f,void 0,i,{detectNoDataByBorderColor:!1}),rt(o[1],f,void 0,i,{detectNoDataByBorderColor:!1})]),A=Math.min(a?.width??0,D?.width??0),m=Math.min(a?.height??0,D?.height??0);if(!A||!m||!a?.grayArr||!D?.grayArr)return null;const C=new Float32Array(A*m),v=new Float32Array(A*m);for(let N=0;N<A*m;N++){const T=Number(a.grayArr[N]),O=Number(D.grayArr[N]);C[N]=Number.isFinite(T)?T:0,v[N]=Number.isFinite(O)?O:0}const E={width:A,height:m,u:C,v,extent:dt(r.extent)};return this.windVectorCache.set(s,E),E})();this.windVectorLoadingTasks.set(s,d);try{return await d}finally{this.windVectorLoadingTasks.get(s)===d&&this.windVectorLoadingTasks.delete(s)}}async getOrLoadContourData(e=this.options){const{url:t,config:r}=e;if(!r?.extent)return null;if(!Array.isArray(t))return super.getOrLoadContourData(e);const i=this.normalizeUrls(t);if(i.length<2)return null;const o=JSON.stringify({urls:i,authorization:e?.authorization??"",extent:r.extent,scope:this.getComponentScope(e)}),s=this.contourCache.get(o);if(s&&s.schemaVersion===Yr)return s;const u=this.contourLoadingTasks.get(o);if(u)return u;const l=(async()=>{const d=await this.getOrLoadWindVectorData(e);if(!d)return null;const{u:f,v:a,width:D,height:A,extent:m}=d,C=this.buildWindSpeedGrid(f,a,D,A),v=Kt(C,D,A),E=this.prepareGrid(C,D,A),N=this.prepareGrid(v,D,A),T={schemaVersion:Yr,rawArr2D:E,smoothArr2D:N,extent:m,width:D,height:A};return this.contourCache.set(o,T),T})();this.contourLoadingTasks.set(o,l);try{return await l}finally{this.contourLoadingTasks.get(o)===l&&this.contourLoadingTasks.delete(o)}}async getSourceFromParams(e=this.options){const{config:t,url:r}=e;if(!t?.extent)return;if(!Array.isArray(r))return super.getSourceFromParams(e);const i=await this.getOrLoadContourData(e);if(!i)return;const{rawArr2D:o,smoothArr2D:s,extent:u,width:l,height:d}=i,f=this.getValueTransformFn(e),a=this.applyValueTransform2D(o,"raw",f),D=this.applyValueTransform2D(s,"smooth",f),{colorMap:A}=Ce(t.legend,t.legendScope),m=ht(t.legend,t.legendScope)??t.scope;return this.getFcstRasterSource({rawArr2D:a,smoothArr2D:D,extent:u,width:l,height:d,colorMap:A,colorMode:t.mode,scope:m},e)}}const Ei="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAEgCAYAAAAqiQESAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEAKADAAQAAAABAAABIAAAAABC0VSqAABAAElEQVR4AeydBfwcxfm4/0DwAMWdBAgOxaF4sOJaHIpr0aKluDttsUKBEqyU4i2uAQIUinvR4Bbctf/n+WaH37LZ3du7272L7Pv5PLezM++878zs6N7lm//3/2oZ0VtgtBG9AnX56xaoW6BugboF6haoW6BugboF6haoW6BugboF6haoWyC/BZYk+Z8wer5anVq3QN0CdQvULVC3QN0CdQvULVC3QN0CdQvULTCqt8AYo3oDtFn/3uT/Dv7Xpp1Wsk9LpttgAegFt0MnxZcOS8CqEYtwfRs+hFrqFqhboPUWOJSsJ8D58D20K3Ng4EF4DAZDMzIXyh/BD81kinTH5PpzcF6opW6BugXqFqhboG6BEbEFxqfQi8EvYDrwl7cfQDMyAcqzwzvNZErojse9a/LcYPgz+BbKEPfwY0PRPfz06M4HM4DyydBLZZ+TY9m9zBTwNXwFzcpUZLDN2pWfYcBn6TnM9v8CypKiz6HKMpRVl5HOzrrU6Eb4HDz4fwPPw1FgZ+iEOEjvB/2Lm/O1oFOyJY7eBH07EF+G12AXKEtmw9DvM4w5kW4Lf4d7wefxR1gQ0mQ5IjdNS6jj6hYYDlvgYMrk2NqppLJdENlbuEl7G0f5VmwyX1B3TrIe64WI+jpCtoCbXV92N4NrVFniiyQ3bs0wcVnOsWP9x2kSX8qXIX5Jcw+4aW2G99G/GCaBVsUXkF/CVyXwMTYug0mhWel2+7vXarYNQn0na7ayKfr2Je00w4QpdtqJsh9ajlZpxbfPvVV/5jN/u+Ih13HkOHAti/Mw9+tBUXG/av6limaI6bkf/gd40IyXwX55IZjejji3+mXmiw2M+MXfDvAUxMth+DnYDewrZYn+todHIenvAeI2g6KyCYra2LtohhQ9n7dnDs9c8fI8zf2u0G7dizyHqstANWpJtoBvW24HH/obcDrsA4fDXWC8bwTXgarlPBzEO59hF5xZK3Y8FvavBv39CxaHMiZZzAwjg4hxQknKskS8Dd+DOueDE6PPxHJ575vRuBzCzTfQNx5Zh0eqFpiZ2pwDq40EtepHHezLzjftigexj+BNGK1JYy50jrMpmswX1Gck4EL5eIgYQa6TU85mNnaNquW3R0dC1fNzo3K0kj4mmV4A+2Mz2G/sv+2+FNf/a036DuX04NYH2pFeZH4Ggs2iVzfTt8A00I64Ab4CfAZFcayHch5LuFU5jIxPwJNt8jL5Q3mOIdyMdLv9nTP/Bs20Qby+xzdT2RRd+/9gCO3XzPUe8k0P7coRGHAeb8Z3UvcN8m/bREH8htt1K2mnmXsP7ZeCLy5bEfcSoQw3EN4ZVgG/BPS5DgHLcwY4ThvJQBTUX7uRYiJ9G+496JvXffd+sAl44LwGfDafwvrQqsxORu27t86SyUi4A9R7B06C7WBzOBpeBtOc99VtV1yHg793CZ8CPgNfQBi2DPq7HIo84wMj/dO4Niuu4f8A/X0Cf4HdwfrbFwaDaXfClNCq5D2HTpWh1bKPtPl8m/oo+IAPgbEgKUsSMRjc+FT5EmBM7C8IC8AjYJn8pm5OaHWjTtZCchFa+jumkHbrSi5aTmrHJUzYrt/BAzBrIs2Nwm/gc7gVvA8yNwHLvXeIqK8jVQvY998En/FzI0nNnqQeLvrjtVmfVclvu/ypSTvToe8YHNRkvqR6eDnaJ5kwnN/fRvnugHnaLKdzswdY7TUrm5HhSujXbEb0VwA3rYu2kDeeZQxuzgH7QVHCumS/+wO0K64DNzbB3ejad1vp92QbRtzgF627evH6nzyMtc5EXIYb639RZ9w19PKPqDwDGmoOqzAitv/fovqW0f4etNzTFOW+yLfP/4/QrvjryfvhwRb5mHyW5Tv4GRSR6VByzLfq80Xy6lN+C83KSmT4Fr6E1TIyT0z8NaCP4zN04tEDuVG3mRcAO0V53uO6GKTJwkS+BLbvimkKBeLyDp5mnwB8GWj5zwcPo0nxXHQUqHMvjA2tykRkfAq09VdIO+BbprMjHV+MNHoJc2Ck2+wLAM9cA6O813OdDJJi3Y8E1x377LjQimQ9h06WoZVyj9R57PB2xH0a1HJq0t8EJ41ZG+i2mzwvBjzsWK5joT80GgCotCxOMvryDddoCSvtDPSEqZ7bXfnU10KxxH6EfcvpJOTAz5LVSfgeks/KBaGVTXiWnzp++GiBeSjGu2B/8bn/CkYGcdNrnX7ZZmXCgrxuk3Z2iPzv3mS+pPp+kZ1tkwkZ9wsSP19GWqvRzlfWf5ImDKyBru3vpupUcLPXjFiH8PJDO2s2kznSPZ2red+CGaO4Ipf1UPoGzLtJkQwV6Jwb+S/jANRK8c7ssn83rbZ/FfV3LdwS1gEPSmkS1tAq/Kf5axS3Bwq2x4BGiiWlV9n+FtG9iQeBaWF5SMouRFT1/JO+0u7/0mX/8TLNzI0HI9vDvltU3OdN1STh4OWc735Pn+6PmxG/8HsHzNvosO6ee2Ck22jPH/Qa2cRcj8zBp/P4V+B6kif2w/fBvVByf56XL6RlHTxDejho+0K60TnjYHRsu31D5hauF0Q2/s61UX3CXL9dAz+tvgA4PCrLXVwbnXV+F+m672pFsp5Dx8rggLsQXoVnYG/IEzcYD8AL4INw0I5M4iC0M98JjTqi9V4S7gfzVSFzYfQ+sEyBz6Lwy1xXgSrESVR/K8BYsBPcC1+A8d/B2/APWBbaEQe9dnvFjPyZsH4WicVlBX9BghNiXM7n5iuI24yn1+ERrwVcFIeA/cKF0m9bRxbZlopYLw/Q7citZNbOTE0aCRvorG8dippbKvJ/QYEM06HzObj+BDmJgC92rENR1Hdu8lsExQ2dcTd4U1Cc65+H4NN+tiOMDnniS4YzIF7mF7hvlC/N5phEXgWWYTAUeYbro+dcbJ4DoFvS7QPQyOh/PB7mAIj3Lee9wyAp3a5/sjx7EGGfHJBMqOi+6vovTLnvgbsgbU9StX+bzRcPmxtIkU74T3GbGTWEFJ9/v0yNnyasxG14aWC+onyL7qaRqbBn9dqMhL7qt/tFpDdKSxdQHIiO9Vi7gK4q7lnVP9qbAjIrOv0L6KWpzE6kvt5OSZyWOOecT2GalPRklGvnWjB5MqHgfXhh9GFBG66TjoNG/g5ExzqeBkXF86znK/tVkTOddd8QZoRWJO05VFaGtMPQPym1k1uQEwiMBWmdcHXiLw6KXH1ws8FyYEPH5efc7Arnwb3xhOE8vFFUvlO4JuuUVvRBRC6allBC3GrYuBSeBtvYDe3YsAJ8AIfCdbAn/BHKlJkiY6NzfQr6wTtwObwGbkQ8LPitxPqg/99CK2L/ewLcyAZx0nwMfNnUSP6domBeJwkHsbZrGbFbYAGKfwtMAl+C/e4mGFnk2agi87RZoQXJ79h8uUk7bmqd79odK49Hfp3/G8m2KHjIiT9H1xPnHO0UmX99QdoL9DcOfAyfwCBYGfrAK9BI9HVKhLqTwp9he9gNtBeXMbjZAY6ASeIJhE8FN7PNipuODcA5dk24A5aBwZAmzpF/A8uyL7h21zLytMCVVGWlRHXc/B4Mr8PZibSR+XZcKueGfnxwrzEYOiXT4mgrmAEmh23BsfoIdEqcn88Hv9T4HK6AkUls19HgGXipQMVcJ30evcBn0Y6sEmU+uaARD4h3FdRtRs3z1Q9wfMFMz6EnZcuqGHQNvgDeLGDctfOaAnpZKtbbZ+989l6WUize523ZqpDlMOoccxnYFxuJdb+0kVKT6ZWVwcESlym48fCluPHzsLUNONGeBe9DXI6MbjzQHwaXQH9YD2ywuOzDzWYwDawWTxjOw7NG5bu/y+WcA/9/B5/L8vAFxMWBvwlYzj/AC3AtlCW+jXMy0qb95ndwEnwHcZmeGxemPeBpcBA3IxOgPBPE23tc7qcCN8Ctyn+jjPNxtQ1rSW+BKYleEZJzQ1zb5+rcEBefkYcUr1nyNgke7pwk25EFyXwLTAxugNaA26BT4sFyO1ga3oK/wqNQprwSGZuzDaM/I6+8BM20+VjozwHvgZubdsQDuM9de/ap5HxB1I+yMiG/abj+x5j/CyxK0GedJ4eQOC98AxvBOxDEecvn5WJ6XohscFXPA/1EMb35Cd8Nf4N94Q3Qri8L9J0UXz7YP1oVNzfrgevpWnA7LAOvQVxsu0vBNt4PToBaRp4WWJyqJA//8dodyI39NW98xfVH9PDuVOD3USUW4Wr7dEoc87a1c9oF8DU8Ap0S/TqfbQWvw0CwDMaNbOLceWKDSv2S9HDgPJrwPxroN0qeOVIocuBrZKvVdF8ii/uAj1o1UlK+WSI7ndo3zxr5K3tP1UpzDA9lqawMyU3+hLEWOo6wm471wfgN4QwIMjuBsOHZn/Bd8C/YIsK8cVkiuhkcjywQdgPrJtg3gu/Bs/ABpMnoRKo7HYwGL8ML0M6i2Jv8yudDL137PAjP48Km8EVOKf5E2mzwZY5OK0luercH2/hQsH+kiRvTdcFnZV84G5qRGSLlwbFMbug9GIwTi2s2GDbMMzbIeAzpv4ExGui1kvwqmVYBJ/UscVOzA2T5/x9pD4LjMt6vPRycDGNDlujffG5gsuQvJKyZlRjFW4aZwfEVZG8Ch4ebnKv+L89Jb5S0EAq3gPOCm561oZOH/4nw5yFsAQiyI4GV4I4QUcL1rcjGtG3Ymj7K6yaxGdGn49z+UoY49qaCPvBihkHXovnA+Tprfs/I2hN9IJ+HgvOefeJmiMsD0Y3P7bx4Qk74M9LOhT0jnbe5Wg9lE3DM3QO/hCD/I/AOBD19fRoSW7x+Sz7HzT/Aul0Ey0AQ58UrYSxwLT4eqhQPXEuAL3es/3+hlmpb4OcNzLtuulF8uoHeyJLs/i7IkBDo4NU5dR34CH7WQb/T4esmcH+wXeTX+cU11TnCPfioJCtQWQ//zoGuAUdBu/JNZMA1sFvyQ+Q4XLtVDv2GMoRrp8riuje8yPBQltLL0Cundd1cOxAuhJ3BTa6bmXCwDJsiN6p3gzIAtgAPOW4SwqbrV4TDwSv5YoCkVJmZ2GPBw4gbmyA2wg2wDzwXRToZ7gW7ghNkXF7j5o8RrXRgJ3qlD3zYE+rOh+1wH7xUwP1vCug0q7JoLIMH0DxxUfwEJs5TykgLh5Z3Y+nfE34M5gUX/v9Bs+ILCWWaoZfMT/vthJmp7SXMQfbJIe8FgGNnhgZuJiV9PLCNg/QnMFO4ybhOS7y238hIN/oKsI3G9CZDnic+aeM24jwE987IY/QHcH9OeqOkhVG4GdxwfQPOK26GOinOMQskHNpWp8Lcifh2br8j88cwGThPe9+shLHU7LwV+t/bzTrM0H8nip+a64sZOn2JHxtezkjPi/49iUfAV+Ch/BZIyuNRhGOwGfG57g6uMdfBjXAUeNgaH34JQZyffwtngy8AfoBToAz5FiMnwdowUcKg/WPcKO7ERFqZt/q9CFaPGbWOrq97xeLqYPktYN9uJEMaKbSQ7pi07/mchyc5gcI4rzhXndmFgr0V8+l+p1Pis1g1w5lp7cgeZHbvWNbB1zXLefliqEKWw+g/wcP/7+A4KENco1wnZoay1sBmy2WfEtfwVtf/Zn1m6b8UJTTaX2blbzZ+cJQhnBmbzV+m/vBQlsrKYMdqJMegsDnMA/+Gv4Eb3c1A8SAeDmQDCd8KK8CNcDq4MXFSUTxcDDTQQNYh/XyYAAaBm34H4uywNXgYXhE2Bg8A18Oy4AR4ETwMLpjquCF047QMqP8FNCO3o7wjeNh4tJmMJepOgi03m6+WaLMZUz6HbWIZDib8AIRDdSypJ7gVn5b5H8mEAvdTRToeFuNyLjf2J5/D5fGEguEPIz0PIXmyGonzQZGxkWcnLe1dIp9LS4jF6d+XEFn+HWsuUJ9AXPbl5mpwvGWJ/h0beXIBidKs3EuGJZvN1IS+beI84CHEcb4+XAedlrkyHBo/ISSfS4Z6oWhtWV9fAjj/xWUFbvaAKeBZOAGegLg4BpWPhl4Kf04baTabL8vB+1HCNFkKxM8QpTX7AuB35PNA/g2sC7dAmjj+v4A+aYk5cYNJuwa0/Wtw7vNZbwuHgPOV87LluARch+YB5Vp4qSc0cnxcRTWsX1xG52ZPsJ7Oz52QxXDiXOMLskHwNHRC7L/yYMzZAoQdi3+Cr2PxZQevx+An4ByTJg8R6fxelmyIocNhVrBed8LJcBMUEXXdr20Elrts+Q6Dfy3baI690Uiz7jPk6Jjk+rxKA512kt8hs1QhzqFfgWO6DPEZSRXiPPQvcL/j3HsclCXOc6vDJnBPWUZbsOO6swWsDa3seVtwmZrFdewHWAd+H4W5VCb6Ox7057Wb4n7CcWF/2B3ce3ZaOlaGftTMCUzWi9VyVcJ+8x/SwvWwmE4ITk3guRTd24jLWrxCXq9LgAvO97AFJMXD6GVgGZysXJgMvw6zQVLcjHlgUuesZGKB+/HQeRM+gBkL6FehMjZGLf8dCePW3/hfJOLLvvXQrR8nxpujsIeDU2AV8Jn3AQfspeBk4WFkYmhWfkMGfTnpxaUXN9rU7/zxhJywm7O42Kfsh7WMWC2wCMX1udsvnIDtZ92Sg3BsOZIkD+hllO+ZyM9MCWPOu0n/nxGXHBfbRXqnJfI3uvWFp/ZPzVHchLTHQb9et4Qs0Y72tJslm5KgTnJNuTaKHycl475Rmgv0GinpySjXAdexZmUpMoT29kVLENeGjcBNaBDnyKC7bIgs6eqhV9uPJuz1juJNc56sQhbCaKhX2vUt0uO+d4n0LyqxMK4nvvSL+3etsX+PBnGpwv+DOPgetoocOS7DvJRca6rw7xjRf7z+ht+HMv0fGfPxGOHbwIOcvq6GKaGR3IGC+gdFintE9wOi+2YvPl/3Hs82wDmzL1TR/tbB5+3L5/VSuJO48FK6bP/DQ/2pXssyhJz2h34FLWwW6e+dor8McZ9H6a4BWXIsCfr02ow4n78MrhULNpMx0nWeSpOBRFqetdMSU+LmJc5x9xQUOTulmOhZm9LWzqTu7ERYtreTCdH9BVH6rhnpedHjkzhRnkJKmuPI8myQktZq1IGRTdeLZuR0lC1LXl9rxl6ebtZz6EgZHJxWVJzg4uJidyj8FU4CD+pZMgEJTpbnwJmwJYwJReR+lPR/WI6yk+HdkZ66bgLyBmpf0h3M6i4LzcqvyGBeB+KMzWYuSf8h7HwCk8TsfUXYcv0iFldF8IjIj4Pf5+iz+TyK038cX5QcBfFNMbeFZS80tbdaSo5ZiHsffJa/h59BntxB4nFgf1Es8z09ofpjRGkBn519P/QxF6Juiov7SxDK49VNuRuWssXNt/bnjBmeg7DzXdx/CN8Z0zO4W6T3h0R8o1vnbm0en6Ho+A4+49dtM/Qdg+r9NiPd6FDW5CJ7LWnmTW5i3Bga7wuhdaGIPIGSeSYoopzQCX3QOThr3ulDmhs2fTwOZcuSGNT2ownDvaN403ol0sq6tX9rP49pY87KPgBp2rk7y7/rRlyq8G8/0799blkIexC/kEhKFf71sSrcB5/Bx+B8OCMkpVX/82HI+cU6rhQz6hzkAdz6uwbvAKNDloQ908ORQphTBmRlKBCvjY9gfXB/msT57zpQWq3/0Nzpnx5khkDaoWQq4r8Ax6hShf9u139ozVr7tN3sO54xikiYb5zn47IUN/Z9be0TT0gJHxvpeW1WViaD67rlDs+0qI3nUdw4RXkgcZZ77ZS0rCjXYPM410yepZQTb3v7UmyxHB2TZgf9vO1NikxB3Dtgm2St8ynZeqJm5vN1cO4qKpbbtdYzzlpFM6E3Gjg+e6XkOZA463haSlpe1CQkWn7nxZ3yFFPS1iCumf1G1nOopAxpjZRSh54oN72HZiUm4j/l/o+JuCK3fVFaBFzY7PhZ4kN0UxkG5hWEH8pSJn4wXApbgAPzDmhGtL8nnASPwGFwNQwGy9IJcRN/IZwMW0Gn/OLqx5cOrxF2Y3AIWJ41YT5wkL4c4U/BXQhblbGjjH6rtynYj8aM4ryMC2OBh5AjwUkiS3qT0B8mhW3hOzB/Ldkt4K85VoK8ueFp0n3OcRmPm3Ugr31dXNygNdN31V0bBsJM8GvQ95nQDfkQp847+8G88D44Jj2clC0utso4Qy89n86PLnJpsjSRLhQfRIkhn2O2GQnP0PGSFPuHdU+To4n8GyTHf/AfypOWd8Io8vO0xEScc/EJYPtsBldCEXGeUpwPXKOakTD/TkCmncH5Jylu+seIIv+UTBzB70OfyqtGEZ28/Hlp/UlcPEfBF8KnQ3jGOaotJdlnHoeLwD53A7hWOR+4V+kHro9fQ5VyPcalKlkew84vN8JNMSdPE/4lrA+OBeffreE38BAkJYxjx0tZcjaGDgTLl3zpMhVxF4BlrEqsk4eHg+Fy8EAQxDnRdhgUIiq4Vl1/29X5ffSSyu764ZpfliyJIfu+L2L2BdeAssW6uxb9G3zOR8JdcD5cDIPBPadrWtY+ZgrSXAc3gh3hLWhV9ifj7LAG/BcOA+eeN8H+mFUGkn4U89svT4ED4AtoVt4lw2owEOyH1u1oeAqc922PLHGcTAvXgWN0D3DeTMqYRPSJRVpWy3w1ON5PBl/INBLLtBc4LxdpnzR7joWZYwm/JXwJnAHrgf3C+b6RPIvCbnAifN1IOZFeeRl6JRx2+3bGqADPc7Vz58nTscS0BSiW3BMM+v2SCQXvXfSeBA+kdkTxkOpkYPwAuAjCpp1gqaLtNWELGA8cRJ0S66mEg0FvwluBk8D84MB1sn8ZBsLp8Bi0ImHAOhE/Dg5+7efJWCS6OEwfKX3J1QlrIvgALgRljKGX+jOnBc4izcWmkTg5vhRT2pvwYbH7rOAGJDiZNyNOtMvCQHCOcBK2T/4VypCdMXIE3AzW43XIkzdJ3D1PISVtHOJclFxIHoa1wH7arDjfZIljMH6wHS1SdAFuRhxPStqiPgfxWeNoctLmhAchLmFODHbjaSHsnKYE3aF3w346750URW/H9dJhVTJjgu1emRrZCfo5HqaG3cAyfAVBLP820Y2blItDwkhyvYl6PAezZtTnUeJb6c8Z5oaJtl/lySQkzgRhnc/TbTbt52R4BFyTgnj4VyaGB3pCQ/+pYb8oXMVlLoz2hetixp1HloZD4LNYfKvBsNZm2XLuti8cBb8B634muFn/CILsEAWSc0FIb+XqnvA0OBguh/i8th/37gMHQZVyKsb3gfUhzD3OCR701oMqper6n0vhtyq5Aq6rPq92ZVEMXA+94Ug4AcoW18uXoE/CsPFbRiSScm/XJHXpKN81uZr/l+j+6K/gfiGI/hXnmj9GeK+ENW3oXfanc5drp3u7onPUPeguAsE/wR/nwOUJSxD37T+Em5zr5qT9ElYF59S49OJm7ljEa4R/BRtHV8dcXPTnfHR1PDIKv8v1d3BMSlqRKOvjfBvq7l7I8b0abAG3Q1LcP14AyWfyMnFHwL7QjFReBht8eJIvosJMWaBQDoYgU4RAznWiKC2+SOWopybdQqwddBlYOArPwnUx6A/7gB3cDX4VsilG34JdYXUIG+pNCI8HA8FBUba8Ghmck6sT8d+hL+jLQ/qLMAbMC9vBNrA3/AGaFRc5xbo9AdorIvblg8CNiOJkcTRYllB+bX4JtWS3wCUkObbGzFbp+a/aXkukuyl0XIyfiI/ffsjNvfGIJsI+w2VhIPSFs8H+NwDaFcesdd4QVoYT4CwYAu3K6BhYB06EvqCsCDPDk97kyNhRWvygeS1xg6EvJOUqIr6NRYZws/N83hzyOvZdmEaL+YkHnZ+SEvwnF8a4nu1UREKd1HUuOq9IpoSOL0qaFf2eAUeA683W0T2XHvk1n2FNsu/En9lQjRH702dnHW+D3ilVOSclrsyozwoYe6eATisqr5DJZ+pzd35zjgjiWPkn2D53h8iKrpZhCdgPjoe5wbV4HBgArpftSqjD8hhyT/FFikFfQroHuRDOhd/AenAI+JLItXdtcK09EsqUbh7Arcf7YF8/GC4Dn78HDet9HVQtVdbfZ+n+uOhc3KiuzrNXNFIqmO664/ieAH4Fp8B7UKa4rp0Js0HW+qY/0xaDWbxBLJvzYpCNCIS1+1+EB4aEAteX0LEfhfx5WdRZCpyTlKfghZ7Q/304ht1vKK5hF/SEin3citq7kNcWwdKMBHxRqjgmrINXJV4G55Nj4FETEmJ9Zk/EefsQuBeb3BvE/YS+9OmebS7wZVwop1fj2pl7HAOWJdgk2CMv8nkGTDf0tmeszEZ4TvglGB4A34Ni/n7QTLubT+l4GSyog0Cc0DstLmSfg/7nb+D8nEhP3WfBTpEl2n0V1D0wS6mN+EnJezQ4wDzkzAtVysIYt/5O1g6y78C6PQXLQdmyEAa1/wJ8GoUHcO0LSXHj4GJouVZIJha43xodfTnJtyI7kMn8h6VkNv6WlPg6asRpgb4U9RXwWTrJbgHtyuIYsG9rM+DmdQB4eHfT0azMQYajIMw7wa7j4riCxp5Hz3x9E/oLcu/mJ9j06iFkQojLztyY9qd4ZIGwG1rzWf40cVMX9x3C16QpE3dCpL9XRrrRh0Q6uyR0ro3incOD7EYg+DwoRBa4uukw35QFdNNUJiPSfqGNl2AMCOLca/w3ME2ILPm6JPb0kdw8eSA3XvLWQZLbFvv1ZeA6F3w+TXgsiIvP0fSL4pFthB2DbkaDz+T17oTtsv0H8+dEZXiYaxifHsyTUoX/FXHinOccsi5YBtvhbEhKO/4HYuxrmC5pNOXe574vxPuDZfLe8gbZg4DxA0JEG1fnM8fb6JEN7x+LwuHSTv2DjazrDCR8Cx70pgbnhI0hLlX673b94/UsGh6Cos+/X8EMm0X6e8f07Y8vRvGPcJ0olpYWPDbS9Vq2OM+6Drkf/g5WhSCuze/A2iEiug7kahsk46Pkli72P1/EafdNmBbi0pcb0x6H+SFLZidBvbezFArEu2cPe7OTYvp9CGv7HpglFt9OcDQye1YIa8KRMWNLEF46dh+CBxKwHKeFiBKvPlP3BNo/Hyyf4ouBNXtCxT7aeQ5tl8HBaQVkvWLlLV3rgMi/i9sUGdZXIt5BF8rq9Y8QGp3gT8QHrs5nMPlPUsq9WQZzn4MH4HHKNZ1qbRCx1skNrZ3bicfNgYfgssU6hfY+tYHxGUm3HLc00EtL3oBI/WyellgwbiB6X0DvmP54hLV7TSwuLfgbIh+CRyvAQ1qj/me9b4OBGdxBvAeqZF930rspI8/AKP4CrhPDiC72r3CwdkO8ZQkVGhcbB8EnEPp5uH5N3P3wV9gbNoO1YHlYDTYF+83R4DMIm52QP1x9rotBUXkNRfOmHVgnJH592BUWhTT5NZHmPyctMSdujyjfiRk6brysS6jX94TPh/EhTZyb1d0pLTGK2znSsX3jci035k3Op3tG8aZtD0XkBZTU9zDZqtiW2pCNIyMrxOIujuKquCwZ+XFuiovzXChTr3hCheGfYds51g3wz1P87EKcZbooJa3VKMfctxDqGq5vEOfGKS5V+F8RB/r8Cqzz3PARGLchxKVs/3Ng3Odv/9KfY87rh+B+yPk/vra0438MbDnGm5HeKG8Gh8JWkMy/B3GWdwC0KzNgwH7QrQO45XctfRpOgxfBNotLO+0ft5MWHh7qn1auvLghJPr8++UpxdLsS+on1wPr/nKUdg/XrDWHpJ6//q+NY72pSJbC7mdg/SaJfJzBNT4Wo+iePZ3lWTtElHg9CFvavi1hc3rurf9YifjkrfOn+d9OJjR5PzX64azgvKRMBfvC6N6ULPanN8CyrxnZnjW6Ji8HEqGeY7YKmQyjT4I+doscZJUlSh7m0u5zaKsMNqaFl/WGKVpnIpxI7wDL4CZ/OxgHlCng9/AlmH4ruPB+F93b+ZcFxc42N1wK6qqzOlQtv8WB/vaq2hH2B8FnMT9OOv+G7yHrUBBTbyroSwXrJSsXyPkOOs8X0EuqLEeEPvZOJjRxv31kI/68+0Rxf25gx/YL9aziunQD//8p4N/n6wY8LtarSHlt35FBZqIS4YBse7jpLEN8QeJiZd8t0p6NdDwgnAXzQbPyBRm0H+a/ZvOvEuW/rMmMW0T5Go2V2dFbEfpCnpxDovXYMkdp3Ujn0ITOtVF8Whv4nLTr8y+yXjknfQmjQavimqJPeTQy8s9Y3MJRXBWXtSM/wW/w0TuKt0zThMiKr/bp92HRDD+7EG95LspIbzX6F2S8EhyfchKkbbar8O8a+C3E55pFuL8NkvN6mf77Yz/0ubyrzyNImf6DzXaue5DZsg9ox0gs7wWEn4bT4EXo5AEcdz0/Mf6Bq3Xa0YiEVN3+VdTfw/XmsGVJbIadyUAZAraVZ4wiYl71905R7kvcK2D6TZB1uD020vFapVhGy3JiAycDIz3n8SrkeoxajtVaMD57lPftFvIms8xDhGPjyWRCRffLYNd6vwx5a/uBkd5pXKuSmTHsGvEJTNiCkzKeQ+Ey9GqhgFVncTPnxvU88A3vX+AM+Brib/v+zr0Lsg39OZwNHm7ETZ4LQpgYXiXsxHYnVC2W9xhwAnNz0kl5D2dOLi/A0bA8lCXxzuwB+1b4LsO4z20KuDcjPS/6uShxyjylBmkvRel9Y3qTRWEXjjzxIGIfqmJsvIvdu/Kck7Yh/BKy/DvRufH5COJyADcPwrjxyERY/3ck4pK3Tt6rg+OnbHEcXgQuDu2Kz9jn5JieGs4BJ/+/gjIBzA33edOE+I3a8RELcHUu6g/zQehDBDPFuegJ0K8Hg9vB+ahZ8TnKO/BVs5kj/beia5Fyx10MiW4a/VrkWfSkkQT/9r8ssW8ozRxgfU6Ok6PgYnBMOC8prhX2YdcHRb2fwWBwDLUqT5LR5+rcOi/sDKuB4jP/T0+o/A/7YujbdyXM278egEXA+i8L9puqZH8MzwSOideqcpJh99/EO0d3Q87C6fkQH4+2u32hSnkI44eC43FS2AyC2Jed+76Ah0PkKHA9jjo6z84BO4H7xk7KUzi7FhaGAdBpqaL+J1CJDUquyMnYK/vLsMHYXA5c+90rXQKW2z7gHsC50jHTKTkTR0fAJrAv/ADdkBNxugpsAdd1owCRT8flTbAy+CyqnpfsB/fDorAEDIJuyYs4vgLcx68JF0GnpXAZ3BQNj+ICuzE4eWwNs8EU4MbUifdvcA8EcSL2zYl57HTTwejwMvwLLoPPoROin2dgTnAyamezSfam5W1yXAVORr3hMyhDFoyMeKhfBx6BU+EGCJvAyQlvC4fCx3AgNCuvk8Ey9202Y0x/nCjsYS6IG1ZlcM9n9sebJF2UnVx5ykt4cEFpVj4gw7nNZkrR95CxUEp8WVFvYeiWkow9jx03AgNhSnAjPAacDc4dt8F90Ko8TEbxgKnYv6cHfY0PY8F38AW8D46DN6CMMT8VdpRXhl5a+rQvKdMOvRT+jI/nwplyFCeN0vLq8kKk0yfHTlrS0UT2gsPgalgB3AxcAPvBJ6D0A5+Xi2O78kcMLB8ZOYWra41ifBXiQdsx4wHQeu0Bcfmem5VAHcfuHdAf3oWypT8G/w3HlG14BLHn3qTT8ikO7d/K5UMvPS+aJiA8O0wGv4Iy5h3MjBDyFKW8FhaGAdAN8RC+BHSjT1RR/52py8UQ5jOCbYlr46C2LGRndh5fDgbCunA2bAMewMeETr4A+Ax/rrXu+acG9wDdEPcqyqJDL139tCwrR2UJ5aqyQD5v6z0XVNXnipbfsmwYlaVonrL1CpWhV8KrG9kgYeMU7rtx/Q9OpYh44PTgJN2WLymAm83xwcmh0/I8Dp3E/TbtuZKch76xH/YWAa9nRbY/4DoauEFV3IjuCv/1pgUx39wt5AtZfhEFng0RXN0oKQ8OvdSfGS1wLPEbQ3JuyFBvKtoDSTsH8jRnPuOwEfCAbp+0f24Lt0GZ8h7GpBMyS+QkHOJb8ekc/jbMAM4HP0ARCT6nL6JcQEf/yuCez/SPj4h+HeZPT86NPZxU++tBcD34AtRNoXNUkDCf3Bsi2rheR17nWJ+R7apY9it7QuV+OJdZJ+fWS2BrSHuOtt+KcDN4KPIlwLJQ9kuAgdispTstsB5uPeh/Dr+Gb8CN3jpgvzgXRiXp5gHcdr4Hiu5Pq3guZdd/CIX8ZxUFrcime9vlYCBsBT+DNeFQ6LSEL5t82f1Gp51H/lwDfOniPqjbEtadTpUl+Ovd7Yrjf3goS6EyuGmKy5vcrApTgYe4WlprATfOvrXvxuHfEodB54RelrjRcJJdH3aH02EpWBSmhDFhMLiAPAPtyANk3h4czKENJyF8MRwED0KWTEOC5XsULHMQDxbvQPimMcTX15+2wBXcyogkT1PYFeB2cAHeFkZ0mSWqwP1tVsS3787p/cANUxFxzPkrAL+Nd41wU9GqjENG50M3RZ83MOLhfAOYA5qdQw4mj2XdHzwMJWWJKOLOZEIL937TegqcGsvrfNhOO8VM/Ricj9DNMAF4+P81fA9Z4gZwRbgRfHFwK/QHX9DWMuK3wJhU4X3YDnxJrvhLlP2g3XlCWyOa3EOBu3kAt72+6WKjDQ/1r7r6jX7V8iwFcAz4wtMXYd2S6SLH4eDVjXJMhlPXQF/6d1vchyvOV50QzyBKp/wN9Zb+OTyUpVAZRk8p/w3EnQeNBl5K1jqKFlgEnAw8xJYt0xYwOBY6ToSDocyNnxvQt+A3MC98DW4wj4LdYCc4Dp6BdsWXT2PASjFD+usDV0TXWNKPQV8YXAZjw14/xg79lq4/97fF4urgyNUCj1Mdf70wsojziDJo6KXlz3AwWLhJC75kcy6Ztcl8SXXzjwZuVhvJ1ZGCB90grkOS9q130PHqmP8KsvR+RdrL0G57YqJHBvDpgVv5Ev7SEyr34wDMTQAXQKPDf/D8MYFV4BGYB9JehhBdywjYApdQZjf5V8XK7nPeCJ6MxRl07A5PUlV5unkAz2vfquqb9Dm81j9Zzmbvwzz+SYOMri0LNdCpOtkvl9ybvgTdPHyvHlX039G1WxefyRodLIvn2HBWCPudbtVdv66/SjfLUqgMvi2qpXELuDF1I+Y3aR5Es8SO/4cosewN4QrY9WB8IuwT+Ui7HEmkLwo8lJcpvkzYCq6HO8Bv6nwBUIXchFEn/g3hisiB3x7a/nfCo+CLh4vhLZgcloHDoR9sA7dDkJUJTAwXhoj6OlK1wPTUxnHnIW9kkSWoiAdM+3o7MjDK7PzheCkq96Hoi8TF4OmimVL0rIdS5AWAL+92gEnMEMkpXO+CvI2uL/72g1lAG0E+jQLjcf0fODd6LUM+w8g5sDc4r5T5shVzPeJLzEvBObCZcttvloK14V/QDRm3G05jPn3m3ZQy6z8lFZmxicpMiK5roJI3boZqZH9OStLc4L6mHbE820YG8vZP7fhI5i2z/V1fZk46yLm3vs5jSqfqO9Tb/312u///X0mGhsZORjS4d5/pPjc+n6dlWZPIeeCCWGI4ADfrM2aiZ835gggP1d/FExJhx4ZrlHLW0Etpn65r/4G/wgkNrHo+OSLSObeBbivJ9uedwfYeDHmi7hzwGDyUp5iTtjtpnjFcw97L0TNpF5gJfO7PQNmyHgYPAM8jzzUwvgbp/eE1KPN8VEkZelHIWhq3wH2oHAtOMr+GtEXVieB0WByug39AmXInxgaBG87x4fcQFzcJfwS/DbgSLEvZchMGnQA8SNwCd8NF8DzcBd9DGeLEeypsmTA2mHvftv4JjgYnRd8Ujw7Kw7AIPOpNTH5B2IFrmWsZ+VrA8eD4lLi8GL8ZgcL215nBDUXe5qNIle5F6V1YC9wUfwlF5LZIaWWu5xbJkKHjiznlxqGX3E/r2j+h4ZhtNG4/Q+egRL74rfNJn3hESWHnqD3A+agKeRWj0op8TqZmXvjk+ZiLRF+uFJWJUNw1Ui7a3/JsL0Ti7HkKibQJuXcDqdgO7cqcGJi1CSP63znSb7f+Y2LHtUubrcgNrWSK8vjyaLE28qdldW/UrHS7/Z+iwB6wWpFrW8mUyOOeZ7ZEXN6tfSWMP+e+dsW6uyaN0aKhX5LPw6zy1dBLw8+P0LgL9JsnX5OYPGh5rvk1bBJlLOozUu+5PM6nY/i06Pp9T+ywHycRtSSoH14EDKvVWoxzh/tb9zWvQNaZYizSzofp4Bq4EcoW9xDzwGWwCgyBNFmcyOPB9gp9ME2vUZz9Vlt/g7Uhax5X5yj4FnaDKuQTjM4H1n1FsC3SxDHqnk2xLJapLBkeylBWXUY4Ox7uLwS/hXkM1gAXZsVJ0UnqJjD9HvgZVCHjY/Q80M/HYKf4Bq6AMFmcTHhsqFKmwfhh8F9wArY8y0CZYrvOmGNwCtJ8DjvARpC3QZuYdPVrqVtgRGgBx7BjynmlDDkYI9pbp0ljz6HvQuw3ga3IlGRyfri3lcwjSJ7tRpBytlrMccjo2mL/aYWVWnUc5XOdtQ+24ts8y0d2Wr3o381nq/59gdau7ISBM5vEg8smbTpelfx/gD+WwInYaHb+IUvPPqvb7b9VC/W3vutagTal3f6/Ypv+zX4BtNr/4/kebKIsS5fk04Pogk34Daruoa8Gy/8f8NAbvjD16tp8PZj+LEwLjWQgCuqv3Ugxlt6P8GDwRcBZkNwTL0Hc3aBd19kJoRXxBas23s7JfFCk40vpTcE2CjIBgX3gM7DNHTPtinOYZXoabP/RIci4BPYA5wYP2htDIzkQBe1pt1nZlwzmfQ02AsdlEPvDluCLAXVsh1Yl7zmUXobRWi3lKJpvL+p9KPQGN7bvwRQwFtjp/wJ7wxdQpSyC8W1gQ/DblkfBSeB8eAg6KfYh2+PTTjqtfdUtMBK3wJrUbU44tqQ6joMdN/JHgwtYUdkCxQGwMtwEzYoHiOtAO24iaxkxW2B9ij1bk0X/Dn03pHc1mS9NfSUi50lLyInT/31wf45O0SQPcj8vqhzphfrf3mS+Wn3YFhjV2381mqTV/n/PsM3ZdIx9373mGE3n/L8M7xMcAO6Zi8h4KP0GJiuinKHzDfG3QqtzkAfO38P+YHkc0x/AJOChT7kYdga/kGskd6DQH3wBcA0UlalQPBtWjzK8wfUTmB7ce3voPBP2hK+gFXF+fxbehqlzDGxE2p/Ac48vht1PuL+YDmyv18HDv+1ehuyCEfctE4B9aDCMDzPC2DAY3F8UecYHoncEnA7abVZcB0+FKcH2fxHGhJnA/jEEdoQroFVp9BxKLYOHt1qaawE7og9hHpgWHAQewC+HZjbXqLctf8XCxjALOPBqqVugboG6BcpsAb+1ux6+bsGoi6Kb18tayFtnqVugboG6BeoWqFug2y3gYXc98Iu3yeFDeAL+Cc9AUdkVRc8O2nq3aKaY3mKEN4A54WfwDvwHroInoR3xhcYF8Dgc28DQhKRbjhXBM5Bffr4EHvp9sfEZlCm2/6awHEwDvth5AW4E6/4FFJGVUfJFyu5wZZEMKTqe/zaBlcAXML58eRmsu2dA+0Y7UuQ5VF2Gdspf5+1wC/j2rZa6BeoWqFugboG6BeoWqFugboG6BeoWqFugboG6BeoWGIVboM8oXPe66nUL1C1Qt0DdAnUL1C1Qt0DdAnUL1C1Qt0DdAiW1gD/JGABzlGSvWTPzkuEi8Ceq3ZC5cfoW+POUbog/w/Fn//4sppa6BeoWqFugboG6BTrVAnPhyH+C9gBcD4fBpDCqyJJU9Abw5593gv82tpPivz31p8B5/163k+WpfXW+BX6BS39O/vPOu6491i1Qt8Co3AL+wQP//cN5XWoED//69xDeaRkdh/6BI/1369+3nhH59w9RjAe11C1Qt0DdAnUL1C1QdQschIMfwPUvjnsCX4yP7LIZFfTfvcbrbnj7DlV8Q/y8GvPvS5h+HfJdu+l+C0xHEQZBvP9dwf1Y3S9aXYJRrAXGH8XqW1c3agH/0IMTkAfxbsjlONW/m45Oy844jE++63a4AP4xkPgGzL/KWUvdAnUL1C1Qt0DdAlW2wFYYj699yfDLpI/MBxH/cLJ7jmS9vTe+6pfx7jXSfP+X+F5QS2daoD9ujoOTYAsYGzoh/iV+/1BbWh84vBMFqH2M8i3gF6C7wGCwH34MZ4F/mLCWUaQFRtUXAP7VSzt8fAL2VwgTd+i5+9O/JxP+/TZi8Q75r93ULVC3QN0CdQuMmi3wHNWOr31p4U59E96NJzBVg/rPX3Ghbs/x3+l/hlBxVYdL877c8kuvZL93XEzTgRL7c/+k73D/QQf81y7qFrgkow/eRbwvB2oZBVpgVH0B4H87ESbc+PX8Dj3zAzP8P0t8/T8CdOgh1G7qFqhboG6BUawFxqW+8V+exde/eNgNYtUyNg78OwTTV+0oYd8DYNYvAGwDXxBUKcmX//F237NKxyOg7Skp88zglyZlyV8wFG/zeNiXM1WLv/6M+4yHP6naeW2/pwWW5fNKcCzeD/4SZDLolMyKowHgL0Eei8Kd+jsQy+Mv3ueS4U69hFyKctwKr8BAsFy1dLAFRsUXAOvQvskO7/1X8CWsAFVKP4w7yX8NYSPmt//+35O+/d0faqlboG6BugXqFqhboOwWmBCDaetfMu7Csh0n7O3IffwQ/m/u+yR0qrzdB+PJOnvvYaBqORkHab6NW61q5yOIfQ/J8V9KfMf9pdCnzfL3Jr/7raz2N36JNn00yu7LDA89aWW4p1HmOr3tFjgxo+19JjO0bb2xAf/4uueN5PM3btXG2dvWOCDFd7wsl7ftobGBtVFJjsNviFuwcdZao6wWGBVfAPjzljFgNLCj2/GHQDfEt1/6f6EbzmufdQvULVC3QN0Co1wLDKTG8Q1fWvh3FbbKThn+HyG+Uz8/df0/BcJLeNvA8DJQtfit9huQbPfXifNwWIX0xmhVtssu70YY9DCQbB/vB0M7P9OfM8Nu3Nd26FQtHvSSByDL4OGwlupaYFtMx591MuxLpyrFb/m/haTfcO+XgFX/EuGgHP+W4wKoWh7CQahz/Oqvs2vpUAuMii8A4k1bvwCIt0YdrlugboG6BeoWGNlboD8VjB984xswwx5MZoaq5AkMJ32G+5Wqcpphty/xd4P+D4ZOySw4ugHiB12/FStL/Mveu8AgiH/b+Cb3f4dOtzMuC8nkaPkLydAf0q7tHFA8XOUdwPS3CnRClsbJzRDKY7hTL8A6Ub/h0cejFCqtT8XjFq2w4OF//or7S4YPqNC/pmcHf1GT9Bvuf61SxfIG9oO/+NV/ElFLEy3QqwndWnXUaAEXFv9d0cewOEwC7coXGLgL3Dj2B3+yadzwJm6srL/f8CTFieYeeDaRsAT3cyTiwq0T5fXwLkwPfoNwEwzv4q9c1ge/+UmTz4m8EvynKEEmJrAWZM0pb5F2XVCur3UL5LSA/c9/bpXV/3KyZib5E807MlNbS5iIbB52ncueBw+/ZYvf+PaDT+EZcMPfSJyPnLc9sL3cSLnJ9IHo7wF/hLR58iLiX4SqxHkmS5xjOykeuOaHI+HwDjq2r3nQ3AeOh0PhaihDlsfIBTBNZMx170MYG6aGDSNcxzYH17bhRVx/JmhQmE1I3xfebqCXljyEyPNhm7RE4l6FsueYDFc9+6ndSXwSPPhsAO6vaqmuBWYsYHpudO4voNeKivvTRjJPI4U2093/HgpHpNi5nLiLU+LLjroXg+ulGH0wJa6MqHEw8g10a3y5zjoPly69Src4rEE3SR8PG13HdLAFfAZbw58grxPvFumsyNW+cQOUJf53OceAG4drIG0AE90jbja2g95Db4f59AA6ANwUB3Fzsilk9WkPoG5s8gbSqaSvBFlyDwlLxhIdmNfCz2JxyaD13htOgbXBP1z1NKSJC8zqMEZaYgtxPuubwUnb9ukPV4CTWZ4sTuIleQqkrQtXxXS2JexmNE+mJdFDSSOZAYV/QNbzb5Q/Ld02WB/ynr8HJ5/P5aBsBlP1hIb98ND3N/goljQBYfP4DVqauFm+GLIOiouQtgCcCfatPcADYFmif/t4o0PkeOjsCXntbxs9CEHWILBEuEm5vkLcn1Pi06K0c1laQhtxjgXHaXzOaNXcpGQ8BraAsSIj73M9Cv4Q3bd78TB7MjjORo+M+RPPw8F5PE08FJ4Ic8YSHyG8A/wnFtdu8BQM3AceQBeD6UB5D4yrUm7H+K8zHDyfEV9F9PwYPQMc71dX4aCBzX6k7wWuLSc10C2avDmK58CY8F+wr10HH4Pi+rQp7AsrwSBYBt6CsmVpDPqyYUGYDL6CV+EucA59DZIyUzIi5d61tS+08gJAc86LPvsFvInJ64SdAy1nJ8RDyblwPWwCZcxrmKklpwU+I23CnHSTwlhpoNZScnyvkWXg86yEEuOPxNbLsAvMDG/AqTAAXGerFucf54cpYo5eIHxg7L6doPufLSHMP+7n3Dc6xp1/zoPboCoZG8POs8H/JITds4f5T//3QFfFwWCjXNSgFDuSfi30aaDXbLIbUP0PKZDRBrXTjFlAt6hKM/6L2mxG71aUrb8dv4ishtKlMGWOsou+m8xeMAs8AINL4DlsrAnKNfA9ZB2s1FkSrFsea6kYEzdDefr69BCcJ5OSuBKsnILxafnddKTpG7cC9AYlPK+Fht6mfnrwy6tDK2n2U8VNu/lX96aA+BIgq17LkuZGKi6OseUhK09eveN2DPeDh8G+XRY3YGs0yJNbSLSN9D9dFM5rczfMcfkVN3n6ps0az5AI3x7ln42r/p30G9lrJt3F2bo1kl+goG6e7T8njLgw5ul/SXoYC4msw9z6nJYG+2oa9onXY2nOBd/BzbG4ZL4FSStDnLdehKy6HlGCE+fed3J8/D7Fx47EZT0z1+qfp+QpI8p53bb4Ahz/VcuMOPgQku3/HHGjV+08su/ctzhMD8uAZapK5sbwEuDLqyD9CfjyceEQkbj24d7xM00iPu+2P4mukbarLzTGBcVN9qqwHIT1b2bCL4G690GZ+yr7fqO55Gt0jkvx+1viLFMjisyBmMkUX/rtBBfAleBLAQ8NnRL3KQfAOtCpPh+vm/PzFuAa7bP4BG6FFaAKsW0naMKwuqH/NpGtoaov2vL61lekxw+lDQ02qbBuA/+WbYMmbY6o6q7D+4P72t3BQ3oZ4hr2BsSfs/3bZxuP88XoZFC2LIXBlyHu6xvuk2v7FcRNDF0TNxUW8qIGJXBjop76TtAunmXI5RjR7pCCxpZBz8m6T0H9RmpF/U/UyBDpLu5uYtdugsfQtf5vNZFnN3TdKC0LSXFAae+qZELJ9w5W/azfwO4cpP8ig/lS8tqvFsjQ144bi26KC6T1XiinEB6iF4MlS8KNY1g4zyGs//WglvQWGES0beSmW+kLWX1wXtLSNl/mzcrTqA8m/bvRm71EmtmceHjI8v04ac9AkHEIfAV/h6w8kwflEq4DsOFhZcLIlvOBz23X6L7Ky8WRL/2l8R3xzl3tyM1kTrMd4twQxA+dU3Nv+4f0tOvdpJct9s9X4VPoD50Sx5jzqW1tXe0LVR0+MD2MeAA8A8KB2TJcA2VtQjH1/3wJ+B8Iz/Jzwq7fSq+hl2E+3Uf8A0Iey/cXaLTn8oAVNr0PEnYdMs7Ndbxfac/+77izj38B+tobypDFMTIEtGmfOh6WghnAuXMduBxC/ewD8YOe/dF9ZkhPu1pPD7C1tNYC9o1/QVrbekjZpjWzqbl+RewjEHy9TvhgGBOSYh93fAyGoP804a2hLJkYQ4Mh2E9ef1uWoxw7WW1vWZyDOtm3p8XfcjAbVClTYXw/OBGcA/LE8hwHv4Pp8xRT0jYjzrXVtnwONodJIIhz0KHwKajzX7BsZckGGArz7WDC24NruzI6zAPHgl+m6P8pKG1f5SS7ZBOEyf+mBnlOIN3CBlxg5oe4uIFcC5o5AN+LvjY/aSKfDfoCrAmKjdqqhIVoSAMDO5J+LfTJZ/dpJwAAQABJREFU0XNBXQb6N8FD6Fr/j5vI0x/dZcHyOJHGZXlutHdMPLKCsP71c3gFtodnk25WrPdCXSrkOZH/9brkf0RwOyhqo7m7VNhu+y9a7T9H7TRFlGHp6H67ogba1PtN5G/lyI5zrGNrkei+qksvDIfFV39ZnNRGAVwLfsixHXweGvNhu4f4vOvssTztBifCwF3wBHRrvOyMb+u7N3RSzsRZWjtfWFIhemPn9Qwfq+X4uDEjzxE5eUzaJspnv3Nv5qH631FcWj3vJM2x4B7C9A8g7VBGdGHxEPEZaO9RCJt392gzQJhrCPb8Ss99j7qXGhGTPQmnlTnENWqLmKnhOrgSpbsZHoczIN4+3FYmHq5CW6ZdnR9nLMH7KTl+riXNfhFkHAK3QFp5jCtzT9sXe3cnfL3M/YbQCfHF3ADwZVyor+PmUHBMdkImwMm58B2EMjhf9IWy5ZcY9IwX/Hg9L8XJ2MRdk9Az36IpumlRSxMZ6qMd21nxpeqKMJc3kczC9WWwLPdAGe3uy89vI5s3cHUNULx6ZnJ+DGJZXgf9OxePAUmZjAjz9UkmpN3PSOTXoMFOYEMfBkF8eMtA/yaw4pb1jSby9Ed3eTCvm7T4JMJtU3I52vof0iDXjpGeg/S3kPawXOxOgBOb4BV09f9FE3m0b72fhjUgLltzo73t4pEVhGeO/Jxfge0yTPp8HNBlEH/Wt2LT9l0IuiHn4FT/6xV0Php6ZbRBsKG9ZsRFxkmsLJxjGskgFGyjuRspVpTebf9Fq7UVirbTulGG/aP7n0f3VV8WjPwdGTkawNU352NF91VdfNtuvRtxRRsFcHPRyL7pbsCCHESgSJ4VQ4Y2r4uR/y7YG9x8d0PcBL0Le3bYuX0sbNSSbf49adOVUJ5NsJG0He5t9zSZicigk7x+Rlre2PAgaZ47QdkXkjaS91ui40ugbyJdN+qtimuEh359vAKOM9eL7WEwBN8+79+B66p92RcWptlecTmQG+eDkC9c3yHOMrcrM2LgPHgTPoSH4QAowzZmGsoOaIQ6hesjxNmOVcroGLe+wWfW9U9tFmL9Aj7cVwc5ikBWWYy3nzhnlSnO0yvBQmC7dFqmwuEK4MG1U/3OOjr2POyntffzxJe5HjhnvZfhaxXi4+I6kFamJ4l3LskTD/uvg/kfgrBX3Itw+LbftIHgC3plTvDsZbzrYDsyLpmd97T1GHiv7Arx8XYL971NQOaFMMft3hMz9MPncyz4Ik57ch6k9tEwYTiJ62hK6ITchZPzY47sNKtDowcVy/LjTy98eOYtKjZEH/gLODEEmYKAg7poGSaNMtqGS0bhtMvMUeT4XE+GTWE7eASCvEbAha2ob/PNDzOAi5B5i8iyKG0BThzmi0t49h/HIpcjPEnsvtWgA+VWsJ8F+05geTIxiWEg5ukVTfsERcuRJ27c181TaDLN/rUvnNREPieY1MHahI2gqn/r3awsToY7wAm4LHHz5qZ9SAGD/dG5HZoZD43Mugl2LFqOouK8FCbconny9Ox/jfpgPP9k3EhZ4hzvJriIOEeGhSip/0EUsSrXp2EZ8AXydzA7pInPvcizN6+bNZ+/7Z8nvyfRuc/xYl+xDFnyNgnzQNEypNn5iEifn2tOntjOrYrPx3YMa3OWnfdjCa/HwnnBeJ48vUZpL6CwdCOlCtNXxvZ64Pr0ZIV+0ky7LmU9G/vhBGmZmozL+1nnRBm28vK497DMrr9p4r5HuXfoZZgvB6Lon1x24m4APAuOq6XgZmgkHpo2ghPAuUNZA+btCQ39g5X204tgkyguXKzjMTAbbAVnw/Zg3CXwP1COBPOvDjvA3KBsC2H/0RPRwof7t/NgzFje+QnLZuAey7mmSjkgxfh8xK0FV6SklRXlns1vRBvJwo0UGqRv0yDdZA9nZ0Z6jfRdG/aE9SP9Mi7PY0S6JfaxqvtZWt3WIXLRtATi+oFnm1Mz0puNdl7K2v+sQNoNMYNh/ohF9QTdc04Befse56NpwfnDOcJ9xAZwIsTFfc6fwLnHues4OBTchxj/LbQiG5JpBgj+vyTs+nYKxMU6/wFs48fgJNC3XwCcDu4b9of9IC5bcuM6qf5PpFd09wZXG2Din6Tm3wwm2YXlcnAxyBIbN3SITwnvC2eBlQ3yMYHfgQO1qMyI4qzgW3fzFpFFUNoNlocXYxnGJfwMTBKLKxqcCMW7iyqjtyD8B46CQyCI9WhG4u3ng8+TMUk8GD6HzeEHSEqY2L+IElbjem1SqY17X37sBXZuJa+vubG7FZrpD9rME+s+M+RNBNeRbtuU5dfn8gAUlTNQzBtLRe3E9c7mxk1SM/Iayn8Hx3dZ8h6GHOdF5FmUnDPK9u/GsqhMiaJzRJll+Ap7i8Gj0EimQeFVGKORYhPp9u1F4cEGeVYi/cYGOiZvExFUnwqBlKuL4wxQZNPienQl5LW9C35fCO3zCGHbK0vsf628DIvbsw4XQaPxNDCeqcmwZfwHJA8/STN3xCLc9Lu4582pvrR5PJannaBt6ZqyPni4GgL/gbuhE+LaUKR/VlEW1w/72vwpxr8hLr6vSFEpFHUzWo5VXygkxX1KmjxG5FswdUriK8SFdT0l+ccvft6NEqdLU0rEOT8qPvN5YE04FPL2Mb44GwBTgWM17H+2IKw4L/pcN4e8/r8l6ZfCkbAtOK/8Au6DIIMJOFYPAPdKu8K/oB1ZkczazJLZSbBc/UGfVcnkGYZthyrly4LGi+plmZs5KyEW34/w2NALQl+MJQ8TnGuYmDqilRZwrOfJ8iS6dytDnI+cT8ZIMeZ6FhfnvjRxD/5pWkIsbqMo7Fzm3K6sMfQyzOfGxLhH/wr+CM4vrrv94RZoRbSp3AOuo4rzaZpsRqRzmf5Pgn1hUlgGboOsfNuSpv5PxMETxIZ2IW9WviZDXr6w6boRPTdOr2U4yFs40rLEJ1gfcp64kO4HE8CvwY1cXLRlZ5skHllh2AX+rxXaT5p24b0SQudOpqfdP0vkvVBkck3LH49zY3R7FDFWdP0hrpAI+7bqDzB+Ir6d2/fInNdPte0z6eRz0WdcfEbjgP21DLFfa7NZcYxu0WymEvU9JO5eor1WTH1AppNhmlYyZ+T5iPgXM9KS0bbBnlC2/7xDeijDAwQOhrzxtwLpC4YMXK8Dx22WOP6cY4vIqyht2kDRtokvaHtwf1eDPGUk2y5rwlQZxqxnK2Mubs61aiVwYU+Tl4h0DQniGrsX5M1d55DeaJ0M9hpdl4t89Uko3s79OmB5ypLeGJoLPoVnwDktrx4Tkj4HfAyuYVXIDhi9DdxPxOVCblzr2hXreQQckmLI55gmXxFpua4AX87EJStP0PmQwLgwRRThHNU3Cmdd3owSzuKq35+Dc/bJkCXWx3HzPXhQDuLzUgb2fGb/N49Rcs/F/u6B/HmYDZaB+yCIa+gFMAm4+Q1jY07Cq4DPquh8hGqPHBkCOdelSVsTrsnRaTfpKgyEQ0Ow5bi4O9xUdLWf2MaLNbA/qEF6o2THeiPx3OFYsy+5n0/2eaJ+Ip/95K69G8fJFjAfaPcOuAwsS5kyGca2Av04vm3Xv4F1T5OxidwSfgG94FE4Hxrte1EpLPaBPGl2TOXZci09F7ZPKL3PvfWKy2nc7ATO/3E5g5sv4hEp4X5R3L2xtNFi4XhwDG5+iCJcY9xP+XyWglugkfwShfXBedJ5Xpll6OXHX2B5q5808bkG/x8Qfhp+Dvq/DfLKTXLPL5Q24PoHeM6IVsWO76RzUQMDq5O+ZQOdVpIvJ5P+i3TucdFrNGnZcJOCg64I/0RP/3bGPP1dIj113dRvBGXIrRjR5gtlGMPGvpE9O2eVMgPGLbflH5UkPK+FulTpc/Bru6/XJf8jgttBURvN3aXCdtt/M9X+TdRW9ilZpJnMJeguHvnV93cwfgk2i5rwwOLCH+oev+5Y1EgDvXlIDwfeuH3Dv8rIq+/PIanvpmzijDzNRi9JBjegSR/hvsgmqKjP36LoJivYdrNj26eJ6/fv4TMI+m6AZ4IqRLsnwX9Af+/AdFCmrIKx8+Et0McV0EjmReEMCP3zWcITNMh0A+navyvSWy26D+2Ydj080vVyZKT/PdedIbkJdTP7u0hHW8dDXMIz81CvvAhpPuNxg1VEzgPjb/cmEut7CVj3BaI4L5YjjCnL3IyMhbLzTLwMWeG/NGO4Bd0pyPNErCxfEHY+7oR40PA5Z9X9TdIma7MgB+XYD35vivlwXIT4rOtxMf12gluROfTXuC/HTqNx1ozf9VCOz33Bl8996hRD7ll8GRb0wvU94hZJ0W81yhdqn0Cwn7yu1KrhjHy+1DgJ3gD9+qxnhjSxnh7ifT4vwG4wOjQSx4/1cL0JsjSBZN28139cPEgb/wg08jUeOmEuP5RwkOB/zxDBdTlI839NTMfgaZHeg1ydd7eP7pN57f/jwOtR+uFc25IwCC5qy0rrmS8nq5Uc0rqJtnIW9b85Xn6As2Hitjz+NPOt3Fp/O3oZsjFGtOcCXqW4QdHPhVU6GQ5th+e1UJfKdg5+bff1uuS/Gbe9UHYTalnLYokCBRiEjm00dwHdKlS67b+ZOi2Asm0lX4Eb5E6Ki9k3oH8Pep0WDxMe0E6B0A4efpOHH6JaFn2sDGdB8PG3BtYmJX1LuB/M49qzFpQloY+G8qRdLXO7sisG0mw/R3zat337Z+g/RnyjjRkqLcul5PwMFm/ZQn7GyUh2j/MgjJ+v+mOq9b0PfPETvl36MTElsCJxHhSOjKVdQjit/Y1zvE8f09Wf/TLoP0n4GPAZeth/GkLaxYSTz8Nymn4oKA9A0M+6PtSjOfQbraCzDnGTwFHgfsbxE5cduQm6RdaDeN7JY3mDjayrdaxaeuGgP/wKpoBOytY4sw8k6+/hdPYSCjIBNgZD0n6498A0PwSZjUDai8+g/xrpjqN2xXnN+TTYTV4vatdBlH9Rrt/l+BkY6YWLdXsbkuUJ92+SNmFQLuG6PjbSXgIdUoLtZkyMi/IMME4zmVJ0bR/byjkrLrtwEw7n1vdC6B1XIDw3hGe1eyIteXssEfrR1pyxxOD/6Ficwb0hjDP73WUwEcTFcRCexU6E3X+cCqGffkvYPcqYcBgE//MQ7vmZiNdaqmuBwZjuD3fB8CzPR4WbseJCzhHZf7ZiP62Y35RMTvJlbeKdGP4M98OIJFNR2CPACbYseQtDB4CHtkayKgrXNFJqIX1a8jjZ1tJ+CzyOCRfH8cADeJHnilohmRKtQ6FR/3NxdGFzURwAeWL/Oxi+zVNqIs1F9wZYLsrjAW09cIEtS/RxI3iYUW4BN9958j6Jjh03M5Zl1+ieS9viocPNaSPZEAXL3Y5sl5F5FuJXh6sS6Vn6/jxyebDtypadMLgkLA0Pl20ce2PB3+A+sA94yCkiPnvHhM/q5QIZbBsPuHHZgpt3YGfwucflZG48VAVxs7kpOAYOgbkiuPwoHxByA3wi2C/j8l9u9B/61pmEF44rpIQHRXF3cLWNNoEBsCYcAElxTXEjrLiRvqcnVPzD8g+BIgfJV4ubbVnTvcXAlnO3l/GvZL8dbHPHo/PwnXA5WK525VMMuA/7J2g/Li9xszk8Eou0/6wDl8AksXiD/wb7ps+uXdkXA3l7Q/0cDU+36Wgv8o+RY2MZ0laCmyKdHbhOGYXTLlMTuQtYtjLE8WObbwueF96C0+Ex6IT4DBzjv4Pxwf53FBwJrYh7Gdto8UTm07i/APrBu/A6JOVJIpzXLM9JYFnOgriMzo3PdL8o0vkz3ke0of/FovRwOZHAeTAbvA32/aQ4DrS3Nzi/uSdzzT8GZgLz+Hx8/geD4guCJwz08qOWSlvgrkqtl2fcTvg1hEXYQbYiJCdUopoWO+XN4OCYJ8rtwp0lU5BgZ+6dofA58ftDfEAsxP2BkNWnHUAOAsuQJRuRsHpWYovx/yXf/eAksyC8ClmyNgmbgxNGGfIDRi6CK5s05oSzBYzZZL489U9JPA6G5ClFaTdwXROc3MuS9zD0ZhPGxkL3DJiqiTyNVN9HYS8o0gYerC+EvIWd5KbkA7R3hEbt0A+dM2EcyJOwGXKhGZSnSJrjzz7l2G0kc6CwHeRtguI2+nIjeaJfF0r7QVmyGob2BOe29cA+XrZshUHnhEtgS/gG8sQ2uxgmBvM5/ssSD5W9Chiz77YrE+QYSBsTzernmG+Y5Pxs2zo3zAdl9inM9cikfLqpOx989s7lcXFdds2zz7kJ/ArGht+A5VkEPoNWxX62BzhnLwXORc6J+joUkvI/Ihxff4FV4OcwIXwID8KtYBnT5Bwil4SPokR9bQ9hLxJF/3jR17k/3g39GwQzc6/+bXAp/BOc56aHtWADUB6ArXtCzX18j7p1+32BbLcU0GlXxXHu/DMdPAfW23bplAzG0dEVOnsW2+4V14AFwPo+DFfCt5CUm4mwD6wLs8M3cCeU+Szs043EPvh0I6UG6UX8LI6NmyI7tk8jyRpLjfJlpT9Owm5ZiRXH74v9I2I+3Kd47177slh80eAfULR97knJ8AlxD6fEx6MO4aYfbAhnwk7wLwjzj314blD+Dvv1hP7v448EFwPnyaS8T8S9ycjE/f7c2/d9CTYAXAP+CfpfDtaEBUG5ClxX2hYXFyecMjcYzRTq8sj/kGYylajbbf8uqLb/CyXW6VpsOXFOCauD9svCQTYavAgvgZuoLJmbhHfADUMaHxO/BMRlY24crGn6xr0Gk0AjGR+F3iUxbsJZXp1VPQHc6JXV5tpxclGclN6DubwpIGOhU1Y7aKfIwaFAsSpVOR7r9s0JYQp4Fb4rkSHYcnOSJU7kblDtgx4AXHjeLpH/YsuFopG4WDhOy/T9BPYmauQ4lu7Y+VmJeDgqU1zsHU8HwhhlGo7Z2o2wPlzQi4iH/qvhMVigSIYWdJ4nT6P56dgW7CaznJnjp39SmXv3IVnlWihFv50o5/HxYBfwmy/H7XRQpuStFXvg6FMI9X2d8MKQl4fklmVncurrEZisZSv5Gd1zuD8Iop/bIdQxfr0wKMWurjG+LInrxcOuq74Yc25tVSYg41MQt5sMP0d6VfNBKPc8BJLj8G7i7JO1VNcCrofJ552837wE908W8HNIzE/e3BfKd2VMv6zgMhhybVoLknvdsnyk2XmWyFCv+NUXPt0S5959ID4vx8v2AWm+uIjPcdyWJs45B8HnEPcbwpbrMChtjfgscmTn64ZcjlMr56a6G9Jt/7dSaev/QomVnx9bHhJWgBnBBdjJqF08yKwEbujvAyeMWuoWqFugboERsQU2otCHQtmHvnhbbM3NXjBpPDIn7OH/CFgXSlvkU/xtQ1zYVGRd/XaqXZkaA2kbbtentPr1Jd5vS5Jl8tBatsyJwVcg7ssN1iJlO0qxZ7+I+w1hv+1p53Cb4qonyjp9CX7DbB/rtCyPQ/v112Bd34C8F/kejo+Ef8Gd4AuxA2FWKEMcj+eAG/rQ9vFr1XubMfHry9m4zxA+gfhaqmuBAZgObZ11LaOfnVjAz3Kxam5RQH/vmH67wRkwcE/C51vcL9qu4YL5X034Ds/ioYL5q1SbEOMbwzFwOjgXOSeMA50Q58Yt4Q9wLtiX3K9YrrZldiwsBi7wX4AN709s+oMdcmqoUvpgPPi/g7D+P4b+oP+ZoVMyMr4A6FTb1X7qFqhboG6BugVGvBYYjSJfCq69aQwqsUozYesKCN9qfE942Rz7s5H2Twh7E3/NVsWm1JcKaXX3RfnoUKXcjfE038ZtXbJjXyb5omN/qLpeeUVfg0Tr9w54wB9eZGkK8gOE5/GXDhRs3pi/4DdcP+yA/1HZRR8q73kjtHfy6oGvDJkMI2kvP4M/57i49OLGw29IT16fIa13PEMbYb/pfxmSPrwfAn7JV7WcjIM0/0dV7XhUt792RsP7MJycq35DPD8+vs0ow1fEuwHolNQvADrV0rWfugXqFqhboG6B4aUF/BZyP3DDF9+IeeBeEMqW7TGonz0KGt4z0t+2oH4zau5x4nVOhudqxlgLuo/n+N+9BXtZWXyO/ry36j1dlv8Q34fAu/Ay+AXU8CK+CPNXBuH530i4E9/y+YuM4DN5/ZS0WqptgaUwnzycf03c4VDmS7L5sDcY4s/Yl01nQVo/m4b4fyf0zXsdTAFlyRYYipcpGT6kLEc5dvyl0x2Jcvyd+7R2yTFTJ7XSApeQKfnQvd+kFWMt5PHnYGn+D27BVjtZ6hcA7bRenbdugboF6haoW2BEbgEPQetBWI/3qqAyfuPplwu7FLTtN/7vwTYF9ZtV86eUWV9C2A4zNWuwSf3D0A/tnbwu36St4V3db/v/C5dCJ75ZbKY9fo9yaP8zCPstbCfEQ+azEHzHr7d2ogC1j55/arMB7bAP+JLRw3cV4oF2HfDn+7vC7JAnzsf+KsUXgbIwlC1Z56/QD68u22GGPev6C1gf5s7QqaMraAF/nuIb2fDAvd5QgZ8sk2OR8CTE/T/FvfGdlPoFQCdbu/ZVt0DdAnUL1C0wPLXAGBTmbnAt9hcBZcvKGPRwVfSXfWuhezpUfQg/Dx/x/UcIv058md8CYm4Y8QVEcv+j/+egat/DFKbCCH+BcAosVKGPVkz765cTwTZ/GlaCTott8wGEfheu9v9a6haosgV84RH6W9r11Cqd17aHjxbYMNYJPifct8PFWgR/34Ed0J/FLAGdlvoFQKdbvPZXt0DdAnUL1C0wvLSAB7TPYMvhpUAdKoc/i38Ukhtgv3XrhEyKk9PAFw6Wwb+NsAzUUl0L+I3jLGCfPxNWgF7QLbEPbgfh335f1a2C1H5HqRbwbwC8Bcm5z3vPYr6cqmUUaAEnHB/63l2qq3/xVP9Oxt0Q/erff5PXDfk7TvXvNzC11C1Qt0DdAnUL1C3QiRaYBCdXwLVQ9Nv5TpSrkz78xaEHsPvBdfh26PQ38FtGvnfjWsuo1wITUOVX4D8w0ahX/brGXWqBxfD7ETjvBT4lvDHUMoq0wFTU039z5M8AuyG+iRoI3Zr4/EMU/hJiRuiG+FPAjWC6bjivfdYtULdA3QJ1C4ySLeAfwuo3Stb8p5X25+APwiPQ6T+WNy8+34ZdoJZRrwXcf94G58N4o1716xp3uQX8FZJ/JNQvYvcEXwrXMoq1QDd/AmVTd9v/KPa46+rWLVC3QN0CdQvULTDKt8DYtIB/nO4S6PTmdzl8ngz1SxgaYRQUD/z7Q/9RsO51lesWqFugboG6BeoWGK5aoDel8d8J1lK3QN0CdQvULVC3QN0CdQvULVC3QN0CdQvULVBiC/j2fZ6EPX+WuGkirr6tW6DMFvDf3N0EV8FkMcPbE/aPUvrvYmupW6BugZG/BXzZtxDM1cWq+s/PJu+i/5nwHZ8Hu1iU2nXdAnUL1C1Qt0AHW8Bz2J0wbQd9prnyn0O7FvvfJIb10PW5qj8O799/WQG2gtWhW/8MHddd+yf4+u6anI1n//jEqVEJ/KMU30RxfaO4+lK3QNktsDAGwx89uY+w/wbUF0/fRvH3cq1aZsDBvuDf4AiyNQF/jtrpf4ca/NfXugVGpRbw4P0whLng34T9N5GdEueAQRD8X0nYv4nTKemLI+e64P9ywuNAJ8R67gwLxJwtS/gf0D8WV1VwSgzvDn1jDjYn7D8FmDUWVwfrFqhboG4BW8BfhwZp5e81+PcePGguCcm/ueaXUu4H14D1QPHvg/y2J1Ttx0mYd+97M4xWkSsP9c7t/m9zb8AfwBcPcbmRm83AP4juf4dqG+8Drk99oUxxr/0B6Mc99+PwMfj34DotXXsB42bnSPDb0LvgAlgNquoEmP6JrMtd2HwcRviF6P6Gn2jVN2W3gJufRXOMOvCWg05tBnOKUlmSfT30vYsJvxjd+wuAvLYhuRQ5Biv6t8974F8ZfgDjOuEfN7XULTBKt0D88B3mAl9Kd0rux1HwG65Hdco5fh5K8e863AnZCSfW+WvoDzOCGzDj3ChWLafjQF/vwszQH74H4w6GTsqKOAub/k76HV587UBBDuhiYbrtv4tVr10XbAH3aB6S94RNwbmiHxSV9VH8EJxf5AmI/+rqT9xvD78BvwT18P8MXAJVSn+MeyhfHNwD7wZliy9Uw9we6u/1vJijXxJ+DEaHdcD0P8OX4IvxMsW1xr32bdArMjwa1w1h7ei+k5dOvIAZpj5rETME4g8khF2Aqz78+RBWgmdTynAIcSvAz6CWcltgPMyF//rjhBTTpt8D9oUzU9JH9CgnXfudL5/eh9Dnw/Va4jyMOyFV2f+mwP7roN/b4Y0o/Deuo5r8igo/PKpVOlZf6/9I7L7TwalxuBXY78OC2KkyuPAuDUuB3wp3UtxohXEfrs93qABjp/i2DJ0aB87zoc7x6wMdqv+0+HkvKsM7XP8dhX0B6y8Bq5ZFcRCev9/+vAS2g5v0aaBT4kbfzbGHizU65TThp5svIPxG1Gdu2++dKFcnbqvw777BfUar+MWc82Kr0k3/Y1HoVusd8jk3tSNV1f8qCvUZvAuu10WfkXPdVxCfZw2fC8os4LzvrwLGhA/As5kvR305WZVMhOFXYJfIgXPiJzBHdF/W5VQMJevu/fcwI1jnp8F90Krg3jyuvzf3a8HcUIbMhBFfAPyjgbE+pPtipErpj/GqX8AMU/5ViAmLX7yh4+Hzh8lVXoQ/hUkbEHH/hj0Y1VJuCzjJPAihrbeKmfft279iaYfF0joVdAFpdwHIK+sDJIa6N7renGeojbS1yevLlxshWYazozQnwlFB7I/PgO3QrQ1wN9vZMfdkVP81u1CQjfAZn4udG3p3qBzT4echCGPgNcKzdsi3bu6C4DtcL+2g/ydS/HfyBWAYd6HuXi/oQP3nw8ehcBPEfRv+LxwJ20NVL6NWwPbh4KY76X8QcUfAelC19MXBm+BG/1P4EvpDJ2VenHXrBcRi+HbzG38G23aw8lX4PzhRn3jdmgm/jZ35W2iLbvr3QPlhCfX3cOY+qBWpov5LUpCLwG+MwzN03TLOQ2sjcV8T8sWv70cZ3QduBs/DEPBgrJ4vxrx3jvBb8bLlQgxemzC6P/fuATyUlyVXYyhe73h4OdL2geuiazwtGfZFcasyMRkPgWMjXuKq/fvh5CgupIXrecR7Tt4FqhDHyysQ7Lf8Ama0JkrXC91nYeYCeZZB564Ceq2oOFAXAB/M0gkDg7j324ELwM5TS7kt0Bdz/4HJ4FvwG/E74HhwMCp3wgrgJFSF7IfRzeEguDJy0Jer5fDb8XnAQVq2uMHfoKDRv6C3Q0HdZtTs27Z9nngYmiFPYSRJsw+cH9XFPrnISFKvotXYGMVw6HPhXbhoxhL0xsXGu9A7YcsxeWQirorbv2N0w4RhN1nOO52Q/8/emcDfNpX/P/M1X/PsXrOEJIkyXPNQkUxRIilEJZRGkRTNiUYyJISKSEr4mkWGkHm45puMmcf///3WfvyW3T7n7H3O3ud7aX9er4+19lrPep61njWv8721DEb+AufLjDn+NoX3Z99NB+/EwB/hzJkhfwXZEDr3h4HVMaL9GTNjPkhsBO/NvpsKPHSVmecenPMH1Drq9ARKos3d9C1C5sRuAgPkzUVZzzmLwi2hDwBnwGehh2LXgqYxHgMXwzmgB92pof0/ApuGc+8COHvO0It8uyb8Jpde92dT9lelottDfdkPpqTQ+nABeDzcFlbBaNq3zV+CC1apcE7WtXjjLG0pwptz+b0+m2j/2zH6Meh5bN2sApcQWjfvJ73uKG9ExrU9D9fbL8JdoW1eDY6F7r+ujw/DHeHTUHuuEXXBNeeHcHn4QKLU8eeeqD3rVgf2Rsm3ChS9QNpK8BzoXui91HXRcXQWfBP8f9A98e/wMeiPFf3Ay/bOcNqCwt6f3wG1o89/DoXromuRc7CJfeiX6PX++24Y+DyRzaHj+PlI7BXagLJwMF9aUvgw5HYvKduvmJe/zeC/4EtwHngeXAe6GbRoxgMe/pxk08FHoRP0QCjugS4MvuY2hctR7OR3EfDAcxl0XK4AnfTavw42gRlR6pxx4Xac5WEdboFP5TNq+n4relaBC8F9cjpP5dt+8ZA8jENgzvxQP13ob4KLJlbfRdyD8P8CpqKR/4BLJY11M/hD8t1kdHGUO87zOJ4EN72m4Yaftl17T8KZjAwJM2DHzfY5eCF07Rkm5sLYGvB56Lh3PRwm5saY9p+Ff4TDsP9+7HhJch12H0phP1wAJ8HdoIe+uvFZFK4L54RvySn3AHglvAHuAT2T1A0ffM6F2v4APAGKLeCvoXXQL86PpuC4c7y79m4JH4eOP8eB+3GTe8849F8EF4BFcAy4D/ylKLOGtCbte8GYAIsuGr2qfg8CV0Mvg3+AnoMnwCoYbfuu50tUqXAm+yKh8/4J6FnwbXAtOAKroMn2+yjluHwS3gZXhmVxDILbJcKu91vB/eHWMOb6MsSvhYdB179PZnGC2jA/mrTh+Dq/QKvz8tPQfeHigvyqSa53nu1tW4ov8jEP/H/QtTbg/uAZZF/4GXgVXBM2jWMx8AH4DngJnBu6R1wP68aWKPwhXB4+kCifkrjrnvb1T+1wsOnwMjytduuvVrhJVg8n//rQg9jTWdoOhE1gcZQ68aYvoXzJTNbXo9cDNqYRTrTg2cSLxsFZiczuxPVD3XCSPQ+1/y/oAhl1+RHxpvFRDIS9M4jvlXxfQXxq2CSmQPm50DrcAo/L4v4brCb8jdrJDmkfeNDWFz58/K9gexpqm1NeNsTGu9ncnLNvXXYdUh1+VmB72P2/A3W4ELrmbQOHjWkyg4YLDNs49sL+tKNg/9vYjLE/MYl/nPgw8EeMhP07s7gPIGs1aHw6dJ+T2TqccLUcj8zy7iJcCDYBD+Re8D13edgO+ABhmvvx0pFYczg3+m6C4fdO4ePIrFyzbdU1bf9D2OjUpl7pnofmgytkOkYIq2K07d9OhXu1s1O+l15xClRmAgzMSCTWx7HE54iMXNhU+2fAjmczL8bbwWfgeFgWrq9e5k+E7nte/NS5GUyxJx9/hv448AV4JqwbH0Sha08vfr5Gw16kD4Lusz6krAPFB6D9meJXfCjn+cQ92TvhvLBOfAxl9mXsf94Hr4bPw0Vgk5gf5Q/B38I9Cvgt0l6A74C1Q8d3moD59CNqt/5qhW/lU6fvnCSvQfx7UCfVjdVRaAfbTi95s8FOUNbXSGXP6ST0GkpfP2tLvo/LfP+zxnZOgS4PWO+GLgR5+278W2X5KxA2hUko1rZhjLVfZGmmvxk2ibVRrh0XtxXhGHgRNG0/WBfq9GH4qY66uSHeCW3vfXDfLO73u+DrHT4w3QZtr344MosPu/2uwV42tPscdO318DEMeIi7EmpbuimuAoeFr2IobEe47bCMY2dx6PzfBP4M3gKHiaUwpn3nm2vfjXBYWBhDL0L97mFvZvj37PtBwqaxAQaiz39AfBx8IEsbIWwCzqtTYNjtFd6ArAfnOjGaDxBeeM6HnqvKcCJyi8K6MAz7u1BZ+/VrcIsS3A4Zx7tl/gynhO7Zfo/AqmjSvuvVh+A7ulTK89TNsEzblTkK2tbnYFwKY45MIC3gvuT+4Jo1EXpJLEKT7XfuBOLiGN9tWJ8HnAMpmjiPbIgBx+q98BzoHcfz2KawaYzGA8wrbfKlw5csJ10vfuyVUq+PiItt2ubz+C6ayMuR/mgi+xjxKpiA8GJdCni5XKNL/hI98n3F9tA4pouOfNZCJFwIJyZ00Kf+iHgqcwcyh8C6sBOKwk6v8EVkl6zLcE6PG/Rl0AtQwIXHDWQY497DyIFwXRiwPzeDvnbXgdVR8pc6FGU6ziDsNq6rmNoV4ej/TxKfCcZB6AriU8DXMz5K46L9jrl5oIdi0y6Hw8TUGLNfXVeGDefc8nACHAuHCdf16IMIrxpiBVbF1sXw2aweHnL1xbDgQf4SGPa/TXxY9j2HnA8vhHNCMRf8Mdzej4YxDv3XwJNhnAGWJn4UXAc2AS8Qi1fkrDVWZCp0xeUqxnu3sO4HiH7W9H7KdHJZP7qqlnEt16cbdqpEku4ccH9W3kew2PdXyNJGCKuiKft7UhHPYzFejulQsUmkX9ohL5/8bhJce56BmyaZMUYnJGlLEFf2X9A6rA2L0FT7Z8PY3XBr6PpgfBFYFq6rq/XJQdfkbbHrmerqAWh5zyz9wvvH+AHo+ahuuO77g8N74HJ1K8/pm6zavxeVi4ncKZyITPrilWvPa/LTDfBcmLbZQ1cKDyF3wlRmt1SgR3ynrKyHeS9gebyLhDhwrZrP5Ht+6Guo9r8K85iXhFuh+QfnMyt86ws3nWhnurh/roKeqqIu3C74YbdbeC9ycTisaqdf+ZUoOLbfwh3KedlPYR8W9X3I5OUXIGPlyCwZqv9x+KOS8mXETkfoLlhl4yvS67riBmrf3wNjnflSlmb65vD1imlpWKwx+tNv8XUY88FNqUWzHojDZPjc0IPOMOCY96Ds+A/7xp1jw4CXj79C19jU/qnDMP4/ZmNm2tvv4T/K2V+DwjG3eEXW8QAx2u0fpv2yF1D7M85ffyQeeyDRWv4CYEMVdUEV+3Og53kY60SEjs08JpHgutYLcQ72LLh+Tjj/APBr8kfgI1Db1mUE/gF6MU/RpP8vwNAD8PaMU6eGu8TXJC981m+YPpB0MVWYdW4N9q33bYXaeyf+uCb7R/Q29V8Se5DiQ/8TA9BztGNyStgPGm9/2YEYlffS+1a4TSTkQg8iTspnc+lNfHoZ+jT0wO/F18H6VfhPWDe85G4NL4cLZ8odINdBB5d+9BeByCP6hl/C+LdJfvfClQjYjhmhg2ZF6GFf6PMT4bTwSXg/zOMhEm6Cy8Ivw5vhsVCoM/0V9taXU/v7zzcptm5W1EPn56Ab0nzw6/B6+HtYN85BoZuPDxD2+Qkwjx+S4IvzC/mMmr7nQc8V8CnownoDFN+FjsWL4TthHbAP94dfgQdA/fs3OD98C7wapjiYj73hZ6D1GQ8dr3PCJWCZPn8bcmfCmeBVsC54WX0XdI6uCWNcE62EjyK9YFbiQMJYZ+x32z4rdA1w/jhnm4LzyXkYmJvIkvDCSGgotP2xxhxE3PVCfAt+HNr+/eBpsC44no8eQNm1lN2sz/LOdw9PY/ss7zowAU7qs3ynYl8j4/tJ5kvE7Y9hwDG/CvwTfBp6qH0EbgKHAW2+HZ4NXQe1/yB8L2wCy6B0ygEUu1e6N/YD91vn9SC4g8LpWlFFl319PIw1r0pZZd2Ll6taKJGfmfibk+8qUc9nwv3SMdMPRrv9o20/77MxJJwKPX/9BbquWsdhoap9zypTF1RuUdIuLEjvlbQxAr/JhN5H+OceBTxvOHeWzuRcqy6CT8B+5mTV9rt2bQXvg6vBueAI/BK07hfDblBe3AYvfTnW+z+ulfrGhyHbey/sF1NkBX9OWOVM75nzUOg56f9B29sP3thPoYIyyxek9UraFIFZegmVyFfP4vDmErJ5kdFsf74ur3w7KHaFN0EPPnawE8pLx+xwGLBD3di1nVInO/iagpuhbQ2bTrCNoIfBSDP00OoErIqdKBB6ribuBjwPvCdL199bwk5YgoxHoDo8nHlQEyfB0PvLl1P6+09av+tQYf2EfnFB1ca/4aCHJlR0xNzkeODUljbXgS6wfnvpWxs2hTehWBvaugOOhdtk36bVefHaOtG7LfE/Zd+OcTeiPD5CgnVwjHgwcAz6fQ2cGvbCigjE2LHcSr0KVMjfB1l1ytvhQrAqbLObmTomwmlhigP4CBs7phkV4i64n+gh/xny9fGBmdxchD5oaNuLWTccTOZs3QS65Nn+WAfuJp5v/36kRfvrvoxdkegOG2XDzSk7CL5K4bK28nJHDmK4R9kPkf87eDJco4ds3dnTo/AEuCx0f9gf9rPfUKwveLDTvgdcL3raz49HkmrBb9GS79ey3y9QdqkBauFh+oYB7P+LsjMNYN+iu8Ky7c3LefkYBPapa01eb9nvf1BWHw6C0Wy/9R6W/V2wpV831GgBxpAWZ4BziLsG5LECCeoYyWeU+G7Cvn1/PUzHy9N8L1xQn0mkXVqQHkkbEXkGPgc3icRceArf2pqQpK+epcU89ixVhCbab53Pg57Bwgfemy6Ejqte2AIByx3eSzDLnyKTtYx+svwgGKGwuvaooGQOZP+elfOs/NEKZfOiIyRo/wTo2C5Lz2aWk49m5QgqYQRpyztubH9ZfgvZl2DYP554vxihoHpGo/2l6uwiNA8cdJEvZSwRuph4ODgfHpbINRF9D0rjEqhtF7S0Dk68JWC/+B4FQ9+fiZ+ffPvI0gvrIuDDhDo8gBySxf12MA9yUHMyqWcSHA9TeNgIvxyXZtQc97AZ/tkp0/1Owqey9Kb7P7V/ETYfyuw+TrgIrANjUDIOunjY1lhQDPWzG+hUMOA8VP5UmMrbH47XhWC3OeqDWrTD8nJPuAv8BfQF+KfwR9BN5X3wvdCN+N3QjW4DuB5cB64F14CrwXfA/WDoNbwVLgDzmIaEH8DTC3gJaaHjjoL8dJ447ot0/Ir0pWER3kii4/oTRZlJ2qbEox47Eg+fW6cZE7mi6DEk/g3OWpTZI80NKOzuViCrzkcymasJpyiQ6TfJMRS2zyK+dxd+nrznM/mrCAetx1h0PJrpu5ewm23zrs9krcOi8LUM12ov+YOw15js5p/Rtm/d3gxd92L8VQmdb4NiGxRUsZnKfnZQ45S3D+7K6nAt4Zxd6GNMyHrpGHTuoWJoF2BtFWG025/ad+3u5v/5yb8fOgaq+t+91nIbwjzGkHAmNP982GlOr5DJjBAGZidyCLwSngh9tCtCU/aXwJjnWM8X7uGeCYowicRLizJI2xB6+XdNfx/shFPI0EcTEoE9iKt3LLQe34RF2IXEJvyvLc9OrmFPwT/CstgCQetU5gHAuf6zTF5feSYbFCMo0L4+LAPHmnu+ZWzvDnAQjFBYXYdWUPIxZOMech9x949+MEIhbTvvysL5fzO0nDwNTgf7xQgFR6v9/da58XIzYKHbgeDhmmrgIvs7eAecmOOzfEcn50Pz8vK+iH0QFmFBEj0ofCnjvoSPwbxev7+dySi7O5wZTg13hlHe8DJYVP6MRG4f4kvDKtgfYTegFToU2pz0c+DaHfLrSF4RJRdC65/CS+wX4DxpYo1x9e8FPwPdzPL+PZu0veGesKpfKfIq3MZXXn/+234Q9r8LXT4//23fF2EciQ/AvHzT3y6Us+Qq9I4h1MM5lIeHlPDhe/OZyfe0xPXXUVD/pOvQdnwvDO2PTvgGGZbzQOLcLQvXvEnQsvfA6WARXDuUkVsWCQyQ5uFXvXdC/dAJrkVRh007CVVMd90JnSt1KTuevOcy2Z93kSub5cOa7b61T95IuXlhv5iSgjfAaHvV8F+Unalf45QbbftR9d8Qse3urW+Hi3fhSeQp62VBuUGhD66H6nTuLQW72b86k/0nofO2DuyCkuj7Tboo/Ggi1+2i1EXFf2U51+/K9DoX5uzC+cm7P5O9htBLSR0YzfZb/9T+el0atDt50U9V/R82Nszpd63/Y6b3YsJu+4bnMu2PQOHYtc+iTob2T5GOJuxjqjQmIXlpgfT6pD0NX4BbF+SnSafwYRsnpIkl40213zXAPem7cB9o/RaBZbAFQsof3kPYefbjTNbL/4Y95MtmjyCo/T1KFJgNmSsz+bJleqkdyfQd2kswy/98Jq/9W2BZP2fFXxWM8KWesg8A8yF7U1bGcu5D08BBMEJhdY1G+zvWe0yHHJ3t4uii0yTGolyndKKHnjrwYZR0stFP+lMdKvXrAewcRNltBijvAdUFtkVvD9yASNl+v6S3uq4SR5KrPRexvM07s7wDCYXz7XiofNHDwR2ke4D9IiyC5X8F83YeIm0SfDFH06qy6EHLsZuHf9XwWXhUjl7Aon7X5fLysk9nsl7Of5mT/RHfXtJTeEG7C4b+fxB/POOlhCltd8h1Cu9A5vSEXgQsdzK8Aka5C4l7uCsDH52i3CeyAksSeqg4En4ETg1ngQ9DZfVTnWvxuzO96vagWwTbczdUxoNnXXDNfxSq909w6Q6Mcfws+eNgHfgqSrTbD4+soQKDrO/OpUEx2vat//LQ+WwffBN2wjgy7HvlftFJqI/092c61etDXyesS4Yy0ofgujAtilz31Xs1nALm4dyLdcxf4Ypk8mXKfu+CYLRrvS6FXBdCruoFuIvalx8cR7P9qf/dHw7qQNd529+P/8PHG1I+YJ+eAdV5GXR974YVyFR2JBNaKvuOPonwA1l+GjRhP9XfK67vLs0JOdbczz2DFNU5J/7K/1PFhHxG9j0NoXvp5dCzRoom278IhmI+bkL8XNhtHYl6bUHEPuv1AHBYJufatzGsCyMo0v4ePRSOJd/9PsaXe2YdGEGJOg/toUzffjuTVf5aOA8cBCMUVleZBwBt3ZDJW+Zk6HlsUIygYLTaX1h3B60vcS5GHpwDbtBxyP9hJDYYxqKoc/L8bU12346eZwr05+2V/T6nQ702I92LgQf2oBeQvN5HknzlXCxXgePg2TDKGt4L8+Xtt1TGF3on9kKwLOZG0E2lE9yw3gzrvHiktlzAtVEVTsYxVQvl5A/g+w44EXo5zvvXbw9gt0M3mTqwP0rU68L+QBb/A2En/34nk3mS8OEsfiJhL7gZ5h+iHJd14fMoSv1lPctiFgTD387HxXsU/B75YetDPWTNtu0nwCjjxeEvGb9EmPJYvl3ob4YhH6F9b95RMC2T6voTeSH/LeJlMBNCPmpaznnt+N8ePg9Dl+Gp0I1Q25G+DfE64cFJ3ffB6QsUu56E7XcV5A+StF+iO2x0Cn88iKFcWQ83j2a29f/ePXh9Jmv/LAoHhXM9dN5DfCnoHOjEq8nTLz48zQAHxWjbj/p7qLJdrm3zRGIuPIJvZfzFbZFc3iCf+uAfUN2u75/rwL9nMp3mB9l9Y2dKal9uUaDlk0n+JgX5gyQN4wLcq36j2X7rltqPfugU9uP/ogvojNg9H2rHS82csBtWIFPZkUzIv8h4AebrWbQ2N2E/q0apYBJSl+YkfUSKfW7XXF7R5ykk2tYJBZnrkqYPD4NjC/Kbbv+s2Pw+dC3foMB+UZLz3PYcXpSZpR2SyeinOs9sqh+B2t8DdoLt8j4YY6zO+99IpvdQwk7w/OaZLex7r5mjk3CF9BFk1XlmjzLeiWJvUP53cOoeZcpmjyCoztFof2Ed00uCk9WNYQz04Bsd8FPiTWMZDDwKw2aEHtCWqNH4gujaMEcn2cMwbObDv+TkLb8mnAaWwVsRehqq1zY+m8UfI1wW9oIH86th1OuBJO4hoV/Y1/pXvfsWKHEcXJLl/6ggv0rSPgj/DaYL5WJ83wn1wwKwCB8n8UqYLoRugjdBD45LwkGhH7QR/k3Dtw+qPCm/PPHYvD9FfDXowVZ7u8A8fAx6CZr/Ebg+jPIfJN4LLlq/gdGez/YqUCH/8ESvG1YVxCOI9fpmiYLzIGNfK38rLLMYK+PCbZltYS98HgFl3XQnZfGzCN2MuiEeaL7fTSiX9wW+tSWdvx4Kn8i+Iz3CjUmfGcaDyY3Ee9UJkdLw4Bi29syVsl5eOs2/NJdXx+dYlDwCw36n8BlkFqzDYKIjHYNvS9LzUS+dMUd/ns8c4Pv9lI32fqiLnvUSuXz/dCnWMyu1748AnbAuGVHPOu1rbzkY61vR/HFtfwFq/2ewbmyNwmhbr9B5Wjc8P7j/adsDp48SgRmIxDp0eSTWHDZ9Ae5V3dFuf2rfPrgIXpjxKsIYE/363z1dHRvCFD4AXwDN81w3O+yEFchQbiQR+G6WFvXzx6KiPaEp+1bF8bki7HYxc/xeCvPwEuw+69zfKZ+Z+z6Fb9s5IUn3B66T4J+hZ6pOaKr9U2Bwe3gD3At6fiwL2257PD8VwXXQfH3TbV0uKlsmbQQh9e/RQXgW0u0zZeSx0PbWhREUqbfbBdh9NuzfT3xeWAdGUKLeM7som4u86zI5ZU+HrhN1YQRFo9X+wja8idSnskpZsRPhIcn3o8Tnh8OAB4JToQuH/CGcDzaNYzBg24MjxL2UxrfhtrAfuFjdA9XhYcZL3JbwRWjaRDgn7AQPBXGRUV6fjIN3w9C5IfF+MDWF0sH+gUSJkz59HPpKktdP1AOO9X0GrgTHwGuhafpiKVgEN+Vo51rErfMlWZrpb4OD4qsoUJf0oGn/xMH0LuJewOqAG+YT8IhEmRe8s+FbkrSIrkbkSeh8DLyPiPLLREKP0MXr9zDa1kO8dPa5mc6flC7xH8E5CP6dlfVSO/Y/yT3/++2sjO34aE/p/wjYdteTfXrIL03+c1Ddyq4MHad+d9ooyXoZJ/Dfw7J4mcAN1nar+z7oPPAR0O8ifod08SUY+du/nFLffy7LdD9AOGOi9gtZunY3SNLrjH4lsWG/Lp5xiyTdNa9uOO7c22xbtwPBUZmMj7bjYF1wXf8H1P6t0HWtCJeSqIxjxYfgupDavx2ln+vAv5PehP1ohwd59T8NF4jELDye0Dx9v3CWVmegD9L976bs27ToG+3fA6eDTeBjKNWGTPdf+yPS3SOagOvjnTDsXET8wox1XIBR1ROj2X4rl9rfPKnt/sTDL/36f5dMx4aJ3oh6prg4y7+CsNM+uEImM0KYwjp9GW4Niy7/yjZlf1N0Pwj1j/tmp/11EnmXwiJsRaLnYc9ZO8BOOIUM7UxIBDw/ldmPmmr/etj3PDIebgOrIPa1wwsKpQ87df5Yk5oa4UN/7pEmZvF0TCpzGuy0LxUUL5U0gpS6D+0i/WbyHs7kniBcvYtslawRhLXdab+fk7xrMhnlPGfXve6PZPpHo/2YLsb7SbbBRfxQcZHXTep+uXZfz7eH9AnwGRg+8YDyNlgF0yLs4h46PpUU3itJd6B5GCnC10iM8mcRjwm5HPEns7xHCMfDfrAUhR6F2rCNa0HxAxh2R4iHXaJ9wUXzRajOe+Evs7jf2uqEVciIy5mbjgtn1OvoToUqpj+U6bTvZ8rKfi5Lc4NaMkt7rQaOwzPguTU24C50HQGnqKjzm8hH/1XZ5OainJuBZe+EtqkMpkFojR6Cy5Lvo8SxMNrjeHVergy7YSsyo0w3ucjbl0i0P9aD2UiLuRx5EYaMa1JsircRt111wcNk2Pt8pnRWwrB3YV2GCvRo5xGo/YuS/NOzNNek+ZL0OqP7oSza/c4Cxa6NHlKV+XFB/qBJW2e61b9TgbJNkvxPFuQPmpTaDz90Cpuwb/2de66xeR+7v8V+8SPiTcH5G23eLTHiwT7SP56k1x11Hk+E2roZepmbBcaedAnxJvExlEc7674Al6n3aLc/tX8dFfYcNgeMR+pB/N/tAqpv7GcvyPr/suyb4FXo9ADwKqEOH03Ynxlb4ZsYN85ff0jMYxIJtq8TnGPOcZk+fqXyRQ8AkT9nRDqETbQ/NfUbPrwj2EdlsQWC+i3/ADA7aROzvHsJp4NNYASl2t8jp9wzjPeL6NPzidf54BzmRjIbh0ZCh3BF0h/OZB8nLNqfOxTtmDxCju07s0BC/1+d5StzOYy7ANHaMIIm9Y9G+1/VCB1qgx/MGJttDIAII38icl+Gw4STYGyDBvMHINu6WGLv/cTDD4Z3Qy8iZZHqP6SgkBeO0L9OQf6MpMUB9BrieV94eInD0w8LypdN2gDB56F18SJyXBb3+w5Ypc2IvwpuqGvCDeHvoTpTPsr3e6H5y8AUjlHTj4dpGeNPQdtv/vJwEHyIwr+AC+aUrM73arm0Jj7Ho9RfW+dPlH+UuBuMC1MdcC4dUYcidKjrKGjfVsG8CMdF9z7iVTeYgykT42D3KoYnE1nnr+PdNtwP0/Z/KUuP9hl6IfCQGHD9jfydI7Gm8K+Zbi8e2jwg+9Ze0dpEcm3YF03Rrtv2E58AAEAASURBVI2Ir5J8f682K/+tyP6Ix4dz/jv7lb+Aeoa8/NpQIF45yflzHbTt+UctD2Tx6/s9xJ1zdSO1bx1ugtZH/gNGnzRlHxMv40T+q63n4HgoToGmNeV7bQj9HH3gwXsMnArqC+3fBcs+NiLaF1zrw9c7Et8/+V6/L43lC02D6ESoff3gmKjrAoyqUhjN9lvB1P62fH8TRn8M4v9dMj2eUTrBNehvUHsXw5mgMN3z3wrQvBFYFU3Y96wVvknDHQoqN4m0SwvS06Tt+XgJvgA9zwUWyCKxDkyIjCycgdAzseU7oYn2h63PELkBbg6vh9anDLZASL8dXiC8CGl3ZvmelactkBk0aQQF2t+jQJFj/eks/zJCH+frxggKtX9oCcVvRebhTP7fhKuWKNNNZIRMbZ+ZE3IPiPOP+ffBeXMydX2OoGi02v+qNvw0q4iVKcvHX6Wh3o99UOeC4aVZ2AG3QgfkPLBuqPMxGG1/lvgaBUb8dTpkDJ2YZTE3gl7yD4IOsjymJuFA+BM4Jp+ZfX+F8GTYaUC6AJ0Il4NVsC7COyT8M/G0nRH/diKzHfGFYBV8HOHQ1Sv0EWJcptyNuJd85LuBLJuV6yfQt3PkCnrg3gG+MZfexOc3UGpbbofW413QNpm2MqwLRWOwX9396DoEY9Fnu/dhWN88nulwkZ6+Dx2jWWT/rO764NMFFdmVtAvgNfBgOBtM4YYcF1YvJnVeCjdCX/SNm3P4+TziTcN2xUbvy/tfoHXxsaiJtR+1r+ArxKLda7+S+ur/r/ofJul1Rz30hv3dEuVbJ+muoU2hk/1tMBj1atK+7XoTjPXOR8q3wbDdpO8x8zJSHzgvvYSH/Z3/I9Lof72E35HZvJPQw672L4TDQFMX4LJ1H+32p/bdg1136vB/mQuoPpoDuuZr83zoWe5q6Fmr6QcATFSy7zl1ErSuQeeuczgP5S7NJxZ8f4w0dXn+84K8J/wZFJ0eADxXnwPdBxeDRdiFRPVuWJSZpFX1/wTK+lC+VKbDO4Jn+DLo9gBg+UWhbbLep0LHZp0YQZm6ix4AtLMBfAYqY9/5Y0CdGEGZuss8AGh3RfggtMxjcJDz8Eim50zCPN5HguNPO4/Dd8AmMILS0Wr/q9rjwnIRvDqjlSqiTlfmSujEbApfQbH2n4Pvgn/Kvu8gbOKg/+5MvzZfhB64iuAl/XSonPwnfK1jNRoQ7aka3lux8e9B/oWS9u5HbrZM/5qEjoUy9fPyEC/GWfHSweJI+vjjpF8vKzUl4e+htq/N0poM5kJ5LPpeuLzcattN7vWCBWlIbCy2ddo+G3Yg5WJM7NWnjtEoNjtGXUut+yTY75r2lUyHej4J64Qbfvg2wjXrNNBF15cLbH+ri3xdWemjivth4DQi+uBpOF8kNhBOgc7roLZcW8fAqeCN0LRB5grFe6KT/ZsoOQz7UcFfZ/Y8hF2RxZv2fdjWB67zttf9fWIWv4NwGjgMfBQj2k+5zjAMY8M22lZt13kBRl1pjGb7rWQT9ndBrz7dUAM9MC/5t8G0/8fx7TndtBFYFU3ZX4uKeFazXp69PgKLMInES4syCtI+S1ra9iMzmVOy9AnZt8Fu8BY4Fm4L/wo9p+fRRPvnx4jtOgHukFE7T8H3wl7o9QBg+cXgPVB/nAqdn3VhBEXq3aOLwo3J80ys3CVwFlgXRlCk3rIPANr1QSzOTo8Sf7OJfWCEMtouegBQ3eYwHgH+TXxVE2vGCPpGq/0dm+JLo694Vkx6IY64B5F+D6sULQ0n8Nkw7Bp6cVwdNgEvID+B18MP9TAwHfmHwYuhE/i1Dvv7KuhkCj5BPPV9xCPf0MVen1WFvp4J7ghDbxp60Dd/KpgiyjkxU/mI/5z0onKpjl7xhRGIF/9HiLv4fg6GjcOJNwnH0/fgn2DYjPAXWd4mhK91/JgGRLt2HqAx6UX6AfTMOICuYRY9EGPR/j0HMDyWss5FdXkImwHWhQ1RFHU0dD0eFjxkuL6E/ceJ+zA2DOyLkbCrD96efDs3m8ZWGAj7nyb+4eR7kLlStt55++k6PQz71vNN8EUYfjAchu8x8zK25L+pbeMf+U/WUP7rIf8OGHU4byhW/89IExfg/9PeOzba7W/CvhdD+3O93s1/WWJ5/vsSjDGwCPEVsu8Rwqpo0r5nNc+RY7pUahJ5F3XJz2f9hoRo+9FZ5ilZ2oTsexXCh+Cy2bfB8fDA5DuiTbTfvWGnhP51VHxvFoa7hJ73bGOvc+WSyNyXyZ5GOB0UM0Pr0C9GKKj9PXooeDf5TTwCjKBX+4fCsoh+tNxV0DNgPxihkDrO7FLYfcB7p3I+Ojje6sQIykar/R3bkV4+fFl7J/QFxIpKLyJNwYH9N/g0zP/i62L4DPSCVmXAIN6iggemQDYWWvtbn0ffO/nqwLwoceFW7xPQQ2d82++dJtpY8u6FlnNB2ib59sBYdnNFtCO2JyfaezvxaL+vsLN1LFVPxr9QE7Y7hf4K+FrGeCofc9vF9fNw7wF4OWXDV18gPrljDioY66lj1gcA51W/vICy0f7PEq8Tl6AsdLsPDBNfwljY/sYQDc+KrXh8cGz9JauH+848sGm4/l4Lbbu/QN+RxQ2ngU0jb38iBq3LsOxH+07I7Gp7WL4P2/rgmsT+rcT9UWKY8CJh2+WawzSMLcfZHTDsnzdk+5obzfY3Yd9LlA+ZC6u8BxYk31+yw/+Gi8K3ZGkjhFUx2vYvpcKHlay0F+k4I9j2Y7JypxL6PQH6g9DvoH66MOHFWdrihCmabv+6GDsXTpka7RHfgnzbc3gPObOXhpOg8mfC+eH50HnSL0YoqL5eDwDq3xRGn+hzz+KBbSNSMRxBXvtl73M+wnoPtIzrs2epfjFCwfBlNx1bk/lCJusjQP7Bxb3CsdgPRijUb/v/TtlB2l9Y33WyClkpL1grZVLvS9LtgBmz9LoDHemrjvY70c4oO2AQbVHRA19DPnx/DvGl4P1Z2vOEjpFBcRAKwkYsYOuTFgvM9zoY+FxSbu9MxovJU1n6kVlaP8EmFLL8UTAuAFFHQx+mzPsFdLFvAiugdGf4dZjaNv7bLM9DwGsZbnb5ttX1bb/NOpk758AG2/8guv1VoC5sgCL75k91KaygZxZkfRT8N5y9Qrk6RL+MkvyY/FYdikvq2LLAvoefYWG07dvOZaAPZPbDMH2PuZexBf+NMbB9ljbMwEv47fDsYRpNbLkvR/vXTNKHFR3t9jdh38tCGUyN0JgcLesaYJ+cC/vBaNova9t25dtuX0wHb4G2v9/xWLYOVf2/EHV6AF4B3TvKItaYMg8A6lweesbRB3Ep/SjxfjFCQXWVeQDQhvUNu7Z1TrgXvA32gxEKaf/QgsIbkyYDOxLx7qn8dXAuOAhGKKwuH1N6wR8ao90+AqyaFHBvWjz5rhIdQbhT+1chb9lEWdr+a0kv1X4HchU4iG2o5T4BvfSI38KdoBewP8MnYRPwAhgXHG19I2fkYL5Nb9GMB3zJ+2Km+lZCD4Iewt8FL4IuzCfCFeGdsF+cTsH1oOPq8EyJ42oN6KQ/LEvLB15ENod/gd/OMq2XjwA+Uv08S+sn8NFh0S4F30qeFC7EK70cq/c/V6POl72RTO3NhJfBD0L99QV4I3ytYiYqPj9s8lC7Nvp/N5k6aBrq5frmmG0KG6L4pJqUO98ugfvWpK+KGi/+34WuOQ9XKViD7A/Q8Wk4W6brCcJvZvFhBCdjxE1+ucyYB6yjs/gwgtG2bxuvh+4174bD9D3mXsZv+K994MXj2JdThvuf5zH3NXjTcM2+Ys3x5n5zBzzvldThRUa7/XXb/zCu2wd6tu4HU1Jo4aygF6CqGE377vu/h1H/qnVX3rV4dvgC7OcM1FT7/dHS/fYX8CB4JTwLXgrLwktgGVyDkOvhBXCqrMAUWTiMwH1he3gMXBHeCv3BZSKsGzOg8Hj4mUyxZwHbegNcB/4LDgvWQ38fDWeBnou8E20A94Y/g3VjQRQeCT8FtRntd18s3f6qi40b3pLQTvUykuIIPuQwsCxGvpoZ+hLhi/Ab0AX0XGgHtKjfA4dkKp1cG0Mv/+JKuDN0ArgIezDZDvaLCykYl+lUh4tmt4XzKvLflhbI4qbLQbA/hX3wcJFZAjoP8nDcPQf1Q1NYC8VrwKfhVtDNbhxcHW4NredrFV6kHFf/q/BQ+Vpr//up812j1GGuR3HQGWYV/o0xN9wDMqOHEg7zwPH/sOf+d1Jm33p48B0WRtt+tFMf3AaH6fuwrQ9ca8dAzx+jgSMxaj1GA3VfgPtpw2i23/rWad+9T1Y9k1uPgOdzzwNxNo70MuFo2ncshf0ydS2SsbyPYT+B/ywS6JEW9uv2//ex+xj0sewluBM8Fq4I3Ue6wb9cFff+J+j537mQ0M6UPSWbE/gVqsfCQ6H3RDHFf4La/2tffS/RejPxtWE//Z+o6Stqn04Dj4Azw/NgtLup/vDhTHsB577tfyASXq/hFjTMje9UGE7+GvF7YNEFkOQWNXjAQ+8VcIUOunYk/WL4WrvEdGhOYbKL213Q8fcs9PBpXG4Gm8b0GNgfrpUYmo74e6B5LVoPtB5o3gOzYMIHUA9xszdv7r8suO9dAz30jsYjyGjbD4eMRtvDtj5o6nAXNtqw9UDrgdemBzwPPgL98enChF5QvSD3gmvLutCLXhmsiZAP8ikXK1Owg8wI6Z5rd+qQ3ynZH8o8G8e5+M5Ogj3SRzIdPyiQiztg2PCvDeYvkOs3aYSC6j6zooJds3JRL8OlK+oI8REili/Tfh8/5oX/M/DPhab+n2lt29DJxQP+KVdM7i8S9zHEX+NN8zIwD2zReqD1wOvfA85/f30fLWyO4Q+MlnHsjrb9UWx6a7r1QOuB1gOvaw948b8M+ufmZeCD6D7wFuiFPHg+8X5wDoU8V3++oHD+AcCHFv/kvi6MoEjb/rOGKvgYws/BuCMYvrGKgkS2avvXTsq20dYDrQca8IB/XuOk/hOMX5/eR9xHAP9kq+xiiWiL1gOtB1oPtB5oPdB6oPVA64HWA60HEg9sSPw4WPTLvn8ZcV2OV/Nd118f+7j/BPSvKcpgNoR8LEgv/hFfqoyCApmq7fefYr+zQE+b1Hqg9UBNHngHevaEM+T0zcd3+ic4LggtWg+0Hmg90Hqg9UDrgdYDrQdaD7QeaD3QeqD1QOuB1gOtB1oPtB5oPdB6oPVA64HWA60HWg+0HhjQA/7vJoyD/nOEJqB+/3fmZm9C+bB19usk/9cO/bOMOaB/Bu2/fb4L+mfQw4C/ri4KU/t38H3fMIxjo7U/uv73l3b/NyDs/5fgY9B/b/QgbAL+uu+f80zKlLf9P/z+9y8vPgzXgy7wRXANOh0eDf23ay1aD7QeaD3QeqD1QOuB1gOtB17fHpiW5vlPcyfA78C9Yd04EoU7wJthv3/aT9HXHvy3zV+AF0Ev+l6IUr7At/8fhN+GK8K6sRwK/V+hvwl66UttR9x/n30UXB/Wjdb+6PrfC+DP4UQY/Z0P7yTvMLgyrBtt/49O/69JR/4Vpn3t4nsq/Ck8Ep4BffxLZc7mexnYovVA64H+PDAzxdzLVxqQy1J+Stii9UDrgdYDrQdaDzThAX/4iTOg/wN6deOzKAz9/ug9Xd0GJkd946jUMdD/r9tovIfts+AJ8NfQw7aX78g3NN9L06BYHgUe8FPdN/L9W/hclm7+tTB9GPD/emN1OCiK7PvY4WXzBvgsTOsW8Sbta/d3MNofNtOwSfvDbP+atDO9ADoOr4Enwh/DtM1p3DFZxwWwU/9PRP/1cDT6P9rpY1x+bkRek/0fNrqFg9r3L4u+D8OGf33xBTgedoIXje/Ax6Hl7Js9YIvWA60HqnvgJorE/Bs09AzRovVA64HWA60HWg/U7YF9UBh71NPE31qzgfegz7tH2NihZv2TpbrtqZXOtNGPwANht/9LAy9cX4Px/43uBfVzsF/sRUEvm9p/CB4Ax8PAo0TMG58lzEO4J7wdmu6DgH+R4GWiH6T2ffE5BK4J/VOTwK1EtFXEOu0/iA19Ox4Gov1Ftk2r0/6w25+/AOrn3eFc0fgs7NR20we9AKb9r69/AH1UmgYGhtX/+XY6t2bJKnElYT7f7zr7v0h/r7R+7fuy+oesTfbhvnAMLAv/icZPYdTvJ8SnKFu4lWs9MEoemBm7qzTMBUu2zfkW86eO8NKSdlux1gOtB1oPtB5oPVDWA5sgGJdzwy3LFiwp9ybkvP/EPvjVkuXKiHnP8UfGfu6o4ynnnbcqPF/7Y1lXHEBuNPgXxD1Ul8WMCFo+OuVY4lUa6GH9x1D7cYnwcJRHXIDH5zK8oO0BvTyow8tElT/XSO1b3j89nx0WodsFMPw3iH19eBCctcB4tD/sdAoHsT8a7U8vgPGIlF66U1d0anOaXvUCmO9/y49W/6ftSOM+CAXOJJLm5eOD9n9eX9XvKvZdJ5QPGy7u/cI1IPT8sF8lbbnWA0PygJfuu2GM2brDF9Ddc+PP2po+ABxJmg8HVbgm8v5oEG3YkfjrBQvRkG2g/8b0s3AHWMdfm6GmFEbT/hLUcAfomcRH1p/Bg6H9uxhs0XqgDg9MhRLPvGMHZNG5uY76tTomDw8sTTXSy/lHa66W5/7bYOxjxxOv88ekr2e6v0NYBbbbu9GTsNPdpJM+/zrf9nT0lS8cCmjgw7BfbETBJ6C6joFlHXdoVsa/PtgMdkJcgMd3EPDXFC9K2v89nBqWQWr//T0KlHkA6Nf+U9judgGK9qu/F18r7Xfhjwugfbcq7IZe7Y78KhfA6P9nMLxlN+PkNdn/UfeisMoDgOX76f8iu/2mlbXvQqgNH/4M74KLwqrwVTX+EinqvEtVJa1864Ehe2AH7MV49fHX/XMQuoeHPi9rZTEGwSjnelgFzlfnbZT/XJXCk7HsGtTtnKRd0b4Irybv3Q3Wf7TsT0mbfPC4EkZbO4VXILMtLHvWQ7TFKHpgSWx7EXBv7MSdyet1DkPkFUwg1klXpH8EGR8UizAniZNgpzFWNd1/qjl9kaE27TXtgVmo/Y0wxsP3a26Nd5E/J/ovJj6mZhsnZ/p/XVHvhlk521718dl2WO7b8L/g4m3mC3CL/8qtnvAOivhKoc4vlyi+ayb7LOE6PeTjAjy+i5wXgYdhxwbnyqb2N8rlFX2WvQD2Y3+9IoNJWrRf3WVY2OGJPqOj3f64ANpny+bqVvRZpt0h4+bTC2n7e/lfXU31f9S5U/hg0pAziXeSS9Or9H9arq54L/sTsnZ4+d8YjmTfdxKOh2XhuHkAWu9T4MezuA86b4QtWg9Mrh7wsnU1dOy6By4G+4UHGA+/6nocVvlzQQ86Me+rPAAsQjnna5TdnfjrAQfTiGhTr9B/KmY/1onRsm9/XgDzbfbHCft5IjSez7fMONhi8vbALVQv33dF3z5GLlWiKSuU1KeNazvo81HCta+oHv2k+UPATB1stcmvTQ9MQbU928V48KLuflcnvoGy0O9aN3edyjNdRxFq44Tsu2zwoaycZSeULZTJxQPAgflyvsj9G6p073zmAN+bZzpdRFbromdx8vzVX/s7dpGLrEcz2fGR0CH0Iqdt9a7fQcbk1P7HusilWVUugHXbj/artywn5/ZPyNrhBXBtWAZl261crwtg2v8fLmMcmab6v1e7HkzqV/YBQJ1l+7+X/X7zO9l3Qb8Gqtd//iNmgOdA0ybCcbAX/Pda/4SW+S2cBqo7DrFlFloPC+tA16qZ4aDw4uWfXS0yqKIu5f3rJsfvsDAvht4Ol4Z1X3aG1YbJ1Y77leNXnjRAJXdJ9Hyxop4xSdmyDwDOz4lZOdfwXWGdcC77S+RO8Kvwe9AH432h6/VbofOgbnwLhdEfhmfAjaDtnROuDl2znoch9yPidSG1r19d174Gw9a3iR8D44xjeh32nd//gmHH84aH4hVgeth2/r8ZHggfgSH/EPFVYIvJ1wOOrXvhpA5M+//TJZqxPzLR/0XhC+T7GHk/3A92guPmbhg6vJc47yf0oPeW9PHgRr6Xg4NiLAp+BX8Kpx1UWR/lXY9d61z38nBdPAgeAKuufytR5pfQsAo8m30f7gc9X1XBexE+Gi5apVBO9rN8x9i4jXiVf6KeU1X4+R5SXWu14Q/YrnlNIB52z66o/BDko/3bVSz7j6ysPnwVHOAq/curUuv5ODLTfV4XdadkMqd1kUmzHs3kx6eJHeLhsMs75Jsc9k/tIpPPqnoBLGP/jLyRDt/R/hgIZcIy9kej/S4icQE8tEN7i5LLtDmVOaFISZYW/e9rYlk00f9pfTvF+30AKNP/nWzWkd7J/rtwuPrdvOdLnD89cdcj8+6A42AnvJEMDzLK/ga6MQYmEDHdQ/LCsBN2JeMhqKz0sOJfEPSCh2AvJGvmBGfh+yqoLn9tmRs2AS9B2qh7I8zX1U3b9SE2R23eCz8AX+9wPKVjM99ex8A4WPVAlNfjt3uAvpWrwqrwESvmggdp51EVjEE47JdZj51Tt2dlHBu7wLqwFoqOg87FqFOn0L8cOwZ6ea0Dm6EktfXJLkq9tGg/5D/URbZsVmrf9q+bFZxAGHbemaWtSZhewAex/2Z0PZbY+B3xOWEvzIHAyTDqZp27XS6cU0vApQu4FGmDXLbUrY4i3dp0vrbo7gH9/wC0P720zwo7YV4yQvYO4svBxaBr5lhYtS/nooxnsRhLjsctYCfsTsazMOQPJ+46Nigc91fB0OuYGiZcy8+BYX/ZxLjtOz3JWzHJKxP9VVbWOVsFqyMc9VmkSkFkr8jKHlixXIi7H8Zjq5fz5SOjpnAcetJ1fMua9Bap2Y1E/XhzUWaXtL9l5SzrA05ZuCY+Ay23eVrITnwhy+jnwJHqKorPQ+LTmX43yjxcpD04SA/yZRAX4PElhF2A3Ixs+ASYR9g3f4V8ZpfvqhfAXvZt/zJd7KVZ0X51VuGEVEkWH+32xwXQCe2CWxZV2q1spwtg2v4qi2jd/V+2PQ8mDjqTeNlyyk1IykY0bX8VXf3IFtk/noqoy8N7Hl5e4iBwB/HxeQG+rb8HFHWcBItewq/M8j9PWIRPkRjlXYMcB2dlaRsRdsM2ZFp295zQz/ielOX5sGDd6oYHK21cWrfinD432keg7Szijjn5YXzaz1MMwdB02JgIXT92hXlYj99B/fKNfGYf32+iTOzHF/dR/gDKRB9t10f5MUn5Q3uUX4j82zJ596+de8iXzX4bgrY92pGGT5B+L+y2B55NvvO4X+iDf8Kw28sP2lkH6gPLuEbPBPtF3r6PAYEJRKJerj2BCURehIPYn53yd2c61PNDWBXfp0DUbxLxTnv6uYlcyKehfdyPD/XdXT109zOvUPk/h0/T4ugT98MZCjwwG2kXJnJ17QVTonM/GGPaevwAepEJzEzkRBh1fIr49pE5YOi95ToYuh3Xw4RtS/16Gt+x301PPM5F1u/kJI9oKYTfTigl/X9C7yMaPlnp/5JLxaI93ywl/WqhsXzeCcP2tq/OHvhrKjRE/bRx8MAauytwf4q2LNVd9JXcZYjFHmNZz5UzvJLbPbI+2WFvXCr65SzDQ3JTOALFGj+swEAcWP5UkNcpKTb/8Z0Ecuna1b71yCPsX5LP6PHdzwWwm30ndFlE+6NDy4bd7I9W+4+n0Z36pps/yrY5lSu6AEb/X9bNWEFe3f2f1rNb3MNloOoDQLf+72azrrwi+/Hi6sZSBA90cRmfSHyRRGhJ4vdB6+cmODUswhdJVOa8gkw3VetwN5w2yZ+O+OegF7JOsKyHBOejG3Ye65Kg3d3zGXzvBb9fkt9CblGYx4dIUP92ScbixN8BxyZpHtJWzaUl2T2jlyOhnU58jDwvD03D/v0MvA1al+fgCFwNNgXHRNh7kfi7c4YO5zv84gG1DvwYJaFzywoKF0TWQ7Bl/wYdn1XhfAvbh3YpvAB5sQZ6KPlYF9myWfavY10/Rx2eJH4kfC+cD6ZwjnqQ+gQ8HablnuV7b9gPPkChsO/c9oeLXeBP4W+g68j50EO5l2QvPc7PY2GU2454v0jt/wElS8Dd4DHwahg29L/2d4Xj4VEw8vqxf1JS/rfE+4VrcdTjyA5KLkhkQjYf5vu7g6pXJbsO5fXkvy98VYn2o5MHpiLDc2n4z/HmWFsZrgTd1ybCyD+VeN1YD4UPwLBxKfGF4fLwpiT95iyNYGB4+b8ehs3DifezlvZbkVkoeHFi/1zicdEzPCfJO4O462BVHEkB2+dcrYI9EA6/vKtKQWT/npXdv2I5xV37wm63fakP1S8XiTOiNs6Gjv2mcTsGtOcaXgauyeGDCL9WpiAy7iOW8S9aXoVL+DLDw25T2AjF2phYYODyLM8NtizclNU3vmSBdTL5ewvkw/6eBXndkuLwYz3Kspv9ftpf1m7IdbM/Wu1/OPPfpt2cXZAXbaoSnlegJ/q/6mGx7v4v244HkzZUfQDo1v9l7Q8il7c/nraEvm4XyOmRc1FW9k7oYXsJqD7TXBi9PHSCB3jlnoBT5oTmyvI8vFfFeymg3oM6FFw3y/eglMc9JFi2DJ9Hbuu8Ar4dux6OPADMBE+Coe8Z4o7pz0AvQ6ar55dweVgFobNb+PEqCvuQ9eBzLiyqg+16Tx86yxZ5C4JxsXa9WiormB6GriXNPqgDc6PkMWhbXWd8hCiDoxEK/6xZpkCBzJhER6eD1vzIeODWVl2Xf+f/BZlO9dqn34JzwLJ4I4Je0MMHhsfBaWAVHIlw6LB9Ee8VOhdDxr7oF0dSMPS4ZkW8V3h/IlvV/upJ2UnEx8J+MSsF74PWV/8tDvPwgO0avnSOF/Id7ey2JyBWiFlIjfJXEs/rX5K0svOp0MD/WOK2tDf82St0DDWBBVCarg2uwbEeW6eTof1eB+ZFyfUw2uoaOEUdikvqsB2XwLB/OnHPP8L95TwYef7lmXt/PziIQuo5t2Lh9Izx6YplY33crWI57wbR5suJ1z1/l0FnnJFcQ91/hwH9Z7tcI9/Vw+A2mWz4IULPeav1KPvhpOwOqayH4SezzF5K0nJV424mUeHUuW4CNsC8FWBZPIqgZcaXLDAzcrGRe3gJpPZXicSSYT8XQOvcyf6bS9pVLNofPq0SdrI/Gu0fT1ui7lU3+yhXJfQwlV4A0/5/J3lVUHf/l23Hg0klzyRetlzIder/yG86TO275mjvkaRNnaJeAM+Byt8N4wLtJtjrgD9nVs6y+QuFm7uXLTf9TngfGbEJpzJu1G4caZvS/HX50ObuaSJxL6s+PExdkumYpcjLeAf/VfeB//l8w/GEtmNXuA68FJovfws9nO0LvVj9GVZB6OkWHlxFYR+yvpJ3s++hMN+3fZjpWGRzcmIPuZ24DzIvQOuk7YVhndgHZdHeMgettyD/YlbmlAEqMiax6+E3j/lIuAlaN/2xCxwUrv3pofs2vm1Pv9iYgq4p4T/Hf681Imwpd1lSNnQYejj0AP57eBa8Bj4OU5mIX0e6a0tVdLMfuiPUZ/+G8Z2G1/YwvBj5H4Y7ZYz1VB36y3QPnVUO29b9/VlZL2VRH8dj2NHmONgJPyEjyi3XSahL+puS8sd0kWuzuntgC7IvhNEXZcMrKONa2c/Yp9ir4NjbDB4LH4Cd6nA1eQfCleEgmJfCN8Cw891BlPVRdhbKeKYI+6cRj/nn5f+CJO9E4lPDfrEdBbXzz4oK7svKWfacCmX1rfuF5TyflMUcCE6ClnsMum7VialQ5qOC+t0/q9QN8YEwHaXdJ7T9BNwRFsE58AxUrojuAWvDInyExOeg5RxbtveVgeMhdAYTwD/+EzTyXy+sTuC54fgsTvDyIVgniFv+EzTy38fR6kB3EC4EHcTC9od9J/4w0Ml+k+1P29XJ/mi0f8GsYk5sFzr7p0nMiPLZ4EOZkcmp/5tsd6q7U/+nMk3GU/szZ4bSR41Otp8i493wL3DVTOhMwq2gl9pusL/dfLxIp/1vGRfGn8LPwAPg/tCLXYqN+TD/PTDqugbxVeDhMNYToqWwNVJHw+NKSf/nf0PlMGQnJvKfIG49fwK9tOmHz8IfQ+HlxDXPzVN7+ugCuDDcHtYNN7Cm4Ka1Qw/l9qvtqvPQthL6Fszsvkjow8kGcBF4AgxcRGTFjMpdDB1zg+AHFN4VjoNfgkfBbg9l3yHf8W0/Ow6awDwoPQcumSn/JKHjbxBY5+PhGzMllxFuBB/OvvsJzqCQfXc6XBpuBq3nR2A32Ne/hW9LhP5B3LJeYu9J0iPqIVz59eFucC4ovIieCb1El21LkX3PTUfCs+B1MNpF9A2bwNvgW+GmcDvoeBHLwpPhjtADYh5/JGGJfGL2rb+kOBh+7uVY7/98BZEvFohZNxm4m4jrUBEuIXHnLMNHzmuLhLqkrZ3kqasT7Cf7bJpOAg2lOz/PhlPAVaBrWxHs9/OzDPefGYqEkrRniZ+Wfa9O6FwtwoskXgBjH8vLLESCe9NaScb/I34Z/Cu8GXqed97OAZ23q8FloHAddNxZ953gLbAqpqfAnvDTUBu98GYE5BfglfAH8Fj4EiyLWNtcL8Rh0DoMCzNjyPXCMSFcwzaHz8HIcz6I38MPwBf86BPnZuXmJnRN+VsJPY7D+RI5x5lrVtG6mIi9HH0f/3XMO/4dR2VhP8RY/iTx28oWLCm3D3K2X3wXnv1ybDj/cc6+H3p+mAUeAXeAp8O74Fi4CdwIdoPjw3o7Lv4EH4b2k+PnnVC45m4NX/QjsDgRJ7eJdk6TuAnl2togMeIGZFrVgewCZLnxsCxuRNAyGyYFUvtV2/8V9BxagY8g28m+k6IKov1HU6hsHRwUnezr/6rtvzXTp84qTP3vwK5Stg5Zx3wg+t+NYlo4dQXW0f6wX6Vd6cbthlGlrLKp//uxX9VeXj61v3ZWfxe7MlgeIdsfOi23aImCHp6izPhM3g3pTjgJxtxQ5ukszfTgU8TNuwXODsVp0HXTy5CL+NXwuhzv4Nty9+XSY/4678rwGeRczAMu7h4MTsoSrJN2tsm+DaaByvzdjwQHEVe2Cs5D2DLduFYVhRVlPaR0sx15P6mot5v420vaDNtpeEc3xRXy3LBDrxf8TngPGSF3SCehkuljEl3uLQEvTI7vsPPZyBgw/FKi00PoLAPqS4uP58M5HHXePc3MxVfg23kassa3glX2RR+YvwAfg6HHc88CsBfy9h+iwMeh/ZEixqV71jxpBvFp4SfhEzDsX0Pc9SKP75LwT+h6mmecVdRxNCyLnyMYdh8nntfr9wOw2xi1vf+C6rHuU8Ky8DJtGcu69uX9Q9IrOJ1Y1HXYoWtyOpeK7F/4Sk1fPYaLZE1zTwmMEOkkZ/ptIZgLPZs77qKs4+BrcH7YC56rvgXTsf9vvjfrVTCXvwrf1i/qYGjbjod7Qte6NaD7zZZwX/hn+CxMy1zG94qwDBwn18Mo/6MyhWqUmRldFyX2zyQ+Xabf9fDiJM9zh/O8DlyCEtt8XAllzsO/ZfKefZ/M4mXKeq6O8X4q8bJYH8Hokyrlyup3XD+d2biBML/WltUzqNzKKLgPRls7hVHXNP9qynmGTNPycfttYfhfGEeKwm4mVRba/1JUIuFOZLS1XiJrpcJ+lY3WBcFy42FZ3IugZdZNCqT2m25/nfb7aX/4v672uwjoz6pM7a+dlfeC46JXhVXthvx47ASi/yNvGGHa/n7se4gK6K+qdR7UflV7efnU/vJZ/V3YemE5BOJg6KZzPlS343o87IbxZEY9Zs0ElyD8Njy0gL8mzUc5yzwMn4IeaD8IxRvhS/BkP4AHje/DvK5TSFPHebk8LwWm97vh7J+VX4MwcDsRfeKBQXwGasNHio2hmAe6DnnYqYIlEU4vBepNqb4pqiisKKufoj9Su/m4B9C64Pgosynn6+D37+qqBHougur0gLsozGNqEm6EythHc8BBoK+jTY7nwKpE4tDnmFo9MgYIl6FsHNwdl2UuGlXNebh6DtomLyRzwzwc37GnKue6OlteqMK3+q6F4Ufne7d+ydt3/ZkTdoIXHy9CnbAYGVfBsH8L8bk6CRekKxtlf1mQ3ynpyKTcuE5CJdL3SvTsV0I+RL6UlPtxJHYI9ybdBxD7fZh8CHvfgEdB51H4OR+6lgfKrEPuU4FziOT1xbf7VlGffoz0dI09ke+iuUJyVyxA7u9hau9DXUv8X+YuRNM6uK5Zdpr/E+kYm5WcT8F7YNh+hvg2sBts4z9glEnXvG7l6sqbCUUXJPb/QDy9/Mcl3fp5CZ4W1oX3oyja/a4eSj+dk/1C8r1Jj7KfSWTX7iGbZv81K/cEoeOqbvwIhdH+KvWqux7qc/x+Dd4Oo06uD3dC9y/XKteOyIvwftIcv+5td+Xyr+P7k9AzQiEcfKGo2wZVWLhCoofDJzNbb0vKzZClWYcqi01s1uMTXd2iU5IZB423JoL92k9UlIpOVcK+h/OyqNp+7XvJ0s91tb/fB4DU/vJZnVyo7aMqiHFbNXSiBdL+r6qnX/m0/f3YfzAqT3gmrFqPQe1XtZeXT+3PSP1jw186aVc+uiwJD0B1HQcdz5Y9D5o2EY6DnbAVGcq5WJbFegh6WDoLfgMuAQNHEFHfSpHQIVw3k9s9l38s35fAg0pyf+QWhMLDkO34ux8JrK+bwOPwWmj9rs9o/Ab4CHQzXQNWhf1zDlRXntpuGqdjIG83/62/64T7lptn0H4Lmy8k8e0SGcdmnVgZZY5D7Z5YoNgNPuq0d0F+1aQxib5Dc4XX4jv28ceIp3t5TrTU5xlIRd23LVWiP6HvJXZ+kFMxM9/Ok6jH0cTr6EPX9j8mekeIO47yyNt3bXHcDQrXx9NgtMvD9HQVlMZh8+IKZeLA7hgpamtZVZb9G7Tujv38+knSf+GDpHhgtswdcDbYopwHtkIsxok+3LNcsa5Se5Eb65Zr5WZdpd/whq+TH3VQ/iuwn8vuLJT7KQzbhrvBIsxFYuyV2v5+kVCDaekZRvs+nESbbcelMHzyW+Lu/XXCdeYiqI3H4fqwCJuSGOe0kzMB52jUz/P7ull6PtiChNgrT8lndvmeQF60/YAucv1mjaVg3AldJycnWLdxcCX4dxh+6BWejqzntEWh+0opeJhU8RqlpPsTslJR+fQCpra7s7y1/SiJR5FT3/iS8m/O5F0MZsqV6cd+TkXPz7cgYX272e80gYqUV21/+L+b/Sr+t063wujTsmHevgtgLCxvVGkFlLWZyjnW84j+T+Waiufbb12q2n8waUDVB4A67A/imyL7l9EedXqRKcKbSPT1U5kT4FQw4CH7HGje7XBhWISfkajM74oyu6RdTl7qb0XnhW54Pgz0gnNau7vnBH3s+1eWZ34ZeskUXpSU38mPHBbiex94DPQQ5/xyvdsb/hJ+B46Hg8D27wCjzuocBhbHSKx7YTsNj224Evow7F1C3M354SztacJVYFOwbWE7teMlJy5qjv8qF7xOdR2T2Dq0QMh94qlMxva/tUCmTFLsybbrOjg91HYTdMw6j7VlX3nwDxxFJHx7EvEpI6OG0Ll3FQz9BxToPCrJ95Bfp319eXGi/3vEy+IIBK23F8LxsBeWQEBZy/yxl3CJ/HHIxNlUna5pSxWUsy9/CJWRD8BlYYtyHvDc9QTUdy/Bj8C64F6lTnVrwzlfhP1JjP7zEXuDIqGKadsh/xyMdlmXFAvwcSMMu38h7traNF0vveR7ybsEhn3jzqHxcEl4KYy884m7/42vgbY7xSJ8xB7i/D0Mrgbnh9bVPSDm9T+IzwwDCxG5F1pPL9OuLyvB+aA6fgGjrPtTuu7y2RU/Jle9ls/XuWvBkpnbIxf+XatkmWGKvR9jTyZ1nEj8G3BTuDJcE34QHgnTc5Hr3wRYGm56OmL/0iWqC+6W2bipoOhxWZ6NK4to8PiSBbxc2MZrC+T7sV+gpmvSXuT2sn9wVw2vzqza/k+VsF/F/9bm1kyn7SrLIv/HBXAPlVZAWZup3O8K9Ef/p3JNxYvaX9W+B9nAmUSq1LUO+1Xs5WWL7O+TteGqaFQSejj5Z5Z/IuHUSV5EZyDyF6gtN5lxMIUbVsyXHdKMEnHH+L9ycl/jW1vr5NKLPtfNZHcvyLQtXhDKcPqk/MXE3bDTtCR7KFH7Qh+cAqcaisX/GHHjs4+1HfTgYZ80WY9N0P9SZvNuwnmhWAM+D63LfdCDTxPwoBWXbn+xCRxCJPywVSQOGHppDJ0e/org2I/6+AjgA3dVHECBsDPsMObjhkkd/KXFtaRueJB+BNpGx8qbYCC17+G6KfuuYdp3DC8Py+DNCEW/nFSiwKmJ/PtKyJcRWQqh/DnDfcL15xfwPOj8j3q6v3iJalHOAz42/RWG/75YrlglqS8n+h3j0+ZKu7aGfR8J3pnLH+RzYwq/ANXvw5+X04DraNgddjiCbR/Jhm037P0O2ynexkesESGTD/XXnGmhLL404Z0wL59+307+4pl82eCWTOeFZQtUlDs60++D0zQVyzYt/umsbvrQRwD3K8+LnTCWjG/CeGxxTdyok3A+/QMkaOhmOEU+s6bvS9CjjW8V6Ns8y7uLsOwhLg704wv0FSVdQ6L2PSjmEfYnktHNyflyVb7dmHrZ92BZ1n7V9v+thP2JFewj+l8bs+3rxSL/xwXwapVWQC9bRfk7FOiP/i+SrzutqP1V7T+YtKHqA0Ad9gfxSZH9uWhPHOLcsANuLJOg9jyATg07wctwPALcQXx8IrgHcXW4wXW6NH+FvBvheBhYn4jlfhMJhDNAL98emspgXYTUEReOMmW6ySyb6Tu4m1DDeR/O6nAU4XQN2ypS7zhYG1oP5848sGnEOPSw4MUoxaf4sI/lUbAp7I/isLMFccfC81maj0J1YQyKws6hXZSuR56HamWdE1UfAb6TlQ1bwwx3wfYU0Et/2F2NeFOINUhbXpRF3r6PW03hgyiOdp5cwcjRSTl/ILDORfg8iaH/AuKd5IrK9kqbBYHvwhhrYScNHyP/q9Cx26K8B3ZDNPx4OvE6+y1qoc4/J3Y+GRmEY+EDWZ6PU5vCurEnCqONNxCPPavq2Sl01BGeSD2uS+pVh84qOpyjefjI7DkrLpGh72HS9ob5hxuSXsHsxA6Hz8EoZ+ic/SmcA1aBYybOhD70NYHzUGod7Yd+4ONZVdiuhaFhJ2xIhnPBunlmXRGWhefNeJj3rLJ4p4JpBZwQ98A5ob8iOAjqxOooOx/aqKWhLzspPNDdBeeDO8IjYS88isCscBE4EXaDDv0jfAEuBrWVIrX/YTKOSjNriHup+QMsY/8jyJUZ8FXa70XmTyXtV2n/rejUn2XRqf1eAB1/LjD2lXUtAydIFTyIsJPPRSlF2v9pet3xTu2vat/DtnNVuIlt8HKs93/qst/bUrFEJ/tKexlwo74VrgAXhCNwXvhbuDW0fDd4uXeerQWd44ZPwhvgbNBNTDtFcJF1U/Qg+Ws4E/Rh1MOJeu6AwvXpCLgZPAX2wroInAU/AQ/tJVwi337/EjwQujkMG7tgcF+4D/zlsI2Por2jsL02/CA8H+bxGRIcG1+GVS5YeT3dvmck8ya4ALwN/hO+A4pV4aUvxwb/zxhUxBp5GPHdu6h0bzkVWuYR6Hi/EpbBVAhZb+faMPE4xi6GPmDEXnMd8V1hU3CNd1x4EPYc5L65JAz71xL/OGwKU6D4N3AuqH3X1/thL3jGuhwukQn+kfBg6FjzsL8cdC3YFop7oGPybj9qhnXxLOVaPTd8Ht4LL4OusdanRXkPTIuo64hjQV8uDW+HTeBNKP07dM5rw7H/Ivwa/CIU34auo03gDJRulCnei/C7WdzzhXNzmLDdk6Dr3kpQnwwT2r8CekEsgj55O5wZ2ld/g2Xnluub83926P50CfRMVRXTU8CLrPgZ3PnlWLn/rIbYCdA1aosuRfSBa8kt0PFYFuMRPA96/3grfAiWxbEIfgB+B+5dUGg60m6GC8NnoWdPfVgF2yB8XFbAs8qaZQo78WzQXdCOrwtOrouhun/ZRemumYwTw02qF7wAq3N8D0EH0g1Q2R93kQ37/0TGQVwXpkXRP2BZ+3W3fwy2b6xov2z7b8302rYy7OZ/J4Q6roXWuQzK2Exl9uqiNPo/la873q39Vew/mLTjTOJl61mX/bL28nLd7Lvm3Je1xQt/xH9HfBpYFjMgOAK17VrmAdv4VbDXRr8sMidBN7074PfgnDCFa9OW0AN1GYxD6AK4ShnhyVjGy+dHoePUeIvR8cB2mHU8pzyh5qq4/ob+Q0vo3gCZZ7IyDxO+tUSZyUHkkKzO0dZhhntgezTt716hA8Yh6yE59c9LfD+fS/Ocsxhs8drwwCZUM/rU/fYnDTP2dG2+D7qP/Bv67ZmmznsH6l6FZfh6AWrLR6NeZwFEWoyyB57Evv3l400V/Bphy0kfDTvhbDKU8aGh7HlOXV7cQ3+VddR9NfbJS1VUgPQesE9BftmkXyEYdVy3TCEP2ddnhX5DWMUh3fT70mZFHoLzdhGckrwroLIe2ntN0LIPAF461OniMxvshNT+WQj1st9JTz79CBKq2q+z/Uf1ab/Mq2SVB4Be/nfxjw3iSOJloF/LstcFMO3/sjqryPVqfxX7bpaBM4mUqUed9svYy8v0sm973gljgbS8v7C7LlWFB4vzYdTBS8miVZW08q0HJkMPuC97eIix7XwZD+tE1QcAbb8LPgut1yPwbTDgRWNyhIe3uBSEP4cRavM9cLTtV+kTD9KepdL1OXz1OOnfhO3DIE54DeFb1DX6cNjh97H9wcS+l/LTG6brUrTz3cRbTN4e8Mxuf7m++Mt4GXhe9HxsOcNu+AGZMR4mdBPM5Y3wHeVOzeV1+/TRK8od10Hw8kzGM2vZNhepWoBE/2pDe8cXCRSlLUdivMj9iPigjwCfRYcV8E9O/JWgF3w9js47lni3S3iZB4Cvo0P7Hkz8s5ReSO2fgHA3+710mX8w7Ne+7e92CS/Tfjflfu07QLvZJ7v0/wZAWf+nF0A3p16wbWVY9gKY9n8ZvWVlyra/rP10YSvzAFC3/bLtDrmy9u3vLeDzWb/+lHAmWBXzUMDHA+3752crwxatB14vHng7DfEXWMe3a3zd6OcBwDpsCuPQ4f60CtwKeqiZXDEjFZtzyJwhccZo20+qUirqjyg+6Hwc7gzXg46XFq89DyxDlU+Gfxkyf4+9ZeEvYJwRhh1+GdstJm8PfJfqxbj4WMmq7paUOaZHmY0T2ZN6yEb2qkkZ6+bd9o2R2SX0Lvk3GO3xnJvHvCRE/uH5zD6+z8r0ef/xB8ZSWB+pp6EV8U8p3KCqwovjd6A6PKh8GJaFDvbQbtk/wLlgEbpdgL00/Byqw8vEe2FZpPb/TKE5yhZM5NwQj4KD2u+3/dNi+8ga7Hu5HAs74VYybGM3VvV/egE8Gt3TdzLew27UqeoFMO3/0DFIWLX9Zew/mPik1wNAE/ar+KOqfZvmAdNXX+3cCbeHvuz2gmvVp+BD0LL3wBVhi9YDrzcPHEWD/gVnbaBh/T4AWJXNoXPe+fckfAp68GnReqD1QOuB1AOL8/FDeNSQeQj25oYtJm8P+IN0PHTfT9wfdrphPJlxL3T/8SzdDd5TJ0JlpXtXN7jX3gZDPkL/2lRd3XAAmSF/A3EfBPLwAT1kdsxn9vF9UKJviSrl10E4HGllvUCX/WsAf227HNqQZ+C2sCrUYYerw8uOr83TwRRRv/FJonXUiROhZb38bQSrIrV/N4V3gmUuINp5F7wF1mW/SvsdhNvUbH8S+nx9K2p/rweAfv2fXgD15bthEfRxN/Z7AUz7v5v+Xnn9tr+XfS+4gbOIdKpHU/Y72cun92vftvmq6sUhdNqXvgg7nxeCrgdeVBaGzvkfQedKyJ9MfD7YovXA69EDc9Oo9zfUsEEeAKyS9XoBxlx0HrdoPdB6oPVA64HWA1U84I+AsY9cRHyWDoXHkX5jIutfmZTB1giFfh+s/auAIniWvAyGrHef65Nv6+kPr0XYj8Qo54PGBkVCpPljt/U+Dc4BB8UiKLgQngBL/wVAGF2cSNpgHwL8sxlfVTwgBFS8FPwoPAdGQ/9O/G2wX+jwM2Hou4/4t6HO89AfDwBvJb46/Bq8HYb8CPGlYb/I278fRT+A74ELQjvbts8O/ecFX4DXwqbsd2r/Spn9/QnvbND+A+j+PvRybvung06CaG8+HCFvEP/nL4DXoc/xtwacE/rYkbeZfg96Acz3f6q7THyE+g3S/l72faTzIuwlu6g+I6Q3ab/IZpo2qH2q//L8+ghhurCnNvLxl5D9E1wbtmg90HqgPw+4t8Xccs+rCh/pHoGho30AqOrBVr71QOuB1gOtB7wI++NP7CX+IPhBOA+cHnpP+CKM+6By3pU8G5fF8QiG/ueJe895J/QO7H3Du2X8ValynrmXh2+GPhpE2X8Q3wV677XcrvAaGPmG34GvGXjB3Qnq9LQRxv8NdcoLubyb+f449IJWB96Lkr/CvP1O35ciu1UdhjMdrf3R87/jb7QvgG3/j17/xzSegsjb4VfgKfBK6OOTDwO+Cv8KutguClu0Hmg9MLgHfogKH7RXrajqk8jfDicmPJV4i9YDrQdaD7QeaD1Q1QMrUuBh2OnOl6b7WLBkRQPTI392Sf0PIucPvoENiKSPAGld8vHDkJ06Co526KG6LLyIrQ7fDe2MxeAsUNgxOv1ieBYcgTa8brwJhWXse2hpAq390fO/Y3VluCF8C1wYOv58fPIRaiK8EPrrr4fPJtD2/+j1fxP92epsPdB6oPVA64HWA60HWg+0Hpi8PbAU1TsW+hfPnXAcGZ+CXtKrYhoKHAg/DTtd0k8nbzd4F0yxHB+HQ+8oRbiNxM/C3xZljlZalQeA0apja7f1QOuB1gOtB1oPtB5oPdB6oPVA64HWA60H/jc94J11I7gJ9EFgDLwf+mf2Xv796/NBsSAKtoD+0D0r9Nf966F/xdbrx2V/JF8XLgRfhPfCEXgB9LtF64HWA60HWg+0Hmg90Hqg9UDrgdYDrQdaD7QeaD3QemC4Hqjr3+gPt9attdYDk4cH/HdDS0P/acDc0JfCZ2CL1gOtB1oPNOmBmVH+XJMGuugeTdtdqtVm/Y95wPOr/0O5j/+PtbttbuuB0fbAClTgq3B7uCmcF14FX4JNY38M+L/99ERiaBHipvvPf/0nwaOBOTH6Zeg94J5RqMBM2PSfL2h/0ijYb022Hvif8IB/gvRr6ERL/0c+XPwuhpvD1zN8+PB/E6RF64HWA8P1wMaY83/80nXHP338IBwWRtP2sNrY2nlteMD//Z8R6P9i9ydgi9YDrQeG44FtMfMC9KLt/+bbTdD96AjYNPyTfG356CBcB74J/eHNf5e/OBw2psWg/77/MfgwrPo/mkuRgeBZ/KPQS793krVgiyF5YArsHAb/Cofd8UNqYmsm84D/wyA/gemlv1P8JOS8KL8esACN2BdeDl1obbOPHS64x8D0fxGVzxatB1oPNOAB/82jF550zfHfFfprTNMYTdtNt63V358HZqPYD6EH0GHCQ7/nrXQefGmYFWhttR74H/bAP2n71dDLuPAO9D3ofFwONomxKNfO++BHYFx6v058ZjhsvAeDt0D3ZddC/xJ4mFgTY/aF5/FfwvGwcSyKhXPgUXDYiz8mJys48GIjOniyqllbmTo94GX+DBh9bXgx/Bz8APwMPBum+X/m20eD1yr8E8uvwqdh2q6iuA8jr+W2Uv0WrQcmaw98itoVzb1vDKHWo2l7CM1rTVT0gOe+P0LH4wEVyw4i7iH/fFg0D/zz1xatB1oPNOcBH9+cex/OmZgjS98+l173ZzwA+L/ybz1OhAvVbaSEviWQifvAucSXLVGmThHbfALUB1fAof34vDzGfHXRsFwGDgIvGf7biWHBK4pcAABAAElEQVRj9hoMbomO8MO/iC9Qg85WxeTngRmokg9e0dcPEfflrwhbk/goDNkDi4ReA2k+ePwhaYe/NJ4Obc+ucE8YC2C09UjSWtTvgflQuRwc9uty/S15bWtcmuofAy+Eh0L7ZZjYAWMx19JwGBef0bQ9TB+3tsp5wH0gxqC/Pm1WrthAUh7+/Su0sJsPrccuA1loC7ceaD3QzQNxAX9vgZDzcYeC9DqTwv5NKF2nTsUldc2MnGuffwl7J9wKDhPTYeyL8En4APwY9DF2KFgBK/HyYmf7i+egxv2V1IX7V3A8bBrjMPBL6IXm3AGMeRh8HOoHB8OasMXrzwNOuLOg/SwnwvGwG95JphNU+efhUvC1BOf0aTDa7IVnyQ4NWIX0exLZzTvItcnlPOCDaGBdIn+H0Q+GF0EfYVsM1wOO/3/DtC+u53uaIVZjDLb+kavD7XzX8ZjdqxmjabtX3f4X8j1wXwMdh6vDp+D74WjAy75ntnQuODcG/TGoV1viLw60e0Ji/3ziHsajPp0e5xFpDIug2cP4+nCKxqy84Q3uD9vAfeF+JTg57MdTU88d4EqwF1ZG4BC4RC/BhvMXRf9n4OIN2ymr3jH1Ufhz6L/Bb3KMob4j4gLuepSH82+HfGLN393s12zqv9R9iBTvv669+0F/JBsmNsXYXdA7xfehvhBrwRlfjjX4Hw+d6eXfg6ivIYMiLtEOHi/S34SzDqq0oLx1/QbURmwUxvvBtBRKD+bb9aOkLTPZe8Bf/v8EY7xMIl52Q/h6Um5/4q8l7ENlo82/J+7hvxsWI/NpaBkvKC0G98D7UOH/0I4+NXwki/v9GBz2n5xhcqiYgLWfwu/CXgdH5+R34I/hFrAJHITSmBNpuGUTxrronIO8/eCvs9DvYWE0bRe1cS4SvRDVDc86HrKFbfZCMr8fBfBQ7vonHHu7vxyr/z8Lo/IhOBHemXEWwmFjaQz+G6ZzIOI3k97E2S3aOJLZdZ5Pl8W1fQL0wnZjlrY14TCxGsa8FIQffJDoNF4GrddpiZ2w1yt8y6BGByzvOm4dPSP0Gh9XZbL+uhnziujQ8QcsWudb4JRDt/5qg65Bf4ZpPx/H92jUq9sF3PrtAJtEN/tN2p0J5bbP+bdQk4Y66PaCHz9avzGTeQfhpdDH2DWytEYCDTohYwCeQdzLUR14AiWhN0Jt7Qzr2NydJB+Bk2Doj7DfB4BvJro8oLZ4fXrAQ3aMlX8SX6ZCMxdNyl5Yodxoi85JBWJO3k687CHzMGTDV7FAlWmLh7WjoPPog7DXAQGRvjE1Jf2F5qvwCLgjHCbGY2xv+Fv4V+iltQhuMI9C/XkytE+E4+8maLp/CjsavwK4nr4H7gZXhU1gT5TGWDL0xdt+K4KH7ydhKm//1o0foTC1EfFt6zaU0zct3/q8DNwvpykjWEJmTBeZfvO6qOya5WXvEuihPNajDxP34PMLWDeco/bvXnAEenFZDOahr++G98DNoeP0eFg31kbhdTDWBOvmY8D1cHs4LNjvI9CzlNT/1sVzVKQdTrwpTI/ipTPlxrUtf5WlOU4Wz+LDCpbCkH0RdYnQvdO8OuGjb+h/jvi18OoePI58/TJaSNfyC0pUYgdkoo22rfFfNjvU6cCkHl60RgtvwvD/Z+8swPYorr/9QYI7BA/kxYNrkOJanJdCkRIguLdA8UKBYoEiKU6xBNcixTUQXFNcAgkQgkNwC/y/+5fsgcmwu8/u86y8yTvnuu7s7Mg5M2dnx/ZJor5kPnGvZcxzjdo5bVSX9piMqlufmPgio9LsF2nH11WXXauHa1/rwytB/ta8sDqUJnOj+V2wjqcTEC1KipKvUCTdd8PFYJOK4vSVvZXGrUz5Z8DqrqsW37KlcDMHAGtTzur4AGFtKoKMnx6wzdYwmpd3MteiXf1L/extyCOTk7kN6pi498WuvS8bEM4qfcho5TbNWoh8WkBbOV01HvwNukCRsg3KtEh1bf3IfdF24uo8EZE6NJQ9176+pMXZ1wGr8j0K/viyWpSm9LI24KiOlamIfRjcNvwrNmfzkWqvv6GXvScTVN5FvFsfhfXezZCQv9noZSn4E7i2PuW+aDtWP+m9GmRTG1BtrNSP4kR96BhQfxoFA0GLhGZkPQq9AmrnW9AOJmsReBGUNhy2AJNVCTwHShsBvaEoUb+TTunW+kOLYvlE94dCkdIdZbuAO1bcy30fmA5cWZebs0D1EFoXHALyU5EyG8oOhgfBbH1AWOOkfFGXfIxh1UeHlFWK3oMbwXzRr0rjjq1uhIdE9dCzPxDuiO5Vt5Gg96ko+SeKrM2trIuLqk8jPRuRwcZMrYFmbVQgSj+Vq7XzBsJaS1Uti2LQ6nBm1cYje2tyVR+yepxPeEEYGsWpz20GVcq0GFN92mOMqj7bxcQXGZVmv0g7vq667Fo9zP7tRHwDH8JOUOq7MTsGrLPpod8ERW7+UffL18ardIMsB4+D7BnXE54LssqcZLwarLyuWpzYoNk/StNCMY9oUfYeSJ8eQNYBjay1ihbVj4EWNVqwqx1lyEIofQnug40dA+qkWri9AIfBZGCiwfVz+KpkPkH/U3AETAVZpCeZ9oLps2SOyWMbGfWVLLIEme4BDaTqY6PgGpgFqpKbMSTb2tyo32QVbQZUTmydtRD59E6eBneDBjbTcQvhIg5AuqBHE6fp1TPRoqIfrANly9QYGARm/3XCx8DOMA/4ovdGebVwWspPjO4/4qo8VU/+2txYO9zrklG9irh0S7AxPEH5Cwn5503I30q0/P08fAE6eNAXubLkfhS7Plb4hARjR8bk1eFRXtH4rTHHtfsD9/OB/Kmwm/Yj99qA9gDbkFt6Wv8le25ZgRJmQ/6XHbWxKxQpe6NM+r8Ha4vaPRL+ACaa014GzVuWT1eNL+ojE0CRojlAdVB/PwVka0+oUz7GuOpxXYWV0PPWetB8rrF1ygrtmymtg91x/fAoQf3iRLD66T04IEpr5dKFwnYIpjmko4vWMvZuaO21QI4Kq623g/nwpBxli8yq91h1UP2L3vc0qmcfMth4qzHZfdc15mrNrLppvFkaqpJpMSS77TEGNydu+pj4IqPS7Bdpx9dVl12rh9lXXzgdyvyl7GibM/CnNnP2Et5MuIyXwAYJOwCQcU2eO4A2rGZfm/XjIW2wn5z0o8HdSGiS0sujQcWkPwHplc48ci6ZrT4b5ilYc97psK+2Wt3l1xVLqNPOjg3Z0iGMnon6kruw1AS2KEjeAKtXVdeh2JxHxkuUHui29jyTwc7K5LF3wcrZdRhpM2bQUUQWm/TuzqnsGPJbfVfNWday6+DOXdz1t4QWru47qzFsphZ05S2qxeBdYH7RwrDRhmVv8mjReATEiQ4UbCOkTVGVcgnGrC3utXfBlXgwxs6FCTb+EZP3NeLc8T6haIeN1jN2/WthbQDiROOL5XGv88dlTok7KEHP34n/c0Ka5uRdE9JOJb5V0Tw7EjR/6b1w2/djFD+ca5GHUJOg7zn4FD4A6U8aNzYiTXXSYYCuJ0AZ0obS62Au0PpoP1gN6pSPMa42q15ViMbOa8H6wEOEp6zCcIwNdyy8kfQJvTx/4t5dh17AverfrKxLQWv3Uc0qqajcrNh5B1RfvaNrQF7RBudFsDbvmFdBAfkPduxvVoC+LCrUR85x7H5BeL2YguoPtqZ+l3D3mDxlRNlGtL0M5Rl01mW/LrvmErO/k0WUeZ0C5Y+BvXy3EZ64JIO26bkqRv/UxJ0MdhKm+oyA7UCToCtbcvM2WJ018PQDbX596U+E8mlRkVUWI6O9cBdnLdSB8mmBdCWYfz4k3K3g+mnw0sLkLTA750c21uJ6vxM/jPBUoIFrW+hTMvui/ymwemlyKatPo3r0Lx3M1imKSJFJSVO/Vv4vYXtYBP4G34LitfCpQu7EiOzJdlbRZusNUDkteiaDVuR0CkuX2LQFRes7es4j7I8ZLajOVFSDtbXjoEwlxmTSBiRJDiFBOuVvf9GZVKaoeLc91i5tynoWZSDS04PrEyAb0n85JC309Q5fBvarmccJzw+tiHT+Fe4HvXerQpqoj2qOFLukZcyYpkNTmxflA0OHc3FyH5GWx67yR97xfdcYPdK3F2jONd3uVX7aIiEtzxiCiljZjNhvwLXphzWXLRRburlItUf9bnNYCnQIsAPEifqpDgvUP7XeeB80D7Yis1N4zkiB5shtIGnsWpY0jb+SFWHx0aFq/vgYM3oW11VgTm3UGtGe/aOE5Zs65DCMWj2eIaz1cpwsQ+RwsLw3E7ZnFZc/LU5joOmZNy1jzWkau55y6rpnC/WZm7LWx7QHWLUFXc0U1TuocVR+17OrQi7AiD1n7We070iSP5NgeZ8lnNQPk8o3E28b0fZmChdQpi77ddk1l1VmX5PXbWAd6x7C2qCUJbbQ0eCeJFrQ3QpWJ10fgeVBX8HuBzftdu57QpL0J0H58xwADIjKjOSad2FFkQ4jf6Em5qvjS6qVOqsmaNnRAOouzo6N4pV2OFQtfTFo7ZcvypA2lL4PspNlg7RBlFf5DwRXbMMnPfJr2aIJ3H1eWey5fersLAUy5NHCSv7QYqJZGURB6RgGaZtqkksRbdhk/3+QtIDPY3gmMmv8kc7t8xQsKK/mBi32ZV/ocKqVBR7FU2U6UkUWUb/Vl6ciRIs9a6OuWnxqnomT/Yl08yp8QFzGnHFHkd/Vq/d/qwQdaxI/yst/VkLetOgpSRzi6XmDe407k8LLXtpb3GsunAie89Le5X4WKEq02Xsd5JOvo+tnXLU2KFq0SWtzlKYdtM1MPvnNJC2v5Wl0vZIMes8Xh3tB6xS9+77MQYTm16tgJfge/g1VyccY0vPQmFC2nIABex8+IlzFXBjXpj8QaZvCEYS7x2Vy4jQmPQGqu8aRaSCvqH9Zn9cBZ0cVzXHXgz2ncwqo6MroUL+Wzk+g6sOPByPbP3KdEcqWuzCgtt4DWexpvWX+vpFwEeMPahJF753stSfmKDehLvt12TVvVmb/fCxah9Imu+xTpSwHAOaEdQm85NTP6mlXLVDWt8wp1/6kqYwm1iyixcc3oDLHZSnQgfNokH4F1Bb5sizphWJ7Lkc4RrS4ejNK08aoanHtDy7BuBYEb4C1/awMNtaK8quP9fDyrxKlSd9CXlpHuF2OSug9Uv3eAy2Ii5BtUGI+nL0JhRowbaF2WBPlWy0iP1j992lVWVT+0kinxmW9x3XJIhjWOJtlgVJXHWX397B6zgosQH57bu5VhwJxoj7v5lNYG9NWF2J6vjvA1XAZrAhponGiP9wAvaHZ/qENy0lwExwDM4DJTAROAKXp6j5/HQQcG6WdyHUWKFLOQJl8q02nNv1PR/fPcm22rRQtVX6P9tVzWpic/DoQ1lzwNajN58Dc4MucRAwA5VFelZG9qaEK0bOQ7esqMKb+9HJkTzb7VWDTN7EkEfZMdF3az5BwPxnxms+0mW1GtqOQ2iyKmkuaqUejMn2jOqqe90HXRgUypvchn7Vfa1fN7VXJLhgy21X4fhLsqV9lHdPkYzs0UD1PhjJFvped9jKNpOiuy35dds0Vldg/EGvW2V8kPJ1ZL/Ga5wBA1VCH3xts8lF9PwH9HCbrgNOfvCqnjUsW0cBtflksS4EOnueaqD1fllhPbbRHRXYu8uxowSB/fuHFV3Vblv3ZaMDrYH1lMGEt6LJITzLp8MCXvxIhfT9AVQs7vw5J99qY6yuI1W+VpIxNxC8c6ZXuNZoov5RTfqUmyrdapJdjf9lWlVFeh5/yxbegvjKuiBavC9VU2Z2x+zOcDVNmrMMy5JOffe5OKG/zl5tf80qrBwAJ5n6JzrpA/KVAgYE6bOvL54+wdtQOHbANgv9G93GXZjbgcXqajWum/w3AmNuX3LA7jqn96ttuuoUfa7bCOcvZGkzzaRXiHwKcWoXRyIZsvwPysfyuXwJUJbbBU/+fqSqjOe3sQH7rf68Tnj5n+UbZ+zr67yGcda3fSG+jdG28NJ6rbU82ylxTuuroHo5p3ClLKtmIplS+Lvt12TVXlG5fE+tPoI7+HswJVYgtoK7KaUw/pfo76CtF3oOK/pRRO/ViZ5HeZLLBrXuDAtqktUPeOjVQW2iyviCqPe8WqnVsZd0iG7LjT9QDozT1szrkXoyqXsMKNK4vZ6+C9ROFFdeKzENhHZJIZ3/oSDIpldGEaO3dreDKacFluvU+5ZXlKWDll8hbuID82vSbfW0qWxEN/sNB+g5uRVENZfthU+PsodClYvtaCNkzGEp4zQz2tbkd7JSz8kn9+/SYvFdGdvTcihYdRuvrtzYhQ6AdqpI6bWu8aTT3+n7Q85ef8hwA+TpauW+m/6mdS8E7oK/M6n86/JgPfJE/DgLlsbx7Era1Rxn9D/W/SNUHADKsecHd7Jz8S23KC+iZ6BnYWKCxrCrRGsLW5bdVZTSnndXIrw8U8s9IWBCKFo3L/wF7BucWbSBF3/WO3TLalmI6c5LWivY+6lmslrlkvowaU/QMqpx33BrWZb8uu9b2Uu3rtO59sJdLJ459K2AXbDR7AEDRpqU/JdVWLUyzyKZkMt8s16CATsOVd2CDfHUl/w7DWhSpjvolQFlyOIrNZxs5RhYlrJNspd3kxFcV1ABu9m8syKi/KHkCvTO2qFsHSS+A/PQJtHqYgIpC5Qq02fM9s1DNY5Qt7+hv9M7FmZ/LKb9JXIaS42Zz7G/Zoq1zIl3/49q1RV1VF+8X1V19RQdGi8RUQIs7LbKLZnd0Wh+163nETQVp0oPEO0CbqmGwByTJJCScC5/CSDgNJgOJNoD6Qq2+kCRqe1ZRn/4OrC26/gA9oWyp03azbcu6Ae9o/W8/Gqxn+yc4LAqvxdUX1VsHBa+B/orAyzAYTLL0P8vbzNU2HFrzVCmzYExttffgxJKNX+7Y6l+yLV+9HfBYf/DTi77XId8pEHfgFGdL+bQ+Uf1GwbpQlkyO4qfBnrvekywyL5luBrVL70xe2ZQCZvP4vIUrzK9n931UVz2TrM8wTxWnjfS35ylUYN667Ndl11xXqv0DoodqnbzK67hwAKABxHxysD2RmGsP4rQgU977YtLrjNIvJnqDDdY6VV6uhApNiU5NWpoM5IdXoAto4F0H3gbz5eqEq5QVMDYUzP5KBRifGR0vOTofJyxftyLaVNwLqqcOazaGjiR/ozLmQ9WzawmV00QrGxofJm5S//BIx4VNlm+1mC1StfhoVrS5s3dplWaVZCinn6xPWgJnoNP6iq5aoKj/WJ+RXR2YuXnKDr+FPY1FZcvOGFBbPoM+0Krsg4I43xzXquIM5cu0rbmhjL63e4y/4g6AOlr/a6Pe64OJDs00h8bJJkR2jxI077RFYV2K7n+O6tHBug4AZNw/BDjBr1xB93YAo/fuQWh2Lmq2Oi9SULa/BG2Ay5ZnMCB7mnf/0MCYPhzq8MnGpD83yF9E8mwosXlda9gNGijdkPTPQXXUWmoGyCt65jrglQ7NHRqvOqpsT8XsebxKeLqCK1rqRjRDXeuyX5ddc0mp9rfBinUafaV5LAP+pPlthjKm9z3HXkc7ANiIuvUG/yV/OqqzBp+kQeTSKI98uTe4sgQ3WpD4L6Q2Jzo00CK/TOz56qqB075qnUT4XXi/AD5ChwZZ15a+okm3Fv5uvDYBVYkG8EfAtf/XAozPhA6boKVb70Srm/+u6LgBrK5V+gmzDUWn4faMhxDWIqBo0ST/BcgH57ag/JhIh/qeFtFVixZEaoP8tW6Txs+JdNzZZPksxbqRyRZV1u/Kvmo8XQymAnvWZds0/RpnjwZ/jCeqUNkZbWZT19ugewsWdvD0me4DW9CZtWhZtjvCAVBd/S+r75vNV3T/8+tR5wGA6uIfAhzrV7DF+3bKu3Nd0rqvRTOJxXuRYu94/8RcxSb8AXW2VtM6ca8E9RMRfz9Y/TRPVSVLYsj2DXp3F00w/Bfi1QbVMa0tCcXHitY6xNq62lgpHe+mr1PXewh3LbCKpW5EM9SzLvt12TWXlGLfOoY2RyZHELjDblKu2gj8x0nXgLAFvO3EJQUHkqDBWwcBU0NHkpujyizDdV+nYvrKcj3MDrfClvAWSLTBPBp66wYZAuePDo35YwEuD4NOcNeEP4LJSgTku6pEm1QtGHWaLVFdtOEqS9RmYSLfHAA3WUQFV/UxPU/JO6CJQZvsVkSb//tgoUjJU1zXgc+j+2YuXSh0ObRHhTWpqt91FFmcilwKE4Am3o3hUyhSuqFM75k2hl9CK4u6Uym/C8wM2nytAep/Vcl5GNJBW0+4BjaDuyGPaJyVyCdlica0WctSnqB3PuKXhOdgflDfUr8qUn6PMncMl+7XYFt4QjeRrM11Obsp8Lq0p2s97l+Av8KFXlqW26vJdBjM62QeQXiAc+8HlyLiA3jXT8h5X5btKaiH3o8qRf19RdC7qEV96H84YRyU96nz6nA/qA/9DbRh/zu0Kouh4DLQmDQSNoRPoErZ3jGmebcK+Q9GNG5qvpkezgStcbRmGgUmpxBYLbq5h+s+UbiKy7MY2QZU16ngv6DxW+OcROuof4EdXnxKWGO+1gDNivrCblFh6RoYhTvi5VAqpTFNa4c14XTYE4IED4zlga7R3VCug2EJUEdpdACgF+xokDwPc8GUoI1lo4FAg8mqILkRthsd6jh/fEFVpoY/gwYY2ygrfAPopdJg8zLcCpOANpe2gP6O8FbwPUgmhyuiq+6f0x+OrERYyKdliurzOrziGdEAIaqy/wi2NElXKfpSsRS0wb3wLbQiM1L4Plg4UvI013VAC4VmRQuNS0CHaJIvQfU8WTclyYvovTijbh143AxasOv5/QlegiJFGzG9KzoEkOhdPHd0qPk/vomKzsFVY9ze0B9M/klgM5jQIgq+Thvp00LlTjgeDo/iGl3k65mjTJ8nZFZfvAa+gs3Bxh2Cv8gshHaGO+CpX2J/DfyP4Pww369RhYUORdMqnrZB3Gtxq3lHooW8KFq6Owr/j/DZcBBYn1CyxvpbYGLdVCDTYOMCWAe2AtUrq6jeq8KBoHn0JTgJPoQk0binMWQ/uDgpU4b4smxrnFPfWxw0BhYpWQ+AQv8r0uvV6tKz0/rlVZgSjoAR0Mq8MTvl/wsaf0fBH+EVqFK0Nt8yMjic6/0VGh+IreVB831P2BMWBvnhI9AG2Nb58ovi5acq5SaMHQz/hB6gvcTqMDlcCRpfJUNhXdDBbyvyMIWlay7QPKt1hNZnHVH+j0r1Bs2zGv/3AM0VZ0KQ4IFYD2xNrDqO0AuTJoeQaHk3IrxXdP8T1xUgTfSiWtmFCH8V3V+VVqjgtP6Rze+4Lubp3jVKUx0/gUWd9CkI3wVWf/+qwXEtJ78Gcbe9Giwnc9JDcNzzwIxU+XmwZ/804ekKaIYmFdNZ5TVL1XXIpQnQ6nVglkJN5NFG1GyUdX3Lq9cbFdh026KJOKvoUE4LK5XXmBsnOxBp+t2xx817TZRnsBtZUbhfZFt1/B4OgrIOW1A9luzMnewOB1sQjpWBG9XlbNA7/ULBvIs+ezbu9V7i54AqxHwg+7dB9yqMRjbqtK0quPZ1aKkFsDYIVYnZH47B8bH/fUy71K+uq8qhMXYmIO4CsPfrOcLdYvJljdIhgnSYvt2zFiw4n9bgVofjCtadVZ0djlo93qHg8fADKE5f3OeGOuVCjFv9tEbRu2b3jxCeCYqSf6DIdGsNJP+ov6RBcm2igyybg34kvFYBNZkWHfJBewG6mlFRl/267JqPSrHf1bRz1QZcG/kV4XLYAB4DX7Yg4tgoUieEOimVaILbGBSnjqbFvC/7EbFJFCkbL/kZargf4dn8N/dLgE7NpocHQSec98DXoIF5O9geFgbJUJAftMAYCRINDjqJXF83iA4TNoKOemqoOgZJ98CMJN8Hi0TZnuWqvv5ZdN/K5SEKXw9VLtCHZKzweeT7XZT3Uq7/zFgub7ZtKbAhaFNWhmji0gGeK2rXclCWTdeW7D/hRjQI/0T6i7AY9IaTYRS4ooNbExun7F7XBWDTKOL16FrHRfOBnq822lWJ/K0xWPNa0juqjeGeUIbsjNLzHcU6cNZBzumgulUt62FQhxz7w0UVG6/TthbBO4L/7pftgtD/yvWwNv+am3aKzGisXBM+ju6buZxKoUWjgv24ntuMkgLK2JgtVf0L0NeMii8opDX9KbAvaG1yKEi0jlXam7qpUTS2Lw5Lg61RVJ0BsBt8r5uC5GL0HAZd4KQILqkylFTV6/3UXOUkatxTPxoEE8PVMDd8DkGCB37jgXmI+RQ0cenFuQBWBb34vUCDrRZMSn8SpgKTqQkMBqVpoXMcLAwzwwpwCShNvALTgOQrUJwOIKqS/hiyesbZ1At+aZRH+bQQ/xfoQCCL6JBAA6PKCk1IS0KQcdcD+qrwHNgzfYZw1v4w7rb61/9nWu1+DCYZlxszDtZ9F+psfU5j0hROG/Zz0pRHY7MOaE3mI6BDViuvw6qqRYvHvqAFSNXizk9V25Y9HQCY758ivKAiE0SHx5o/i+ZtdFod3OvtxGtel9Rpe0wNyvlzJ9ReAdOVo76h1nGp/zVsTEwGrWvUp66LSSs7Spv/c8D6tMa5mQowOjDSeQvXCQvQ16yKy6N63NOsgoLL7YE+HQjI31rfbwQdRfR+/we0Th8Jeu/Lkr+h2PZA1vfSrj+QX/NwnbIpxr+EZ6HVeXhadKi97VCH1GW/Lrvm48rsa7NuhwBJHXsgeWawmjnXGQnrC1dSOcVr8z8HmHxFQPEd6QBAddMEcyK4L7teIh2CrA862DDpSmAR0GmkNklu+zUxKS3IuOuBblT9f2DPtbNs/jXJa1JVu9+BWSBItR7ogrnHwfreh4S12NFkbnFaCGsRbvfKL0Y5cZcRDlKtB3QAoGfwD9AckSSa3O09s2dYxfUa7GrxXJdtzbFlSt0b8DLblkV31v6XRVdcno+JVD/V2FO1nIVBe0e0pixqbpocXSvDpFCnaKOmL8eqT0cRfbRbCeLW/h2hjvJVFc+tDTtrwFoZmIM8HUH04aaI8bayjWiC0+qyX5ddc0Mp9uMWJY9icQk4DdrBPQV9n/tT4RTQxtiXj4jQ4Pl3+Au4X6u+4/4C0AmaThJNfowC31pEBdcsNjW5HAwDQZPNXDAl7BrB5f9Jj0743HYqXqK0fiBfqO1Bxk0PaLK7FxaLqj+Yqwb+T6P78fWyOA27AvT+693UWKD3P0i1HvgJc/L9HaA+qENWneibaPO/D0wGU8PasCyYaBzTF979LSJcK/PAUCxpEf9EA4sjSdeYorxFLNJcc0tzo/7jyjfcHASa1yR12h5Tg3L+1IF9Z5as/W9c89EZVHjPqNKvcV0dipqb9G4MinTXedG68pE6KxBj+3PiHoqJ7yhRenZVyDCMiHFJvh+XKhvq2jE8MBPV2AC2Av0yYGLIKjp9Xxd6w+9Bi9M42ZzIAbBQXGJJcQug90L4U0b9k5JvN3C/AmthHceHxOuApDsEGbc9oM2/+8yf5b4z/Oxfh13vgfXvLQkHqdcDGnv7wMVwFZwAS4Er2jxuAjoU0OHNMbAwBOm8HtiZptt7rOtjMH9F7qjTdkVN7NRmdLClPnVshV7oG9mU3bdg9gptB1PBA53dA9PiAL17/qFyVX6py35dds2vpdjXgjFIPg+0kV2HIVpEaTOon+h+Au+DFleDQS9IkHHbA7NS/Tth0agZ2vyvBeP7l/9JaOOTYO3+jPB9UIS8iBJtSkcVoSzoCB4IHmjoAW3Czwf9Ik3v3vGgX5VUIXXarqJ9nd3G5DhAB4xPQ9wvQsvwz5oovRU0T+kruQ6nb4QgwQPBA+V7QBtRrQn1K8Q63ru67Ndl155o3fatHuEaPNApPPAyrdRBjtACpzN8+aeZo/9lX2t3GddeMhIkeCB4oBIPaBOugzf/1yJVGK/TdhXtCzbq8cA6mLV/O+p7wjoUCBI8EDxQvge0EdW6sL18U7EW6rJfl11zQin2u5r2cA0eCB4YywM9oztt/vX3qnXq2RnkHhp5EvQoobFD0Cl/BgkeCB6oxgP69c5lUMe/Q1On7Wq8G6zU4YG7MLoe6Bd6+rdPToRlIEjwQPBAuR7Qv7PwOrxTrplE7ZrHdPj3SWKOchK+Ra3+erd+6V2H1G2/jjYHm8EDtXngv1j+D0xTWw2C4eCB4IHggeCB4IHggTgP6NdkV0FdXyPj6hTiggeCB8r1wMTlqg/agweCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHqvGA/vetHUG/yH0VHoR9odHhRxfy7A4PwBvwCOwP+jdTShf9N3kHwxKlW4o3ULd9/T2NI6Gun6PV3f7Obj++V4bY4IHggeCB4IHggeCB4IHggeCB4IHggWQP6K/m3whx/wbXQ8RPkVB0IuJvSyj3cFy5ov4NAJ1W7ATHwFSg/x6mSqnbvvy4BxwFeghF/avpqMokdbe/M9hXGy8D/deYafI2iX+H4WmZmkgL9oP/s/Q//S8Vh4H+vYUiJfS/zt3/1Jfy9IEdi+x8OW2XMf52pQ5aXDUa/18gzyEQxn+cUKDk6XtlPP/Obl9fFq+ERv1/GHkOhzL6f3/0NrL/Lnn0Ea5o+6gMEjxQiQcOwsomCZZWJL4f7BKTrvdO/zZKnPyOyFNht7jEVuJWpfBg+BkuhTaoUuq2r3+R9iXQf62k/25pdqhS6m5/Z7GvX3f8Xwr6h0mOAP2jRGVIsB/8n9b/fqTTnQ5l/W8Vof917v6nMa3OPlCn7Sxt/4hM+gigjVIZ0tHbH+a/zj3/f0mnPxQmLaPzo7NR//+GPEdD0tfRkqoV1HZCD+hn+Oprb4L+FxJ9bPkb6JC4CNHhVdpaTzb1a2tf9A8UppXTP6Co/7q1EJkDLfoHWGRQ/7L3CiDRArSsSXC0geiPuu3PTT1uBLVff89iaZDMDPoVQNlSd/s7m/2kCUgHXwNgtpIf+LhgX4OSFgFLlOCLLO3vjPY1/twOC0JnbL/7/oX2l/f+6ZVOewcvIb3Mw+86bae1/QcS9WVF9StTOmr79f6V/ezl19D++MV93f7/iWdzEcyqh1SiJD1/zX9XgNajQTqPB7TeORluAvW/jaEK0Sb/TlC/87mBuAmgFdEHRF9v3P0inhH98j4unx/X0yuX+1b/mIBOO74G/bcIu4J+HqUKHAc6idNJeFlSt32doBwDOk0ZAduBHroGqFPge9gdypK6299Z7cdNQI/ykJct60F7ejuyfb3/+kmSTiA1LqwORUta+zur/Vdw8gbgtl+/BFBc0RL8/9sJ1t5/1//ja/9Xf4rrAzr8rmIMrNN2UttvIWF+JVYgHbH9VT17uTe0/7fjT93+H8RzsQ9fZb8Ccc9ff9VYP20O0rk8sC3N1cGrv7nVB+myPz7vHGPXrceWpLci2ktqD+3qjAv7h+1qt/akcXnduJnI07To7yW8DVpk9gO9lFr87ADvwbdwPJT1Bbxu+3q4aqcc3Rf0xUmO14HHx6Cfwf0dyuqEdbe/M9t3J6ARPOPeoJe1KkmyvwIV0CnoUiVXJMn+Kth9Fn6GS6ENypBg/9fB/XMcvD9onDX/a5DXLwEWgzIk+P9X/7vvv/l/fO//6lNuH3iX+yrHwDpt+21/mYh1FVmhdKT2V/3s5ebQ/l/Hn7r9rz3AVhX2ff/5aw3eB6pcf6kOQer3gL58a//pbmrd8BElV1FrbdeeH9YauFW5BgW+Xvf+yQQD1zUo97BfLu/fWfgPCh6E34MmQZ2+nQ46Bbwa/goanMoQ/d2eOu1rs38l3A17whuwBvQDdcpL4CD4EMqQutvf2e3bM9ULvhd8aREVX83+dNhVf9Sh1FOgTUkVYva1INOJ6xbwDKwIj0LZ0pHtP07j9Ty0MBlakiM0Ae0OE8FlIP9rLNoI9EVyLdDPMd+DMiTN/1W0P9gfM/7EvX9V+F99Sn37pKhzbRNd/Yv6ZhmSxfb9GC5rHSL7F0HPCC5jyf9xdz0MHyu2uJuO0P5Gz75s/wf7Y/pT0rtXtv9Pxvyk0GdMNX7z5z3ElNn/+6JfH+E018bJICLLev/j7HXGOP1V711Aez99jR8I2gMpXKbsivKuKQa0Nj8mJb3VpMkbKNA+sVU5GAWrQ7cYRd8St0dMvKIOhNVgBvBFH6f39CPz3mtya4fZQAsxffV4DlaDskULno5ivwd1uTaqjzZf+gormQcGwFq6KViytH9ObJ4HqxVsW+qC/V/7XwnubajS/K+T97/DN6BNvwbELlC2uPZ1yur/FaDObn9tHKCx8CdoL8EZcf7XoH4YTAKaiAeCxsitoWiJs/8hRtT/JoQ62h/sV+d/9SfrA+pjSbxKmg6jipY6bastWezrAMbWAp2x/WU9+6z+D/bLefey+v8lMq5bdMeP9GV5/14n76Yl2Q9qf/XAUgQ/AH8O0IegGX/NVkro1hi7fj2mKsXyGKXHN7Cv9VgRMj9KHgC3bfJvrwbKVe4+r9xj3C/RoFymZFXmZtDXz09Apy1VbD4w88sEXLf9O6iLNl96AXYCLX6ngVPge3gbFoWixQbAuPbr1Ok40OnQCFgSipZgf8zL2F60YzPqM//rGeuU9SQoc6Dzq+Xa/5HEfqC4qiTJfhsV+Bdo4CtTkuzPi1F9ldfYOAiWhzLEta+D18tgdmiDS0BxL8D6UIa49t3nX0f7g/1f37+q/K8+ZX3AXZRY+FPS94WJlLEEqdO2mpNm/x3S7a9DrEy4jEVwmn3X9wthf2ooWoL9sRfj1u917ez+/xgf7A1dQWtfrYeLlrT+NxJjB8DEsABoPRykHA9Mhlrtcdz+74ZvL8fsL1ovTrGtemhvqj1ZWTIziuMOP2RbflE/LVL0sX1ZaMupVPXUQY3WiIWJGjkKzoTpC9OaTZENAK79CSi6NfwPVsqmpulcZl+br5NBk6w62q6gL1H6Gvc3mALKELPvt387jGnTr0OJY6CMwRe1vyyAOrv9djmjBrHnr01mzxrt34/tBTuAfR1+2E8BNfBqI1SmmP+t/bJ/IujQbzjolxllitl/CiMrgNv+z7jXAqzMic/sN2q/6tYNipZgf8yiqy7/63naM/g/wobmg7Mg7meHRBcmddpWI+Lsa849GiaHReBOkF96Q9ESZ9/1/ZwYvBx0ELhT0cbRF+z/2ufj+n5n9L8OYnX4Ph20wdUg3+wIRUtc/9Ov7c4DHbhpozMA1P93hiDleEDrHOv/SVcdwpQl+qVhkl3Fn1+WYUevxvrnwa3HM9zP5+QZL4Nq8PY1tcwGALOvU5FHQXW6Aco49UbtL2L2bXJfiRQ9dNm/CrpDmWL2rf36KYi1/0bCc5VpHN1Z7Zf9BaJR+8u2316yn5PUm/87u/1NcdB28B58DceDNsNli/lf9rcFHbp9B7Jf1qEfqn8R177aL/taAP0btAAqW1z7ce3XodCtoPFQ6UVLsD/Gt0n9r2z/63naM9AzFveAFkNVSJLtSTG+A5T9Dvj2Nedr06eDj7NhFLwOej5liG/ffK/Dh3+ADiPeh12hDAn2x/R5v+93Vv/fQSfTmDMlaA7UXKg5qYzNP2p/M/YMJG5xmAz+DloLfAh7QBWidutd3we2gOmgDMlrZ2kqsTvsBkuUUKEj0GnvQNJ1o4Ls6oPGYrA6zOHo7Ec4zvZzxNtz0JpQ/bOVjxGy78vERGjOUb9bCfTs9dFD94qP+wVcnB6yNhQ9+z/BUbA/LAxZRHvh7eFYOBAWhUJETm8vRFN+JTYBqWNfBD/DYFgHqhCzr7/2cAXIF7K/ClQhZt9t/0sYrrr9SfbnpC5VfIGo2357FQ87xoY9/85uX4tcvXvXgDspxLis0Cjzv9m/Ee1zF2ohXZlvX78EWRI0IWnDXdUXWL/9mnBPB30NehP+CGWI337zf7Bfjf/1TO0ZvEN4szIecorOONv6GvUW6K9F9UopW0SS2decuxp0BS3+P4Uv4ABQXFli9l3fb40x3X8PfUGb0bIkq/3pqUCXEioR7I+Z9xo9/7L9P4xnuwlMAJp3RoA2/9psaBM0I5TxHtjzfxf9W4JEc43ef/tVrjZMytfshouimUTt/wi0DjE+Jyx/FCl57Oi53w5WH7veSJw2hEXJHigy3UnX5QswtgY63vBs/Zd79S+Jxr4HQP3hBVD/06Zfz/8SUJ+w+g0k3BOyyDxkug6+gp/gWXDnuoHcm964qw5mTbYh8DxIz5dwFfSALLIymWytZXa05z0D0sbXNUn3+6bKndmgHMmNRRVpb5ytlBx6sLKvxmjS3RPSHEFyoWL2VQc5eHcoe6BxG2D21f7PYF/QQDsp7AD2YhAsRZLsa9HxD/gG1GF3hTKko9hvL6NxGXRa+zu7/VfxlQa5qsX8/yKG16raOPbM/tuEtfHRAkwTkyZJLcCWhTLF7Fv7NfZqMfAxaLI8BOJOv4kuRMYV+3PQWo3JRUvW9pdlX+2xOmxadOMy6HNtL0n+QaC5+DboCWWL2W/H0OqghZ3mYi02Z4WyxezL90uA2/75yzaO/kb2tfg+DrQO0LhQtAT7Y/p70vOvyv/tPNil4RHQ+3czzAPaZJ4IOowr+/kvio37QfbvggVhCjgaNBeVYR+1o2VF/tRht2z7aDzYCIqQPHa0D3kY/PrY/d1FVCjS0Z2r1hum279qPaK1QSuyPIV1qOnr1v1zkDS/Kv6phHKfEK9+mibzkqj1TJzdvaOCAxPSrYwdAByckO994ntAmsxH4hdgOv1r34TCPYlX//fz2/0JCeUyR0uRBoA6xCaA6zHerYYKmP1Lsa1w1WL2r8awtX8rwm+BBt1eUKbE2dcp3Dugl1WdsoovEG7767DfTjvrEPN/sF+H939dAHcE//sLoIUrcInb/1bB3mDQfHAFzA5lS0e3rzH5LNDiUL9SKloatb9s+2qPW4ei29dIn9l+jIw/gQ6i1mxUqMB0s/8SOtXvnwAtVKsSs2/tfxXDG0TGdSChDVCZkmRfm48d4D3QOuR4KOMgMNgf0+/851+1/5/k+er903vwe5D9XeBD0OHPP0AfpooWe/7a6I6CIaAv5BPAtvAuaB16EkwMZcmDKLYNVdz1lYIM57HzhwZ1Uj3XLaheUqP5TYcdfvu/Ik4HF63KIBT4ut37fRIM7Nug3LUJ5Sz6vynlNbbNDANT8qiOOgCYA9xfILh1V/gaSJOLSfTLuPfSPVOMggEZytneMaZ44yhVor1xtlJy2AAQ7I/56a+9JLfh7Z6leHxspa7/lyDJtT//2FlLuetI9ktpYAOlbvsbZC0lOdgfMyi3l+LdxkrN/7YA0kJDC7CqxOzry6fmgaehiMk+a/2T7HdBgb6KKb1MSbI/EUb3g5HwORwEWhQXLXXbV3usDu1FNy6DPrP9JXn3hzI2GWnVMPsjyNQHtPGoUsy++tgBoH63AmhDqMW4DuXKlDj7v8OgfXG7inCZB4Hjiv0y3n0916ztL9u+++tT9Tn9RFrzwWUwK5T1Xlr79f4fApPAcvA4yP51MCeU+V6qbTr8kL00ZiG9Fclr518YS6uP0vq2UqGYsusS9wDoS/UncD0sDK2KxrVGPpatOLmdyDQ/qK5JonVE2qZdereGgZBmQwcAOzbI8zXpafI6iWk2lLZxjIIs5TaIKZc5SobbM+cuNqMNAJ3dviZ8vSB1fQEx+69Sh5Y6U87uYc8/zn5Zk55bRbPf2ftfaL/bK6oLW//T5HEwaKKsUsz+BxjdGap459z2xdnXIkTj4I+gzUiZEmd/PQzqIEbj8bkwPZQlddtXu6wO7WU1MkWv2d4yJU+ZSWa/jrarXWZ/c8KzwWWg9dgLsDqULb79SzGog4fnYDUoWzq6fW0gdgEdEO1UgjMatb8q+5vRtu5wJaj/6QBgZdCmdQ94HzQ/FC3W/j+ieGa4GNT/NP6vBZqPdoB3YEcoQyZGqdrciDlaNJ7XztkZ6nRKC3XSQc+pMAD+Dm2QJNoTnAH94UDI+8VZbddzTfPxjaTHyX1EppX7Pq5QFKcDpbSySlO/Gtggnw4A9mqQZxTp6q9JMoSERnVpjymcpVxLezZVKs5wTF0Kj7IBoLPbr/sLiPsFovCHnKLQnr9rf1LyHwr6NyE0CZQpZr+z97/Q/jJ7WbJu639bJWcpNcXsb1qqlWTlrv35yHYLaD56BJaBssW1Py/G/guy/zAsBWVL3fbVPqtDe9mNjdFfp+262+7av5kbrQH0k2ttNNMWkiQXJuZ/s6+vflroauNZhaTZn5sKlF2PNPtrYP9/oPHgCpgGipaOYv9WGvY1fAS7gfrf2qCNuDZul8BUULRY+29AsdaAn8FfoCusAs+A/K+fVytvWWLPWbbiGEH8BAUYz2NHBx9xdXHjmlk3qB062Hb1KPwtbAGuaAOtscHPq3FiJTdjhvATMXpcvTpYiJOTiHTz+WHN1WnSyOeLUHgg+Hrd+3tI79Ugjz5ipsllJLo6/fAo0meNUXBpg3L6UDJjTLnMUapIe+bcxWa0AaCz26/7C8jmxT7WzNrs+Zt9XYeCXobTYCIoU8x+Z+9/of1l9rJk3aH/jZkU78VFOskfBptBVWL+N/vDMbxNVcaxk2Z/SdK1ACtbrA7tZRuK0V+nbVWno9jXfHc6TKNKVSjWftk/E6av0LZMxdlvI/5q0Lp0HShT4uzPhcH/gOw/AstAWdJR7GsT0Q9UHx2E2qZvEOEloCxx269NaTfoAdrwy//aNC4HZcsfMSB7SexZUAXy2NGHsCEpdXqRtGbWx/ul6NQcrA2xidbgST7RIYCeV1bRgdJPEKfvDeKTDpj0yyjZiisnfdKbJvo6nvTrA23KJQMhTr/F3aNMyI1gce5V9VhTGVJkYdJ0yOKWc8NnJJRtVO6UhHKZo1WJ9sy5i81oA0CwX6xfs2rrKP7/GxW2n/roK9xCWRvQYr6O0v7Q/1t8kE0WD89/zIRUd//7juf3D5isyefYbDF7/pqYj4UpmlXUZLk4+5rw7wTNy/oKWbZYHeroA3Xall87iv2dyn7ICfqt/dsnpJcd7drXu6d3UO/ih1BFnVz7k2PzmMi+fvLeB4r46ouaROko9relhlPCCaBN4LvQGyT6a1j3wqa6KVis/frarbH/SPgG9Px3Bv0SYWm4FTaGMkX/zosOwjTuGto49oUiJY+dBTD8Olh97KrNvw6qmpG3KWR64q7nRUp1AKFnEZfH4g6M8ma9bEHGjz2dj3FvbZmV8J9Bm1r5aV6QqA+8CWZX18/B+ijBVNmaVNeuNuzng9ooGQiubj9sBwAaoy4D90BBfXUzyCLrkekz8PVfSlzaYU5SuQso1xXGkt9EjJUaboIHOp4HjqVKQ2B9uL3jVS/UKHggeKBED+yM7stK1N9I9Y5kuLJRphLTZf9OOBF2h+GgBbcORYOM/x7QF646RYvpOmVljGsNoC+KJ4Peg6+gKjH7M2FQv8TQQcAXVRnHTpz9H4jXRqEKWQMjfWEGOBWOi8JXc9Wm7dkILqXI8mg9EmaHM+Eo0GbrYtgWXorgUpqchOYbYXPoDh/ADfAcFCl57LyK4UVAz2AZUH94HK6DHyGvTEaBORoU0qGDRPmUP00sb1oeN+0abv4LK8L0oDX/MyD5I/SHycFE/fAA+Bf0hDVBhwUfwd0wErKI5nY9y16gfqVnOgJMDifQzW5irh9GcV9z7Q2HwsLwFTwJ30MW0d5mHtDznA80xtwBeqZponJzw+YwL2i8VjnzHcHmRZ2qvfniLZW0E8BgvyU3Nl24o/j/HFowSdOtaL5gR2l/6P/NP8NWSobnP2ZREfpfK72o+bLW/7RA0RcKTex/hYmhKrE61NEH6rQt/wb7HeP91xr0ZrAvgXo2VYg9f9m/BeavwqhjI86+NihHwpewjpO3jKBr/0YMaHOiDdg/4BvQJml76AJliGtfmxxt8rQOPAzUfm28doOJIEjrHpgAFdrEqr8ncX1kZoaUPFb2xChvq5clUGAHXqbbvW7YqoEM5dXvdODwDvwEQ0EHA11hnJIJx6nahsoGD4z5+pX1FC34K3ggeCB4YHzywFY05jZYAPTzRy2GggQPdBYPHExDNwYtuuuQ/TGqTcZrdRjHpuxvBPoSrjroC6M+itwPVchfMNIOy8ArcAicDRqPBoA2RGXKgShfD2TvJdABhOzq/jxo5ms3xYJ4HtCm2jb4XtIvt9dGoU+4DvwlNj6gXyIUIfuhJO2QR/2xTNEm/1Y4DLqD9tBtcAzIHzo4KVK6oUzv+kKQR/cs5F8JFoXEfX5iAoWCBA8EDwQPBA8EDwQPdBwP7ENVtoP3O06VQk2CByrzQF0bb2tgXQcPZl8bAv0MWJveR0A/Dz4Iqtr46kv8A3AVvAjaYBwA+gpfhWgDdhfcCG/BkrA3fAZBivWA+tWwBJXXEH+1k7YH4U+dezfYlxv9/L0IWbiBkkUapLeavCMK1kxQooOxLRPS8kbrPdehyQfwKOhd09izEaTJzCTqF1L6Rc4geA6GgQ5NfyPhAOA3LgkRwQPBA8EDwQPBAx3SA8M7ZK1CpYIHggeq8IC+PE4Fa8MfQT9DrlKOxtisoI3IevAqVCknYEyHHmr7GjAnaIOkr6RBivWADpmXg/PhY9A/aDcEDoStQb8SMHmFQC/QoYD+epp+CfI89IFDoSiR7jQZmZZYQNqGDXQ02qA3KD46We/3QNgM3D16D+5vgs0hTqYmUodzqsMETgb9Gw06MJO+scRVPlZCuAkeCB4IHggeCB4IHggeCB4IHgge6BAeOJ1aLAb31FSbftjVV9hbarKvv26wIOiXIPKB6vEtvA5BiveA/m2FXWFG6AI6fDkZdBjgy5tEbAXTgn6poX46AIoUfd1OE22Qy5TJGihvlN6g+OjkA/gz6ZcO2tjrHZh0dM6x/9AvNhYYO+qXOys3yS8xBMIBgOuNEA4eCB4IHggeCB4IHggeCB4IHuh4HrifKlX1c/+41j9Qs/1nsX8aPAPdYQPQLwE+gSDjvwfOpYn6qy9xokOgo+MSCox7ooGuRukNio9O3qRBJh3GrBiTp9GvD2aizFi/lAkHADFeDFHBA8EDwQPBA8EDwQPBA8EDwQPBAx3GA/+mJtvC4aAvzLdBkM7jge9pqv76y6mgv5Yg0b8/cRH8Dj6FMkW/wPkgwcBbxJ+TkJYneroMmePy6JcXjWSscuEAoJG7QnrwQPBA8EDwQPBA8EDwQPBA8EDwQJ0euB3j+isA+oflfqizIsF2bR74Bst/BX0JnwKmhp3ADgQIliba/K8Jz3sWnoziP/fim7nVX29pJHF5svx7HGPlCQcAjdwc0oMHxnjgOy5fQV0/NQv2O7f/dfKtn35+AXVI6H+du/+pz9XZB+q0rbbr7xm/B/rXleuQutsf7Hfu91/PX3PPR3V0fmzKvjZ+J8I7ECR4QB5Qn6haXsTg4rAk6K+g6Jcoy8IbUISc3UDJINKfi8nTqNy9lHk5plzmKJ1+LJ85d7EZ9Y8X1G3/berQq9hmZdbWEdpft//rtK8HNXHmp1VOxmC/HL9m1Rrn/80pvE1WBS3mm6HF8q0Wj2t/qzrzlA/283irnLx1PoM6bZfjzXxa625/Z7ef72kVn7tu/xffonwa4/7hs3waQu7ggXHDA/qFi/6XBR/9Owf6ty+SJKmcNv6zJhUK8cEDwQPBA4080IcMWSbhhci3ciNl40G6BmL9nTP97KsNggQPBA8EDwQPBA8EDwQPBA8ED7TigfUprP++T784eBSOhGmgkaxLhuvhf/AgHAZTQpDggeCB4IGmPHACpXQaeQekHQJo869faugfZlkJxlfRX5+6H+yE9iHCXcbXxoZ2BQ8ED4z2wAL8+UIKkwU/BQ/ggQlguegaHBI8EDwQPJDXA9q0D4YO98sfLXSvAVv86u9haGIMEjwQPDD+eUCb3WvB3vekQ4AFyfN+1D8anAAAPhdJREFUlG8U161hfJVDaJj5w65HltjY9dB9HjwD+juQQ0B/F+x8WBP0jMqUuu2X2bagO3ggqweWIKO973HX8KUlqyfH33xL0zTNl7ONv00MLQseCB7ojB7Q17+4iU9xW3ZGh9TQZn1l2BuuhCtgV+hwp0TUKcj444GuNCXtEMDd/P9E3iL+XvxS6DkLnoShMLxFBlK+CNEC7wfwx8EfiSv630jRLyqejrHl236JPCtA0VK3/aLbE/QFD7TigXAA0Ir3xu+y09E8/UNc+ith+kfCggQPBA8ED4xXHviY1viLT/d+ovGqtR2vMTNRJf2dENfnCmuTlOXvh5AtyDjsgVmo+34x9e9N3CIx8UVGJR0C+Jt/1aVV0Rf2n8Hv563cv9JqpSg/BbyaUi/9S7BTQRHyO5Tof57I2mYdSmxfhOFIR93205qi5zA3qM/PCGX/AgITY0lntz+WMzrRTUc6ANA/Cqp+GKR+D2xGFT4AjdVb1F+dUIPggeCB4IHiPdBoMaov00HK88B/UJ30DPoXaLYXuoo4UJgWPe0F1qtOVWthvNGCa2byrFhSJbX517/mqeevv5NvsiMBbZa1AFnYIku6+ocA92HnPVCd9OV/W2hV9JP2pD7eSrw27q2KfnLfqA6XtGqE8lrcxx226q8AXAb6R16eB78u6gd/glalbvtx9V+bSP01iOHgt/t74u6BfWF6KEM6u/0yfDqu6ewoBwCz4jh9CHgAGs1J45qPte7QwWczbO80VmOYq2N+J62ooA57LwcbjzQ+FSmLoky/KngQHocLQAezvmjOvBgegcegP6wHQYIHggeCBwrzgA10Sdd/F2ap8yrSPyBzNKzkuWBq7rXJSvL9t6T5fxVgZeKugEkgq6iMJk5NJK0cAmjzr0lLmxJtUsdl2ZTK6yfe98JkCQ3pRrw2ZV/Ccgl5WolWHdznr0MA2/xbn9i/FQMxZW8jbojHMO7Nnnv9zstn5fYkPo/8l8yu3qLCr+WpRExevUNbwlbwOvj1GhalKU9SHyEpk5xILlf/G9wvG1NSB3U6FLC8etc2iMmXN6pu+2599S7p3zuwNja6fkbeg8AfC4lqSjq7/aacNp4W0hjQMwXN3WXLnBhwxx9tDqdswajekz4O2nSWIXOjtI/D5AlGtG5o9I4npe/s6NR87ObTcytSFkeZ5hSzMYKwDgSKEPWjk0Hjuel3r+cQr76oeebqhDzKfz0oX5DggeCB4IGWPeAOQnHh9Vu20LkVaODvC/KtNpIrgslcBOJ87sbp57AmtpFX+s2QZSJwy6jco6CDh7xim3+r27h+CKDJ/lNQe24Hf3Oh9tpGTJu12aFImRll2njeCOZT/6oDG+WZB4qSF1Dk28l7f3jOymgD59rYmnv98qBVuuSsR1p2+dqto8KD0wrkTHvT0a+DlXlTyk9Kmi0CT0rJlyepbvtWVx0e/Qi+r7PcD6KcOx6azjzXzm4/j6/Gp7zaWJ1bIJsV5ByNA2+B3//V15s9BNDc5eo7hPsypDdKXTvdE4z49XHLNAq7HxrKPADYmLp/5bWnyMP3/o5ujf+3gg7Gv3biHyF8j3OvX0HdATeBWzcdAmhdGSR4IHggeKAlD2hSTBuEW1LeyQu7m3/zsQ4B7Cdf2nTq3tL864ekTQgSfyOvvDoE8Deuymsi+3Ebm4eJz3OyrQn8cfDrp9NybVbiRJu7ReMSnDgtfuZ07v2g0tMWQfqpZC8wH/nlG92r7Oegdt0IqrNEvjG/vU24DYqWtVDo+zPpfvcCje+KLm3gXS5LqIsWJ8d4eVVuJcgq6h9+u/Rc6xItIo+CB0D9d1iEFlt+PX9w0i2frjpEyyP+AlgLv0aiw42DoWujjBnS67ZvVexLwPexey9/67BIh4tuvBseSlp3aEay2FcdXHt+uEz7vq24+1bsN+OzZstMQ8GRFTKgQUX9dyDOt3ni9DW3VdFf7xoBSXbzztNWH7+tHe0AQPOH3mGfOYjThtf88SJhtcWkrAOAvTHwE5hduy5ghlu87uHofpnwPI6+WQjrsMds2nUwcXM7+fTBQPOOpR/tpIVg8EDwQPBA0x7QQGsDi3st+qunW8FZuZkPmt28ubqaCWtjOT1M0EzhjGWk+3RwfarwF7ACSLTB8tPt/oDROeI3/8pzETTynyYOTTqm064PEZflEEATcNzmfwjxmrB90YR2PYwE2doe4kT1eheURxux7cDkWAJvgNJ0+p30jK6K8uhL/gUp+UhKlN+RYocw1xCeGmxC1uJsXihD1kKp2peF3cuoQKRzQa7vRfXQIkgHBNdG96rbLTAJNCvqP34by/JpozrqsGm4U58XCD8UMcyJ9+vr30tHHtGCz9Wh97ZKqdu+2roTuD6wsN5zLcDbwN7ziQmvBGdA3MHM08RPDnkkyb7Gsb2gDWRf/d3qlnQt0n6SjbT4ZuzTrEol7r1Pa1Oradc1aF3R9Tm5gb1GyUuS4SNw230W9/d6cdr0aU7KI35bO9oBQNL4fxqNNH9obaDx2pVu3Fi6rj3dxCbD+3o6Tf8o4rs2qdMtpnHqO5DeD2A28EVrUb3TZvslwjpA82VGIt4H5XsHZoAgwQPjqwc2pGHaTwSpwAOLYkObrcdgt5LsrYNeG+T86z9Lsumq1UL4fLBBVHX4Bm6FtaEM0aLybPDbq0OA5aALnAM/g+XRRkz+UNmV4SuwNLtqE9Fo80+W0aLDllfAytp1EHGafJJEC4k8m3/T47ZXk9/ylhBdNbEOBKvH24Q1uZnoWWgCtvTjLcG57ueky3cbOWmNgjr40QbD+Bths/VxFJb9XZ08yjsFFCVqbzvcAGZbV7cf6F1UnjYoQ7T5t3dBfW6HyIiez7Vg9dKmqNlDAPUh02PXpAUgWUuVy9FuddChkd4vk0MIWFqj63ArlPE6p6f7wYzl3Gxa7DX7DOq2vzB1j9vI9yV+YreRMeG5iXsW/Gfy75i8SVFJ9k+gwEReoSwHAKpLEfb9NuW5z2Pfa2Ilt3HvfZ725c17XYNWFV2fYxvYS0vW4f9IcNuovijRhtE/BNA8ELchVP448duqsa0M6Y1Stw3dE4z49ZkvJp87B2tttHhMnqIPAPbEhlt/N/xRjP1moty290tRMAtp74E+RsT5x4r+mYDGzbR1m+V1r+pXv4eD4SQ4AnaHOD8TPVrm4k+tCQ4FldEz+gOoTUGCB8r0gN71t8DdF5RlTzZOgyfgUTga9L7UIXqvB0OjdVFs3SZwYqci/KxzX2bwnyg/r4EBOdbfCMYVmYZITQBFy04o1MY0zbGXkK5NnxarRcqEKJPt3TylaufaoI43P/wONAlpgzAUtPm/HaYAVy7mZmfQZjGrzEbGgeBPLjoEWB++Alc0yN8Jy7qRhN+A1eEdL9697crNXaB8kvehF9jG6RTC+4PkB1A75QNXNNH9y4n4E+Ero3vlvw9kR3IcHD46NPYfeh/kT1/aibjBj8xwr682ejmLks1RdA3Ye3s04ddhAHQBiU3YY+6K+3MhVMmHM4P6kd6P/mAi38rfqqPkVtgM8r4b6kefgSvqg0PciIrCI7Gj8UXyLrgLVi2ST1CCI8MIH+jcW/AbArfZTYbrJOT5GuyZyt9LQ56+pLFT/XwT8N9VolKlbvv/pXYbejXU+32GF5d0q/FP48nvnAw/EV4cXnTikoJ57N+Ckg2SFDnxrdp3VDUVbGR/IrRu2ZTm/IVUF40Vrsj+Zm5EyWHNRw+n2PDHIc2vmvfSRPP2mbC6l0nzs/pI3vdQaqTrZnA3cEdwfyyYTEZAfXZNi+Cq+XEd+NyJSwr6bT2UjNo0Fi29UXipo3QOwjbHO9GjN4zuHLAAia85GXYjfG50/yNX+fbu6N69dOPmIydCB9ivOPd5ghqPbgI94zgZRaTmhNNA43Wz4j4LrWf2TVG0KWlq4/kpefIm6T3U85fd6RIKv0n8X+CWKH0JrueA5pw4+ZZI1fFw+DIuQ4gLHmjRA2dQ/l0oY9xyq6Z34kmYGx6AyUF7Ho3xGqtbefcpnku05j4bdgHNAd9B06KBR5ufKtBAmSYPkZinHnJEkbIjylz7GsD0gLXB/dBL+w/3E0LRIp0aNN16KDwSeoEvKxOhBYaf/yLimq2fNjxDYnSq408BJuo7j4NvW2U1yWeR6cnk2nqae3XqzcHVq8k/SVx/adO1DMwK74Hp0DNM8sekpMWJNhL3OKj9ps+uPzrplnce4vKKFnr9wF3wSce6cBA8B7J5FJhsQ2AUjIDdYVdwpQs3J8FsbmSOsMq/ArL7E2wPcaL38FownxwTl6lBXNw4NG+DMmUkq39bO3Qd7hnRGOamKzzYy9PKrSYZV//b3C+WQ+HyUflHucqneaUu+0tSUbfdCl+Qt/Lknwnc9156rsygJ699LYL9+ibdN2s/SV/e+DT7ce9dXv1Z83+X4TnUncX3h8a/NNGcMgB8H9xPnMaSZmQ9Cmnt4ercN0GR5krNO25evcNZ3n2/rRrbypDeKHXr1z3BiF+fBZx8Wg9oDjI92ztpfnBGJ5/y9/QzZLyfhXyfgtlMu15PPs2DzYrb9n7NKmmy3AyU88f9tLbuRf4V4QdIy2dpQ8g3NxQlR6BIfSpI5/aAxofXIWn9XqR3+qJM/XlvR+mZUdyfnLgygzqE0L5Ta1J7t1puu04ytGkyhWVed8BOkqxGgm/bnQDUUC2G3Tw6kWwkmqB7RqRtzNrIowWK6b+KsAZGEw3u+4E2fJZHp6GNZAIydIvQA8wiqvPFYHbsOpK4ZRwFKxP+KiZfK5t/Uz8HAfnXbNv1fuK0sNGE1ermHxWjZSH+/BzMxh2Ev3DuLyacJjq9djfnekEeAdM3jLD7LLkdS7K8RHr+muSl80s4EqwvtDpha9M/CKRbVzsEWJew+uTPcDDsAb5sQcSeoC/Hymd5uhC+AqTzVWj2EED97WPYDtJE/rkWHgT1j7wyNQVUV5d58yopIL/6tVsH9SVXDuHGTVd4sJshZ1jjwywOfyXs69dmQM/fzZcUXt8p/yxhbYjTpG77Vrd/EHDbrfdf42YzooMwX9fEDRTltX+LZ8O154fVlrz2fR2t3KfZ9/t7K3Yalf2uwTPoCMm+P15JqZTG2MvAb/e9xGld1Yz8gULfg6tTz29gCnHz8FPkb7Te8Nt6CGXKkGYPALRuk6wFrk8OHx2b/Me/SXL9Z3qSS8SnDPD0uDrjwv+MV5Mp1n0W/TKVKCaT1k5PgtserfvOg6NBv2x4DNx0bfw/8OJe5v5sUJkz4DlwywzlfhooQh5CSZU+KqLOQUfxHrgZlVsXr/Y3GrUf+whGgMImsxLQmvtuiyj5Oin6N4zQLxr1fimuZdkbDfay6uXWpmJVWAW0yVwJVoTfRazAdXlYDpYFfZkW2iwsDUvBkqCBwPQ+QNh1HrdjieWzqyZXLV77Qn/4A0gGg+XRtdFE2+bl5zZWziLW9GpxNwHE2d/dyaeNkQZQk20JXAfSpQ20xB3Yh42OyfaH2j8ArE52/Yw4+VjP5auY9IuIS/MzyZmlBzmHgtm26/3ExS06hhBv7SaYKKpfm4c2sabfvWoy6unl1XOZ2YtT39PzcMsq/BNsBm0eer5ZRfW9AqTva1gVJBp8pF/xx0OzMi8F3wfpEYNgc9CC2eIuIJwkh5Fg+TQg6X2+3IlTnfX+Jok27OrzSWjCTUpz4+8g3/0peY8lLUnkY9Xd2qHrgkmZS4x331fVYbhnS4tkt44Ka0xqVnx7vu5W71+hYt1TKle3favaEwTctmoca1YmpeBX4OpbvYEy3/7FDfKr37v6G4Xz2m+kL296kv2yn79bT41nHV18f+j9iRPNzzYnuG3UYnCyuAIZ4nqTZxS4+loJ69d006fY9duqsa0MUbvcdiSNR359NP73gi+d8ucRTpP9SXRtKaz1Q16ZkwJxz+I54gfAY+DbUf5FoBlx296vGQVNltmPctaObwnvBBPE6NLa/02wvHbVh5s/xuRX1MbwCVjeotql9UhRulAVZBz0wBrUWe9gXF8tujlLoFB9WGtqXzQ/aF7r6ieUfK93QHXSWie3+JU9Ew3rw3qgDa0GbL28rYgGXQ0mEg0S28HPuskgfyKPNiValPWI8m/PVRubpUCbLhMN+MfaTQvXjZyymgingjj7ZxMvm/PBDKDDkAfhr3AymLQTWBSyttnK2VVt3BG00NjGIrlOC/eAnpN85MrF3OwMeWxOQv5dXCVe+Hru1TZXVnNvnLDybuLc+8FzidAkqa+9Q/3EhPu5iNfpsiu3cqOOv6YbmRDWxvK6mDQt0vTiNhINMBeCNvvKr+f6AEiuhIlBfj8UNIEeA3lE5deCa2CfqOBKXIXJCALPwOpwv0VGVw1On8LzoP6m+p4BrtzMjdJeA51k+qK+tIEfWcJ92mClPvsGzOvYlS/V1/PIF2QeDk+DDj5alalQ0BXUb8dF0a+oBoH6mPxbtWS1P7dXsbzP3S2u9/Qh+L0TKf3+u+Mk/+YnqtrIFSl57RdpW7qS7I8krdkNa946/l9MgcmJ05xalTyJobNaNKbx4HLYwtNzF/ea/7LMK17R0X996xwiJ/QTWrhfirJ6j/Tua44Y12QhKnwuTBlVXPP+nlE47rIhkf+MS2gibkvKdPHKHc798WD9eAfCFzl5lH8P2MuJ6+hBtcFEa5wb7ca7PsL9KvA/mD5Kkx82ggeje/+idcc68ChojbEtaC35E4zLond0YvgRxvW2jIvPQf7XXmtvsHexzHYsGCmPWz+9SZrWOG0wBMZZmZmafwhyqEjbFJKcKno5tGExXb1Tc4/5im95dZWojBunsDYwEjf+vjFRiX+2efnjMmpw+jnKpwWRJM3+haRbHbYfnXvMz6wtzq59SJvWyTuMsC/aYGixmsRjpJm+RlcN0kl6FD8J+OLWr5H+VtNtA9iqTX19uwdaqY/VxfeHf79/ZOd7ruv7idG93hXrPxsn5EmKzuOL/jFKDiEuqx+WiSmvqDx1yGorLp+eWZqcQmJcuWbivkHXaZD1OVu9poipw8fEDYvQL3D8+gwmrlnR5qtfAhcRr0WGb6+Z+xHoWRh8qerZJ9lXfdzx19q2sl/RnPfnk9906fq3lPLN2M/7C4C89t26FxFOs5/imtKTqup/5sPrGrTIr88rXv6u3F8Lps+utxOXd6xxVc/DzbwloTbFid9WzSVliL+W6p5gxK/PV+Qz/z5JWGNzkixKwheg/D9EVyvbk/u8osMGK6/rYwkKrvfyvZiQr1G02/Z+jTIXlK4Di1Gg9r2UUafmVPOL1ptZ5L9ksjJzZing5dHYNdhB/eIj515pm0JVshWG1J4DKjLot9/1hYVXr6guMqN+o7FO1zpEh1bXVGhYh4563jq88uUqIpTWy08o+V77OdnVc8gtmsR8+YCIneGmKEEv+v0wJLrPczmWzEtGBfSgLmtQeKYG6ZY8gQWcq9lxosYKZtGticV0a3BJEsvzvpNhliisDaAvOh10J6043XqJVvQLNnm/QoNyVv8G2UpP/hwLM3pWVuNefcWvo/rl6qAB30QTvGTiMZfRf07NnwNhjtF3Y//Rh1tN6K58594Q3ha00dNCzpV/c7MhnA7D4TA4HiSyfzIcBTpcWQNuA1fUnhPgXBgGQZI98E+StgEdRrYq2ljvC/ODnp8GyyzyNZnUP6dxMs9AWCSJ8rbDNzAMXoes9nSwpL6RJHeRoP7TlpSB+PtgkJPeh3AP517BWeFSWEo3NUiafb0jwhUtTFsRGyNMh6/f4nUtw76r32z4cXYfZ9/Sirqmtb8oG+O7Hh0UacH3B6+hGvMVp3e5Wfmk2YIZyn2bIU9HzGJrpzep3AagsTlONF9okzkVaNzdG86DVsRfRzySoOxh4t3+oHXIuCJaewrJl2MuDf9087nhtIJuPq2Z8sqjFHCf/Z+5fwducBS95oTLDmod+Da08r7nqaPf/riyqk9VsgeGzoAdoD9UKRoTjoA1qzQa2YqbQ+PiaqhaPpNdE7LfTLwGzt1Ajr4UVoKfIKusTsa/Rpn1ouyetaCX7xbuR8BsTrwtlJ8ibpkoflonPS74l7jIDHFp9oc55VeIwqdzPduJf4vwTbCWEzfMCXfmoCbpjx0HzE74LLCX6W7CC0J30OSuPqkX/keIE5W7AGzSlm4NmhuBRM/mSXhJNzHSi7iLQZuG9WEgmOjQRhv7BeBBmAk0+ejdOBH2geVAz1ltUNtcOY0b9cENYTHwD4qkX+/MOnAomKguNlnqPdgV3rBE53oFYbWtHywSxctPWqyaXEbgQnjVIrzrN9wPgXmd+OGED4A8775T/P/NxY38Y89Uaf/THymig7XV4BLQMylC9Dw3AL3PWeU2Mm6dNTP52sBdjLzO/d5wFzQSLRhfbpSpQfpqpN8J6p+SjaHH6NCvf6hOOqSoS9Lsq69/BtM5lZvFCTcTnNUr5B7aekmj3/ui7fs28tr3y7d6n2a/Vd2tlNezv74VBTnLal5oRjQW64B6E6+wxpXNQO1oRfak8HGtKEgoqzFf88t7CekdPfoTKrgefJhQ0UmJvxFsvPtbdH9eQv6s0d95GbUOiRN/nBoZl6mDxqnPai2jddPSoDWO+kuS6B34o5O4CmGVlY4k6UbCulHi91y1rsgrOuAWJpsTeBa05qlDHsLol3BtRcb99ldkNtHMm6Rob/N2Yo7yEg5EteaLoeWZ+I1mjUGSacZcxvpT6zeJ5RlzNw7/OTl1fwW0kRFHQFbRAk6Dgcr9DGtAFmkjk9nT1UQbwH/B1dDbIrmuBG5+N83JNvrvmrv5kjaA0zr63AEqyf6c5NfGSLpHgTZ2Ei0OLoDjQRvFSeAZsDrsRdgX17blK+uqydIXPW/VOYlrSMtaH21Gk/Qo3t2UcjtaNKloUWY23iAsn2hC0sbU4s8nnCSHkWD59FzWhsngKSd+COHpIU60SR0A0qGBfXlwZS5urF8PIiyfSXqAxd9P2Pfv0cRJ54+wESSJ+s+3oLziIlgItGizOG1Kk0QHHJZPPlsLDnfi9C7qACJN5ifxUzA9up6ZViAlTeOANrWurru575pSxk9anIidQe04NgdaRL8Gru2Luc8jer+Hg6ujUXgf8m8FD0TltNhRGxpJFe//81TCX6haveq2b/Vwx0n5+hRLaOI6IWU+APeZrdVAj2//1Ab5tfFz9TcK57XfSF/e9CT7U9OOjytC71RHF/990FpIovn8dfD9rgVpUfIXFPn6W7lX3WdNqZzf1kNS8raS1JvCbju6Jyjz66O5bIWEvBZ9OQHTrbBkRrA4XXsqMqdcSH5Xh+qiOdIV9YkPwc13mZshR9hte78c5VrNqnHW6q95M8lX05B2g5PXyjxHXBvEyWxEPgaW9/q4TE3EPUSZKn3kV1E+OsqPDPele0D9aRioL1Ypi2FMffiqGKN6Z7R27xKTVmaU3gHVadIyjGjz9UNkQJuXXhmN6ETMXvY8C7iulFs3YjWuWcTs2HV/r9Ai3FuaXTUxxIkWjPNGtMVliIm7hDjTq02gP1FpcrjNyTOCsG0cCf4iExFaK4UjSTM7ja4HpeiRjbydVC+auzk3++r0b4Pd2/Ve4uLaSHSinE2Klf+G8OJOzi2dNOX5i5NmQbVLm37TcZglcJ0d3E30fdx3ddLdoHxzHUjPZ7AkSKTjTVD8U6AFsysLcGOLAG0K9Dwl6o8qo7ptA2mi/ncRKL+uupdoolH9dSixG5wF/jPUIcPu8C7If2uCiR0C3EWEDkQayWpksPdedREHQB6ZhMy2CTYdLxGnvlSV7Iwhs63r400Y7kaZf8AgGAbvR/j+MTttpEv2BYvTs2wkk5Khb5O8TjmzZVfV18K6PgHTQ5LUbd/qdQIBt94aX3Q42Iz8nkKurq+5VzvTJM7+JCkF8hwANGPfrX+r4TT77sajVTuNyn+X4s+OkuT7ww4AVL8eoH7ptvNn7neComQXFLnzmWzp+akeScSNAzqAnQXSxG/rIWmZW0hr9gBg6wY2jyDdnoXGOXvHZ3Dild4T8sq6FDDddtWh4q6wDKhNQ8HS7Lobcc2I+yz6NaOgyTKa52z9ojZ8D5dCH5AP/ggng5tH+X4Ea7P65wUgn6iMnpvWdV+A5dEmyT9AIaopeYhSVfqoqUqGQoV74GI07l241sYKJyCL3v33oIuTfTbCGv/vdOKqCuod0Ls1aVkGD40MyIgmnskbGNrByf8c4bTFUwNVmZIXcOzZIJN2PSGT1uyZNMkM8eqgjcYlcCtoULT6aLBcE/LKihTQ5s/02PV84q6Kif+UONu4EmxJtGF7FMymXV8jbnaYG/zFkPLcA436CllGy3b8aXp11b0vxxBheUYRXsfJMCfhj5z0mwjrZXVlOW40+ZgOTUxJog3HbaC80rsaaCGl++dBzzxO5PORoHx6LlokmL3dCWeRCcnUB3R1pSc30qcBSDqvBjvEUJ9W3DcgO6uCL38iYjI/MuXefY+lWwPc5in53ST5/nJQOUN+nBuqFC1EzL6urxZo/DFPt9lpi2zs66RrHCxTZkT5O2B10PVm5/4BwlNBWVKkfb2nbjsU/msTFdcB3LOerv9k0BNn/8CUcnkOAJq17/uj2fs0+9N6vmrWRpZy36X4s6Mk+f7Q2seV+bh5D9z2asO+hZupxfA2lNdcZzZ+JKy4ONFcoDnB8ur6EswCjcRv6yGNCjSZ7o/H3RP0+PWZJyGfov8ImpvU3ndBi3GT6Qm4/tAc2oxo/HT1NAprHlYbmhG37f2aUdBCGR1o6KNHo/ZZ+lnk1XrD7htd9d5vAEWJ6jt/UcqCnnHCA1pjvwi29q260sdjUP3cPYA4M4rbqurKYK+lA4AsTjwRI+vCKrAA/BP2gjjRQH16lPA9V01WupYpWtSvChqkG8mFZDi0Uaac6Z+Qf03QgnuxqOyyXIUrX3Ejf9zrRmYIr0ieO2BKL+8F3O8G2iiqQ7qdbzru7wHVazA0K9r83wlaFLsyhJvVQROuRP4fCNqIm8i2NuIbw7cWGXPtQtxK8D7MAufCJeDL34lYGNrhOdBAcBdIVJcRoI35G7AdyCeuPM7NLnApqN6Tgi9HORHa6KsN3eB+J/5hwvs491pkLeTcP0J4PdgyQkmvg9p2FEjkv8tGh377x89E9f9t9OjDt5mJt36wBeEJYCgcBJKJQRN43LtwhTLkkIvJOz8cEpWRLfluBDwSxSVdjiVBBw4mGgP03N60iJqu6mt1yLQlG/0I/aeB+2srO2zR+7sppL2DJLckRdrXe3ofrOHU6HjCT8AgJ65RUJPyEk4mjQfS00ji7B9HIdmPe68a6bP0Vuybjlaujex/h3K3/7Riq1HZH2MyaC2idUZVos370y0Y05i+NgwEOxDWXKxx/Uu4HVqVy1Gg9/ZKmBjkI82NOlg/H0wUr7yaE0w0L+kd+sAixuGr+m6c9CJyAGhukp82gRFgklTO0rNe5VeNCz0yFuhHvpEZ83akbE9RmaXgAnDHX7+Oo4j4JxwJepfl/xNhKkiSwSTsALoWJapvkM7lAc1RB4P6YB1yEkY1Hmifq/FGY/Hv4EG4BsZL0cCnAU0DqlgPfNEk9BhYnv39DCXfT4P+4Y59q4dd9ZDKlElQrjbrdMps6qrFsTa1c0BeWYkCWky4+hTWAD0hmMj3V4Cf72PiFrdMOa/yp/s8TbcWPrPH6GojbhhYPrtqAxK32Sb6N7IwMVroJIlethmTEomfCbqnpCupR0q61TnP9Tr05cmvvHek1CEpqY2Ew0Flk+zpeSmPJvEiRBO73z71qflSlO9Mml8/9zAgpWjhSb29ugwp0ELcu6F2t0U29uVqftC4VLasiAGzp+swuB7S3ieSC5Mi7S9NrX4Ctz1fcL9RhtqqvRd7ZaVHG6SsEmdfB7ia8H25hQi3nknhVu0n6c0an8e+38Yq7qfN6Mes7W2UT+Namvj1eSUhs/rK5+Da+4b7VRLyNxOt9ZY2uK6Nv0SKNPdr4emmvcC95sKs4rf1kKwFc+bzx+PuCeX9+swdk09lR4C1e+uYPFrDWLquPWPyZI2ai4wPgKsvLizfT5ZVaUw+t+39YtKriloWQ8fBrfAI3AWXwd4Qt5adnvjt4CK4DVRGa7/TYG0IEjzQqgf0MfGeVpUUUF5j6xnwLDwJx8IUUIccj9EbYaKyjWsRbwPee4Rn8Az+w0m/l7A2D3VJG4Y3AE3OmiCrFg3i88Gs4G7U89RjJTJr0Wk+t+sFCTrVzstj8mvDZr9MIJhJNHE+DmbTrkmbf1PaRmBoTDltWrMeApC1Njkcy8ZxhL8Ha7tdz3byKO9m3n3chuBVL8/W3OeVtShgdWh03T2v8pT8Wsw84dlWP+gWU+b3xP3o5T0qJl9VUb29ugwp0HAVBwB5xg4d+rj9Qpv/Vn/xUKf9/b32qG0/w1Wgtvqiw0G9V6+B6weFXwKNaXkkyf7VKHHtx73vZdn39Wa9b6b9eXxVRF5345O1Xa3kK+oAQG3X4Zc/V+tQQIcAs0S0ukBbHT1fgtvmI7i/1ot7gXstUPOI7/uvKax1Q9H49e+eUEm/Ptp8u6LFthbf5gvN1XEyNZGWR9eecZlyxGlNqznE1emG3yetRw59cVndtveLyxDiggc6qQdWot2LdNK2d4hmuxtMLTBNNAGOAg2Gn0LSwE5SkAweWJk8/oJCvr0Q0hblWvBfCu6kpPBHsChkkWY3/6a7B4E3wa/D7cRNapk6+HVi6qdDC7XhQ9Dz0CJa9/qFRzeIE20M7GuQ3pWdQZsWldsLWpG6DgBUZy1i3wL3meqE3/3SsTj3X3h5ruC+TumNcbfOQwqszGOebrOzK/H6yf29Tvo7hPOKFpsD4MCMBdvJZ3XQtW/GcknZ6ravep0Dbpvc8AjSHoTb4Cnwv5BaXh1WzwPNSJr9d1Eo+x+A2Yq7lmU/zlZcXCv2m/FZs2XcjU9cO4qOu65BRf36vNIg/5qkfwdJ9Vy+QfksySuQaWSKjedJmzGLIi+P39akNhQdn7RO9Oszl1NfjUs3gNVFYcXFyVREWj5de8Zlyhn3hqfT9OvQpFdOXXHZ3bb3i8sQ4oIHggeCB+rwgDaHb4ENen0I65R1qBO3JeEgzXtAm81mNv9msQuBAWDPyK7ayDY6PdPJ+uMxZfXFN2myJuk3MicxcRPlLcQnTda/UVJThH5JYQuMzwgvEdVjNq7WpmcI611wZUFudNAif98M0iPZFxSng4BtoVnRs9Hzuxbsmf5E+Bvn/lHCi8N0ULToAMnf4OsQUAdS6hvDweql68MwCdQpvTHu1umFAiuTdADg2rPwy03YPSWqu/pNnwzlL43ym832DGXSstRt3+p2GAE7RLO2Zb0+S9k5TFGT185uv0m3jfPFpqUFbj9rdACgBm8EP3jlTEcRBwCyoUNmm2dMt67PQTObf4qN/gfrXF1VhZPWFL7v21TJSNbh6tZPB+6fgObqkaA5Sr800IbcPxQs4gBAel37CsvmqlCEuG3vV4TCoCN4IHggeKAoD6yCIm08bODTps4GRC1CgzTvAW3ytFE3f9r1QuLSvvz7FnUI0B+svF0HE5e2AVeaJh3Lr+sQSJqoSUoULbzfAFfXfom5O0aCfHxZVGctIvxFWxtx70Tp2uDqeUnawDbA9xOeFFw5ihv5QT+Pb4dmpQ8FzZ96B7eD1cBdlBzLfVmyPopHgdVB17Pgf17cm9zPCHXLkVTAret9OSo0JXkHpqBFn6s7LaxDmzyyP5l9fccRN1GCkm2I/9kpo0XxVAl5s0TXbd+v45pEaDPv+yTpXu/D8TA5FCGd3X4RPhzXdExLhd3+leUAQG0c4JUzHf5corzNysIU1C87TLfG327NKqOcxpWtasD9BZlbfd/3bU7ihoSt3XmvrR4AzBNj+yPilnHq12rQbXu/VpWF8sEDwQPBA0V7QIsrf/AdRtw0RRvqhPq02HS/6l7EfZ7Nv7msC4GLwZ7TV4SXssSUq3sI0Ozm39TrEEA6VIfTQbo7svSictrg6svBGgkVXYB4+9lv7yjPaVzVRv16QhvHOLE8L5DYzPOUTi2Y7gLb/CtOsjpo0/MclL3x3gcb1qfiriNJXwiaFf2i6P0C0DNyN8Wqq8atrKKxLK59zcTpnc4jq5D5e/BtvUWcvkhvAsqzHdwMfr4jiGtF6rYfV3eNHZvBlaC/Zua3+WfingC1fTYoWjq7/aL92dH1uRsx9bWsBwAXkNfvm7ov8gBAvpsP3oZWN//S1dHE932bU8E6DwD8da/mcj2HIsVte78iFQddwQPBA8EDRXhAJ8ZPgk102pBo0RikGA/YIcBFqGt2s6iaqOyFoE3tepBVtNjVRqN71gIp+WYnTZtfHUiMC/InKqlFRposRuKhTga9D/+C6Z04Pyif9oU2PyHnvQ4Bfh9TZkXiyt78m9kzCNi77171C4e1LVOTV3cB5OpuNawN9Tw56qQv6K3a1KHbHjlsulk35ibuEKBRne6iXFdXUZPhuu2nVVvj2iywOGhjpec6BVQlnd1+VX6u044/DnW0AwD5Zk6YoU4nlWhbv6IzNHea6N2z+LxXV4/py3qdi4w6ZLfxVweRZYw5qmO3iDL0ozpI8EDwQPBAax6Yn+I2IPZtTVUoHeOBRYjTZNeqSIc2h0GCB4rygA5zbgVbDNl1twIM+Atv093KVQcTO+Ssmw51DkjhLdL8Or0b5d+bq77Sqy2tiDa3b4BvJ+n+EvIWuWis234rvgtlgwda8YA/DmU9AFgVo7vHMFMrlQlla/WA5rsHQOOufn20HQQJHggeCB7o1B7YldY/AxN3ai+ExgcPdD4P6Au5/sqBbUZPLcgF06BHv1hpFX19HwIXw5JQtDyGQmu7XQcXbQR9k4A2FI+DfGK27Kq/rqLDmDWgDKnbfhltCjqDBxp5oNkDgEZ6Q/q45wF94NJ4ex2U8deLxj2PhBoHDwQPBA/ggVn+f3v3AmNHVcdxfO52dylaqSCgtiFSxVpaqCC15dFii7UFjbYomiBRFExQYlQiobxCUKIIJKCJhlYipRgJyrOAKWgly0MIQqGgVAWlPNpCK5S2VCm923v9/XZndJjefXB7z7m33e9J/jtzz8yc/8xnbwnnzJlZFBBAYEgKeArqiwo/h96I2So7E2KsAYC8yQh98GCGH7OYqThEMVwRqzQ7f6zrJA8CfoGkO3xZ+BEvytAT8COBTylmD71L54oRQAABBBBAAIHaAhNV3chp57WztF5tMwYAWk+BM0IAAQR2TYHJuqyzFJ4FRUEAAQQQQAABBBCQgDv/JzdLolqtTlQ0Jb/+j/AzHaW2tYqX9IDoF2QwTrF/LAtd9+RKpbLa4fVYecmDAAIIIIAAAggggAACCCAw9AT8pvllik2KMbEvX53ednV+lyk2aT1qfv0Zhsm7l9o2DC+1VR1ed10sA13vFMUGRVa8Hi1/rOskDwIIIIAAAggggAACCCCAQGsInKfTyF5Ed6/Wo74DQB3e87LerwYB7tV6lPzq6E/Jd/4LgwBTQv9qdJ3Fzn/G4EGA4PlDXx/tI4AAAggggAACCCCAAAIItJbAQTqd4t+oPyvWKaqje5A6/W9kPd90GTx/X53/WIMA7uAr8nf+CwQ92xgEiPVFJA8CCCCAAAIIIIAAAgggsIsL+G8iP6zI7v5nSw8IHBz62tXjHabO/8PFnm86IBAsf3Ha/26ltnVZxz+/HupxAF3vmzr/ut51mUF+XXU8DhD6S0j7CCCAAAIIIIAAAggggMAQEThH15l1+ovL5drWGdJBHdxzso5vcamO8HLVhchfUif/hXyHX0kmZJ+9nh8E0PoqGZQa5aBrKunaXsiuN+3wT8g+azkhPwig9VU+plH5aQcBBBBAAAEEEEAAAQQQQGDoCYzXJW9RFDv++c8/CsWiTu14dW635Dq+tVZD5P/fAIA7+u7w+xqzAQCv5wcBtM9qVTWsA+7OvK67ZwBAy7X63JM/u3jnd5229cwK0NJ/GaBh+d0+BQEEEEAAAQQQQGDXEPCbvCkIIIDAYAQmaaf56Y5+FOCb6bpfAvhYut6RLkMsJqljO1/htoe1tbX15NdnvwQwZH41X5nVlrQdlySVW/WswzPFi9uaJE8Or1amlJK24ytJZYm295xkcb96PpdKJeWvztKxx2n9FsXKYjuqe1L7+Pn/47W+RNGw/MVcfEYAAQQQQAABBBDYeQV25C7RHrrseYoZCr+B+z7FxYr1ihhlXyXxm8iPVPj54z8oLlX8WxGzfEXJzlT8WnGRIkY5VEl87bXKIlXeXmtDg+tmq73TFaMVTyguUHjqc+hymRKM6SPJUtVnHdQ+dmlY9T5q6WzFNMV/FDcrfqbYpohRJiqJ//3578+vU/xCcaMiVhmuRK+nydQxTu6Mldh51Nl9U351eKPm9zl4BoCXW6qVHfnvqJuoq3hUwAfq2puSv66T5iAEEEAAAQQQQACBnVLAd/keUvh/QO9R/DFdf1zL3RShy0gl+Idis+JaxWKFz8V3Ij0YEau4E+gBD+eO1fH0tZ2Y5nxKSz93nY8v63PocqoSVBT+HdyhKCtWKvx7CV080JK/Xq+vUPh3cJUiRnm3kjyr2KRYpPCAiz1uUcQongLu7/5GxUKF7377+j0QFau4A+6cjmNjJc3yeADAHeC0RM/v88g/ApCdV8xldvExc5ILAQQQQAABBBBAYGgKuJPp//H/fu7yr0vrTsrVhVq9IM3lu9BZ+blWYndGFqY5nTfmAIDvvDvnOEXssrcSuvPpQZ9ssMcdT59P8D/Fphy1ygmqdP4zam0MUHd5ms+zT7Lifws+h09kFQGXN6S5pqc5PB3fM3B8R96DEzEKAwCaAZDNAogBXszBAEBRhM8IIIAAAggggAACAwnUe7c8u+PmTndWbkpXPppVBFx+Um3/S3FXLoc7pC4f6l0E/3mUMpysuDV4pu0T7JVWeep37PIlJXy74gcKP3rhcr3CszBiTX93znyZm36I9bs4XPl89/2B3EksSdePyNWFWp2phl9WdKUJ7L5A4U75nLSOBQIIIIAAAggggAACCCDwJoF6XwLo4zz9e3WuNU+Bdql3UKH36MH99CyDLF92RHbn85WsIuDS13+l4mnFZYqsA6rVKGVPZSkrdld8W+EBgeUKd4B9FzpkcefTOfzox0jFGMVKRWwDpewpHfr5KcXjCp9HjGJ7fwdKisy7M028NV2GWnjWxTsVfy0k8HfR5SO9C34igAACCCCAAAIIIIAAAuEErlLT7gydFC5Fny2P05bnFX4e31PUQ5fvKoGv1Z3hSel6zEcArlZO331/VfGsYpXC53Ozwp3SkOWfanyN4quK1xXOu0XxLUUzyiwl9TlcGDH5N9Kcp6Q5PQjhWRD2GJvWhVr49+sBiOcKCabpsx1+W6gP9dGzDZzPcWyoJH21q+nvvAMgfQagLyPqEUAAAQQQQAABBBAIJTBdDXcrfBc6uxOq1SjlDmVxJ+RZxcGK0GW0ErymcIfPpRkDANmd/tN6TyHxM+Cegm+Hz6d1oRYb1LAHHjwD5HOKYxTZS/imaj128UwMX/chkROfoXyeeu8BET+O8qLiaEWM8icl8TUfkEvmASjXdeXqQq4yAMA7AEJ+v2gbAQQQQAABBBBAoEUFfOdxo8J3ofdrwjl+UTmvUfiu6L0KP58estygxv3291FpkmYMAHxQuSem+bPFDK24A3htVhFouTnNMzvXvu8AO/eiXF2MVd8NX6NYGSNZLoc73p6C70GQyxV+F4YHhfzdcMc4dPmsEtj7acVFilsUDytc93tFjMIAAAMAMb5n5EAAAQQQQAABBBBoIQF3RDz9+xnF+5t8Xp6C7g7Q+QHPw3e7neMahe92O05VuM535f15D0Uzyv5K6vO4O3Byv3iwovC096y8SyvO/UhWEWnpF+45748j5XOaNoU7/6sV+d+17/77XH6iiFFOVJJliucVCxVHKpz/ekWMwgAAAwAxvmfkQAABBBBAAAEEEGgRgU/rPHzX/QnFeyOe0z7KdaZiViHnB/TZHaDfFeob+fE7aQ7n6Ss8CBCyvE2NH64YU0jiWQE+pzsL9Y3++Giapz3XsGddOLe/CzHLpUrmvB+LmPTANOc1NXKuVd1zNepjVJ2gJLa4MEYy5WAAgAGASF810iCAAAIIIIAAAgg0SsB3M+sp++ug6xR/V0xX+PnnWMUd4MsUXy8k9BvxXbp7F0F+3qhWZxQiO4/b0/o/B8n8/0Z9t/1BhTu/+TIu/fBUvjLAugcAXNwRzsp70pWY3wOnnKvwn8O73x8iFc9+cMm+b72fen/upoXfCxC6/FQJfllIMjP9vLRQz0cEEEAAAQQQQAABBBBAYIcE/Myx33juu87NKCuV9DXF+3LJL9G674DOy9XFWJ2U5p0fI1maw1PQNymy6x+mdT/77esPPQPBMy+cZ4EiK2drxXVnZRURlhPSnAsj5MqnsPU6xQbF6NyG7A78r3J1oVZvUsP2PipNsL+W/vfgwSe/FyFGYQYAMwBifM/IgQACCCCAAAIIINBkgX2V33dB3QH1M9/F8F3y0OV4JfCdfr+N3p0h3wF2h2i5YoQiZmnGAMBsXaAfv1ivsPdfFL7+KxUxyg1K4nx3Kdzh9e9ipSL/TLw+Bi3nq3Wfw5ygWWo3frKq/W9greIqxW8UWxX+fYxVhC6HKoEH4JzP3/+X089HaBmrMADAAECs7xp5EEAAAQQQQAABBBokUO8jALcp/92KVTXipQadW3/NeAaC73T7efcDFL6OCxWu26yIWTwIsVjhwYdYxR1v//UF/w7c4XRH9GuK0xUxyolK4rv971AcqHAn2PYeFIpV3AH19yDkOx/6upZF2nCM4h7FZMUYxQKFO+ahH8FQiuQxhfM/oPC7L5Yq3Pn3oyEUBBBAAAEEEEAAAQQQQAABBBBAoGECzABgBkDDvkw0hAACCCCAAAIIIBBHoN4ZAHHOjiwIIIAAAggggAACCCCAAAIIINAQAQYAGsJIIwgggAACCCCAAAIIIIAAAgi0tgADAK39++HsEEAAAQQQQAABBBBAAAEEEGiIAAMADWGkEQQQQAABBBBAAAEEEEAAAQRaW4ABgNb+/XB2CCCAAAIIIIAAAggggAACCDREgAGAhjDSCAIIIIAAAggggAACCCCAAAKtLcAAQGv/fjg7BFpVYKtObLWioni6CSe5tVqtrlY0K38TLpmUCCCAAAIIIIAAAggggAACCDRHYG+l/XBzUieJOv97K5qWv1nXTV4EEEAAAQQQQAABBOoVKNV74LokGVHu6OjS8Vs2lMvHTEgS3xGkIIAAAggggAACCCCAAAIIIIBACwq013tO5c7Oj+sW3GE+fmR7+9Sku/vuetvaWY6bmiR7asRkTlIqzdE5j1eMSs99jZYr5LG4miSL70+SV9N6FggggAACCCCAAAIIIIAAAgi0hEDdAwDq6HZk0wf0IoGOlriaQCcxPUmGb0uSM9Txn6cUI2ukGau6sdo+VyYbp1WrlwxLkiu6NDuixr5UIYAAAggggAACCCCAAAIIIBBdgJcADkB+RJKMrpRK96lz/0PtWqvzX2xhpPf1MT62uJHPCCCAAAIIIIAAAggggAACCDRDgAGAftTdge8olR7SbIdJ/exWc5OP8bEMAtTkoRIBBBBAAAEEEEAAAQQQQCCyAAMAfYBP17R/deBvVUe+7rv4PtZtuK0+0lCNAAIIIIAAAggggAACCCCAQBQBBgD6YPYz//Xc+S825zZ63h9Q3MBnBBBAAAEEEEAAAQQQQAABBCIKMABQA9tv+09f+Fdjax1VenlgT5t1HMohCCCAAAIIIIAAAggggAACCDRCgAGAGoo9f+pvcC/8q3F0zaqRaZs1N1KJAAIIIIAAAggggAACCCCAQGgBBgBqCZdKc2pV71BdiDZ36IQ4GAEEEEAAAQQQQAABBBBAYCgJtBcvdl2SjOju7JxZSZKO4rb857Zq9XA9395TKm1tR6/q7Nwjv724rpGGcvvWrUv3TZLNxW0t+Hl8gHMK0WaA06RJBBBAAAEEEEAAAQQQQACBXVFguwGAckdHV1KtHqYp6/2WrPPvnUrV6rn97qyN3l9tL0vK5X7/pN5eSXWBcp+i3bc7t4FyDLC9W+dw9fqkdNoA+3nzqEHs81Z3CdHmWz0H9kcAAQQQQAABBBBAAAEEEBiiAts9AqDOd3coi8G0rX0OUv5Gd/59Se1p26Euj3YRQAABBBBAAAEEEEAAAQQQaFmB7Tra28rlGe3Dhk2vtLf3+wiAZgkcqZjXc2Wl0vf01vxH+7vKtu7ucve2bV397eNtryTJtL2SZJzu1m93bgMd2992Dz6sT5K/9bdPbtsarY/NfW7EqtukIIAAAggggAACCCCAAAIIINAUge062fslyevJtm1LFP2ekJ7571SnuqeUKpUHR3V339XvAYPeWKqoo75i0LuH2dH5GzoAIKsnw5wqrSKAAAIIIIAAAggggAACCCAwsMB2jwAMfMgQ2KNaXdzoq6xWq7c1uk3aQwABBBBAAAEEEEAAAQQQQGCwAgwA1JDS4wceANhYY1O9VRvTNus9nuMQQAABBBBAAAEEEEAAAQQQ2CEBBgBq8N2fJK/q/QaX1NhUX5Xa6mmzvqM5CgEEEEAAAQQQQAABBBBAAIEdFmAAoA/CYUlyhZ7bf6SPzYOudhtua9AHsCMCCCCAAAIIIIAAAggggAACAQQYAOgDtStJtpSr1bnqwK/uY5cBq32s23BbA+7MDggggAACCCCAAAIIIIAAAggEFGAAoB/cB3s78FPqmQngY9T5n+I2+knBJgQQQAABBBBAAAEEEEAAAQSiCDAAMACzO/Bt1eo0vRPgXO06mBcDbvS+PobO/wC4bEYAAQQQQAABBBBAAAEEEIgm0F5vJt3hLmfHVnLrWd2utOzqncJ/8dRqdb6ue05SKs3R9Y1XjEqvc42WK9TxX+y3/fPCv1SFBQIIIIAAAggggAACCCCAQMsIqD9bX1mXJCPKHR1dOvqNDeXyjAlJsrW+ljgKAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIF4Av8F3lCm8+nJd9oAAAAASUVORK5CYII=";class pr{map;options;contourCache;iconImagePromise;externalWindDataProvider;constructor(e,t,r){this.map=e,this.options=t,this.contourCache=new Map,this.iconImagePromise=null,this.externalWindDataProvider=r,this.add()}getClassName(){return this.options.id+"-windShaft"}normalizeUrls(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&!!t):typeof e=="string"&&e?[e]:[]}getComponentScope(){const e=this.options?.config??{},t=e.layerConfig??{},r=u=>{if(Array.isArray(u)&&u.length>=2){const l=Number(u[0]),d=Number(u[1]);if(Number.isFinite(l)&&Number.isFinite(d))return[l,d]}if(typeof u=="string"){const l=u.split(",").map(d=>Number(d.trim())).filter(d=>Number.isFinite(d));if(l.length>=2)return[l[0],l[1]]}},i=r(e.componentScope)??r(e.uvScope)??r(t.COMPONENT_SCALE_RANGE)??r(t.COMPONENT_SCOPE)??r(t.UV_SCOPE);if(i){const u=Number(i[0]),l=Number(i[1]);if(Number.isFinite(u)&&Number.isFinite(l)){const d=Math.max(Math.abs(u),Math.abs(l));return[-d,d]}}const o=[e?.scope?.[0],e?.scope?.[1]].map(u=>Math.abs(Number(u))).filter(u=>Number.isFinite(u)),s=o.length?Math.max(...o):60;return[-s,s]}getCacheKey(){const e=this.normalizeUrls(this.options?.url);return JSON.stringify({id:this.options?.id,urls:e,extent:this.options?.config?.extent,scope:this.getComponentScope()})}getRuntimeConfig(){return this.options.config}getVisibleWindSpeedScope(){const e=this.getRuntimeConfig();return ht(e.legend,e.legendScope)??e.scope}getWindShaftConfig(){const e=this.getRuntimeConfig(),t=e.windShaftConfig??{},r=e.gridConfig??{},i=(o,s)=>{const u=Number(o);return Number.isFinite(u)?u:s};return{pixelStep:Math.max(8,i(t.pixelStep??r.pixelStep??e.pixelStep,40)),fontSize:Math.max(10,i(t.fontSize??r.fontSize??e.fontSize,26)),color:String(t.color??e.color??"rgb(255,255,255)"),minWindSpeed:Math.max(0,i(t.minWindSpeed,.01)),speedLevelStep:Math.max(.1,i(t.speedLevelStep,2)),maxLevel:Math.max(1,Math.floor(i(t.maxLevel,30))),spriteCellSize:Math.max(1,Math.floor(i(t.spriteCellSize,32))),baseFontSize:Math.max(1,i(t.baseFontSize,32)),iconYOffsetRatio:Math.max(0,i(t.iconYOffsetRatio,.7)),firstRowMaxLevel:Math.max(0,Math.floor(i(t.firstRowMaxLevel,3))),firstRowStartX:Math.floor(i(t.firstRowStartX,28)),firstRowY:Math.floor(i(t.firstRowY,4)),secondRowOffsetX:Math.floor(i(t.secondRowOffsetX,4)),secondRowY:Math.floor(i(t.secondRowY,5))}}async getIconImage(){return this.iconImagePromise?this.iconImagePromise:(this.iconImagePromise=new Promise((e,t)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>e(r),r.onerror=()=>t(new Error("Failed to load wind shaft sprite image")),r.src=Ei}),this.iconImagePromise)}async getOrLoadWindData(){const e=this.getRuntimeConfig();if(!e?.extent)return null;const t=this.getCacheKey(),r=this.contourCache.get(t);if(r)return r;if(this.externalWindDataProvider){const A=await this.externalWindDataProvider();if(A)return this.contourCache.set(t,A),A}const i=this.normalizeUrls(this.options?.url);if(i.length<2)return null;const o=this.getComponentScope(),[s,u]=await Promise.all([rt(i[0],o,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1}),rt(i[1],o,void 0,this.options?.authorization,{detectNoDataByBorderColor:!1})]),l=Math.min(s?.width??0,u?.width??0),d=Math.min(s?.height??0,u?.height??0);if(!l||!d)return null;const f=new Float32Array(l*d),a=new Float32Array(l*d);for(let A=0;A<l*d;A++){const m=Number(s.grayArr[A]),C=Number(u.grayArr[A]);f[A]=Number.isFinite(m)?m:0,a[A]=Number.isFinite(C)?C:0}const D={width:l,height:d,u:f,v:a,extent:dt(e.extent)};return this.contourCache.set(t,D),D}createWindShaftSource(e,t){const r=this.getWindShaftConfig(),{pixelStep:i,fontSize:o,color:s,minWindSpeed:u,speedLevelStep:l,maxLevel:d,spriteCellSize:f,baseFontSize:a,iconYOffsetRatio:D,firstRowMaxLevel:A,firstRowStartX:m,firstRowY:C,secondRowOffsetX:v,secondRowY:E}=r,N=this.getVisibleWindSpeedScope(),T=document.createElement("canvas"),[O,I,F,b]=e.extent,S=F-O,y=b-I;return new Wt({projection:"EPSG:3857",ratio:1,interpolate:!1,canvasFunction:(x,L,X,R)=>{const g=R??[1,1],w=Math.max(1,Math.floor(g[0]??1)),B=Math.max(1,Math.floor(g[1]??1));T.width!==w&&(T.width=w),T.height!==B&&(T.height=B);const M=this.map.getSize(),H=Math.max(1,Math.floor(M?.[0]??w)),z=Math.max(1,Math.floor(M?.[1]??B)),k=w/H,Q=B/z,Z=(k+Q)*.5,J=T.getContext("2d",{alpha:!0});if(!J)return T;J.clearRect(0,0,w,B);const U=o/a*Z,W=f*U,_=f*U,[K,Y,re,ae]=x,$=re-K,ee=ae-Y;if($<=0||ee<=0||S<=0||y<=0)return T;const ce=Math.max(K,O),oe=Math.max(Y,I),ge=Math.min(re,F),ue=Math.min(ae,b);if(ce>=ge||oe>=ue)return T;const De=Math.max(1,H-1),ye=Math.max(1,z-1),fe=Math.max(8,Math.round(i)),be=Math.max(0,Math.floor((ce-K)/$*De)),te=Math.min(H-1,Math.ceil((ge-K)/$*De)),ie=Math.max(0,Math.floor((ae-ue)/ee*ye)),xe=Math.min(z-1,Math.ceil((ae-oe)/ee*ye));if(be>te||ie>xe)return T;for(let Be=ie;Be<=xe;Be+=fe)for(let Se=be;Se<=te;Se+=fe){const gt=K+$*Se/De,mt=ae-ee*Be/ye,Qe=(gt-O)/S*(e.width-1),At=(b-mt)/y*(e.height-1),ke=Vt(e.u,Qe,At,e.width,e.height),Me=Vt(e.v,Qe,At,e.width,e.height);if(!Number.isFinite(ke)||!Number.isFinite(Me))continue;const ot=Math.atan2(ke,Me)*(180/Math.PI),Oe=Math.sqrt(ke*ke+Me*Me);if(Oe<=u)continue;if(Array.isArray(N)&&N.length===2){const yt=Math.min(Number(N[0]),Number(N[1])),st=Math.max(Number(N[0]),Number(N[1]));if(Number.isFinite(yt)&&Number.isFinite(st)&&(Oe<yt||Oe>st))continue}const it=Math.min(Math.ceil(Oe/l),d-1);let pt=m+it,vt=C;it>A&&(pt=it-v,vt=E),J.save();const Dt=Se*k,Ie=Be*Q;J.translate(Dt,Ie),J.rotate(ot*Math.PI/180),J.drawImage(t,pt*f,vt*f,f,f,-W/2,-_*D,W,_),J.globalCompositeOperation="source-atop",J.fillStyle=s,J.fillRect(-W/2,-_*D,W,_),J.globalCompositeOperation="source-over",J.restore()}return T}})}async getSourceFromCache(){const e=this.getCacheKey(),t=this.contourCache.get(e);if(!t)return null;const r=await this.getIconImage();return this.createWindShaftSource(t,r)}async getSourceFromParams(){const e=await this.getOrLoadWindData();if(!e)return null;const t=await this.getIconImage();return this.createWindShaftSource(e,t)}async add(){const e=this.getRuntimeConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):1200,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const s=o?o.getZIndex():t+1,u=await this.getSourceFromCache()??await this.getSourceFromParams();if(!u)return;const l=new Nt({source:u,className:i,zIndex:s,opacity:r});this.map.addLayer(l)}delete(){Fe(this.map,this.getClassName()),this.contourCache.clear(),this.iconImagePromise=null}toggleVisible(e){pe(this.map,this.getClassName(),e)}async updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){await this.add();return}const r=await this.getSourceFromCache()??await this.getSourceFromParams();r&&t.setSource(r)}}class qn{map;options;constructor(e,t){this.map=e,this.options=t,this.add()}getClassName(){return this.options.id}getConfig(){return this.options?.config??{}}normalizeParamValue(e){if(e!=null)return Array.isArray(e)?e.join(","):typeof e=="boolean"?e?"true":"false":String(e)}buildWmsParams(){const t=this.getConfig().layerConfig??{},r={};return Object.keys(t).forEach(i=>{const o=this.normalizeParamValue(t[i]);typeof o<"u"&&(r[i]=o)}),r}splitUrlAndParams(e){const[t,r=""]=e.split("?"),i={};return r?(new URLSearchParams(r).forEach((s,u)=>{i[u]=s}),{baseUrl:t,urlParams:i}):{baseUrl:t,urlParams:i}}getTintColorRGB(){const t=(this.options?.config?.layerConfig??{}).TINTCOLOR;if(typeof t>"u"||t===null)return null;const r=String(t).trim();if(!r)return null;const i=r.replace(/^0x/i,"#"),o=i.startsWith("#")?i.slice(1):i;if(/^[0-9a-fA-F]{3}$/.test(o)){const u=parseInt(o[0]+o[0],16),l=parseInt(o[1]+o[1],16),d=parseInt(o[2]+o[2],16);return[u,l,d]}if(/^[0-9a-fA-F]{6}$/.test(o)){const u=parseInt(o.slice(0,2),16),l=parseInt(o.slice(2,4),16),d=parseInt(o.slice(4,6),16);return[u,l,d]}const s=r.split(",").map(u=>Number(u.trim()));return s.length===3&&s.every(u=>Number.isFinite(u)&&u>=0&&u<=255)?[Math.round(s[0]),Math.round(s[1]),Math.round(s[2])]:null}tintBlobToDataUrl(e,t){return new Promise((r,i)=>{const o=new Image,s=URL.createObjectURL(e);o.onload=()=>{const u=document.createElement("canvas");u.width=o.width,u.height=o.height;const l=u.getContext("2d",{willReadFrequently:!0});if(!l){URL.revokeObjectURL(s),i(new Error("Failed to create 2d context for tint"));return}l.clearRect(0,0,u.width,u.height),l.drawImage(o,0,0);const d=l.getImageData(0,0,u.width,u.height),f=d.data;for(let a=0;a<f.length;a+=4)(f[a+3]??0)!==0&&(f[a]=t[0],f[a+1]=t[1],f[a+2]=t[2]);l.putImageData(d,0,0),URL.revokeObjectURL(s),r(u.toDataURL("image/png"))},o.onerror=()=>{URL.revokeObjectURL(s),i(new Error("Failed to decode image for tint"))},o.src=s})}createSource(){const e=this.options?.url;if(!e)return null;const t=this.options?.authorization,r=this.getTintColorRGB(),{baseUrl:i,urlParams:o}=this.splitUrlAndParams(e),s={...o,...this.buildWmsParams()};return new _r.TileWMS({interpolate:!0,url:i,params:s,tileLoadFunction:(u,l)=>{const d=u.getImage();if(!t&&!r){d.src=l;return}fetch(l,{credentials:"include",headers:t?{Authorization:t}:void 0}).then(async f=>{const a=(f.headers.get("content-type")||"").toLowerCase();if(!f.ok){const D=await f.text();throw new Error(`WMS tile request failed: ${f.status} ${f.statusText}; ${D.slice(0,240)}`)}if(!a.includes("image/")){const D=await f.text();throw new Error(`WMS tile response is not image: ${a}; ${D.slice(0,240)}`)}return f.blob()}).then(async f=>{if(r){d.src=await this.tintBlobToDataUrl(f,r);return}const a=URL.createObjectURL(f);d.onload=()=>{URL.revokeObjectURL(a),d.onload=null,d.onerror=null},d.onerror=()=>{URL.revokeObjectURL(a),d.onload=null,d.onerror=null},d.src=a}).catch(f=>{console.error("[WmsLayer] tile load failed",{src:l,hasAuthorization:!!t,error:f}),d.src="data:image/gif;base64,R0lGODlhAQABAAAAACw="})}})}add(){const e=this.getConfig(),t=Number.isFinite(Number(e.zIndex))?Number(e.zIndex):10,r=Number.isFinite(Number(e.opacity))?Number(e.opacity):1,i=this.getClassName(),o=de(this.map,i);o&&this.delete();const s=o?o.getZIndex():t,u=this.createSource();if(!u)return;const l=new Kr({className:i,source:u,zIndex:s,opacity:r});this.map.addLayer(l)}delete(){Fe(this.map,this.getClassName())}toggleVisible(e){pe(this.map,this.getClassName(),e)}updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}};const t=de(this.map,this.getClassName());if(!t){this.add();return}const r=this.createSource();r&&t.setSource(r);const i=this.getConfig(),o=Number(i.zIndex),s=Number(i.opacity);Number.isFinite(o)&&t.setZIndex(o),Number.isFinite(s)&&t.setOpacity(s)}updateColor(e){const r={...this.options?.config?.layerConfig??{}};typeof e.styles<"u"&&(r.STYLES=e.styles),typeof e.colorScaleRange<"u"&&(r.COLORSCALERANGE=Array.isArray(e.colorScaleRange)?e.colorScaleRange.join(","):String(e.colorScaleRange)),typeof e.numColorBands<"u"&&(r.NUMCOLORBANDS=String(e.numColorBands)),typeof e.aboveMaxColor<"u"&&(r.ABOVEMAXCOLOR=e.aboveMaxColor),typeof e.belowMinColor<"u"&&(r.BELOWMINCOLOR=e.belowMinColor),typeof e.bgColor<"u"&&(r.BGCOLOR=e.bgColor),typeof e.logScale<"u"&&(r.LOGSCALE=typeof e.logScale=="boolean"?e.logScale?"true":"false":e.logScale),this.updateParams({...this.options,config:{...this.options.config,layerConfig:r}})}}function xi(n){return String(n??"").trim().replace(/\/+$/,"")}function Ni(n,e){const t=ve();return`${xi(e||t.typhoonServiceBaseUrl||t.serviceBaseUrl)}/${n.replace(/^\/+/,"")}`}async function Qn(n,e){const t=ve(),r=e?.authorization??t.typhoonAuthorization,i=await fetch(Ni(n,e?.serviceBaseUrl),{credentials:"include",signal:e?.signal,headers:r?{Authorization:r}:void 0}),o=(i.headers.get("content-type")||"").toLowerCase();if(!i.ok){const s=await i.text();throw new Error(`Typhoon request failed: ${i.status} ${i.statusText}; ${s.slice(0,240)}`)}if(!o.includes("application/json")&&!o.includes("+json")){const s=await i.text();throw new Error(`Typhoon response has invalid content type: ${o||"unknown"}; ${s.slice(0,240)}`)}return await i.json()}function kn(n){const e=n?.dataPath||ve().typhoonDataPath;return Qn(`fileServer/${e}/typhoon_list.json`,n)}function Gn(n,e){const t=e?.dataPath||ve().typhoonDataPath;return Qn(`fileServer/${t}/${n}.json`,e)}const Pi=["BABJ|WTPQ20","RJTD|WTPQ51","RJTD|WTPQ50"],Jr=["#d9480f","#1971c2","#2b8a3e","#862e9c","#0b7285","#c92a2a"],Ti={TD:"热带低压",TS:"热带风暴","TROPICAL STORM":"热带风暴",STS:"强热带风暴",TY:"台风",STY:"强台风",SuperTY:"超强台风"};function Rt(n){return Array.isArray(n)?n:Array.isArray(n?.points)?n.points:[]}function Li(n){return Number.isFinite(n?.lon)&&Number.isFinite(n?.lat)}function zt(n){return n.filter(Li).slice().sort((e,t)=>{const r=Date.parse(e.datetime||""),i=Date.parse(t.datetime||"");return Number.isFinite(r)&&Number.isFinite(i)&&r!==i?r-i:Number(e.validtime||0)-Number(t.validtime||0)})}class Vn{map;options;abortController;styleCache;constructor(e,t){this.map=e,this.options=t,this.abortController=null,this.styleCache=new globalThis.Map,this.add()}getClassName(){return this.options.id}getConfig(){return this.options.config?.typhoonConfig??{}}async add(){de(this.map,this.getClassName())&&this.delete(),this.abortController?.abort(),this.abortController=new AbortController;try{const t=await kn({serviceBaseUrl:this.getConfig().serviceBaseUrl,dataPath:this.getConfig().dataPath,authorization:this.options.authorization,signal:this.abortController.signal});if(this.abortController.signal.aborted)return;const r=this.getSelectedTyphoonNums(t),i=await Promise.all(r.map(o=>Gn(o,{serviceBaseUrl:this.getConfig().serviceBaseUrl,dataPath:this.getConfig().dataPath,authorization:this.options.authorization,signal:this.abortController?.signal})));if(this.abortController.signal.aborted)return;this.render(t,i)}catch(t){console.error("[TyphoonLayer] load failed",t)}}getSelectedTyphoonNums(e){const t=this.getConfig().typhoonNums?.filter(Boolean);if(t?.length)return t;const r=e[0],i=r?r.num_inati||r.num_nati:"";return i?[i]:[]}getPrimarySource(e,t){const r=t==="obs"?e.obs:e.fcst,i=Object.keys(r??{});return(this.getConfig().sourcePriority??Pi).find(s=>i.includes(s))??i[0]}getLastPoint(e){return e.length?e[e.length-1]:void 0}findForecastBasePoint(e,t){if(t)for(let r=e.length-1;r>=0;r--){const i=e[r];if(i.file_ts===t.file_ts||i.datetime===t.datetime)return i}}getForecastAnchorPoint(e,t,r,i){const o=r[0];if(!o)return;const s=zt(Rt(e.obs?.[t])),u=this.findForecastBasePoint(s,o);if(u)return u;const l=this.getLastPoint(s);if(l)return l;const d=i?zt(Rt(e.obs?.[i])):[];return this.findForecastBasePoint(d,o)??this.getLastPoint(d)}render(e,t){const r=Number.isFinite(Number(this.options.config?.zIndex))?Number(this.options.config.zIndex):30,i=de(this.map,this.getClassName());i&&this.delete();const o=i?i.getZIndex():r,s=new ct;t.forEach((l,d)=>{const f=e.find(a=>a.num_inati===l.typhoon_num);this.appendTyphoonFeatures(s,l,f,Jr[d%Jr.length])});const u=new Ke({className:this.getClassName(),source:s,zIndex:o,style:l=>this.createStyle(l)});this.map.addLayer(u),this.getConfig().fitToExtent!==!1&&!s.isEmpty()&&this.map.getView().fit(s.getExtent(),{padding:[80,80,80,80],duration:350,maxZoom:7})}appendTyphoonFeatures(e,t,r,i){const o=r?.name_cn||t.name_cn||t.name_en||t.typhoon_num,s=this.getPrimarySource(t,"obs");if(Object.entries(t.obs??{}).forEach(([d,f])=>{const a=zt(Rt(f));if(!a.length)return;const D=d===s;this.addLineFeature(e,a,{kind:"obs",sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num}),D&&this.addPointFeatures(e,a,{kind:"obs",sourceName:d,color:i,typhoonName:o,typhoonNum:t.typhoon_num})}),this.getConfig().showForecast===!1)return;const l=this.getPrimarySource(t,"fcst");Object.entries(t.fcst??{}).forEach(([d,f])=>{const a=zt(Rt(f));if(!a.length)return;const D=d===l,A=this.getForecastAnchorPoint(t,d,a,s),m=A?[A,...a]:a;this.addLineFeature(e,m,{kind:"fcst",sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num}),this.addForecastLabelFeature(e,a[a.length-1],{sourceName:d,color:i,isPrimary:D,typhoonName:o,typhoonNum:t.typhoon_num})})}addLineFeature(e,t,r){if(!(t.length<2))for(let i=1;i<t.length;i++){const o=t[i-1],s=t[i],u=new tr.LineString([at.fromLonLat([o.lon,o.lat]),at.fromLonLat([s.lon,s.lat])]);e.addFeature(new er({geometry:u,featureType:`${r.kind}-line`,grade:s.grade,...r}))}}addPointFeatures(e,t,r){t.forEach((i,o)=>{const s=o===t.length-1,u=new er({geometry:new tr.Point(at.fromLonLat([i.lon,i.lat])),featureType:s?"latest-point":"obs-point",datetime:i.datetime,grade:i.grade,windMax:i.wind_max_ms,pressure:i.prs_hpa,...r});e.addFeature(u)})}addForecastLabelFeature(e,t,r){const i=new er({geometry:new tr.Point(at.fromLonLat([t.lon,t.lat])),featureType:"fcst-label",datetime:t.datetime,grade:t.grade,windMax:t.wind_max_ms,pressure:t.prs_hpa,...r});e.addFeature(i)}createStyle(e){const t=String(e.get("featureType")||""),r=String(e.get("color")||"#d9480f"),i=String(e.get("sourceName")||""),o=String(e.get("grade")||""),s=String(e.get("typhoonName")||""),u=!!e.get("isPrimary"),l=[t,r,i,o,s,u].join("|"),d=this.styleCache.get(l);if(d)return d;const f=this.getGradeColor(o,r);let a;if(t==="obs-line")a=new V.Style({stroke:new V.Stroke({color:u?f:`${f}80`,width:u?3:1.5})});else if(t==="fcst-line")a=new V.Style({stroke:new V.Stroke({color:u?f:`${f}80`,width:u?2:1.25,lineDash:[8,8]})});else if(t==="fcst-label")a=new V.Style({image:new V.Circle({radius:u?4.5:3.5,fill:new V.Fill({color:f}),stroke:new V.Stroke({color:"#fff",width:1.5})}),text:new V.Text({text:i,font:u?"bold 12px sans-serif":"12px sans-serif",fill:new V.Fill({color:"#1f2937"}),stroke:new V.Stroke({color:"#fff",width:4}),offsetX:8,offsetY:-8,textAlign:"left"})});else{const D=t==="latest-point";a=new V.Style({image:new V.Circle({radius:D?6:4,fill:new V.Fill({color:f}),stroke:new V.Stroke({color:"#fff",width:D?2:1.5})}),text:D?new V.Text({text:s,font:"bold 13px sans-serif",fill:new V.Fill({color:"#1f2937"}),stroke:new V.Stroke({color:"#fff",width:4}),offsetY:-16}):void 0})}return this.styleCache.set(l,a),a}getGradeColor(e,t){const r=String(e||"").trim();if(!r)return t;const i=Ti[r]||r,o=this.options.config.legend.find(u=>u.name===i),s=this.options.config.legend.find(u=>u.name==="其他");return o?.color||s?.color||t}delete(){this.abortController?.abort(),Fe(this.map,this.getClassName())}toggleVisible(e){pe(this.map,this.getClassName(),e)}updateParams(e){this.options={...this.options,...e,config:{...this.options.config,...e?.config??{}}},this.add()}}const Fi={center:[118.7969,32.0603],zoom:5,layers:[]};function Si(n,e){e?.mapMethodsConfig&&tn(e.mapMethodsConfig);const t={...Fi,...e??{}};return new Promise(r=>{const i=new Un.Map({target:n,layers:[],view:new Wn({center:at.fromLonLat(t.center),zoom:t.zoom}),controls:[]});t.layers.forEach(o=>{jn(i,o)}),r(i)})}function de(n,e){return n.getLayers().getArray().find(r=>r.getClassName()===e)}function Fe(n,e){const t=de(n,e);t&&n.removeLayer(t)}function jn(n,e){const t=new Kr({className:e.id,source:new _r.XYZ({...e.source}),zIndex:e.zIndex??0});n.addLayer(t)}function Mi(n,e){Fe(n,e)}function pe(n,e,t){if(!n)return;const r=de(n,e);r&&r.setVisible(t)}const se=[];function Oi(n,e){if(!n)return;const t=Array.isArray(e.type)?e.type:[e.type];if(t.includes("gradual")){const r=new Br(n,e);if(se.push(r),t.includes("grid")){const i={...e,type:"grid"},o=new Gt(n,i,async()=>{const s=await r.getOrLoadContourData();return s?{rawArr2D:s.rawArr2D,extent:s.extent,width:s.width,height:s.height}:null});hr(e.id,o)}}else if(t.includes("uv")){const r=new zn(n,e);if(se.push(r),t.includes("grid")){const i={...e,type:"grid"},o=new Gt(n,i,async()=>{const s=await r.getOrLoadContourData();return s?{rawArr2D:s.rawArr2D,extent:s.extent,width:s.width,height:s.height}:null});hr(e.id,o)}if(t.includes("windShaft")){const i=new pr(n,e,async()=>r.getOrLoadWindVectorData());se.push(i)}}else if(t.includes("grid")){const r=new Gt(n,e);se.push(r)}else if(t.includes("arrow")){const r=new pn(n,e);se.push(r)}else if(t.includes("micaps")){const r=new Pn(n,e);se.push(r)}else if(t.includes("isoline")||t.includes("contour")){const r=new Rn(n,e);se.push(r)}else if(t.includes("wms")){const r=new qn(n,e);se.push(r)}else if(t.includes("typhoon")){const r=new Vn(n,e);se.push(r)}else if(t.includes("windShaft")){const r=new pr(n,e);se.push(r)}}function Ii(n){for(let t=se.length-1;t>=0;t--)se[t].options.id===n&&(se[t].delete(),se.splice(t,1));const e=_t(n);e&&(e.delete(),gn(n))}function Xi(){se.forEach(n=>{n.delete()}),mn(n=>{n.delete()}),An(),se.length=0}function Hi(n,e){se.filter(i=>i.options.id===n).forEach(i=>{i.toggleVisible(e)});const r=_t(n);r&&r.toggleVisible(e)}function Ri(n){const e=se.filter(r=>r.options.id===n.id);console.log("🚀 ~ updateLayer ~ layer:",se,n,e),e.forEach(r=>{r.updateParams(n)});const t=_t(n.id);t&&t.updateParams({...n,type:"grid"})}function zi(n,e){se.filter(r=>r.options.id===n).forEach(r=>{typeof r.updateColor=="function"&&r.updateColor(e)})}function qi(){return se}function Qi(){const n=new globalThis.Map;return se.forEach(e=>{const t=e?.options;!t?.id||n.has(t.id)||n.set(t.id,t)}),Array.from(n.values())}function ki(n,e,t,r,i=!1){if(!n)return Promise.resolve(null);const o=se.find(s=>s.options.id===e);return o&&typeof o.getValueByLonLat=="function"?o.getValueByLonLat(t,r,i):Promise.resolve(null)}exports.ArrowLayer=pn;exports.CommonMethods=Jn;exports.FcstLayer=Br;exports.GridLayer=Gt;exports.IsolineLayer=Rn;exports.MIC_FREEZING_RAIN_DEFAULTS=Te;exports.MIC_FROST_LINE_DEFAULTS=$e;exports.MicLayer=Pn;exports.TyphoonLayer=Vn;exports.WindLayer=zn;exports.WindShaft=pr;exports.WmsLayer=qn;exports.addIsolineLayer=On;exports.addTile=jn;exports.bboxFromLonlatTo3857=dt;exports.bilinearInterpolate=Vt;exports.clampByte=Ze;exports.clearAllLayers=Xi;exports.clearLinkedGridLayerMap=An;exports.configureMapMethods=tn;exports.convertContourGeoJSONTo3857=vo;exports.convertContourGeoJSONToLngLat=po;exports.createIsoline=In;exports.createMicContour=xn;exports.createTdsRequestUrl=rn;exports.deleteLinkedGridLayer=gn;exports.fetchExcel=no;exports.fetchImageBase64=on;exports.fetchTdsGet=Jt;exports.fetchTdsImageBase64=io;exports.fetchTdsResponse=Yt;exports.fetchTxtOrJson=ro;exports.fetchXMLFromUrl=nn;exports.fetchXmlData=vr;exports.forEachLinkedGridLayer=mn;exports.gaussianBlur2D=Kt;exports.generateLegend=Ce;exports.getContourParams=Pt;exports.getGrayDataFromImage=rt;exports.getLayerByClassName=de;exports.getLegendItemsByScope=br;exports.getLegendValueScope=ht;exports.getLinkedGridLayer=_t;exports.getLoadedLayerOptions=Qi;exports.getLoadedLayers=qi;exports.getMapMethodsConfig=ve;exports.getMenuList=fn;exports.getNCXmlData=ln;exports.getNodeData=lr;exports.getRasterRequestGeometry=wr;exports.getTyphoonDetail=Gn;exports.getTyphoonList=kn;exports.getUrlFromTime=cr;exports.getValueByLonLat=ki;exports.getVariableMinMax=Cr;exports.getWidthAndHeight=cn;exports.getXmlData=kt;exports.initMap=Si;exports.lerp=Et;exports.loadLayer=Oi;exports.mapValueToRGBA=yo;exports.normalizeSmoothnessLevel=_e;exports.parseAlpha=ar;exports.parseColorToRGBA=xt;exports.parseCssNumber=Je;exports.parseXML=jt;exports.pixelTo3857=un;exports.pixelToLngLat=an;exports.preloadIsoline=Bi;exports.preloadMicContours=oi;exports.removeIsolineLayer=Xn;exports.removeLayer=Fe;exports.removeLayerById=Ii;exports.removeMicContour=Nn;exports.removeTile=Mi;exports.renderFcstCanvasByWebGPU=dn;exports.resetMapMethodsConfig=Zn;exports.resolveLayerLoadOptions=Eo;exports.resolveSymFunction=Dr;exports.setLinkedGridLayer=hr;exports.smoothGridByLevel=yr;exports.toggleIsolineLayer=Hn;exports.toggleLayerShowHide=pe;exports.toggleVisibleById=Hi;exports.updateLayer=Ri;exports.updateWmsLayerColor=zi;
|