@genome-spy/core 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/index.js +224 -0
  2. package/dist/style.css +1 -0
  3. package/package.json +54 -0
  4. package/src/data/collector.js +178 -0
  5. package/src/data/collector.test.js +82 -0
  6. package/src/data/dataFlow.js +109 -0
  7. package/src/data/dataFlow.test.js +3 -0
  8. package/src/data/facetNode.js +17 -0
  9. package/src/data/flow.test.js +71 -0
  10. package/src/data/flowBatch.d.ts +40 -0
  11. package/src/data/flowNode.js +283 -0
  12. package/src/data/flowNode.test.js +49 -0
  13. package/src/data/flowOptimizer.js +117 -0
  14. package/src/data/flowOptimizer.test.js +192 -0
  15. package/src/data/flowTestUtils.js +63 -0
  16. package/src/data/formats/fasta.js +32 -0
  17. package/src/data/formats/fasta.test.js +26 -0
  18. package/src/data/sources/dataSource.js +22 -0
  19. package/src/data/sources/dataSourceFactory.js +24 -0
  20. package/src/data/sources/dataUtils.js +31 -0
  21. package/src/data/sources/dynamicCallbackSource.js +56 -0
  22. package/src/data/sources/dynamicSource.js +36 -0
  23. package/src/data/sources/inlineSource.js +69 -0
  24. package/src/data/sources/inlineSource.test.js +55 -0
  25. package/src/data/sources/namedSource.js +74 -0
  26. package/src/data/sources/sequenceSource.js +46 -0
  27. package/src/data/sources/sequenceSource.test.js +45 -0
  28. package/src/data/sources/urlSource.js +74 -0
  29. package/src/data/transforms/aggregate.js +69 -0
  30. package/src/data/transforms/clone.js +40 -0
  31. package/src/data/transforms/clone.test.js +10 -0
  32. package/src/data/transforms/coverage.js +187 -0
  33. package/src/data/transforms/coverage.test.js +122 -0
  34. package/src/data/transforms/filter.js +37 -0
  35. package/src/data/transforms/filter.test.js +17 -0
  36. package/src/data/transforms/filterScoredLabels.js +134 -0
  37. package/src/data/transforms/flattenCompressedExons.js +57 -0
  38. package/src/data/transforms/flattenDelimited.js +68 -0
  39. package/src/data/transforms/flattenDelimited.test.js +86 -0
  40. package/src/data/transforms/flattenSequence.js +39 -0
  41. package/src/data/transforms/flattenSequence.test.js +33 -0
  42. package/src/data/transforms/formula.js +39 -0
  43. package/src/data/transforms/formula.test.js +18 -0
  44. package/src/data/transforms/identifier.js +108 -0
  45. package/src/data/transforms/identifier.test.js +82 -0
  46. package/src/data/transforms/linearizeGenomicCoordinate.js +101 -0
  47. package/src/data/transforms/measureText.js +44 -0
  48. package/src/data/transforms/pileup.js +128 -0
  49. package/src/data/transforms/pileup.test.js +69 -0
  50. package/src/data/transforms/project.js +41 -0
  51. package/src/data/transforms/project.test.js +31 -0
  52. package/src/data/transforms/regexExtract.js +61 -0
  53. package/src/data/transforms/regexExtract.test.js +66 -0
  54. package/src/data/transforms/regexFold.js +141 -0
  55. package/src/data/transforms/regexFold.test.js +159 -0
  56. package/src/data/transforms/sample.js +101 -0
  57. package/src/data/transforms/sample.test.js +37 -0
  58. package/src/data/transforms/stack.js +137 -0
  59. package/src/data/transforms/stack.test.js +90 -0
  60. package/src/data/transforms/transformFactory.js +60 -0
  61. package/src/encoder/accessor.js +82 -0
  62. package/src/encoder/accessor.test.js +46 -0
  63. package/src/encoder/encoder.js +369 -0
  64. package/src/encoder/encoder.test.js +97 -0
  65. package/src/fonts/Lato-Regular.json +1267 -0
  66. package/src/fonts/Lato-Regular.png +0 -0
  67. package/src/fonts/OFL.txt +93 -0
  68. package/src/fonts/README.md +3 -0
  69. package/src/fonts/bmFont.d.ts +58 -0
  70. package/src/fonts/bmFontManager.js +357 -0
  71. package/src/fonts/bmFontMetrics.js +108 -0
  72. package/src/genome/genome.js +305 -0
  73. package/src/genome/genome.test.js +152 -0
  74. package/src/genome/genomeStore.js +54 -0
  75. package/src/genome/locusFormat.js +31 -0
  76. package/src/genome/scaleIndex.js +199 -0
  77. package/src/genome/scaleIndex.test.js +61 -0
  78. package/src/genome/scaleLocus.js +112 -0
  79. package/src/genome/scaleLocus.test.js +3 -0
  80. package/src/genomeSpy.js +753 -0
  81. package/src/gl/arrayBuilder.js +199 -0
  82. package/src/gl/dataToVertices.js +621 -0
  83. package/src/gl/includes/common.glsl +63 -0
  84. package/src/gl/includes/fp64-arithmetic.glsl +187 -0
  85. package/src/gl/includes/fp64-utils.js +132 -0
  86. package/src/gl/includes/picking.fragment.glsl +3 -0
  87. package/src/gl/includes/picking.vertex.glsl +29 -0
  88. package/src/gl/includes/sampleFacet.glsl +107 -0
  89. package/src/gl/includes/scales.glsl +79 -0
  90. package/src/gl/includes/scales_fp64.glsl +30 -0
  91. package/src/gl/link.fragment.glsl +18 -0
  92. package/src/gl/link.vertex.glsl +111 -0
  93. package/src/gl/point.fragment.glsl +123 -0
  94. package/src/gl/point.vertex.glsl +128 -0
  95. package/src/gl/rect.fragment.glsl +51 -0
  96. package/src/gl/rect.vertex.glsl +114 -0
  97. package/src/gl/rule.fragment.glsl +52 -0
  98. package/src/gl/rule.vertex.glsl +89 -0
  99. package/src/gl/text.fragment.glsl +31 -0
  100. package/src/gl/text.vertex.glsl +246 -0
  101. package/src/gl/webGLHelper.js +490 -0
  102. package/src/img/bowtie.svg +1 -0
  103. package/src/img/genomespy-favicon.svg +34 -0
  104. package/src/index.html +11 -0
  105. package/src/index.js +151 -0
  106. package/src/marks/link.js +189 -0
  107. package/src/marks/mark.js +867 -0
  108. package/src/marks/markUtils.js +109 -0
  109. package/src/marks/pointMark.js +279 -0
  110. package/src/marks/rectMark.js +236 -0
  111. package/src/marks/rule.js +231 -0
  112. package/src/marks/text.js +274 -0
  113. package/src/options.d.ts +9 -0
  114. package/src/scale/colorUtils.js +184 -0
  115. package/src/scale/glslScaleGenerator.js +462 -0
  116. package/src/scale/scale.js +441 -0
  117. package/src/scale/scale.test.js +323 -0
  118. package/src/scale/ticks.js +198 -0
  119. package/src/scale/ticks.test.js +39 -0
  120. package/src/singlePageApp.js +13 -0
  121. package/src/spec/axis.d.ts +296 -0
  122. package/src/spec/channel.d.ts +127 -0
  123. package/src/spec/data.d.ts +185 -0
  124. package/src/spec/font.d.ts +15 -0
  125. package/src/spec/genome.d.ts +35 -0
  126. package/src/spec/mark.d.ts +432 -0
  127. package/src/spec/root.d.ts +22 -0
  128. package/src/spec/scale.d.ts +265 -0
  129. package/src/spec/tooltip.d.ts +9 -0
  130. package/src/spec/transform.d.ts +479 -0
  131. package/src/spec/view.d.ts +215 -0
  132. package/src/styles/genome-spy.scss +153 -0
  133. package/src/tooltip/dataTooltipHandler.js +59 -0
  134. package/src/tooltip/refseqGeneTooltipHandler.js +77 -0
  135. package/src/tooltip/tooltipHandler.ts +12 -0
  136. package/src/types/filetypes.d.ts +4 -0
  137. package/src/types/flatqueue.d.ts +53 -0
  138. package/src/types/glsl.d.ts +4 -0
  139. package/src/types/object.d.ts +21 -0
  140. package/src/types/vega-scale.d.ts +60 -0
  141. package/src/utils/animator.js +83 -0
  142. package/src/utils/arrayUtils.js +55 -0
  143. package/src/utils/binnedRangeIndex.js +83 -0
  144. package/src/utils/clamp.js +8 -0
  145. package/src/utils/cloner.js +32 -0
  146. package/src/utils/cloner.test.js +23 -0
  147. package/src/utils/coalesce.js +11 -0
  148. package/src/utils/coalesce.test.js +15 -0
  149. package/src/utils/concatIterables.js +26 -0
  150. package/src/utils/concatIterables.test.js +7 -0
  151. package/src/utils/debounce.js +37 -0
  152. package/src/utils/domainArray.js +224 -0
  153. package/src/utils/domainArray.test.js +129 -0
  154. package/src/utils/eerp.js +13 -0
  155. package/src/utils/expression.js +32 -0
  156. package/src/utils/field.js +28 -0
  157. package/src/utils/fisheye.js +60 -0
  158. package/src/utils/formatObject.js +31 -0
  159. package/src/utils/html.js +23 -0
  160. package/src/utils/html.test.js +13 -0
  161. package/src/utils/indexer.js +43 -0
  162. package/src/utils/indexer.test.js +46 -0
  163. package/src/utils/inertia.js +124 -0
  164. package/src/utils/interactionEvent.js +33 -0
  165. package/src/utils/iterateNestedMaps.js +21 -0
  166. package/src/utils/iterateNestedMaps.test.js +32 -0
  167. package/src/utils/kWayMerge.js +42 -0
  168. package/src/utils/kWayMerge.test.js +25 -0
  169. package/src/utils/layout/flexLayout.js +336 -0
  170. package/src/utils/layout/flexLayout.test.js +296 -0
  171. package/src/utils/layout/padding.js +107 -0
  172. package/src/utils/layout/point.js +23 -0
  173. package/src/utils/layout/rectangle.js +282 -0
  174. package/src/utils/layout/rectangle.test.js +171 -0
  175. package/src/utils/mergeObjects.js +99 -0
  176. package/src/utils/mergeObjects.test.js +41 -0
  177. package/src/utils/numberExtractor.js +24 -0
  178. package/src/utils/numberExtractor.test.js +5 -0
  179. package/src/utils/point.js +14 -0
  180. package/src/utils/propertyCacher.js +70 -0
  181. package/src/utils/propertyCacher.test.js +84 -0
  182. package/src/utils/propertyCoalescer.js +37 -0
  183. package/src/utils/propertyCoalescer.test.js +21 -0
  184. package/src/utils/reservationMap.js +103 -0
  185. package/src/utils/reservationMap.test.js +19 -0
  186. package/src/utils/scaleNull.js +19 -0
  187. package/src/utils/setOperations.js +75 -0
  188. package/src/utils/smoothstep.js +10 -0
  189. package/src/utils/throttle.js +34 -0
  190. package/src/utils/topK.js +76 -0
  191. package/src/utils/topK.test.js +63 -0
  192. package/src/utils/transition.js +74 -0
  193. package/src/utils/ui/tooltip.js +189 -0
  194. package/src/utils/url.js +22 -0
  195. package/src/utils/variableTools.js +24 -0
  196. package/src/utils/variableTools.test.js +12 -0
  197. package/src/view/axisResolution.js +135 -0
  198. package/src/view/axisResolution.test.js +200 -0
  199. package/src/view/axisView.js +746 -0
  200. package/src/view/channel.js +5 -0
  201. package/src/view/concatView.js +296 -0
  202. package/src/view/containerView.js +141 -0
  203. package/src/view/decoratorView.js +510 -0
  204. package/src/view/facetView.js +488 -0
  205. package/src/view/flowBuilder.js +362 -0
  206. package/src/view/flowBuilder.test.js +124 -0
  207. package/src/view/importView.js +19 -0
  208. package/src/view/layerView.js +60 -0
  209. package/src/view/rendering.d.ts +44 -0
  210. package/src/view/renderingContext/compositeViewRenderingContext.js +51 -0
  211. package/src/view/renderingContext/deferredViewRenderingContext.js +174 -0
  212. package/src/view/renderingContext/layoutRecorderViewRenderingContext.js +128 -0
  213. package/src/view/renderingContext/simpleViewRenderingContext.js +62 -0
  214. package/src/view/renderingContext/svgViewRenderingContext.js +121 -0
  215. package/src/view/renderingContext/viewRenderingContext.js +41 -0
  216. package/src/view/scaleResolution.js +756 -0
  217. package/src/view/scaleResolution.test.js +571 -0
  218. package/src/view/scaleResolutionApi.d.ts +40 -0
  219. package/src/view/testUtils.js +48 -0
  220. package/src/view/unitView.js +368 -0
  221. package/src/view/view.js +589 -0
  222. package/src/view/view.test.js +213 -0
  223. package/src/view/viewContext.d.ts +57 -0
  224. package/src/view/viewFactory.js +179 -0
  225. package/src/view/viewFactory.test.js +16 -0
  226. package/src/view/viewUtils.js +420 -0
package/dist/index.js ADDED
@@ -0,0 +1,224 @@
1
+ var SC=Object.defineProperty,MC=Object.defineProperties;var BC=Object.getOwnPropertyDescriptors;var Gh=Object.getOwnPropertySymbols;var FC=Object.prototype.hasOwnProperty,IC=Object.prototype.propertyIsEnumerable;var Hh=(Z,V,Me)=>V in Z?SC(Z,V,{enumerable:!0,configurable:!0,writable:!0,value:Me}):Z[V]=Me,T=(Z,V)=>{for(var Me in V||(V={}))FC.call(V,Me)&&Hh(Z,Me,V[Me]);if(Gh)for(var Me of Gh(V))IC.call(V,Me)&&Hh(Z,Me,V[Me]);return Z},Se=(Z,V)=>MC(Z,BC(V));(function(Z,V){typeof exports=="object"&&typeof module!="undefined"?V(exports):typeof define=="function"&&define.amd?define(["exports"],V):(Z=typeof globalThis!="undefined"?globalThis:Z||self,V(Z.genomeSpyEmbed={}))})(this,function(Z){"use strict";function V(t,e,n){return t.fields=e||[],t.fname=n,t}function Me(t){return t==null?null:t.fname}function ru(t){return t==null?null:t.fields}function Vh(t){return t.length===1?Qh(t[0]):jh(t)}const Qh=t=>function(e){return e[t]},jh=t=>{const e=t.length;return function(n){for(let r=0;r<e;++r)n=n[t[r]];return n}};function W(t){throw Error(t)}function Yh(t){const e=[],n=t.length;let r=null,i=0,s="",o,a,u;t=t+"";function c(){e.push(s+t.substring(o,a)),s="",o=a+1}for(o=a=0;a<n;++a)if(u=t[a],u==="\\")s+=t.substring(o,a),s+=t.substring(++a,++a),o=a;else if(u===r)c(),r=null,i=-1;else{if(r)continue;o===i&&u==='"'||o===i&&u==="'"?(o=a+1,r=u):u==="."&&!i?a>o?c():o=a+1:u==="["?(a>o&&c(),i=o=a+1):u==="]"&&(i||W("Access path missing open bracket: "+t),i>0&&c(),i=0,o=a+1)}return i&&W("Access path missing closing bracket: "+t),r&&W("Access path missing closing quote: "+t),a>o&&(a++,c()),e}function Or(t,e,n){const r=Yh(t);return t=r.length===1?r[0]:t,V((n&&n.get||Vh)(r),[t],e||t)}Or("id");const zr=V(t=>t,[],"identity");V(()=>0,[],"zero"),V(()=>1,[],"one"),V(()=>!0,[],"true"),V(()=>!1,[],"false");var Be=Array.isArray;function Te(t){return t===Object(t)}function Pe(t){return t[t.length-1]}function In(t){return t==null||t===""?null:+t}const iu=t=>e=>t*Math.exp(e),su=t=>e=>Math.log(t*e),Wh=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),Xh=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,Ur=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function fs(t,e,n,r){const i=n(t[0]),s=n(Pe(t)),o=(s-i)*e;return[r(i-o),r(s-o)]}function Zh(t,e){return fs(t,e,In,zr)}function Kh(t,e){var n=Math.sign(t[0]);return fs(t,e,su(n),iu(n))}function qh(t,e,n){return fs(t,e,Ur(n),Ur(1/n))}function Gr(t,e,n,r,i){const s=r(t[0]),o=r(Pe(t)),a=e!=null?r(e):(s+o)/2;return[i(a+(s-a)*n),i(a+(o-a)*n)]}function ls(t,e,n){return Gr(t,e,n,In,zr)}function ou(t,e,n){const r=Math.sign(t[0]);return Gr(t,e,n,su(r),iu(r))}function hs(t,e,n,r){return Gr(t,e,n,Ur(r),Ur(1/r))}function Jh(t,e,n,r){return Gr(t,e,n,Wh(r),Xh(r))}function ds(t){return t!=null?Be(t)?t:[t]:[]}function _h(t,e,n){let r=t[0],i=t[1],s;return i<r&&(s=i,i=r,r=s),s=i-r,s>=n-e?[e,n]:[r=Math.min(Math.max(r,e),n-s),r+s]}function ge(t){return typeof t=="function"}const $h="descending";function au(t,e,n){n=n||{},e=ds(e)||[];const r=[],i=[],s={},o=n.comparator||ed;return ds(t).forEach((a,u)=>{a!=null&&(r.push(e[u]===$h?-1:1),i.push(a=ge(a)?a:Or(a,null,n)),(ru(a)||[]).forEach(c=>s[c]=1))}),i.length===0?null:V(o(i,r),Object.keys(s))}const uu=(t,e)=>(t<e||t==null)&&e!=null?-1:(t>e||e==null)&&t!=null?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e===e?-1:e!==e&&t===t?1:0),ed=(t,e)=>t.length===1?td(t[0],e[0]):nd(t,e,t.length),td=(t,e)=>function(n,r){return uu(t(n),t(r))*e},nd=(t,e,n)=>(e.push(0),function(r,i){let s,o=0,a=-1;for(;o===0&&++a<n;)s=t[a],o=uu(s(r),s(i));return o*e[a]});function rd(t){return ge(t)?t:()=>t}function ps(t){for(let e,n,r=1,i=arguments.length;r<i;++r){e=arguments[r];for(n in e)t[n]=e[n]}return t}const id=Object.prototype.hasOwnProperty;function Pt(t,e){return id.call(t,e)}function gs(t){return typeof t=="boolean"}function sd(t){return Object.prototype.toString.call(t)==="[object Date]"}function od(t){return t&&ge(t[Symbol.iterator])}function me(t){return typeof t=="number"}function q(t){return typeof t=="string"}function ad(t,e){const n=t[0],r=Pe(t),i=+e;return i?i===1?r:n+i*(r-n):n}function Hr(t){return t&&Pe(t)-t[0]||0}function Vr(t){return Be(t)?"["+t.map(Vr)+"]":Te(t)||q(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function ud(t){return t==null||t===""?null:!t||t==="false"||t==="0"?!1:!!t}const cd=t=>me(t)||sd(t)?t:Date.parse(t);function fd(t,e){return e=e||cd,t==null||t===""?null:e(t)}function ld(t){return t==null||t===""?null:t+""}function Qr(t){const e={},n=t.length;for(let r=0;r<n;++r)e[t[r]]=!0;return e}var cu={},ms={},As=34,Tn=10,xs=13;function fu(t){return new Function("d","return {"+t.map(function(e,n){return JSON.stringify(e)+": d["+n+'] || ""'}).join(",")+"}")}function hd(t,e){var n=fu(t);return function(r,i){return e(n(r),i,t)}}function lu(t){var e=Object.create(null),n=[];return t.forEach(function(r){for(var i in r)i in e||n.push(e[i]=i)}),n}function Ae(t,e){var n=t+"",r=n.length;return r<e?new Array(e-r+1).join(0)+n:n}function dd(t){return t<0?"-"+Ae(-t,6):t>9999?"+"+Ae(t,6):Ae(t,4)}function pd(t){var e=t.getUTCHours(),n=t.getUTCMinutes(),r=t.getUTCSeconds(),i=t.getUTCMilliseconds();return isNaN(t)?"Invalid Date":dd(t.getUTCFullYear())+"-"+Ae(t.getUTCMonth()+1,2)+"-"+Ae(t.getUTCDate(),2)+(i?"T"+Ae(e,2)+":"+Ae(n,2)+":"+Ae(r,2)+"."+Ae(i,3)+"Z":r?"T"+Ae(e,2)+":"+Ae(n,2)+":"+Ae(r,2)+"Z":n||e?"T"+Ae(e,2)+":"+Ae(n,2)+"Z":"")}function hu(t){var e=new RegExp('["'+t+`
2
+ \r]`),n=t.charCodeAt(0);function r(f,h){var p,d,g=i(f,function(m,A){if(p)return p(m,A-1);d=m,p=h?hd(m,h):fu(m)});return g.columns=d||[],g}function i(f,h){var p=[],d=f.length,g=0,m=0,A,b=d<=0,y=!1;f.charCodeAt(d-1)===Tn&&--d,f.charCodeAt(d-1)===xs&&--d;function v(){if(b)return ms;if(y)return y=!1,cu;var C,B=g,I;if(f.charCodeAt(B)===As){for(;g++<d&&f.charCodeAt(g)!==As||f.charCodeAt(++g)===As;);return(C=g)>=d?b=!0:(I=f.charCodeAt(g++))===Tn?y=!0:I===xs&&(y=!0,f.charCodeAt(g)===Tn&&++g),f.slice(B+1,C-1).replace(/""/g,'"')}for(;g<d;){if((I=f.charCodeAt(C=g++))===Tn)y=!0;else if(I===xs)y=!0,f.charCodeAt(g)===Tn&&++g;else if(I!==n)continue;return f.slice(B,C)}return b=!0,f.slice(B,d)}for(;(A=v())!==ms;){for(var D=[];A!==cu&&A!==ms;)D.push(A),A=v();h&&(D=h(D,m++))==null||p.push(D)}return p}function s(f,h){return f.map(function(p){return h.map(function(d){return l(p[d])}).join(t)})}function o(f,h){return h==null&&(h=lu(f)),[h.map(l).join(t)].concat(s(f,h)).join(`
3
+ `)}function a(f,h){return h==null&&(h=lu(f)),s(f,h).join(`
4
+ `)}function u(f){return f.map(c).join(`
5
+ `)}function c(f){return f.map(l).join(t)}function l(f){return f==null?"":f instanceof Date?pd(f):e.test(f+="")?'"'+f.replace(/"/g,'""')+'"':f}return{parse:r,parseRows:i,format:o,formatBody:a,formatRows:u,formatRow:c,formatValue:l}}var gd=hu(" "),md=gd.parseRows;function Ad(t){return t}function xd(t){if(t==null)return Ad;var e,n,r=t.scale[0],i=t.scale[1],s=t.translate[0],o=t.translate[1];return function(a,u){u||(e=n=0);var c=2,l=a.length,f=new Array(l);for(f[0]=(e+=a[0])*r+s,f[1]=(n+=a[1])*i+o;c<l;)f[c]=a[c],++c;return f}}function yd(t,e){for(var n,r=t.length,i=r-e;i<--r;)n=t[i],t[i++]=t[r],t[r]=n}function bd(t,e){return typeof e=="string"&&(e=t.objects[e]),e.type==="GeometryCollection"?{type:"FeatureCollection",features:e.geometries.map(function(n){return du(t,n)})}:du(t,e)}function du(t,e){var n=e.id,r=e.bbox,i=e.properties==null?{}:e.properties,s=pu(t,e);return n==null&&r==null?{type:"Feature",properties:i,geometry:s}:r==null?{type:"Feature",id:n,properties:i,geometry:s}:{type:"Feature",id:n,bbox:r,properties:i,geometry:s}}function pu(t,e){var n=xd(t.transform),r=t.arcs;function i(l,f){f.length&&f.pop();for(var h=r[l<0?~l:l],p=0,d=h.length;p<d;++p)f.push(n(h[p],p));l<0&&yd(f,d)}function s(l){return n(l)}function o(l){for(var f=[],h=0,p=l.length;h<p;++h)i(l[h],f);return f.length<2&&f.push(f[0]),f}function a(l){for(var f=o(l);f.length<4;)f.push(f[0]);return f}function u(l){return l.map(a)}function c(l){var f=l.type,h;switch(f){case"GeometryCollection":return{type:f,geometries:l.geometries.map(c)};case"Point":h=s(l.coordinates);break;case"MultiPoint":h=l.coordinates.map(s);break;case"LineString":h=o(l.arcs);break;case"MultiLineString":h=l.arcs.map(o);break;case"Polygon":h=u(l.arcs);break;case"MultiPolygon":h=l.arcs.map(u);break;default:return null}return{type:f,coordinates:h}}return c(e)}function wd(t,e){var n={},r={},i={},s=[],o=-1;e.forEach(function(c,l){var f=t.arcs[c<0?~c:c],h;f.length<3&&!f[1][0]&&!f[1][1]&&(h=e[++o],e[o]=c,e[l]=h)}),e.forEach(function(c){var l=a(c),f=l[0],h=l[1],p,d;if(p=i[f])if(delete i[p.end],p.push(c),p.end=h,d=r[h]){delete r[d.start];var g=d===p?p:p.concat(d);r[g.start=p.start]=i[g.end=d.end]=g}else r[p.start]=i[p.end]=p;else if(p=r[h])if(delete r[p.start],p.unshift(c),p.start=f,d=i[f]){delete i[d.end];var m=d===p?p:d.concat(p);r[m.start=d.start]=i[m.end=p.end]=m}else r[p.start]=i[p.end]=p;else p=[c],r[p.start=f]=i[p.end=h]=p});function a(c){var l=t.arcs[c<0?~c:c],f=l[0],h;return t.transform?(h=[0,0],l.forEach(function(p){h[0]+=p[0],h[1]+=p[1]})):h=l[l.length-1],c<0?[h,f]:[f,h]}function u(c,l){for(var f in c){var h=c[f];delete l[h.start],delete h.start,delete h.end,h.forEach(function(p){n[p<0?~p:p]=1}),s.push(h)}}return u(i,r),u(r,i),e.forEach(function(c){n[c<0?~c:c]||s.push([c])}),s}function vd(t){return pu(t,Ed.apply(this,arguments))}function Ed(t,e,n){var r,i,s;if(arguments.length>1)r=Cd(t,e,n);else for(i=0,r=new Array(s=t.arcs.length);i<s;++i)r[i]=i;return{type:"MultiLineString",arcs:wd(t,r)}}function Cd(t,e,n){var r=[],i=[],s;function o(f){var h=f<0?~f:f;(i[h]||(i[h]=[])).push({i:f,g:s})}function a(f){f.forEach(o)}function u(f){f.forEach(a)}function c(f){f.forEach(u)}function l(f){switch(s=f,f.type){case"GeometryCollection":f.geometries.forEach(l);break;case"LineString":a(f.arcs);break;case"MultiLineString":case"Polygon":u(f.arcs);break;case"MultiPolygon":c(f.arcs);break}}return l(e),i.forEach(n==null?function(f){r.push(f[0].i)}:function(f){n(f[0].g,f[f.length-1].g)&&r.push(f[0].i)}),r}function ys(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function bs(t){let e=t,n=t;t.length===1&&(e=(o,a)=>t(o)-a,n=Dd(t));function r(o,a,u,c){for(u==null&&(u=0),c==null&&(c=o.length);u<c;){const l=u+c>>>1;n(o[l],a)<0?u=l+1:c=l}return u}function i(o,a,u,c){for(u==null&&(u=0),c==null&&(c=o.length);u<c;){const l=u+c>>>1;n(o[l],a)>0?c=l:u=l+1}return u}function s(o,a,u,c){u==null&&(u=0),c==null&&(c=o.length);const l=r(o,a,u,c-1);return l>u&&e(o[l-1],a)>-e(o[l],a)?l-1:l}return{left:r,center:s,right:i}}function Dd(t){return(e,n)=>ys(t(e),n)}function gu(t){return t===null?NaN:+t}const ws=bs(ys).right;bs(gu).center;var Pn=ws,vs=Math.sqrt(50),Es=Math.sqrt(10),Cs=Math.sqrt(2);function Ds(t,e,n){var r,i=-1,s,o,a;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((r=e<t)&&(s=t,t=e,e=s),(a=mu(t,e,n))===0||!isFinite(a))return[];if(a>0){let u=Math.round(t/a),c=Math.round(e/a);for(u*a<t&&++u,c*a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)*a}else{a=-a;let u=Math.round(t*a),c=Math.round(e*a);for(u/a<t&&++u,c/a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)/a}return r&&o.reverse(),o}function mu(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),s=r/Math.pow(10,i);return i>=0?(s>=vs?10:s>=Es?5:s>=Cs?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(s>=vs?10:s>=Es?5:s>=Cs?2:1)}function jr(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),s=r/i;return s>=vs?i*=10:s>=Es?i*=5:s>=Cs&&(i*=2),e<t?-i:i}function Sd(t,e,n=gu){if(!!(r=t.length)){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,s=Math.floor(i),o=+n(t[s],s,t),a=+n(t[s+1],s+1,t);return o+(a-o)*(i-s)}}function Md(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,s=new Array(i);++r<i;)s[r]=t+r*n;return s}function Bd(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Yr(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function en(t){return t=Yr(Math.abs(t)),t?t[1]:NaN}function Fd(t,e){return function(n,r){for(var i=n.length,s=[],o=0,a=t[0],u=0;i>0&&a>0&&(u+a+1>r&&(a=Math.max(1,r-u)),s.push(n.substring(i-=a,i+a)),!((u+=a+1)>r));)a=t[o=(o+1)%t.length];return s.reverse().join(e)}}function Id(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var Td=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tn(t){if(!(e=Td.exec(t)))throw new Error("invalid format: "+t);var e;return new Ss({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}tn.prototype=Ss.prototype;function Ss(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}Ss.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Pd(t){e:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break e;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var Au;function Ld(t,e){var n=Yr(t,e);if(!n)return t+"";var r=n[0],i=n[1],s=i-(Au=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return s===o?r:s>o?r+new Array(s-o+1).join("0"):s>0?r.slice(0,s)+"."+r.slice(s):"0."+new Array(1-s).join("0")+Yr(t,Math.max(0,e+s-1))[0]}function xu(t,e){var n=Yr(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}var yu={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:Bd,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>xu(t*100,e),r:xu,s:Ld,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function bu(t){return t}var wu=Array.prototype.map,vu=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function Rd(t){var e=t.grouping===void 0||t.thousands===void 0?bu:Fd(wu.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",s=t.numerals===void 0?bu:Id(wu.call(t.numerals,String)),o=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function c(f){f=tn(f);var h=f.fill,p=f.align,d=f.sign,g=f.symbol,m=f.zero,A=f.width,b=f.comma,y=f.precision,v=f.trim,D=f.type;D==="n"?(b=!0,D="g"):yu[D]||(y===void 0&&(y=12),v=!0,D="g"),(m||h==="0"&&p==="=")&&(m=!0,h="0",p="=");var C=g==="$"?n:g==="#"&&/[boxX]/.test(D)?"0"+D.toLowerCase():"",B=g==="$"?r:/[%p]/.test(D)?o:"",I=yu[D],P=/[defgprs%]/.test(D);y=y===void 0?6:/[gprs]/.test(D)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y));function X(E){var ae=C,U=B,pe,_t,Ue;if(D==="c")U=I(E)+U,E="";else{E=+E;var Ge=E<0||1/E<0;if(E=isNaN(E)?u:I(Math.abs(E),y),v&&(E=Pd(E)),Ge&&+E==0&&d!=="+"&&(Ge=!1),ae=(Ge?d==="("?d:a:d==="-"||d==="("?"":d)+ae,U=(D==="s"?vu[8+Au/3]:"")+U+(Ge&&d==="("?")":""),P){for(pe=-1,_t=E.length;++pe<_t;)if(Ue=E.charCodeAt(pe),48>Ue||Ue>57){U=(Ue===46?i+E.slice(pe+1):E.slice(pe))+U,E=E.slice(0,pe);break}}}b&&!m&&(E=e(E,1/0));var He=ae.length+E.length+U.length,K=He<A?new Array(A-He+1).join(h):"";switch(b&&m&&(E=e(K+E,K.length?A-U.length:1/0),K=""),p){case"<":E=ae+E+U+K;break;case"=":E=ae+K+E+U;break;case"^":E=K.slice(0,He=K.length>>1)+ae+E+U+K.slice(He);break;default:E=K+ae+E+U;break}return s(E)}return X.toString=function(){return f+""},X}function l(f,h){var p=c((f=tn(f),f.type="f",f)),d=Math.max(-8,Math.min(8,Math.floor(en(h)/3)))*3,g=Math.pow(10,-d),m=vu[8+d/3];return function(A){return p(g*A)+m}}return{format:c,formatPrefix:l}}var Wr,Xr,Ms;Nd({thousands:",",grouping:[3],currency:["$",""]});function Nd(t){return Wr=Rd(t),Xr=Wr.format,Ms=Wr.formatPrefix,Wr}function Eu(t){return Math.max(0,-en(Math.abs(t)))}function Cu(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(en(e)/3)))*3-en(Math.abs(t)))}function Du(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,en(e)-en(t))+1}var Bs=new Date,Fs=new Date;function ee(t,e,n,r){function i(s){return t(s=arguments.length===0?new Date:new Date(+s)),s}return i.floor=function(s){return t(s=new Date(+s)),s},i.ceil=function(s){return t(s=new Date(s-1)),e(s,1),t(s),s},i.round=function(s){var o=i(s),a=i.ceil(s);return s-o<a-s?o:a},i.offset=function(s,o){return e(s=new Date(+s),o==null?1:Math.floor(o)),s},i.range=function(s,o,a){var u=[],c;if(s=i.ceil(s),a=a==null?1:Math.floor(a),!(s<o)||!(a>0))return u;do u.push(c=new Date(+s)),e(s,a),t(s);while(c<s&&s<o);return u},i.filter=function(s){return ee(function(o){if(o>=o)for(;t(o),!s(o);)o.setTime(o-1)},function(o,a){if(o>=o)if(a<0)for(;++a<=0;)for(;e(o,-1),!s(o););else for(;--a>=0;)for(;e(o,1),!s(o););})},n&&(i.count=function(s,o){return Bs.setTime(+s),Fs.setTime(+o),t(Bs),t(Fs),Math.floor(n(Bs,Fs))},i.every=function(s){return s=Math.floor(s),!isFinite(s)||!(s>0)?null:s>1?i.filter(r?function(o){return r(o)%s==0}:function(o){return i.count(0,o)%s==0}):i}),i}var Is=ee(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});Is.every=function(t){return t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?ee(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):Is};var Ts=Is;const nt=1e3,Fe=nt*60,rt=Fe*60,Lt=rt*24,Ps=Lt*7,Su=Lt*30,Ls=Lt*365;var kd=ee(function(t){t.setTime(t-t.getMilliseconds())},function(t,e){t.setTime(+t+e*nt)},function(t,e){return(e-t)/nt},function(t){return t.getUTCSeconds()}),dt=kd,Od=ee(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*nt)},function(t,e){t.setTime(+t+e*Fe)},function(t,e){return(e-t)/Fe},function(t){return t.getMinutes()}),Rs=Od,zd=ee(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*nt-t.getMinutes()*Fe)},function(t,e){t.setTime(+t+e*rt)},function(t,e){return(e-t)/rt},function(t){return t.getHours()}),Ns=zd,Ud=ee(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Fe)/Lt,t=>t.getDate()-1),Rt=Ud;function Nt(t){return ee(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(e,n){e.setDate(e.getDate()+n*7)},function(e,n){return(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*Fe)/Ps})}var Zr=Nt(0),ks=Nt(1);Nt(2),Nt(3);var Ln=Nt(4);Nt(5),Nt(6);var Gd=ee(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12},function(t){return t.getMonth()}),Kr=Gd,Mu=ee(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});Mu.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:ee(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)})};var pt=Mu,Hd=ee(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Fe)},function(t,e){return(e-t)/Fe},function(t){return t.getUTCMinutes()}),Os=Hd,Vd=ee(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+e*rt)},function(t,e){return(e-t)/rt},function(t){return t.getUTCHours()}),zs=Vd,Qd=ee(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/Lt},function(t){return t.getUTCDate()-1}),kt=Qd;function Ot(t){return ee(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCDate(e.getUTCDate()+n*7)},function(e,n){return(n-e)/Ps})}var qr=Ot(0),Us=Ot(1);Ot(2),Ot(3);var Rn=Ot(4);Ot(5),Ot(6);var jd=ee(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12},function(t){return t.getUTCMonth()}),Jr=jd,Bu=ee(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});Bu.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:ee(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})};var gt=Bu;function Fu(t,e,n,r,i,s){const o=[[dt,1,nt],[dt,5,5*nt],[dt,15,15*nt],[dt,30,30*nt],[s,1,Fe],[s,5,5*Fe],[s,15,15*Fe],[s,30,30*Fe],[i,1,rt],[i,3,3*rt],[i,6,6*rt],[i,12,12*rt],[r,1,Lt],[r,2,2*Lt],[n,1,Ps],[e,1,Su],[e,3,3*Su],[t,1,Ls]];function a(c,l,f){const h=l<c;h&&([c,l]=[l,c]);const p=f&&typeof f.range=="function"?f:u(c,l,f),d=p?p.range(c,+l+1):[];return h?d.reverse():d}function u(c,l,f){const h=Math.abs(l-c)/f,p=bs(([,,m])=>m).right(o,h);if(p===o.length)return t.every(jr(c/Ls,l/Ls,f));if(p===0)return Ts.every(Math.max(jr(c,l,f),1));const[d,g]=o[h/o[p-1][2]<o[p][2]/h?p-1:p];return d.every(g)}return[a,u]}const[Yd,Wd]=Fu(gt,Jr,qr,kt,zs,Os),[Xd,Zd]=Fu(pt,Kr,Zr,Rt,Ns,Rs),Nn="year",kn="quarter",On="month",zn="week",Un="date",_r="day",Gs="dayofyear",Gn="hours",Hn="minutes",Vn="seconds",$r="milliseconds";[Nn,kn,On,zn,Un,_r,Gs,Gn,Hn,Vn,$r].reduce((t,e,n)=>(t[e]=1+n,t),{});const Kd={[Nn]:pt,[kn]:Kr.every(3),[On]:Kr,[zn]:Zr,[Un]:Rt,[_r]:Rt,[Gs]:Rt,[Gn]:Ns,[Hn]:Rs,[Vn]:dt,[$r]:Ts},qd={[Nn]:gt,[kn]:Jr.every(3),[On]:Jr,[zn]:qr,[Un]:kt,[_r]:kt,[Gs]:kt,[Gn]:zs,[Hn]:Os,[Vn]:dt,[$r]:Ts};function Jd(t){return Kd[t]}function _d(t){return qd[t]}function Hs(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Vs(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Qn(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function Iu(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,s=t.days,o=t.shortDays,a=t.months,u=t.shortMonths,c=jn(i),l=Yn(i),f=jn(s),h=Yn(s),p=jn(o),d=Yn(o),g=jn(a),m=Yn(a),A=jn(u),b=Yn(u),y={a:Ge,A:He,b:K,B:AC,c:null,d:ku,e:ku,f:wp,g:Tp,G:Lp,H:xp,I:yp,j:bp,L:Ou,m:vp,M:Ep,p:xC,q:yC,Q:Qu,s:ju,S:Cp,u:Dp,U:Sp,V:Mp,w:Bp,W:Fp,x:null,X:null,y:Ip,Y:Pp,Z:Rp,"%":Vu},v={a:bC,A:wC,b:vC,B:EC,c:null,d:Uu,e:Uu,f:zp,g:Zp,G:qp,H:Np,I:kp,j:Op,L:Gu,m:Up,M:Gp,p:CC,q:DC,Q:Qu,s:ju,S:Hp,u:Vp,U:Qp,V:jp,w:Yp,W:Wp,x:null,X:null,y:Xp,Y:Kp,Z:Jp,"%":Vu},D={a:X,A:E,b:ae,B:U,c:pe,d:Ru,e:Ru,f:pp,g:Lu,G:Pu,H:Nu,I:Nu,j:fp,L:dp,m:cp,M:lp,p:P,q:up,Q:mp,s:Ap,S:hp,u:rp,U:ip,V:sp,w:np,W:op,x:_t,X:Ue,y:Lu,Y:Pu,Z:ap,"%":gp};y.x=C(n,y),y.X=C(r,y),y.c=C(e,y),v.x=C(n,v),v.X=C(r,v),v.c=C(e,v);function C(M,L){return function(k){var w=[],ve=-1,H=0,Ce=M.length,De,$t,Uh;for(k instanceof Date||(k=new Date(+k));++ve<Ce;)M.charCodeAt(ve)===37&&(w.push(M.slice(H,ve)),($t=Tu[De=M.charAt(++ve)])!=null?De=M.charAt(++ve):$t=De==="e"?" ":"0",(Uh=L[De])&&(De=Uh(k,$t)),w.push(De),H=ve+1);return w.push(M.slice(H,ve)),w.join("")}}function B(M,L){return function(k){var w=Qn(1900,void 0,1),ve=I(w,M,k+="",0),H,Ce;if(ve!=k.length)return null;if("Q"in w)return new Date(w.Q);if("s"in w)return new Date(w.s*1e3+("L"in w?w.L:0));if(L&&!("Z"in w)&&(w.Z=0),"p"in w&&(w.H=w.H%12+w.p*12),w.m===void 0&&(w.m="q"in w?w.q:0),"V"in w){if(w.V<1||w.V>53)return null;"w"in w||(w.w=1),"Z"in w?(H=Vs(Qn(w.y,0,1)),Ce=H.getUTCDay(),H=Ce>4||Ce===0?Us.ceil(H):Us(H),H=kt.offset(H,(w.V-1)*7),w.y=H.getUTCFullYear(),w.m=H.getUTCMonth(),w.d=H.getUTCDate()+(w.w+6)%7):(H=Hs(Qn(w.y,0,1)),Ce=H.getDay(),H=Ce>4||Ce===0?ks.ceil(H):ks(H),H=Rt.offset(H,(w.V-1)*7),w.y=H.getFullYear(),w.m=H.getMonth(),w.d=H.getDate()+(w.w+6)%7)}else("W"in w||"U"in w)&&("w"in w||(w.w="u"in w?w.u%7:"W"in w?1:0),Ce="Z"in w?Vs(Qn(w.y,0,1)).getUTCDay():Hs(Qn(w.y,0,1)).getDay(),w.m=0,w.d="W"in w?(w.w+6)%7+w.W*7-(Ce+5)%7:w.w+w.U*7-(Ce+6)%7);return"Z"in w?(w.H+=w.Z/100|0,w.M+=w.Z%100,Vs(w)):Hs(w)}}function I(M,L,k,w){for(var ve=0,H=L.length,Ce=k.length,De,$t;ve<H;){if(w>=Ce)return-1;if(De=L.charCodeAt(ve++),De===37){if(De=L.charAt(ve++),$t=D[De in Tu?L.charAt(ve++):De],!$t||(w=$t(M,k,w))<0)return-1}else if(De!=k.charCodeAt(w++))return-1}return w}function P(M,L,k){var w=c.exec(L.slice(k));return w?(M.p=l.get(w[0].toLowerCase()),k+w[0].length):-1}function X(M,L,k){var w=p.exec(L.slice(k));return w?(M.w=d.get(w[0].toLowerCase()),k+w[0].length):-1}function E(M,L,k){var w=f.exec(L.slice(k));return w?(M.w=h.get(w[0].toLowerCase()),k+w[0].length):-1}function ae(M,L,k){var w=A.exec(L.slice(k));return w?(M.m=b.get(w[0].toLowerCase()),k+w[0].length):-1}function U(M,L,k){var w=g.exec(L.slice(k));return w?(M.m=m.get(w[0].toLowerCase()),k+w[0].length):-1}function pe(M,L,k){return I(M,e,L,k)}function _t(M,L,k){return I(M,n,L,k)}function Ue(M,L,k){return I(M,r,L,k)}function Ge(M){return o[M.getDay()]}function He(M){return s[M.getDay()]}function K(M){return u[M.getMonth()]}function AC(M){return a[M.getMonth()]}function xC(M){return i[+(M.getHours()>=12)]}function yC(M){return 1+~~(M.getMonth()/3)}function bC(M){return o[M.getUTCDay()]}function wC(M){return s[M.getUTCDay()]}function vC(M){return u[M.getUTCMonth()]}function EC(M){return a[M.getUTCMonth()]}function CC(M){return i[+(M.getUTCHours()>=12)]}function DC(M){return 1+~~(M.getUTCMonth()/3)}return{format:function(M){var L=C(M+="",y);return L.toString=function(){return M},L},parse:function(M){var L=B(M+="",!1);return L.toString=function(){return M},L},utcFormat:function(M){var L=C(M+="",v);return L.toString=function(){return M},L},utcParse:function(M){var L=B(M+="",!0);return L.toString=function(){return M},L}}}var Tu={"-":"",_:" ","0":"0"},te=/^\s*\d+/,$d=/^%/,ep=/[\\^$*+?|[\]().{}]/g;function R(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",s=i.length;return r+(s<n?new Array(n-s+1).join(e)+i:i)}function tp(t){return t.replace(ep,"\\$&")}function jn(t){return new RegExp("^(?:"+t.map(tp).join("|")+")","i")}function Yn(t){return new Map(t.map((e,n)=>[e.toLowerCase(),n]))}function np(t,e,n){var r=te.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function rp(t,e,n){var r=te.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function ip(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function sp(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function op(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Pu(t,e,n){var r=te.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Lu(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function ap(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function up(t,e,n){var r=te.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function cp(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ru(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function fp(t,e,n){var r=te.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Nu(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function lp(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function hp(t,e,n){var r=te.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function dp(t,e,n){var r=te.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function pp(t,e,n){var r=te.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function gp(t,e,n){var r=$d.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function mp(t,e,n){var r=te.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Ap(t,e,n){var r=te.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function ku(t,e){return R(t.getDate(),e,2)}function xp(t,e){return R(t.getHours(),e,2)}function yp(t,e){return R(t.getHours()%12||12,e,2)}function bp(t,e){return R(1+Rt.count(pt(t),t),e,3)}function Ou(t,e){return R(t.getMilliseconds(),e,3)}function wp(t,e){return Ou(t,e)+"000"}function vp(t,e){return R(t.getMonth()+1,e,2)}function Ep(t,e){return R(t.getMinutes(),e,2)}function Cp(t,e){return R(t.getSeconds(),e,2)}function Dp(t){var e=t.getDay();return e===0?7:e}function Sp(t,e){return R(Zr.count(pt(t)-1,t),e,2)}function zu(t){var e=t.getDay();return e>=4||e===0?Ln(t):Ln.ceil(t)}function Mp(t,e){return t=zu(t),R(Ln.count(pt(t),t)+(pt(t).getDay()===4),e,2)}function Bp(t){return t.getDay()}function Fp(t,e){return R(ks.count(pt(t)-1,t),e,2)}function Ip(t,e){return R(t.getFullYear()%100,e,2)}function Tp(t,e){return t=zu(t),R(t.getFullYear()%100,e,2)}function Pp(t,e){return R(t.getFullYear()%1e4,e,4)}function Lp(t,e){var n=t.getDay();return t=n>=4||n===0?Ln(t):Ln.ceil(t),R(t.getFullYear()%1e4,e,4)}function Rp(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+R(e/60|0,"0",2)+R(e%60,"0",2)}function Uu(t,e){return R(t.getUTCDate(),e,2)}function Np(t,e){return R(t.getUTCHours(),e,2)}function kp(t,e){return R(t.getUTCHours()%12||12,e,2)}function Op(t,e){return R(1+kt.count(gt(t),t),e,3)}function Gu(t,e){return R(t.getUTCMilliseconds(),e,3)}function zp(t,e){return Gu(t,e)+"000"}function Up(t,e){return R(t.getUTCMonth()+1,e,2)}function Gp(t,e){return R(t.getUTCMinutes(),e,2)}function Hp(t,e){return R(t.getUTCSeconds(),e,2)}function Vp(t){var e=t.getUTCDay();return e===0?7:e}function Qp(t,e){return R(qr.count(gt(t)-1,t),e,2)}function Hu(t){var e=t.getUTCDay();return e>=4||e===0?Rn(t):Rn.ceil(t)}function jp(t,e){return t=Hu(t),R(Rn.count(gt(t),t)+(gt(t).getUTCDay()===4),e,2)}function Yp(t){return t.getUTCDay()}function Wp(t,e){return R(Us.count(gt(t)-1,t),e,2)}function Xp(t,e){return R(t.getUTCFullYear()%100,e,2)}function Zp(t,e){return t=Hu(t),R(t.getUTCFullYear()%100,e,2)}function Kp(t,e){return R(t.getUTCFullYear()%1e4,e,4)}function qp(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Rn(t):Rn.ceil(t),R(t.getUTCFullYear()%1e4,e,4)}function Jp(){return"+0000"}function Vu(){return"%"}function Qu(t){return+t}function ju(t){return Math.floor(+t/1e3)}var nn,Qs,Yu,js,Wu;_p({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function _p(t){return nn=Iu(t),Qs=nn.format,Yu=nn.parse,js=nn.utcFormat,Wu=nn.utcParse,nn}function Wn(t){const e={};return n=>e[n]||(e[n]=t(n))}function $p(t,e){return n=>{const r=t(n),i=r.indexOf(e);if(i<0)return r;let s=eg(r,i);const o=s<r.length?r.slice(s):"";for(;--s>i;)if(r[s]!=="0"){++s;break}return r.slice(0,s)+o}}function eg(t,e){let n=t.lastIndexOf("e"),r;if(n>0)return n;for(n=t.length;--n>e;)if(r=t.charCodeAt(n),r>=48&&r<=57)return n+1}function tg(t){const e=Wn(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(r){const i=tn(r||",");if(i.precision==null){switch(i.precision=12,i.type){case"%":i.precision-=2;break;case"e":i.precision-=1;break}return $p(e(i),e(".1f")(1)[1])}else return e(i)},formatSpan(r,i,s,o){o=tn(o==null?",f":o);const a=jr(r,i,s),u=Math.max(Math.abs(r),Math.abs(i));let c;if(o.precision==null)switch(o.type){case"s":return isNaN(c=Cu(a,u))||(o.precision=c),n(o,u);case"":case"e":case"g":case"p":case"r":{isNaN(c=Du(a,u))||(o.precision=c-(o.type==="e"));break}case"f":case"%":{isNaN(c=Eu(a))||(o.precision=c-(o.type==="%")*2);break}}return e(o)}}}ng();function ng(){return tg({format:Xr,formatPrefix:Ms})}function Xu(t,e,n){n=n||{},Te(n)||W("Invalid time multi-format specifier: ".concat(n));const r=e(Vn),i=e(Hn),s=e(Gn),o=e(Un),a=e(zn),u=e(On),c=e(kn),l=e(Nn),f=t(n[$r]||".%L"),h=t(n[Vn]||":%S"),p=t(n[Hn]||"%I:%M"),d=t(n[Gn]||"%I %p"),g=t(n[Un]||n[_r]||"%a %d"),m=t(n[zn]||"%b %d"),A=t(n[On]||"%B"),b=t(n[kn]||"%B"),y=t(n[Nn]||"%Y");return v=>(r(v)<v?f:i(v)<v?h:s(v)<v?p:o(v)<v?d:u(v)<v?a(v)<v?g:m:l(v)<v?c(v)<v?A:b:y)(v)}function Zu(t){const e=Wn(t.format),n=Wn(t.utcFormat);return{timeFormat:r=>q(r)?e(r):Xu(e,Jd,r),utcFormat:r=>q(r)?n(r):Xu(n,_d,r),timeParse:Wn(t.parse),utcParse:Wn(t.utcParse)}}let Ys;rg();function rg(){return Ys=Zu({format:Qs,parse:Yu,utcFormat:js,utcParse:Wu})}function ig(t){return Zu(Iu(t))}function sg(t){return arguments.length?Ys=ig(t):Ys}const og=/^(data:|([A-Za-z]+:)?\/\/)/,ag=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ug=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Ku="file://";function cg(t,e){return n=>({options:n||{},sanitize:lg,load:fg,fileAccess:!!e,file:hg(e),http:pg(t)})}async function fg(t,e){const n=await this.sanitize(t,e),r=n.href;return n.localFile?this.file(r):this.http(r,e)}async function lg(t,e){e=ps({},this.options,e);const n=this.fileAccess,r={href:null};let i,s,o;const a=ag.test(t.replace(ug,""));(t==null||typeof t!="string"||!a)&&W("Sanitize failure, invalid URI: "+Vr(t));const u=og.test(t);return(o=e.baseURL)&&!u&&(!t.startsWith("/")&&!o.endsWith("/")&&(t="/"+t),t=o+t),s=(i=t.startsWith(Ku))||e.mode==="file"||e.mode!=="http"&&!u&&n,i?t=t.slice(Ku.length):t.startsWith("//")&&(e.defaultProtocol==="file"?(t=t.slice(2),s=!0):t=(e.defaultProtocol||"http")+":"+t),Object.defineProperty(r,"localFile",{value:!!s}),r.href=t,e.target&&(r.target=e.target+""),e.rel&&(r.rel=e.rel+""),e.context==="image"&&e.crossOrigin&&(r.crossOrigin=e.crossOrigin+""),r}function hg(t){return t?e=>new Promise((n,r)=>{t.readFile(e,(i,s)=>{i?r(i):n(s)})}):dg}async function dg(){W("No file system access.")}function pg(t){return t?async function(e,n){const r=ps({},this.options.http,n),i=n&&n.response,s=await t(e,r);return s.ok?ge(s[i])?s[i]():s.text():W(s.status+""+s.statusText)}:gg}async function gg(){W("No HTTP fetch method available.")}const mg=t=>t!=null&&t===t,Ag=t=>t==="true"||t==="false"||t===!0||t===!1,xg=t=>!Number.isNaN(Date.parse(t)),qu=t=>!Number.isNaN(+t)&&!(t instanceof Date),yg=t=>qu(t)&&Number.isInteger(+t),Ju={boolean:ud,integer:In,number:In,date:fd,string:ld,unknown:zr},ei=[Ag,yg,qu,xg],bg=["boolean","integer","number","date"];function wg(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=ei.length,i=ei.map((s,o)=>o+1);for(let s=0,o=0,a,u;s<n;++s)for(u=e?t[s][e]:t[s],a=0;a<r;++a)if(i[a]&&mg(u)&&!ei[a](u)&&(i[a]=0,++o,o===ei.length))return"string";return bg[i.reduce((s,o)=>s===0?o:s,0)-1]}function vg(t,e){return e.reduce((n,r)=>(n[r]=wg(t,r),n),{})}function _u(t){const e=function(n,r){const i={delimiter:t};return Ws(n,r?ps(r,i):i)};return e.responseType="text",e}function Ws(t,e){return e.header&&(t=e.header.map(Vr).join(e.delimiter)+`
6
+ `+t),hu(e.delimiter).parse(t+"")}Ws.responseType="text";function Eg(t){return typeof Buffer=="function"&&ge(Buffer.isBuffer)?Buffer.isBuffer(t):!1}function Xs(t,e){const n=e&&e.property?Or(e.property):zr;return Te(t)&&!Eg(t)?Cg(n(t),e):n(JSON.parse(t))}Xs.responseType="json";function Cg(t,e){return!Be(t)&&od(t)&&(t=[...t]),e&&e.copy?JSON.parse(JSON.stringify(t)):t}const Dg={interior:(t,e)=>t!==e,exterior:(t,e)=>t===e};function $u(t,e){let n,r,i,s;return t=Xs(t,e),e&&e.feature?(n=bd,i=e.feature):e&&e.mesh?(n=vd,i=e.mesh,s=Dg[e.filter]):W("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,s):W("Invalid TopoJSON object: "+i),r&&r.features||[r]}$u.responseType="json";const Zs={dsv:Ws,csv:_u(","),tsv:_u(" "),json:Xs,topojson:$u};function ec(t,e){return arguments.length>1?(Zs[t]=e,this):Pt(Zs,t)?Zs[t]:null}function tc(t,e,n,r){e=e||{};const i=ec(e.type||"json");return i||W("Unknown data format type: "+e.type),t=i(t,e),e.parse&&Sg(t,e.parse,n,r),Pt(t,"columns")&&delete t.columns,t}function Sg(t,e,n,r){if(!t.length)return;const i=sg();n=n||i.timeParse,r=r||i.utcParse;let s=t.columns||Object.keys(t[0]),o,a,u,c,l,f;e==="auto"&&(e=vg(t,s)),s=Object.keys(e);const h=s.map(p=>{const d=e[p];let g,m;if(d&&(d.startsWith("date:")||d.startsWith("utc:")))return g=d.split(/:(.+)?/,2),m=g[1],(m[0]==="'"&&m[m.length-1]==="'"||m[0]==='"'&&m[m.length-1]==='"')&&(m=m.slice(1,-1)),(g[0]==="utc"?r:n)(m);if(!Ju[d])throw Error("Illegal format pattern: "+p+":"+d);return Ju[d]});for(u=0,l=t.length,f=s.length;u<l;++u)for(o=t[u],c=0;c<f;++c)a=s[c],o[a]=h[c](o[a])}const ti=cg(typeof fetch!="undefined"&&fetch,null);/**
7
+ * @license
8
+ * Copyright 2017 Google LLC
9
+ * SPDX-License-Identifier: BSD-3-Clause
10
+ */var Ks;const rn=globalThis.trustedTypes,nc=rn?rn.createPolicy("lit-html",{createHTML:t=>t}):void 0,mt=`lit$${(Math.random()+"").slice(9)}$`,rc="?"+mt,Mg=`<${rc}>`,sn=document,Xn=(t="")=>sn.createComment(t),Zn=t=>t===null||typeof t!="object"&&typeof t!="function",ic=Array.isArray,Bg=t=>{var e;return ic(t)||typeof((e=t)===null||e===void 0?void 0:e[Symbol.iterator])=="function"},Kn=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,sc=/-->/g,oc=/>/g,zt=/>|[ \n \r](?:([^\s"'>=/]+)([ \n \r]*=[ \n \r]*(?:[^ \n \r"'`<>=]|("|')|))|$)/g,ac=/'/g,uc=/"/g,cc=/^(?:script|style|textarea)$/i,Fg=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),it=Fg(1),qn=Symbol.for("lit-noChange"),ne=Symbol.for("lit-nothing"),fc=new WeakMap,lc=(t,e,n)=>{var r,i;const s=(r=n==null?void 0:n.renderBefore)!==null&&r!==void 0?r:e;let o=s._$litPart$;if(o===void 0){const a=(i=n==null?void 0:n.renderBefore)!==null&&i!==void 0?i:null;s._$litPart$=o=new _n(e.insertBefore(Xn(),a),a,void 0,n!=null?n:{})}return o._$AI(t),o},on=sn.createTreeWalker(sn,129,null,!1),Ig=(t,e)=>{const n=t.length-1,r=[];let i,s=e===2?"<svg>":"",o=Kn;for(let u=0;u<n;u++){const c=t[u];let l,f,h=-1,p=0;for(;p<c.length&&(o.lastIndex=p,f=o.exec(c),f!==null);)p=o.lastIndex,o===Kn?f[1]==="!--"?o=sc:f[1]!==void 0?o=oc:f[2]!==void 0?(cc.test(f[2])&&(i=RegExp("</"+f[2],"g")),o=zt):f[3]!==void 0&&(o=zt):o===zt?f[0]===">"?(o=i!=null?i:Kn,h=-1):f[1]===void 0?h=-2:(h=o.lastIndex-f[2].length,l=f[1],o=f[3]===void 0?zt:f[3]==='"'?uc:ac):o===uc||o===ac?o=zt:o===sc||o===oc?o=Kn:(o=zt,i=void 0);const d=o===zt&&t[u+1].startsWith("/>")?" ":"";s+=o===Kn?c+Mg:h>=0?(r.push(l),c.slice(0,h)+"$lit$"+c.slice(h)+mt+d):c+mt+(h===-2?(r.push(void 0),u):d)}const a=s+(t[n]||"<?>")+(e===2?"</svg>":"");return[nc!==void 0?nc.createHTML(a):a,r]};class Jn{constructor({strings:e,_$litType$:n},r){let i;this.parts=[];let s=0,o=0;const a=e.length-1,u=this.parts,[c,l]=Ig(e,n);if(this.el=Jn.createElement(c,r),on.currentNode=this.el.content,n===2){const f=this.el.content,h=f.firstChild;h.remove(),f.append(...h.childNodes)}for(;(i=on.nextNode())!==null&&u.length<a;){if(i.nodeType===1){if(i.hasAttributes()){const f=[];for(const h of i.getAttributeNames())if(h.endsWith("$lit$")||h.startsWith(mt)){const p=l[o++];if(f.push(h),p!==void 0){const d=i.getAttribute(p.toLowerCase()+"$lit$").split(mt),g=/([.?@])?(.*)/.exec(p);u.push({type:1,index:s,name:g[2],strings:d,ctor:g[1]==="."?Pg:g[1]==="?"?Rg:g[1]==="@"?Ng:ni})}else u.push({type:6,index:s})}for(const h of f)i.removeAttribute(h)}if(cc.test(i.tagName)){const f=i.textContent.split(mt),h=f.length-1;if(h>0){i.textContent=rn?rn.emptyScript:"";for(let p=0;p<h;p++)i.append(f[p],Xn()),on.nextNode(),u.push({type:2,index:++s});i.append(f[h],Xn())}}}else if(i.nodeType===8)if(i.data===rc)u.push({type:2,index:s});else{let f=-1;for(;(f=i.data.indexOf(mt,f+1))!==-1;)u.push({type:7,index:s}),f+=mt.length-1}s++}}static createElement(e,n){const r=sn.createElement("template");return r.innerHTML=e,r}}function an(t,e,n=t,r){var i,s,o,a;if(e===qn)return e;let u=r!==void 0?(i=n._$Cl)===null||i===void 0?void 0:i[r]:n._$Cu;const c=Zn(e)?void 0:e._$litDirective$;return(u==null?void 0:u.constructor)!==c&&((s=u==null?void 0:u._$AO)===null||s===void 0||s.call(u,!1),c===void 0?u=void 0:(u=new c(t),u._$AT(t,n,r)),r!==void 0?((o=(a=n)._$Cl)!==null&&o!==void 0?o:a._$Cl=[])[r]=u:n._$Cu=u),u!==void 0&&(e=an(t,u._$AS(t,e.values),u,r)),e}class Tg{constructor(e,n){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var n;const{el:{content:r},parts:i}=this._$AD,s=((n=e==null?void 0:e.creationScope)!==null&&n!==void 0?n:sn).importNode(r,!0);on.currentNode=s;let o=on.nextNode(),a=0,u=0,c=i[0];for(;c!==void 0;){if(a===c.index){let l;c.type===2?l=new _n(o,o.nextSibling,this,e):c.type===1?l=new c.ctor(o,c.name,c.strings,this,e):c.type===6&&(l=new kg(o,this,e)),this.v.push(l),c=i[++u]}a!==(c==null?void 0:c.index)&&(o=on.nextNode(),a++)}return s}m(e){let n=0;for(const r of this.v)r!==void 0&&(r.strings!==void 0?(r._$AI(e,r,n),n+=r.strings.length-2):r._$AI(e[n])),n++}}class _n{constructor(e,n,r,i){var s;this.type=2,this._$AH=ne,this._$AN=void 0,this._$AA=e,this._$AB=n,this._$AM=r,this.options=i,this._$Cg=(s=i==null?void 0:i.isConnected)===null||s===void 0||s}get _$AU(){var e,n;return(n=(e=this._$AM)===null||e===void 0?void 0:e._$AU)!==null&&n!==void 0?n:this._$Cg}get parentNode(){let e=this._$AA.parentNode;const n=this._$AM;return n!==void 0&&e.nodeType===11&&(e=n.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,n=this){e=an(this,e,n),Zn(e)?e===ne||e==null||e===""?(this._$AH!==ne&&this._$AR(),this._$AH=ne):e!==this._$AH&&e!==qn&&this.$(e):e._$litType$!==void 0?this.T(e):e.nodeType!==void 0?this.S(e):Bg(e)?this.M(e):this.$(e)}A(e,n=this._$AB){return this._$AA.parentNode.insertBefore(e,n)}S(e){this._$AH!==e&&(this._$AR(),this._$AH=this.A(e))}$(e){this._$AH!==ne&&Zn(this._$AH)?this._$AA.nextSibling.data=e:this.S(sn.createTextNode(e)),this._$AH=e}T(e){var n;const{values:r,_$litType$:i}=e,s=typeof i=="number"?this._$AC(e):(i.el===void 0&&(i.el=Jn.createElement(i.h,this.options)),i);if(((n=this._$AH)===null||n===void 0?void 0:n._$AD)===s)this._$AH.m(r);else{const o=new Tg(s,this),a=o.p(this.options);o.m(r),this.S(a),this._$AH=o}}_$AC(e){let n=fc.get(e.strings);return n===void 0&&fc.set(e.strings,n=new Jn(e)),n}M(e){ic(this._$AH)||(this._$AH=[],this._$AR());const n=this._$AH;let r,i=0;for(const s of e)i===n.length?n.push(r=new _n(this.A(Xn()),this.A(Xn()),this,this.options)):r=n[i],r._$AI(s),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,n){var r;for((r=this._$AP)===null||r===void 0||r.call(this,!1,!0,n);e&&e!==this._$AB;){const i=e.nextSibling;e.remove(),e=i}}setConnected(e){var n;this._$AM===void 0&&(this._$Cg=e,(n=this._$AP)===null||n===void 0||n.call(this,e))}}class ni{constructor(e,n,r,i,s){this.type=1,this._$AH=ne,this._$AN=void 0,this.element=e,this.name=n,this._$AM=i,this.options=s,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=ne}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,n=this,r,i){const s=this.strings;let o=!1;if(s===void 0)e=an(this,e,n,0),o=!Zn(e)||e!==this._$AH&&e!==qn,o&&(this._$AH=e);else{const a=e;let u,c;for(e=s[0],u=0;u<s.length-1;u++)c=an(this,a[r+u],n,u),c===qn&&(c=this._$AH[u]),o||(o=!Zn(c)||c!==this._$AH[u]),c===ne?e=ne:e!==ne&&(e+=(c!=null?c:"")+s[u+1]),this._$AH[u]=c}o&&!i&&this.k(e)}k(e){e===ne?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e!=null?e:"")}}class Pg extends ni{constructor(){super(...arguments),this.type=3}k(e){this.element[this.name]=e===ne?void 0:e}}const Lg=rn?rn.emptyScript:"";class Rg extends ni{constructor(){super(...arguments),this.type=4}k(e){e&&e!==ne?this.element.setAttribute(this.name,Lg):this.element.removeAttribute(this.name)}}class Ng extends ni{constructor(e,n,r,i,s){super(e,n,r,i,s),this.type=5}_$AI(e,n=this){var r;if((e=(r=an(this,e,n,0))!==null&&r!==void 0?r:ne)===qn)return;const i=this._$AH,s=e===ne&&i!==ne||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,o=e!==ne&&(i===ne||s);s&&this.element.removeEventListener(this.name,this,i),o&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var n,r;typeof this._$AH=="function"?this._$AH.call((r=(n=this.options)===null||n===void 0?void 0:n.host)!==null&&r!==void 0?r:this.element,e):this._$AH.handleEvent(e)}}class kg{constructor(e,n,r){this.element=e,this.type=6,this._$AN=void 0,this._$AM=n,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(e){an(this,e)}}const hc=window.litHtmlPolyfillSupport;hc==null||hc(Jn,_n),((Ks=globalThis.litHtmlVersions)!==null&&Ks!==void 0?Ks:globalThis.litHtmlVersions=[]).push("2.0.2");function qs(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function ri(t){let e=t,n=t,r=t;t.length!==2&&(e=(a,u)=>t(a)-u,n=qs,r=(a,u)=>qs(t(a),u));function i(a,u,c=0,l=a.length){if(c<l){if(n(u,u)!==0)return l;do{const f=c+l>>>1;r(a[f],u)<0?c=f+1:l=f}while(c<l)}return c}function s(a,u,c=0,l=a.length){if(c<l){if(n(u,u)!==0)return l;do{const f=c+l>>>1;r(a[f],u)<=0?c=f+1:l=f}while(c<l)}return c}function o(a,u,c=0,l=a.length){const f=i(a,u,c,l-1);return f>c&&e(a[f-1],u)>-e(a[f],u)?f-1:f}return{left:i,center:o,right:s}}function dc(t){return t===null?NaN:+t}const pc=ri(qs),Og=pc.right;pc.left,ri(dc).center;var zg=Og;function Ug(t,e){let n,r;if(e===void 0)for(const i of t)i!=null&&(n===void 0?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)));else{let i=-1;for(let s of t)(s=e(s,++i,t))!=null&&(n===void 0?s>=s&&(n=r=s):(n>s&&(n=s),r<s&&(r=s)))}return[n,r]}class ii extends Map{constructor(e,n=Vg){super();if(Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),e!=null)for(const[r,i]of e)this.set(r,i)}get(e){return super.get(gc(this,e))}has(e){return super.has(gc(this,e))}set(e,n){return super.set(Gg(this,e),n)}delete(e){return super.delete(Hg(this,e))}}function gc({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function Gg({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function Hg({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function Vg(t){return t!==null&&typeof t=="object"?t.valueOf():t}function Js(t){return t}function si(t,...e){return mc(t,Js,Js,e)}function Qg(t,...e){return mc(t,Array.from,Js,e)}function mc(t,e,n,r){return function i(s,o){if(o>=r.length)return n(s);const a=new ii,u=r[o++];let c=-1;for(const l of s){const f=u(l,++c,s),h=a.get(f);h?h.push(l):a.set(f,[l])}for(const[l,f]of a)a.set(l,i(f,o));return e(a)}(t,0)}var _s=Math.sqrt(50),$s=Math.sqrt(10),eo=Math.sqrt(2);function jg(t,e,n){var r,i=-1,s,o,a;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((r=e<t)&&(s=t,t=e,e=s),(a=Yg(t,e,n))===0||!isFinite(a))return[];if(a>0){let u=Math.round(t/a),c=Math.round(e/a);for(u*a<t&&++u,c*a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)*a}else{a=-a;let u=Math.round(t*a),c=Math.round(e*a);for(u/a<t&&++u,c/a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)/a}return r&&o.reverse(),o}function Yg(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),s=r/Math.pow(10,i);return i>=0?(s>=_s?10:s>=$s?5:s>=eo?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(s>=_s?10:s>=$s?5:s>=eo?2:1)}function to(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),s=r/i;return s>=_s?i*=10:s>=$s?i*=5:s>=eo&&(i*=2),e<t?-i:i}function Wg(t,e,n=dc){if(!!(r=t.length)){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,s=Math.floor(i),o=+n(t[s],s,t),a=+n(t[s+1],s+1,t);return o+(a-o)*(i-s)}}function oi(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,s=new Array(i);++r<i;)s[r]=t+r*n;return s}function ai(t,e){let n=0;if(e===void 0)for(let r of t)(r=+r)&&(n+=r);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function Xg(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function ui(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Zg(t){return t=ui(Math.abs(t)),t?t[1]:NaN}function Kg(t,e){return function(n,r){for(var i=n.length,s=[],o=0,a=t[0],u=0;i>0&&a>0&&(u+a+1>r&&(a=Math.max(1,r-u)),s.push(n.substring(i-=a,i+a)),!((u+=a+1)>r));)a=t[o=(o+1)%t.length];return s.reverse().join(e)}}function qg(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var Jg=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ci(t){if(!(e=Jg.exec(t)))throw new Error("invalid format: "+t);var e;return new no({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}ci.prototype=no.prototype;function no(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}no.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function _g(t){e:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break e;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var Ac;function $g(t,e){var n=ui(t,e);if(!n)return t+"";var r=n[0],i=n[1],s=i-(Ac=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return s===o?r:s>o?r+new Array(s-o+1).join("0"):s>0?r.slice(0,s)+"."+r.slice(s):"0."+new Array(1-s).join("0")+ui(t,Math.max(0,e+s-1))[0]}function xc(t,e){var n=ui(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}var yc={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:Xg,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>xc(t*100,e),r:xc,s:$g,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function bc(t){return t}var wc=Array.prototype.map,vc=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function em(t){var e=t.grouping===void 0||t.thousands===void 0?bc:Kg(wc.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",s=t.numerals===void 0?bc:qg(wc.call(t.numerals,String)),o=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function c(f){f=ci(f);var h=f.fill,p=f.align,d=f.sign,g=f.symbol,m=f.zero,A=f.width,b=f.comma,y=f.precision,v=f.trim,D=f.type;D==="n"?(b=!0,D="g"):yc[D]||(y===void 0&&(y=12),v=!0,D="g"),(m||h==="0"&&p==="=")&&(m=!0,h="0",p="=");var C=g==="$"?n:g==="#"&&/[boxX]/.test(D)?"0"+D.toLowerCase():"",B=g==="$"?r:/[%p]/.test(D)?o:"",I=yc[D],P=/[defgprs%]/.test(D);y=y===void 0?6:/[gprs]/.test(D)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y));function X(E){var ae=C,U=B,pe,_t,Ue;if(D==="c")U=I(E)+U,E="";else{E=+E;var Ge=E<0||1/E<0;if(E=isNaN(E)?u:I(Math.abs(E),y),v&&(E=_g(E)),Ge&&+E==0&&d!=="+"&&(Ge=!1),ae=(Ge?d==="("?d:a:d==="-"||d==="("?"":d)+ae,U=(D==="s"?vc[8+Ac/3]:"")+U+(Ge&&d==="("?")":""),P){for(pe=-1,_t=E.length;++pe<_t;)if(Ue=E.charCodeAt(pe),48>Ue||Ue>57){U=(Ue===46?i+E.slice(pe+1):E.slice(pe))+U,E=E.slice(0,pe);break}}}b&&!m&&(E=e(E,1/0));var He=ae.length+E.length+U.length,K=He<A?new Array(A-He+1).join(h):"";switch(b&&m&&(E=e(K+E,K.length?A-U.length:1/0),K=""),p){case"<":E=ae+E+U+K;break;case"=":E=ae+K+E+U;break;case"^":E=K.slice(0,He=K.length>>1)+ae+E+U+K.slice(He);break;default:E=K+ae+E+U;break}return s(E)}return X.toString=function(){return f+""},X}function l(f,h){var p=c((f=ci(f),f.type="f",f)),d=Math.max(-8,Math.min(8,Math.floor(Zg(h)/3)))*3,g=Math.pow(10,-d),m=vc[8+d/3];return function(A){return p(g*A)+m}}return{format:c,formatPrefix:l}}var ro,xe;tm({thousands:",",grouping:[3],currency:["$",""]});function tm(t){return ro=em(t),xe=ro.format,ro}const Ec=1;function io(){let t=[0,1],e=[0,1],n=1,r=1,i=0,s=0,o=.5,a=0;function u(c){return(c-t[0])/n*r+e[0]}return u.invert=function(c){return(c-e[0])/r*n+t[0]},u.domain=function(c){if(arguments.length){if(t=Ug(c),n=t[1]-t[0],n<Ec){n=Ec;const l=(t[0]+t[1])/2;t[0]=l-n/2,t[1]=l+n/2}return u}else return t},u.range=function(c){return arguments.length?(e=[...c],r=e[1]-e[0],u):e},u.numberingOffset=function(c){return arguments.length?(a=c,u):a},u.padding=function(c){return arguments.length?(s=c,i=Math.min(1,c),u):i},u.paddingInner=function(c){return arguments.length?(i=Math.min(1,c),u):i},u.paddingOuter=function(c){return arguments.length?(s=c,u):s},u.align=function(c){return arguments.length?(o=Math.max(0,Math.min(1,c)),u):o},u.step=()=>r/n,u.bandwidth=()=>u.step(),u.ticks=c=>{const l=u.align(),f=u.numberingOffset();return jg(t[0]-l+f,t[1]-l+f,Math.min(c,Math.ceil(n))).filter(Number.isInteger).map(h=>h-a)},u.tickFormat=function(c,l){if(l)throw new Error("Index scale's tickFormat does not support a specifier!");const h=to(t[0],t[1],Math.min(c,Math.ceil(n)))<1e5?xe(","):xe(".3s");return p=>h(p+a)},u.copy=()=>io().domain(t).range(e).paddingInner(i).paddingOuter(s).numberingOffset(a),u}function nm(){const t=io().numberingOffset(1);let e;t.genome=function(r){return arguments.length?(e=r,t):e},t.ticks=r=>{if(!e)return[];const i=t.domain(),s=t.numberingOffset(),[o,a]=[Math.max(i[0],0),Math.min(i[1],e.totalSize-1)].map(l=>e.toChromosome(l)),u=Math.max(1,to(i[0],i[1],r)),c=[];for(let l=o.index;l<=a.index;l++){const f=e.chromosomes[l],h=Math.max(f.continuousStart+u,i[0]-(i[0]-f.continuousStart)%u),p=Math.min(f.continuousEnd-u/4,i[1]+1);for(let d=h;d<=p;d+=u){const g=d-s;g>=i[0]&&g<i[1]&&c.push(g)}}return c},t.tickFormat=(r,i)=>{if(!e)return;if(i)throw new Error("Locus scale's tickFormat does not support a specifier!");const s=t.domain(),o=s[1]-s[0],a=t.numberingOffset(),c=to(s[0],s[1],Math.min(r,Math.ceil(o)))<1e6?xe(","):xe(".3s"),l=f=>f-e.toChromosome(f).continuousStart;return f=>c(l(f)+a)};const n=t.copy;return t.copy=()=>n().genome(e),t}function Ve(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}function At(t,e){switch(arguments.length){case 0:break;case 1:{typeof t=="function"?this.interpolator(t):this.range(t);break}default:{this.domain(t),typeof e=="function"?this.interpolator(e):this.range(e);break}}return this}const so=Symbol("implicit");function oo(){var t=new Map,e=[],n=[],r=so;function i(s){var o=s+"",a=t.get(o);if(!a){if(r!==so)return r;t.set(o,a=e.push(s))}return n[(a-1)%n.length]}return i.domain=function(s){if(!arguments.length)return e.slice();e=[],t=new Map;for(const o of s){const a=o+"";t.has(a)||t.set(a,e.push(o))}return i},i.range=function(s){return arguments.length?(n=Array.from(s),i):n.slice()},i.unknown=function(s){return arguments.length?(r=s,i):r},i.copy=function(){return oo(e,n).unknown(r)},Ve.apply(i,arguments),i}function un(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function $n(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function xt(){}var Ut=.7,cn=1/Ut,fn="\\s*([+-]?\\d+)\\s*",er="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Qe="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",rm=/^#([0-9a-f]{3,8})$/,im=new RegExp("^rgb\\("+[fn,fn,fn]+"\\)$"),sm=new RegExp("^rgb\\("+[Qe,Qe,Qe]+"\\)$"),om=new RegExp("^rgba\\("+[fn,fn,fn,er]+"\\)$"),am=new RegExp("^rgba\\("+[Qe,Qe,Qe,er]+"\\)$"),um=new RegExp("^hsl\\("+[er,Qe,Qe]+"\\)$"),cm=new RegExp("^hsla\\("+[er,Qe,Qe,er]+"\\)$"),Cc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};un(xt,tr,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Dc,formatHex:Dc,formatHsl:fm,formatRgb:Sc,toString:Sc});function Dc(){return this.rgb().formatHex()}function fm(){return Tc(this).formatHsl()}function Sc(){return this.rgb().formatRgb()}function tr(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=rm.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?Mc(e):n===3?new se(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?fi(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?fi(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=im.exec(t))?new se(e[1],e[2],e[3],1):(e=sm.exec(t))?new se(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=om.exec(t))?fi(e[1],e[2],e[3],e[4]):(e=am.exec(t))?fi(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=um.exec(t))?Ic(e[1],e[2]/100,e[3]/100,1):(e=cm.exec(t))?Ic(e[1],e[2]/100,e[3]/100,e[4]):Cc.hasOwnProperty(t)?Mc(Cc[t]):t==="transparent"?new se(NaN,NaN,NaN,0):null}function Mc(t){return new se(t>>16&255,t>>8&255,t&255,1)}function fi(t,e,n,r){return r<=0&&(t=e=n=NaN),new se(t,e,n,r)}function ao(t){return t instanceof xt||(t=tr(t)),t?(t=t.rgb(),new se(t.r,t.g,t.b,t.opacity)):new se}function li(t,e,n,r){return arguments.length===1?ao(t):new se(t,e,n,r==null?1:r)}function se(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}un(se,li,$n(xt,{brighter:function(t){return t=t==null?cn:Math.pow(cn,t),new se(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=t==null?Ut:Math.pow(Ut,t),new se(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Bc,formatHex:Bc,formatRgb:Fc,toString:Fc}));function Bc(){return"#"+uo(this.r)+uo(this.g)+uo(this.b)}function Fc(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(t===1?")":", "+t+")")}function uo(t){return t=Math.max(0,Math.min(255,Math.round(t)||0)),(t<16?"0":"")+t.toString(16)}function Ic(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new je(t,e,n,r)}function Tc(t){if(t instanceof je)return new je(t.h,t.s,t.l,t.opacity);if(t instanceof xt||(t=tr(t)),!t)return new je;if(t instanceof je)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),s=Math.max(e,n,r),o=NaN,a=s-i,u=(s+i)/2;return a?(e===s?o=(n-r)/a+(n<r)*6:n===s?o=(r-e)/a+2:o=(e-n)/a+4,a/=u<.5?s+i:2-s-i,o*=60):a=u>0&&u<1?0:o,new je(o,a,u,t.opacity)}function co(t,e,n,r){return arguments.length===1?Tc(t):new je(t,e,n,r==null?1:r)}function je(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}un(je,co,$n(xt,{brighter:function(t){return t=t==null?cn:Math.pow(cn,t),new je(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?Ut:Math.pow(Ut,t),new je(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new se(fo(t>=240?t-240:t+120,i,r),fo(t,i,r),fo(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(t===1?")":", "+t+")")}}));function fo(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const Pc=Math.PI/180,Lc=180/Math.PI,hi=18,Rc=.96422,Nc=1,kc=.82521,Oc=4/29,ln=6/29,zc=3*ln*ln,lm=ln*ln*ln;function Uc(t){if(t instanceof Ye)return new Ye(t.l,t.a,t.b,t.opacity);if(t instanceof st)return Gc(t);t instanceof se||(t=ao(t));var e=mo(t.r),n=mo(t.g),r=mo(t.b),i=ho((.2225045*e+.7168786*n+.0606169*r)/Nc),s,o;return e===n&&n===r?s=o=i:(s=ho((.4360747*e+.3850649*n+.1430804*r)/Rc),o=ho((.0139322*e+.0971045*n+.7141733*r)/kc)),new Ye(116*i-16,500*(s-i),200*(i-o),t.opacity)}function lo(t,e,n,r){return arguments.length===1?Uc(t):new Ye(t,e,n,r==null?1:r)}function Ye(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}un(Ye,lo,$n(xt,{brighter:function(t){return new Ye(this.l+hi*(t==null?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Ye(this.l-hi*(t==null?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=Rc*po(e),t=Nc*po(t),n=kc*po(n),new se(go(3.1338561*e-1.6168667*t-.4906146*n),go(-.9787684*e+1.9161415*t+.033454*n),go(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function ho(t){return t>lm?Math.pow(t,1/3):t/zc+Oc}function po(t){return t>ln?t*t*t:zc*(t-Oc)}function go(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function mo(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function hm(t){if(t instanceof st)return new st(t.h,t.c,t.l,t.opacity);if(t instanceof Ye||(t=Uc(t)),t.a===0&&t.b===0)return new st(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Lc;return new st(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Ao(t,e,n,r){return arguments.length===1?hm(t):new st(t,e,n,r==null?1:r)}function st(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function Gc(t){if(isNaN(t.h))return new Ye(t.l,0,0,t.opacity);var e=t.h*Pc;return new Ye(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}un(st,Ao,$n(xt,{brighter:function(t){return new st(this.h,this.c,this.l+hi*(t==null?1:t),this.opacity)},darker:function(t){return new st(this.h,this.c,this.l-hi*(t==null?1:t),this.opacity)},rgb:function(){return Gc(this).rgb()}}));var Hc=-.14861,xo=1.78277,yo=-.29227,di=-.90649,nr=1.97294,Vc=nr*di,Qc=nr*xo,jc=xo*yo-di*Hc;function dm(t){if(t instanceof Gt)return new Gt(t.h,t.s,t.l,t.opacity);t instanceof se||(t=ao(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(jc*r+Vc*e-Qc*n)/(jc+Vc-Qc),s=r-i,o=(nr*(n-i)-yo*s)/di,a=Math.sqrt(o*o+s*s)/(nr*i*(1-i)),u=a?Math.atan2(o,s)*Lc-120:NaN;return new Gt(u<0?u+360:u,a,i,t.opacity)}function bo(t,e,n,r){return arguments.length===1?dm(t):new Gt(t,e,n,r==null?1:r)}function Gt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}un(Gt,bo,$n(xt,{brighter:function(t){return t=t==null?cn:Math.pow(cn,t),new Gt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?Ut:Math.pow(Ut,t),new Gt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Pc,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new se(255*(e+n*(Hc*r+xo*i)),255*(e+n*(yo*r+di*i)),255*(e+n*(nr*r)),this.opacity)}}));function Yc(t,e,n,r,i){var s=t*t,o=s*t;return((1-3*t+3*s-o)*e+(4-6*s+3*o)*n+(1+3*t+3*s-3*o)*r+o*i)/6}function Wc(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],s=t[r+1],o=r>0?t[r-1]:2*i-s,a=r<e-1?t[r+2]:2*s-i;return Yc((n-r/e)*e,o,i,s,a)}}function Xc(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],s=t[r%e],o=t[(r+1)%e],a=t[(r+2)%e];return Yc((n-r/e)*e,i,s,o,a)}}var pi=t=>()=>t;function Zc(t,e){return function(n){return t+n*e}}function pm(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}function gi(t,e){var n=e-t;return n?Zc(t,n>180||n<-180?n-360*Math.round(n/360):n):pi(isNaN(t)?e:t)}function gm(t){return(t=+t)==1?re:function(e,n){return n-e?pm(e,n,t):pi(isNaN(e)?n:e)}}function re(t,e){var n=e-t;return n?Zc(t,n):pi(isNaN(t)?e:t)}var wo=function t(e){var n=gm(e);function r(i,s){var o=n((i=li(i)).r,(s=li(s)).r),a=n(i.g,s.g),u=n(i.b,s.b),c=re(i.opacity,s.opacity);return function(l){return i.r=o(l),i.g=a(l),i.b=u(l),i.opacity=c(l),i+""}}return r.gamma=t,r}(1);function Kc(t){return function(e){var n=e.length,r=new Array(n),i=new Array(n),s=new Array(n),o,a;for(o=0;o<n;++o)a=li(e[o]),r[o]=a.r||0,i[o]=a.g||0,s[o]=a.b||0;return r=t(r),i=t(i),s=t(s),a.opacity=1,function(u){return a.r=r(u),a.g=i(u),a.b=s(u),a+""}}}var mm=Kc(Wc),Am=Kc(Xc);function vo(t,e){e||(e=[]);var n=t?Math.min(e.length,t.length):0,r=e.slice(),i;return function(s){for(i=0;i<n;++i)r[i]=t[i]*(1-s)+e[i]*s;return r}}function qc(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function xm(t,e){return(qc(e)?vo:Jc)(t,e)}function Jc(t,e){var n=e?e.length:0,r=t?Math.min(n,t.length):0,i=new Array(r),s=new Array(n),o;for(o=0;o<r;++o)i[o]=yt(t[o],e[o]);for(;o<n;++o)s[o]=e[o];return function(a){for(o=0;o<r;++o)s[o]=i[o](a);return s}}function _c(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Le(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function $c(t,e){var n={},r={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?n[i]=yt(t[i],e[i]):r[i]=e[i];return function(s){for(i in n)r[i]=n[i](s);return r}}var Eo=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Co=new RegExp(Eo.source,"g");function ym(t){return function(){return t}}function bm(t){return function(e){return t(e)+""}}function ef(t,e){var n=Eo.lastIndex=Co.lastIndex=0,r,i,s,o=-1,a=[],u=[];for(t=t+"",e=e+"";(r=Eo.exec(t))&&(i=Co.exec(e));)(s=i.index)>n&&(s=e.slice(n,s),a[o]?a[o]+=s:a[++o]=s),(r=r[0])===(i=i[0])?a[o]?a[o]+=i:a[++o]=i:(a[++o]=null,u.push({i:o,x:Le(r,i)})),n=Co.lastIndex;return n<e.length&&(s=e.slice(n),a[o]?a[o]+=s:a[++o]=s),a.length<2?u[0]?bm(u[0].x):ym(e):(e=u.length,function(c){for(var l=0,f;l<e;++l)a[(f=u[l]).i]=f.x(c);return a.join("")})}function yt(t,e){var n=typeof e,r;return e==null||n==="boolean"?pi(e):(n==="number"?Le:n==="string"?(r=tr(e))?(e=r,wo):ef:e instanceof tr?wo:e instanceof Date?_c:qc(e)?vo:Array.isArray(e)?Jc:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?$c:Le)(t,e)}function wm(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}function vm(t,e){var n=gi(+t,+e);return function(r){var i=n(r);return i-360*Math.floor(i/360)}}function rr(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var tf=180/Math.PI,Do={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function nf(t,e,n,r,i,s){var o,a,u;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(a=Math.sqrt(n*n+r*r))&&(n/=a,r/=a,u/=a),t*r<e*n&&(t=-t,e=-e,u=-u,o=-o),{translateX:i,translateY:s,rotate:Math.atan2(e,t)*tf,skewX:Math.atan(u)*tf,scaleX:o,scaleY:a}}var mi;function Em(t){const e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Do:nf(e.a,e.b,e.c,e.d,e.e,e.f)}function Cm(t){return t==null||(mi||(mi=document.createElementNS("http://www.w3.org/2000/svg","g")),mi.setAttribute("transform",t),!(t=mi.transform.baseVal.consolidate()))?Do:(t=t.matrix,nf(t.a,t.b,t.c,t.d,t.e,t.f))}function rf(t,e,n,r){function i(c){return c.length?c.pop()+" ":""}function s(c,l,f,h,p,d){if(c!==f||l!==h){var g=p.push("translate(",null,e,null,n);d.push({i:g-4,x:Le(c,f)},{i:g-2,x:Le(l,h)})}else(f||h)&&p.push("translate("+f+e+h+n)}function o(c,l,f,h){c!==l?(c-l>180?l+=360:l-c>180&&(c+=360),h.push({i:f.push(i(f)+"rotate(",null,r)-2,x:Le(c,l)})):l&&f.push(i(f)+"rotate("+l+r)}function a(c,l,f,h){c!==l?h.push({i:f.push(i(f)+"skewX(",null,r)-2,x:Le(c,l)}):l&&f.push(i(f)+"skewX("+l+r)}function u(c,l,f,h,p,d){if(c!==f||l!==h){var g=p.push(i(p)+"scale(",null,",",null,")");d.push({i:g-4,x:Le(c,f)},{i:g-2,x:Le(l,h)})}else(f!==1||h!==1)&&p.push(i(p)+"scale("+f+","+h+")")}return function(c,l){var f=[],h=[];return c=t(c),l=t(l),s(c.translateX,c.translateY,l.translateX,l.translateY,f,h),o(c.rotate,l.rotate,f,h),a(c.skewX,l.skewX,f,h),u(c.scaleX,c.scaleY,l.scaleX,l.scaleY,f,h),c=l=null,function(p){for(var d=-1,g=h.length,m;++d<g;)f[(m=h[d]).i]=m.x(p);return f.join("")}}}var Dm=rf(Em,"px, ","px)","deg)"),Sm=rf(Cm,", ",")",")"),Mm=1e-12;function sf(t){return((t=Math.exp(t))+1/t)/2}function Bm(t){return((t=Math.exp(t))-1/t)/2}function Fm(t){return((t=Math.exp(2*t))-1)/(t+1)}var of=function t(e,n,r){function i(s,o){var a=s[0],u=s[1],c=s[2],l=o[0],f=o[1],h=o[2],p=l-a,d=f-u,g=p*p+d*d,m,A;if(g<Mm)A=Math.log(h/c)/e,m=function(B){return[a+B*p,u+B*d,c*Math.exp(e*B*A)]};else{var b=Math.sqrt(g),y=(h*h-c*c+r*g)/(2*c*n*b),v=(h*h-c*c-r*g)/(2*h*n*b),D=Math.log(Math.sqrt(y*y+1)-y),C=Math.log(Math.sqrt(v*v+1)-v);A=(C-D)/e,m=function(B){var I=B*A,P=sf(D),X=c/(n*b)*(P*Fm(e*I+D)-Bm(D));return[a+X*p,u+X*d,c*P/sf(e*I+D)]}}return m.duration=A*1e3*e/Math.SQRT2,m}return i.rho=function(s){var o=Math.max(.001,+s),a=o*o,u=a*a;return t(o,a,u)},i}(Math.SQRT2,2,4);function af(t){return function(e,n){var r=t((e=co(e)).h,(n=co(n)).h),i=re(e.s,n.s),s=re(e.l,n.l),o=re(e.opacity,n.opacity);return function(a){return e.h=r(a),e.s=i(a),e.l=s(a),e.opacity=o(a),e+""}}}var Im=af(gi),Tm=af(re);function Pm(t,e){var n=re((t=lo(t)).l,(e=lo(e)).l),r=re(t.a,e.a),i=re(t.b,e.b),s=re(t.opacity,e.opacity);return function(o){return t.l=n(o),t.a=r(o),t.b=i(o),t.opacity=s(o),t+""}}function uf(t){return function(e,n){var r=t((e=Ao(e)).h,(n=Ao(n)).h),i=re(e.c,n.c),s=re(e.l,n.l),o=re(e.opacity,n.opacity);return function(a){return e.h=r(a),e.c=i(a),e.l=s(a),e.opacity=o(a),e+""}}}var Lm=uf(gi),Rm=uf(re);function cf(t){return function e(n){n=+n;function r(i,s){var o=t((i=bo(i)).h,(s=bo(s)).h),a=re(i.s,s.s),u=re(i.l,s.l),c=re(i.opacity,s.opacity);return function(l){return i.h=o(l),i.s=a(l),i.l=u(Math.pow(l,n)),i.opacity=c(l),i+""}}return r.gamma=e,r}(1)}var Nm=cf(gi),km=cf(re);function So(t,e){e===void 0&&(e=t,t=yt);for(var n=0,r=e.length-1,i=e[0],s=new Array(r<0?0:r);n<r;)s[n]=t(i,i=e[++n]);return function(o){var a=Math.max(0,Math.min(r-1,Math.floor(o*=r)));return s[a](o-a)}}function Om(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n}var zm=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",interpolate:yt,interpolateArray:xm,interpolateBasis:Wc,interpolateBasisClosed:Xc,interpolateDate:_c,interpolateDiscrete:wm,interpolateHue:vm,interpolateNumber:Le,interpolateNumberArray:vo,interpolateObject:$c,interpolateRound:rr,interpolateString:ef,interpolateTransformCss:Dm,interpolateTransformSvg:Sm,interpolateZoom:of,interpolateRgb:wo,interpolateRgbBasis:mm,interpolateRgbBasisClosed:Am,interpolateHsl:Im,interpolateHslLong:Tm,interpolateLab:Pm,interpolateHcl:Lm,interpolateHclLong:Rm,interpolateCubehelix:Nm,interpolateCubehelixLong:km,piecewise:So,quantize:Om});function Um(t){return function(){return t}}function Mo(t){return+t}var ff=[0,1];function ye(t){return t}function Bo(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:Um(isNaN(e)?NaN:.5)}function Gm(t,e){var n;return t>e&&(n=t,t=e,e=n),function(r){return Math.max(t,Math.min(e,r))}}function Hm(t,e,n){var r=t[0],i=t[1],s=e[0],o=e[1];return i<r?(r=Bo(i,r),s=n(o,s)):(r=Bo(r,i),s=n(s,o)),function(a){return s(r(a))}}function Vm(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),s=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)i[o]=Bo(t[o],t[o+1]),s[o]=n(e[o],e[o+1]);return function(a){var u=Pn(t,a,1,r)-1;return s[u](i[u](a))}}function ir(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Ai(){var t=ff,e=ff,n=yt,r,i,s,o=ye,a,u,c;function l(){var h=Math.min(t.length,e.length);return o!==ye&&(o=Gm(t[0],t[h-1])),a=h>2?Vm:Hm,u=c=null,f}function f(h){return h==null||isNaN(h=+h)?s:(u||(u=a(t.map(r),e,n)))(r(o(h)))}return f.invert=function(h){return o(i((c||(c=a(e,t.map(r),Le)))(h)))},f.domain=function(h){return arguments.length?(t=Array.from(h,Mo),l()):t.slice()},f.range=function(h){return arguments.length?(e=Array.from(h),l()):e.slice()},f.rangeRound=function(h){return e=Array.from(h),n=rr,l()},f.clamp=function(h){return arguments.length?(o=h?!0:ye,l()):o!==ye},f.interpolate=function(h){return arguments.length?(n=h,l()):n},f.unknown=function(h){return arguments.length?(s=h,f):s},function(h,p){return r=h,i=p,l()}}function lf(){return Ai()(ye,ye)}function hf(t,e,n,r){var i=jr(t,e,n),s;switch(r=tn(r==null?",f":r),r.type){case"s":{var o=Math.max(Math.abs(t),Math.abs(e));return r.precision==null&&!isNaN(s=Cu(i,o))&&(r.precision=s),Ms(r,o)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(s=Du(i,Math.max(Math.abs(t),Math.abs(e))))&&(r.precision=s-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(s=Eu(i))&&(r.precision=s-(r.type==="%")*2);break}}return Xr(r)}function Ht(t){var e=t.domain;return t.ticks=function(n){var r=e();return Ds(r[0],r[r.length-1],n==null?10:n)},t.tickFormat=function(n,r){var i=e();return hf(i[0],i[i.length-1],n==null?10:n,r)},t.nice=function(n){n==null&&(n=10);var r=e(),i=0,s=r.length-1,o=r[i],a=r[s],u,c,l=10;for(a<o&&(c=o,o=a,a=c,c=i,i=s,s=c);l-- >0;){if(c=mu(o,a,n),c===u)return r[i]=o,r[s]=a,e(r);if(c>0)o=Math.floor(o/c)*c,a=Math.ceil(a/c)*c;else if(c<0)o=Math.ceil(o*c)/c,a=Math.floor(a*c)/c;else break;u=c}return t},t}function df(){var t=lf();return t.copy=function(){return ir(t,df())},Ve.apply(t,arguments),Ht(t)}function pf(t){var e;function n(r){return r==null||isNaN(r=+r)?e:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(t=Array.from(r,Mo),n):t.slice()},n.unknown=function(r){return arguments.length?(e=r,n):e},n.copy=function(){return pf(t).unknown(e)},t=arguments.length?Array.from(t,Mo):[0,1],Ht(n)}function gf(t,e){t=t.slice();var n=0,r=t.length-1,i=t[n],s=t[r],o;return s<i&&(o=n,n=r,r=o,o=i,i=s,s=o),t[n]=e.floor(i),t[r]=e.ceil(s),t}function mf(t){return Math.log(t)}function Af(t){return Math.exp(t)}function Qm(t){return-Math.log(-t)}function jm(t){return-Math.exp(-t)}function Ym(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Wm(t){return t===10?Ym:t===Math.E?Math.exp:function(e){return Math.pow(t,e)}}function Xm(t){return t===Math.E?Math.log:t===10&&Math.log10||t===2&&Math.log2||(t=Math.log(t),function(e){return Math.log(e)/t})}function xf(t){return function(e){return-t(-e)}}function Fo(t){var e=t(mf,Af),n=e.domain,r=10,i,s;function o(){return i=Xm(r),s=Wm(r),n()[0]<0?(i=xf(i),s=xf(s),t(Qm,jm)):t(mf,Af),e}return e.base=function(a){return arguments.length?(r=+a,o()):r},e.domain=function(a){return arguments.length?(n(a),o()):n()},e.ticks=function(a){var u=n(),c=u[0],l=u[u.length-1],f;(f=l<c)&&(h=c,c=l,l=h);var h=i(c),p=i(l),d,g,m,A=a==null?10:+a,b=[];if(!(r%1)&&p-h<A){if(h=Math.floor(h),p=Math.ceil(p),c>0){for(;h<=p;++h)for(g=1,d=s(h);g<r;++g)if(m=d*g,!(m<c)){if(m>l)break;b.push(m)}}else for(;h<=p;++h)for(g=r-1,d=s(h);g>=1;--g)if(m=d*g,!(m<c)){if(m>l)break;b.push(m)}b.length*2<A&&(b=Ds(c,l,A))}else b=Ds(h,p,Math.min(p-h,A)).map(s);return f?b.reverse():b},e.tickFormat=function(a,u){if(u==null&&(u=r===10?".0e":","),typeof u!="function"&&(u=Xr(u)),a===1/0)return u;a==null&&(a=10);var c=Math.max(1,r*a/e.ticks().length);return function(l){var f=l/s(Math.round(i(l)));return f*r<r-.5&&(f*=r),f<=c?u(l):""}},e.nice=function(){return n(gf(n(),{floor:function(a){return s(Math.floor(i(a)))},ceil:function(a){return s(Math.ceil(i(a)))}}))},e}function Io(){var t=Fo(Ai()).domain([1,10]);return t.copy=function(){return ir(t,Io()).base(t.base())},Ve.apply(t,arguments),t}function yf(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function bf(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function To(t){var e=1,n=t(yf(e),bf(e));return n.constant=function(r){return arguments.length?t(yf(e=+r),bf(e)):e},Ht(n)}function wf(){var t=To(Ai());return t.copy=function(){return ir(t,wf()).constant(t.constant())},Ve.apply(t,arguments)}function vf(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function Zm(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function Km(t){return t<0?-t*t:t*t}function Po(t){var e=t(ye,ye),n=1;function r(){return n===1?t(ye,ye):n===.5?t(Zm,Km):t(vf(n),vf(1/n))}return e.exponent=function(i){return arguments.length?(n=+i,r()):n},Ht(e)}function Lo(){var t=Po(Ai());return t.copy=function(){return ir(t,Lo()).exponent(t.exponent())},Ve.apply(t,arguments),t}function qm(){return Lo.apply(null,arguments).exponent(.5)}function Ef(){var t=[],e=[],n=[],r;function i(){var o=0,a=Math.max(1,e.length);for(n=new Array(a-1);++o<a;)n[o-1]=Sd(t,o/a);return s}function s(o){return o==null||isNaN(o=+o)?r:e[Pn(n,o)]}return s.invertExtent=function(o){var a=e.indexOf(o);return a<0?[NaN,NaN]:[a>0?n[a-1]:t[0],a<n.length?n[a]:t[t.length-1]]},s.domain=function(o){if(!arguments.length)return t.slice();t=[];for(let a of o)a!=null&&!isNaN(a=+a)&&t.push(a);return t.sort(ys),i()},s.range=function(o){return arguments.length?(e=Array.from(o),i()):e.slice()},s.unknown=function(o){return arguments.length?(r=o,s):r},s.quantiles=function(){return n.slice()},s.copy=function(){return Ef().domain(t).range(e).unknown(r)},Ve.apply(s,arguments)}function Cf(){var t=0,e=1,n=1,r=[.5],i=[0,1],s;function o(u){return u!=null&&u<=u?i[Pn(r,u,0,n)]:s}function a(){var u=-1;for(r=new Array(n);++u<n;)r[u]=((u+1)*e-(u-n)*t)/(n+1);return o}return o.domain=function(u){return arguments.length?([t,e]=u,t=+t,e=+e,a()):[t,e]},o.range=function(u){return arguments.length?(n=(i=Array.from(u)).length-1,a()):i.slice()},o.invertExtent=function(u){var c=i.indexOf(u);return c<0?[NaN,NaN]:c<1?[t,r[0]]:c>=n?[r[n-1],e]:[r[c-1],r[c]]},o.unknown=function(u){return arguments.length&&(s=u),o},o.thresholds=function(){return r.slice()},o.copy=function(){return Cf().domain([t,e]).range(i).unknown(s)},Ve.apply(Ht(o),arguments)}function Df(){var t=[.5],e=[0,1],n,r=1;function i(s){return s!=null&&s<=s?e[Pn(t,s,0,r)]:n}return i.domain=function(s){return arguments.length?(t=Array.from(s),r=Math.min(t.length,e.length-1),i):t.slice()},i.range=function(s){return arguments.length?(e=Array.from(s),r=Math.min(t.length,e.length-1),i):e.slice()},i.invertExtent=function(s){var o=e.indexOf(s);return[t[o-1],t[o]]},i.unknown=function(s){return arguments.length?(n=s,i):n},i.copy=function(){return Df().domain(t).range(e).unknown(n)},Ve.apply(i,arguments)}function Jm(t){return new Date(t)}function _m(t){return t instanceof Date?+t:+new Date(+t)}function Ro(t,e,n,r,i,s,o,a,u,c){var l=lf(),f=l.invert,h=l.domain,p=c(".%L"),d=c(":%S"),g=c("%I:%M"),m=c("%I %p"),A=c("%a %d"),b=c("%b %d"),y=c("%B"),v=c("%Y");function D(C){return(u(C)<C?p:a(C)<C?d:o(C)<C?g:s(C)<C?m:r(C)<C?i(C)<C?A:b:n(C)<C?y:v)(C)}return l.invert=function(C){return new Date(f(C))},l.domain=function(C){return arguments.length?h(Array.from(C,_m)):h().map(Jm)},l.ticks=function(C){var B=h();return t(B[0],B[B.length-1],C==null?10:C)},l.tickFormat=function(C,B){return B==null?D:c(B)},l.nice=function(C){var B=h();return(!C||typeof C.range!="function")&&(C=e(B[0],B[B.length-1],C==null?10:C)),C?h(gf(B,C)):l},l.copy=function(){return ir(l,Ro(t,e,n,r,i,s,o,a,u,c))},l}function $m(){return Ve.apply(Ro(Xd,Zd,pt,Kr,Zr,Rt,Ns,Rs,dt,Qs).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function eA(){return Ve.apply(Ro(Yd,Wd,gt,Jr,qr,kt,zs,Os,dt,js).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function xi(){var t=0,e=1,n,r,i,s,o=ye,a=!1,u;function c(f){return f==null||isNaN(f=+f)?u:o(i===0?.5:(f=(s(f)-n)*i,a?Math.max(0,Math.min(1,f)):f))}c.domain=function(f){return arguments.length?([t,e]=f,n=s(t=+t),r=s(e=+e),i=n===r?0:1/(r-n),c):[t,e]},c.clamp=function(f){return arguments.length?(a=!!f,c):a},c.interpolator=function(f){return arguments.length?(o=f,c):o};function l(f){return function(h){var p,d;return arguments.length?([p,d]=h,o=f(p,d),c):[o(0),o(1)]}}return c.range=l(yt),c.rangeRound=l(rr),c.unknown=function(f){return arguments.length?(u=f,c):u},function(f){return s=f,n=f(t),r=f(e),i=n===r?0:1/(r-n),c}}function bt(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function No(){var t=Ht(xi()(ye));return t.copy=function(){return bt(t,No())},At.apply(t,arguments)}function Sf(){var t=Fo(xi()).domain([1,10]);return t.copy=function(){return bt(t,Sf()).base(t.base())},At.apply(t,arguments)}function Mf(){var t=To(xi());return t.copy=function(){return bt(t,Mf()).constant(t.constant())},At.apply(t,arguments)}function ko(){var t=Po(xi());return t.copy=function(){return bt(t,ko()).exponent(t.exponent())},At.apply(t,arguments)}function tA(){return ko.apply(null,arguments).exponent(.5)}function yi(){var t=0,e=.5,n=1,r=1,i,s,o,a,u,c=ye,l,f=!1,h;function p(g){return isNaN(g=+g)?h:(g=.5+((g=+l(g))-s)*(r*g<r*s?a:u),c(f?Math.max(0,Math.min(1,g)):g))}p.domain=function(g){return arguments.length?([t,e,n]=g,i=l(t=+t),s=l(e=+e),o=l(n=+n),a=i===s?0:.5/(s-i),u=s===o?0:.5/(o-s),r=s<i?-1:1,p):[t,e,n]},p.clamp=function(g){return arguments.length?(f=!!g,p):f},p.interpolator=function(g){return arguments.length?(c=g,p):c};function d(g){return function(m){var A,b,y;return arguments.length?([A,b,y]=m,c=So(g,[A,b,y]),p):[c(0),c(.5),c(1)]}}return p.range=d(yt),p.rangeRound=d(rr),p.unknown=function(g){return arguments.length?(h=g,p):h},function(g){return l=g,i=g(t),s=g(e),o=g(n),a=i===s?0:.5/(s-i),u=s===o?0:.5/(o-s),r=s<i?-1:1,p}}function Bf(){var t=Ht(yi()(ye));return t.copy=function(){return bt(t,Bf())},At.apply(t,arguments)}function Ff(){var t=Fo(yi()).domain([.1,1,10]);return t.copy=function(){return bt(t,Ff()).base(t.base())},At.apply(t,arguments)}function If(){var t=To(yi());return t.copy=function(){return bt(t,If()).constant(t.constant())},At.apply(t,arguments)}function Oo(){var t=Po(yi());return t.copy=function(){return bt(t,Oo()).exponent(t.exponent())},At.apply(t,arguments)}function nA(){return Oo.apply(null,arguments).exponent(.5)}function zo(t,e,n){const r=t-e+n*2;return t?r>0?r:1:0}const rA="identity",hn="linear",wt="log",sr="pow",or="sqrt",bi="symlog",Tf="time",Pf="utc",We="sequential",dn="diverging",Uo="quantile",Lf="quantize",Rf="threshold",Go="ordinal",Ho="point",Nf="band",Vo="bin-ordinal",$="continuous",ar="discrete",ur="discretizing",Ie="interpolating",kf="temporal";function iA(t){return function(e){let n=e[0],r=e[1],i;return r<n&&(i=n,n=r,r=i),[t.invert(n),t.invert(r)]}}function sA(t){return function(e){const n=t.range();let r=e[0],i=e[1],s=-1,o,a,u,c;for(i<r&&(a=r,r=i,i=a),u=0,c=n.length;u<c;++u)n[u]>=r&&n[u]<=i&&(s<0&&(s=u),o=u);if(!(s<0))return r=t.invertExtent(n[s]),i=t.invertExtent(n[o]),[r[0]===void 0?r[1]:r[0],i[1]===void 0?i[0]:i[1]]}}function Qo(){const t=oo().unknown(void 0),e=t.domain,n=t.range;let r=[0,1],i,s,o=!1,a=0,u=0,c=.5;delete t.unknown;function l(){const f=e().length,h=r[1]<r[0],p=r[1-h],d=zo(f,a,u);let g=r[h-0];i=(p-g)/(d||1),o&&(i=Math.floor(i)),g+=(p-g-i*(f-a))*c,s=i*(1-a),o&&(g=Math.round(g),s=Math.round(s));const m=Md(f).map(A=>g+i*A);return n(h?m.reverse():m)}return t.domain=function(f){return arguments.length?(e(f),l()):e()},t.range=function(f){return arguments.length?(r=[+f[0],+f[1]],l()):r.slice()},t.rangeRound=function(f){return r=[+f[0],+f[1]],o=!0,l()},t.bandwidth=function(){return s},t.step=function(){return i},t.round=function(f){return arguments.length?(o=!!f,l()):o},t.padding=function(f){return arguments.length?(u=Math.max(0,Math.min(1,f)),a=u,l()):a},t.paddingInner=function(f){return arguments.length?(a=Math.max(0,Math.min(1,f)),l()):a},t.paddingOuter=function(f){return arguments.length?(u=Math.max(0,Math.min(1,f)),l()):u},t.align=function(f){return arguments.length?(c=Math.max(0,Math.min(1,f)),l()):c},t.invertRange=function(f){if(f[0]==null||f[1]==null)return;const h=r[1]<r[0],p=h?n().reverse():n(),d=p.length-1;let g=+f[0],m=+f[1],A,b,y;if(!(g!==g||m!==m)&&(m<g&&(y=g,g=m,m=y),!(m<p[0]||g>r[1-h])))return A=Math.max(0,ws(p,g)-1),b=g===m?A:ws(p,m)-1,g-p[A]>s+1e-10&&++A,h&&(y=A,A=d-b,b=d-y),A>b?void 0:e().slice(A,b+1)},t.invert=function(f){const h=t.invertRange([f,f]);return h&&h[0]},t.copy=function(){return Qo().domain(e()).range(r).round(o).paddingInner(a).paddingOuter(u).align(c)},l()}function Of(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return Of(e())},t}function oA(){return Of(Qo().paddingInner(1))}var aA=Array.prototype.map;function uA(t){return aA.call(t,In)}const cA=Array.prototype.slice;function zf(){let t=[],e=[];function n(r){return r==null||r!==r?void 0:e[(Pn(t,r)-1)%e.length]}return n.domain=function(r){return arguments.length?(t=uA(r),n):t.slice()},n.range=function(r){return arguments.length?(e=cA.call(r),n):e.slice()},n.tickFormat=function(r,i){return hf(t[0],Pe(t),r==null?10:r,i)},n.copy=function(){return zf().domain(n.domain()).range(n.range())},n}const wi={};function fA(t,e,n){const r=function(){const s=e();return s.invertRange||(s.invertRange=s.invert?iA(s):s.invertExtent?sA(s):void 0),s.type=t,s};return r.metadata=Qr(ds(n)),r}function O(t,e,n){return arguments.length>1?(wi[t]=fA(t,e,n),this):lA(t)?wi[t]:void 0}O(rA,pf),O(hn,df,$),O(wt,Io,[$,wt]),O(sr,Lo,$),O(or,qm,$),O(bi,wf,$),O(Tf,$m,[$,kf]),O(Pf,eA,[$,kf]),O(We,No,[$,Ie]),O("".concat(We,"-").concat(hn),No,[$,Ie]),O("".concat(We,"-").concat(wt),Sf,[$,Ie,wt]),O("".concat(We,"-").concat(sr),ko,[$,Ie]),O("".concat(We,"-").concat(or),tA,[$,Ie]),O("".concat(We,"-").concat(bi),Mf,[$,Ie]),O("".concat(dn,"-").concat(hn),Bf,[$,Ie]),O("".concat(dn,"-").concat(wt),Ff,[$,Ie,wt]),O("".concat(dn,"-").concat(sr),Oo,[$,Ie]),O("".concat(dn,"-").concat(or),nA,[$,Ie]),O("".concat(dn,"-").concat(bi),If,[$,Ie]),O(Uo,Ef,[ur,Uo]),O(Lf,Cf,ur),O(Rf,Df,ur),O(Vo,zf,[ar,ur]),O(Go,oo,ar),O(Nf,Qo,ar),O(Ho,oA,ar);function lA(t){return Pt(wi,t)}function cr(t,e){const n=wi[t];return n&&n.metadata[e]}function Xe(t){return cr(t,$)}function Vt(t){return cr(t,ar)}function pn(t){return cr(t,ur)}function Uf(t){return cr(t,wt)}function vi(t){return cr(t,Ie)}function hA(t,e){const n=e[0],r=Pe(e)-n;return function(i){return t(n+i*r)}}function Ei(t,e,n){return So(Gf(e||"rgb",n),t)}function dA(t,e){const n=new Array(e),r=e+1;for(let i=0;i<e;)n[i]=t(++i/r);return n}function Gf(t,e){const n=zm[pA(t)];return e!=null&&n&&n.gamma?n.gamma(e):n}function pA(t){return"interpolate"+t.toLowerCase().split("-").map(e=>e[0].toUpperCase()+e.slice(1)).join("")}const gA={blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},mA={category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"};function Hf(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r<e;)n[r]="#"+t.slice(r*6,++r*6);return n}function Vf(t,e){for(const n in t)jo(n,e(t[n]))}const Qf={};Vf(mA,Hf),Vf(gA,t=>Ei(Hf(t)));function jo(t,e){return t=t&&t.toLowerCase(),arguments.length>1?(Qf[t]=e,this):Qf[t]}var LC="";function AA(t,e){var n=t.getBoundingClientRect();return[e.clientX-n.left-t.clientLeft,e.clientY-n.top-t.clientTop]}function Yo(t,e,n,r){return n=n||(i=>i),r=r||(i=>i),t.length==e.length&&t.every((i,s)=>n(t[s])===r(e[s]))}function Ze(t){return Array.isArray(t)?t:typeof t!="undefined"?[t]:[]}function Re(t){return t[t.length-1]}class xA{constructor(e){this.container=e,this.element=document.createElement("div"),this.element.className="tooltip",this._visible=!0,this.container.appendChild(this.element),this._previousTooltipDatum=void 0,this.enabledStack=[!0],this._penaltyUntil=0,this._lastCoords=void 0,this._previousMove=0,this.clear()}set visible(e){e!=this._visible&&(this.element.style.display=e?null:"none",this._visible=e)}get visible(){return this._visible}get enabled(){var e;return(e=Re(this.enabledStack))!=null?e:!0}pushEnabledState(e){this.enabledStack.push(e),e||(this.visible=!1)}popEnabledState(){this.enabledStack.pop()}handleMouseMove(e){this.mouseCoords=AA(this.container,e);const n=performance.now();!this.visible&&!this._isPenalty()&&n-this._previousMove>500&&(this._penaltyUntil=n+70),this._lastCoords&&yA(this.mouseCoords,this._lastCoords)>20&&(this._penaltyUntil=n+400),this._lastCoords=this.mouseCoords,this.visible&&this.updatePlacement(),this._previousMove=n}updatePlacement(){const e=20,[n,r]=this.mouseCoords;let i=n+e;i>this.container.clientWidth-this.element.offsetWidth&&(i=n-e-this.element.offsetWidth),this.element.style.left=i+"px",this.element.style.top=Math.min(r+e,this.container.clientHeight-this.element.offsetHeight)+"px"}setContent(e){if(!e||!this.enabled||this._isPenalty()){this.visible&&(lc("",this.element),this.visible=!1),this._previousTooltipDatum=void 0;return}lc(e,this.element),this.visible=!0,this.updatePlacement()}clear(){this._previousTooltipDatum=void 0,this.setContent(void 0)}updateWithDatum(e,n){e!==this._previousTooltipDatum&&(this._previousTooltipDatum=e,n||(n=r=>Promise.resolve(it`${JSON.stringify(r)}`)),n(e).then(r=>this.setContent(r)).catch(r=>{if(r!=="debounced")throw r}))}_isPenalty(){return this._penaltyUntil&&this._penaltyUntil>performance.now()}}function yA(t,e){let n=0;for(let r=0;r<t.length;r++)n+=(t[r]-e[r])**2;return Math.sqrt(n)}const bA="RawCode",wA="Literal",vA="Property",EA="Identifier",CA="ArrayExpression",DA="BinaryExpression",SA="CallExpression",MA="ConditionalExpression",BA="LogicalExpression",FA="MemberExpression",IA="ObjectExpression",TA="UnaryExpression";function Ne(t){this.type=t}Ne.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=PA(this),n=0,r=e.length;n<r;++n)if(e[n].visit(t))return 1};function PA(t){switch(t.type){case CA:return t.elements;case DA:case BA:return[t.left,t.right];case SA:return[t.callee].concat(t.arguments);case MA:return[t.test,t.consequent,t.alternate];case FA:return[t.object,t.property];case IA:return t.properties;case vA:return[t.key,t.value];case TA:return[t.argument];case EA:case wA:case bA:default:return[]}}var Ke,S,x,ue,z,Ci=1,fr=2,Qt=3,vt=4,Di=5,jt=6,be=7,lr=8,LA=9;Ke={},Ke[Ci]="Boolean",Ke[fr]="<end>",Ke[Qt]="Identifier",Ke[vt]="Keyword",Ke[Di]="Null",Ke[jt]="Numeric",Ke[be]="Punctuator",Ke[lr]="String",Ke[LA]="RegularExpression";var RA="ArrayExpression",NA="BinaryExpression",kA="CallExpression",OA="ConditionalExpression",jf="Identifier",zA="Literal",UA="LogicalExpression",GA="MemberExpression",HA="ObjectExpression",VA="Property",QA="UnaryExpression",ie="Unexpected token %0",jA="Unexpected number",YA="Unexpected string",WA="Unexpected identifier",XA="Unexpected reserved word",ZA="Unexpected end of input",Wo="Invalid regular expression",Xo="Invalid regular expression: missing /",Yf="Octal literals are not allowed in strict mode.",KA="Duplicate data property in object literal not allowed in strict mode",oe="ILLEGAL",hr="Disabled.",qA=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),JA=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function Si(t,e){if(!t)throw new Error("ASSERT: "+e)}function ot(t){return t>=48&&t<=57}function Zo(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function dr(t){return"01234567".indexOf(t)>=0}function _A(t){return t===32||t===9||t===11||t===12||t===160||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function pr(t){return t===10||t===13||t===8232||t===8233}function gr(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t===92||t>=128&&qA.test(String.fromCharCode(t))}function Mi(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t===92||t>=128&&JA.test(String.fromCharCode(t))}const $A={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function Wf(){for(;x<ue;){const t=S.charCodeAt(x);if(_A(t)||pr(t))++x;else break}}function Ko(t){var e,n,r,i=0;for(n=t==="u"?4:2,e=0;e<n;++e)x<ue&&Zo(S[x])?(r=S[x++],i=i*16+"0123456789abcdef".indexOf(r.toLowerCase())):N({},ie,oe);return String.fromCharCode(i)}function e1(){var t,e,n,r;for(t=S[x],e=0,t==="}"&&N({},ie,oe);x<ue&&(t=S[x++],!!Zo(t));)e=e*16+"0123456789abcdef".indexOf(t.toLowerCase());return(e>1114111||t!=="}")&&N({},ie,oe),e<=65535?String.fromCharCode(e):(n=(e-65536>>10)+55296,r=(e-65536&1023)+56320,String.fromCharCode(n,r))}function Xf(){var t,e;for(t=S.charCodeAt(x++),e=String.fromCharCode(t),t===92&&(S.charCodeAt(x)!==117&&N({},ie,oe),++x,t=Ko("u"),(!t||t==="\\"||!gr(t.charCodeAt(0)))&&N({},ie,oe),e=t);x<ue&&(t=S.charCodeAt(x),!!Mi(t));)++x,e+=String.fromCharCode(t),t===92&&(e=e.substr(0,e.length-1),S.charCodeAt(x)!==117&&N({},ie,oe),++x,t=Ko("u"),(!t||t==="\\"||!Mi(t.charCodeAt(0)))&&N({},ie,oe),e+=t);return e}function t1(){var t,e;for(t=x++;x<ue;){if(e=S.charCodeAt(x),e===92)return x=t,Xf();if(Mi(e))++x;else break}return S.slice(t,x)}function n1(){var t,e,n;return t=x,e=S.charCodeAt(x)===92?Xf():t1(),e.length===1?n=Qt:$A.hasOwnProperty(e)?n=vt:e==="null"?n=Di:e==="true"||e==="false"?n=Ci:n=Qt,{type:n,value:e,start:t,end:x}}function qo(){var t=x,e=S.charCodeAt(x),n,r=S[x],i,s,o;switch(e){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++x,{type:be,value:String.fromCharCode(e),start:t,end:x};default:if(n=S.charCodeAt(x+1),n===61)switch(e){case 43:case 45:case 47:case 60:case 62:case 94:case 124:case 37:case 38:case 42:return x+=2,{type:be,value:String.fromCharCode(e)+String.fromCharCode(n),start:t,end:x};case 33:case 61:return x+=2,S.charCodeAt(x)===61&&++x,{type:be,value:S.slice(t,x),start:t,end:x}}}if(o=S.substr(x,4),o===">>>=")return x+=4,{type:be,value:o,start:t,end:x};if(s=o.substr(0,3),s===">>>"||s==="<<="||s===">>=")return x+=3,{type:be,value:s,start:t,end:x};if(i=s.substr(0,2),r===i[1]&&"+-<>&|".indexOf(r)>=0||i==="=>")return x+=2,{type:be,value:i,start:t,end:x};if(i==="//"&&N({},ie,oe),"<>=!+-*%&|^/".indexOf(r)>=0)return++x,{type:be,value:r,start:t,end:x};N({},ie,oe)}function r1(t){let e="";for(;x<ue&&Zo(S[x]);)e+=S[x++];return e.length===0&&N({},ie,oe),gr(S.charCodeAt(x))&&N({},ie,oe),{type:jt,value:parseInt("0x"+e,16),start:t,end:x}}function i1(t){let e="0"+S[x++];for(;x<ue&&dr(S[x]);)e+=S[x++];return(gr(S.charCodeAt(x))||ot(S.charCodeAt(x)))&&N({},ie,oe),{type:jt,value:parseInt(e,8),octal:!0,start:t,end:x}}function Zf(){var t,e,n;if(n=S[x],Si(ot(n.charCodeAt(0))||n===".","Numeric literal must start with a decimal digit or a decimal point"),e=x,t="",n!=="."){if(t=S[x++],n=S[x],t==="0"){if(n==="x"||n==="X")return++x,r1(e);if(dr(n))return i1(e);n&&ot(n.charCodeAt(0))&&N({},ie,oe)}for(;ot(S.charCodeAt(x));)t+=S[x++];n=S[x]}if(n==="."){for(t+=S[x++];ot(S.charCodeAt(x));)t+=S[x++];n=S[x]}if(n==="e"||n==="E")if(t+=S[x++],n=S[x],(n==="+"||n==="-")&&(t+=S[x++]),ot(S.charCodeAt(x)))for(;ot(S.charCodeAt(x));)t+=S[x++];else N({},ie,oe);return gr(S.charCodeAt(x))&&N({},ie,oe),{type:jt,value:parseFloat(t),start:e,end:x}}function s1(){var t="",e,n,r,i,s=!1;for(e=S[x],Si(e==="'"||e==='"',"String literal must starts with a quote"),n=x,++x;x<ue;)if(r=S[x++],r===e){e="";break}else if(r==="\\")if(r=S[x++],!r||!pr(r.charCodeAt(0)))switch(r){case"u":case"x":S[x]==="{"?(++x,t+=e1()):t+=Ko(r);break;case"n":t+=`
11
+ `;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:dr(r)?(i="01234567".indexOf(r),i!==0&&(s=!0),x<ue&&dr(S[x])&&(s=!0,i=i*8+"01234567".indexOf(S[x++]),"0123".indexOf(r)>=0&&x<ue&&dr(S[x])&&(i=i*8+"01234567".indexOf(S[x++]))),t+=String.fromCharCode(i)):t+=r;break}else r==="\r"&&S[x]===`
12
+ `&&++x;else{if(pr(r.charCodeAt(0)))break;t+=r}return e!==""&&N({},ie,oe),{type:lr,value:t,octal:s,start:n,end:x}}function o1(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,(r,i)=>{if(parseInt(i,16)<=1114111)return"x";N({},Wo)}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch{N({},Wo)}try{return new RegExp(t,e)}catch{return null}}function a1(){var t,e,n,r,i;for(t=S[x],Si(t==="/","Regular expression literal must start with a slash"),e=S[x++],n=!1,r=!1;x<ue;)if(t=S[x++],e+=t,t==="\\")t=S[x++],pr(t.charCodeAt(0))&&N({},Xo),e+=t;else if(pr(t.charCodeAt(0)))N({},Xo);else if(n)t==="]"&&(n=!1);else if(t==="/"){r=!0;break}else t==="["&&(n=!0);return r||N({},Xo),i=e.substr(1,e.length-2),{value:i,literal:e}}function u1(){var t,e,n;for(e="",n="";x<ue&&(t=S[x],!!Mi(t.charCodeAt(0)));)++x,t==="\\"&&x<ue?N({},ie,oe):(n+=t,e+=t);return n.search(/[^gimuy]/g)>=0&&N({},Wo,n),{value:n,literal:e}}function c1(){var t,e,n,r;return z=null,Wf(),t=x,e=a1(),n=u1(),r=o1(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:x}}function f1(t){return t.type===Qt||t.type===vt||t.type===Ci||t.type===Di}function Kf(){if(Wf(),x>=ue)return{type:fr,start:x,end:x};const t=S.charCodeAt(x);return gr(t)?n1():t===40||t===41||t===59?qo():t===39||t===34?s1():t===46?ot(S.charCodeAt(x+1))?Zf():qo():ot(t)?Zf():qo()}function we(){const t=z;return x=t.end,z=Kf(),x=t.end,t}function qf(){const t=x;z=Kf(),x=t}function l1(t){const e=new Ne(RA);return e.elements=t,e}function Jf(t,e,n){const r=new Ne(t==="||"||t==="&&"?UA:NA);return r.operator=t,r.left=e,r.right=n,r}function h1(t,e){const n=new Ne(kA);return n.callee=t,n.arguments=e,n}function d1(t,e,n){const r=new Ne(OA);return r.test=t,r.consequent=e,r.alternate=n,r}function Jo(t){const e=new Ne(jf);return e.name=t,e}function mr(t){const e=new Ne(zA);return e.value=t.value,e.raw=S.slice(t.start,t.end),t.regex&&(e.raw==="//"&&(e.raw="/(?:)/"),e.regex=t.regex),e}function _f(t,e,n){const r=new Ne(GA);return r.computed=t==="[",r.object=e,r.property=n,r.computed||(n.member=!0),r}function p1(t){const e=new Ne(HA);return e.properties=t,e}function $f(t,e,n){const r=new Ne(VA);return r.key=e,r.value=n,r.kind=t,r}function g1(t,e){const n=new Ne(QA);return n.operator=t,n.argument=e,n.prefix=!0,n}function N(t,e){var n,r=Array.prototype.slice.call(arguments,2),i=e.replace(/%(\d)/g,(s,o)=>(Si(o<r.length,"Message reference must be in range"),r[o]));throw n=new Error(i),n.index=x,n.description=i,n}function Bi(t){t.type===fr&&N(t,ZA),t.type===jt&&N(t,jA),t.type===lr&&N(t,YA),t.type===Qt&&N(t,WA),t.type===vt&&N(t,XA),N(t,ie,t.value)}function ce(t){const e=we();(e.type!==be||e.value!==t)&&Bi(e)}function Q(t){return z.type===be&&z.value===t}function _o(t){return z.type===vt&&z.value===t}function m1(){const t=[];for(x=z.start,ce("[");!Q("]");)Q(",")?(we(),t.push(null)):(t.push(Yt()),Q("]")||ce(","));return we(),l1(t)}function el(){x=z.start;const t=we();return t.type===lr||t.type===jt?(t.octal&&N(t,Yf),mr(t)):Jo(t.value)}function A1(){var t,e,n,r;if(x=z.start,t=z,t.type===Qt)return n=el(),ce(":"),r=Yt(),$f("init",n,r);if(t.type===fr||t.type===be)Bi(t);else return e=el(),ce(":"),r=Yt(),$f("init",e,r)}function x1(){var t=[],e,n,r,i={},s=String;for(x=z.start,ce("{");!Q("}");)e=A1(),e.key.type===jf?n=e.key.name:n=s(e.key.value),r="$"+n,Object.prototype.hasOwnProperty.call(i,r)?N({},KA):i[r]=!0,t.push(e),Q("}")||ce(",");return ce("}"),p1(t)}function y1(){ce("(");const t=$o();return ce(")"),t}const b1={if:1};function w1(){var t,e,n;if(Q("("))return y1();if(Q("["))return m1();if(Q("{"))return x1();if(t=z.type,x=z.start,t===Qt||b1[z.value])n=Jo(we().value);else if(t===lr||t===jt)z.octal&&N(z,Yf),n=mr(we());else{if(t===vt)throw new Error(hr);t===Ci?(e=we(),e.value=e.value==="true",n=mr(e)):t===Di?(e=we(),e.value=null,n=mr(e)):Q("/")||Q("/=")?(n=mr(c1()),qf()):Bi(we())}return n}function v1(){const t=[];if(ce("("),!Q(")"))for(;x<ue&&(t.push(Yt()),!Q(")"));)ce(",");return ce(")"),t}function E1(){x=z.start;const t=we();return f1(t)||Bi(t),Jo(t.value)}function C1(){return ce("."),E1()}function D1(){ce("[");const t=$o();return ce("]"),t}function S1(){var t,e,n;for(t=w1();;)if(Q("."))n=C1(),t=_f(".",t,n);else if(Q("("))e=v1(),t=h1(t,e);else if(Q("["))n=D1(),t=_f("[",t,n);else break;return t}function tl(){const t=S1();if(z.type===be&&(Q("++")||Q("--")))throw new Error(hr);return t}function Fi(){var t,e;if(z.type!==be&&z.type!==vt)e=tl();else{if(Q("++")||Q("--"))throw new Error(hr);if(Q("+")||Q("-")||Q("~")||Q("!"))t=we(),e=Fi(),e=g1(t.value,e);else{if(_o("delete")||_o("void")||_o("typeof"))throw new Error(hr);e=tl()}}return e}function nl(t){let e=0;if(t.type!==be&&t.type!==vt)return 0;switch(t.value){case"||":e=1;break;case"&&":e=2;break;case"|":e=3;break;case"^":e=4;break;case"&":e=5;break;case"==":case"!=":case"===":case"!==":e=6;break;case"<":case">":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11;break}return e}function M1(){var t,e,n,r,i,s,o,a,u,c;if(t=z,u=Fi(),r=z,i=nl(r),i===0)return u;for(r.prec=i,we(),e=[t,z],o=Fi(),s=[u,r,o];(i=nl(z))>0;){for(;s.length>2&&i<=s[s.length-2].prec;)o=s.pop(),a=s.pop().value,u=s.pop(),e.pop(),n=Jf(a,u,o),s.push(n);r=we(),r.prec=i,s.push(r),e.push(z),n=Fi(),s.push(n)}for(c=s.length-1,n=s[c],e.pop();c>1;)e.pop(),n=Jf(s[c-1].value,s[c-2],n),c-=2;return n}function Yt(){var t,e,n;return t=M1(),Q("?")&&(we(),e=Yt(),ce(":"),n=Yt(),t=d1(t,e,n)),t}function $o(){const t=Yt();if(Q(","))throw new Error(hr);return t}function B1(t){S=t,x=0,ue=S.length,z=null,qf();const e=$o();if(z.type!==fr)throw new Error("Unexpect token after expression.");return e}var F1={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function I1(t){function e(o,a,u,c){let l=t(a[0]);return u&&(l=u+"("+l+")",u.lastIndexOf("new ",0)===0&&(l="("+l+")")),l+"."+o+(c<0?"":c===0?"()":"("+a.slice(1).map(t).join(",")+")")}function n(o,a,u){return c=>e(o,c,a,u)}const r="new Date",i="String",s="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(o){o.length<3&&W("Missing arguments to clamp function."),o.length>3&&W("Too many arguments to clamp function.");const a=o.map(t);return"Math.max("+a[1]+", Math.min("+a[2]+","+a[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:r,date:n("getDate",r,0),day:n("getDay",r,0),year:n("getFullYear",r,0),month:n("getMonth",r,0),hours:n("getHours",r,0),minutes:n("getMinutes",r,0),seconds:n("getSeconds",r,0),milliseconds:n("getMilliseconds",r,0),time:n("getTime",r,0),timezoneoffset:n("getTimezoneOffset",r,0),utcdate:n("getUTCDate",r,0),utcday:n("getUTCDay",r,0),utcyear:n("getUTCFullYear",r,0),utcmonth:n("getUTCMonth",r,0),utchours:n("getUTCHours",r,0),utcminutes:n("getUTCMinutes",r,0),utcseconds:n("getUTCSeconds",r,0),utcmilliseconds:n("getUTCMilliseconds",r,0),length:n("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:n("toUpperCase",i,0),lower:n("toLowerCase",i,0),substring:n("substring",i),split:n("split",i),trim:n("trim",i,0),regexp:s,test:n("test",s),if:function(o){o.length<3&&W("Missing arguments to if function."),o.length>3&&W("Too many arguments to if function.");const a=o.map(t);return"("+a[0]+"?"+a[1]+":"+a[2]+")"}}}function T1(t){const e=t&&t.length-1;return e&&(t[0]==='"'&&t[e]==='"'||t[0]==="'"&&t[e]==="'")?t.slice(1,-1):t}function P1(t){t=t||{};const e=t.allowed?Qr(t.allowed):{},n=t.forbidden?Qr(t.forbidden):{},r=t.constants||F1,i=(t.functions||I1)(f),s=t.globalvar,o=t.fieldvar,a=ge(s)?s:d=>`${s}["${d}"]`;let u={},c={},l=0;function f(d){if(q(d))return d;const g=h[d.type];return g==null&&W("Unsupported type: "+d.type),g(d)}const h={Literal:d=>d.raw,Identifier:d=>{const g=d.name;return l>0?g:Pt(n,g)?W("Illegal identifier: "+g):Pt(r,g)?r[g]:Pt(e,g)?g:(u[g]=1,a(g))},MemberExpression:d=>{const g=!d.computed,m=f(d.object);g&&(l+=1);const A=f(d.property);return m===o&&(c[T1(A)]=1),g&&(l-=1),m+(g?"."+A:"["+A+"]")},CallExpression:d=>{d.callee.type!=="Identifier"&&W("Illegal callee type: "+d.callee.type);const g=d.callee.name,m=d.arguments,A=Pt(i,g)&&i[g];return A||W("Unrecognized function: "+g),ge(A)?A(m):A+"("+m.map(f).join(",")+")"},ArrayExpression:d=>"["+d.elements.map(f).join(",")+"]",BinaryExpression:d=>"("+f(d.left)+" "+d.operator+" "+f(d.right)+")",UnaryExpression:d=>"("+d.operator+f(d.argument)+")",ConditionalExpression:d=>"("+f(d.test)+"?"+f(d.consequent)+":"+f(d.alternate)+")",LogicalExpression:d=>"("+f(d.left)+d.operator+f(d.right)+")",ObjectExpression:d=>"{"+d.properties.map(f).join(",")+"}",Property:d=>{l+=1;const g=f(d.key);return l-=1,g+":"+f(d.value)}};function p(d){const g={code:f(d),globals:Object.keys(u),fields:Object.keys(c)};return u={},c={},g}return p.functions=i,p.constants=r,p}function ea(t,e={}){const n=P1({forbidden:[],allowed:["datum"],globalvar:"global",fieldvar:"datum"});try{const r=B1(t),i=n(r),s=Function("datum","global",`"use strict"; return (${i.code});`),o=a=>s(a,e);return o.fields=i.fields,o}catch(r){throw new Error(`Invalid expression: ${t}, ${r.message}`)}}function L1(){let t=0;const e=new Map,n=r=>{let i=e.get(r);return i===void 0&&(i=t++,e.set(r,i)),i};return n.addAll=r=>{for(const i of r)n(i)},n.invert=r=>{for(const i of e.entries())if(i[1]==r)return i[0]},n.domain=()=>[...e.keys()],n}function R1(t,e){const n={};e||(e=t.encoding);for(const[r,i]of Object.entries(e)){if(!i)continue;const s=t.unitView.getScaleResolution(at(i)&&i.resolutionChannel||r);n[r]=N1(e[r],s==null?void 0:s.getScale(),t.unitView.getAccessor(r),r)}return n}function N1(t,e,n,r){let i;if(Wt(t))i=s=>t.value,i.constant=!0,i.constantValue=!0,i.accessor=void 0;else if(n)if(r=="text")i=s=>{},i.accessor=n,i.constant=n.constant;else{if(!e)throw new Error(`Missing scale! "${r}": ${JSON.stringify(t)}`);if(i=s=>e(n(s)),Vt(e.type)){const s=L1();s.addAll(e.domain()),i.indexer=o=>s(n(o))}i.constant=n.constant,i.accessor=n,i.scale=e}else throw new Error(`Missing value or accessor (field, expr, datum) on channel "${r}": ${JSON.stringify(t)}`);return i.invert=e?s=>e.invert(s):s=>{throw new Error("No scale available, cannot invert: "+JSON.stringify(t))},i.channelDef=t,i.applyMetadata=s=>{for(const o in i)o in i&&(s[o]=i[o]);return s},i}function Wt(t){return t&&"value"in t}function Ar(t){return t&&"field"in t}function Ii(t){return t&&"datum"in t}function at(t){return Ar(t)||Ii(t)||ta(t)||rl(t)}function Ti(t,e){const n=t.mark.encoding[e];if(at(n))return n;throw new Error("Not a channel def with scale!")}function rl(t){return t&&"chrom"in t}function ta(t){return t&&"expr"in t}const gn=["x","y"],na={x:"x2",y:"y2",size:"size2",color:"color2"},il=Object.fromEntries(Object.entries(na).map(t=>[t[1],t[0]]));function xr(t){return t in il}function k1(t){const e=na[t];if(e)return e;throw new Error(`${t} has no secondary channel!`)}function Xt(t){return il[t]||t}function Pi(t){return gn.includes(Xt(t))}function Zt(t){return["color","fill","stroke"].includes(Xt(t))}function Li(t){return["shape","squeeze"].includes(t)}function sl(t){switch(t){case"shape":return["circle","square","triangle-up","cross","diamond","triangle-down","triangle-right","triangle-left"]}}function ol(t){if(!Li(t))throw new Error("Not a discrete channel: "+t);const e=new Map(sl(t).map((n,r)=>[n,r]));return n=>{const r=e.get(n);if(r!==void 0)return r;throw new Error(`Invalid value for "${t}" channel: ${n}`)}}function G(t,e=t){if(/^[A-Za-z0-9_]+$/.test(t)){const n=new Function("datum",`return datum[${JSON.stringify(t)}]`);return V(n,[t],e)}else return Or(t)}class O1{constructor(){this.accessorCreators=[],this.register(e=>{if(Ar(e))try{const n=G(e.field);return n.constant=!1,n.fields=ru(n),n}catch(n){throw new Error(`Invalid field definition: ${n.message}`)}}),this.register(e=>ta(e)?z1(e.expr):void 0),this.register(e=>{if(Ii(e)){const n=rd(e.datum);return n.constant=!0,n.fields=[],n}})}register(e){this.accessorCreators.push(e)}createAccessor(e){for(const n of this.accessorCreators){const r=n(e);if(r)return r}}}function z1(t){const e=ea(t);return e.constant=e.fields.length==0,e}/* @license twgl.js 4.21.2 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
13
+ Available via the MIT license.
14
+ see: http://github.com/greggman/twgl.js for details */const ra=5120,yr=5121,ia=5122,sa=5123,oa=5124,aa=5125,ua=5126,U1=32819,G1=32820,H1=33635,V1=5131,Q1=33640,j1=35899,Y1=35902,W1=36269,X1=34042,al={};{const t=al;t[ra]=Int8Array,t[yr]=Uint8Array,t[ia]=Int16Array,t[sa]=Uint16Array,t[oa]=Int32Array,t[aa]=Uint32Array,t[ua]=Float32Array,t[U1]=Uint16Array,t[G1]=Uint16Array,t[H1]=Uint16Array,t[V1]=Uint16Array,t[Q1]=Uint32Array,t[j1]=Uint32Array,t[Y1]=Uint32Array,t[W1]=Uint32Array,t[X1]=Uint32Array}function ca(t){if(t instanceof Int8Array)return ra;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return yr;if(t instanceof Int16Array)return ia;if(t instanceof Uint16Array)return sa;if(t instanceof Int32Array)return oa;if(t instanceof Uint32Array)return aa;if(t instanceof Float32Array)return ua;throw new Error("unsupported typed array type")}function Z1(t){if(t===Int8Array)return ra;if(t===Uint8Array||t===Uint8ClampedArray)return yr;if(t===Int16Array)return ia;if(t===Uint16Array)return sa;if(t===Int32Array)return oa;if(t===Uint32Array)return aa;if(t===Float32Array)return ua;throw new Error("unsupported typed array type")}function K1(t){const e=al[t];if(!e)throw new Error("unknown gl type");return e}const Ri=typeof SharedArrayBuffer!="undefined"?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer};function q1(...t){console.error(...t)}function ul(...t){console.warn(...t)}function J1(t,e){return typeof WebGLBuffer!="undefined"&&e instanceof WebGLBuffer}function cl(t,e){return typeof WebGLRenderbuffer!="undefined"&&e instanceof WebGLRenderbuffer}function Ni(t,e){return typeof WebGLTexture!="undefined"&&e instanceof WebGLTexture}function _1(t,e){return typeof WebGLSampler!="undefined"&&e instanceof WebGLSampler}const fl=35044,qe=34962,$1=34963,ex=34660,tx=5120,nx=5121,rx=5122,ix=5123,sx=5124,ox=5125,ax=5126,ll={attribPrefix:""};function hl(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||fl)}function dl(t,e,n,r){if(J1(t,e))return e;n=n||qe;const i=t.createBuffer();return hl(t,n,i,e,r),i}function pl(t){return t==="indices"}function ux(t){return t instanceof Int8Array||t instanceof Uint8Array}function cx(t){return t===Int8Array||t===Uint8Array}function fx(t){return t.length?t:t.data}const lx=/coord|texture/i,hx=/color|colour/i;function gl(t,e){let n;if(lx.test(t)?n=2:hx.test(t)?n=4:n=3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function dx(t,e){return t.numComponents||t.size||gl(e,fx(t).length)}function fa(t,e){if(Ri(t))return t;if(Ri(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type;return n||(pl(e)?n=Uint16Array:n=Float32Array),new n(t.data)}function px(t,e){const n={};return Object.keys(e).forEach(function(r){if(!pl(r)){const i=e[r],s=i.attrib||i.name||i.attribName||ll.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!Ri(i.value))throw new Error("array.value is not array or typedarray");n[s]={value:i.value}}else{let o,a,u,c;if(i.buffer&&i.buffer instanceof WebGLBuffer)o=i.buffer,c=i.numComponents||i.size,a=i.type,u=i.normalize;else if(typeof i=="number"||typeof i.data=="number"){const l=i.data||i,f=i.type||Float32Array,h=l*f.BYTES_PER_ELEMENT;a=Z1(f),u=i.normalize!==void 0?i.normalize:cx(f),c=i.numComponents||i.size||gl(r,l),o=t.createBuffer(),t.bindBuffer(qe,o),t.bufferData(qe,h,i.drawType||fl)}else{const l=fa(i,r);o=dl(t,l,void 0,i.drawType),a=ca(l),u=i.normalize!==void 0?i.normalize:ux(l),c=dx(i,r)}n[s]={buffer:o,numComponents:c,type:a,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:i.divisor===void 0?void 0:i.divisor,drawType:i.drawType}}}}),t.bindBuffer(qe,null),n}function gx(t,e,n,r){n=fa(n),r!==void 0?(t.bindBuffer(qe,e.buffer),t.bufferSubData(qe,r,n)):hl(t,qe,e.buffer,n,e.drawType)}function mx(t,e){return e===tx||e===nx?1:e===rx||e===ix?2:e===sx||e===ox||e===ax?4:0}const la=["position","positions","a_position"];function Ax(t,e){let n,r;for(r=0;r<la.length&&(n=la[r],!(n in e||(n=ll.attribPrefix+n,n in e)));++r);r===la.length&&(n=Object.keys(e)[0]);const i=e[n];t.bindBuffer(qe,i.buffer);const s=t.getBufferParameter(qe,ex);t.bindBuffer(qe,null);const o=mx(t,i.type),a=s/o,u=i.numComponents||i.size,c=a/u;if(c%1!=0)throw new Error(`numComponents ${u} not correct for length ${length}`);return c}function xx(t,e,n){const r=px(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const s=e.indices;if(s){const o=fa(s,"indices");i.indices=dl(t,o,$1),i.numElements=o.length,i.elementType=ca(o)}else i.numElements||(i.numElements=Ax(t,i.attribs));return i}function mn(t){return!!t.texStorage2D}const ha=function(){const t={},e={};function n(r){const i=r.constructor.name;if(!t[i]){for(const s in r)if(typeof r[s]=="number"){const o=e[r[s]];e[r[s]]=o?`${o} | ${s}`:s}t[i]=!0}}return function(i,s){return n(i),e[s]||(typeof s=="number"?`0x${s.toString(16)}`:s)}}(),Et={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},An=Ri,ml=function(){let t;return function(){return t=t||(typeof document!="undefined"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),Al=6406,Je=6407,j=6408,xl=6409,yl=6410,br=6402,bl=34041,ki=33071,yx=9728,bx=9729,ut=3553,ct=34067,Ct=32879,Dt=35866,Oi=34069,wx=34070,vx=34071,Ex=34072,Cx=34073,Dx=34074,da=10241,pa=10240,zi=10242,Ui=10243,wl=32882,Sx=33082,Mx=33083,Bx=33084,Fx=33085,ga=3317,vl=3314,El=32878,Cl=3316,Dl=3315,Sl=32877,Ix=37443,Tx=37441,Px=37440,Lx=33321,Rx=36756,Nx=33325,kx=33326,Ox=33330,zx=33329,Ux=33338,Gx=33337,Hx=33340,Vx=33339,Qx=33323,jx=36757,Yx=33327,Wx=33328,Xx=33336,Zx=33335,Kx=33332,qx=33331,Jx=33334,_x=33333,$x=32849,ey=35905,ty=36194,ny=36758,ry=35898,iy=35901,sy=34843,oy=34837,ay=36221,uy=36239,cy=36215,fy=36233,ly=36209,hy=36227,dy=32856,py=35907,gy=36759,my=32855,Ay=32854,xy=32857,yy=34842,by=34836,wy=36220,vy=36238,Ey=36975,Cy=36214,Dy=36232,Sy=36226,My=36208,By=33189,Fy=33190,Iy=36012,Ty=36013,Py=35056,St=5120,Y=5121,Gi=5122,xn=5123,Hi=5124,Kt=5125,fe=5126,Ml=32819,Bl=32820,Fl=33635,ke=5131,wr=36193,ma=33640,Ly=35899,Ry=35902,Ny=36269,ky=34042,Vi=33319,yn=33320,Qi=6403,bn=36244,wn=36248,qt=36249;let Aa;function ji(t){if(!Aa){const e={};e[Al]={textureFormat:Al,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Y,ke,wr,fe]},e[xl]={textureFormat:xl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[Y,ke,wr,fe]},e[yl]={textureFormat:yl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[Y,ke,wr,fe]},e[Je]={textureFormat:Je,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[Y,ke,wr,fe,Fl]},e[j]={textureFormat:j,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[Y,ke,wr,fe,Ml,Bl]},e[br]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Kt,xn]},e[Lx]={textureFormat:Qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[Y]},e[Rx]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[St]},e[Nx]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[fe,ke]},e[kx]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[fe]},e[Ox]={textureFormat:bn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Y]},e[zx]={textureFormat:bn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[St]},e[Kx]={textureFormat:bn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[xn]},e[qx]={textureFormat:bn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Gi]},e[Jx]={textureFormat:bn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Kt]},e[_x]={textureFormat:bn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Hi]},e[Qx]={textureFormat:Vi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[Y]},e[jx]={textureFormat:Vi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[St]},e[Yx]={textureFormat:Vi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[fe,ke]},e[Wx]={textureFormat:Vi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[fe]},e[Xx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Y]},e[Zx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[St]},e[Ux]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[xn]},e[Gx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Gi]},e[Hx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Kt]},e[Vx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Hi]},e[$x]={textureFormat:Je,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[Y]},e[ey]={textureFormat:Je,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Y]},e[ty]={textureFormat:Je,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[Y,Fl]},e[ny]={textureFormat:Je,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[St]},e[ry]={textureFormat:Je,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[fe,ke,Ly]},e[iy]={textureFormat:Je,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[fe,ke,Ry]},e[sy]={textureFormat:Je,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[fe,ke]},e[oy]={textureFormat:Je,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[fe]},e[ay]={textureFormat:wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Y]},e[uy]={textureFormat:wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[St]},e[cy]={textureFormat:wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[xn]},e[fy]={textureFormat:wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Gi]},e[ly]={textureFormat:wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Kt]},e[hy]={textureFormat:wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Hi]},e[dy]={textureFormat:j,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Y]},e[py]={textureFormat:j,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Y]},e[gy]={textureFormat:j,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[St]},e[my]={textureFormat:j,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[Y,Bl,ma]},e[Ay]={textureFormat:j,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[Y,Ml]},e[xy]={textureFormat:j,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[ma]},e[yy]={textureFormat:j,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[fe,ke]},e[by]={textureFormat:j,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[fe]},e[wy]={textureFormat:qt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Y]},e[vy]={textureFormat:qt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[St]},e[Ey]={textureFormat:qt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ma]},e[Cy]={textureFormat:qt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[xn]},e[Dy]={textureFormat:qt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Gi]},e[Sy]={textureFormat:qt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Hi]},e[My]={textureFormat:qt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Kt]},e[By]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[xn,Kt]},e[Fy]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Kt]},e[Iy]={textureFormat:br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[fe]},e[Py]={textureFormat:bl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ky]},e[Ty]={textureFormat:bl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ny]},Object.keys(e).forEach(function(n){const r=e[n];r.bytesPerElementMap={},r.bytesPerElement.forEach(function(i,s){const o=r.type[s];r.bytesPerElementMap[o]=i})}),Aa=e}return Aa[t]}function Oy(t,e){const n=ji(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(r===void 0)throw"unknown internal format";return r}function vn(t){const e=ji(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function Il(t){return(t&t-1)==0}function zy(t,e,n,r){if(!mn(t))return Il(e)&&Il(n);const i=ji(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function Uy(t){const e=ji(t);if(!e)throw"unknown internal format";return e.textureFilterable}function Tl(t,e,n){return An(e)?ca(e):n||Y}function Yi(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(!n&&!r){const s=Math.sqrt(i/(e===ct?6:1));s%1==0?(n=s,r=s):(n=i,r=1)}else if(r){if(!n&&(n=i/r,n%1))throw"can't guess dimensions"}else if(r=i/n,r%1)throw"can't guess dimensions";return{width:n,height:r}}function En(t,e){e.colorspaceConversion!==void 0&&t.pixelStorei(Ix,e.colorspaceConversion),e.premultiplyAlpha!==void 0&&t.pixelStorei(Tx,e.premultiplyAlpha),e.flipY!==void 0&&t.pixelStorei(Px,e.flipY)}function Pl(t){t.pixelStorei(ga,4),mn(t)&&(t.pixelStorei(vl,0),t.pixelStorei(El,0),t.pixelStorei(Cl,0),t.pixelStorei(Dl,0),t.pixelStorei(Sl,0))}function Gy(t,e,n,r){r.minMag&&(n.call(t,e,da,r.minMag),n.call(t,e,pa,r.minMag)),r.min&&n.call(t,e,da,r.min),r.mag&&n.call(t,e,pa,r.mag),r.wrap&&(n.call(t,e,zi,r.wrap),n.call(t,e,Ui,r.wrap),(e===Ct||_1(t,e))&&n.call(t,e,wl,r.wrap)),r.wrapR&&n.call(t,e,wl,r.wrapR),r.wrapS&&n.call(t,e,zi,r.wrapS),r.wrapT&&n.call(t,e,Ui,r.wrapT),r.minLod&&n.call(t,e,Sx,r.minLod),r.maxLod&&n.call(t,e,Mx,r.maxLod),r.baseLevel&&n.call(t,e,Bx,r.baseLevel),r.maxLevel&&n.call(t,e,Fx,r.maxLevel)}function Ll(t,e,n){const r=n.target||ut;t.bindTexture(r,e),Gy(t,r,t.texParameteri,n)}function Hy(t){return t=t||Et.textureColor,An(t)?t:new Uint8Array([t[0]*255,t[1]*255,t[2]*255,t[3]*255])}function xa(t,e,n,r,i,s){n=n||Et.textureOptions,s=s||j;const o=n.target||ut;if(r=r||n.width,i=i||n.height,t.bindTexture(o,e),zy(t,r,i,s))t.generateMipmap(o);else{const a=Uy(s)?bx:yx;t.texParameteri(o,da,a),t.texParameteri(o,pa,a),t.texParameteri(o,zi,ki),t.texParameteri(o,Ui,ki)}}function vr(t){return t.auto===!0||t.auto===void 0&&t.level===void 0}function ya(t,e){return e=e||{},e.cubeFaceOrder||[Oi,wx,vx,Ex,Cx,Dx]}function ba(t,e){const r=ya(t,e).map(function(i,s){return{face:i,ndx:s}});return r.sort(function(i,s){return i.face-s.face}),r}function Rl(t,e,n,r){r=r||Et.textureOptions;const i=r.target||ut,s=r.level||0;let o=n.width,a=n.height;const u=r.internalFormat||r.format||j,c=vn(u),l=r.format||c.format,f=r.type||c.type;if(En(t,r),t.bindTexture(i,e),i===ct){const h=n.width,p=n.height;let d,g;if(h/6===p)d=p,g=[0,0,1,0,2,0,3,0,4,0,5,0];else if(p/6===h)d=h,g=[0,0,0,1,0,2,0,3,0,4,0,5];else if(h/3==p/2)d=h/3,g=[0,0,1,0,2,0,0,1,1,1,2,1];else if(h/2==p/3)d=h/2,g=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);const m=ml();m?(m.canvas.width=d,m.canvas.height=d,o=d,a=d,ba(t,r).forEach(function(A){const b=g[A.ndx*2+0]*d,y=g[A.ndx*2+1]*d;m.drawImage(n,b,y,d,d,0,0,d,d),t.texImage2D(A.face,s,u,l,f,m.canvas)}),m.canvas.width=1,m.canvas.height=1):typeof createImageBitmap!="undefined"&&(o=d,a=d,ba(t,r).forEach(function(A){const b=g[A.ndx*2+0]*d,y=g[A.ndx*2+1]*d;t.texImage2D(A.face,s,u,d,d,0,l,f,null),createImageBitmap(n,b,y,d,d,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(v){En(t,r),t.bindTexture(i,e),t.texImage2D(A.face,s,u,l,f,v),vr(r)&&xa(t,e,r,o,a,u)})}))}else if(i===Ct||i===Dt){const h=Math.min(n.width,n.height),p=Math.max(n.width,n.height),d=p/h;if(d%1!=0)throw"can not compute 3D dimensions of element";const g=n.width===p?1:0,m=n.height===p?1:0;t.pixelStorei(ga,1),t.pixelStorei(vl,n.width),t.pixelStorei(El,0),t.pixelStorei(Sl,0),t.texImage3D(i,s,u,h,h,h,0,l,f,null);for(let A=0;A<d;++A){const b=A*h*g,y=A*h*m;t.pixelStorei(Cl,b),t.pixelStorei(Dl,y),t.texSubImage3D(i,s,0,0,A,h,h,1,l,f,n)}Pl(t)}else t.texImage2D(i,s,u,l,f,n);vr(r)&&xa(t,e,r,o,a,u),Ll(t,e,r)}function Er(){}function Vy(t){if(typeof document!="undefined"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}else{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function Qy(t,e){return e===void 0&&!Vy(t)?"anonymous":e}function jy(t,e,n){n=n||Er;let r;if(e=e!==void 0?e:Et.crossOrigin,e=Qy(t,e),typeof Image!="undefined"){r=new Image,e!==void 0&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",s),r.removeEventListener("load",o),r=null},s=function(){const u="couldn't load image: "+t;q1(u),n(u,r),i()},o=function(){n(null,r),i()};return r.addEventListener("error",s),r.addEventListener("load",o),r.src=t,r}else if(typeof ImageBitmap!="undefined"){let i,s;const o=function(){n(i,s)},a={};e&&(a.mode="cors"),fetch(t,a).then(function(u){if(!u.ok)throw u;return u.blob()}).then(function(u){return createImageBitmap(u,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(u){s=u,setTimeout(o)}).catch(function(u){i=u,setTimeout(o)}),r=null}return r}function Nl(t){return typeof ImageBitmap!="undefined"&&t instanceof ImageBitmap||typeof ImageData!="undefined"&&t instanceof ImageData||typeof HTMLElement!="undefined"&&t instanceof HTMLElement}function wa(t,e,n){return Nl(t)?(setTimeout(function(){n(null,t)}),t):jy(t,e,n)}function va(t,e,n){n=n||Et.textureOptions;const r=n.target||ut;if(t.bindTexture(r,e),n.color===!1)return;const i=Hy(n.color);if(r===ct)for(let s=0;s<6;++s)t.texImage2D(Oi+s,0,j,1,1,0,j,Y,i);else r===Ct||r===Dt?t.texImage3D(r,0,j,1,1,1,0,j,Y,i):t.texImage2D(r,0,j,1,1,0,j,Y,i)}function Yy(t,e,n,r){return r=r||Er,n=n||Et.textureOptions,va(t,e,n),n=Object.assign({},n),wa(n.src,n.crossOrigin,function(s,o){s?r(s,e,o):(Rl(t,e,o,n),r(null,e,o))})}function Wy(t,e,n,r){r=r||Er;const i=n.src;if(i.length!==6)throw"there must be 6 urls for a cubemap";const s=n.level||0,o=n.internalFormat||n.format||j,a=vn(o),u=n.format||a.format,c=n.type||Y,l=n.target||ut;if(l!==ct)throw"target must be TEXTURE_CUBE_MAP";va(t,e,n),n=Object.assign({},n);let f=6;const h=[],p=ya(t,n);let d;function g(m){return function(A,b){--f,A?h.push(A):b.width!==b.height?h.push("cubemap face img is not a square: "+b.src):(En(t,n),t.bindTexture(l,e),f===5?ya().forEach(function(y){t.texImage2D(y,s,o,u,c,b)}):t.texImage2D(m,s,o,u,c,b),vr(n)&&t.generateMipmap(l)),f===0&&r(h.length?h:void 0,e,d)}}d=i.map(function(m,A){return wa(m,n.crossOrigin,g(p[A]))})}function Xy(t,e,n,r){r=r||Er;const i=n.src,s=n.internalFormat||n.format||j,o=vn(s),a=n.format||o.format,u=n.type||Y,c=n.target||Dt;if(c!==Ct&&c!==Dt)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";va(t,e,n),n=Object.assign({},n);let l=i.length;const f=[];let h;const p=n.level||0;let d=n.width,g=n.height;const m=i.length;let A=!0;function b(y){return function(v,D){if(--l,v)f.push(v);else{if(En(t,n),t.bindTexture(c,e),A){A=!1,d=n.width||D.width,g=n.height||D.height,t.texImage3D(c,p,s,d,g,m,0,a,u,null);for(let C=0;C<m;++C)t.texSubImage3D(c,p,0,0,C,d,g,1,a,u,D)}else{let C=D,B;(D.width!==d||D.height!==g)&&(B=ml(),C=B.canvas,B.canvas.width=d,B.canvas.height=g,B.drawImage(D,0,0,d,g)),t.texSubImage3D(c,p,0,0,y,d,g,1,a,u,C),B&&C===B.canvas&&(B.canvas.width=0,B.canvas.height=0)}vr(n)&&t.generateMipmap(c)}l===0&&r(f.length?f:void 0,e,h)}}h=i.map(function(y,v){return wa(y,n.crossOrigin,b(v))})}function kl(t,e,n,r){r=r||Et.textureOptions;const i=r.target||ut;t.bindTexture(i,e);let s=r.width,o=r.height,a=r.depth;const u=r.level||0,c=r.internalFormat||r.format||j,l=vn(c),f=r.format||l.format,h=r.type||Tl(t,n,l.type);if(An(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const m=K1(h);n=new m(n)}const p=Oy(c,h),d=n.byteLength/p;if(d%1)throw"length wrong size for format: "+ha(t,f);let g;if(i===Ct||i===Dt)if(!s&&!o&&!a){const m=Math.cbrt(d);if(m%1!=0)throw"can't guess cube size of array of numElements: "+d;s=m,o=m,a=m}else s&&(!o||!a)?(g=Yi(t,i,o,a,d/s),o=g.width,a=g.height):o&&(!s||!a)?(g=Yi(t,i,s,a,d/o),s=g.width,a=g.height):(g=Yi(t,i,s,o,d/a),s=g.width,o=g.height);else g=Yi(t,i,s,o,d),s=g.width,o=g.height;if(Pl(t),t.pixelStorei(ga,r.unpackAlignment||1),En(t,r),i===ct){const m=p/n.BYTES_PER_ELEMENT,A=d/6*m;ba(t,r).forEach(b=>{const y=A*b.ndx,v=n.subarray(y,y+A);t.texImage2D(b.face,u,c,s,o,0,f,h,v)})}else i===Ct||i===Dt?t.texImage3D(i,u,c,s,o,a,0,f,h,n):t.texImage2D(i,u,c,s,o,0,f,h,n);return{width:s,height:o,depth:a,type:h}}function Zy(t,e,n){const r=n.target||ut;t.bindTexture(r,e);const i=n.level||0,s=n.internalFormat||n.format||j,o=vn(s),a=n.format||o.format,u=n.type||o.type;if(En(t,n),r===ct)for(let c=0;c<6;++c)t.texImage2D(Oi+c,i,s,n.width,n.height,0,a,u,null);else r===Ct||r===Dt?t.texImage3D(r,i,s,n.width,n.height,n.depth,0,a,u,null):t.texImage2D(r,i,s,n.width,n.height,0,a,u,null)}function Cr(t,e,n){n=n||Er,e=e||Et.textureOptions;const r=t.createTexture(),i=e.target||ut;let s=e.width||1,o=e.height||1;const a=e.internalFormat||j;t.bindTexture(i,r),i===ct&&(t.texParameteri(i,zi,ki),t.texParameteri(i,Ui,ki));let u=e.src;if(u)if(typeof u=="function"&&(u=u(t,e)),typeof u=="string")Yy(t,r,e,n);else if(An(u)||Array.isArray(u)&&(typeof u[0]=="number"||Array.isArray(u[0])||An(u[0]))){const c=kl(t,r,u,e);s=c.width,o=c.height}else Array.isArray(u)&&(typeof u[0]=="string"||Nl(u[0]))?i===ct?Wy(t,r,e,n):Xy(t,r,e,n):(Rl(t,r,u,e),s=u.width,o=u.height);else Zy(t,r,e);return vr(e)&&xa(t,r,e,s,o,a),Ll(t,r,e),r}function Ky(t,e,n,r,i,s){r=r||n.width,i=i||n.height,s=s||n.depth;const o=n.target||ut;t.bindTexture(o,e);const a=n.level||0,u=n.internalFormat||n.format||j,c=vn(u),l=n.format||c.format;let f;const h=n.src;if(h&&(An(h)||Array.isArray(h)&&typeof h[0]=="number")?f=n.type||Tl(t,h,c.type):f=n.type||c.type,o===ct)for(let p=0;p<6;++p)t.texImage2D(Oi+p,a,u,r,i,0,l,f,null);else o===Ct||o===Dt?t.texImage3D(o,a,u,r,i,s,0,l,f,null):t.texImage2D(o,a,u,r,i,0,l,f,null)}const qy=ul,Wi=33984,Jy=35048,Xi=34962,_y=34963,Ea=35345,Ol=35718,$y=35721,eb=35971,tb=35382,nb=35396,rb=35398,ib=35392,sb=35395,Zi=5126,zl=35664,Ul=35665,Gl=35666,Ca=5124,Hl=35667,Vl=35668,Ql=35669,jl=35670,Yl=35671,Wl=35672,Xl=35673,Zl=35674,Kl=35675,ql=35676,ob=35678,ab=35680,ub=35679,cb=35682,fb=35685,lb=35686,hb=35687,db=35688,pb=35689,gb=35690,mb=36289,Ab=36292,xb=36293,Da=5125,Jl=36294,_l=36295,$l=36296,yb=36298,bb=36299,wb=36300,vb=36303,Eb=36306,Cb=36307,Db=36308,Sb=36311,Ki=3553,qi=34067,Sa=32879,Ji=35866,F={};function e0(t,e){return F[e].bindPoint}function Mb(t,e){return function(n){t.uniform1f(e,n)}}function Bb(t,e){return function(n){t.uniform1fv(e,n)}}function Fb(t,e){return function(n){t.uniform2fv(e,n)}}function Ib(t,e){return function(n){t.uniform3fv(e,n)}}function Tb(t,e){return function(n){t.uniform4fv(e,n)}}function t0(t,e){return function(n){t.uniform1i(e,n)}}function n0(t,e){return function(n){t.uniform1iv(e,n)}}function r0(t,e){return function(n){t.uniform2iv(e,n)}}function i0(t,e){return function(n){t.uniform3iv(e,n)}}function s0(t,e){return function(n){t.uniform4iv(e,n)}}function Pb(t,e){return function(n){t.uniform1ui(e,n)}}function Lb(t,e){return function(n){t.uniform1uiv(e,n)}}function Rb(t,e){return function(n){t.uniform2uiv(e,n)}}function Nb(t,e){return function(n){t.uniform3uiv(e,n)}}function kb(t,e){return function(n){t.uniform4uiv(e,n)}}function Ob(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function zb(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function Ub(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function Gb(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function Hb(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function Vb(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function Qb(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function jb(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function Yb(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function le(t,e,n,r){const i=e0(t,e);return mn(t)?function(s){let o,a;Ni(t,s)?(o=s,a=null):(o=s.texture,a=s.sampler),t.uniform1i(r,n),t.activeTexture(Wi+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(s){t.uniform1i(r,n),t.activeTexture(Wi+n),t.bindTexture(i,s)}}function he(t,e,n,r,i){const s=e0(t,e),o=new Int32Array(i);for(let a=0;a<i;++a)o[a]=n+a;return mn(t)?function(a){t.uniform1iv(r,o),a.forEach(function(u,c){t.activeTexture(Wi+o[c]);let l,f;Ni(t,u)?(l=u,f=null):(l=u.texture,f=u.sampler),t.bindSampler(n,f),t.bindTexture(s,l)})}:function(a){t.uniform1iv(r,o),a.forEach(function(u,c){t.activeTexture(Wi+o[c]),t.bindTexture(s,u)})}}F[Zi]={Type:Float32Array,size:4,setter:Mb,arraySetter:Bb},F[zl]={Type:Float32Array,size:8,setter:Fb,cols:2},F[Ul]={Type:Float32Array,size:12,setter:Ib,cols:3},F[Gl]={Type:Float32Array,size:16,setter:Tb,cols:4},F[Ca]={Type:Int32Array,size:4,setter:t0,arraySetter:n0},F[Hl]={Type:Int32Array,size:8,setter:r0,cols:2},F[Vl]={Type:Int32Array,size:12,setter:i0,cols:3},F[Ql]={Type:Int32Array,size:16,setter:s0,cols:4},F[Da]={Type:Uint32Array,size:4,setter:Pb,arraySetter:Lb},F[Jl]={Type:Uint32Array,size:8,setter:Rb,cols:2},F[_l]={Type:Uint32Array,size:12,setter:Nb,cols:3},F[$l]={Type:Uint32Array,size:16,setter:kb,cols:4},F[jl]={Type:Uint32Array,size:4,setter:t0,arraySetter:n0},F[Yl]={Type:Uint32Array,size:8,setter:r0,cols:2},F[Wl]={Type:Uint32Array,size:12,setter:i0,cols:3},F[Xl]={Type:Uint32Array,size:16,setter:s0,cols:4},F[Zl]={Type:Float32Array,size:32,setter:Ob,rows:2,cols:2},F[Kl]={Type:Float32Array,size:48,setter:zb,rows:3,cols:3},F[ql]={Type:Float32Array,size:64,setter:Ub,rows:4,cols:4},F[fb]={Type:Float32Array,size:32,setter:Gb,rows:2,cols:3},F[lb]={Type:Float32Array,size:32,setter:Vb,rows:2,cols:4},F[hb]={Type:Float32Array,size:48,setter:Hb,rows:3,cols:2},F[db]={Type:Float32Array,size:48,setter:jb,rows:3,cols:4},F[pb]={Type:Float32Array,size:64,setter:Qb,rows:4,cols:2},F[gb]={Type:Float32Array,size:64,setter:Yb,rows:4,cols:3},F[ob]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ki},F[ab]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:qi},F[ub]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Sa},F[cb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ki},F[mb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ji},F[Ab]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ji},F[xb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:qi},F[yb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ki},F[bb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Sa},F[wb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:qi},F[vb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ji},F[Eb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ki},F[Cb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Sa},F[Db]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:qi},F[Sb]={Type:null,size:0,setter:le,arraySetter:he,bindPoint:Ji};function _i(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(Xi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||Zi,n.normalize||!1,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function Mt(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4iv(e,n.value);else throw new Error("The length of an integer constant value must be 4!");else t.bindBuffer(Xi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Ca,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function $i(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4uiv(e,n.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else t.bindBuffer(Xi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Da,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function Ma(t,e,n){const r=n.size,i=n.count;return function(s){t.bindBuffer(Xi,s.buffer);const o=s.size||s.numComponents||r,a=o/i,u=s.type||Zi,l=F[u].size*o,f=s.normalize||!1,h=s.offset||0,p=l/i;for(let d=0;d<i;++d)t.enableVertexAttribArray(e+d),t.vertexAttribPointer(e+d,a,u,f,l,h+p*d),s.divisor!==void 0&&t.vertexAttribDivisor(e+d,s.divisor)}}const J={};J[Zi]={size:4,setter:_i},J[zl]={size:8,setter:_i},J[Ul]={size:12,setter:_i},J[Gl]={size:16,setter:_i},J[Ca]={size:4,setter:Mt},J[Hl]={size:8,setter:Mt},J[Vl]={size:12,setter:Mt},J[Ql]={size:16,setter:Mt},J[Da]={size:4,setter:$i},J[Jl]={size:8,setter:$i},J[_l]={size:12,setter:$i},J[$l]={size:16,setter:$i},J[jl]={size:4,setter:Mt},J[Yl]={size:8,setter:Mt},J[Wl]={size:12,setter:Mt},J[Xl]={size:16,setter:Mt},J[Zl]={size:4,setter:Ma,count:2},J[Kl]={size:9,setter:Ma,count:3},J[ql]={size:16,setter:Ma,count:4};function o0(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const Wb=/(\.|\[|]|\w+)/g,Xb=t=>t>="0"&&t<="9";function a0(t,e,n,r){const i=t.split(Wb).filter(a=>a!=="");let s=0,o="";for(;;){const a=i[s++];o+=a;const u=Xb(a[0]),c=u?parseInt(a):a;if(u&&(o+=i[s++]),s===i.length){n[c]=e;break}else{const f=i[s++],h=f==="[",p=n[c]||(h?[]:{});n[c]=p,n=p,r[o]=r[o]||function(d){return function(g){c0(d,g)}}(p),o+=f}}}function Zb(t,e){let n=0;function r(a,u,c){const l=u.name.endsWith("[0]"),f=u.type,h=F[f];if(!h)throw new Error(`unknown type: 0x${f.toString(16)}`);let p;if(h.bindPoint){const d=n;n+=u.size,l?p=h.arraySetter(t,f,d,c,u.size):p=h.setter(t,f,d,c,u.size)}else h.arraySetter&&l?p=h.arraySetter(t,c):p=h.setter(t,c);return p.location=c,p}const i={},s={},o=t.getProgramParameter(e,Ol);for(let a=0;a<o;++a){const u=t.getActiveUniform(e,a);if(o0(u))continue;let c=u.name;c.endsWith("[0]")&&(c=c.substr(0,c.length-3));const l=t.getUniformLocation(e,u.name);if(l){const f=r(e,u,l);i[c]=f,a0(c,f,s,i)}}return i}function Kb(t,e){const n={},r=t.getProgramParameter(e,eb);for(let i=0;i<r;++i){const s=t.getTransformFeedbackVarying(e,i);n[s.name]={index:i,type:s.type,size:s.size}}return n}function qb(t,e){const n=t.getProgramParameter(e,Ol),r=[],i=[];for(let a=0;a<n;++a){i.push(a),r.push({});const u=t.getActiveUniform(e,a);r[a].name=u.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(a){const u=a[0],c=a[1];t.getActiveUniforms(e,i,t[u]).forEach(function(l,f){r[f][c]=l})});const s={},o=t.getProgramParameter(e,tb);for(let a=0;a<o;++a){const u=t.getActiveUniformBlockName(e,a),c={index:t.getUniformBlockIndex(e,u),usedByVertexShader:t.getActiveUniformBlockParameter(e,a,nb),usedByFragmentShader:t.getActiveUniformBlockParameter(e,a,rb),size:t.getActiveUniformBlockParameter(e,a,ib),uniformIndices:t.getActiveUniformBlockParameter(e,a,sb)};c.used=c.usedByVertexShader||c.usedByFragmentShader,s[u]=c}return{blockSpecs:s,uniformData:r}}const u0=/\[\d+\]\.$/,Jb=(t,e)=>((t+(e-1))/e|0)*e;function _b(t,e,n,r){if(e||n){r=r||1;const s=t.length/4;return function(o){let a=0,u=0;for(let c=0;c<s;++c){for(let l=0;l<r;++l)t[a++]=o[u++];a+=4-r}}}else return function(i){i.length?t.set(i):t[0]=i}}function $b(t,e,n,r){const i=n.blockSpecs,s=n.uniformData,o=i[r];if(!o)return qy("no uniform block object named:",r),{name:r,uniforms:{}};const a=new ArrayBuffer(o.size),u=t.createBuffer(),c=o.index;t.bindBuffer(Ea,u),t.uniformBlockBinding(e,o.index,c);let l=r+".";u0.test(l)&&(l=l.replace(u0,"."));const f={},h={},p={};return o.uniformIndices.forEach(function(d){const g=s[d];let m=g.name;m.startsWith(l)&&(m=m.substr(l.length));const A=m.endsWith("[0]");A&&(m=m.substr(0,m.length-3));const b=F[g.type],y=b.Type,v=A?Jb(b.size,16)*g.size:b.size*g.size,D=new y(a,g.offset,v/y.BYTES_PER_ELEMENT);f[m]=D;const C=_b(D,A,b.rows,b.cols);h[m]=C,a0(m,C,p,h)}),{name:r,array:a,asFloat:new Float32Array(a),buffer:u,uniforms:f,setters:h}}function e2(t,e,n){return $b(t,e.program,e.uniformBlockSpec,n)}function t2(t,e,n){const i=(e.uniformBlockSpec||e).blockSpecs[n.name];if(i){const s=i.index;return t.bindBufferRange(Ea,s,n.buffer,n.offset||0,n.array.byteLength),!0}return!1}function n2(t,e,n){t2(t,e,n)&&t.bufferData(Ea,n.array,Jy)}function c0(t,e){for(const n in e){const r=t[n];typeof r=="function"?r(e[n]):c0(t[n],e[n])}}function de(t,...e){const n=t.uniformSetters||t,r=e.length;for(let i=0;i<r;++i){const s=e[i];if(Array.isArray(s)){const o=s.length;for(let a=0;a<o;++a)de(n,s[a])}else for(const o in s){const a=n[o];a&&a(s[o])}}}function r2(t,e){const n={},r=t.getProgramParameter(e,$y);for(let i=0;i<r;++i){const s=t.getActiveAttrib(e,i);if(o0(s))continue;const o=t.getAttribLocation(e,s.name),a=J[s.type],u=a.setter(t,o,a);u.location=o,n[s.name]=u}return n}function i2(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function Cn(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(i2(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(_y,n.indices))}function s2(t,e){const n=Zb(t,e),r=r2(t,e),i={program:e,uniformSetters:n,attribSetters:r};return mn(t)&&(i.uniformBlockSpec=qb(t,e),i.transformFeedbackInfo=Kb(t,e)),i}const o2=4,f0=5123;function Dr(t,e,n,r,i,s){n=n===void 0?o2:n;const o=e.indices,a=e.elementType,u=r===void 0?e.numElements:r;i=i===void 0?0:i,a||o?s!==void 0?t.drawElementsInstanced(n,u,a===void 0?f0:e.elementType,i,s):t.drawElements(n,u,a===void 0?f0:e.elementType,i):s!==void 0?t.drawArraysInstanced(n,i,u,s):t.drawArrays(n,i,u)}const a2=36160,Sr=36161,u2=3553,c2=5121,f2=6402,l2=6408,h2=33190,d2=36012,p2=35056,g2=36013,m2=32854,A2=32855,x2=36194,l0=33189,h0=6401,d0=36168,Ba=34041,y2=36064,es=36096,p0=36128,Fa=33306,Ia=33071,Ta=9729,g0=[{format:l2,type:c2,min:Ta,wrap:Ia},{format:Ba}],Oe={};Oe[Ba]=Fa,Oe[h0]=p0,Oe[d0]=p0,Oe[f2]=es,Oe[l0]=es,Oe[h2]=es,Oe[d2]=es,Oe[p2]=Fa,Oe[g2]=Fa;function b2(t,e){return Oe[t]||Oe[e]}const Bt={};Bt[m2]=!0,Bt[A2]=!0,Bt[x2]=!0,Bt[Ba]=!0,Bt[l0]=!0,Bt[h0]=!0,Bt[d0]=!0;function w2(t){return Bt[t]}function v2(t,e,n,r){const i=a2,s=t.createFramebuffer();t.bindFramebuffer(i,s),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight,e=e||g0;let o=0;const a={framebuffer:s,attachments:[],width:n,height:r};return e.forEach(function(u){let c=u.attachment;const l=u.format;let f=u.attachmentPoint||b2(l,u.internalFormat);if(f||(f=y2+o++),!c)if(w2(l))c=t.createRenderbuffer(),t.bindRenderbuffer(Sr,c),t.renderbufferStorage(Sr,l,n,r);else{const h=Object.assign({},u);h.width=n,h.height=r,h.auto===void 0&&(h.auto=!1,h.min=h.min||h.minMag||Ta,h.mag=h.mag||h.minMag||Ta,h.wrapS=h.wrapS||h.wrap||Ia,h.wrapT=h.wrapT||h.wrap||Ia),c=Cr(t,h)}if(cl(t,c))t.framebufferRenderbuffer(i,f,Sr,c);else if(Ni(t,c))u.layer!==void 0?t.framebufferTextureLayer(i,f,c,u.level||0,u.layer):t.framebufferTexture2D(i,f,u.target||u2,c,u.level||0);else throw new Error("unknown attachment type");a.attachments.push(c)}),a}function E2(t,e,n,r,i){r=r||t.drawingBufferWidth,i=i||t.drawingBufferHeight,e.width=r,e.height=i,n=n||g0,n.forEach(function(s,o){const a=e.attachments[o],u=s.format;if(cl(t,a))t.bindRenderbuffer(Sr,a),t.renderbufferStorage(Sr,u,r,i);else if(Ni(t,a))Ky(t,a,s,r,i);else throw new Error("unknown attachment type")})}function C2(t,e,n){const r=t.createVertexArray();return t.bindVertexArray(r),e.length||(e=[e]),e.forEach(function(i){Cn(t,i,n)}),t.bindVertexArray(null),{numElements:n.numElements,elementType:n.elementType,vertexArrayObject:r}}const D2=/^(.*?)_/;function S2(t,e){ha(t,0);const n=t.getExtension(e);if(n){const r={},i=D2.exec(e)[1],s="_"+i;for(const o in n){const a=n[o],u=typeof a=="function",c=u?i:s;let l=o;o.endsWith(c)&&(l=o.substring(0,o.length-c.length)),t[l]!==void 0?!u&&t[l]!==a&&ul(l,t[l],a,o):u?t[l]=function(f){return function(){return f.apply(n,arguments)}}(a):(t[l]=a,r[l]=a)}r.constructor={name:n.constructor.name},ha(r,0)}return n}const m0=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_color_buffer_float","EXT_color_buffer_half_float","EXT_disjoint_timer_query","EXT_disjoint_timer_query_webgl2","EXT_frag_depth","EXT_sRGB","EXT_shader_texture_lod","EXT_texture_filter_anisotropic","OES_element_index_uint","OES_standard_derivatives","OES_texture_float","OES_texture_float_linear","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_compressed_texture_atc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_pvrtc","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_depth_texture","WEBGL_draw_buffers"];function A0(t){for(let e=0;e<m0.length;++e)S2(t,m0[e])}function M2(t,e){const n=["webgl2","webgl","experimental-webgl"];let r=null;for(let i=0;i<n.length;++i)if(r=t.getContext(n[i],e),r){A0(r);break}return r}function B2(t,e){return M2(t,e)}var F2=`/***The vertex position wrt the rectangle specified by(x,x2,y,y2).*[0,0]=[x,y],[1,1]=[x2,y2].*The x or y component may contain fractional values if the rectangle*have been tessellated.*/in vec2 frac;uniform vec2 uMinSize;uniform float uMinOpacity;uniform vec4 uCornerRadii;flat out lowp vec4 vFillColor;flat out lowp vec4 vStrokeColor;flat out float vHalfStrokeWidth;flat out vec4 vCornerRadii;
15
+ #if defined(ROUNDED_CORNERS) || defined(STROKED)
16
+ out vec2 vPosInPixels;
17
+ #endif
18
+ flat out vec2 vHalfSizeInPixels;/***Clamps the minimumSize and returns an opacity that reflects the amount of clamping.*/float clampMinSize(inout float pos,float frac,float size,float minSize){if(minSize>0.0&&abs(size)<minSize){pos+=(frac-0.5)*(minSize*sign(size)-size);return abs(size)/minSize;}return 1.0;}void sort(inout float a,inout float b){if(a>b){float tmp=b;b=a;a=tmp;}}void main(void){vec2 normalizedMinSize=uMinSize/uViewportSize;float x=getScaled_x();float x2=getScaled_x2();float y=getScaled_y();float y2=getScaled_y2();sort(x,x2);sort(y,y2);float clampMargin=1.0;vec2 pos1=vec2(clamp(x,0.0-clampMargin,1.0+clampMargin),y);vec2 pos2=vec2(clamp(x2,0.0-clampMargin,1.0+clampMargin),y2);vec2 size=pos2-pos1;if(size.x<=0.0||size.y<=0.0){gl_Position=vec4(0.0,0.0,0.0,1.0);return;}vec2 pos=pos1+frac*size;size.y*=getSampleFacetHeight(pos);float opaFactor=uViewOpacity*max(uMinOpacity,clampMinSize(pos.x,frac.x,size.x,normalizedMinSize.x)*clampMinSize(pos.y,frac.y,size.y,normalizedMinSize.y));pos=applySampleFacet(pos);
19
+ #if defined(ROUNDED_CORNERS) || defined(STROKED)
20
+ float aaPadding=1.0/uDevicePixelRatio;float strokeWidth=getScaled_strokeWidth();float strokeOpacity=getScaled_strokeOpacity()*opaFactor;vec2 centeredFrac=frac-0.5;vec2 expand=centeredFrac*(strokeWidth+aaPadding)/uViewportSize;pos+=expand;vec2 sizeInPixels=size*uViewportSize;vPosInPixels=(centeredFrac+expand/size)*sizeInPixels;vHalfSizeInPixels=sizeInPixels/2.0;vCornerRadii=min(uCornerRadii,min(vHalfSizeInPixels.x,vHalfSizeInPixels.y));vHalfStrokeWidth=strokeWidth/2.0;vStrokeColor=vec4(getScaled_stroke()*strokeOpacity,strokeOpacity);
21
+ #endif
22
+ gl_Position=unitToNdc(pos);float fillOpacity=getScaled_fillOpacity()*opaFactor;vFillColor=vec4(getScaled_fill()*fillOpacity,fillOpacity);setupPicking();}`,I2=`#if defined(ROUNDED_CORNERS) || defined(STROKED)
23
+ in vec2 vPosInPixels;
24
+ #endif
25
+ flat in vec2 vHalfSizeInPixels;flat in lowp vec4 vFillColor;flat in lowp vec4 vStrokeColor;flat in float vHalfStrokeWidth;flat in vec4 vCornerRadii;out lowp vec4 fragColor;float sdRoundedBox(vec2 p,vec2 b,vec4 r){r.xy=p.x>0.0 ? r.xy : r.zw;r.x=p.y>0.0 ? r.x : r.y;vec2 q=abs(p)-b+r.x;return min(max(q.x,q.y),0.0)+length(max(q,0.0))-r.x;}float sdSharpBox(vec2 p,vec2 b){vec2 q=abs(p)-b;return max(q.x,q.y);}void main(void){
26
+ #if defined(ROUNDED_CORNERS) || defined(STROKED)
27
+ #ifdef ROUNDED_CORNERS
28
+ float d=sdRoundedBox(vPosInPixels,vHalfSizeInPixels,vCornerRadii);
29
+ #else
30
+ float d=sdSharpBox(vPosInPixels,vHalfSizeInPixels);
31
+ #endif
32
+ fragColor=distanceToColor(d,vFillColor,vStrokeColor,vHalfStrokeWidth);if(fragColor.a==0.0){discard;}
33
+ #else
34
+ fragColor=vFillColor;
35
+ #endif
36
+ if(uPickingEnabled){fragColor=vPickingColor;}}`;function Pa(t,e=[],n=0){const r=Math.fround(t);return e[n]=r,e[n+1]=isFinite(r)?t-r:0,e}function T2(t){switch(k2(t).gpuVendor.toLowerCase()){case"nvidia":return` #define NVIDIA_GPU
37
+ // Nvidia optimizes away the calculation necessary for emulated fp64
38
+ #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
39
+ `;case"intel":return` #define INTEL_GPU
40
+ // Intel optimizes away the calculation necessary for emulated fp64
41
+ #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
42
+ // Intel's built-in 'tan' function doesn't have acceptable precision
43
+ #define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
44
+ // Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
45
+ #define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
46
+ `;case"amd":return` #define AMD_GPU
47
+ `;default:return` #define DEFAULT_GPU
48
+ // Prevent driver from optimizing away the calculation necessary for emulated fp64
49
+ #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
50
+ // Intel's built-in 'tan' function doesn't have acceptable precision
51
+ #define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
52
+ // Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
53
+ #define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
54
+ `}}const P2=7936,L2=7937,R2=7938,N2=35724;function k2(t){const e=t.getExtension("WEBGL_debug_renderer_info"),n=t.getParameter(e&&e.UNMASKED_VENDOR_WEBGL||P2),r=t.getParameter(e&&e.UNMASKED_RENDERER_WEBGL||L2);return{gpuVendor:O2(n,r),vendor:n,renderer:r,version:t.getParameter(R2),shadingLanguageVersion:t.getParameter(N2)}}function O2(t,e){return t.match(/NVIDIA/i)||e.match(/NVIDIA/i)?"NVIDIA":t.match(/INTEL/i)||e.match(/INTEL/i)?"INTEL":t.match(/AMD/i)||e.match(/AMD/i)||t.match(/ATI/i)||e.match(/ATI/i)?"AMD":"UNKNOWN GPU"}function La(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function x0(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Mr(){}var Br=.7,ts=1/Br,Dn="\\s*([+-]?\\d+)\\s*",Fr="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",_e="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",z2=/^#([0-9a-f]{3,8})$/,U2=new RegExp("^rgb\\("+[Dn,Dn,Dn]+"\\)$"),G2=new RegExp("^rgb\\("+[_e,_e,_e]+"\\)$"),H2=new RegExp("^rgba\\("+[Dn,Dn,Dn,Fr]+"\\)$"),V2=new RegExp("^rgba\\("+[_e,_e,_e,Fr]+"\\)$"),Q2=new RegExp("^hsl\\("+[Fr,_e,_e]+"\\)$"),j2=new RegExp("^hsla\\("+[Fr,_e,_e,Fr]+"\\)$"),y0={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};La(Mr,Ir,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:b0,formatHex:b0,formatHsl:Y2,formatRgb:w0,toString:w0});function b0(){return this.rgb().formatHex()}function Y2(){return S0(this).formatHsl()}function w0(){return this.rgb().formatRgb()}function Ir(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=z2.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?v0(e):n===3?new Ee(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?ns(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?ns(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=U2.exec(t))?new Ee(e[1],e[2],e[3],1):(e=G2.exec(t))?new Ee(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=H2.exec(t))?ns(e[1],e[2],e[3],e[4]):(e=V2.exec(t))?ns(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=Q2.exec(t))?D0(e[1],e[2]/100,e[3]/100,1):(e=j2.exec(t))?D0(e[1],e[2]/100,e[3]/100,e[4]):y0.hasOwnProperty(t)?v0(y0[t]):t==="transparent"?new Ee(NaN,NaN,NaN,0):null}function v0(t){return new Ee(t>>16&255,t>>8&255,t&255,1)}function ns(t,e,n,r){return r<=0&&(t=e=n=NaN),new Ee(t,e,n,r)}function W2(t){return t instanceof Mr||(t=Ir(t)),t?(t=t.rgb(),new Ee(t.r,t.g,t.b,t.opacity)):new Ee}function X2(t,e,n,r){return arguments.length===1?W2(t):new Ee(t,e,n,r==null?1:r)}function Ee(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}La(Ee,X2,x0(Mr,{brighter:function(t){return t=t==null?ts:Math.pow(ts,t),new Ee(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=t==null?Br:Math.pow(Br,t),new Ee(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:E0,formatHex:E0,formatRgb:C0,toString:C0}));function E0(){return"#"+Ra(this.r)+Ra(this.g)+Ra(this.b)}function C0(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(t===1?")":", "+t+")")}function Ra(t){return t=Math.max(0,Math.min(255,Math.round(t)||0)),(t<16?"0":"")+t.toString(16)}function D0(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new $e(t,e,n,r)}function S0(t){if(t instanceof $e)return new $e(t.h,t.s,t.l,t.opacity);if(t instanceof Mr||(t=Ir(t)),!t)return new $e;if(t instanceof $e)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),s=Math.max(e,n,r),o=NaN,a=s-i,u=(s+i)/2;return a?(e===s?o=(n-r)/a+(n<r)*6:n===s?o=(r-e)/a+2:o=(e-n)/a+4,a/=u<.5?s+i:2-s-i,o*=60):a=u>0&&u<1?0:o,new $e(o,a,u,t.opacity)}function Z2(t,e,n,r){return arguments.length===1?S0(t):new $e(t,e,n,r==null?1:r)}function $e(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}La($e,Z2,x0(Mr,{brighter:function(t){return t=t==null?ts:Math.pow(ts,t),new $e(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?Br:Math.pow(Br,t),new $e(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Ee(Na(t>=240?t-240:t+120,i,r),Na(t,i,r),Na(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(t===1?")":", "+t+")")}}));function Na(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const M0="attr_",B0="uDomain_",K2="range_",F0="scale_",I0="getScaled_",ka="uRangeTexture_",T0=3402823466e29;function q2(t){const e=t.match(/^(?:(\w+)-)?(\w+)$/);if(!e)throw new Error("Not a scale type: "+t);return{family:e[1]||"continuous",transform:e[2]}}function J2(t,e){let n;if(Li(t))n=Ft(ol(t)(e));else if(q(e))if(Zt(t))n=$2(e);else throw new Error(`String values are not supported on the "${t}" channel: ${e}`);else if(gs(e))n=Ft(e?1:0);else if(e===null)if(Zt(t))n=Ft([0,0,0]);else throw new Error(`null value is not supported on the "${t}" chanel.`);else n=Ft(e);return`
55
+ #define ${t}_DEFINED
56
+ ${n.type} ${I0}${t}() {
57
+ // Constant value
58
+ return ${n};
59
+ }`}function _2(t,e,n){var I;const r=Xt(t),i=M0+t,s=B0+r,o=K2+r,a=!!e.fp64,u=a?"vec2":"float",c=e.domain?e.domain().length:void 0;let l;const f=[];f.push(""),f.push("/".repeat(70)),f.push(`// Channel: ${t}`),f.push(""),f.push(`#define ${t}_DEFINED`),a&&f.push(`#define ${t}_FP64`);const{transform:h}=q2(e.type),p=(P,...X)=>ew.apply(null,[P+(a?"Fp64":""),"value",...X]);let d;switch(h){case"linear":d=p("scaleLinear","domain",o);break;case"log":d=p("scaleLog","domain",o,e.base());break;case"symlog":d=p("scaleSymlog","domain",o,e.constant());break;case"pow":case"sqrt":d=p("scalePow","domain",o,e.exponent());break;case"index":case"locus":case"point":case"band":d=p("scaleBand","domain",o,e.paddingInner(),e.paddingOuter(),e.align(),(I=n.band)!=null?I:.5);break;case"ordinal":case"null":case"identity":d=p("scaleIdentity");break;case"threshold":break;default:throw new Error(`Unsupported scale type: ${e.type}! ${t}: ${JSON.stringify(n)}`)}const g=vi(e.type)||Xe(e.type)&&Zt(t)?[0,1]:e.range?e.range():void 0;if(g&&t==r&&g.length&&g.every(me)){const P=P0(g);f.push(`const ${P.type} ${o} = ${P};`)}let m;if(Ii(n))if(me(n.datum))m=n.datum;else throw new Error(`Only quantitative datums are currently supported in the encoding definition: ${JSON.stringify(n)}`);const A=Zt(t)?"vec3":"float";let b;if(Zt(t)){const P=ka+r;if(t==r&&f.push(`uniform sampler2D ${P};`),Xe(e.type))b=`getInterpolatedColor(${P}, transformed)`;else if(Vt(e.type)||pn(e.type))b=`getDiscreteColor(${P}, int(transformed))`;else throw new Error("Problem with color scale!")}else if(e.type==="ordinal"||pn(e.type)){const P=ka+r;t==r&&f.push(`uniform sampler2D ${P};`),b=`getDiscreteColor(${P}, int(transformed)).r`}m!==void 0?f.push(`const highp ${u} ${i} = ${Ft(a?Pa(m):m)};`):f.push(`in highp ${u} ${i};`);const y=[],v=Xe(e.type)&&c>2,D=pn(e.type)||v;if(y.push("int slot = 0;"),D){const P=s;y.push(v?`while (slot < ${P}.length() - 2 && value >= ${P}[slot + 1]) { slot++; }`:`while (slot < ${P}.length() && value >= ${P}[slot]) { slot++; }`)}const C=Xe(e.type)||pn(e.type)||["band","point"].includes(e.type);if(d){const P=s;if(C){const X=a?"vec4":"vec2";y.push(`${X} domain = ${X}(${P}[slot], ${P}[slot + 1]);`)}y.push(`float transformed = ${d};`),v&&y.push(`transformed = (float(slot) + transformed) / (float(${P}.length()) - 1.0);`)}else y.push("float transformed = float(slot);");e.clamp&&e.clamp()&&y.push(`transformed = clampToRange(transformed, ${P0(g)});`),y.push(`return ${b!=null?b:"transformed"};`),f.push(`
60
+ ${A} ${F0}${t}(${u} value) {
61
+ ${y.map(P=>` ${P}
62
+ `).join("")}
63
+ }`),f.push(`
64
+ ${A} ${I0}${t}() {
65
+ return ${F0}${t}(${i});
66
+ }`);const B=f.join(`
67
+ `);if(C&&t==r){const P=Xe(e.type)||pn(e.type)?c:2;l=`${a?"vec2":"float"} ${s}[${P}];`}return{glsl:B,domainUniform:l}}function Oa(t){if(!me(t))throw new Error(`Not a number: ${t}`);if(t==1/0)return""+T0;if(t==-1/0)return""+-T0;{let e=`${t}`;return/^(-)?\d+$/.test(e)&&(e+=".0"),e}}function Ft(t){typeof t=="number"&&(t=[t]);const e=t.length;if(e<1||e>4)throw new Error("Invalid number of components: "+e);let n,r;return e>1?(n=`vec${e}`,r=`${n}(${t.map(Oa).join(", ")})`):(n="float",r=Oa(t[0])),Object.assign(r,{type:n,numComponents:e})}function $2(t){const e=Ir(t).rgb();return Ft([e.r,e.g,e.b].map(n=>n/255))}function P0(t){return Ft([t[0],Re(t)])}function ew(t,...e){const n=[];for(const r of e)me(r)?n.push(Oa(r)):Be(r)?n.push(Ft(r)):n.push(r);return`${t}(${n.join(", ")})`}class tw{constructor(e){this.size=e,this.arrays={},this.pushers=[],this.dataUpdaters=[],this.vertexCount=0}addConverter(e,n){const r=this.createUpdater(M0+e,n.numComponents||1,n.arrayReference),i=n.f;this.dataUpdaters.push(n.arrayReference?s=>r(i(s)):s=>r(i(s)))}createUpdater(e,n,r){if(!me(this.size))throw new Error("The number of vertices must be defined!");let i,s,o=0;const a=new Float32Array(this.size*n);if(this.arrays[e]={data:a,numComponents:n},n==1){let u=0;const c=l=>{u=+l};i=()=>{a[o++]=u},s=c}else{let u=r!=null?r:[0];const c=r?l=>{}:l=>{u=l};switch(n){case 1:break;case 2:i=()=>{a[o++]=u[0],a[o++]=u[1]},s=c;break;case 3:i=()=>{a[o++]=u[0],a[o++]=u[1],a[o++]=u[2]},s=c;break;case 4:i=()=>{a[o++]=u[0],a[o++]=u[1],a[o++]=u[2],a[o++]=u[3]},s=c;break;default:throw new Error("Invalid numComponents: "+n)}}return this.pushers.push(i),s}_unrollPushAll(){let e="",n="";for(let i=0;i<this.pushers.length;i++)e+=`const p${i} = that.pushers[${i}];
68
+ `,n+=`p${i}();
69
+ `;const r=new Function("that",`${e}
70
+
71
+ return function unrolledPushAll() {
72
+ ${n}
73
+ that.vertexCount++;
74
+ };
75
+ `);this.pushAll=r(this)}pushAll(){this.size>1e5?this._unrollPushAll():this.pushAll=()=>{for(let n=0;n<this.pushers.length;n++)this.pushers[n]();this.vertexCount++},this.pushAll()}updateFromDatum(e){for(let n=0;n<this.dataUpdaters.length;n++)this.dataUpdaters[n](e)}pushFromDatum(e){this.updateFromDatum(e),this.pushAll()}}const Sn=5,za=127;function Ua(t){const e=[];for(let d=0;d<=za;d++)e.push(void 0);const n=new Map;for(const d of t.chars)d.id<=za?e[d.id]=d:n.set(d.id,d);const r=8722;n.has(r)||n.set(r,e["-".charCodeAt(0)]);function i(d){return(d<=za?e[d]:n.get(d))||e[63]}function s(d){return i(d.charCodeAt(0))}const o=t.common.base,a=s("x"),u=s("X"),c=s("q"),l=a.height-Sn*2,f=u.height-Sn*2,h=c.height-a.height+c.yoffset-a.yoffset;function p(d,g=1){let m=0;for(let A=0;A<d.length;A++)m+=i(d.charCodeAt(A)).xadvance;return m/o*g}return{measureWidth:p,getCharByCode:i,getChar:s,xHeight:l,capHeight:f,descent:h,common:t.common}}function nw(t,e=0,n=1){return Math.max(e,Math.min(n,t))}const rw=2**31-1;function iw(t,e){const n=new Int32Array(t);n.fill(rw);const r=new Int32Array(t),i=e[0],o=(e[1]-e[0])/t,a=f=>nw(Math.floor((f-i)/o),0,t-1),u=(f,h,p,d)=>{const g=a(f),m=a(h);for(let A=g;A<=m;A++)n[A]>p&&(n[A]=p),r[A]<d&&(r[A]=d)},c=(f,h)=>[n[a(f)],r[a(h)]],l=()=>{for(let f=1;f<r.length;f++)r[f]<r[f-1]&&(r[f]=r[f-1]);for(let f=r.length-1;f>0;f--)r[f-1]>r[f]&&(r[f-1]=r[f]);return c};return u.getIndex=l,u}class Tr{constructor({encoders:e,numVertices:n=void 0,attributes:r=[],buildXIndex:i=!1}){this.encoders=e,this._buildXIndex=i,this.variableEncoders=Object.fromEntries(Object.entries(e).filter(([s,o])=>r.includes(s)&&o&&o.scale&&!o.constant)),this.allocatedVertices=n,this.variableBuilder=new tw(n);for(const[s,o]of Object.entries(this.variableEncoders)){const a=o.accessor,u=[0,0],c=o.scale.fp64,l=o.indexer?o.indexer:c?f=>Pa(a(f),u):a;this.variableBuilder.addConverter(s,{f:l,numComponents:c?2:1,arrayReference:c?u:void 0})}this.lastOffset=0,this.rangeMap=new ii([],JSON.stringify)}registerBatch(e){var s;const n=this.lastOffset,r=this.variableBuilder.vertexCount,i=r-n;i&&this.rangeMap.set(e,{offset:n,count:i,xIndex:(s=this.xIndexer)==null?void 0:s.getIndex()}),this.lastOffset=r}addBatches(e){for(const[n,r]of e)this.addBatch(n,r)}addBatch(e,n,r=0,i=n.length){for(let s=r;s<i;s++)this.variableBuilder.pushFromDatum(n[s]);this.registerBatch(e)}prepareXIndexer(e){if(!this._buildXIndex)return;const n=this.variableEncoders.x,r=this.variableEncoders.x2;if(n&&r){const i=n.accessor,s=r.accessor;this.xIndexer=iw(50,[i(e[0]),s(Re(e))]);let o=this.variableBuilder.vertexCount;this.addToXIndex=a=>{let u=this.variableBuilder.vertexCount;this.xIndexer(i(a),s(a),o,u),o=u}}else this.xIndexer=void 0,this.addToXIndex=i=>{}}addToXIndex(e){}toArrays(){return{arrays:this.variableBuilder.arrays,vertexCount:this.variableBuilder.vertexCount,allocatedVertices:this.allocatedVertices,rangeMap:this.rangeMap}}}class sw extends Tr{constructor({encoders:e,attributes:n,tessellationThreshold:r=1/0,visibleRange:i=[-1/0,1/0],numItems:s,buildXIndex:o=!1}){super({encoders:e,attributes:n,numVertices:r==1/0?s*6:void 0,buildXIndex:o});this.visibleRange=i,this.tessellationThreshold=r||1/0,this.updateFrac=this.variableBuilder.createUpdater("frac",2)}addBatch(e,n,r=0,i=n.length){if(i<=r)return;const s=this.encoders,[o,a]=this.visibleRange,u=h=>h.accessor||(p=>0),c=u(s.x),l=u(s.x2);this.prepareXIndexer(n);const f=[0,0];this.updateFrac(f);for(let h=r;h<i;h++){const p=n[h];let d=c(p),g=l(p);if(d>g&&([d,g]=[g,d]),g<o||d>a)continue;d<o&&(d=o),g>a&&(g=a),this.variableBuilder.updateFromDatum(p),f[0]=0,f[1]=0;const m=1;this.variableBuilder.pushAll();for(let A=0;A<=m;A++)f[0]=A/m,f[1]=0,this.variableBuilder.pushAll(),f[1]=1,this.variableBuilder.pushAll();this.variableBuilder.pushAll(),this.addToXIndex(p)}this.registerBatch(e)}}class ow extends Tr{constructor({encoders:e,attributes:n,tessellationThreshold:r=1/0,visibleRange:i=[-1/0,1/0],numItems:s,buildXIndex:o}){super({encoders:e,attributes:n,numVertices:r==1/0?s*6:void 0,buildXIndex:o});this.visibleRange=i,this.tessellationThreshold=r||1/0,this.updateSide=this.variableBuilder.createUpdater("side",1),this.updatePos=this.variableBuilder.createUpdater("pos",1)}addBatch(e,n,r=0,i=n.length){this.prepareXIndexer(n);for(let s=r;s<i;s++){const o=n[s];this.variableBuilder.updateFromDatum(o),this.updateSide(-.5),this.updatePos(0),this.variableBuilder.pushAll();const a=1;for(let u=0;u<=a;u++)this.updatePos(u/a),this.updateSide(-.5),this.variableBuilder.pushAll(),this.updateSide(.5),this.variableBuilder.pushAll();this.variableBuilder.pushAll(),this.addToXIndex(o)}this.registerBatch(e)}}class aw extends Tr{constructor({encoders:e,attributes:n,numItems:r=void 0}){super({encoders:e,attributes:n,numVertices:r})}}class uw extends Tr{constructor({encoders:e,attributes:n,numItems:r=void 0}){super({encoders:e,attributes:n,numVertices:r})}toArrays(){const e=this.variableBuilder.arrays;for(let n of Object.values(e))n.divisor=1;return super.toArrays()}}class cw extends Tr{constructor({encoders:e,attributes:n,fontMetrics:r,properties:i,numCharacters:s=void 0,buildXIndex:o=!1}){super({encoders:e,attributes:n,numVertices:s*6,buildXIndex:o});this.metadata=r,this.metrics=r,this.properties=i;const a=e;this.numberFormat=a.text.channelDef.format?xe(a.text.channelDef.format):u=>u,this.updateVertexCoord=this.variableBuilder.createUpdater("vertexCoord",2),this.updateTextureCoord=this.variableBuilder.createUpdater("textureCoord",2),this.updateWidth=this.variableBuilder.createUpdater("width",1)}addBatch(e,n,r=0,i=n.length){var p;const s=this.properties.align||"left",o=(p=this.properties.logoLetters)!=null?p:!1,a=this.metadata.common.base,u=this.metadata.common.scaleH;let c=-Sn;switch(this.properties.baseline){case"top":c+=this.metrics.capHeight;break;case"middle":c+=this.metrics.capHeight/2;break;case"bottom":c-=this.metrics.descent;break}const l=this.encoders.text.accessor||this.encoders.text,f=[0,0];this.updateVertexCoord(f);const h=[0,0];this.updateTextureCoord(h),this.prepareXIndexer(n);for(let d=r;d<i;d++){const g=n[d],m=this.numberFormat(l(g)),A=q(m)?m:m===null?"":""+m;if(A.length==0)continue;this.variableBuilder.updateFromDatum(g);const b=o?A.length:this.metrics.measureWidth(A);this.updateWidth(b);let y=s=="right"?-b:s=="center"?-b/2:0;if(!o){const B=this.metrics.getCharByCode(A.charCodeAt(0));y-=(B.width-B.xadvance)/a/2}let v=-.5,D=1,C=1;for(let B=0;B<A.length;B++){const I=this.metrics.getCharByCode(A.charCodeAt(B)),P=o?1:I.xadvance/a;if(I.id==32){y+=P;continue}o?(C=(I.width+Sn*2)/I.width,y=-C/2,D=(I.height+Sn*2)/I.height,v=-.5-Sn/I.height):(D=I.height/a,v=-(I.height+I.yoffset+c)/a,C=I.width/a);const X=I.x,E=I.y;f[0]=y,f[1]=v+D,h[0]=X/u,h[1]=E/u,this.variableBuilder.pushAll(),f[0]=y+C,f[1]=v+D,h[0]=(X+I.width)/u,h[1]=E/u,this.variableBuilder.pushAll(),f[0]=y,f[1]=v,h[0]=X/u,h[1]=(E+I.height)/u,this.variableBuilder.pushAll(),f[0]=y+C,f[1]=v+D,h[0]=(X+I.width)/u,h[1]=E/u,this.variableBuilder.pushAll(),f[0]=y,f[1]=v,h[0]=X/u,h[1]=(E+I.height)/u,this.variableBuilder.pushAll(),f[0]=y+C,f[1]=v,h[0]=(X+I.width)/u,h[1]=(E+I.height)/u,this.variableBuilder.pushAll(),y+=P}this.addToXIndex(n)}this.registerBatch(e)}}var fw=`uniform float ONE;/*About LUMA_FP64_CODE_ELIMINATION_WORKAROUNDThe purpose of this workaround is to prevent shader compilers fromoptimizing away necessary arithmetic operations by swapping their sequencesor transform the equation to some 'equivalent' from.The method is to multiply an artifical variable,ONE,which will be known tothe compiler to be 1 only at runtime. The whole expression is then representedas a polynomial with respective to ONE. In the coefficients of all terms,only one aand one b should appearerr=(a+b)*ONE^6-a*ONE^5-(a+b)*ONE^4+a*ONE^3-b-(a+b)*ONE^2+a*ONE*/vec2 split(float a){const float SPLIT=4097.0;float t=a*SPLIT;
76
+ #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
77
+ float a_hi=t*ONE-(t-a);float a_lo=a*ONE-a_hi;
78
+ #else
79
+ float a_hi=t-(t-a);float a_lo=a-a_hi;
80
+ #endif
81
+ return vec2(a_hi,a_lo);}vec2 split2(vec2 a){vec2 b=split(a.x);b.y+=a.y;return b;}vec2 quickTwoSum(float a,float b){
82
+ #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
83
+ float sum=(a+b)*ONE;float err=b-(sum-a)*ONE;
84
+ #else
85
+ float sum=a+b;float err=b-(sum-a);
86
+ #endif
87
+ return vec2(sum,err);}vec2 twoSum(float a,float b){float s=(a+b);
88
+ #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
89
+ float v=(s*ONE-a)*ONE;float err=(a-(s-v)*ONE)*ONE*ONE*ONE+(b-v);
90
+ #else
91
+ float v=s-a;float err=(a-(s-v))+(b-v);
92
+ #endif
93
+ return vec2(s,err);}vec2 twoSub(float a,float b){float s=(a-b);
94
+ #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
95
+ float v=(s*ONE-a)*ONE;float err=(a-(s-v)*ONE)*ONE*ONE*ONE-(b+v);
96
+ #else
97
+ float v=s-a;float err=(a-(s-v))-(b+v);
98
+ #endif
99
+ return vec2(s,err);}vec2 twoSqr(float a){float prod=a*a;vec2 a_fp64=split(a);
100
+ #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
101
+ float err=((a_fp64.x*a_fp64.x-prod)*ONE+2.0*a_fp64.x*a_fp64.y*ONE*ONE)+a_fp64.y*a_fp64.y*ONE*ONE*ONE;
102
+ #else
103
+ float err=((a_fp64.x*a_fp64.x-prod)+2.0*a_fp64.x*a_fp64.y)+a_fp64.y*a_fp64.y;
104
+ #endif
105
+ return vec2(prod,err);}vec2 twoProd(float a,float b){float prod=a*b;vec2 a_fp64=split(a);vec2 b_fp64=split(b);float err=((a_fp64.x*b_fp64.x-prod)+a_fp64.x*b_fp64.y+a_fp64.y*b_fp64.x)+a_fp64.y*b_fp64.y;return vec2(prod,err);}vec2 sum_fp64(vec2 a,vec2 b){vec2 s,t;s=twoSum(a.x,b.x);t=twoSum(a.y,b.y);s.y+=t.x;s=quickTwoSum(s.x,s.y);s.y+=t.y;s=quickTwoSum(s.x,s.y);return s;}vec2 sub_fp64(vec2 a,vec2 b){vec2 s,t;s=twoSub(a.x,b.x);t=twoSub(a.y,b.y);s.y+=t.x;s=quickTwoSum(s.x,s.y);s.y+=t.y;s=quickTwoSum(s.x,s.y);return s;}vec2 mul_fp64(vec2 a,vec2 b){vec2 prod=twoProd(a.x,b.x);prod.y+=a.x*b.y;
106
+ #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
107
+ prod=split2(prod);
108
+ #endif
109
+ prod=quickTwoSum(prod.x,prod.y);prod.y+=a.y*b.x;
110
+ #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
111
+ prod=split2(prod);
112
+ #endif
113
+ prod=quickTwoSum(prod.x,prod.y);return prod;}vec2 div_fp64(vec2 a,vec2 b){float xn=1.0/b.x;
114
+ #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
115
+ vec2 yn=mul_fp64(a,vec2(xn,0));
116
+ #else
117
+ vec2 yn=a*xn;
118
+ #endif
119
+ float diff=(sub_fp64(a,mul_fp64(b,yn))).x;vec2 prod=twoProd(xn,diff);return sum_fp64(yn,prod);}vec2 sqrt_fp64(vec2 a){if(a.x==0.0&&a.y==0.0)return vec2(0.0,0.0);if(a.x<0.0)return vec2(0.0/0.0,0.0/0.0);float x=1.0/sqrt(a.x);float yn=a.x*x;
120
+ #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
121
+ vec2 yn_sqr=twoSqr(yn)*ONE;
122
+ #else
123
+ vec2 yn_sqr=twoSqr(yn);
124
+ #endif
125
+ float diff=sub_fp64(a,yn_sqr).x;vec2 prod=twoProd(x*0.5,diff);
126
+ #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
127
+ return sum_fp64(split(yn),prod);
128
+ #else
129
+ return sum_fp64(vec2(yn,0.0),prod);
130
+ #endif
131
+ }`,L0=`#define PI 3.141593
132
+ uniform vec2 uViewOffset;uniform vec2 uViewScale;uniform vec2 uViewportSize;uniform lowp float uDevicePixelRatio;uniform lowp float uViewOpacity;/***Maps a coordinate on the unit scale to a normalized device coordinate.*(0,0)is at the bottom left corner.*/vec4 unitToNdc(vec2 coord){return vec4((coord*uViewScale+uViewOffset)*2.0-1.0,0.0,1.0);}vec4 unitToNdc(float x,float y){return unitToNdc(vec2(x,y));}vec4 pixelsToNdc(vec2 coord){return unitToNdc(coord/uViewportSize);}vec4 pixelsToNdc(float x,float y){return pixelsToNdc(vec2(x,y));}float linearstep(float edge0,float edge1,float x){return clamp((x-edge0)/(edge1-edge0),0.0,1.0);}/***Specialized linearstep for doing antialiasing*/float distanceToRatio(float d){return clamp(d*uDevicePixelRatio+0.5,0.0,1.0);}vec4 distanceToColor(float d,vec4 fill,vec4 stroke,float halfStrokeWidth){if(halfStrokeWidth>0.0){float sd=abs(d)-halfStrokeWidth;return mix(stroke,d<=0.0 ? fill : vec4(0.0),distanceToRatio(sd));}else{return fill*distanceToRatio(-d);}}`,lw="vec3 getDiscreteColor(sampler2D s,int index){return texelFetch(s,ivec2(index % textureSize(s,0).x,0),0).rgb;}vec3 getInterpolatedColor(sampler2D s,float unitValue){return texture(s,vec2(unitValue,0.0)).rgb;}float clampToRange(float value,vec2 range){return clamp(value,min(range[0],range[1]),max(range[0],range[1]));}float scaleIdentity(float value){return value;}float scaleLinear(float value,vec2 domain,vec2 range){float domainSpan=domain[1]-domain[0];float rangeSpan=range[1]-range[0];return(value-domain[0])/domainSpan*rangeSpan+range[0];}float scaleLog(float value,vec2 domain,vec2 range,float base){return scaleLinear(log(value)/log(base),log(domain)/log(base),range);}float symlog(float value,float constant){return sign(value)*log(abs(value/constant)+1.0);}float scaleSymlog(float value,vec2 domain,vec2 range,float constant){return scaleLinear(symlog(value,constant),vec2(symlog(domain[0],constant),symlog(domain[1],constant)),range);}float scalePow(float value,vec2 domain,vec2 range,float exponent){return scaleLinear(pow(abs(value),exponent)*sign(value),pow(abs(domain),vec2(exponent))*sign(domain),range);}float scaleBand(float value,vec2 domainExtent,vec2 range,float paddingInner,float paddingOuter,float align,float band){float start=range[0];float stop=range[1];float n=domainExtent[1]-domainExtent[0];float step=(stop-start)/max(1.0,n-paddingInner+paddingOuter*2.0);start+=(stop-start-step*(n-paddingInner))*align;float bandwidth=step*(1.0-paddingInner);return start+(value-domainExtent[0])*step+bandwidth*band;}",hw="float scaleIdentityFp64(vec2 value){return value[0];}float scaleLinearFp64(vec2 value,vec4 domain,vec2 range){vec2 domainSpan=sub_fp64(domain.zw,domain.xy);float rangeSpan=range[1]-range[0];float unitValue=div_fp64(sub_fp64(value,domain.xy),domainSpan).x;return unitValue*rangeSpan+range[0];}float scaleBandFp64(vec2 value,vec4 domainExtent,vec2 range,float paddingInner,float paddingOuter,float align,float band){float start=range[0];float stop=range[1];vec2 domainSpan=sub_fp64(domainExtent.zw,domainExtent.xy);float n=domainSpan.x;float step=(stop-start)/max(1.0,n-paddingInner+paddingOuter*2.0);start+=(stop-start-step*(n-paddingInner))*align;float bandwidth=step*(1.0-paddingInner);return start+sub_fp64(value,domainExtent.xy).x*step+bandwidth*band;}",dw=`/***Describes where a sample facet should be shown. Interpolating between the*current and target positions/heights allows for transitioning between facet*configurations.*/struct SampleFacetPosition{float pos;float height;float targetPos;float targetHeight;};/***Trasition fraction[0,1]between the current and target configurations.*/uniform float uTransitionOffset;
133
+ #if !defined(SAMPLE_FACET_UNIFORM) && !defined(SAMPLE_FACET_TEXTURE)
134
+ SampleFacetPosition getSampleFacetPos(){return SampleFacetPosition(0.0,1.0,0.0,1.0);}
135
+ #elif defined(SAMPLE_FACET_UNIFORM)
136
+ /***Location and height of the band on the Y axis on a normalized[0,1]scale.*Elements: curr pos,curr height,target pos,target height*/uniform vec4 uSampleFacet;SampleFacetPosition getSampleFacetPos(){return SampleFacetPosition(1.0-uSampleFacet.x-uSampleFacet.y,uSampleFacet.y,1.0-uSampleFacet.z-uSampleFacet.w,uSampleFacet.w);}
137
+ #elif defined(SAMPLE_FACET_TEXTURE)
138
+ uniform sampler2D uSampleFacetTexture;SampleFacetPosition getSampleFacetPos(){vec4 texel=texelFetch(uSampleFacetTexture,ivec2(int(attr_facetIndex),0),0);return SampleFacetPosition(1.0-texel.r-texel.g,texel.g,1.0-texel.r-texel.g,texel.g);}
139
+ #endif
140
+ bool isFacetedSamples(SampleFacetPosition facetPos){return facetPos!=SampleFacetPosition(0.0,1.0,0.0,1.0);}bool isFacetedSamples(){return isFacetedSamples(getSampleFacetPos());}bool isInTransit(){return uTransitionOffset>0.0;}float getTransitionFraction(float xPos){return smoothstep(0.0,0.7+uTransitionOffset,(xPos-uTransitionOffset)*2.0);}vec2 applySampleFacet(vec2 pos){SampleFacetPosition facetPos=getSampleFacetPos();if(!isFacetedSamples(facetPos)){return pos;}else if(isInTransit()){vec2 interpolated=mix(vec2(facetPos.pos,facetPos.height),vec2(facetPos.targetPos,facetPos.targetHeight),getTransitionFraction(pos.x));return vec2(pos.x,interpolated[0]+pos.y*interpolated[1]);}else{return vec2(pos.x,facetPos.pos+pos.y*facetPos.height);}}float getSampleFacetHeight(vec2 pos){SampleFacetPosition facetPos=getSampleFacetPos();if(!isFacetedSamples(facetPos)){return 1.0;}else if(isInTransit()){return mix(facetPos.height,facetPos.targetHeight,getTransitionFraction(pos.x));}else{return facetPos.height;}}`,pw=`/**Based on concepts presented at:*https:*https:*/uniform bool uPickingEnabled;flat out highp vec4 vPickingColor;/***Passes the unique id to the fragment shader as a color if picking is enabled.*Returns true if picking is enabled.*/bool setupPicking(){if(uPickingEnabled){
141
+ #ifdef uniqueId_DEFINED
142
+ int id=int(getScaled_uniqueId());vPickingColor=vec4(ivec4(id>>0,id>>8,id>>16,0xFF)&0xFF)/float(0xFF);
143
+ #else
144
+ vPickingColor=vec4(1.0);
145
+ #endif
146
+ return true;}return false;}`,gw="uniform bool uPickingEnabled;flat in highp vec4 vPickingColor;";const rs=Symbol("cacheMap");function Mn(t,e,n){let r=Pr(t).get(e);return r===void 0&&(r=n(e),Pr(t).set(e,r)),r}function R0(t,e){Pr(t).delete(e)}function is(t,e){const n=Pr(t);for(const r of n.keys())r.startsWith(e)&&n.delete(r);Pr(t).delete(e)}function N0(t){t[rs]=new Map}function Pr(t){return t[rs]||N0(t),t[rs]}function mw(t,e,n,r){const i=q(t)?t:t.name,s=!q(t)&&t.extent||[0,1];if(n===void 0&&!q(t)&&(n=t.count),i){const o=jo(i);if(ge(o)){const a=O0(o,{extent:s,count:n});return ss(e,{minMag:e.LINEAR,format:e.RGB,height:1,wrap:e.CLAMP_TO_EDGE},a,r)}else{if(Be(o))return k0(o,e);throw new Error("Unknown scheme: "+i)}}}function Aw(t,e="rgb",n,r){const i=Ei(t,q(e)?e:e.type,q(e)?void 0:e.gamma),s=O0(i);return ss(n,{minMag:n.LINEAR,format:n.RGB,height:1,wrap:n.CLAMP_TO_EDGE},s,r)}function xw(t,e,n,r){const i=Math.max(t.length,n||0),s=new Float32Array(i);for(let o=0;o<i;o++)s[o]=t[o%t.length];return ss(e,{minMag:e.NEAREST,format:e.RED,internalFormat:e.R32F,height:1},s,r)}function k0(t,e,n,r){const i=z0(t,n);return ss(e,{minMag:e.NEAREST,format:e.RGB,height:1},i,r)}function O0(t,{extent:e=[0,1],reverse:n=!1,count:r=256}={}){const i=e[0],s=Re(e)-i,o=oi(r).map(a=>a/(r-1)).map(a=>i+a/s).map(t);return n&&o.reverse(),z0(o)}function z0(t,e){const n=Math.max(t.length,e||0),r=new Uint8Array(n*3);for(let i=0;i<n;i++){const s=Ir(t[i%t.length]).rgb();r[i*3+0]=s.r,r[i*3+1]=s.g,r[i*3+2]=s.b}return r}class yw{constructor(e,n){this._container=e,this._sizeSource=n,this._shaderCache=new Map,this._listeners=[],this.rangeTextures=new WeakMap;const r=document.createElement("canvas");e.appendChild(r);const i=B2(r,{antialias:!0,depth:!1,premultipliedAlpha:!0});if(!i)throw new Error("Unable to initialize WebGL. Your browser or machine may not support it.");if(!mn(i))throw new Error("Your web browser does not support WebGL 2.0. Chrome, Firefox, and Safari Tech Preview should work.");A0(i),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),this._shaderDefines=T2(i),this.canvas=r,this.gl=i,this._pickingAttachmentOptions=[{format:i.RGBA,type:i.UNSIGNED_BYTE,minMag:i.LINEAR,wrap:i.CLAMP_TO_EDGE}],this._pickingBufferInfo=v2(i,this._pickingAttachmentOptions),i.bindFramebuffer(i.FRAMEBUFFER,null),this.adjustGl(),this._resizeObserver=new ResizeObserver(s=>{this.invalidateSize(),this._emit("resize")}),this._resizeObserver.observe(this._container),this._updateDpr()}invalidateSize(){this._logicalCanvasSize=void 0,this._updateDpr(),this.adjustGl()}_updateDpr(){this.dpr=window.devicePixelRatio}compileShader(e,n){const r="#version 300 es",i="precision mediump float;";Be(n)&&(n=n.join(`
147
+
148
+ `));const s=this.gl,o=n.replaceAll(/ {2,}|^\s*\/\/.*$/gm,"");let a=this._shaderCache.get(o);if(!a){const u=[r,i,n].join(`
149
+
150
+ `);a=s.createShader(e),s.shaderSource(a,u),s.compileShader(a),this._shaderCache.set(o,a)}return a}adjustGl(){const e=this.getLogicalCanvasSize();this.canvas.style.width=`${e.width}px`,this.canvas.style.height=`${e.height}px`;const n=this.getPhysicalCanvasSize(e);this.canvas.width=n.width,this.canvas.height=n.height,E2(this.gl,this._pickingBufferInfo,this._pickingAttachmentOptions)}finalize(){this._resizeObserver.unobserve(this._container),this.canvas.remove()}getPhysicalCanvasSize(e){return e=e||this.getLogicalCanvasSize(),{width:e.width*this.dpr,height:e.height*this.dpr}}getLogicalCanvasSize(){var s,o,a,u;if(this._logicalCanvasSize)return this._logicalCanvasSize;const e=(o=(s=this._sizeSource)==null?void 0:s.call(this))!=null?o:{width:void 0,height:void 0},n=window.getComputedStyle(this._container,null),r=(a=e.width)!=null?a:this._container.clientWidth-parseFloat(n.paddingLeft)-parseFloat(n.paddingRight),i=(u=e.height)!=null?u:this._container.clientHeight-parseFloat(n.paddingTop)-parseFloat(n.paddingBottom);return this._logicalCanvasSize={width:r,height:i},this._logicalCanvasSize}addEventListener(e,n){this._listeners.push({type:e,listener:n})}_emit(e){for(const n of this._listeners)n.type===e&&n.listener()}readPickingPixel(e,n){const r=this.gl;e*=this.dpr,n*=this.dpr;const i=this.getPhysicalCanvasSize().height,s=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this._pickingBufferInfo.framebuffer),r.readPixels(e,i-n-1,1,1,r.RGBA,r.UNSIGNED_BYTE,s),r.bindFramebuffer(r.FRAMEBUFFER,null),s}clearAll(){const e=this.gl,{width:n,height:r}=this.getPhysicalCanvasSize();e.viewport(0,0,n,r),e.disable(e.SCISSOR_TEST),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)}createRangeTexture(e,n=!1){const r=this.rangeTextures.get(e);if(!n&&r)return;function i(o,a){return Vt(a.type)?a.domain().length:a.type=="threshold"?a.domain().length+1:a.type=="quantize"||a.type=="quantile"?o!=null?o:4:o}const s=e.channel;if(Zt(s)){const o=e.getScaleProps(),a=e.getScale();let u;if(o.scheme){let c=q(o.scheme)?void 0:o.scheme.count;c=i(c,a),u=mw(o.scheme,this.gl,c,r)}else{const c=a.range();vi(a.type)?u=Aw(c,o.interpolate,this.gl,r):u=k0(c,this.gl,a.domain().length,r)}this.rangeTextures.set(e,u)}else{const o=e.getScale();if(o.type==="ordinal"||pn(o.type)){const a=Li(s)?ol(s):c=>c,u=e.getScale().range();this.rangeTextures.set(e,xw(u.map(a),this.gl,o.domain().length,r))}}}}function bw(t,e="",n=0){const r=/ERROR:\s*\d+:(\d+)/gi,i=[...e.matchAll(r)],s=new Map(i.map((o,a)=>{const u=parseInt(o[1]),c=i[a+1],l=c?c.index:e.length,f=e.substring(o.index,l);return[u-1,f]}));return t.split(`
151
+ `).map((o,a)=>{const u=s.get(a);return`${a+1+n}: ${o}${u?`
152
+
153
+ ^^^ ${u}`:""}`}).join(`
154
+ `)}function ww(t,e,n){var r=t.createProgram();t.attachShader(r,e),t.attachShader(r,n),t.linkProgram(r);function i(){let s,o;if(!t.getProgramParameter(r,t.LINK_STATUS)){s=t.getProgramInfoLog(r);for(const u of[e,n])t.getShaderParameter(u,t.COMPILE_STATUS)||(s=t.getShaderInfoLog(u),o=bw(t.getShaderSource(u),s,0)+`
155
+ Error compiling: ${s}`,t.deleteShader(u));t.deleteProgram(r)}if(s)return{message:s,detail:o}}return{program:r,getProgramErrors:i}}function ss(t,e,n,r){return r?kl(t,r,n,e):r=Cr(t,Se(T({},e),{src:n})),r}function vw(...t){const e={get:function(n,r,i){for(const s of t){const a=s()[r];if(a!==void 0)return a}},has:function(n,r,i){for(const s of t){const o=s();if(r in o)return!0}return!1}};return new Proxy({},e)}const Ew="SAMPLE_FACET_UNIFORM",U0="SAMPLE_FACET_TEXTURE";class Lr{constructor(e){this.unitView=e,this.encoders=void 0,this.bufferInfo=void 0,this.programInfo=void 0,this.vertexArrayInfo=void 0,this.domainUniformInfo=void 0,this.defaultProperties={get clip(){return["x","y"].map(n=>e.getScaleResolution(n)).some(n=>{var r;return(r=n==null?void 0:n.isZoomable())!=null?r:!1})},xOffset:0,yOffset:0,minBufferSize:0},this.properties=vw(typeof this.unitView.spec.mark=="object"?()=>this.unitView.spec.mark:()=>({}),()=>this.defaultProperties)}get opaque(){return!1}getAttributes(){throw new Error("Not implemented!")}getSupportedChannels(){return["sample","facetIndex","x","y","color","opacity","search","uniqueId"]}getDefaultEncoding(){const e={sample:void 0,uniqueId:void 0};return this.isPickingParticipant()&&(e.uniqueId={field:"_uniqueId",type:"nominal",scale:null}),e}fixEncoding(e){return e}get encoding(){return Mn(this,"encoding",()=>{const e=this.getDefaultEncoding(),n=this.unitView.getEncoding(),r=o=>({value:this.properties[o]}),i=Object.fromEntries(this.getSupportedChannels().map(o=>[o,r(o)]).filter(o=>o[1].value!==void 0)),s=this.fixEncoding(T(T(T({},e),i),n));for(const o of Object.keys(s))this.getSupportedChannels().includes(o)||delete s[o];return s})}getContext(){return this.unitView.context}getType(){return this.unitView.getMarkType()}initializeData(){}initializeEncoders(){this.encoders=R1(this)}async initializeGraphics(){}updateGraphicsData(){}getSampleFacetMode(){if(this.encoders.facetIndex)return U0;if(this.unitView.getFacetAccessor())return Ew}createAndLinkShaders(e,n,r=[]){const i=this.getAttributes();r.push("// view: "+this.unitView.getPathString()),this.domainUniforms=[];let s=[];const o=this.getSampleFacetMode();o&&r.push(`#define ${o}`);for(const f of i){let h;if(f in this.encoding)h=f;else continue;const p=this.encoding[h];if(!!p)if(Wt(p))s.push(J2(h,p.value));else{const d=at(p)&&p.resolutionChannel||h,g=this.unitView.getScaleResolution(d).getScale(),m=_2(h,g,p);s.push(m.glsl),m.domainUniform&&this.domainUniforms.push(m.domainUniform)}}const a=this.domainUniforms.length?`layout(std140) uniform Domains {
156
+ `+this.domainUniforms.map(f=>` ${f}
157
+ `).join("")+`};
158
+
159
+ `:"",u=[...r,L0,lw,a,...s,dw,pw,e];u.some(f=>/[Ff]p64/.test(f))&&(u.unshift(hw),u.unshift(fw));const c=[...r,L0,gw,n],l=this.gl;this.programStatus=ww(l,this.glHelper.compileShader(l.VERTEX_SHADER,u),this.glHelper.compileShader(l.FRAGMENT_SHADER,c))}finalizeGraphicsInitialization(){const e=this.programStatus.getProgramErrors();if(e){e.detail&&console.warn(e.detail);const n=new Error("Cannot create shader program: "+e.message);throw n.view=this.unitView,n}this.programInfo=s2(this.gl,this.programStatus.program),delete this.programStatus,this.domainUniforms.length&&(this.domainUniformInfo=e2(this.gl,this.programInfo,"Domains"))}deleteGraphicsData(){if(this.bufferInfo){const e=this.gl;for(let n=0;n<8;n++)e.disableVertexAttribArray(n);Object.values(this.bufferInfo.attribs).forEach(n=>this.gl.deleteBuffer(n.buffer)),this.bufferInfo.indices&&this.gl.deleteBuffer(this.bufferInfo.indices),this.bufferInfo=void 0}}updateBufferInfo(e){if(this.gl.bindVertexArray(null),this.bufferInfo&&e.vertexCount<=this.bufferInfo.allocatedVertices)for(const[n,r]of Object.entries(e.arrays))r.data&&gx(this.gl,this.bufferInfo.attribs[n],r.data,0);else this.deleteGraphicsData(),this.bufferInfo=xx(this.gl,e.arrays,{numElements:e.vertexCount}),this.bufferInfo.allocatedVertices=e.allocatedVertices,this.vertexArrayInfo=void 0}get glHelper(){return this.getContext().glHelper}get gl(){return this.glHelper.gl}onBeforeSampleAnimation(){}onAfterSampleAnimation(){}isReady(){return this.bufferInfo&&this.programInfo}isPickingParticipant(){if(this.properties.tooltip===null)return!1;for(const e of this.unitView.getAncestors())if(!e.isPickingSupported())return!1;return!0}prepareRender(e){var i;const n=this.glHelper,r=this.gl;if(this.vertexArrayInfo||(this.vertexArrayInfo=C2(this.gl,this.programInfo,this.bufferInfo)),r.useProgram(this.programInfo.program),this.domainUniformInfo){for(const[s,o]of Object.entries(this.domainUniformInfo.setters)){const a=s.substring(B0.length),u=this.encoding[a],c=at(u)&&u.resolutionChannel||a,l=this.unitView.getScaleResolution(c);if(l){const f=l.getScale(),h=Vt(f.type)?[0,f.domain().length]:f.domain();o(f.fp64?h.map(p=>Pa(p)).flat():h)}}n2(r,this.programInfo,this.domainUniformInfo)}for(const[s,o]of Object.entries(this.encoding))if(at(o)){const a=at(o)&&o.resolutionChannel||s,u=this.unitView.getScaleResolution(a),c=n.rangeTextures.get(u);c&&de(this.programInfo,{[ka+s]:c})}if(this.getSampleFacetMode()==U0){let s;for(const o of this.unitView.getAncestors())if(s=o.getSampleFacetTexture(),s)break;de(this.programInfo,{uSampleFacetTexture:s})}de(this.programInfo,{ONE:1,uDevicePixelRatio:this.glHelper.dpr,uViewOpacity:this.unitView.getEffectiveOpacity(),uPickingEnabled:((i=e.picking)!=null?i:!1)&&this.isPickingParticipant()}),de(this.programInfo,{uSampleFacet:[0,1,0,1],uTransitionOffset:0}),this.opaque||e.picking?r.disable(r.BLEND):r.enable(r.BLEND)}prepareSampleFacetRendering(e){const n=e.sampleFacetRenderingOptions,r=this.programInfo.uniformSetters.uSampleFacet;if(n&&r){const i=n.locSize?n.locSize.location:0,s=n.locSize?n.locSize.size:1;if(i>1||i+s<0)return!1;const o=n.targetLocSize?n.targetLocSize.location:i,a=n.targetLocSize?n.targetLocSize.size:s;this.gl.uniform4f(r.location,i,s,o,a)}return!0}render(e){}createRenderCallback(e,n,r){var o;const i=this;let s;if(this.properties.buildIndex){const a=(o=this.unitView.getScaleResolution("x"))==null?void 0:o.getScale();s=u=>{if(a&&u.xIndex){const c=a.domain(),l=u.xIndex(c[0],c[1]),f=l[0],h=l[1]-f;h>0&&e(f,h)}else e(u.offset,u.count)}}else s=a=>e(a.offset,a.count);if(this.properties.dynamicData)return function(){const u=r().get(n.facetId);u&&u.count&&i.prepareSampleFacetRendering(n)&&s(u)};{const a=r().get(n.facetId);if(a&&a.count)return function(){i.prepareSampleFacetRendering(n)&&s(a)}}}setViewport(e,n){const r=this.glHelper.dpr,i=this.gl,s=this.properties,o=this.glHelper.getLogicalCanvasSize(),a=.5,u=(s.xOffset||0)+a,c=(s.yOffset||0)+a;let l,f=e;if(s.clip||n){let h=0,p=0,d;n?(f=s.clip?e.intersect(n):n,d=[e.width/f.width,e.height/f.height],p=Math.max(0,e.y2-n.y2),h=Math.max(0,e.x2-n.x2)):d=[1,1];const g=[e.x,o.height-f.y2,Math.max(0,f.width),Math.max(0,f.height)].map(y=>y*r),m=g.map(y=>Math.floor(y)),[A,b]=g.map((y,v)=>y-m[v]);i.viewport(...m),i.scissor(...m),i.enable(i.SCISSOR_TEST),l={uViewOffset:[(u+h+A)/f.width,-(c+p-b)/f.height],uViewScale:d}}else i.viewport(0,0,o.width*r,o.height*r),i.disable(i.SCISSOR_TEST),l={uViewOffset:[(e.x+u)/o.width,(o.height-e.y-c-e.height)/o.height],uViewScale:[e.width/o.width,e.height/o.height]};return de(this.programInfo,l),de(this.programInfo,{uViewportSize:[e.width,e.height]}),f.height>0&&f.width>0}findDatumAt(e,n){}}function Ga(t,e){const n=k1(e);if(t[e])if(t[n]){if(t[e].type!="quantitative"){const r=(1-(t[e].band||1))/2;t[e].band=r,t[n].band=-r}}else if(t[e].type=="quantitative")t[n]={datum:0};else{t[e]=T({},t[e]),t[n]=T({},t[e]);const r=(1-(t[e].band||1))/2;t[e].band=0+r,t[n].band=1-r}else{if(t[n])throw new Error(`Only secondary channel ${n} has been specified!`);t[e]={value:0},t[n]={value:1}}}function G0(t,e){t.stroke||(e?t.stroke={value:null}:t.stroke=T({resolutionChannel:"color"},t.color)),Wt(t.stroke)&&t.stroke.value===null&&(t.strokeWidth={value:0}),t.strokeOpacity||(t.strokeOpacity=T({resolutionChannel:"opacity"},t.opacity))}function H0(t,e){Wt(t.fill)&&t.fill.value===null?t.fillOpacity={value:0}:t.fill||(t.fill=T({resolutionChannel:"color"},t.color),!e&&!t.fillOpacity&&(t.fillOpacity={value:0})),t.fillOpacity||(e?t.fillOpacity=T({resolutionChannel:"opacity"},t.opacity):t.fillOpacity={value:0})}class Cw extends Lr{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x2:void 0,y2:void 0,filled:!0,color:"#4c78a8",opacity:1,strokeWidth:3,cornerRadius:0,minWidth:.5,minHeight:.5,minOpacity:1,tessellationZoomThreshold:10,tessellationTiles:35}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","fill","stroke","fillOpacity","strokeOpacity","strokeWidth"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","fill","stroke","fillOpacity","strokeOpacity","strokeWidth"]}get opaque(){return Mn(this,"opaque",()=>!this._isRoundedCorners()&&!this._isStroked()&&Wt(this.encoding.fillOpacity)&&this.encoding.fillOpacity.value==1&&this.properties.minOpacity==1)&&this.unitView.getEffectiveOpacity()==1}fixEncoding(e){return Ga(e,"x"),Ga(e,"y"),G0(e,this.properties.filled),H0(e,this.properties.filled),delete e.color,delete e.opacity,e}onBeforeSampleAnimation(){}onAfterSampleAnimation(){}_isRoundedCorners(){return["","TopLeft","TopRight","BottomLeft","BottomRight"].map(e=>"cornerRadius"+e).some(e=>this.properties[e]>0)}_isStroked(){const e=this.encoding.strokeWidth;return!(Wt(e)&&!e.value)}async initializeGraphics(){await super.initializeGraphics();const e=[];this._isRoundedCorners()&&e.push("ROUNDED_CORNERS"),this._isStroked()&&e.push("STROKED"),this.createAndLinkShaders(F2,I2,e.map(n=>"#define "+n))}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new sw({encoders:this.encoders,attributes:this.getAttributes(),numItems:n,buildXIndex:this.properties.buildIndex});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}prepareRender(e){var r,i,s,o;super.prepareRender(e);const n=this.properties;de(this.programInfo,{uMinSize:[n.minWidth,n.minHeight],uMinOpacity:n.minOpacity,uCornerRadii:[(r=n.cornerRadiusTopRight)!=null?r:n.cornerRadius,(i=n.cornerRadiusBottomRight)!=null?i:n.cornerRadius,(s=n.cornerRadiusTopLeft)!=null?s:n.cornerRadius,(o=n.cornerRadiusBottomLeft)!=null?o:n.cornerRadius]}),Cn(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{Dr(n,this.vertexArrayInfo,n.TRIANGLE_STRIP,i,r)},e,()=>this.rangeMap)}findDatumAt(e,n){e=Ze(e);const r=this.encoders,i=this.unitView.getCollector().facetBatches.get(e),s=r.x.accessor,o=r.x2.accessor;if(i)return i.find(a=>n>=s(a)&&n<o(a))}}var Dw=`precision mediump float;/***The stroke should only grow inwards,e.g,the diameter/outline is not affected by the stroke width.*Thus,a point that has a zero size has no visible stroke. This allows strokes to be used with*geometric zoom,etc.*/uniform bool uInwardStroke;uniform lowp float uMaxRelativePointDiameter;uniform float uScaleFactor;uniform float uMaxPointSize;uniform float uZoomLevel;uniform float uSemanticThreshold;flat out float vRadius;flat out float vRadiusWithPadding;flat out lowp vec4 vFillColor;flat out lowp vec4 vStrokeColor;flat out lowp float vShape;flat out lowp float vHalfStrokeWidth;flat out mat2 vRotationMatrix;float computeSemanticThresholdFactor(){return getScaled_semanticScore()>=uSemanticThreshold ? 1.0 : 0.0;}/***Computes a scaling factor for the points in a sample-faceted view.*/float getDownscaleFactor(vec2 pos){if(!isFacetedSamples()){return 1.0;}float sampleFacetHeight=getSampleFacetHeight(pos);float maxPointDiameter=sqrt(uMaxPointSize);float factor=sampleFacetHeight*uViewportSize.y*uMaxRelativePointDiameter;return clamp(0.0,maxPointDiameter,factor)/maxPointDiameter;}vec2 getDxDy(){
160
+ #if defined(dx_DEFINED) || defined(dy_DEFINED)
161
+ return vec2(getScaled_dx(),getScaled_dy())/uViewportSize;
162
+ #else
163
+ return vec2(0.0,0.0);
164
+ #endif
165
+ }void main(void){float semanticThresholdFactor=computeSemanticThresholdFactor();if(semanticThresholdFactor<=0.0){gl_PointSize=0.0;return;}float size=getScaled_size();vec2 pos=vec2(getScaled_x(),getScaled_y())+getDxDy();gl_Position=unitToNdc(applySampleFacet(pos));float strokeWidth=getScaled_strokeWidth();float diameter=sqrt(size)*uScaleFactor*semanticThresholdFactor*getDownscaleFactor(pos);float opacity=uViewOpacity;if(strokeWidth<=0.0||uInwardStroke){float minDiameter=1.0/uDevicePixelRatio;if(diameter<minDiameter){opacity*=pow(diameter/minDiameter,2.5);diameter=minDiameter;}}float fillOpa=getScaled_fillOpacity()*opacity;float strokeOpa=getScaled_strokeOpacity()*opacity;vShape=getScaled_shape();bool circle=vShape==0.0;float angleInDegrees=getScaled_angle();float angle=-angleInDegrees*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);vRotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);float roomForRotation=circle ? 1.0 : sin(mod(angle,PI/2.0)+PI/4.0)/sin(PI/4.0);float aaPadding=1.0/uDevicePixelRatio;float rotationPadding=(diameter*roomForRotation)-diameter;float strokePadding=uInwardStroke ? 0.0 : strokeWidth*(circle ? 1.0 : sqrt(3.0));float padding=rotationPadding+strokePadding+aaPadding;gl_PointSize=(diameter+padding)*uDevicePixelRatio;vRadius=diameter/2.0;vRadiusWithPadding=vRadius+padding/2.0;vHalfStrokeWidth=strokeWidth/2.0;vFillColor=vec4(getScaled_fill()*fillOpa,fillOpa);vStrokeColor=vec4(getScaled_stroke()*strokeOpa,strokeOpa);setupPicking();}`,Sw="const lowp vec4 white=vec4(1.0);const lowp vec4 black=vec4(0.0,0.0,0.0,1.0);uniform bool uInwardStroke;uniform float uGradientStrength;flat in float vRadius;flat in float vRadiusWithPadding;flat in lowp vec4 vFillColor;flat in lowp vec4 vStrokeColor;flat in lowp float vShape;flat in lowp float vHalfStrokeWidth;flat in mat2 vRotationMatrix;out lowp vec4 fragColor;const float CIRCLE=0.0;const float SQUARE=1.0;const float TRIANGLE_UP=2.0;const float CROSS=3.0;const float DIAMOND=4.0;const float TRIANGLE_DOWN=5.0;const float TRIANGLE_RIGHT=6.0;const float TRIANGLE_LEFT=7.0;float circle(vec2 p,float r){return length(p)-r;}float square(vec2 p,float r){p=abs(p);return max(p.x,p.y)-r;}float equilateralTriangle(vec2 p,float r,bool flip,bool swap){if(swap){p.xy=p.yx;}if(flip){p.y=-p.y;}float k=sqrt(3.0);float kr=k*r;p.y-=kr/2.0;return max((abs(p.x)*k+p.y)/2.0,-p.y-kr);}float crossShape(vec2 p,float r){p=abs(p);vec2 b=vec2(0.4,1.0)*r;vec2 v=abs(p)-b.xy;vec2 h=abs(p)-b.yx;return min(max(v.x,v.y),max(h.x,h.y));}float diamond(vec2 p,float r){p=abs(p);return(max(abs(p.x-p.y),abs(p.x+p.y))-r)/sqrt(2.0);}void main(){float d;vec2 p=vRotationMatrix*(2.0*gl_PointCoord-1.0)*vRadiusWithPadding;float r=vRadius;if(vShape==CIRCLE){d=circle(p,r);}else if(vShape==SQUARE){d=square(p,r);}else if(vShape==TRIANGLE_UP){d=equilateralTriangle(p,r,true,false);}else if(vShape==CROSS){d=crossShape(p,r);}else if(vShape==DIAMOND){d=diamond(p,r);}else if(vShape==TRIANGLE_DOWN){d=equilateralTriangle(p,r,false,false);}else if(vShape==TRIANGLE_RIGHT){d=equilateralTriangle(p,r,false,true);}else if(vShape==TRIANGLE_LEFT){d=equilateralTriangle(p,r,true,true);}else{d=0.0;}if(!uPickingEnabled){lowp vec4 fillColor=mix(vFillColor,white,-d*uGradientStrength/vRadius);fragColor=distanceToColor(d+(uInwardStroke ? vHalfStrokeWidth : 0.0),fillColor,vStrokeColor,vHalfStrokeWidth);}else if(d-vHalfStrokeWidth<=0.0){fragColor=vPickingColor;}else{discard;}}";const ft=1<<0,It=1<<1,Mw={};class _{get behavior(){return 0}constructor(){this.children=[],this.parent=void 0,this.completed=!1}reset(){this.completed=!1;for(const e of this.children)e.reset()}initialize(){}_updatePropagator(){this._propagate=Function("children",oi(this.children.length).map(e=>`const child${e} = children[${e}];`).join(`
166
+ `)+`return function propagate(datum) {${oi(this.children.length).map(e=>`child${e}.handle(datum);`).join(`
167
+ `)}}`)(this.children)}setParent(e){this.parent=e}addChild(e){if(e.parent)throw new Error("Cannot add the child! It already has a parent.");return this.children.push(e),e.setParent(this),this._updatePropagator(),this}adopt(e){e.parent&&e.parent.removeChild(e),this.addChild(e)}adoptChildrenOf(e){for(const n of e.children)this.adopt(n)}insertAsParent(e){if(this.isRoot())throw new Error("Cannot insert a new parent for a root node!");e.parent=this.parent,this.parent.children[this.parent.children.indexOf(this)]=e,this.parent._updatePropagator(),this.parent=void 0,e.addChild(this)}removeChild(e){const n=this.children.indexOf(e);if(n>-1)this.children.splice(n,1),e.parent=void 0,this._updatePropagator();else throw new Error("Trying to remove an unknown child node!")}excise(){if(this.isRoot())throw new Error("Cannot excise root node!");if(this.isTerminal())this.parent.removeChild(this);else if(this.children.length==1){const e=this.children[0];e.setParent(this.parent),this.parent.children[this.parent.children.indexOf(this)]=e,this.parent._updatePropagator(),this.setParent(void 0),this.children.length=0}else throw new Error("Cannot excise a node that has multiple children!")}isRoot(){return!this.parent}isBranching(){return this.children.length>1}isTerminal(){return this.children.length==0}visit(e){e(this);for(const n of this.children)n.visit(e);e.afterChildren&&e.afterChildren(this)}subtreeToString(e=0){var r;const n=this.children.map(i=>i.subtreeToString(e+1)).join("");return" ".repeat(e*2)+"* "+((r=/^class ([A-Za-z0-9_]+)/.exec(""+this.constructor))==null?void 0:r[1])+`
168
+ `+n}getGlobalObject(){return this.parent?this.parent.getGlobalObject():Mw}handle(e){this._propagate(e)}complete(){this.completed=!0;for(const e of this.children)e.complete()}beginBatch(e){for(const n of this.children)n.beginBatch(e)}_propagate(e){}}function V0(t){return t.type=="file"}function Bw(t){return t.type=="facet"}class Q0 extends _{constructor(e){super();this.k=e.size||500,this.reset()}reset(){super.reset(),this.reservoir=[],this.W=void 0,this.ingester=this._initialIngester}_initialIngester(e){this.reservoir.push(e),this.reservoir.length==this.k&&(this.W=Math.exp(Math.log(Math.random())/this.k),this.i=this.k,this.next=this.i,this.ingester=this._finalIngester,this._setNextStop())}_finalIngester(e){++this.i==this.next&&(this.reservoir[Math.floor(Math.random()*this.k)]=e,this.W*=Math.exp(Math.log(Math.random())/this.k),this._setNextStop())}_setNextStop(){this.next+=Math.floor(Math.log(Math.random())/Math.log(1-this.W))+1}handle(e){this.ingester(e)}complete(){for(const e of this.reservoir)this._propagate(e);super.complete()}}function Fw(t,e,n){const r=new Q0({type:"sample",size:t});for(const i of e)r.handle(n(i));return r.complete(),r.reservoir}const Iw={};class Tw extends Lr{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,color:"#4c78a8",filled:!0,opacity:1,size:100,semanticScore:0,shape:"circle",strokeWidth:2,fillGradientStrength:0,dx:0,dy:0,angle:0,sampleFacetPadding:.1,semanticZoomFraction:.02}))}getAttributes(){return["inwardStroke","uniqueId","facetIndex","x","y","size","semanticScore","shape","strokeWidth","gradientStrength","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"size","semanticScore","shape","strokeWidth","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getDefaultEncoding(){return T(T({},super.getDefaultEncoding()),Iw)}fixEncoding(e){return G0(e,this.properties.filled),H0(e,this.properties.filled),delete e.color,delete e.opacity,e}initializeData(){super.initializeData();const e=this.unitView.getAccessor("semanticScore");e&&(this.sampledSemanticScores=Float32Array.from(Fw(1e4,this.unitView.getCollector().getData(),e)),this.sampledSemanticScores.sort((n,r)=>n-r))}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(Dw,Sw)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;de(this.programInfo,{uInwardStroke:e.inwardStroke,uGradientStrength:e.fillGradientStrength,uMaxRelativePointDiameter:1-2*e.sampleFacetPadding})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new aw({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0)});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}_getGeometricScaleFactor(){const e=Math.pow(2,this.properties.geometricZoomBound||0);return Math.pow(Math.min(1,this.unitView.getZoomLevel()/e),1/3)}_getMaxPointSize(){const e=this.encoders.size;return e.constant?e(null):e.scale.range().reduce((n,r)=>Math.max(n,r))}getSemanticThreshold(){if(this.sampledSemanticScores){const e=Math.max(0,1-this.properties.semanticZoomFraction*this.unitView.getZoomLevel());return e<=0?-1/0:e>=1?1/0:Wg(this.sampledSemanticScores,e)}else return-1}prepareRender(e){super.prepareRender(e),de(this.programInfo,{uMaxPointSize:this._getMaxPointSize(),uScaleFactor:this._getGeometricScaleFactor(),uSemanticThreshold:this.getSemanticThreshold()}),Cn(this.gl,this.programInfo,this.vertexArrayInfo);const n=this.encoders.x;if(n&&!n.constant){const r=ri(n.accessor).left,i=this.unitView.getScaleResolution("x").getScale().domain(),s=ls(i,null,1.01);this._findIndices=o=>{const a=this.unitView.getCollector().facetBatches.get(o);return[r(a,s[0]),r(a,s[s.length-1])]}}}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{const[s,o]=this._findIndices?this._findIndices(e.facetId):[0,i],a=o-s;a&&Dr(n,this.vertexArrayInfo,n.POINTS,a,r+s)},e,()=>this.rangeMap)}}var Pw="const int BUTT=0;const int SQUARE=1;const int ROUND=2;in float pos;in float side;uniform float uMinLength;uniform float uDashTextureSize;uniform lowp int uStrokeCap;flat out vec4 vColor;flat out float vSize;out float vNormalLengthInPixels;out highp vec2 vPosInPixels;void main(void){float pixelSize=1.0/uDevicePixelRatio;float size=getScaled_size();float opacity=getScaled_opacity()*uViewOpacity;if(size<pixelSize){opacity*=size/pixelSize;size=pixelSize;}vec2 a=applySampleFacet(vec2(getScaled_x(),getScaled_y()));vec2 b=applySampleFacet(vec2(getScaled_x2(),getScaled_y2()));vec2 tangent=b-a;float offset=0.0;float relativeDiff=0.0;if(uMinLength>0.0||uStrokeCap!=BUTT){float len=length(tangent*uViewportSize);float diff=max(0.0,uMinLength-len);if(uStrokeCap!=BUTT){diff+=size;}relativeDiff=diff/len;offset=relativeDiff*(pos-0.5);}vec2 p=pos<1.0? a+tangent*(pos+offset): b+tangent*offset;float aaPadding=pixelSize;vec2 normal=normalize(vec2(-tangent.y,tangent.x)/uViewportSize);p+=normal*side*(size+aaPadding)/uViewportSize;gl_Position=unitToNdc(p);vColor=vec4(getScaled_color()*opacity,opacity);vSize=size;vNormalLengthInPixels=side*(size+aaPadding);vPosInPixels=vec2(pos,(1.0-pos))*(1.0+relativeDiff)*length(tangent*uViewportSize)-vec2(uStrokeCap!=BUTT ? size/2.0 : 0.0);setupPicking();}",Lw="const int BUTT=0;const int SQUARE=1;const int ROUND=2;uniform sampler2D uDashTexture;uniform float uDashTextureSize;uniform float uStrokeDashOffset;uniform lowp int uStrokeCap;flat in vec4 vColor;flat in float vSize;in vec2 vPosInPixels;in float vNormalLengthInPixels;out lowp vec4 fragColor;void main(void){float dpr=uDevicePixelRatio;float distanceFromEnd=-min(vPosInPixels[0],vPosInPixels[1]);float distance;if(distanceFromEnd>0.0&&uStrokeCap==ROUND){distance=length(vec2(distanceFromEnd,vNormalLengthInPixels));}else{distance=abs(vNormalLengthInPixels);}float opacity=clamp(((vSize/2.0-distance)*dpr),-0.5,0.5)+0.5;if(uDashTextureSize>0.0){float pos=(vPosInPixels[0]+uStrokeDashOffset)*dpr;float floored=floor(pos);vec2 texelPositions=(floored+vec2(0.5,1.5))/dpr/uDashTextureSize;opacity*=mix(texture(uDashTexture,vec2(texelPositions[0],0)).r,texture(uDashTexture,vec2(texelPositions[1],0)).r,clamp((pos-floored),0.0,1.0));}fragColor=vColor*opacity;if(uPickingEnabled){fragColor=vPickingColor;}}";class Rw extends Lr{constructor(e){super(e);this.dashTextureSize=0,Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x2:void 0,y2:void 0,size:1,color:"black",opacity:1,minLength:0,strokeDash:null,strokeDashOffset:0,strokeCap:"butt"}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","size","color","opacity"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size"]}fixEncoding(e){if(!(e.x&&e.y&&e.x2&&e.y2))if(e.x&&e.x2&&!e.y)e.y={value:.5},e.y2=e.y;else if(e.y&&e.y2&&!e.x)e.x={value:.5},e.x2=e.x;else if(e.x&&!e.y)e.y={value:0},e.y2={value:1},e.x2=e.x;else if(e.y&&!e.x)e.x={value:0},e.x2={value:1},e.y2=e.y;else if(e.x&&e.y&&e.y2)e.x2=e.x;else if(e.y&&e.x&&e.x2)e.y2=e.y;else if(e.y&&e.x)if(!e.x2&&e.y.type=="quantitative")e.x2=e.x,e.y2={datum:0};else if(!e.y2&&e.x.type=="quantitative")e.y2=e.y,e.x2={datum:0};else throw new Error("A bug!");else throw new Error("Invalid x and y encodings for rule mark: "+JSON.stringify(e));return e}async initializeGraphics(){if(await super.initializeGraphics(),this.properties.strokeDash){const e=this.gl,n=Nw(this.properties.strokeDash);this.dashTexture=Cr(e,{mag:e.NEAREST,min:e.NEAREST,internalFormat:e.R8,format:e.RED,src:n,height:1}),this.dashTextureSize=n.length}this.createAndLinkShaders(Pw,Lw)}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new ow({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}prepareRender(e){super.prepareRender(e),de(this.programInfo,{uMinLength:this.properties.minLength,uDashTextureSize:this.dashTextureSize,uStrokeCap:["butt","square","round"].indexOf(this.properties.strokeCap)}),this.dashTexture&&de(this.programInfo,{uDashTexture:this.dashTexture,uStrokeDashOffset:this.properties.strokeDashOffset}),Cn(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>Dr(n,this.vertexArrayInfo,n.TRIANGLE_STRIP,i,r),e,()=>this.rangeMap)}}function Nw(t){if(t.length==0||t.length%2||t.findIndex(s=>Math.round(s)!=s||s<1||s>1e3)>=0)throw new Error("Invalid stroke dash pattern: "+JSON.stringify(t));const e=t.reduce((s,o)=>s+o),n=new Uint8Array(e);let r=!0,i=0;for(let s of t){for(;s;)n[i++]=r&&255||0,s--;r=!r}return n}var kw=`uniform float uSagittaScaleFactor;uniform float uMinSagittaLength;in vec2 strip;out vec4 vColor;out float vSize;out float vNormalLengthInPixels;void main(void){float pixelSize=1.0/uDevicePixelRatio;float opacity=getScaled_opacity()*uViewOpacity;vec2 a=vec2(getScaled_x(),getScaled_y())*uViewportSize;vec2 b=vec2(getScaled_x2(),getScaled_y2())*uViewportSize;vec2 chordVector=b-a;vec2 unitChordVector=normalize(chordVector);vec2 chordNormal=vec2(-unitChordVector.y,unitChordVector.x);float sagitta=max(length(chordVector)/2.0*uSagittaScaleFactor,uMinSagittaLength);bool compress=false;if(compress){float maxSagittaLen=length(chordNormal*uViewportSize);float maxChordLen=length(unitChordVector*uViewportSize);float threshold=maxSagittaLen*0.5;if(sagitta>threshold){float m=(maxSagittaLen-threshold)/(maxChordLen-threshold);sagitta=(sagitta-threshold)*m+threshold;}}vec2 controlOffset=chordNormal*sagitta/0.75;vec2 p1=a;vec2 p2=a+controlOffset;vec2 p3=b+controlOffset;vec2 p4=b;float t=smoothstep(0.0,1.0,strip.x);vec2 C1=p4-3.0*p3+3.0*p2-p1;vec2 C2=3.0*p3-6.0*p2+3.0*p1;vec2 C3=3.0*p2-3.0*p1;vec2 C4=p1;vec2 p;if(t==0.0){p=p1;}else if(t==1.0){p=p4;}else{p=C1*t*t*t+C2*t*t+C3*t+C4;}vec2 tangent=normalize(3.0*C1*t*t+2.0*C2*t+C3);vec2 normal=vec2(-tangent.y,tangent.x);
169
+ #ifdef size2_DEFINED
170
+ float mixedSize=mix(getScaled_size(),getScaled_size2(),t);
171
+ #else
172
+ float mixedSize=getScaled_size();
173
+ #endif
174
+ if(mixedSize<pixelSize){opacity*=mixedSize/pixelSize;mixedSize=pixelSize;}float paddedSize=mixedSize+pixelSize;vNormalLengthInPixels=strip.y*paddedSize;p+=normal*vNormalLengthInPixels;gl_Position=pixelsToNdc(p);
175
+ #ifdef color2_DEFINED
176
+ vec3 color=mix(getScaled_color(),getScaled_color2(),t);
177
+ #else
178
+ vec3 color=getScaled_color();
179
+ #endif
180
+ vColor=vec4(color*opacity,opacity);vSize=paddedSize;setupPicking();}`,Ow="in lowp vec4 vColor;in float vSize;in float vNormalLengthInPixels;out lowp vec4 fragColor;void main(void){float dpr=uDevicePixelRatio;float distance=abs(vNormalLengthInPixels);float opacity=clamp(((vSize/2.0-distance)*dpr),0.0,1.0);fragColor=vColor*opacity;if(uPickingEnabled){fragColor=vPickingColor;}}";class zw extends Lr{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:0,x2:void 0,y:0,y2:void 0,size:1,size2:void 0,color:"black",color2:void 0,opacity:1,segments:101,sagittaScaleFactor:1,minSagittaLength:1.5}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","size","size2","height","color","color2","opacity"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size","size2","color2"]}fixEncoding(e){return e.x||(e.x2=e.x),e.y2||(e.y2=e.y),e}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(kw,Ow)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;de(this.programInfo,{uSagittaScaleFactor:e.sagittaScaleFactor,uMinSagittaLength:e.minSagittaLength})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new uw({encoders:this.encoders,attributes:this.getAttributes(),numItems:n});r.addBatches(e.facetBatches);const i=r.toArrays();i.arrays.strip={data:Uw(this.properties.segments),numComponents:2},this.rangeMap=i.rangeMap,this.arrays=Object.fromEntries(Object.entries(i.arrays).map(([s,o])=>[s,Se(T({},o),{data:void 0})])),this.updateBufferInfo(i)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{this.gl.bindVertexArray(this.vertexArrayInfo.vertexArrayObject);for(const s of Object.entries(this.bufferInfo.attribs)){const[o,a]=s;a.buffer&&this.arrays[o].numComponents&&(a.offset=r*this.arrays[o].numComponents*4)}Cn(n,this.programInfo,this.bufferInfo),Dr(n,this.bufferInfo,n.TRIANGLE_STRIP,(this.properties.segments+1)*2,0,i)},e,()=>this.rangeMap)}}function Uw(t){let e=0;const n=[];for(;e<=t;e++)n.push(e/t,.5),n.push(e/t,-.5);return n}var Gw=`uniform float uSdfNumerator;uniform vec2 uD;in mediump vec2 vertexCoord;in lowp vec2 textureCoord;uniform vec4 uViewportEdgeFadeWidth;uniform vec4 uViewportEdgeFadeDistance;uniform bool uSqueeze;uniform bool uLogoLetter;in float width;uniform ivec2 uAlign;
181
+ #ifdef x2_DEFINED
182
+ uniform float uPaddingX;uniform bool uFlushX;
183
+ #endif
184
+ #ifdef y2_DEFINED
185
+ uniform float uPaddingY;uniform bool uFlushY;
186
+ #endif
187
+ out vec2 vTexCoord;flat out vec4 vColor;flat out float vSlope;out float vEdgeFadeOpacity;struct RangeResult{float pos;float scale;};float minValue(vec4 v){return min(min(v.x,v.y),min(v.z,v.w));}float maxValue(vec4 v){return max(max(v.x,v.y),max(v.z,v.w));}/***All measures are in[0,1]*/RangeResult positionInsideRange(float a,float b,float width,float padding,int align,bool flush){float span=b-a;float paddedWidth=width+2.0*padding;if(a>1.0||b<0.0){return RangeResult(0.0,0.0);}float extra=max(0.0,span-paddedWidth);float pos;if(align==0){float centre=a+b;if(flush){float leftOver=max(0.0,paddedWidth-centre);centre+=min(leftOver,extra);float rightOver=max(0.0,paddedWidth+centre-2.0);centre-=min(rightOver,extra);}pos=centre/2.0;}else if(align<0){float edge=a;if(flush){float over=max(0.0,-edge);edge+=min(over,extra);}pos=edge+padding;}else{float edge=b;if(flush){float over=max(0.0,edge-1.0);edge-=min(over,extra);}pos=edge-padding;}float scale=clamp((span-padding)/paddedWidth,0.0,1.0);return RangeResult(pos,scale);}vec2 calculateRotatedDimensions(float width,mat2 rotationMatrix){vec2 a=abs(rotationMatrix*vec2(width/2.0,0.5));vec2 b=abs(rotationMatrix*vec2(width/2.0,-0.5));return vec2(max(a.x,b.x),max(a.y,b.y))*2.0;}ivec2 fixAlignForAngle(ivec2 align,float angleInDegrees){float a=mod(angleInDegrees+45.0,360.0);int x=align.x;int y=-align.y;if(a<90.0){return ivec2(x,y);}else if(a<180.0){return ivec2(y,-x);}else if(a<270.0){return ivec2(-x,y);}else{return ivec2(-y,x);}}void main(void){float opacity=getScaled_opacity()*uViewOpacity;vec2 size=vec2(getScaled_size());float x=getScaled_x();float y=getScaled_y();float scale=1.0;float angleInDegrees=getScaled_angle();float angle=-angleInDegrees*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);mat2 rotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);vec2 flushSize=calculateRotatedDimensions(width,rotationMatrix);
188
+ #if defined(x2_DEFINED) || defined(y2_DEFINED)
189
+ ivec2 align=fixAlignForAngle(uAlign,angleInDegrees);
190
+ #else
191
+ ivec2 align=uAlign;
192
+ #endif
193
+ #ifdef x2_DEFINED
194
+ float x2=getScaled_x2();if(uLogoLetter){size.x=(x2-x)*uViewportSize.x;x+=(x2-x)/2.0;}else{float x2=getScaled_x2();RangeResult result=positionInsideRange(min(x,x2),max(x,x2),size.x*scale*flushSize.x/uViewportSize.x,uPaddingX/uViewportSize.x,align.x,uFlushX);x=result.pos;scale*=result.scale;}
195
+ #endif
196
+ vec2 pos=applySampleFacet(vec2(x,y));
197
+ #ifdef y2_DEFINED
198
+ float y2=getScaled_y2();vec2 pos2=applySampleFacet(vec2(x,y2));if(uLogoLetter){size.y=(pos2.y-pos.y)*uViewportSize.y;pos.y+=(pos2.y-pos.y)/2.0;}else{RangeResult result=positionInsideRange(min(pos.y,pos2.y),max(pos.y,pos2.y),size.y*scale*flushSize.y/uViewportSize.y,uPaddingY/uViewportSize.y,align.y,uFlushY);pos.y=result.pos;scale*=result.scale;}
199
+ #endif
200
+ if(scale<1.0){if(uSqueeze){vec2 scaleFadeExtent=vec2(3.0,6.0)/size;if(scale<scaleFadeExtent[0]){gl_Position=vec4(0.0);return;}size*=scale;opacity*=linearstep(scaleFadeExtent[0],scaleFadeExtent[1],scale);}else if(scale<1.0){gl_Position=vec4(0.0);return;}}vec2 charPos=rotationMatrix*(vertexCoord*size+uD);vec2 unitPos=pos+charPos/uViewportSize;gl_Position=unitToNdc(unitPos);vSlope=max(1.0,min(size.x,size.y)/uSdfNumerator);vColor=vec4(getScaled_color()*opacity,opacity);vTexCoord=textureCoord;if(maxValue(uViewportEdgeFadeDistance)>-pow(10.0,10.0)){vEdgeFadeOpacity=minValue(((vec4(1.0,1.0,0.0,0.0)+vec4(-1.0,-1.0,1.0,1.0)*unitPos.yxyx)*uViewportSize.yxyx-uViewportEdgeFadeDistance)/uViewportEdgeFadeWidth);}else{vEdgeFadeOpacity=1.0;}setupPicking();}`,Hw="uniform sampler2D uTexture;in vec2 vTexCoord;in float vEdgeFadeOpacity;flat in vec4 vColor;flat in float vSlope;out lowp vec4 fragColor;float median(float r,float g,float b){return max(min(r,g),min(max(r,g),b));}void main(){vec3 c=texture(uTexture,vTexCoord).rgb;float sigDist=1.0-median(c.r,c.g,c.b);float opa=clamp((sigDist-0.5)*vSlope+0.5,0.0,1.0);opa*=pow(clamp(vEdgeFadeOpacity,0.0,1.0),2.2);fragColor=vColor*opa;if(uPickingEnabled){fragColor=vPickingColor;}}";const Vw={left:-1,center:0,right:1},Qw={top:-1,middle:0,bottom:1,alphabetic:1};class jw extends Lr{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,x2:void 0,y2:void 0,text:"",size:11,color:"black",opacity:1,font:void 0,fontStyle:void 0,fontWeight:void 0,align:"center",baseline:"middle",dx:0,dy:0,angle:0,fitToBand:!1,squeeze:!0,paddingX:0,paddingY:0,flushX:!0,flushY:!0,logoLetters:!1,viewportEdgeFadeWidthTop:0,viewportEdgeFadeWidthRight:0,viewportEdgeFadeWidthBottom:0,viewportEdgeFadeWidthLeft:0,viewportEdgeFadeDistanceTop:-1/0,viewportEdgeFadeDistanceRight:-1/0,viewportEdgeFadeDistanceBottom:-1/0,viewportEdgeFadeDistanceLeft:-1/0})),this.font=this.properties.font?e.context.fontManager.getFont(this.properties.font,this.properties.fontStyle,this.properties.fontWeight):e.context.fontManager.getDefaultFont()}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","color","size","opacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size","text","angle"]}fixEncoding(e){for(const n of gn)this.properties.fitToBand&&Ga(e,n);return e}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(Gw,Hw)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;de(this.programInfo,{uPaddingX:e.paddingX,uPaddingY:e.paddingY,uFlushX:!!e.flushX,uFlushY:!!e.flushY,uAlign:[Vw[e.align],Qw[e.baseline]],uD:[e.dx,-e.dy],uLogoLetter:!!e.logoLetters,uSqueeze:!!e.squeeze,uViewportEdgeFadeWidth:[e.viewportEdgeFadeWidthTop,e.viewportEdgeFadeWidthRight,e.viewportEdgeFadeWidthBottom,e.viewportEdgeFadeWidthLeft],uViewportEdgeFadeDistance:[e.viewportEdgeFadeDistanceTop,e.viewportEdgeFadeDistanceRight,e.viewportEdgeFadeDistanceBottom,e.viewportEdgeFadeDistanceLeft]})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getData(),r=this.encoding,i=this.encoders.text.accessor||this.encoders.text;let s=0;const o=r.text.format?xe(r.text.format):c=>c;for(const c of n){const l=o(i(c)),f=q(l)?l:l===null?"":""+l;s+=f&&f.length||0}const a=new cw({encoders:this.encoders,attributes:this.getAttributes(),properties:this.properties,fontMetrics:this.font.metrics,numCharacters:Math.max(s,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});a.addBatches(e.facetBatches);const u=a.toArrays();this.rangeMap=u.rangeMap,this.updateBufferInfo(u)}prepareRender(e){super.prepareRender(e);let n=.35;this.properties.logoLetters&&(n/=2),de(this.programInfo,{uTexture:this.font.texture,uSdfNumerator:this.font.metrics.common.base/(this.glHelper.dpr/n)}),Cn(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>Dr(n,this.vertexArrayInfo,n.TRIANGLES,i,r),e,()=>this.rangeMap)}}function Yw(t,e,{spacing:n,devicePixelRatio:r,offset:i,reverse:s}={}){n=n||0,i=i||0;let o=0,a=0;for(const d of t)o+=Rr(d.px)+(os(d)?0:n),a+=Rr(d.grow);o-=n;const u=Math.max(0,e-o),c=r!==void 0?d=>Math.round(d*r)/r:d=>d,l=[],f=[],h=d=>{const g=l.length;if(!g)return;const m=(d?n:0)*(s?-1:1);p-=m;for(let A=0;A<g;A++)f.push({location:p+(A+1)/(g+1)*m,size:0});p+=m,l.length=0};let p=s?Math.max(e,o):0+i;if(t.length==1&&os(t[0]))return[{location:p,size:0}];for(let d=0;d<t.length;d++){const g=t[d];if(os(g))l.push(g);else{h(f.length>0);const m=Rr(g.px)+(a?Rr(g.grow)/a*u:0);s&&(p-=m),f.push({location:c(p),size:c(m)}),s?p-=n:p+=m+n}}return p+=s?n:-n,h(!1),f}function Ww(t,{spacing:e}={spacing:0}){let n=0;for(const r of t)n+=Rr(r.px)+(os(r)?0:e);return Math.max(0,n-e)}class Tt{constructor(e,n){this.width=e,this.height=n}addPadding(e){return new Tt({px:(this.width.px||0)+e.width,grow:this.width.grow},{px:(this.height.px||0)+e.height,grow:this.height.grow})}}const j0=Object.freeze({px:0,grow:0}),Y0=new Tt(j0,j0);function os(t){return!t.px&&!t.grow}function Rr(t){return t||0}function Xw(t){return t&&(me(t.px)||me(t.grow))}function Ha(t){if(Z0(t))throw new Error("parseSizeDef does not accept step-based sizes.");if(Xw(t))return t;if(me(t))return{px:t,grow:0};if(t==="container")return{px:0,grow:1};if(!t)return{px:0,grow:1};throw new Error(`Invalid sizeDef: ${t}`)}class ze{constructor(e,n,r,i){this.top=e||0,this.right=n||0,this.bottom=r||0,this.left=i||0}get width(){return this.left+this.right}get height(){return this.top+this.bottom}expand(e){return e<=0?this:new ze(this.top+e,this.right+e,this.bottom+e,this.left+e)}add(e){return new ze(this.top+e.top,this.right+e.right,this.bottom+e.bottom,this.left+e.left)}static createFromConfig(e){return typeof e=="number"?this.createUniformPadding(e):e?this.createFromRecord(e):Va}static createFromRecord(e){return new ze(e.top,e.right,e.bottom,e.left)}static zero(){return Va}static createUniformPadding(e){return new ze(e,e,e,e)}}const Va=ze.createUniformPadding(0);Object.freeze(Va);const Zw=/^([A-Za-z]+:)?\/\//;function Kw(t,e){if(e&&Zw.test(e))return e;const n=t();return n&&e?n.endsWith("/")?n+e:n+"/"+e:n!=null?n:e}const as="VISIT_SKIP",Nr="VISIT_STOP",W0=t=>t;class X0{constructor(e,n,r,i){this.context=n,this.parent=r,this.name=e.name||i,this.spec=e,this.resolutions={scale:{},axis:{}},this._broadcastHandlers={},this._capturingInteractionEventListeners={},this._nonCapturingInteractionEventListeners={},N0(this),this.opacityFunction=W0}getPadding(){return this._cache("size/padding",()=>ze.createFromConfig(this.spec.padding))}getEffectivePadding(){return this.getPadding()}getSize(){return this._cache("size/size",()=>this.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()):Y0)}getSizeFromSpec(){const e=n=>{var s;let r,i=this.spec[n];if(Z0(i)){const o=i.step,a=(s=this.getScaleResolution(n=="width"?"x":"y"))==null?void 0:s.getScale();if(a){let u=0;if(Vt(a.type))u=a.domain().length;else if(["locus","index"].includes(a.type)){const c=a.domain();u=Re(c)-c[0]}else throw new Error(`Cannot use step-based size with "${a.type}" scale!`);u=zo(u,a.paddingInner(),a.paddingOuter()),r={px:u*o,grow:0}}else throw new Error("Cannot use 'step' size with missing scale!")}else r=i&&Ha(i)||{px:0,grow:1};return r};return this._cache("size/sizeFromSpec",()=>new Tt(e("width"),e("height")))}isVisible(){return this.context.isViewVisible(this)}isVisibleInSpec(){var e;return(e=this.spec.visible)!=null?e:!0}getEffectiveOpacity(){var e,n;return this.opacityFunction((n=(e=this.parent)==null?void 0:e.getEffectiveOpacity())!=null?n:1)}getPathString(){return[...this.getAncestors()].map(e=>e.name).reverse().join("/")}*getAncestors(){let e=this;do yield e,e=e.parent;while(e)}handleBroadcast(e){for(const n of this._broadcastHandlers[e.type]||[])n(e)}_addBroadcastHandler(e,n){let r=this._broadcastHandlers[e];r||(r=[],this._broadcastHandlers[e]=r),r.push(n)}handleInteractionEvent(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;for(const s of i[n.type]||[])s(e,n)}addInteractionEventListener(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;let s=i[e];s||(s=[],i[e]=s),s.push(n)}visit(e){try{const n=e(this);if(e.postOrder&&e.postOrder(this),n!==Nr)return n}catch(n){throw n.view=this,n}}onScalesResolved(){(!this.opacityFunction||this.opacityFunction===W0)&&(this.opacityFunction=Jw(this))}onBeforeRender(){}render(e,n,r={}){}getEncoding(e){const n=this.parent?this.parent.getEncoding(this):{},r=this.spec.encoding||{},i=T(T({},n),r);for(const[s,o]of Object.entries(i))o===null&&delete i[s];return i}getFacetAccessor(e){if(this.parent)return this.parent.getFacetAccessor(this)}getFacetFields(e){var r;const n=this.getEncoding().sample;return Ar(n)?[n.field]:(r=this.parent)==null?void 0:r.getFacetFields(this)}getSampleFacetTexture(){}_getResolution(e,n){e=Xt(e);let r=this;do{const i=r.resolutions[n][e];if(i)return i;r=r.parent}while(r)}getScaleResolution(e){return this._getResolution(e,"scale")}getAxisResolution(e){return this._getResolution(e,"axis")}getBaseUrl(){return Kw(()=>{var e;return(e=this.parent)==null?void 0:e.getBaseUrl()},this.spec.baseUrl)}getDynamicDataSource(){throw new Error("The view does not provide dynamic data!")}isPickingSupported(){return!0}_cache(e,n){return Mn(this,e,n)}_invalidateCacheByPrefix(e,n="self"){switch(n){case"self":is(this,e);break;case"ancestors":for(const r of this.getAncestors())is(r,e);break;case"progeny":this.visit(r=>is(r,e));break}}invalidateSizeCache(){this._invalidateCacheByPrefix("size/","ancestors")}}function qw(t){return"unitsPerPixel"in t}function Jw(t){const e=t.spec.opacity;if(e!==void 0){if(me(e))return n=>n*e;if(qw(e)){const n=s=>{var a;const o=(a=t.getScaleResolution(s))==null?void 0:a.getScale();if(["linear","index","locus"].includes(o==null?void 0:o.type))return o},r=e.channel?n(e.channel):n("x")||n("y");if(!r)throw new Error("Cannot find a resolved quantitative scale for dynamic opacity!");const i=Io().domain(e.unitsPerPixel).range(e.values).clamp(!0);return s=>{const o=1e3,a=Hr(r.domain())/o;return i(a)*s}}}return n=>n}const Z0=t=>!!(t==null?void 0:t.step);class lt extends X0{constructor(e,n,r,i){super(e,n,r,i);this.spec=e}*[Symbol.iterator](){}replaceChild(e,n){throw new Error("Not implemented")}visit(e){let n;try{n=e(this)}catch(r){throw r.view=this,r}if(n===Nr)return n;if(n!==as){e.beforeChildren&&e.beforeChildren(this);for(const r of this){const i=r.visit(e);if(i===Nr)return i}e.afterChildren&&e.afterChildren(this),e.postOrder&&e.postOrder(this)}}findDescendantByPath(e){for(const n of this)if(n.name===e[0]){if(e.length==1)return n;if(n instanceof lt)return n.findDescendantByPath(e.slice(1))}}findChildByName(e){for(const n of this)if(n.name===e)return n}getConfiguredResolution(e,n){var r,i;return(i=(r=this.spec.resolve)==null?void 0:r[n])==null?void 0:i[e]}getDefaultResolution(e,n){return"shared"}getConfiguredOrDefaultResolution(e,n){var r,i;return(i=(r=this.getConfiguredResolution(e,n))!=null?r:this.getConfiguredResolution("default",n))!=null?i:this.getDefaultResolution(e,n)}}function us(t,e,n){if(n=n||[],t.some(o=>o===null)){if(t.every(o=>o===null))return null;throw console.warn(t),new Error("Cannot merge objects with nulls!")}const r={},i=(o,a)=>o===a||Bn(o)&&Bn(a)||Bn(o)&&a===!0||o===!0&&Te(a),s=o=>{for(let a in o){const u=o[a];if(!n.includes(a)&&u!==void 0)if(r[a]!==void 0&&!i(r[a],u))console.warn(`Conflicting property ${a} of ${e}: (${JSON.stringify(r[a])} and ${JSON.stringify(o[a])}). Using ${JSON.stringify(r[a])}.`);else{const c=r[a];if(Bn(c))Bn(u)&&(r[a]=us([c,u],a));else if(Bn(u)){if(!(c===!0||c===void 0))throw new Error("Bug in merge! Target is: "+c);r[a]=us([{},u],a)}else r[a]=u}}};for(const o of t)s(o);return r}function Bn(t){return Te(t)&&!Array.isArray(t)}/*!
201
+ * Adapted from vega-encode:
202
+ * https://github.com/vega/vega/blob/master/packages/vega-encode/src/ticks.js
203
+ *
204
+ * Copyright (c) 2015-2018, University of Washington Interactive Data Lab
205
+ * All rights reserved.
206
+ *
207
+ * BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
208
+ */function K0(t,e,n){return me(e)&&n!=null&&(e=Math.min(e,~~(Hr(t.domain())/n)||1)),Te(e)&&(e=e.interval),e}function q0(t,e,n){var r=t.range(),i=Math.floor(r[0]),s=Math.ceil(Pe(r));if(i>s&&(r=s,s=i,i=r),e=e.filter(function(a){return a=t(a),i<=a&&a<=s}),n>0&&e.length>1){for(var o=[e[0],Pe(e)];e.length>n&&e.length>=3;)e=e.filter(function(a,u){return!(u%2)});e.length<3&&(e=o)}return e}function _w(t,e){return t.bins?q0(t,$w(t.bins,e)):t.ticks?t.ticks(e):t.domain()}function $w(t,e){var n=t.length,r=~~(n/(e||n));return r<2?t.slice():t.filter(function(i,s){return!(s%r)})}function ev(t,e,n){var r=t.tickFormat?t.tickFormat(e,n):n?xe(n):String;if(Uf(t.type)){var i=nv(n);r=t.bins?i:tv(r,i)}return r}function tv(t,e){return function(n){return t(n)?e(n):""}}function nv(t){var e=ci(t||",");if(e.precision==null){switch(e.precision=12,e.type){case"%":e.precision-=2;break;case"e":e.precision-=1;break}return rv(xe(e),xe(".1f")(1)[1])}else return xe(e)}function rv(t,e){return function(n){var r=t(n),i=r.indexOf(e),s,o;if(i<0)return r;for(s=iv(r,i),o=s<r.length?r.slice(s):"";--s>i;)if(r[s]!=="0"){++s;break}return r.slice(0,s)+o}}function iv(t,e){var n=t.lastIndexOf("e"),r;if(n>0)return n;for(n=t.length;--n>e;)if(r=t.charCodeAt(n),r>=48&&r<=57)return n+1}/*!
209
+ * Adapted from vega-encode:
210
+ * https://github.com/vega/vega/blob/master/packages/vega-encode/src/Scale.js
211
+ *
212
+ * Copyright (c) 2015-2018, University of Washington Interactive Data Lab
213
+ * All rights reserved.
214
+ *
215
+ * BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
216
+ */const sv="locus",ov="index";var av=5;function uv(t){const e=t.type;return!t.bins&&(e===hn||e===sr||e===or)}function J0(t){return Xe(t)&&![We,ov,sv].includes(t)}function _0(t){return t||{warn:(e,...n)=>console.warn(e,...n)}}var cv=Qr(["set","modified","clear","type","scheme","schemeExtent","schemeCount","domain","domainMin","domainMid","domainMax","domainRaw","domainImplicit","nice","zero","bins","range","rangeStep","round","reverse","interpolate","interpolateGamma","zoom","fp64","name"]);function $0(t,e,n){n=_0(n);for(const r in t)if(!cv[r]){if(r==="padding"&&J0(e.type))continue;ge(e[r])?e[r](t[r]):n.warn("Unsupported scale property: "+r)}Av(e,t,mv(e,t,dv(e,t,n)))}function fv(t,e){const n=lv(t),r=O(n);if(!r)throw new Error("Unknown scale type: "+n);const i=r();return $0(t,i,e),i}function lv(t){var e=t.type,n="",r;return e===We?We+"-"+hn:(hv(t)&&(r=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(t.domainMid!=null):0,n=r===2?We+"-":r===3?dn+"-":""),(n+e||hn).toLowerCase())}function hv(t){const e=t.type;return Xe(e)&&e!==Tf&&e!==Pf&&(t.scheme||t.range&&t.range.length&&t.range.every(q))}function dv(t,e,n){if(!t.domain)return 0;n=_0(n);var r=pv(t,e.domainRaw,n);if(r>-1)return r;var i=e.domain,s=t.type,o=e.zero||e.zero===void 0&&uv(t),a,u;return i?(J0(s)&&e.padding&&i[0]!==Pe(i)&&(i=gv(s,i,e.range,e.padding,e.exponent,e.constant)),(o||e.domainMin!=null||e.domainMax!=null||e.domainMid!=null)&&(a=(i=i.slice()).length-1||1,o&&(i[0]>0&&(i[0]=0),i[a]<0&&(i[a]=0)),e.domainMin!=null&&(i[0]=e.domainMin),e.domainMax!=null&&(i[a]=e.domainMax),e.domainMid!=null&&(u=e.domainMid,(u<i[0]||u>i[a])&&n.warn("Scale domainMid exceeds domain min or max.",u),i.splice(a,0,u))),t.domain(eh(s,i,n)),s===Go&&t.unknown(e.domainImplicit?so:void 0),e.nice&&t.nice&&t.nice(e.nice!==!0&&K0(t,e.nice)||null),i.length):0}function pv(t,e,n){return e?(t.domain(eh(t.type,e,n)),e.length):-1}function gv(t,e,n,r,i,s){var o=Math.abs(Pe(n)-n[0]),a=o/(o-2*r),u=t===wt?ou(e,null,a):t===or?hs(e,null,a,.5):t===sr?hs(e,null,a,i||1):t===bi?Jh(e,null,a,s||1):ls(e,null,a);return e=e.slice(),e[0]=u[0],e[e.length-1]=u[1],e}function eh(t,e,n){if(Uf(t)){var r=Math.abs(e.reduce(function(i,s){return i+(s<0?-1:s>0?1:0)},0));r!==e.length&&n.warn("Log scale domain includes zero: "+Vr(e))}return e}function mv(t,e,n){let r=e.bins;if(r&&!Be(r)){const i=(r.start==null||r.stop==null)&&t.domain(),s=r.start==null?i[0]:r.start,o=r.stop==null?Pe(i):r.stop,a=r.step;a||W("Scale bins parameter missing step property."),r=oi(s,o+a,a)}return r?t.bins=r:t.bins&&delete t.bins,t.type===Vo&&(r?!e.domain&&!e.domainRaw&&(t.domain(r),n=r.length):t.bins=t.domain()),n}function Av(t,e,n){var r=t.type,i=e.round||!1,s=e.range;if(e.rangeStep!=null)s=xv(r,e,n);else if(e.scheme&&(s=yv(r,e,n),ge(s))){if(t.interpolator)return t.interpolator(s);W(`Scale type ${r} does not support interpolating color schemes.`)}if(s&&vi(r))return t.interpolator(Ei(Qa(s,e.reverse),e.interpolate,e.interpolateGamma));s&&e.interpolate&&t.interpolate?t.interpolate(Gf(e.interpolate,e.interpolateGamma)):ge(t.round)?t.round(i):ge(t.rangeRound)&&t.interpolate(i?rr:yt),s&&t.range(Qa(s,e.reverse))}function xv(t,e,n){t!==Nf&&t!==Ho&&W("Only band and point scales support rangeStep.");var r=(e.paddingOuter!=null?e.paddingOuter:e.padding)||0,i=t===Ho?1:(e.paddingInner!=null?e.paddingInner:e.padding)||0;return[0,e.rangeStep*zo(n,i,r)]}function yv(t,e,n){var r=e.schemeExtent,i,s;return Be(e.scheme)?s=Ei(e.scheme,e.interpolate,e.interpolateGamma):(i=e.scheme.toLowerCase(),s=jo(i),s||W(`Unrecognized scheme name: ${e.scheme}`)),n=t===Rf?n+1:t===Vo?n-1:t===Uo||t===Lf?+e.schemeCount||av:n,vi(t)?th(s,r,e.reverse):ge(s)?dA(th(s,r),n):t===Go?s:s.slice(0,n)}function th(t,e,n){return ge(t)&&(e||n)?hA(t,Qa(e||[0,1],n)):t}function Qa(t,e){return e?t.slice().reverse():t}const nh=xe(",d");function bv(t,e){return t.chrom+":"+nh(Math.floor(t.pos+1))+"-"+(t.chrom!=e.chrom?e.chrom+":":"")+nh(Math.ceil(e.pos))}const wv="https://genomespy.app/data/genomes/";class vv{constructor(e){if(this.config=e,!this.config.contigs&&typeof this.config.name!="string")throw new Error("No name has been defined for the genome assembly!");this.chromosomes=[],this.cumulativeChromPositions=new Map,this.chromosomesByName=new Map,this.startByIndex=[],this.totalSize=0,this.config.contigs&&this.setChromSizes(this.config.contigs)}get name(){return this.config.name}async load(e){if(!this.config.contigs){this.config.baseUrl?this.baseUrl=/^http(s)?/.test(this.config.baseUrl)?this.config.baseUrl:e+"/"+this.config.baseUrl:this.baseUrl=wv;try{this.setChromSizes(Ev(await ti({baseURL:this.baseUrl}).load(`${this.config.name}/${this.name}.chrom.sizes`)))}catch(n){throw new Error(`Could not load chrom sizes: ${n.message}`)}}}setChromSizes(e){let n=0;this.startByIndex=[0];for(let r=0;r<e.length;r++){this.startByIndex.push(n);const i=e[r].size,s=Se(T({},e[r]),{continuousStart:n,continuousEnd:n+i,continuousInterval:[n,n+i],index:r,number:r+1,odd:!(r&1)});this.chromosomes.push(s);const o=s.name.replace(/^chr/i,"");for(const a of["chr"+o,"CHR"+o,"Chr"+o,s.number,""+s.number,o,s.name])this.cumulativeChromPositions.set(a,n),this.chromosomesByName.set(a,s);n+=s.size}this.totalSize=n}getExtent(){return[0,this.totalSize]}toContinuous(e,n){let r=this.cumulativeChromPositions.get(e);if(r===void 0)throw new Error("Unknown chromosome/contig: "+e);return r+ +n}toChromosome(e){if(e>=this.totalSize)return;e=Math.floor(e);const n=zg(this.startByIndex,e)-1;if(n>0&&n<=this.chromosomes.length)return this.chromosomes[n-1]}toChromosomal(e){const n=this.toChromosome(e);if(!!n)return{chrom:n.name,pos:Math.floor(e)-n.continuousStart}}getChromosome(e){return this.chromosomesByName.get(e)}formatInterval(e){return bv(...this.toChromosomalInterval(e))}toChromosomalInterval(e){const n=this.toChromosomal(e[0]+.5),r=this.toChromosomal(e[1]-.5);return r.pos+=1,[n,r]}toContinuousInterval(e){var i,s,o;let[n,r]=e;return r||(r=n),[this.toContinuous(n.chrom,(i=n.pos)!=null?i:0),this.toContinuous(r.chrom,(o=r.pos)!=null?o:(s=this.chromosomesByName.get(r.chrom))==null?void 0:s.size)]}parseInterval(e){const n=e.match(/^(chr[0-9A-Z]+):([0-9,]+)-(?:(chr[0-9A-Z]+):)?([0-9,]+)$/);if(n){const r=n[1],i=n[3]||r,s=parseInt(n[2].replace(/,/g,"")),o=parseInt(n[4].replace(/,/g,""));return[this.toContinuous(r,s-1),this.toContinuous(i,o)]}}}function Ev(t){return md(t).filter(e=>/^chr[0-9A-Z]+$/.test(e[0])).map(([e,n])=>({name:e,size:parseInt(n)}))}function rh(t){return Te(t)&&"chrom"in t}function Cv(t){return t.every(rh)}class kr extends Array{constructor(){super();this.type=void 0}extend(e){return this}extendAll(e){if(e instanceof kr&&e.type!=this.type)throw new Error(`Cannot combine different types of domains: ${this.type} and ${e.type}`);for(const n of e)this.extend(n);return this}extendAllWithAccessor(e,n){for(const r of e)this.extend(n(r));return this}}class ja extends kr{constructor(){super();this.type="quantitative"}extend(e){return e==null||Number.isNaN(e)?this:(e=+e,this.length?e<this[0]?this[0]=e:e>this[1]&&(this[1]=e):(this.push(e),this.push(e)),this)}}class ih extends kr{constructor(){super();this.type="ordinal",this.uniqueValues=new Set}extend(e){return e==null||Number.isNaN(e)?this:(this.uniqueValues.has(e)||(this.uniqueValues.add(e),this.push(e)),this)}}class sh extends ih{constructor(){super();this.type="nominal"}}class Dv extends kr{constructor(e){super();let n=0;for(let r=1;r<e.length;r++)n+=Math.sign(e[r]-e[r-1]);if(Math.abs(n)!=e.length-1)throw new Error("Piecewise domain must be strictly increasing or decreasing: "+JSON.stringify(e));e.forEach(r=>this.push(r))}extend(e){if(this.includes(e))return this;throw new Error("Piecewise domains are immutable and cannot be unioned!")}}const oh={quantitative:ja,index:ja,locus:ja,nominal:sh,ordinal:ih};function ah(t,e){if(t=="quantitative"&&Sv(e)){const n=new Dv(e);return n.type=t,n}else if(oh[t]){const n=new oh[t];return n.type=t,e&&n.extendAll(e),n}throw new Error("Unknown type: "+t)}function Sv(t){return t&&t.length>0&&t.length!=2&&t.every(e=>typeof e=="number")}function Mv(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}const uh="quantitative",ch="ordinal",fh="nominal",Ya="locus",Bv="index";class Fv{constructor(e){this.channel=e,this.members=[],this.type=null,this._zoomExtent=void 0,this._domainListeners=new Set,this.name=void 0,this._scale=void 0}addEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.add(n)}removeEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.delete(n)}_notifyDomainListeners(){for(const e of this._domainListeners.values())e({type:"domain",scaleResolution:this})}pushUnitView(e,n){var o;const r=Ti(e,n),i=r.type,s=(o=r==null?void 0:r.scale)==null?void 0:o.name;if(s){if(this.name!==void 0&&s!=this.name)throw new Error(`Shared scales have conflicting names: "${s}" vs. "${this.name}"!`);this.name=s}if(!this.type)this.type=i;else if(i!==this.type&&!xr(n))throw new Error(`Can not use shared scale for different data types: ${this.type} vs. ${i}. Use "resolve: independent" for channel ${this.channel}`);this.members.push({view:e,channel:n})}isExplicitDomain(){return!!this.getConfiguredDomain()}_getMergedScaleProps(){return Mn(this,"mergedScaleProps",()=>{const e=this.members.map(n=>Ti(n.view,n.channel).scale).filter(n=>n!==void 0);return us(e,"scale",["domain"])})}getScaleProps(){return Mn(this,"scaleProps",()=>{var i,s;const e=this._getMergedScaleProps();if(e===null||e.type=="null")return{type:"null"};const n=T(T({},this._getDefaultScaleProperties(this.type)),e);n.type||(n.type=Iv(this.channel,this.type));const r=this.getInitialDomain();return r&&r.length>0?n.domain=r:Vt(n.type)&&(n.domain=new sh),!n.domain&&n.domainMid!==void 0&&(n.domain=[(i=n.domainMin)!=null?i:0,(s=n.domainMax)!=null?s:1]),n.type==Ya&&!("fp64"in n)&&(n.fp64=!0),this.channel=="y"&&Vt(n.type)&&n.reverse==null&&(n.reverse=!0),n.range&&n.scheme&&delete n.scheme,!("zoom"in n)&&["index","locus"].includes(n.type)&&(n.zoom=!0),Tv(n,this.channel),n})}getInitialDomain(){var e;return(e=this.getConfiguredDomain())!=null?e:this.type==Ya?this.getGenome().getExtent():this.getDataDomain()}getConfiguredDomain(){return this._reduceDomains(e=>xr(e.channel)?void 0:e.view.getConfiguredDomain(e.channel))}getDataDomain(){return this._reduceDomains(e=>xr(e.channel)?void 0:e.view.extractDataDomain(e.channel))}reconfigure(){if(this._scale&&this._scale.type!="null"){R0(this,"scaleProps");const e=this.getScaleProps();$0(e,this._scale),Xe(this._scale.type)&&(this._zoomExtent=this._getZoomExtent())}}getScale(){if(this._scale)return this._scale;const e=this.getScaleProps(),n=fv(e);return this._scale=n,n.type=="locus"&&n.genome(this.getGenome()),n.fp64=!!e.fp64,Xe(n.type)&&(this._zoomExtent=this._getZoomExtent()),n}getDomain(){return this.getScale().domain()}getComplexDomain(){var e,n;return(n=(e=this.getGenome())==null?void 0:e.toChromosomalInterval(this.getDomain()))!=null?n:this.getDomain()}isZoomed(){return this.isZoomable()&&Yo(this.getInitialDomain(),this.getDomain())}isZoomable(){if(!gn.includes(this.channel))return!1;const e=this.getScale().type;return["linear","locus","index","log","pow","sqrt"].includes(e)?!!this.getScaleProps().zoom:!1}zoom(e,n,r){if(!this.isZoomable())return!1;const i=this.getScale(),s=i.domain();let o=[...s];const a=i.invert(n);switch(this.getScaleProps().reverse&&(r=-r),i.type){case"linear":case"index":case"locus":o=Zh(o,r||0),o=ls(o,a,e);break;case"log":o=Kh(o,r||0),o=ou(o,a,e);break;case"pow":case"sqrt":o=qh(o,r||0,i.exponent()),o=hs(o,a,e,i.exponent());break;default:throw new Error("Unsupported scale type: "+i.type)}return this._zoomExtent&&(o=_h(o,...this._zoomExtent)),[0,1].some(u=>o[u]!=s[u])?(i.domain(o),this._notifyDomainListeners(),!0):!1}async zoomTo(e,n=!1){var a;if(gs(n)&&(n=n?700:0),!this.isZoomable())throw new Error("Not a zoomable scale!");const r=this.fromComplexInterval(e),i=(a=this.members[0])==null?void 0:a.view.context.animator,s=this.getScale(),o=s.domain();if(n>0&&o.length==2){const u=o[1]-o[0],c=o[0]+u/2,l=r[1]-r[0],f=r[0]+l/2,h=of.rho(.7)([c,0,u],[f,0,l]);await i.transition({duration:n/1e3*h.duration,easingFunction:Mv,onUpdate:p=>{const[d,,g]=h(p);s.domain([d-g/2,d+g/2]),this._notifyDomainListeners()}}),s.domain(r),this._notifyDomainListeners()}else s.domain(r),i==null||i.requestRender(),this._notifyDomainListeners()}getZoomLevel(){return this.isZoomable()?Hr(this._zoomExtent)/Hr(this.getScale().domain()):1}_getZoomExtent(){const e=this.getScaleProps(),n=e.zoom;if(Pv(n)&&Be(n.extent))return this.fromComplexInterval(n.extent);if(n)return e.type=="locus"?this.getGenome().getExtent():this._scale.domain()}_getDefaultScaleProperties(e){const n=this.channel,r={};return this.isExplicitDomain()&&(r.zero=!1),Pi(n)?r.nice=!this.isExplicitDomain():Zt(n)?r.scheme=e==fh?"tableau10":e==ch?"blues":"viridis":Li(n)?r.range=sl(n):n=="size"?r.range=[0,400]:n=="angle"&&(r.range=[0,360]),r}getGenome(){var n;if(this.type!=="locus")return;const e=(n=this.members[0].view.context.genomeStore)==null?void 0:n.getGenome();if(!e)throw new Error("No genome has been defined!");return e}invertToComplex(e){const n=this.getScale();if("invert"in n){const r=n.invert(e);return this.toComplex(r)}else throw new Error("The scale does not support inverting!")}toComplex(e){const n=this.getGenome();return n?n.toChromosomal(e):e}fromComplex(e){return rh(e)?this.getGenome().toContinuous(e.chrom,e.pos):e}fromComplexInterval(e){return this.type==="locus"&&Cv(e)?this.getGenome().toContinuousInterval(e):e}_getViewPaths(){return this.members.map(e=>e.view.getPathString()).join(", ")}_reduceDomains(e){const n=this.members.map(e).filter(r=>!!r);if(n.length)return n.reduce((r,i)=>r.extendAll(i))}}function Iv(t,e){if([Bv,Ya].includes(e)){if(gn.includes(t))return e;throw new Error(`${t} does not support ${e} data type. Only positional channels do.`)}const n={uniqueId:["null",void 0,void 0],facetIndex:["null",void 0,void 0],x:["band","band","linear"],y:["band","band","linear"],size:[void 0,"point","linear"],opacity:[void 0,"point","linear"],fillOpacity:[void 0,"point","linear"],strokeOpacity:[void 0,"point","linear"],color:["ordinal","ordinal","linear"],fill:["ordinal","ordinal","linear"],stroke:["ordinal","ordinal","linear"],strokeWidth:[void 0,void 0,"linear"],shape:["ordinal","ordinal",void 0],sample:["null","null",void 0],semanticScore:[void 0,void 0,"null"],search:["null",void 0,void 0],text:["null","null","null"],dx:[void 0,void 0,"null"],dy:[void 0,void 0,"null"],angle:[void 0,void 0,"linear"]},r=n[t]?n[t][[fh,ch,uh].indexOf(e)]:e==uh?"linear":"ordinal";if(r===void 0)throw new Error(`Channel "${t}" is not compatible with "${e}" data type. Use of a proper scale may be needed.`);return r}function Tv(t,e){Pi(e)&&t.type!=="ordinal"&&(t.range=[0,1]),e=="opacity"&&Xe(t.type)&&(t.clamp=!0)}function Pv(t){return Te(t)}function Wa(...t){for(const e of t)if(e!==void 0)return e}class Lv{constructor(e){this.channel=e,this.members=[]}get scaleResolution(){var e;return(e=Re(this.members))==null?void 0:e.view.getScaleResolution(this.channel)}pushUnitView(e,n){const r=e.getScaleResolution(this.channel);if(!r)throw new Error("Cannot find a scale resolution!");if(this.scaleResolution&&r!==this.scaleResolution)throw new Error("Shared axes must have a shared scale!");this.members.push({view:e,channel:n})}getAxisProps(){return Mn(this,"axisProps",()=>{const e=this.members.map(n=>Ti(n.view,n.channel).axis);return e.length>0&&e.some(n=>n===null)?null:us(e.filter(n=>n!==void 0),"axis",["title"])})}getTitle(){const e=s=>{var a;const o=Ti(s.view,s.channel);return{member:s,explicitTitle:Wa((a=o.axis)==null?void 0:a.title,o.title),implicitTitle:Wa(Ar(o)?o.field:void 0,ta(o)?o.expr:void 0)}},n=this.members.map(e),r=n.filter(s=>{var o;if(xr(s.member.channel)&&!s.explicitTitle){const a=Xt(s.member.channel);return((o=n.find(u=>u.member.view==s.member.view&&u.member.channel==a))==null?void 0:o.explicitTitle)===void 0}return!0}),i=new Set(r.map(s=>Wa(s.explicitTitle,s.implicitTitle)).filter(q));return i.size?[...i].join(", "):null}}class lh extends X0{constructor(e,n,r,i){super(e,n,r,i);this.spec=e}}class Xa extends lt{constructor(e,n,r,i){super(e,n,r,i);this.spec=e,this.children=(e.layer||[]).map((s,o)=>{if(qa(s)||Ka(s))return n.createView(s,this,"layer"+o);throw new Error("LayerView accepts only unit or layer specs as children!")})}*[Symbol.iterator](){for(const e of this.children)yield e}render(e,n,r={}){if(!!this.isVisible()){n=n.shrink(this.getPadding()),e.pushView(this,n);for(const i of this.children)i.render(e,n,r);e.popView(this)}}}function ht(t){return()=>t}class et{static create(e,n,r,i){return new et(ht(e),ht(n),ht(r),ht(i))}_offset(e,n){const r=this["_"+e];if(n===0)return r;switch(typeof n){case"number":return()=>r()+n;case"function":return()=>r()+n();default:throw new Error("Not a number of function")}}_passThrough(e){return this._offset(e,0)}constructor(e,n,r,i){this._x=e,this._y=n,this._width=r,this._height=i}get x(){return this._x()}get y(){return this._y()}get width(){return this._width()}get height(){return this._height()}get x2(){return this._x()+this._width()}get y2(){return this._y()+this._height()}equals(e){return e?this===e||this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height:!1}modify(e){if(!Object.keys(e).length)return this;const n=r=>{const i=e[r];return typeof i=="number"?ht(i):typeof i=="function"?i:this._passThrough(r)};return new et(n("x"),n("y"),n("width"),n("height"))}translate(e,n){return e===0&&n===0?this:new et(this._offset("x",e),this._offset("y",n),this._passThrough("width"),this._passThrough("height"))}translateBy(e){return this.translate(e.x,e.y)}expand(e,n=1){return e.left==0&&e.top==0&&e.right==0&&e.bottom==0?this:new et(e.left?this._offset("x",-e.left*n):this._passThrough("x"),e.top?this._offset("y",-e.top*n):this._passThrough("y"),e.width?this._offset("width",e.width*n):this._passThrough("width"),e.height?this._offset("height",e.height*n):this._passThrough("height"))}shrink(e){return this.expand(e,-1)}intersect(e){return this===e?this:new et(()=>Math.max(this.x,e.x),()=>Math.max(this.y,e.y),()=>Math.min(this.x2,e.x2)-Math.max(this.x,e.x),()=>Math.min(this.y2,e.y2)-Math.max(this.y,e.y))}isDefined(){return this.width>=0&&this.height>=0}flatten(){return new et(ht(this.x),ht(this.y),ht(this.width),ht(this.height))}containsPoint(e,n){return e>=this.x&&e<this.x2&&n>=this.y&&n<this.y2}normalizePoint(e,n){return{x:(e-this.x)/this.width,y:(n-this.y)/this.height}}}class Za extends lt{constructor(e,n,r,i){super(e,n,r,i);this.spec=e,"spacing"in this.spec||(this.spec.spacing=10),this.mainDimension=Ja(e)?"width":"height",this.secondaryDimension=this.mainDimension=="width"?"height":"width";const s=Ja(e)?e.hconcat:ph(e)?e.vconcat:e.concat;this.children=s.map((o,a)=>n.createView(o,this,"concat"+a))}getEffectivePadding(){return this._cache("size/effectivePadding",()=>{const e=this.children.filter(s=>s.isVisible());if(!e.length)return this.getPadding();const n=e.map(s=>s.getEffectivePadding()).map(s=>this.mainDimension=="height"?[s.left,s.right]:[s.top,s.bottom]),r=hh(n),i=this.mainDimension=="height"?new ze(e[0].getEffectivePadding().top,r[1],Re(e).getEffectivePadding().bottom,r[0]):new ze(r[0],e[0].getEffectivePadding().left,r[1],Re(e).getEffectivePadding().right);return this.getPadding().add(i)})}getSize(){return this._cache("size",()=>{let e;if(this.spec[this.mainDimension])e=Ha(this.spec[this.mainDimension]);else{const r=this.children.filter(i=>i.isVisible()).map(i=>i.getSize()[this.mainDimension]);e={grow:r.map(i=>+i.grow).reduce((i,s)=>i+s,0),px:Ww(r,{spacing:this.spec.spacing})}}const n=this.spec[this.secondaryDimension]&&Ha(this.spec[this.secondaryDimension])||{grow:1};return(this.mainDimension=="height"?new Tt(n,e):new Tt(e,n)).addPadding(this.getPadding())})}render(e,n,r={}){if(!this.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this.children.filter(c=>c.isVisible()),s=i.map(c=>c.getSize()[this.mainDimension]),o=Yw(s,n[this.mainDimension],{spacing:this.spec.spacing,devicePixelRatio:this.context.glHelper.dpr}),a=i.map(c=>c.getEffectivePadding()).map(c=>this.mainDimension=="height"?[c.left,c.right]:[c.top,c.bottom]),u=hh(a);for(let c=0;c<i.length;c++){const l=i[c],f=o[c],h=u[0]-a[c][0],p=u[1]-a[c][1],d=n[this.secondaryDimension]-h-p,g=this.mainDimension=="height"?new et(()=>n.x+h,()=>n.y+f.location,()=>d,()=>f.size):new et(()=>n.x+f.location,()=>n.y+h,()=>f.size,()=>d);l.render(e,g,r)}e.popView(this)}*[Symbol.iterator](){for(const e of this.children)yield e}replaceChild(e,n){const r=this.children.indexOf(e);if(r>=0)this.children[r]=n;else throw new Error("Not my child view!")}addChildBySpec(e){const n=this.children.length,r=this.context.createView(e,this,"concat"+n);return this.children.push(r),r}addChild(e){const n=this.children.length;return e.name||(e.name="concat"+n),e.parent=this,this.children.push(e),e}getDefaultResolution(e,n){return"independent"}}function hh(t){return[0,1].map(e=>t.map(n=>n[e]).reduce((n,r)=>Math.max(n,r),0))}class Rv{constructor(){this.types=[];const e=n=>(r,i,s,o)=>{var a;return new n(r,i,s,(a=r.name)!=null?a:o)};this.addViewType(Nv,e(lh)),this.addViewType(qa,e(Xa)),this.addViewType(Ka,e(tt)),this.addViewType(ph,e(Za)),this.addViewType(Ja,e(Za)),this.addViewType(kv,e(Za))}addViewType(e,n){this.types.push({specGuard:e,factory:n})}createView(e,n,r,i){const s=this.types.find(o=>o.specGuard(e));if(s)return s.factory(e,n,r,i!=null?i:"unnamed");throw new Error("Invalid spec, cannot figure out the view type from the properties: "+JSON.stringify([...Object.keys(e)]))}isViewSpec(e){const n=this.types.filter(r=>r.specGuard(e));if(n.length>1)throw new Error("Ambiguous spec. Cannot create a view!");return n.length==1}}function Ka(t){return"mark"in t&&(q(t.mark)||Te(t.mark))}function qa(t){return"layer"in t&&Te(t.layer)}function dh(t){return t&&(Ka(t)||qa(t))&&"aggregateSamples"in t}function Nv(t){return"import"in t}function ph(t){return"vconcat"in t&&Be(t.vconcat)}function Ja(t){return"hconcat"in t&&Be(t.hconcat)}function kv(t){return"concat"in t&&Be(t.concat)}const Ov={point:Tw,rect:Cw,rule:Rw,link:zw,text:jw};class tt extends lt{constructor(e,n,r,i){super(e,n,r,i);this.spec=e;const s=Ov[this.getMarkType()];if(s)this.mark=new s(this);else throw new Error(`No such mark: ${this.getMarkType()}`);this.sampleAggregateViews=[],this._initializeAggregateViews(),this.coords=void 0}*[Symbol.iterator](){for(const e of this.sampleAggregateViews)yield e}replaceChild(e,n){const r=this.sampleAggregateViews.indexOf(e);if(r>=0)this.sampleAggregateViews[r]=n;else throw new Error("Not my child view!")}render(e,n,r={}){!this.isVisible()||(n=n.shrink(this.getPadding()),this.coords=n,e.pushView(this,n),e.renderMark(this.mark,r),e.popView(this))}getMarkType(){return typeof this.spec.mark=="object"?this.spec.mark.type:this.spec.mark}resolve(e){var r;const n=this.mark.encoding;for(const[i,s]of Object.entries(n)){if(!at(s))continue;let o=Xt((r=s.resolutionChannel)!=null?r:i);if(e=="axis"&&!Pi(o))continue;let a=this;for(;a.parent instanceof lt&&["shared","excluded"].includes(a.parent.getConfiguredOrDefaultResolution(o,e))&&a.getConfiguredOrDefaultResolution(o,e)!="excluded";)a=a.parent;a.resolutions[e][o]||(a.resolutions[e][o]=e=="scale"?new Fv(o):new Lv(o)),a.resolutions[e][o].pushUnitView(this,i)}}getAccessor(e){return this._cache("accessor/"+e,()=>{const n=this.mark.encoding;if(n&&n[e])return this.context.accessorFactory.createAccessor(n[e])})}getFacetAccessor(e){const n=this.getAccessor("sample");return n||super.getFacetAccessor(this)}getCollector(){return this.context.dataFlow.findCollectorByKey(this)}_validateDomainQuery(e){if(xr(e))throw new Error(`getDomain(${e}), must only be called for primary channels!`);const n=this.mark.encoding[e];if(!at(n))throw new Error("The channel has no scale, cannot get domain!");if(!n.type)throw new Error(`No data type for channel "${e}"!`);return n}getConfiguredDomain(e){var i;const n=this._validateDomainQuery(e),r=n&&n.scale&&n.scale.domain;if(r){const s=this.getScaleResolution((i=n.resolutionChannel)!=null?i:e);return ah(n.type,s.fromComplexInterval(r))}}extractDataDomain(e){const r=this._validateDomainQuery(e).type,i=a=>{let u;const c=this.mark.encoding[a];if(c){const l=this.context.accessorFactory.createAccessor(c);if(l)if(u=ah(r),l.constant)u.extend(l({}));else{const f=this.getCollector();(f==null?void 0:f.completed)&&f.visitData(h=>u.extend(l(h)))}}return u};let s=i(e);const o=na[e];if(o){const a=i(o);a&&s.extendAll(a)}return s}getZoomLevel(){const e=n=>{var r,i;return(i=(r=this.getScaleResolution(n))==null?void 0:r.getZoomLevel())!=null?i:1};return gn.map(e).reduce((n,r)=>n*r,1)}_initializeAggregateViews(){var e,n;if(dh(this.spec))for(const r of this.spec.aggregateSamples){r.transform=[...(e=r.transform)!=null?e:[],{type:"mergeFacets"}],r.encoding=Se(T({},(n=r.encoding)!=null?n:{}),{sample:null});const i=this.context.createView(r,this,"summaryView");i.getFacetFields=s=>{},this.sampleAggregateViews.push(i)}}getDefaultResolution(e,n){return e=="x"?"shared":"independent"}}function zv(t,e,n){return n=(n-t)/(e-t),n=Math.max(0,Math.min(1,n)),n*n*(3-2*n)}class Fn extends _{get identifier(){}handle(e){throw new Error("Source does not handle incoming data!")}async load(){}}function Uv(t){return"dynamicCallbackSource"in t}class gh extends Fn{constructor(e){super();this.callback=e}loadSynchronously(){if(!this.callback)return;const e=this.callback();if(!e||typeof e[Symbol.iterator]!="function")throw new Error("Dynamic data callback didn't return iterable data!");this.reset(),this.beginBatch({type:"file"});let n;for(const r of e)n||(n=typeof r!="object"?i=>({data:i}):i=>i),this._propagate(n(r));this.complete()}async load(){this.loadSynchronously()}}const mh="chromosome_ticks_and_labels",Ah={x:"width",y:"height"};function _a(t){return t=="x"?"y":"x"}const xh=Object.fromEntries(Object.entries({x:["bottom","top"],y:["left","right"]}).map(([t,e])=>e.map(n=>[n,t])).flat(1));function Jt(t){return xh[t]}class yh extends Xa{constructor(e,n,r,i){const s=n=="locus",o=T(T(T({},s?Vv:bh),Hv(n,e)),e);super(s?Qv(o):wh(o),r,i,`axis_${e.orient}`);if(this.axisProps=o,this.axisUpdateRequested=!0,this._addBroadcastHandler("layout",()=>{this.axisUpdateRequested=!0}),this.previousScaleDomain=[],this.axisLength=void 0,this.ticks=[],this.tickSource=new gh(()=>this.ticks),s){const a=Jt(this.axisProps.orient),u=this.getScaleResolution(a).getGenome();this.findChildByName(mh).getDynamicDataSource=()=>new gh(()=>u.chromosomes)}}getOrient(){return this.axisProps.orient}getSize(){const e={px:this.getPerpendicularSize()},n={grow:1};return xh[this.axisProps.orient]=="x"?new Tt(n,e):new Tt(e,n)}getPerpendicularSize(){return $a(this.axisProps)}getDynamicDataSource(){return this.tickSource}_updateAxisData(){const e=Jt(this.axisProps.orient),n=this.getScaleResolution(e).getScale(),r=n.domain();if(Yo(r,this.previousScaleDomain)&&!this.axisUpdateRequested)return;this.previousScaleDomain=r;const i=this.ticks,s=Gv(this.axisProps,n,this.axisLength,i);s!==i&&(this.ticks=s,this.tickSource.loadSynchronously()),this.axisUpdateRequested=!1}onBeforeRender(){super.onBeforeRender(),this._updateAxisData()}render(e,n,r={}){!this.isVisible()||(this.axisLength=n[Ah[Jt(this.getOrient())]],super.render(e,n,r))}isPickingSupported(){return!1}}function $a(t){const e=Jt(t.orient);let n=t.ticks&&t.tickSize||0;return t.labels&&(n+=t.labelPadding,e=="x"?n+=t.labelFontSize:n+=30),t.title&&(n+=t.titlePadding+t.titleFontSize),n=Math.min(t.maxExtent||1/0,Math.max(t.minExtent||0,n)),n}function Gv(t,e,n,r=[]){const i=a=>25+60*zv(100,700,a);let s=me(t.tickCount)?t.tickCount:Math.round(n/i(n));s=K0(e,s,t.tickMinStep);const o=t.values?q0(e,t.values,s):_w(e,s);if(Yo(o,r,a=>a,a=>a.value))return r;{const a=ev(e,s,t.format);return o.map(u=>({value:u,label:a(u)}))}}const bh={values:null,minExtent:20,maxExtent:1/0,offset:0,domain:!0,domainWidth:1,domainColor:"gray",domainDash:null,domainDashOffset:0,domainCap:"square",ticks:!0,tickSize:5,tickWidth:1,tickColor:"gray",tickDash:null,tickDashOffset:0,tickCap:"square",tickCount:null,tickMinStep:null,labels:!0,labelAlign:"center",labelBaseline:"middle",labelPadding:4,labelFontSize:10,labelLimit:180,labelColor:"black",format:null,titleColor:"black",titleFont:"sans-serif",titleFontSize:10,titlePadding:3};function Hv(t,e){var a;const n=e.orient,r=t=="nominal"||t=="ordinal";let i="center",s="middle",o=(a=e.labelAngle)!=null?a:(n=="top"||n=="bottom")&&r?-90:0;switch(n){case"left":i="right";break;case"right":i="left";break;case"top":case"bottom":Math.abs(o)>30?(i=o>0==(n=="bottom")?"left":"right",s="middle"):s=n=="top"?"alphabetic":"top";break}return{labelAlign:i,labelAngle:o,labelBaseline:s}}function wh(t){const e=Se(T({},t),{extent:$a(t)}),n=Jt(e.orient),r=_a(n),i=e.orient=="bottom"||e.orient=="right"?1:-1,s=e.orient=="bottom"||e.orient=="left"?1:0,o=()=>({name:"domain",data:{values:[0]},mark:{type:"rule",clip:!1,strokeDash:e.domainDash,strokeCap:e.domainCap,color:e.domainColor,[r]:s,size:e.domainWidth}}),a=()=>({name:"labels",mark:{type:"text",clip:!1,align:e.labelAlign,angle:e.labelAngle,baseline:e.labelBaseline,[r+"Offset"]:(e.tickSize+e.labelPadding)*i,[r]:s,size:e.labelFontSize,color:e.labelColor,minBufferSize:1500,dynamicData:!0},encoding:{[n]:{field:"value",type:"quantitative"},text:{field:"label",type:"quantitative"}}}),u=()=>({name:"ticks",mark:{type:"rule",clip:!1,strokeDash:e.tickDash,strokeCap:e.tickCap,color:e.tickColor,size:e.tickWidth,minBufferSize:300,dynamicData:!0},encoding:{[r]:{value:s},[r+"2"]:{value:s-e.tickSize/e.extent*(s?1:-1)}}}),c=()=>({name:"title",data:{values:[0]},mark:{type:"text",clip:!1,align:"center",baseline:e.orient=="bottom"?"bottom":"top",angle:[0,90,0,-90][["top","right","bottom","left"].indexOf(e.orient)],text:e.title,color:e.titleColor,[n]:.5,[r]:1-s}}),l=()=>{const h={name:"ticks_and_labels",encoding:{[n]:{field:"value",type:"quantitative"}},layer:[]};return e.ticks&&h.layer.push(u()),e.labels&&h.layer.push(a()),h},f={[Ah[_a(Jt(e.orient))]]:e.extent,data:{dynamicCallbackSource:!0},layer:[]};return e.domain&&f.layer.push(o()),(e.ticks||e.labels)&&f.layer.push(l()),e.title&&f.layer.push(c()),f}const Vv=Se(T({},bh),{chromTicks:!0,chromTickSize:18,chromTickWidth:1,chromTickColor:"#989898",chromTickDash:[4,2],chromTickDashOffset:1,chromLabels:!0,chromLabelFontSize:13,chromLabelFontWeight:"normal",chromLabelFontStyle:"normal",chromLabelColor:"black",chromLabelAlign:"left",chromLabelPadding:7});function Qv(t){const e=Se(T({},t),{extent:$a(t)}),n=Jt(e.orient),r=_a(n),i=e.orient=="bottom"||e.orient=="left"?1:0,s=()=>({name:"chromosome_ticks",mark:{type:"rule",strokeDash:t.chromTickDash,strokeDashOffset:t.chromTickDashOffset,[r]:i,[r+"2"]:i-e.chromTickSize/e.extent*(i?1:-1),color:t.chromTickColor,size:e.chromTickWidth,dynamicData:!0}}),o=()=>{let c;switch(e.orient){case"top":c={y:0,angle:0,paddingX:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"bottom":c={y:1,angle:0,paddingX:4,dy:e.chromLabelPadding+e.chromLabelFontSize*.73,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"left":c={x:1,angle:-90,paddingY:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthBottom:20,viewportEdgeFadeWidthTop:20,viewportEdgeFadeDistanceBottom:-20,viewportEdgeFadeDistanceTop:-10};break;case"right":c={x:0,angle:90,align:"right",paddingY:4,dy:-e.chromLabelPadding};break;default:c={}}return{name:"chromosome_labels",mark:T({type:"text",size:e.chromLabelFontSize,font:e.chromLabelFont,fontWeight:e.chromLabelFontWeight,fontStyle:e.chromLabelFontStyle,color:e.chromLabelColor,align:t.chromLabelAlign,baseline:"alphabetic",clip:!1,dynamicData:!0},c),encoding:{[n+"2"]:{field:"continuousEnd",type:"locus"},text:{field:"name",type:"ordinal"}}}};let a;switch(e.orient){case"bottom":case"top":a={};break;case"left":a={labelAngle:-90,labelAlign:"center",labelPadding:6};break;case"right":a={labelAngle:90,labelAlign:"center",labelPadding:6};break;default:a={}}const u=wh(T(T({},t),a));if(t.chromTicks||t.chromLabels){const c={name:mh,data:{dynamicCallbackSource:!0},encoding:{[n]:{field:"continuousStart",type:"locus",band:0}},layer:[]};if(t.chromTicks&&c.layer.push(s()),t.chromLabels){c.layer.push(o());let l;u.layer.filter(f=>f.name=="ticks_and_labels").forEach(f=>f.layer.filter(h=>h.name=="labels").forEach(h=>{l=h.mark})),l&&(e.orient=="top"||e.orient=="bottom"?(l.viewportEdgeFadeWidthLeft=30,l.viewportEdgeFadeDistanceLeft=40):(l.viewportEdgeFadeWidthBottom=30,l.viewportEdgeFadeDistanceBottom=40))}u.layer.push(c)}return u}const jv={x:["bottom","top"],y:["left","right"]};class Yv extends lt{constructor(e,n){super({},e,n,"decorator");this.child=void 0,this.backgroundView=void 0,this.axisViews={top:void 0,right:void 0,bottom:void 0,left:void 0},["mousedown","wheel"].forEach(r=>this.addInteractionEventListener(r,this.handleMouseEvent.bind(this)))}initialize(){var n;Object.entries(jv).forEach(([r,i])=>this._initializeAxes(r,i)),this._invalidateCacheByPrefix("size/","ancestors");const e=(n=this.child.spec)==null?void 0:n.view;((e==null?void 0:e.fill)||(e==null?void 0:e.stroke))&&(this.backgroundView=new tt(Wv(e),this.context,this,"background"))}getEncoding(e){return Object.values(this.axisViews).find(n=>e===n)||e==this.backgroundView?{}:super.getEncoding()}getFacetAccessor(e){if(e==this.child&&this.parent)return this.parent.getFacetAccessor(this)}*[Symbol.iterator](){yield this.child,this.backgroundView&&(yield this.backgroundView);for(const e of Object.values(this.axisViews))e&&(yield e)}_getAxisExtents(){return this._cache("size/axisExtents",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.getPerpendicularSize());return ze.createFromRecord(e)})}_getAxisOffsets(){return this._cache("size/axisOffsets",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.axisProps.offset);return ze.createFromRecord(e)})}getEffectivePadding(){return this._cache("size/effectivePadding",()=>this.getPadding().add(this._getAxisExtents()))}getSize(){return this._cache("size/size",()=>this.child.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()).addPadding(this.getAxisSizes()):Y0)}getAxisSizes(){return this._cache("size/axisSizes",()=>this._getAxisExtents().add(this._getAxisOffsets()))}render(e,n,r={}){if(!this.isVisible()||!this.child.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this._getAxisExtents(),s=n.shrink(i.add(this._getAxisOffsets()));this._childCoords=s,this.backgroundView&&this.backgroundView.render(e,s,r),this.child.render(e,s,r);const o=this._cache("axisViewEntries",()=>Object.entries(this.axisViews).filter(a=>!!a[1]));for(const[a,u]of o){const c=u.axisProps;let l;a=="bottom"?l=s.translate(0,s.height+c.offset).modify({height:i.bottom}):a=="top"?l=s.translate(0,-i.top-c.offset).modify({height:i.top}):a=="left"?l=s.translate(-i.left-c.offset,0).modify({width:i.left}):a=="right"&&(l=s.translate(s.width+c.offset,0).modify({width:i.right})),u.render(e,l)}e.popView(this)}_getResolutionParticipants(){return[...this.getAncestors(),...NE(this.child)]}_initializeAxes(e,n){const r=this._getResolutionParticipants().map(i=>i.resolutions.axis[e]).filter(i=>i);for(const i of r){const s=i.getAxisProps();if(s&&s.orient){if(!n.includes(s.orient))throw new Error(`Invalid axis orientation for '${e}' channel: ${s.orient}`);if(this.axisViews[s.orient])throw new Error(`The slot for ${s.orient} axis is already reserved!`);this.axisViews[s.orient]=new yh(Se(T({},s),{title:i.getTitle()}),i.scaleResolution.type,this.context,this)}}e:for(const i of r){const s=i.getAxisProps();if(s&&!s.orient){for(const o of n)if(!this.axisViews[o]){s.orient=o,this.axisViews[o]=new yh(Se(T({},s),{title:i.getTitle()}),i.scaleResolution.type,this.context,this);continue e}throw new Error("No room for axes. All slots are already reserved.")}}}handleMouseEvent(e,n){if(!!this.isZoomable()){if(n.type=="wheel"){n.uiEvent.preventDefault();const r=n.uiEvent,i=r.deltaMode?120:1;let{x:s,y:o}=n.point;const a=this.context.getCurrentHover();if(a){const u=e.shrink(this.getEffectivePadding()),c=a.mark.encoders;c.x&&!c.x2&&(s=+c.x(a.datum)*u.width+u.x),c.y&&!c.y2&&(o=(1-+c.y(a.datum))*u.height+u.y)}Math.abs(r.deltaX)<Math.abs(r.deltaY)?this._handleZoom(e,{x:s,y:o,xDelta:0,yDelta:0,zDelta:r.deltaY*i/300}):this._handleZoom(e,{x:s,y:o,xDelta:-r.deltaX*i,yDelta:0,zDelta:0})}else if(n.type=="mousedown"&&n.uiEvent.button===0){const r=n.uiEvent;r.preventDefault();let i=r;const s=a=>{this._handleZoom(e,{x:i.clientX,y:i.clientY,xDelta:a.clientX-i.clientX,yDelta:a.clientY-i.clientY,zDelta:0}),i=a},o=a=>{document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",o)};document.addEventListener("mouseup",o,!1),document.addEventListener("mousemove",s,!1)}}}isZoomable(){return this._cache("zoomable",()=>Object.values(this._getZoomableResolutions()).some(e=>e.size))}_getZoomableResolutions(){return this._cache("zoomableResolutions",()=>{const e={x:new Set,y:new Set};return this.child.visit(n=>{for(const[r,i]of Object.entries(e)){const s=n.getScaleResolution(r);s&&s.isZoomable()&&i.add(s)}}),e})}_handleZoom(e,n){for(const[r,i]of Object.entries(this._getZoomableResolutions())){if(i.size<=0)continue;const s=this._getAxisExtents(),o=e.shrink(s.add(this._getAxisOffsets())),a=o.normalizePoint(n.x,n.y),u=o.normalizePoint(n.x+n.xDelta,n.y+n.yDelta),c={x:u.x-a.x,y:u.y-a.y};for(const l of i)l.zoom(2**n.zDelta,r=="y"?1-a[r]:a[r],r=="x"?c.x:-c.y)}this.context.animator.requestRender()}}function Wv(t){return{configurableVisibility:!1,data:{values:[{}]},mark:Se(T({fill:null,strokeWidth:1},t),{type:"rect",clip:!1,tooltip:null})}}function*eu(t,e=[]){for(const[n,r]of t.entries())if(r instanceof Map)for(const i of eu(r,[...e,n]))yield i;else yield[[...e,n],r]}class vh extends _{constructor(e){super();this.params=e!=null?e:{type:"collect"},this.observers=[],this.facetBatches=void 0,this._init()}_init(){this._data=[],this.facetBatches=new ii([],JSON.stringify),this.facetBatches.set(void 0,this._data)}reset(){super.reset(),this._init()}handle(e){this._data.push(e)}beginBatch(e){Bw(e)&&(this._data=[],this.facetBatches.set(Ze(e.facetId),this._data))}complete(){var i,s;const e=(i=this.params)==null?void 0:i.sort,n=e?au(e.field,e.order):void 0,r=o=>{n&&o.sort(n)};if((s=this.params.groupby)==null?void 0:s.length){if(this.facetBatches.size>1)throw new Error("TODO: Support faceted data!");const o=this.params.groupby.map(u=>G(u)),a=si(this._data,...o);this.facetBatches.clear();for(const[u,c]of eu(a))this.facetBatches.set(u,c)}for(const o of this.facetBatches.values())r(o);if(this.children.length)for(const o of this.facetBatches.values())for(const a of o)this._propagate(a);super.complete();for(const o of this.observers)o(this)}getData(){switch(this._checkStatus(),this.facetBatches.size){case 0:return[];case 1:return[...this.facetBatches.values()][0];default:{const e=this.facetBatches;return{[Symbol.iterator]:function*(){for(const r of e.values())for(let i=0;i<r.length;i++)yield r[i]}}}}}visitData(e){this._checkStatus();for(const n of this.facetBatches.values())for(let r=0;r<n.length;r++)e(n[r])}getItemCount(){let e=0;for(const n of this.facetBatches.values())e+=n.length;return e}_checkStatus(){if(!this.completed)throw new Error("Data propagation is not completed! No data are available.")}}class cs{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,n){let r=this.length++;for(this.ids[r]=e,this.values[r]=n;r>0;){const i=r-1>>1,s=this.values[i];if(n>=s)break;this.ids[r]=this.ids[i],this.values[r]=s,r=i}this.ids[r]=e,this.values[r]=n}pop(){if(this.length===0)return;const e=this.ids[0];if(this.length--,this.length>0){const n=this.ids[0]=this.ids[this.length],r=this.values[0]=this.values[this.length],i=this.length>>1;let s=0;for(;s<i;){let o=(s<<1)+1;const a=o+1;let u=this.ids[o],c=this.values[o];const l=this.values[a];if(a<this.length&&l<c&&(o=a,u=this.ids[a],c=l),c>=r)break;this.ids[s]=u,this.values[s]=c,s=o}this.ids[s]=n,this.values[s]=r}return e}peek(){if(this.length!==0)return this.ids[0]}peekValue(){if(this.length!==0)return this.values[0]}}class Xv extends _{get behavior(){return ft}constructor(e){super();this.params=e,this.startAccessor=G(e.start),this.endAccessor=G(e.end),this.chromAccessor=e.chrom?G(e.chrom):n=>{},this.weightAccessor=e.weight?G(e.weight):n=>1,this.as={coverage:e.as||"coverage",start:e.asStart||e.start,end:e.asEnd||e.end,chrom:e.asChrom||e.chrom},this.createSegment=new Function("start","end","coverage","chrom","return {"+Object.entries(this.as).filter(([n,r])=>r).map(([n,r])=>`${JSON.stringify(r)}: ${n}`).join(", ")+"};"),this.ends=new cs}reset(){super.reset(),this.initialize()}initialize(){const e=this.as.coverage,n=this.as.end,r=this.as.chrom,i=this.startAccessor,s=this.endAccessor,o=this.chromAccessor,a=this.weightAccessor;let u,c,l,f=0,h;const p=this.ends;p.clear();const d=(m,A,b)=>{if(m==A)return;let y=!1;u&&(u[e]===b?(u[n]=A,y=!0):u[e]!=0&&this._propagate(u)),y||(u=this.createSegment(m,A,b,l))},g=()=>{let m;for(;(m=p.peekValue())!==void 0;)d(h,m,f),h=m,f-=p.pop();h=void 0,u&&(this._propagate(u),u=void 0)};this.handle=m=>{const A=i(m);let b;for(;(b=p.peekValue())!==void 0&&b<A;)d(h,b,f),h=b,f-=p.pop();if(r){let v=o(m);v!==c&&(g(),l=v,c=l)}h!==void 0&&d(h,A,f),h=A;const y=a(m);f+=y,p.push(y,s(m))},this.complete=()=>{g(),super.complete()}}}function Zv(t,e,n=0,r=t.length){const i=new cs,s=r-n;let o;for(o=0;o<e&&o<s;o++)i.push(o,t[n+o]);for(;o<s;o++){const c=t[n+o];c>=i.peekValue()&&(i.push(o,c),i.pop())}const a=[];let u;for(;(u=i.pop())!==void 0;)a.push(n+u);return a.reverse()}class Kv{constructor(e,n=-1/0,r=1/0){this.maxSize=e,this.lowerLimit=n,this.upperLimit=r;const i=this.maxSize*2+1;this.lowerLimits=new Float64Array(i),this.upperLimits=new Float64Array(i),this.lowerChildren=new Int32Array(i),this.upperChildren=new Int32Array(i),this.reset()}reset(){this.lowerLimits.fill(0),this.upperLimits.fill(0),this.lowerChildren.fill(0),this.upperChildren.fill(0),this.n=1,this.lowerLimits[0]=this.lowerLimit,this.upperLimits[0]=this.upperLimit}_findSlot(e,n,r=0){if(e>=this.lowerLimits[r]&&n<=this.upperLimits[r]){const i=this.lowerChildren[r];if(i){const s=this._findSlot(e,n,i);return s>=0?s:this._findSlot(e,n,this.upperChildren[r])}else return r}else return-1}reserve(e,n){if(n-e<=0)throw new Error("Cannot reserve an empty or negative-size slot!");if(this.n+1>this.lowerLimits.length)return!1;const r=this._findSlot(e,n);if(r<0)return!1;const i=this.n++,s=this.n++;return this.lowerLimits[i]=this.lowerLimits[r],this.upperLimits[i]=e,this.lowerLimits[s]=n,this.upperLimits[s]=this.upperLimits[r],this.lowerChildren[r]=i,this.upperChildren[r]=s,!0}}class qv extends _{constructor(e,n){super();var i,s;if(this.params=e,this._data=[],this.channel=(i=e.channel)!=null?i:"x",!["x","y"].includes(this.channel))throw new Error("Invalid channel: "+this.channel);this.posAccessor=G(this.params.pos),this.posBisector=ri(this.posAccessor),this.scoreAccessor=G(this.params.score),this.widthAccessor=G(this.params.width),this.laneAccessor=this.params.lane?G(this.params.lane):o=>0,this.padding=(s=this.params.padding)!=null?s:0,this.reservationMaps=new Map,this.resolution=n.getScaleResolution(this.channel);const r=()=>this._filterAndPropagate();this.schedule=()=>n.context.animator.requestTransition(r),this.resolution.addEventListener("domain",o=>this.schedule()),n._addBroadcastHandler("layoutComputed",()=>this.schedule())}complete(){const e=this.posAccessor;this._data.sort((n,r)=>e(n)-e(r)),this._scores=this._data.map(this.scoreAccessor);for(const n of new Set(this._data.map(this.laneAccessor)))this.reservationMaps.set(n,new Kv(200));this.schedule(),super.complete()}_filterAndPropagate(){var o;super.reset();const e=this.resolution.getScale(),n=(o=this.resolution.members[0].view.coords)==null?void 0:o[this.channel=="x"?"width":"height"];if(!n)return;for(const a of this.reservationMaps.values())a.reset();const r=e.domain(),i=70,s=Zv(this._scores,i,this.posBisector.left(this._data,r[0]),this.posBisector.right(this._data,r[1]));for(const a of s){const u=this._data[a],c=e(this.posAccessor(u))*n,l=this.widthAccessor(u)/2+this.padding;this.reservationMaps.get(this.laneAccessor(u)).reserve(c-l,c+l)&&this._propagate(u)}super.complete()}reset(){super.reset(),this._data=[],this.groups=new Map}handle(e){this._data.push(e)}}class Jv extends _{constructor(e){super();this.params=e,this.predicate=void 0}initialize(){this.predicate=ea(this.params.expr,this.getGlobalObject())}handle(e){this.predicate(e)&&this._propagate(e)}}const _v="0".charCodeAt(0);function*$v(t,e=","){const n=e.charCodeAt(0);let r=0;for(let i=0;i<t.length;i++){const s=t.charCodeAt(i);s==n?(yield r,r=0):r=r*10+s-_v}yield r}class eE extends _{get behavior(){return ft}constructor(e){super();var o,a;const n=G((o=e.exons)!=null?o:"exons"),r=G((a=e.start)!=null?a:"start"),[i,s]=e.as||["exonStart","exonEnd"];this.handle=u=>{let c=r(u),l=c,f=!0;const h=n(u);for(const p of $v(h)){if(f)l=c+p;else{c=l+p;const d=Object.assign({},u);d[i]=l,d[s]=c,this._propagate(d)}f=!f}}}}class tE extends _{get behavior(){return ft}constructor(e){super();const n=Ze(e.field).map(s=>G(s)),r=Ze(e.separator),i=Ze(e.as||e.field);if(n.length!==r.length||n.length!==i.length)throw new Error(`Lengths of "separator" (${r.length}), "fields" (${n.length}), and "as" (${i.length}) do not match!`);this.handle=s=>{if(n.some(u=>!u(s)))return;const o=n.map((u,c)=>u(s).split(r[c]));nE(o,s);const a=o[0].length;for(let u=0;u<a;u++){const c=Object.assign({},s);for(let l=0;l<n.length;l++)c[i[l]]=o[l][u];this._propagate(c)}}}}function nE(t,e){const n=t.map(r=>r.length);if(!n.every(r=>r==n[0]))throw new Error("Mismatching number of elements in the fields to be split: "+JSON.stringify(e))}class rE extends _{get behavior(){return It}constructor(e){super();this.params=e,this.as=e.as,this.fn=void 0}initialize(){this.fn=ea(this.params.expr,this.getGlobalObject())}handle(e){e[this.as]=this.fn(e),this._propagate(e)}}class Eh extends _{get behavior(){return It}constructor(e,n){super();var d;const r=(d=e.channel)!=null?d:"x";if(!["x","y"].includes(r))throw new Error("Invalid channel: "+r);const i=n.getScaleResolution(r).getGenome();if(!i)throw new Error("LinearizeGenomicCoordinate transform requires a locus scale!");const s=G(e.chrom),o=Ze(e.pos).map(g=>G(g)),a=Ze(e.as);if(o.length!=a.length)throw new Error('The number of "pos" and "as" elements must be equal!');const u=Ze(e.offset);let c;if(u.length==0)c=new Array(o.length).fill(0);else if(u.length==1)c=new Array(o.length).fill(u[0]);else if(u.length==o.length)c=u;else throw new Error(`Invalid "offset" parameter: ${JSON.stringify(e.offset)}!`);const l=new Function("datum","chromOffset","posAccessors",a.map((g,m)=>`datum[${JSON.stringify(g)}] = chromOffset + +posAccessors[${m}](datum) - ${c[m]};`).join(`
217
+ `));let f,h=0;const p=g=>{if(g!==f){if(h=i.cumulativeChromPositions.get(g),h===void 0)throw new Error("Unknown chromosome/contig: "+g);f=g}return h};this.handle=g=>{l(g,p(s(g)),o),this._propagate(g)}}}var Ch={pages:["Lato-Regular.png"],chars:[{id:87,width:53,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:43.491,chnl:15,x:0,y:0,page:0},{id:124,width:17,height:50,xoffset:0,yoffset:-32.193000000000005,xadvance:10.521,chnl:15,x:0,y:42,page:0},{id:40,width:20,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:94,page:0},{id:41,width:19,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:145,page:0},{id:36,width:32,height:49,xoffset:0,yoffset:-34.419000000000004,xadvance:24.360000000000003,chnl:15,x:0,y:196,page:0},{id:125,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:247,page:0},{id:91,width:22,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:297,page:0},{id:93,width:19,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:347,page:0},{id:123,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:397,page:0},{id:106,width:19,height:48,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:0,y:447,page:0},{id:81,width:43,height:47,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:21,y:447,page:0},{id:77,width:45,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:38.997,chnl:15,x:66,y:447,page:0},{id:64,width:43,height:44,xoffset:0,yoffset:-28.539,xadvance:35.133,chnl:15,x:23,y:397,page:0},{id:92,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:68,y:397,page:0},{id:47,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:98,y:397,page:0},{id:109,width:42,height:32,xoffset:0,yoffset:-21.609,xadvance:34.545,chnl:15,x:113,y:447,page:0},{id:119,width:42,height:31,xoffset:0,yoffset:-21.315,xadvance:32.991,chnl:15,x:157,y:447,page:0},{id:42,width:25,height:42,xoffset:0,yoffset:-31.626,xadvance:17.85,chnl:15,x:128,y:397,page:0},{id:37,width:42,height:41,xoffset:0,yoffset:-30.387,xadvance:33.663000000000004,chnl:15,x:155,y:397,page:0},{id:79,width:42,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:199,y:397,page:0},{id:102,width:24,height:41,xoffset:0,yoffset:-30.534000000000002,xadvance:14.721,chnl:15,x:243,y:397,page:0},{id:100,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:269,y:397,page:0},{id:98,width:32,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:302,y:397,page:0},{id:56,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:336,y:397,page:0},{id:38,width:40,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:29.904000000000003,chnl:15,x:370,y:397,page:0},{id:108,width:17,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:9.912,chnl:15,x:412,y:397,page:0},{id:107,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:21.336000000000002,chnl:15,x:431,y:397,page:0},{id:48,width:33,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:464,y:397,page:0},{id:71,width:38,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:30.681,chnl:15,x:21,y:347,page:0},{id:83,width:31,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:22.785,chnl:15,x:61,y:347,page:0},{id:63,width:27,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:18.795,chnl:15,x:94,y:347,page:0},{id:105,width:18,height:41,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:123,y:347,page:0},{id:51,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:143,y:347,page:0},{id:104,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.436,chnl:15,x:177,y:347,page:0},{id:67,width:37,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:28.056,chnl:15,x:210,y:347,page:0},{id:88,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.258000000000003,chnl:15,x:249,y:347,page:0},{id:68,width:40,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:31.941000000000003,chnl:15,x:288,y:347,page:0},{id:70,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:23.751,chnl:15,x:330,y:347,page:0},{id:34,width:23,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:15.561000000000002,chnl:15,x:364,y:347,page:0},{id:72,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:389,y:347,page:0},{id:73,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.760000000000002,chnl:15,x:429,y:347,page:0},{id:74,width:24,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:17.745,chnl:15,x:449,y:347,page:0},{id:75,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.825000000000003,chnl:15,x:24,y:297,page:0},{id:76,width:31,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:21.567,chnl:15,x:475,y:347,page:0},{id:66,width:35,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.153000000000002,chnl:15,x:64,y:297,page:0},{id:78,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:101,y:297,page:0},{id:33,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.298,chnl:15,x:141,y:297,page:0},{id:80,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.221,chnl:15,x:161,y:297,page:0},{id:65,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:197,y:297,page:0},{id:82,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.313000000000002,chnl:15,x:237,y:297,page:0},{id:35,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:275,y:297,page:0},{id:84,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.801000000000002,chnl:15,x:310,y:297,page:0},{id:85,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:30.891000000000002,chnl:15,x:346,y:297,page:0},{id:86,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:385,y:297,page:0},{id:39,width:16,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:8.568000000000001,chnl:15,x:425,y:297,page:0},{id:69,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.255000000000003,chnl:15,x:443,y:297,page:0},{id:89,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.208000000000002,chnl:15,x:23,y:247,page:0},{id:90,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.284000000000002,chnl:15,x:477,y:297,page:0},{id:49,width:31,height:40,xoffset:0,yoffset:-30.156000000000002,xadvance:24.360000000000003,chnl:15,x:61,y:247,page:0},{id:50,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:94,y:247,page:0},{id:57,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:128,y:247,page:0},{id:94,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:162,y:247,page:0},{id:96,width:21,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:16.8,chnl:15,x:196,y:247,page:0},{id:55,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:219,y:247,page:0},{id:54,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:254,y:247,page:0},{id:53,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:289,y:247,page:0},{id:52,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:323,y:247,page:0},{id:103,width:31,height:39,xoffset:0,yoffset:-21.630000000000003,xadvance:21.84,chnl:15,x:358,y:247,page:0},{id:112,width:32,height:39,xoffset:0,yoffset:-21.651,xadvance:23.541,chnl:15,x:391,y:247,page:0},{id:113,width:31,height:39,xoffset:0,yoffset:-21.651,xadvance:23.520000000000003,chnl:15,x:425,y:247,page:0},{id:116,width:25,height:39,xoffset:0,yoffset:-28.182000000000002,xadvance:15.057,chnl:15,x:458,y:247,page:0},{id:121,width:31,height:38,xoffset:0,yoffset:-21.273,xadvance:21.651,chnl:15,x:34,y:196,page:0},{id:59,width:18,height:36,xoffset:0,yoffset:-20.706,xadvance:10.983,chnl:15,x:485,y:247,page:0},{id:43,width:32,height:34,xoffset:0,yoffset:-24.486,xadvance:24.360000000000003,chnl:15,x:67,y:196,page:0},{id:60,width:30,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:101,y:196,page:0},{id:62,width:31,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:133,y:196,page:0},{id:117,width:30,height:32,xoffset:0,yoffset:-21.273,xadvance:23.415000000000003,chnl:15,x:166,y:196,page:0},{id:99,width:29,height:32,xoffset:0,yoffset:-21.609,xadvance:20.055,chnl:15,x:198,y:196,page:0},{id:110,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:23.436,chnl:15,x:229,y:196,page:0},{id:111,width:32,height:32,xoffset:0,yoffset:-21.609,xadvance:23.814,chnl:15,x:262,y:196,page:0},{id:126,width:32,height:26,xoffset:0,yoffset:-16.128,xadvance:24.360000000000003,chnl:15,x:201,y:447,page:0},{id:101,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:22.176000000000002,chnl:15,x:296,y:196,page:0},{id:114,width:25,height:32,xoffset:0,yoffset:-21.651,xadvance:15.288,chnl:15,x:329,y:196,page:0},{id:115,width:27,height:32,xoffset:0,yoffset:-21.609,xadvance:18.186,chnl:15,x:356,y:196,page:0},{id:97,width:28,height:32,xoffset:0,yoffset:-21.651,xadvance:20.874000000000002,chnl:15,x:385,y:196,page:0},{id:118,width:31,height:31,xoffset:0,yoffset:-21.273,xadvance:21.672,chnl:15,x:415,y:196,page:0},{id:61,width:31,height:29,xoffset:0,yoffset:-19.089000000000002,xadvance:24.360000000000003,chnl:15,x:448,y:196,page:0},{id:120,width:30,height:31,xoffset:0,yoffset:-21.273,xadvance:20.916,chnl:15,x:21,y:145,page:0},{id:58,width:18,height:31,xoffset:0,yoffset:-20.706,xadvance:10.5,chnl:15,x:53,y:145,page:0},{id:122,width:28,height:31,xoffset:0,yoffset:-21.273,xadvance:18.984,chnl:15,x:73,y:145,page:0},{id:95,width:28,height:16,xoffset:0,yoffset:0,xadvance:19.278000000000002,chnl:15,x:235,y:447,page:0},{id:45,width:23,height:24,xoffset:0,yoffset:-14.175,xadvance:15.603000000000002,chnl:15,x:481,y:196,page:0},{id:44,width:17,height:21,xoffset:0,yoffset:-4.956,xadvance:9.534,chnl:15,x:103,y:145,page:0},{id:46,width:18,height:15,xoffset:0,yoffset:-4.956,xadvance:9.912,chnl:15,x:0,y:497,page:0},{id:32,width:0,height:0,xoffset:0,yoffset:0,xadvance:10.752,chnl:15,x:20,y:497,page:0}],info:{face:"Lato Regular",size:42,bold:0,italic:0,charset:[" ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"],unicode:1,stretchH:100,smooth:1,aa:1,padding:[0,0,0,0],spacing:[2,2]},common:{lineHeight:50.400000000000006,base:41.454,scaleW:512,scaleH:512,pages:1,packed:0,alphaChnl:0,redChnl:0,greenChnl:0,blueChnl:0},kernings:[]};class iE extends _{get behavior(){return It}constructor(e){super();const n=Ua(Ch),r=G(e.field),i=e.as,s=e.fontSize;this.handle=o=>{const a=r(o);a!==void 0?o[i]=n.measureWidth(a,s):o[i]=0,this._propagate(o)}}}const sE=65536;class oE extends _{get behavior(){return It}constructor(e){super();this.params=e}reset(){this.initialize()}initialize(){const e=this.params,n=e.as||"lane",r=me(e.spacing)?e.spacing:1,i=G(e.start),s=G(e.end);if(!e.preference!=!e.preferredOrder)throw new Error('Must specify both "preference" and "preferredOrder"');if(e.preference){const o=new Float64Array(sE),a=G(e.preference),u=e.preferredOrder;let c=1/0;this.handle=l=>{const f=i(l);f<c&&o.fill(-1/0),c=f;const h=u.indexOf(a(l));let p=-1;if(h>=0&&o[h]<f)p=h;else{const d=i(l);for(p=0;p<o.length&&!(o[p]<d);p++);if(p>=o.length)throw new Error("Out of lanes!")}o[p]=s(l)+r,l[n]=p,this._propagate(l)}}else{const o=new cs,a=new cs;let u=-1/0,c=0;this.handle=l=>{const f=i(l);for(;o.length&&(o.peekValue()<=f||f<u);){const p=o.pop();a.push(p,p)}u=f;let h=a.pop();h===void 0&&(h=c++),l[n]=h,this._propagate(l),o.push(h,s(l)+r)}}}}class aE extends _{get behavior(){return ft}constructor(e){super();if(e.as&&e.as.length!=e.fields.length)throw new Error('"fields" and "as" have unequal lengths!');const n=e.fields.map(i=>G(i)),r=e.as?e.as:n.map(Me);this.handle=i=>{const s={};for(let o=0;o<n.length;o++)s[r[o]]=n[o](i);this._propagate(s)}}}class uE extends _{get behavior(){return It}constructor(e){super();const n=new RegExp(e.regex),r=typeof e.as=="string"?[e.as]:e.as,i=G(e.field);this.handle=s=>{const o=i(s);if(q(o)){const a=o.match(n);if(a){if(a.length-1!=r.length)throw new Error('The number of RegEx groups and the length of "as" do not match!');for(let u=0;u<r.length;u++)s[r[u]]=a[u+1]}else if(e.skipInvalidInput)for(let u=0;u<r.length;u++)s[r[u]]=void 0;else throw new Error(`"${o}" does not match the given regex: ${n.toString()}`)}else if(!e.skipInvalidInput)throw new Error(`Trying to match a non-string field. Encountered type: ${typeof o}, field content: "${o}".`);this._propagate(s)}}}class cE extends _{get behavior(){return ft}constructor(e){super();const n=Ze(e.columnRegex).map(h=>new RegExp(h)),r=Ze(e.asValue);if(n.length!=r.length)throw new Error('Lengths of "columnRegex" and "as" are not equal!');const i=e.skipRegex?new RegExp(e.skipRegex):void 0,s=e.asKey||"sample";let o,a,u;const c=h=>{var m;const p=Object.keys(h),d=new Map;for(const[A,b]of n.entries())for(const y of p){const v=(m=b.exec(y))==null?void 0:m[1];if(v!==void 0){let D=d.get(v);D||(D=[],d.set(v,D)),D[A]=y}}o=[...d.entries()],a=p.filter(A=>!n.some(b=>b.test(A))&&!(i&&i.test(A)));const g=[...a.map(A=>JSON.stringify(A)+": datum["+JSON.stringify(A)+"]"),JSON.stringify(s)+": sampleId",...r.map(A=>JSON.stringify(A)+": null")];u=new Function("datum","sampleId",`return {
218
+ `+g.join(`,
219
+ `)+`
220
+ };`)},l=h=>{o||c(h);for(const[p,d]of o){const g=u(h,p);for(let m=0;m<d.length;m++)g[r[m]]=h[d[m]];this._propagate(g)}},f=h=>{c(h),l(h),this.handle=l};this.handle=f,this.beginBatch=h=>{V0(h)&&(this.handle=f),super.beginBatch(h)}}}class fE extends _{get behavior(){return It}constructor(e){super();this.params=e,this.buffer=[]}reset(){this.buffer=[]}handle(e){this.buffer.push(e)}complete(){var l;const e=this.params,n=e.as||["y0","y1"],r=e.sort?au(e.sort.field,e.sort.order):void 0,i=e.field?G(e.field):f=>1,s=e.groupby.map(f=>G(f)),o=Qg(this.buffer,f=>s.map(h=>h(f)).join()).map(f=>f[1]);let a=f=>!0;if(e.baseField){const f=G(e.baseField);a=h=>f(h)!==null}let u,c;switch(e.offset){case"normalize":u=(f,h)=>f/h,c=(f,h)=>ai(f,h);break;case"center":u=(f,h)=>f-h/2,c=(f,h)=>ai(f,h);break;case"information":{const f=Math.log2((l=e.cardinality)!=null?l:4);u=(h,p)=>h/p,c=(h,p)=>{const d=0,g=ai(h,y=>+!a(y)),m=ai(h,p),A=m-g;let b=0;for(let y=0;y<h.length;y++){const v=h[y];if(a(v)){const D=p(v)/A;b-=D*Math.log2(D)}}return A/(f-(b+d))*(A/m)}}break;default:u=(f,h)=>f,c=(f,h)=>1}for(const f of o){r&&f.sort(r);const h=c(f,i);let p=0;for(const d of f){const g=p+i(d);a(d)&&(d[n[0]]=u(p,h),d[n[1]]=u(g,h),this._propagate(d),p=g)}}super.complete()}}class lE extends _{get behavior(){return ft}constructor(e){super();var s,o;const n=G((s=e.field)!=null?s:"sequence"),[r,i]=(o=e.as)!=null?o:["pos","sequence"];this.handle=a=>{const u=Object.assign({},a,{[i]:"",[r]:0}),c=n(a);for(let l=0;l<c.length;l++){const f=Object.assign({},u);f[r]=l,f[i]=c.charAt(l),this._propagate(f)}}}}class hE extends _{get behavior(){return ft}constructor(e){super();this.params=e,this.buffer=[]}reset(){this.buffer=[]}handle(e){this.buffer.push(e)}complete(){const n=this.params.groupby,r=n.map(s=>G(s)),i=si(this.buffer,...r);for(const[s,o]of eu(i)){const a={count:o.length};for(let u=0;u<n.length;u++)a[n[u]]=s[u];this._propagate(a)}super.complete()}}const dE="_uniqueId",Dh=1e4,Sh=[null];class Mh extends _{get behavior(){return It}constructor(e){super();var n;this.params=e,this.as=(n=e.as)!=null?n:dE,this._blocks=[],this._usedBlocks=0,this._id=-1}initialize(){}reset(){super.reset(),this._usedBlocks=0,this._id=-1}handle(e){e[this.as]=this._nextId(),this._propagate(e)}_nextId(){return++this._id%Dh==0&&(this._id=this._getBlock()*Dh),this._id}_getBlock(){return this._usedBlocks<this._blocks.length?this._blocks[this._usedBlocks++]:this._reserveBlock()}_reserveBlock(){const e=Sh.length;return Sh[e]=this,this._blocks.push(e),this._usedBlocks++,e}}const pE={aggregate:hE,collect:vh,coverage:Xv,filterScoredLabels:qv,filter:Jv,flattenCompressedExons:eE,flattenDelimited:tE,flattenSequence:lE,formula:rE,identifier:Mh,linearizeGenomicCoordinate:Eh,measureText:iE,pileup:oE,project:aE,regexExtract:uE,regexFold:cE,sample:Q0,stack:fE};function gE(t,e){const n=pE[t.type];if(n)return new n(t,e);throw new Error("Unknown transform: "+t.type)}function Bh(t){const e=T({},t.format);if(e.type=e.type||mE(t.url),e.parse=e.parse||"auto",!e.type)throw new Error("Format for the data source was not defined and it could not be inferred: "+JSON.stringify(t));return e}function mE(t){var e;if(t)return(e=t.match(/\.(csv|tsv|json)/))==null?void 0:e[1]}function AE(t){return"values"in t}class xE extends Fn{constructor(e){super();var n;if(this.params=e,typeof e.values=="string"&&!((n=e==null?void 0:e.format)==null?void 0:n.type))throw new Error("Data format type (csv, dsv, ...) must be specified if a string is provided!")}loadSynchronously(){const e=this.params.values;let n=[],r=i=>i;if(Array.isArray(e))e.length>0&&(n=e,typeof e[0]!="object"&&(r=i=>({data:i})));else if(typeof e=="object")n=[e];else if(typeof e=="string")n=tc(e,Bh(this.params));else throw new Error('"values" in data configuration is not an array, object, or a string!');this.reset(),this.beginBatch({type:"file"});for(const i of n)this._propagate(r(i));this.complete()}async load(){this.loadSynchronously()}}function yE(t){return"url"in t}class bE extends Fn{constructor(e,n){super();this.params=e,this.baseUrl=n}get identifier(){return JSON.stringify({params:this.params,baseUrl:this.baseUrl})}async load(){const e=this.params.url,n=Array.isArray(e)?e:[e],r=async s=>ti({baseURL:this.baseUrl}).load(s).catch(o=>{throw new Error(`Cannot fetch: ${this.baseUrl}${s}: ${o.message}`)}),i=(s,o)=>{try{const a=tc(s,Bh(this.params));this.beginBatch({type:"file",url:o});for(const u of a)this._propagate(u)}catch(a){throw new Error(`Cannot parse: ${o}: ${a.message}`)}};this.reset(),await Promise.all(n.map(s=>r(s).then(i))),this.complete()}}function wE(t){return"sequence"in t}class vE extends Fn{constructor(e){super();if(this.sequence=e.sequence,!("start"in this.sequence))throw new Error("'start' is missing from sequence parameters!");if(!("stop"in this.sequence))throw new Error("'stop' is missing from sequence parameters!")}loadSynchronously(){const e=this.sequence.as||"data",n=this.sequence.step||1,r=this.sequence.stop;this.reset(),this.beginBatch({type:"file"});for(let i=this.sequence.start;i<r;i+=n)this._propagate({[e]:i});this.complete()}async load(){this.loadSynchronously()}}function EE(t){return"dynamicSource"in t}class CE extends Fn{publishData(e){this.reset(),this.beginBatch({type:"file"});let n;for(const r of e)n||(n=typeof r!="object"?i=>({data:i}):i=>i),this._propagate(n(r));this.complete()}async load(){}}function DE(t,e){if(AE(t))return new xE(t);if(yE(t))return new bE(t,e);if(wE(t))return new vE(t);if(EE(t))return new CE;throw new Error("Cannot figure out the data source type: "+JSON.stringify(t))}function SE(t){const e=Object.keys(t),n=new Function("source","return { "+e.map(r=>JSON.stringify(r)).map(r=>`${r}: source[${r}]`).join(`,
221
+ `)+" };");return n.properties=e,n}class Fh extends _{get behavior(){return ft}constructor(){super();const e=n=>{const r=SE(n);this.handle=i=>this._propagate(r(i)),this.handle(n)};this.handle=e,this.beginBatch=n=>{V0(n)&&(this.handle=e),super.beginBatch(n)}}}class Ih{constructor(){this._dataSourcesByHost=new Map,this._collectorsByHost=new Map,this._observers=new Map}get dataSources(){return[...new Set(this._dataSourcesByHost.values()).values()]}get collectors(){return[...this._collectorsByHost.values()]}addObserver(e,n){let r=this._observers.get(n);r||(r=[],this._observers.set(n,r)),r.push(e)}_relayObserverCallback(e,n){const r=this._observers.get(n);if(r)for(const i of r)i(e)}addDataSource(e,n){this._dataSourcesByHost.set(n,e)}findDataSourceByKey(e){return this._dataSourcesByHost.get(e)}addCollector(e,n){this._collectorsByHost.set(n,e),e.observers.push(r=>this._relayObserverCallback(r,n))}findCollectorByKey(e){return this._collectorsByHost.get(e)}initialize(){for(const e of this.dataSources)e.visit(n=>n.initialize())}}function ME(t){return"name"in t}class BE extends Fn{constructor(e,n){super();this.getNamedData=n,this.params=e}get identifier(){return this.params.name}_getValues(){const e=this.getNamedData(this.params.name);if(e)return e;throw new Error("Cannot find named data: "+this.params.name)}loadSynchronously(){const e=this._getValues();let n=r=>r;if(Array.isArray(e))e.length>0&&typeof e[0]!="object"&&(n=r=>({data:r}));else throw new Error(`Named data "${this.params.name}" is not an array!`);this.reset(),this.beginBatch({type:"file"});for(const r of e)this._propagate(n(r));this.complete()}async load(){this.loadSynchronously()}}function FE(t,e){const n=[];let r;const i=e!=null?e:new Ih,s=[];function o(l,f=()=>{}){if(!r)throw f()||new Error("Cannot append data flow node, no parent exist!");return r.addChild(l),r=l,l}function a(l,f){return o(l,()=>new Error(`Cannot append a transform because no (inherited) data are available! ${f?JSON.stringify(f):""}`))}function u(l,f){for(const h of l){let p;try{p=gE(h,f)}catch(d){throw console.warn(d),new Error(`Cannot initialize "${h.type}" transform: ${d}`)}p.behavior&It&&a(new Fh),a(p)}}const c=l=>{if(n.push(r),l.spec.data){const f=Uv(l.spec.data)?l.getDynamicDataSource():ME(l.spec.data)?new BE(l.spec.data,l.context.getNamedData):DE(l.spec.data,l.getBaseUrl());r=f,i.addDataSource(f,l)}if(l.spec.transform&&u(l.spec.transform,l),l instanceof tt){if(!r)throw new Error("A unit view has no (inherited) data source");const f=IE(l);if(f){s.push(f.rewrite);for(const p of f.transforms)a(p)}l.mark.isPickingParticipant()&&a(new Mh({type:"identifier"}));const h=new vh({type:"collect",groupby:l.getFacetFields(),sort:TE(l,f==null?void 0:f.rewrittenEncoding)});o(h),i.addCollector(h,l)}dh(l.spec)};return c.postOrder=l=>{r=n.pop()},t.visit(c),s.forEach(l=>l()),i}function IE(t){var s,o,a,u;const e=[],n={},r=[];for(const[c,l]of Object.entries(t.getEncoding())){const f=c;Pi(f)&&rl(l)&&r.push({channel:f,chromPosDef:l})}const i=si(r,c=>Xt(c.channel),c=>c.chromPosDef.chrom);for(const[c,l]of i.entries())for(const[f,h]of l.entries()){const p=[],d=[],g=[];for(const{channel:m,chromPosDef:A}of h){const b=D=>D.replace(/[^A-Za-z0-9_]/g,""),y=["_linearized_",b(A.chrom),"_",b(A.pos)].join(""),v=Se(T({},(a=(o=(s=t.spec.encoding)==null?void 0:s[m])!=null?o:t.getEncoding()[m])!=null?a:{}),{field:y});delete v.chrom,delete v.pos,!v.type&&A.type&&(v.type=A.type),n[m]=v,p.push(A.pos),g.push((u=A.offset)!=null?u:0),d.push(y)}e.push(new Eh({type:"linearizeGenomicCoordinate",channel:c,chrom:f,pos:p,offset:g,as:d},t))}return e.length?{transforms:e,rewrittenEncoding:n,rewrite:()=>{t.spec.encoding=T(T({},t.spec.encoding),n),R0(t.mark,"encoding")}}:void 0}function TE(t,e){var r;const n=T(T({},t.getEncoding()),e).x;if(at(n)&&((r=t.getScaleResolution("x"))==null?void 0:r.isZoomable())){if(Ar(n))return{field:n.field};if(!Ii(n))throw new Error("A zoomable x channel must be mapped to a field.")}}function Th(t,e=void 0){if(t.parent!==e)return!1;for(const n of t.children)if(!Th(n,t))return!1;return!0}function tu(t,e=!1){if(t instanceof Fh)if(e)e=!1;else{const n=t.children[0];t.excise(),n&&tu(n,e);return}t.behavior&ft&&(e=!1);for(let n=0,r=t.children.length;n<r;n++)tu(t.children[n],e||n<r-1)}function PE(t){const e=[...t._dataSourcesByHost.entries()],n=new Map;for(const r of e){const i=r[1];i.identifier&&!n.has(i.identifier)&&n.set(i.identifier,i)}t._dataSourcesByHost.clear();for(let[r,i]of e){const s=n.get(i.identifier);s&&(s.adoptChildrenOf(i),i=s),t.addDataSource(i,r)}}function LE(t){if(tu(t),!Th(t))throw new Error("Encountered a bug! There's a problem in the data flow structure.")}function RE(t){for(const e of t.dataSources)LE(e);PE(t)}function NE(t){const e=[];return t.visit(n=>{e.push(n)}),e}function kE(t){t.visit(n=>{n instanceof tt&&n.resolve("scale")});const e=new Set;t.visit(n=>{for(const r of Object.values(n.resolutions.scale)){const i=r.name;if(i&&e.has(i))throw new Error(`The same scale name "${i}" occurs in multiple scale resolutions!`);e.add(i)}}),t.visit(n=>{n instanceof tt&&n.resolve("axis")}),t.visit(n=>n.onScalesResolved())}function OE(t){for(const e of gn){const n=t.getScaleResolution(e);n&&!n.name&&n.isZoomable()&&(n.name=`${e}_at_root`)}}function zE(t){let e=t;const n=r=>r&&!Wt(r);return t.visit(r=>{if(r instanceof Xa||r instanceof tt){const i=r.getEncoding();if(r instanceof tt&&!n(i.x)&&!n(i.y))return as;const s=r.parent,o=new Yv(r.context,s);if(r.parent=o,o.child=r,o.name=r.name+"_decorator",s)if(s instanceof lt)s.replaceChild(r,o);else{let a;if(t.visit(GE((u,c)=>{if(u===r)return a=Re(c),Nr})),a instanceof lt)a.replaceChild(r,o);else throw new Error("Cannot find parent while decorating: "+r.getPathString())}return o.resolutions=r.resolutions,r.resolutions={scale:{},axis:{}},o.spec.height=r.spec.height,r.spec.height="container",o.spec.width=r.spec.width,r.spec.width="container",o.spec.padding=r.spec.padding,r.spec.padding=void 0,r===t&&(e=o),o.initialize(),as}}),e}async function UE(t,e,n){var o;if(!t.import.url)throw new Error("Cannot import, not an import spec: "+JSON.stringify(t));const r=ti({baseURL:e}),i=t.import.url,s=JSON.parse(await r.load(i).catch(a=>{throw new Error(`Could not load imported view spec: ${i}
222
+ Reason: ${a.message}`)}));if(n.isViewSpec(s))return s.baseUrl=(o=i.match(/^[^?#]*\//))==null?void 0:o[0],s;throw new Error(`The imported spec "${i}" is not a view spec: ${JSON.stringify(t)}`)}async function Ph(t){const e=[];t.visit(n=>{if(n instanceof lh)return e.push(n),as});for(const n of e){const r=n.context,i=await UE(n.spec,n.getBaseUrl(),r),s=r.createView(i,n.parent,n.name);n.parent.replaceChild(n,s),await Ph(s)}}function GE(t){const e=[],n=r=>t(r,e);return n.beforeChildren=r=>{e.push(r)},n.afterChildren=r=>{e.pop()},n}class nu{constructor(e){this.globalOptions=e}pushView(e,n){}popView(e){}renderMark(e,n){}}class Lh extends nu{constructor(e,n){super(e);this.webGLHelper=n,this.buffer=[],this.coords=void 0,this.views=new Set}pushView(e,n){this.views.add(e),this.coords=n}renderMark(e,n){if(this.globalOptions.picking&&!e.isPickingParticipant())return;const r=e.render(n);r&&this.buffer.push({mark:e,callback:r,coords:this.coords,clipRect:n.clipRect})}renderDeferred(){if(this.batch||this._buildBatch(),this.batch.length==0)return;const e=this.webGLHelper.gl,n=this.globalOptions.picking;e.bindFramebuffer(e.FRAMEBUFFER,n?this.webGLHelper._pickingBufferInfo.framebuffer:null),this.webGLHelper.clearAll();for(const r of this.views)r.onBeforeRender();for(const r of this.batch)r();n&&e.bindFramebuffer(e.FRAMEBUFFER,null)}_buildBatch(){this.batch=[];let e=!0,n=!0;const r=o=>()=>{e&&o()},i=o=>()=>{e&&n&&o()},s=si(this.buffer,o=>o.mark);for(const[o,a]of s.entries()){if(!o.isReady())continue;this.batch.push(()=>{e=o.unitView.getEffectiveOpacity()>0}),this.batch.push(r(()=>o.prepareRender(this.globalOptions)));let u;for(const c of a){const l=c.coords;l.equals(u)||this.batch.push(r(()=>{n=o.setViewport(l,c.clipRect)})),this.batch.push(i(c.callback)),u=c.coords}}}}class HE extends nu{constructor(e){super(e);this.root=void 0,this.stack=[],this.lastAddition=void 0}pushView(e,n){const r=new VE(e,n);this.root?Re(this.stack).addChild(r):this.root=r,this.stack.push(r)}popView(e){this.stack.pop()}getLayout(){return this.root}}class VE{constructor(e,n){this.view=e,this.coords=n,this.children=[]}addChild(e){const n=Re(this.children);n&&e.view===n.view&&e.coords.equals(n.coords)||this.children.push(e)}dispatchInteractionEvent(e){if(this.coords.containsPoint(e.point.x,e.point.y)){if(this.view.handleInteractionEvent(this.coords,e,!0),e.stopped)return;if(this.children.length==0)e.target=this.view;else for(const n of this.children){if(n.dispatchInteractionEvent(e),e.target)break;if(e.stopped)return}this.view.handleInteractionEvent(this.coords,e,!1)}}}class QE extends nu{constructor(...e){super({});this.contexts=e}pushView(e,n){for(const r of this.contexts)r.pushView(e,n)}popView(e){for(const n of this.contexts)n.popView(e)}renderMark(e,n){for(const r of this.contexts)r.renderMark(e,n)}}class jE{constructor(e,n){this.point=e,this.uiEvent=n,this.stopped=!1,this.target=void 0}stopPropagation(){this.stopped=!0}get type(){return this.uiEvent.type}}class YE{constructor(e,n){this.x=e,this.y=n}equals(e){return e?e===this||e.x===this.x&&e.y===this.y:!1}}const WE=t=>new Promise(e=>setTimeout(e,t));function XE(t){const e=t.requestAnimationFrame||window.requestAnimationFrame,n=t.signal,r=()=>new Promise((i,s)=>{if(n==null?void 0:n.aborted)return s("aborted");const o=performance.now(),a=o+(t.duration||1e3),u=typeof t.from=="number"?t.from:0,c=typeof t.to=="number"?t.to:1,l=t.easingFunction||(g=>g),f=g=>(g-o)/(a-o),h=g=>g*(c-u)+u,p=g=>Math.max(0,Math.min(1,g)),d=g=>{(n==null?void 0:n.aborted)?s("aborted"):(t.onUpdate(h(l(p(f(g))))),g<a?e(d):(t.onUpdate(h(l(1))),i()))};e(d)});return t.delay?(n==null?void 0:n.aborted)?Promise.reject("aborted"):WE(t.delay).then(r):r()}class ZE{constructor(e){this._renderCallback=e,this._renderRequested=!1,this._warn=!1,this.transitions=[]}requestTransition(e){this.cancelTransition(e),this.transitions.push(e),this.requestRender()}cancelTransition(e){const n=this.transitions.indexOf(e);n>=0&&this.transitions.splice(n,1)}requestRender(){this._renderRequested?this._warn&&console.warn("Render already requested!"):(this._renderRequested=!0,window.requestAnimationFrame(e=>{this._renderRequested=!1;const n=this.transitions;this.transitions=[];let r;for(;r=n.shift();)r(e);this._renderCallback(e)}))}transition(e){return XE(T({requestAnimationFrame:n=>this.requestTransition(n)},e))}}function Rh(){const t=e=>e;return t.invert=e=>e,t.copy=Rh,t.invertRange=()=>{},t}class KE{constructor(e){this.genomes=new Map,this.genomeSpy=e}async initialize(e){const n=new vv(e);return this.genomes.set(n.name,n),Promise.all([...this.genomes.values()].map(r=>r.load(this.genomeSpy.spec.baseUrl)))}getGenome(e){if(!this.genomes.size)throw new Error("No genomes have been configured!");if(e){const n=this.genomes.get(e);if(!n)throw new Error(`No genome with the name ${e} has been configured!`);return n}else{if(this.genomes.size>1)throw new Error("Cannot pick a default genome! More than one have been configured!");return this.genomes.values().next().value}}}var qE="data:image/png;base64,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";const JE={thin:100,light:300,regular:400,normal:400,medium:500,bold:700,black:900};class _E{constructor(e){this._webGLHelper=e,this.fontRepository="https://raw.githubusercontent.com/etiennepinchon/aframe-fonts/master/fonts/",this._fonts=new ii([],JSON.stringify),this._metadataPromises=new Map,this._fontPromises=new Map,this._promises=[],this._defaultFontEntry={metrics:Ua(Ch),texture:this._createTextureNow(qE)}}async waitUntilReady(){await Promise.all(this._promises)}getFont(e,n="normal",r="regular"){if(q(r)&&(r=JE[r.toLowerCase()],!r))throw new Error("Unknown font weight: "+r);const i={family:e,style:n,weight:r};let s=this._fonts.get(i);return s||(s={metrics:void 0,texture:void 0},this._fonts.set(i,s),this._promises.push(this._loadFontEntry(s,i))),s}async _loadFontEntry(e,n){try{const r=await this._loadMetadata(n.family),i=eC(r,n),s=this.fontRepository+Nh(n.family)+"/"+i.replace(/\.\w+/,""),o=this._createTexture(s+".png"),a=this._loadFont(s+".json");e.texture=await o,e.metrics=await a}catch(r){console.log("Cannot load font. Using default.",r),e.metrics=this._defaultFontEntry.metrics,e.texture=this._defaultFontEntry.texture}}_loadFont(e){let n=this._fontPromises.get(e);return n||(n=fetch(e).then(r=>{if(!r.ok)throw new Error("Could not load font: "+r.status);return r}).then(r=>r.json()).then(r=>Ua(r)),this._fontPromises.set(e,n)),n}_loadMetadata(e){const n=Nh(e);let r=this._metadataPromises.get(n);return r||(r=fetch(this.fontRepository+n+"/METADATA.pb").then(i=>{if(!i.ok)throw new Error("Could not load font metadata: "+i.status);return i}).then(i=>i.text()).then(i=>$E(i)).catch(i=>{console.warn(i)}),this._metadataPromises.set(n,r)),r}getDefaultFont(){return this._defaultFontEntry}_createTexture(e){const n=this._webGLHelper.gl;return new Promise((r,i)=>{Cr(n,{src:e,min:n.LINEAR},(s,o,a)=>{s?i(s):r(o)})})}_createTextureNow(e){const n=this._webGLHelper.gl;let r;const i=new Promise((s,o)=>{r=Cr(n,{src:e,min:n.LINEAR},(a,u,c)=>{a?o(a):s(u)})});return this._promises.push(i),r}}function Nh(t){return t.toLowerCase().replaceAll(/[^\w]/g,"")}function $E(t){const e=t.split(`
223
+ `),n=[];let r;for(const i of e)if(i.startsWith("fonts {")&&(r={name:void 0,style:void 0,weight:void 0,filename:void 0,post_script_name:void 0,full_name:void 0,copyright:void 0}),i.startsWith("}")&&(n.push(r),r=void 0),r){let s=i.match(/^\s*([A-Za-z_]+):[ ]?"(.*)"$/);if(s){const o=s[1];r[o]=s[2]}if(s=i.match(/^\s*([A-Za-z_]+):[ ]?(\d+)$/),s){const o=s[1];r[o]=+s[2]}}return n}function eC(t,e){let n,r=Number.POSITIVE_INFINITY;for(const i of t)if(e.family.localeCompare(i.name,void 0,{sensitivity:"accent"})==0&&e.style==i.style){const s=Math.abs(e.weight-i.weight);s<r&&(r=s,n=i)}return n==null?void 0:n.filename}function tC(t,e){const n=[];let r;for(const i of t.split(`
224
+ `))if(i.startsWith(">"))r={identifier:i.match(/>(\S+)/)[1],sequence:""},n.push(r);else if(r)r.sequence+=i.trim();else throw new Error("Invalid fasta file!");return n}class nC{constructor(e,n){this.animator=e,this.disabled=!!n,this.damping=.015,this.acceleration=.3,this.accelerationThreshold=100,this.lowerLimit=.5,this.loop=!1,this.momentum=0,this.timestamp=0,this.callback=null,this._transitionCallback=this.animate.bind(this),this.clear()}clear(){this.momentum=0,this.timestamp=null,this.loop=null,this.callback=null}cancel(){this.loop&&(this.animator.cancelTransition(this._transitionCallback),this.clear())}setMomentum(e,n){if(this.disabled){n(e);return}e*this.momentum<0?this.momentum=0:Math.abs(e)>this.accelerationThreshold?this.momentum=ad([this.momentum,e],this.acceleration):this.momentum=e,this.callback=n,this.loop||this.animate()}animate(e){this.callback(this.momentum);const n=e-this.timestamp||0;this.timestamp=e;const r=Math.abs(this.momentum);this.momentum=Math.sign(this.momentum)*Math.max(0,r-((r*this.damping)**1.5+.04)*n),Math.abs(this.momentum)>this.lowerLimit?(this.loop=!0,this.animator.requestTransition(this._transitionCallback)):this.clear()}}function rC(t){const e={},n=["string","number","boolean"],r=["wheelDelta","wheelDeltaX","wheelDeltaY"];for(const i in t){const s=i;!r.includes(i)&&n.includes(typeof t[s])&&(e[s]=t[s])}return e}function iC(t,e,n=!0){let r,i=o=>{};return function(...a){return new Promise((u,c)=>{const l=()=>{clearTimeout(r),i=f=>{},u(t(...a))};n&&i("debounced"),clearTimeout(r),i=c,r=setTimeout(l,e)})}}const kh=new Map;async function sC(t,e,n){var s;const r=t.symbol;let i=(s=kh.get(r))!=null?s:await uC(t.symbol);return i?(kh.set(r,i),it`<div class="title"><strong>${i.name}</strong> ${i.description}</div><p class="summary">${i.summary}</p><p class="source">Source: NCBI RefSeq Gene</p>`):null}async function oC(t){console.log("Searching: "+t);const e={mode:"cors"},r=(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=gene&term=${t}[GENE]&sort=relevance&retmode=json`,e).then(i=>i.json())).esearchresult.idlist[0];return r?(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id=${r}&retmode=json`,e).then(o=>o.json())).result[r]:null}const aC=iC(oC,500);function uC(t){return aC(t)}const cC=xe(".4~r"),fC=xe(".4~e");function lC(t){return t===null?it`<span class="na">NA</span>`:q(t)?t.substring(0,30):Number.isInteger(t)?""+t:me(t)?Math.abs(t)>Math.pow(10,8)||Math.abs(t)<Math.pow(10,-8)?fC(t):cC(t):gs(t)?t?"True":"False":"?"+typeof t+" "+t}async function hC(t,e,n){const r=(o,a)=>{var u;for(const[c,l]of Object.entries(e.encoders))if((u=l==null?void 0:l.accessor)==null?void 0:u.fields.includes(o))switch(c){case"color":case"fill":case"stroke":return it`<span class="color-legend" style="${`background-color: ${l(a)}`}"></span>`}return""},i=it`<table class="attributes">${Object.entries(t).filter(([o,a])=>!o.startsWith("_")).map(([o,a])=>it`<tr><th>${o}</th><td>${lC(a)} ${r(o,t)}</td></tr>`)}</table>`,s=e.unitView.spec.title?it`<div class="title"><strong>${e.unitView.spec.title}</strong></div>`:"";return it`${s}${i}`}O("index",io,["continuous"]),O("locus",nm,["continuous"]),O("null",Rh,[]),ec("fasta",tC);class Oh{constructor(e,n,r={}){var i;this.container=e,this.spec=n,this.accessorFactory=new O1,this.viewFactory=new Rv,this.namedDataProviders=[],this.animator=new ZE(()=>this.renderAll()),this.genomeStore=void 0,this.viewVisibilityPredicate=s=>s.isVisibleInSpec(),this._renderingContext=void 0,this._pickingContext=void 0,this._dirtyPickingBuffer=!1,this._currentHover=void 0,this._wheelInertia=new nC(this.animator),this._keyboardListeners=new Map,this._eventListeners=new Map,this.tooltipHandlers=T({default:hC,refseqgene:sC},(i=r.tooltipHandlers)!=null?i:{}),this.viewRoot=void 0}registerNamedDataProvider(e){this.namedDataProviders.unshift(e)}getNamedData(e){for(const n of this.namedDataProviders){const r=n(e);if(r)return r}}broadcast(e,n){const r={type:e,payload:n};this.viewRoot.visit(i=>i.handleBroadcast(r))}_prepareContainer(){this.container.classList.add("genome-spy"),this.container.classList.add("loading"),this._glHelper=new yw(this.container,()=>{if(this.viewRoot){const e=this.viewRoot.getSize(),n=r=>r.grow>0?void 0:r.px;return{width:n(e.width),height:n(e.height)}}}),this.loadingMessageElement=document.createElement("div"),this.loadingMessageElement.className="loading-message",this.loadingMessageElement.innerHTML='<div class="message">Loading<span class="ellipsis">...</span></div>',this.container.appendChild(this.loadingMessageElement),this.tooltip=new xA(this.container),this.loadingMessageElement.querySelector(".message").addEventListener("transitionend",()=>{this.loadingMessageElement.style.display="none"})}destroy(){this.container.classList.remove("genome-spy"),this.container.classList.remove("loading");for(const[e,n]of this._keyboardListeners)for(const r of n)document.removeEventListener(e,r);for(this._glHelper.finalize();this.container.firstChild;)this.container.firstChild.remove()}async _prepareViewsAndData(){this.spec.genome&&(this.genomeStore=new KE(this),await this.genomeStore.initialize(this.spec.genome));const e=this,n={dataFlow:new Ih,accessorFactory:this.accessorFactory,glHelper:this._glHelper,animator:this.animator,genomeStore:this.genomeStore,fontManager:new _E(this._glHelper),requestLayoutReflow:()=>{},updateTooltip:this.updateTooltip.bind(this),getNamedData:this.getNamedData.bind(this),getCurrentHover:()=>this._currentHover,addKeyboardListener:(a,u)=>{document.addEventListener(a,u);let c=this._keyboardListeners.get(a);c||(c=[],this._keyboardListeners.set(a,c)),c.push(u)},isViewVisible:e.viewVisibilityPredicate,isViewSpec:a=>e.viewFactory.isViewSpec(a),createView:function(a,u,c){return e.viewFactory.createView(a,n,u,c)}},r=this.spec;r.datasets&&this.registerNamedDataProvider(a=>r.datasets[a]),this.viewRoot=n.createView(r,null,"viewRoot"),await Ph(this.viewRoot),kE(this.viewRoot),OE(this.viewRoot),this.viewRoot=zE(this.viewRoot),this._glHelper.invalidateSize();const i=[];this.viewRoot.visit(a=>{a instanceof tt&&i.push(a)});const s=FE(this.viewRoot,n.dataFlow);RE(s),this.broadcast("dataFlowBuilt",s),s.dataSources.forEach(a=>console.log(a.subtreeToString())),i.forEach(a=>a.mark.initializeEncoders());const o=Promise.all(i.map(a=>a.mark.initializeGraphics()));for(const a of i)s.addObserver(u=>{a.mark.initializeData(),a.mark.updateGraphicsData()},a);await n.fontManager.waitUntilReady(),s.initialize(),await Promise.all(s.dataSources.map(a=>a.load())),this.viewRoot.visit(a=>{for(const u of Object.values(a.resolutions.scale))u.reconfigure()}),this.broadcast("dataLoaded"),await o,this.viewRoot.visit(a=>{for(const u of Object.values(a.resolutions.scale))this._glHelper.createRangeTexture(u)});for(const a of i)a.mark.finalizeGraphicsInitialization();n.requestLayoutReflow=this.computeLayout.bind(this),this.viewRoot.visit(a=>is(a,"size")),this._glHelper.invalidateSize()}async launch(){try{return this._prepareContainer(),await this._prepareViewsAndData(),this.registerMouseEvents(),this.computeLayout(),this.animator.requestRender(),this._glHelper.addEventListener("resize",()=>{this.computeLayout(),this.renderAll()}),!0}catch(e){const n=`${e.view?`At "${e.view.getPathString()}": `:""}${e.toString()}`;return console.error(e.stack),dC(this.container,n),!1}finally{this.container.classList.remove("loading"),window.setTimeout(()=>{this.loadingMessageElement.style.display="none"},2e3)}}registerMouseEvents(){const e=this._glHelper.canvas,n=r=>{var i;if(this.layout&&r instanceof MouseEvent){r.type=="mousemove"&&(this.tooltip.handleMouseMove(r),this._tooltipUpdateRequested=!1,r.buttons==0&&this.renderPickingFramebuffer());const s=e.getBoundingClientRect(),o=new YE(r.clientX-s.left-e.clientLeft,r.clientY-s.top-e.clientTop),a=u=>{this.layout.dispatchInteractionEvent(new jE(o,u)),this._tooltipUpdateRequested||this.tooltip.clear()};if(r.type!="wheel"&&this._wheelInertia.cancel(),r.type=="mousemove")this._handlePicking(o.x,o.y);else if(r.type=="mousedown"||r.type=="mouseup")this.renderPickingFramebuffer();else if(r.type=="wheel"){this._tooltipUpdateRequested=!1;const u=r;if(Math.abs(u.deltaX)>Math.abs(u.deltaY))this._currentHover=null,this._wheelInertia.cancel();else{const c=rC(u);this._wheelInertia.setMomentum(u.deltaY*(u.deltaMode?80:1),l=>{const f=new WheelEvent("wheel",Se(T({},c),{deltaMode:0,deltaX:0,deltaY:l}));a(f)}),u.preventDefault();return}}if(r.type=="click"){const u=this._currentHover?{type:r.type,viewPath:[...this._currentHover.mark.unitView.getAncestors()].map(c=>c.name).reverse(),datum:this._currentHover.datum}:{type:r.type,viewPath:null,datum:null};(i=this._eventListeners.get("click"))==null||i.forEach(c=>c(u))}a(r)}};["mousedown","mouseup","wheel","click","mousemove","gesturechange","contextmenu"].forEach(r=>e.addEventListener(r,n)),e.addEventListener("mousedown",()=>{document.addEventListener("mouseup",()=>this.tooltip.popEnabledState(),{once:!0}),this.tooltip.pushEnabledState(!1)}),e.addEventListener("dragstart",r=>r.stopPropagation())}_handlePicking(e,n){var s;const r=this._glHelper.readPickingPixel(e,n),i=r[0]|r[1]<<8|r[2]<<16;if(i==0){this._currentHover=null;return}if(i!==((s=this._currentHover)==null?void 0:s.uniqueId)&&(this._currentHover=null),this._currentHover||this.viewRoot.visit(o=>{if(o instanceof tt){if(o.mark.isPickingParticipant()){const a=o.mark.encoders.uniqueId.accessor;o.getCollector().visitData(u=>{a(u)==i&&(this._currentHover={mark:o.mark,datum:u,uniqueId:i})})}if(this._currentHover)return Nr}}),this._currentHover){const o=this._currentHover.mark;this.updateTooltip(this._currentHover.datum,async a=>{var c;if(!o.isPickingParticipant())return;const u=o.properties.tooltip;if(u!==null){const l=(c=u==null?void 0:u.handler)!=null?c:"default",f=this.tooltipHandlers[l];if(!f)throw new Error("No such tooltip handler: "+l);return f(a,o,u==null?void 0:u.params)}})}}updateTooltip(e,n){if(!this._tooltipUpdateRequested||!e)this.tooltip.updateWithDatum(e,n),this._tooltipUpdateRequested=!0;else throw new Error("Tooltip has already been updated! Duplicate event handler?")}computeLayout(){const e=this.viewRoot;if(!e)return;this.broadcast("layout");const n=this._glHelper.getLogicalCanvasSize();if(isNaN(n.width)||isNaN(n.height)){console.log(`NaN in canvas size: ${n.width}x${n.height}. Skipping computeLayout().`);return}this._renderingContext=new Lh({picking:!1},this._glHelper),this._pickingContext=new Lh({picking:!0},this._glHelper);const r=new HE({});e.render(new QE(this._renderingContext,this._pickingContext,r),et.create(0,0,n.width,n.height)),this.layout=r.getLayout(),this.broadcast("layoutComputed")}renderAll(){var e;(e=this._renderingContext)==null||e.renderDeferred(),this._dirtyPickingBuffer=!0}renderPickingFramebuffer(){!this._dirtyPickingBuffer||(this._pickingContext.renderDeferred(),this._dirtyPickingBuffer=!1)}getSearchableViews(){const e=[];return this.viewRoot.visit(n=>{n instanceof tt&&n.getAccessor("search")&&e.push(n)}),e}getNamedScaleResolutions(){const e=new Map;return this.viewRoot.visit(n=>{for(const r of Object.values(n.resolutions.scale))r.name&&e.set(r.name,r)}),e}}function dC(t,e){const n=document.createElement("div");n.className="message-box";const r=document.createElement("div");r.textContent=e,n.appendChild(r),t.appendChild(n)}var pC="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSI+PHBhdGggZD0iTTQuNyAyMS4ycy40IDIuMyAxLjMgMy42QzcgMjYgOS44IDI4IDkuOCAyOHMzLjQtMi42IDYuNC04LjVjMCAwIDEgLjEgMS45LS40LjktLjYuOC0uNCAxLTEuMiAwIDAgMi45LjUgNi42IDAgMi4xLS4zIDQuMy0xIDYuMi0yLjUgMCAwLTEuMS0xLjctMi41LTUuMS0uNS0xLjMtMi0xLjgtNC42LTQuNmwtOC4yIDguNi0xMS45IDYuOXoiIGZpbGwtb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSIjN2ZiYmRkIi8+PHBhdGggZD0iTTEyLjQgMTUuNWMtLjctLjUtMi40LS44LTQuNC0uNC0yIC40LTQgMS4zLTQuOCAxLjgtLjUuMy0xLjIgMS0xLjIgMS40IDAgLjcuMyAxLjguOCAyLjQuMy4zLjcuNSAxLjQuNi44IDAgMi41LTEuNCAzLjUtMiAxLS42IDEuNi0uOCAyLjctMS4ybC0yLjkgMi40Yy0xLjMgMS4yLTIuMiAxLjUtMi40IDIuMyAwIC41IDAgMS40LjUgMS44LjQuNS42LjggMS42LjguNiAwIDEgMCAyLjYtMS41LjktLjkgMi4zLTMgMi43LTMuNy42LTEuMSAxLTIuMi43LTMtLjItMS0uNC0xLjQtLjgtMS43ek0xNy40IDE0LjJjLS4zLS41LS45LTEuMi0uMi0yLjVsMS45LTNjLjUtLjggMi0yLjMgMi42LTIuNi42LS40IDEuNS0uNiAyLS4yLjYuNCAxIDEgMS4zIDEuNS40LjYuNyAxLjMuMiAyLS43IDEtMS42LjktMi44IDEuNy0xLjIuOC0xLjkgMS4yLTIuNSAxLjlsMy44LTEuOGMxLjMtLjYgMi43LTEuMSAzLjQtLjcuOC41LjguNyAxIDEuNC4zIDEtLjIgMS45LS44IDIuNC0uNS42LTEuNS45LTIuNiAxLjItMS40LjQtNC41IDEtNS44LjUtMS4zLS41LTEuMy0xLjQtMS41LTEuOHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iLjUiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0iIzdmYmJkZCIvPjxwYXRoIGQ9Ik0xMy44IDE1LjNjLjkuOC42IDIgMS40IDEuOCAxLS4yIDEuNC0uOCAxLjMtMS41IDAtLjcgMC0uOC0uNC0xLjYtLjMtLjctMS0xLjEtMi0uNS0uNy41LTEuNCAxLjMtMS40IDEuM3MuMi0uMyAxLjEuNXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9Ii41Ii8+PC9zdmc+";async function gC(t,e,n={}){let r;if(q(t)){if(r=document.querySelector(t),!r)throw new Error(`No such element: ${t}`)}else if(t instanceof HTMLElement)r=t;else throw new Error(`Invalid element: ${t}`);let i;try{const s=Te(e)?e:await zh(e);if(s.baseUrl=s.baseUrl||"","width"in s||(s.width="container"),"padding"in s||(s.padding=10),r==document.body){const o=document.createElement("div");o.style.position="fixed",o.style.inset="0",o.style.overflow="hidden",r.appendChild(o),r=o}i=new Oh(r,s,n),mC(i,n),await i.launch()}catch(s){r.innerText=s.toString(),console.error(s)}return{finalize(){for(i.destroy();r.firstChild;)r.firstChild.remove()},addEventListener(s,o){const a=i._eventListeners;let u=a.get(s);u||(u=new Set,a.set(s,u)),u.add(o)},removeEventListener(s,o){var u;(u=i._eventListeners.get(s))==null||u.delete(o)},getScaleResolutionByName(s){return i.getNamedScaleResolutions().get(s)}}}function mC(t,e){e.namedDataProvider&&t.registerNamedDataProvider(e.namedDataProvider),e.beforeLaunchCallback&&e.beforeLaunchCallback(t)}async function zh(t){let e;try{e=JSON.parse(await ti().load(t))}catch(n){throw new Error(`Could not load or parse configuration: ${t}, reason: ${n.message}`)}if(!e.baseUrl){const n=t.match(/^[^?#]*\//);e.baseUrl=n&&n[0]||"./"}return e}Z.GenomeSpy=Oh,Z.embed=gC,Z.html=it,Z.icon=pC,Z.loadSpec=zh,Object.defineProperty(Z,"__esModule",{value:!0}),Z[Symbol.toStringTag]="Module"});