diff --git a/dist/pixi-spine-pixi.mjs b/dist/pixi-spine-pixi.mjs new file mode 100644 index 0000000..90a6221 --- /dev/null +++ b/dist/pixi-spine-pixi.mjs @@ -0,0 +1,35 @@ +/*! + * @pixi/spine-pixi - v2.0.4 + * Compiled Thu, 12 Sep 2024 09:55:11 UTC + * + * @pixi/spine-pixi is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license + * + * Copyright 2024, PixiJS Team, All Rights Reserved + */import{Texture as te,ExtensionType as O,LoaderParserPriority as ne,checkExtension as W,DOMAdapter as re,path as V,TextureSource as se,extensions as Y,Geometry as xe,Buffer as oe,BufferUsage as I,Shader as ve,compileHighShaderGlProgram as ye,colorBitGl as ke,generateTextureBatchBitGl as Se,roundPixelsBitGl as Te,compileHighShaderGpuProgram as De,colorBit as Be,generateTextureBatchBit as Pe,roundPixelsBit as Ae,getBatchSamplersUniformGroup as Me,Batcher as Oe,collectAllRenderables as _e,ViewContainer as Le,Ticker as N,DEG_TO_RAD as je,Container as z,Cache as Q,Assets as ie,Graphics as B,Text as Fe}from"pixi.js";import{Texture as Ue,TextureFilter as T,TextureWrap as J,BlendMode as G,TextureAtlas as Re,SkeletonClipping as ae,RegionAttachment as L,MeshAttachment as X,Vector2 as We,Color as F,Skeleton as le,SkeletonData as de,AnimationState as Xe,AnimationStateData as Ee,Physics as $e,ClippingAttachment as ce,SkeletonBounds as he,AtlasAttachmentLoader as Ve,SkeletonBinary as Ye,SkeletonJson as Ie,PathAttachment as Ne}from"@esotericsoftware/spine-core";export*from"@esotericsoftware/spine-core";if(typeof window!="undefined"&&window.PIXI){const o=window.require;window.require=e=>{if(o)return o(e);if(e.startsWith("@pixi/")||e.startsWith("pixi.js"))return window.PIXI}}var ze=Object.defineProperty,Ge=(o,e,t)=>e in o?ze(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,ue=(o,e,t)=>(Ge(o,typeof e!="symbol"?e+"":e,t),t);const pe=class M extends Ue{constructor(e){super(e.resource),ue(this,"texture"),this.texture=te.from(e)}static from(e){return M.textureMap.has(e)?M.textureMap.get(e):new M(e)}setFilters(e,t){const r=this.texture.source.style;r.minFilter=M.toPixiTextureFilter(e),r.magFilter=M.toPixiTextureFilter(t),this.texture.source.autoGenerateMipmaps=M.toPixiMipMap(e),this.texture.source.updateMipmaps()}setWraps(e,t){const r=this.texture.source.style;r.addressModeU=M.toPixiTextureWrap(e),r.addressModeV=M.toPixiTextureWrap(t)}dispose(){this.texture.destroy()}static toPixiMipMap(e){switch(e){case T.Nearest:case T.Linear:return!1;case T.MipMapNearestLinear:case T.MipMapNearestNearest:case T.MipMapLinearLinear:case T.MipMapLinearNearest:return!0;default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiTextureFilter(e){switch(e){case T.Nearest:case T.MipMapNearestLinear:case T.MipMapNearestNearest:return"nearest";case T.Linear:case T.MipMapLinearLinear:case T.MipMapLinearNearest:return"linear";default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiTextureWrap(e){switch(e){case J.ClampToEdge:return"clamp-to-edge";case J.MirroredRepeat:return"mirror-repeat";case J.Repeat:return"repeat";default:throw new Error(`Unknown texture wrap: ${String(e)}`)}}static toPixiBlending(e){switch(e){case G.Normal:return"normal";case G.Additive:return"add";case G.Multiply:return"multiply";case G.Screen:return"screen";default:throw new Error(`Unknown blendMode: ${String(e)}`)}}};ue(pe,"textureMap",new Map);let K=pe;var He=Object.defineProperty,qe=Object.defineProperties,Qe=Object.getOwnPropertyDescriptors,ge=Object.getOwnPropertySymbols,Je=Object.prototype.hasOwnProperty,Ke=Object.prototype.propertyIsEnumerable,be=(o,e,t)=>e in o?He(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,Ze=(o,e)=>{for(var t in e||(e={}))Je.call(e,t)&&be(o,t,e[t]);if(ge)for(var t of ge(e))Ke.call(e,t)&&be(o,t,e[t]);return o},et=(o,e)=>qe(o,Qe(e));const tt={extension:O.Asset,loader:{extension:{type:O.LoadParser,priority:ne.Normal,name:"spineTextureAtlasLoader"},test(o){return W(o,".atlas")},async load(o){return await(await re.get().fetch(o)).text()},testParse(o,e){const t=W(e.src,".atlas"),r=typeof o=="string";return Promise.resolve(t&&r)},unload(o){o.dispose()},async parse(o,e,t){const r=e.data||{};let n=V.dirname(e.src);n&&n.lastIndexOf("/")!==n.length-1&&(n+="/");const s=new Re(o);if(r.images instanceof se||typeof r.images=="string"){const i=r.images;r.images={},r.images[s.pages[0].name]=i}const a=[];for(const i of s.pages){const c=i.name,d=r!=null&&r.images?r.images[c]:void 0;if(d instanceof se)i.setTexture(K.from(d));else{const h={src:d!=null?d:V.normalize([...n.split(V.sep),c].join(V.sep)),data:et(Ze({},r.imageMetadata),{alphaMode:i.pma?"premultiplied-alpha":"premultiply-alpha-on-upload"})},l=t.load(h).then(p=>{i.setTexture(K.from(p.source))});a.push(l)}}return await Promise.all(a),s}}};Y.add(tt);function nt(o){return Object.prototype.hasOwnProperty.call(o,"bones")}function rt(o){return o instanceof Uint8Array}const st={extension:O.Asset,loader:{extension:{type:O.LoadParser,priority:ne.Normal,name:"spineSkeletonLoader"},test(o){return W(o,".skel")},async load(o){const e=await re.get().fetch(o);return new Uint8Array(await e.arrayBuffer())},testParse(o,e){const t=W(e.src,".json")&&nt(o),r=W(e.src,".skel")&&rt(o);return Promise.resolve(t||r)}}};Y.add(st);const ot=new Float32Array(1),it=new Uint32Array(1);class at extends xe{constructor(){const e=new oe({data:ot,label:"attribute-batch-buffer",usage:I.VERTEX|I.COPY_DST,shrinkToFit:!1}),t=new oe({data:it,label:"index-batch-buffer",usage:I.INDEX|I.COPY_DST,shrinkToFit:!1}),r=7*4;super({attributes:{aPosition:{buffer:e,format:"float32x2",stride:r,offset:0},aUV:{buffer:e,format:"float32x2",stride:r,offset:2*4},aColor:{buffer:e,format:"unorm8x4",stride:r,offset:4*4},aDarkColor:{buffer:e,format:"unorm8x4",stride:r,offset:5*4},aTextureIdAndRound:{buffer:e,format:"uint16x2",stride:r,offset:6*4}},indexBuffer:t})}}const lt={name:"color-bit",vertex:{header:` + @in aDarkColor: vec4; + @out vDarkColor: vec4; + `,main:` + vDarkColor = aDarkColor; + `},fragment:{header:` + @in vDarkColor: vec4; + `,end:` + + let alpha = outColor.a * vColor.a; + let rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb; + + finalColor = vec4(rgb, alpha); + + `}},dt={name:"color-bit",vertex:{header:` + in vec4 aDarkColor; + out vec4 vDarkColor; + `,main:` + vDarkColor = aDarkColor; + `},fragment:{header:` + in vec4 vDarkColor; + `,end:` + + finalColor.a = outColor.a * vColor.a; + finalColor.rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb; + `}};class ct extends ve{constructor(e){const t=ye({name:"dark-tint-batch",bits:[ke,dt,Se(e),Te]}),r=De({name:"dark-tint-batch",bits:[Be,lt,Pe(e),Ae]});super({glProgram:t,gpuProgram:r,resources:{batchSamplers:Me(e)}})}}var ht=Object.defineProperty,ut=(o,e,t)=>e in o?ht(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,E=(o,e,t)=>(ut(o,typeof e!="symbol"?e+"":e,t),t);let me=null;const fe=class we extends Oe{constructor(){super(...arguments),E(this,"geometry",new at),E(this,"shader",me||(me=new ct(this.maxTextures))),E(this,"name",we.extension.name),E(this,"vertexSize",7)}packAttributes(e,t,r,n,s){const a=s<<16|e.roundPixels&65535,i=e.transform,c=i.a,d=i.b,h=i.c,l=i.d,p=i.tx,f=i.ty,{positions:g,uvs:u}=e,b=e.color,m=e.darkColor,w=e.attributeOffset,x=w+e.attributeSize;for(let k=w;ke in o?gt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,v=(o,e,t)=>(bt(o,typeof e!="symbol"?e+"":e,t),t);class mt{constructor(){v(this,"indexOffset",0),v(this,"attributeOffset",0),v(this,"indexSize"),v(this,"attributeSize"),v(this,"batcherName","darkTint"),v(this,"packAsQuad",!1),v(this,"renderable"),v(this,"positions"),v(this,"indices"),v(this,"uvs"),v(this,"roundPixels"),v(this,"data"),v(this,"blendMode"),v(this,"darkTint"),v(this,"texture"),v(this,"transform"),v(this,"_textureId"),v(this,"_attributeStart"),v(this,"_indexStart"),v(this,"_batcher"),v(this,"_batch")}get color(){const e=this.data.color,t=this.renderable.groupColor,r=this.renderable.groupAlpha;let n;const s=e.a*r*255;if(t!==16777215){const a=t>>16&255,i=t>>8&255,c=t&255,d=e.r*c,h=e.g*i,l=e.b*a;n=s<<24|l<<16|h<<8|d}else n=s<<24|e.b*255<<16|e.g*255<<8|e.r*255;return n}get darkColor(){const e=this.data.darkColor;return e.a<<24|e.b*255<<16|e.g*255<<8|e.r*255}get groupTransform(){return this.renderable.groupTransform}setData(e,t,r,n,s){if(this.renderable=e,this.transform=e.groupTransform,this.data=t,t.clipped){const a=t.clippedData;this.indexSize=a.indicesCount,this.attributeSize=a.vertexCount,this.positions=a.vertices,this.indices=a.indices,this.uvs=a.uvs}else this.indexSize=t.indices.length,this.attributeSize=t.vertices.length/2,this.positions=t.vertices,this.indices=t.indices,this.uvs=t.uvs;this.texture=r,this.roundPixels=s,this.blendMode=n,this.batcherName=t.darkTint?"darkTint":"default"}}var ft=Object.defineProperty,wt=(o,e,t)=>e in o?ft(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,Z=(o,e,t)=>(wt(o,typeof e!="symbol"?e+"":e,t),t);const Ct=new ae,xt={0:"normal",1:"add",2:"multiply",3:"screen"};class ee{constructor(e){Z(this,"renderer"),Z(this,"gpuSpineData",{}),this.renderer=e}validateRenderable(e){return e._applyState(),e.spineAttachmentsDirty}addRenderable(e,t){var r,n,s,a,i;const c=(r=this.gpuSpineData)[n=e.uid]||(r[n]={slotBatches:{}}),d=this.renderer.renderPipes.batch,h=e.skeleton.drawOrder,l=this.renderer._roundPixels|e._roundPixels;e._applyState();for(let p=0,f=h.length;pe in o?vt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,y=(o,e,t)=>(yt(o,typeof e!="symbol"?e+"":e,t),t);const H=new We,kt=new F,St=new F;le.yDown=!0;const U=new ae;class q extends Le{constructor(e){var t;e instanceof de&&(e={skeletonData:e}),super(),y(this,"batched",!0),y(this,"buildId",0),y(this,"renderPipeId","spine"),y(this,"_didSpineUpdate",!1),y(this,"beforeUpdateWorldTransforms",()=>{}),y(this,"afterUpdateWorldTransforms",()=>{}),y(this,"skeleton"),y(this,"state"),y(this,"skeletonBounds"),y(this,"_debug"),y(this,"_slotsObject",Object.create(null)),y(this,"spineAttachmentsDirty"),y(this,"_lastAttachments"),y(this,"_stateChanged"),y(this,"attachmentCacheData",[]),y(this,"autoUpdateWarned",!1),y(this,"_autoUpdate",!0);const r=e instanceof de?e:e.skeletonData;this.skeleton=new le(r),this.state=new Xe(new Ee(r)),this.autoUpdate=(t=e==null?void 0:e.autoUpdate)!=null?t:!0;const n=this.skeleton.slots;for(let s=0;se in o?Tt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e,t)=>(Dt(o,typeof e!="symbol"?e+"":e,t),t);class Bt{constructor(){C(this,"registeredSpines",new Map),C(this,"drawMeshHull",!0),C(this,"drawMeshTriangles",!0),C(this,"drawBones",!0),C(this,"drawPaths",!0),C(this,"drawBoundingBoxes",!0),C(this,"drawClipping",!0),C(this,"drawRegionAttachments",!0),C(this,"drawEvents",!0),C(this,"lineWidth",1),C(this,"regionAttachmentsColor",30975),C(this,"meshHullColor",30975),C(this,"meshTrianglesColor",16763904),C(this,"clippingPolygonColor",16711935),C(this,"boundingBoxesRectColor",65280),C(this,"boundingBoxesPolygonColor",65280),C(this,"boundingBoxesCircleColor",65280),C(this,"pathsCurveColor",16711680),C(this,"pathsLineColor",16711935),C(this,"skeletonXYColor",16711680),C(this,"bonesColor",61132),C(this,"eventFontSize",24),C(this,"eventFontColor",0)}registerSpine(e){if(this.registeredSpines.has(e)){console.warn("SpineDebugRenderer.registerSpine() - this spine is already registered!",e);return}const t={parentDebugContainer:new z,bones:new z,skeletonXY:new B,regionAttachmentsShape:new B,meshTrianglesLine:new B,meshHullLine:new B,clippingPolygon:new B,boundingBoxesRect:new B,boundingBoxesCircle:new B,boundingBoxesPolygon:new B,pathsCurve:new B,pathsLine:new B,eventText:new z,eventCallback:{event:(r,n)=>{if(this.drawEvents){const s=Math.abs(e.scale.x||e.scale.y||1),a=new Fe({text:n.data.name,style:{fontSize:this.eventFontSize/s,fill:this.eventFontColor,fontFamily:"monospace"}});a.scale.x=Math.sign(e.scale.x),a.anchor.set(.5),t.eventText.addChild(a),setTimeout(()=>{a.destroyed||a.destroy()},250)}}}};t.parentDebugContainer.addChild(t.bones),t.parentDebugContainer.addChild(t.skeletonXY),t.parentDebugContainer.addChild(t.regionAttachmentsShape),t.parentDebugContainer.addChild(t.meshTrianglesLine),t.parentDebugContainer.addChild(t.meshHullLine),t.parentDebugContainer.addChild(t.clippingPolygon),t.parentDebugContainer.addChild(t.boundingBoxesRect),t.parentDebugContainer.addChild(t.boundingBoxesCircle),t.parentDebugContainer.addChild(t.boundingBoxesPolygon),t.parentDebugContainer.addChild(t.pathsCurve),t.parentDebugContainer.addChild(t.pathsLine),t.parentDebugContainer.addChild(t.eventText),t.parentDebugContainer.zIndex=9999999,t.parentDebugContainer.accessibleChildren=!1,t.parentDebugContainer.eventMode="none",t.parentDebugContainer.interactiveChildren=!1,e.addChild(t.parentDebugContainer),e.state.addListener(t.eventCallback),this.registeredSpines.set(e,t)}renderDebug(e){this.registeredSpines.has(e)||this.registerSpine(e);const t=this.registeredSpines.get(e);if(!t)return;e.addChild(t.parentDebugContainer),t.skeletonXY.clear(),t.regionAttachmentsShape.clear(),t.meshTrianglesLine.clear(),t.meshHullLine.clear(),t.clippingPolygon.clear(),t.boundingBoxesRect.clear(),t.boundingBoxesCircle.clear(),t.boundingBoxesPolygon.clear(),t.pathsCurve.clear(),t.pathsLine.clear();for(let s=t.bones.children.length;s>0;s--)t.bones.children[s-1].destroy({children:!0,texture:!0,textureSource:!0});const r=Math.abs(e.scale.x||e.scale.y||1),n=this.lineWidth/r;if(this.drawBones&&this.drawBonesFunc(e,t,n,r),this.drawPaths&&this.drawPathsFunc(e,t,n),this.drawBoundingBoxes&&this.drawBoundingBoxesFunc(e,t,n),this.drawClipping&&this.drawClippingFunc(e,t,n),(this.drawMeshHull||this.drawMeshTriangles)&&this.drawMeshHullAndMeshTriangles(e,t,n),this.drawRegionAttachments&&this.drawRegionAttachmentsFunc(e,t,n),this.drawEvents)for(const s of t.eventText.children)s.alpha-=.05,s.y-=2}drawBonesFunc(e,t,r,n){const s=e.skeleton,a=s.x,i=s.y,c=s.bones;t.skeletonXY.strokeStyle={width:r,color:this.skeletonXYColor};for(let h=0,l=c.length;hb&&ub&&u>m?A=-$:gm?A=$:u===m&&gb?A=-90*R:g===b&&um&&(A=0),_.rotation=A,_.circle(0,S,j*1.2).fill({color:0,alpha:.6}).stroke({width:r,color:this.skeletonXYColor})}const d=r*3;t.skeletonXY.context.moveTo(a-d,i-d).lineTo(a+d,i+d).moveTo(a+d,i-d).lineTo(a-d,i+d).stroke()}drawRegionAttachmentsFunc(e,t,r){const n=e.skeleton.slots;for(let s=0,a=n.length;s0){p=(p>>1)*2;let f=h[p-2],g=h[p-1];for(let u=0,b=p;u{if(d<3)throw new Error("Polygon must contain at least 3 vertices");const h=[],l=r*2;for(let p=0,f=i.length;p\n {\n if (prevRequire) return prevRequire(x);\n else if (x.startsWith('@pixi/') || x.startsWith('pixi.js')) return window.PIXI;\n };\n}\n\nexport { };\n","/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { Texture as PixiTexture } from 'pixi.js';\nimport { BlendMode, Texture, TextureFilter, TextureWrap } from '@esotericsoftware/spine-core';\n\nimport type { BLEND_MODES, SCALE_MODE, TextureSource, WRAP_MODE } from 'pixi.js';\n\nexport class SpineTexture extends Texture\n{\n private static readonly textureMap: Map = new Map();\n\n public static from(texture: TextureSource): SpineTexture\n {\n if (SpineTexture.textureMap.has(texture))\n {\n return SpineTexture.textureMap.get(texture) as SpineTexture;\n }\n\n return new SpineTexture(texture);\n }\n\n public readonly texture: PixiTexture;\n\n private constructor(image: TextureSource)\n {\n // Todo: maybe add error handling if you feed a video texture to spine?\n super(image.resource);\n this.texture = PixiTexture.from(image);\n }\n\n public setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void\n {\n const style = this.texture.source.style;\n\n style.minFilter = SpineTexture.toPixiTextureFilter(minFilter);\n style.magFilter = SpineTexture.toPixiTextureFilter(magFilter);\n this.texture.source.autoGenerateMipmaps = SpineTexture.toPixiMipMap(minFilter);\n this.texture.source.updateMipmaps();\n }\n\n public setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void\n {\n const style = this.texture.source.style;\n\n style.addressModeU = SpineTexture.toPixiTextureWrap(uWrap);\n style.addressModeV = SpineTexture.toPixiTextureWrap(vWrap);\n }\n\n public dispose(): void\n {\n // I am not entirely sure about this...\n this.texture.destroy();\n }\n\n private static toPixiMipMap(filter: TextureFilter): boolean\n {\n switch (filter)\n {\n case TextureFilter.Nearest:\n case TextureFilter.Linear:\n return false;\n\n case TextureFilter.MipMapNearestLinear:\n case TextureFilter.MipMapNearestNearest:\n case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap\n case TextureFilter.MipMapLinearNearest:\n return true;\n\n default:\n throw new Error(`Unknown texture filter: ${String(filter)}`);\n }\n }\n\n private static toPixiTextureFilter(filter: TextureFilter): SCALE_MODE\n {\n switch (filter)\n {\n case TextureFilter.Nearest:\n case TextureFilter.MipMapNearestLinear:\n case TextureFilter.MipMapNearestNearest:\n return 'nearest';\n\n case TextureFilter.Linear:\n case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap\n case TextureFilter.MipMapLinearNearest:\n return 'linear';\n\n default:\n throw new Error(`Unknown texture filter: ${String(filter)}`);\n }\n }\n\n private static toPixiTextureWrap(wrap: TextureWrap): WRAP_MODE\n {\n switch (wrap)\n {\n case TextureWrap.ClampToEdge:\n return 'clamp-to-edge';\n\n case TextureWrap.MirroredRepeat:\n return 'mirror-repeat';\n\n case TextureWrap.Repeat:\n return 'repeat';\n\n default:\n throw new Error(`Unknown texture wrap: ${String(wrap)}`);\n }\n }\n\n public static toPixiBlending(blend: BlendMode): BLEND_MODES\n {\n switch (blend)\n {\n case BlendMode.Normal:\n return 'normal';\n\n case BlendMode.Additive:\n return 'add';\n\n case BlendMode.Multiply:\n return 'multiply';\n\n case BlendMode.Screen:\n return 'screen';\n\n default:\n throw new Error(`Unknown blendMode: ${String(blend)}`);\n }\n }\n}\n","/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n checkExtension,\n DOMAdapter,\n extensions,\n ExtensionType,\n LoaderParserPriority,\n path,\n TextureSource\n} from 'pixi.js';\nimport { SpineTexture } from '../SpineTexture';\nimport { TextureAtlas } from '@esotericsoftware/spine-core';\n\nimport type { AssetExtension, Loader, ResolvedAsset, Texture } from 'pixi.js';\n\ntype RawAtlas = string;\n\nconst spineTextureAtlasLoader: AssetExtension = {\n extension: ExtensionType.Asset,\n\n loader: {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n name: 'spineTextureAtlasLoader',\n },\n\n test(url: string): boolean\n {\n return checkExtension(url, '.atlas');\n },\n\n async load(url: string): Promise\n {\n const response = await DOMAdapter.get().fetch(url);\n\n const txt = await response.text();\n\n return txt;\n },\n\n testParse(asset: unknown, options: ResolvedAsset): Promise\n {\n const isExtensionRight = checkExtension(options.src as string, '.atlas');\n const isString = typeof asset === 'string';\n\n return Promise.resolve(isExtensionRight && isString);\n },\n\n unload(atlas: TextureAtlas)\n {\n atlas.dispose();\n },\n\n async parse(asset: RawAtlas, options: ResolvedAsset, loader: Loader): Promise\n {\n const metadata: ISpineAtlasMetadata = options.data || {};\n let basePath = path.dirname(options.src as string);\n\n if (basePath && basePath.lastIndexOf('/') !== basePath.length - 1)\n {\n basePath += '/';\n }\n\n // Retval is going to be a texture atlas. However we need to wait for it's callback to resolve this promise.\n const retval = new TextureAtlas(asset);\n\n // If the user gave me only one texture, that one is assumed to be the \"first\" texture in the atlas\n if (metadata.images instanceof TextureSource || typeof metadata.images === 'string')\n {\n const pixiTexture = metadata.images;\n\n metadata.images = {} as Record;\n metadata.images[retval.pages[0].name] = pixiTexture;\n }\n\n // we will wait for all promises for the textures at the same time at the end.\n const textureLoadingPromises:Promise[] = [];\n\n // fill the pages\n for (const page of retval.pages)\n {\n const pageName = page.name;\n const providedPage = metadata?.images ? metadata.images[pageName] : undefined;\n\n if (providedPage instanceof TextureSource)\n {\n page.setTexture(SpineTexture.from(providedPage));\n }\n else\n {\n // eslint-disable-next-line max-len\n const url: string = providedPage ?? path.normalize([...basePath.split(path.sep), pageName].join(path.sep));\n\n const assetsToLoadIn = {\n src: url,\n data: {\n ...metadata.imageMetadata,\n alphaMode: page.pma ? 'premultiplied-alpha' : 'premultiply-alpha-on-upload'\n }\n };\n\n const pixiPromise = loader.load(assetsToLoadIn).then((texture) =>\n {\n page.setTexture(SpineTexture.from(texture.source));\n });\n\n textureLoadingPromises.push(pixiPromise);\n }\n }\n\n await Promise.all(textureLoadingPromises);\n\n return retval;\n },\n },\n} as AssetExtension;\n\nextensions.add(spineTextureAtlasLoader);\n\nexport interface ISpineAtlasMetadata\n{\n // If you are downloading an .atlas file, this metadata will go to the Texture loader\n imageMetadata?: any;\n // If you already have atlas pages loaded as pixi textures\n // and want to use that to create the atlas, you can pass them here\n images?: TextureSource | string | Record;\n}\n","/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n type AssetExtension,\n checkExtension,\n DOMAdapter,\n extensions,\n ExtensionType,\n LoaderParserPriority,\n ResolvedAsset\n} from 'pixi.js';\n\ntype SkeletonJsonAsset = any;\ntype SkeletonBinaryAsset = Uint8Array;\n\nfunction isJson(resource: any): resource is SkeletonJsonAsset\n{\n return Object.prototype.hasOwnProperty.call(resource, 'bones');\n}\n\nfunction isBuffer(resource: any): resource is SkeletonBinaryAsset\n{\n return resource instanceof Uint8Array;\n}\n\nconst spineLoaderExtension: AssetExtension = {\n extension: ExtensionType.Asset,\n\n loader: {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n name: 'spineSkeletonLoader',\n },\n\n test(url)\n {\n return checkExtension(url, '.skel');\n },\n\n async load(url: string): Promise\n {\n const response = await DOMAdapter.get().fetch(url);\n\n const buffer = new Uint8Array(await response.arrayBuffer());\n\n return buffer;\n },\n testParse(asset: unknown, options: ResolvedAsset): Promise\n {\n const isJsonSpineModel = checkExtension(options.src, '.json') && isJson(asset);\n const isBinarySpineModel = checkExtension(options.src, '.skel') && isBuffer(asset);\n\n return Promise.resolve(isJsonSpineModel || isBinarySpineModel);\n },\n },\n} as AssetExtension;\n\nextensions.add(spineLoaderExtension);\n","import { Buffer, BufferUsage, Geometry } from 'pixi.js';\n\nconst placeHolderBufferData = new Float32Array(1);\nconst placeHolderIndexData = new Uint32Array(1);\n\nexport class DarkTintBatchGeometry extends Geometry\n{\n constructor()\n {\n const vertexSize = 7;\n\n const attributeBuffer = new Buffer({\n data: placeHolderBufferData,\n label: 'attribute-batch-buffer',\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST,\n shrinkToFit: false,\n });\n\n const indexBuffer = new Buffer({\n data: placeHolderIndexData,\n label: 'index-batch-buffer',\n usage: BufferUsage.INDEX | BufferUsage.COPY_DST, // | BufferUsage.STATIC,\n shrinkToFit: false,\n });\n\n const stride = vertexSize * 4;\n\n super({\n attributes: {\n aPosition: {\n buffer: attributeBuffer,\n format: 'float32x2',\n stride,\n offset: 0,\n },\n aUV: {\n buffer: attributeBuffer,\n format: 'float32x2',\n stride,\n offset: 2 * 4,\n },\n aColor: {\n buffer: attributeBuffer,\n format: 'unorm8x4',\n stride,\n offset: 4 * 4,\n },\n aDarkColor: {\n buffer: attributeBuffer,\n format: 'unorm8x4',\n stride,\n offset: 5 * 4,\n },\n aTextureIdAndRound: {\n buffer: attributeBuffer,\n format: 'uint16x2',\n stride,\n offset: 6 * 4,\n },\n },\n indexBuffer\n });\n }\n}\n\n","/* eslint-disable max-len */\nexport const darkTintBit = {\n name: 'color-bit',\n vertex: {\n header: /* wgsl */`\n @in aDarkColor: vec4;\n @out vDarkColor: vec4;\n `,\n main: /* wgsl */`\n vDarkColor = aDarkColor;\n `\n },\n fragment: {\n header: /* wgsl */`\n @in vDarkColor: vec4;\n `,\n end: /* wgsl */`\n \n let alpha = outColor.a * vColor.a;\n let rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb;\n\n finalColor = vec4(rgb, alpha);\n\n `\n }\n};\n\nexport const darkTintBitGl = {\n name: 'color-bit',\n vertex: {\n header: /* glsl */`\n in vec4 aDarkColor;\n out vec4 vDarkColor;\n `,\n main: /* glsl */`\n vDarkColor = aDarkColor;\n `\n },\n fragment: {\n header: /* glsl */`\n in vec4 vDarkColor;\n `,\n end: /* glsl */`\n \n finalColor.a = outColor.a * vColor.a;\n finalColor.rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb;\n `\n }\n};\n","import {\n colorBit,\n colorBitGl,\n compileHighShaderGlProgram,\n compileHighShaderGpuProgram,\n generateTextureBatchBit,\n generateTextureBatchBitGl,\n getBatchSamplersUniformGroup,\n roundPixelsBit,\n roundPixelsBitGl,\n Shader\n} from 'pixi.js';\nimport { darkTintBit, darkTintBitGl } from './darkTintBit';\n\nexport class DarkTintShader extends Shader\n{\n constructor(maxTextures: number)\n {\n const glProgram = compileHighShaderGlProgram({\n name: 'dark-tint-batch',\n bits: [\n colorBitGl,\n darkTintBitGl,\n generateTextureBatchBitGl(maxTextures),\n roundPixelsBitGl,\n ]\n });\n\n const gpuProgram = compileHighShaderGpuProgram({\n name: 'dark-tint-batch',\n bits: [\n colorBit,\n darkTintBit,\n generateTextureBatchBit(maxTextures),\n roundPixelsBit,\n ]\n });\n\n super({\n glProgram,\n gpuProgram,\n resources: {\n batchSamplers: getBatchSamplersUniformGroup(maxTextures),\n }\n });\n }\n}\n","import {\n Batcher,\n DefaultBatchableMeshElement,\n DefaultBatchableQuadElement,\n extensions,\n ExtensionType,\n Shader\n} from 'pixi.js';\nimport { DarkTintBatchGeometry } from './DarkTintBatchGeometry';\nimport { DarkTintShader } from './DarkTintShader';\n\nlet defaultShader: Shader = null;\n\n/** The default batcher is used to batch quads and meshes. */\nexport class DarkTintBatcher extends Batcher\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.Batcher,\n ],\n name: 'darkTint',\n } as const;\n\n public geometry = new DarkTintBatchGeometry();\n public shader = defaultShader || (defaultShader = new DarkTintShader(this.maxTextures));\n public name = DarkTintBatcher.extension.name;\n\n /** The size of one attribute. 1 = 32 bit. x, y, u, v, color, darkColor, textureIdAndRound -> total = 7 */\n public vertexSize = 7;\n\n public packAttributes(\n element: DefaultBatchableMeshElement & { darkColor: number },\n float32View: Float32Array,\n uint32View: Uint32Array,\n index: number,\n textureId: number\n )\n {\n const textureIdAndRound = (textureId << 16) | (element.roundPixels & 0xFFFF);\n\n const wt = element.transform;\n\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const { positions, uvs } = element;\n\n const argb = element.color;\n const darkColor = element.darkColor;\n\n const offset = element.attributeOffset;\n const end = offset + element.attributeSize;\n\n for (let i = offset; i < end; i++)\n {\n const i2 = i * 2;\n\n const x = positions[i2];\n const y = positions[(i2) + 1];\n\n float32View[index++] = (a * x) + (c * y) + tx;\n float32View[index++] = (d * y) + (b * x) + ty;\n\n float32View[index++] = uvs[i2];\n float32View[index++] = uvs[(i2) + 1];\n\n uint32View[index++] = argb;\n uint32View[index++] = darkColor;\n\n uint32View[index++] = textureIdAndRound;\n }\n }\n\n public packQuadAttributes(\n element: DefaultBatchableQuadElement & { darkColor: number },\n float32View: Float32Array,\n uint32View: Uint32Array,\n index: number,\n textureId: number\n )\n {\n const texture = element.texture;\n\n const wt = element.transform;\n\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const bounds = element.bounds;\n\n const w0 = bounds.maxX;\n const w1 = bounds.minX;\n const h0 = bounds.maxY;\n const h1 = bounds.minY;\n\n const uvs = texture.uvs;\n\n // _ _ _ _\n // a b g r\n const argb = element.color;\n const darkColor = element.darkColor;\n\n const textureIdAndRound = (textureId << 16) | (element.roundPixels & 0xFFFF);\n\n float32View[index + 0] = (a * w1) + (c * h1) + tx;\n float32View[index + 1] = (d * h1) + (b * w1) + ty;\n\n float32View[index + 2] = uvs.x0;\n float32View[index + 3] = uvs.y0;\n\n uint32View[index + 4] = argb;\n uint32View[index + 5] = darkColor;\n uint32View[index + 6] = textureIdAndRound;\n\n // xy\n float32View[index + 7] = (a * w0) + (c * h1) + tx;\n float32View[index + 8] = (d * h1) + (b * w0) + ty;\n\n float32View[index + 9] = uvs.x1;\n float32View[index + 10] = uvs.y1;\n\n uint32View[index + 11] = argb;\n uint32View[index + 12] = darkColor;\n uint32View[index + 13] = textureIdAndRound;\n\n // xy\n float32View[index + 14] = (a * w0) + (c * h0) + tx;\n float32View[index + 15] = (d * h0) + (b * w0) + ty;\n\n float32View[index + 16] = uvs.x2;\n float32View[index + 17] = uvs.y2;\n\n uint32View[index + 18] = argb;\n uint32View[index + 19] = darkColor;\n uint32View[index + 20] = textureIdAndRound;\n\n // xy\n float32View[index + 21] = (a * w1) + (c * h0) + tx;\n float32View[index + 22] = (d * h0) + (b * w1) + ty;\n\n float32View[index + 23] = uvs.x3;\n float32View[index + 24] = uvs.y3;\n\n uint32View[index + 25] = argb;\n uint32View[index + 26] = darkColor;\n uint32View[index + 27] = textureIdAndRound;\n }\n}\n\nextensions.add(DarkTintBatcher);\n","/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { AttachmentCacheData, Spine } from './Spine';\n\nimport type { Batch, Batcher, BLEND_MODES, DefaultBatchableMeshElement, Matrix, Texture } from 'pixi.js';\n\nexport class BatchableSpineSlot implements DefaultBatchableMeshElement\n{\n indexOffset = 0;\n attributeOffset = 0;\n\n indexSize: number;\n attributeSize: number;\n\n batcherName = 'darkTint';\n\n readonly packAsQuad = false;\n\n renderable: Spine;\n\n positions: Float32Array;\n indices: number[] | Uint16Array;\n uvs: Float32Array;\n\n roundPixels: 0 | 1;\n data: AttachmentCacheData;\n blendMode: BLEND_MODES;\n\n darkTint: number;\n\n texture: Texture;\n\n transform: Matrix;\n\n // used internally by batcher specific..\n // stored for efficient updating..\n _textureId: number;\n _attributeStart: number;\n _indexStart: number;\n _batcher: Batcher;\n _batch: Batch;\n\n get color()\n {\n const slotColor = this.data.color;\n\n const parentColor:number = this.renderable.groupColor;\n const parentAlpha:number = this.renderable.groupAlpha;\n let abgr:number;\n\n const mixedA = (slotColor.a * parentAlpha) * 255;\n\n if (parentColor !== 0xFFFFFF)\n {\n const parentB = (parentColor >> 16) & 0xFF;\n const parentG = (parentColor >> 8) & 0xFF;\n const parentR = parentColor & 0xFF;\n\n const mixedR = (slotColor.r * parentR);\n const mixedG = (slotColor.g * parentG);\n const mixedB = (slotColor.b * parentB);\n\n abgr = ((mixedA) << 24) | (mixedB << 16) | (mixedG << 8) | mixedR;\n }\n else\n {\n abgr = ((mixedA) << 24) | ((slotColor.b * 255) << 16) | ((slotColor.g * 255) << 8) | (slotColor.r * 255);\n }\n\n return abgr;\n }\n\n get darkColor()\n {\n const darkColor = this.data.darkColor;\n\n return ((darkColor.a) << 24) | ((darkColor.b * 255) << 16) | ((darkColor.g * 255) << 8) | (darkColor.r * 255);\n }\n\n get groupTransform() { return this.renderable.groupTransform; }\n\n setData(\n renderable:Spine,\n data:AttachmentCacheData,\n texture:Texture,\n blendMode:BLEND_MODES,\n roundPixels: 0 | 1)\n {\n this.renderable = renderable;\n this.transform = renderable.groupTransform;\n this.data = data;\n\n if (data.clipped)\n {\n const clippedData = data.clippedData;\n\n this.indexSize = clippedData.indicesCount;\n this.attributeSize = clippedData.vertexCount;\n this.positions = clippedData.vertices;\n this.indices = clippedData.indices;\n this.uvs = clippedData.uvs;\n }\n else\n {\n this.indexSize = data.indices.length;\n this.attributeSize = data.vertices.length / 2;\n this.positions = data.vertices;\n this.indices = data.indices;\n this.uvs = data.uvs;\n }\n\n this.texture = texture;\n this.roundPixels = roundPixels;\n\n this.blendMode = blendMode;\n\n this.batcherName = data.darkTint ? 'darkTint' : 'default';\n }\n}\n","/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n collectAllRenderables,\n extensions, ExtensionType,\n InstructionSet,\n type Renderer,\n type RenderPipe,\n Texture\n} from 'pixi.js';\nimport { BatchableSpineSlot } from './BatchableSpineSlot';\nimport { Spine } from './Spine';\nimport { MeshAttachment, RegionAttachment, SkeletonClipping } from '@esotericsoftware/spine-core';\n\nconst clipper = new SkeletonClipping();\n\nconst spineBlendModeMap = {\n 0: 'normal',\n 1: 'add',\n 2: 'multiply',\n 3: 'screen'\n};\n\n// eslint-disable-next-line max-len\nexport class SpinePipe implements RenderPipe\n{\n /** @ignore */\n static extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes,\n ],\n name: 'spine',\n } as const;\n\n renderer: Renderer;\n\n private gpuSpineData:Record = {};\n\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n }\n\n validateRenderable(spine: Spine): boolean\n {\n spine._applyState();\n // loop through and see if the mesh lengths have changed..\n\n return spine.spineAttachmentsDirty;\n }\n\n addRenderable(spine: Spine, instructionSet:InstructionSet)\n {\n const gpuSpine = this.gpuSpineData[spine.uid] ||= { slotBatches: {} };\n\n const batcher = this.renderer.renderPipes.batch;\n\n const drawOrder = spine.skeleton.drawOrder;\n\n const roundPixels = (this.renderer._roundPixels | spine._roundPixels) as 0 | 1;\n\n spine._applyState();\n\n for (let i = 0, n = drawOrder.length; i < n; i++)\n {\n const slot = drawOrder[i];\n const attachment = slot.getAttachment();\n const blendMode = spineBlendModeMap[slot.data.blendMode];\n\n if (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment)\n {\n const cacheData = spine._getCachedData(slot, attachment);\n const batchableSpineSlot = gpuSpine.slotBatches[cacheData.id] ||= new BatchableSpineSlot();\n\n batchableSpineSlot.setData(\n spine,\n cacheData,\n (attachment.region?.texture.texture) || Texture.EMPTY,\n blendMode,\n roundPixels\n );\n\n if (!cacheData.skipRender)\n {\n batcher.addToBatch(batchableSpineSlot, instructionSet);\n }\n }\n\n const containerAttachment = spine._slotsObject[slot.data.name];\n\n if (containerAttachment)\n {\n const container = containerAttachment.container;\n\n container.includeInBuild = true;\n collectAllRenderables(container, instructionSet, this.renderer);\n container.includeInBuild = false;\n }\n }\n\n clipper.clipEnd();\n }\n\n updateRenderable(spine: Spine)\n {\n // we assume that spine will always change its verts size..\n const gpuSpine = this.gpuSpineData[spine.uid];\n\n spine._applyState();\n\n const drawOrder = spine.skeleton.drawOrder;\n\n for (let i = 0, n = drawOrder.length; i < n; i++)\n {\n const slot = drawOrder[i];\n const attachment = slot.getAttachment();\n\n if (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment)\n {\n const cacheData = spine._getCachedData(slot, attachment);\n\n if (!cacheData.skipRender)\n {\n const batchableSpineSlot = gpuSpine.slotBatches[spine._getCachedData(slot, attachment).id];\n\n batchableSpineSlot._batcher?.updateElement(batchableSpineSlot);\n }\n }\n }\n }\n\n destroyRenderable(spine: Spine)\n {\n // TODO remove the renderable from the batcher\n this.gpuSpineData[spine.uid] = null as any;\n }\n\n destroy()\n {\n this.gpuSpineData = null as any;\n this.renderer = null as any;\n }\n}\n\nextensions.add(SpinePipe);\n","/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n Assets,\n Bounds,\n Cache,\n Container,\n ContainerOptions,\n DEG_TO_RAD,\n DestroyOptions,\n PointData,\n Ticker,\n ViewContainer,\n} from 'pixi.js';\nimport { ISpineDebugRenderer } from './SpineDebugRenderer';\nimport {\n AnimationState,\n AnimationStateData,\n AtlasAttachmentLoader,\n Attachment,\n Bone,\n ClippingAttachment,\n Color,\n MeshAttachment,\n Physics,\n RegionAttachment,\n Skeleton,\n SkeletonBinary,\n SkeletonBounds,\n SkeletonClipping,\n SkeletonData,\n SkeletonJson,\n Slot,\n type TextureAtlas,\n TrackEntry,\n Vector2,\n} from '@esotericsoftware/spine-core';\n\nexport type SpineFromOptions = {\n skeleton: string;\n atlas: string;\n scale?: number;\n};\n\nconst vectorAux = new Vector2();\nconst lightColor = new Color();\nconst darkColor = new Color();\n\nSkeleton.yDown = true;\n\nconst clipper = new SkeletonClipping();\n\nexport interface SpineOptions extends ContainerOptions\n{\n skeletonData: SkeletonData;\n autoUpdate?: boolean;\n}\n\nexport interface SpineEvents\n{\n complete: [trackEntry: TrackEntry];\n dispose: [trackEntry: TrackEntry];\n end: [trackEntry: TrackEntry];\n event: [trackEntry: TrackEntry, event: Event];\n interrupt: [trackEntry: TrackEntry];\n start: [trackEntry: TrackEntry];\n}\n\nexport interface AttachmentCacheData\n{\n id: string;\n clipped: boolean;\n vertices: Float32Array;\n uvs: Float32Array;\n indices: number[];\n color: Color;\n darkColor: Color | null;\n darkTint: boolean;\n skipRender: boolean;\n clippedData?: {\n vertices: Float32Array;\n uvs: Float32Array;\n indices: Uint16Array;\n vertexCount: number;\n indicesCount: number;\n };\n}\n\nexport class Spine extends ViewContainer\n{\n // Pixi properties\n public batched = true;\n public buildId = 0;\n public override readonly renderPipeId = 'spine';\n public _didSpineUpdate = false;\n\n public beforeUpdateWorldTransforms: (object: Spine) => void = () => { /** */ };\n public afterUpdateWorldTransforms: (object: Spine) => void = () => { /** */ };\n\n // Spine properties\n public skeleton: Skeleton;\n public state: AnimationState;\n public skeletonBounds: SkeletonBounds;\n private _debug?: ISpineDebugRenderer | undefined = undefined;\n\n readonly _slotsObject: Record = Object.create(null);\n\n private getSlotFromRef(slotRef: number | string | Slot): Slot\n {\n let slot: Slot | null;\n\n if (typeof slotRef === 'number') slot = this.skeleton.slots[slotRef];\n else if (typeof slotRef === 'string') slot = this.skeleton.findSlot(slotRef);\n else slot = slotRef;\n\n if (!slot) throw new Error(`No slot found with the given slot reference: ${slotRef}`);\n\n return slot;\n }\n\n public spineAttachmentsDirty: boolean;\n private _lastAttachments: Attachment[];\n\n private _stateChanged: boolean;\n private attachmentCacheData: Record[] = [];\n\n public get debug(): ISpineDebugRenderer | undefined\n {\n return this._debug;\n }\n\n public set debug(value: ISpineDebugRenderer | undefined)\n {\n if (this._debug)\n {\n this._debug.unregisterSpine(this);\n }\n if (value)\n {\n value.registerSpine(this);\n }\n this._debug = value;\n }\n\n private autoUpdateWarned = false;\n private _autoUpdate = true;\n\n public get autoUpdate(): boolean\n {\n return this._autoUpdate;\n }\n\n public set autoUpdate(value: boolean)\n {\n if (value)\n {\n Ticker.shared.add(this.internalUpdate, this);\n this.autoUpdateWarned = false;\n }\n else\n {\n Ticker.shared.remove(this.internalUpdate, this);\n }\n\n this._autoUpdate = value;\n }\n\n constructor(options: SpineOptions | SkeletonData)\n {\n if (options instanceof SkeletonData)\n {\n options = {\n skeletonData: options,\n };\n }\n\n super();\n\n const skeletonData = options instanceof SkeletonData ? options : options.skeletonData;\n\n this.skeleton = new Skeleton(skeletonData);\n this.state = new AnimationState(new AnimationStateData(skeletonData));\n this.autoUpdate = options?.autoUpdate ?? true;\n\n const slots = this.skeleton.slots;\n\n for (let i = 0; i < slots.length; i++)\n {\n this.attachmentCacheData[i] = Object.create(null);\n }\n\n this._updateState(0);\n }\n\n public update(dt: number): void\n {\n if (this.autoUpdate && !this.autoUpdateWarned)\n {\n console.warn(\n // eslint-disable-next-line max-len\n 'You are calling update on a Spine instance that has autoUpdate set to true. This is probably not what you want.',\n );\n this.autoUpdateWarned = true;\n }\n\n this.internalUpdate(0, dt);\n }\n\n protected internalUpdate(_deltaFrame: any, deltaSeconds?: number): void\n {\n // Because reasons, pixi uses deltaFrames at 60fps.\n // We ignore the default deltaFrames and use the deltaSeconds from pixi ticker.\n this._updateState(deltaSeconds ?? Ticker.shared.deltaMS / 1000);\n }\n\n get bounds()\n {\n if (this._boundsDirty)\n {\n this.updateBounds();\n }\n\n return this._bounds;\n }\n\n public setBonePosition(bone: string | Bone, position: PointData): void\n {\n const boneAux = bone;\n\n if (typeof bone === 'string')\n {\n bone = this.skeleton.findBone(bone) as Bone;\n }\n\n if (!bone) throw Error(`Cant set bone position, bone ${String(boneAux)} not found`);\n vectorAux.set(position.x, position.y);\n\n if (bone.parent)\n {\n const aux = bone.parent.worldToLocal(vectorAux);\n\n bone.x = aux.x;\n bone.y = -aux.y;\n }\n else\n {\n bone.x = vectorAux.x;\n bone.y = vectorAux.y;\n }\n }\n\n public getBonePosition(bone: string | Bone, outPos?: PointData): PointData | undefined\n {\n const boneAux = bone;\n\n if (typeof bone === 'string')\n {\n bone = this.skeleton.findBone(bone) as Bone;\n }\n\n if (!bone)\n {\n console.error(`Cant set bone position! Bone ${String(boneAux)} not found`);\n\n return outPos;\n }\n\n if (!outPos)\n {\n outPos = { x: 0, y: 0 };\n }\n\n outPos.x = bone.worldX;\n outPos.y = bone.worldY;\n\n return outPos;\n }\n\n /**\n * Will update the state based on the specified time, this will not apply the state to the skeleton\n * as this is differed until the `applyState` method is called.\n *\n * @param time the time at which to set the state\n * @internal\n */\n _updateState(time: number)\n {\n this.state.update(time);\n this.skeleton.update(time);\n\n this._stateChanged = true;\n\n this._boundsDirty = true;\n\n this.onViewUpdate();\n }\n\n /**\n * Applies the state to this spine instance.\n * - updates the state to the skeleton\n * - updates its world transform (spine world transform)\n * - validates the attachments - to flag if the attachments have changed this state\n * - transforms the attachments - to update the vertices of the attachments based on the new positions\n * - update the slot attachments - to update the position, rotation, scale, and visibility of the attached containers\n * @internal\n */\n _applyState()\n {\n if (!this._stateChanged) return;\n this._stateChanged = false;\n\n const { skeleton } = this;\n\n this.state.apply(skeleton);\n\n this.beforeUpdateWorldTransforms(this);\n skeleton.updateWorldTransform(Physics.update);\n this.afterUpdateWorldTransforms(this);\n\n this.validateAttachments();\n\n this.transformAttachments();\n\n this.updateSlotObjects();\n }\n\n private validateAttachments()\n {\n const currentDrawOrder = this.skeleton.drawOrder;\n\n const lastAttachments = (this._lastAttachments ||= []);\n\n let index = 0;\n\n let spineAttachmentsDirty = false;\n\n for (let i = 0; i < currentDrawOrder.length; i++)\n {\n const slot = currentDrawOrder[i];\n const attachment = slot.getAttachment();\n\n if (attachment)\n {\n if (attachment !== lastAttachments[index])\n {\n spineAttachmentsDirty = true;\n lastAttachments[index] = attachment;\n }\n\n index++;\n }\n }\n\n if (index !== lastAttachments.length)\n {\n spineAttachmentsDirty = true;\n lastAttachments.length = index;\n }\n\n this.spineAttachmentsDirty = spineAttachmentsDirty;\n }\n\n private transformAttachments()\n {\n const currentDrawOrder = this.skeleton.drawOrder;\n\n for (let i = 0; i < currentDrawOrder.length; i++)\n {\n const slot = currentDrawOrder[i];\n\n const attachment = slot.getAttachment();\n\n if (attachment)\n {\n if (attachment instanceof MeshAttachment || attachment instanceof RegionAttachment)\n {\n const cacheData = this._getCachedData(slot, attachment);\n\n if (attachment instanceof RegionAttachment)\n {\n attachment.computeWorldVertices(slot, cacheData.vertices, 0, 2);\n }\n else\n {\n attachment.computeWorldVertices(\n slot,\n 0,\n attachment.worldVerticesLength,\n cacheData.vertices,\n 0,\n 2,\n );\n }\n\n cacheData.uvs = attachment.uvs as Float32Array;\n\n const skeleton = slot.bone.skeleton;\n const skeletonColor = skeleton.color;\n const slotColor = slot.color;\n\n const attachmentColor = attachment.color;\n\n cacheData.color.set(\n skeletonColor.r * slotColor.r * attachmentColor.r,\n skeletonColor.g * slotColor.g * attachmentColor.g,\n skeletonColor.b * slotColor.b * attachmentColor.b,\n skeletonColor.a * slotColor.a * attachmentColor.a,\n );\n\n cacheData.darkTint = !!slot.darkColor;\n\n if (slot.darkColor)\n {\n cacheData.darkColor.setFromColor(slot.darkColor);\n }\n\n cacheData.skipRender = cacheData.clipped = false;\n\n if (clipper.isClipping())\n {\n this.updateClippingData(cacheData);\n }\n }\n else if (attachment instanceof ClippingAttachment)\n {\n clipper.clipStart(slot, attachment);\n continue;\n }\n }\n clipper.clipEndWithSlot(slot);\n }\n clipper.clipEnd();\n }\n\n private updateClippingData(cacheData: AttachmentCacheData)\n {\n cacheData.clipped = true;\n\n clipper.clipTriangles(\n cacheData.vertices,\n cacheData.vertices.length,\n cacheData.indices,\n cacheData.indices.length,\n cacheData.uvs,\n lightColor,\n darkColor,\n false,\n );\n\n const { clippedVertices, clippedTriangles } = clipper;\n\n const verticesCount = clippedVertices.length / 8;\n const indicesCount = clippedTriangles.length;\n\n if (!cacheData.clippedData)\n {\n cacheData.clippedData = {\n vertices: new Float32Array(verticesCount * 2),\n uvs: new Float32Array(verticesCount * 2),\n vertexCount: verticesCount,\n indices: new Uint16Array(indicesCount),\n indicesCount,\n };\n\n this.spineAttachmentsDirty = true;\n }\n\n const clippedData = cacheData.clippedData;\n\n const sizeChange = clippedData.vertexCount !== verticesCount || indicesCount !== clippedData.indicesCount;\n\n cacheData.skipRender = verticesCount === 0;\n\n if (sizeChange)\n {\n this.spineAttachmentsDirty = true;\n\n if (clippedData.vertexCount < verticesCount)\n {\n // buffer reuse!\n clippedData.vertices = new Float32Array(verticesCount * 2);\n clippedData.uvs = new Float32Array(verticesCount * 2);\n }\n\n if (clippedData.indices.length < indicesCount)\n {\n clippedData.indices = new Uint16Array(indicesCount);\n }\n }\n\n const { vertices, uvs, indices } = clippedData;\n\n for (let i = 0; i < verticesCount; i++)\n {\n vertices[i * 2] = clippedVertices[i * 8];\n vertices[(i * 2) + 1] = clippedVertices[(i * 8) + 1];\n\n uvs[i * 2] = clippedVertices[(i * 8) + 6];\n uvs[(i * 2) + 1] = clippedVertices[(i * 8) + 7];\n }\n\n clippedData.vertexCount = verticesCount;\n\n for (let i = 0; i < indices.length; i++)\n {\n indices[i] = clippedTriangles[i];\n }\n\n clippedData.indicesCount = indicesCount;\n }\n\n /**\n * ensure that attached containers map correctly to their slots\n * along with their position, rotation, scale, and visibility.\n */\n private updateSlotObjects()\n {\n for (const i in this._slotsObject)\n {\n const slotAttachment = this._slotsObject[i];\n\n if (!slotAttachment) continue;\n\n this.updateSlotObject(slotAttachment);\n }\n }\n\n private updateSlotObject(slotAttachment: {slot:Slot, container:Container})\n {\n const { slot, container } = slotAttachment;\n\n container.visible = this.skeleton.drawOrder.includes(slot);\n\n if (container.visible)\n {\n const bone = slot.bone;\n\n container.position.set(bone.worldX, bone.worldY);\n\n container.scale.x = bone.getWorldScaleX();\n container.scale.y = bone.getWorldScaleY();\n\n container.rotation = bone.getWorldRotationX() * DEG_TO_RAD;\n }\n }\n\n /** @internal */\n _getCachedData(slot: Slot, attachment: RegionAttachment | MeshAttachment): AttachmentCacheData\n {\n return this.attachmentCacheData[slot.data.index][attachment.name] || this.initCachedData(slot, attachment);\n }\n\n private initCachedData(slot: Slot, attachment: RegionAttachment | MeshAttachment): AttachmentCacheData\n {\n let vertices: Float32Array;\n\n if (attachment instanceof RegionAttachment)\n {\n vertices = new Float32Array(8);\n\n this.attachmentCacheData[slot.data.index][attachment.name] = {\n id: `${slot.data.index}-${attachment.name}`,\n vertices,\n clipped: false,\n indices: [0, 1, 2, 0, 2, 3],\n uvs: attachment.uvs as Float32Array,\n color: new Color(1, 1, 1, 1),\n darkColor: new Color(0, 0, 0, 0),\n darkTint: false,\n skipRender: false,\n };\n }\n else\n {\n vertices = new Float32Array(attachment.worldVerticesLength);\n\n this.attachmentCacheData[slot.data.index][attachment.name] = {\n id: `${slot.data.index}-${attachment.name}`,\n vertices,\n clipped: false,\n indices: attachment.triangles,\n uvs: attachment.uvs as Float32Array,\n color: new Color(1, 1, 1, 1),\n darkColor: new Color(0, 0, 0, 0),\n darkTint: false,\n skipRender: false,\n };\n }\n\n return this.attachmentCacheData[slot.data.index][attachment.name];\n }\n\n protected onViewUpdate()\n {\n // increment from the 12th bit!\n this._didChangeId += 1 << 12;\n\n this._boundsDirty = true;\n\n if (this.didViewUpdate) return;\n this.didViewUpdate = true;\n\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n if (renderGroup)\n {\n renderGroup.onChildViewUpdate(this);\n }\n\n this.debug?.renderDebug(this);\n }\n\n /**\n * Attaches a PixiJS container to a specified slot. This will map the world transform of the slots bone\n * to the attached container. A container can only be attached to one slot at a time.\n *\n * @param container - The container to attach to the slot\n * @param slotRef - The slot id or slot to attach to\n */\n public addSlotObject(slot: number | string | Slot, container: Container)\n {\n slot = this.getSlotFromRef(slot);\n\n // need to check in on the container too...\n for (const i in this._slotsObject)\n {\n if (this._slotsObject[i]?.container === container)\n {\n this.removeSlotObject(this._slotsObject[i].slot);\n }\n }\n\n this.removeSlotObject(slot);\n\n container.includeInBuild = false;\n\n // TODO only add once??\n this.addChild(container);\n\n this._slotsObject[slot.data.name] = {\n container,\n slot\n };\n\n this.updateSlotObject(this._slotsObject[slot.data.name]);\n }\n\n /**\n * Removes a PixiJS container from the slot it is attached to.\n *\n * @param container - The container to detach from the slot\n * @param slotOrContainer - The container, slot id or slot to detach from\n */\n public removeSlotObject(slotOrContainer: number | string | Slot | Container)\n {\n let containerToRemove: Container | undefined;\n\n if (slotOrContainer instanceof Container)\n {\n for (const i in this._slotsObject)\n {\n if (this._slotsObject[i]?.container === slotOrContainer)\n {\n this._slotsObject[i] = null;\n\n containerToRemove = slotOrContainer;\n break;\n }\n }\n }\n else\n {\n const slot = this.getSlotFromRef(slotOrContainer);\n\n containerToRemove = this._slotsObject[slot.data.name]?.container;\n this._slotsObject[slot.data.name] = null;\n }\n\n if (containerToRemove)\n {\n this.removeChild(containerToRemove);\n\n containerToRemove.includeInBuild = true;\n }\n }\n\n /**\n * Returns a container attached to a slot, or undefined if no container is attached.\n *\n * @param slotRef - The slot id or slot to get the attachment from\n * @returns - The container attached to the slot\n */\n public getSlotObject(slot: number | string | Slot)\n {\n slot = this.getSlotFromRef(slot);\n\n return this._slotsObject[slot.data.name].container;\n }\n\n private updateBounds()\n {\n this._boundsDirty = false;\n\n this.skeletonBounds ||= new SkeletonBounds();\n\n const skeletonBounds = this.skeletonBounds;\n\n skeletonBounds.update(this.skeleton, true);\n\n if (skeletonBounds.minX === Infinity)\n {\n this._applyState();\n\n const drawOrder = this.skeleton.drawOrder;\n const bounds = this._bounds;\n\n bounds.clear();\n\n for (let i = 0; i < drawOrder.length; i++)\n {\n const slot = drawOrder[i];\n\n const attachment = slot.getAttachment();\n\n if (attachment && (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment))\n {\n const cacheData = this._getCachedData(slot, attachment);\n\n bounds.addVertexData(cacheData.vertices, 0, cacheData.vertices.length);\n }\n }\n }\n else\n {\n this._bounds.minX = skeletonBounds.minX;\n this._bounds.minY = skeletonBounds.minY;\n this._bounds.maxX = skeletonBounds.maxX;\n this._bounds.maxY = skeletonBounds.maxY;\n }\n }\n\n /** @internal */\n addBounds(bounds: Bounds)\n {\n bounds.addBounds(this.bounds);\n }\n\n /**\n * Destroys this sprite renderable and optionally its texture.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.texture=false] - Should it destroy the current texture of the renderable as well\n * @param {boolean} [options.textureSource=false] - Should it destroy the textureSource of the renderable as well\n */\n public override destroy(options: DestroyOptions = false)\n {\n super.destroy(options);\n\n Ticker.shared.remove(this.internalUpdate, this);\n this.state.clearListeners();\n this.debug = undefined;\n this.skeleton = null as any;\n this.state = null as any;\n (this._slotsObject as any) = null;\n this._lastAttachments = null;\n this.attachmentCacheData = null as any;\n }\n\n /** Converts a point from the skeleton coordinate system to the Pixi world coordinate system. */\n public skeletonToPixiWorldCoordinates(point: { x: number; y: number })\n {\n this.worldTransform.apply(point, point);\n }\n\n /** Converts a point from the Pixi world coordinate system to the skeleton coordinate system. */\n public pixiWorldCoordinatesToSkeleton(point: { x: number; y: number })\n {\n this.worldTransform.applyInverse(point, point);\n }\n\n /** Converts a point from the Pixi world coordinate system to the bone's local coordinate system. */\n public pixiWorldCoordinatesToBone(point: { x: number; y: number }, bone: Bone)\n {\n this.pixiWorldCoordinatesToSkeleton(point);\n if (bone.parent)\n {\n bone.parent.worldToLocal(point as Vector2);\n }\n else\n {\n bone.worldToLocal(point as Vector2);\n }\n }\n\n static from({ skeleton, atlas, scale = 1 }: SpineFromOptions)\n {\n const cacheKey = `${skeleton}-${atlas}-${scale}`;\n\n if (Cache.has(cacheKey))\n {\n return new Spine(Cache.get(cacheKey));\n }\n\n const skeletonAsset = Assets.get(skeleton);\n\n const atlasAsset = Assets.get(atlas);\n const attachmentLoader = new AtlasAttachmentLoader(atlasAsset);\n // eslint-disable-next-line max-len\n const parser\n = skeletonAsset instanceof Uint8Array\n ? new SkeletonBinary(attachmentLoader)\n : new SkeletonJson(attachmentLoader);\n\n // TODO scale?\n parser.scale = scale;\n const skeletonData = parser.readSkeletonData(skeletonAsset);\n\n Cache.set(cacheKey, skeletonData);\n\n return new Spine({\n skeletonData,\n });\n }\n}\n","/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { Container, Graphics, Text } from 'pixi.js';\nimport { Spine } from './Spine';\nimport {\n ClippingAttachment,\n MeshAttachment,\n PathAttachment,\n RegionAttachment,\n SkeletonBounds\n} from '@esotericsoftware/spine-core';\n\nimport type { AnimationStateListener } from '@esotericsoftware/spine-core';\n\n/**\n * Make a class that extends from this interface to create your own debug renderer.\n * @public\n */\nexport interface ISpineDebugRenderer\n{\n /**\n * This will be called every frame, after the spine has been updated.\n */\n renderDebug: (spine: Spine) => void;\n\n /**\n * This is called when the `spine.debug` object is set to null or when the spine is destroyed.\n */\n unregisterSpine: (spine: Spine) => void;\n\n /**\n * This is called when the `spine.debug` object is set to a new instance of a debug renderer.\n */\n registerSpine: (spine: Spine) => void;\n}\n\ntype DebugDisplayObjects = {\n bones: Container;\n skeletonXY: Graphics;\n regionAttachmentsShape: Graphics;\n meshTrianglesLine: Graphics;\n meshHullLine: Graphics;\n clippingPolygon: Graphics;\n boundingBoxesRect: Graphics;\n boundingBoxesCircle: Graphics;\n boundingBoxesPolygon: Graphics;\n pathsCurve: Graphics;\n pathsLine: Graphics;\n parentDebugContainer: Container;\n eventText: Container;\n eventCallback: AnimationStateListener;\n};\n\n/**\n * This is a debug renderer that uses PixiJS Graphics under the hood.\n * @public\n */\nexport class SpineDebugRenderer implements ISpineDebugRenderer\n{\n private readonly registeredSpines: Map = new Map();\n\n public drawMeshHull = true;\n public drawMeshTriangles = true;\n public drawBones = true;\n public drawPaths = true;\n public drawBoundingBoxes = true;\n public drawClipping = true;\n public drawRegionAttachments = true;\n public drawEvents = true;\n\n public lineWidth = 1;\n public regionAttachmentsColor = 0x0078ff;\n public meshHullColor = 0x0078ff;\n public meshTrianglesColor = 0xffcc00;\n public clippingPolygonColor = 0xff00ff;\n public boundingBoxesRectColor = 0x00ff00;\n public boundingBoxesPolygonColor = 0x00ff00;\n public boundingBoxesCircleColor = 0x00ff00;\n public pathsCurveColor = 0xff0000;\n public pathsLineColor = 0xff00ff;\n public skeletonXYColor = 0xff0000;\n public bonesColor = 0x00eecc;\n public eventFontSize = 24;\n public eventFontColor = 0x0;\n\n /**\n * The debug is attached by force to each spine object.\n * So we need to create it inside the spine when we get the first update\n */\n public registerSpine(spine: Spine): void\n {\n if (this.registeredSpines.has(spine))\n {\n console.warn('SpineDebugRenderer.registerSpine() - this spine is already registered!', spine);\n\n return;\n }\n const debugDisplayObjects: DebugDisplayObjects = {\n parentDebugContainer: new Container(),\n bones: new Container(),\n skeletonXY: new Graphics(),\n regionAttachmentsShape: new Graphics(),\n meshTrianglesLine: new Graphics(),\n meshHullLine: new Graphics(),\n clippingPolygon: new Graphics(),\n boundingBoxesRect: new Graphics(),\n boundingBoxesCircle: new Graphics(),\n boundingBoxesPolygon: new Graphics(),\n pathsCurve: new Graphics(),\n pathsLine: new Graphics(),\n eventText: new Container(),\n eventCallback: {\n event: (_, event) =>\n {\n if (this.drawEvents)\n {\n const scale = Math.abs(spine.scale.x || spine.scale.y || 1);\n const text = new Text({\n text: event.data.name,\n style: {\n fontSize: this.eventFontSize / scale,\n fill: this.eventFontColor,\n fontFamily: 'monospace'\n }\n });\n\n text.scale.x = Math.sign(spine.scale.x);\n text.anchor.set(0.5);\n debugDisplayObjects.eventText.addChild(text);\n setTimeout(() =>\n {\n if (!text.destroyed)\n {\n text.destroy();\n }\n }, 250);\n }\n },\n },\n };\n\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.bones);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.skeletonXY);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.regionAttachmentsShape);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshTrianglesLine);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshHullLine);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.clippingPolygon);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesRect);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesCircle);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesPolygon);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsCurve);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsLine);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.eventText);\n\n (debugDisplayObjects.parentDebugContainer as any).zIndex = 9999999;\n\n // Disable screen reader and mouse input on debug objects.\n (debugDisplayObjects.parentDebugContainer as any).accessibleChildren = false;\n (debugDisplayObjects.parentDebugContainer as any).eventMode = 'none';\n (debugDisplayObjects.parentDebugContainer as any).interactiveChildren = false;\n\n spine.addChild(debugDisplayObjects.parentDebugContainer);\n\n spine.state.addListener(debugDisplayObjects.eventCallback);\n\n this.registeredSpines.set(spine, debugDisplayObjects);\n }\n\n public renderDebug(spine: Spine): void\n {\n if (!this.registeredSpines.has(spine))\n {\n // This should never happen. Spines are registered when you assign spine.debug\n this.registerSpine(spine);\n }\n\n const debugDisplayObjects = this.registeredSpines.get(spine);\n\n if (!debugDisplayObjects)\n {\n return;\n }\n spine.addChild(debugDisplayObjects.parentDebugContainer);\n\n debugDisplayObjects.skeletonXY.clear();\n debugDisplayObjects.regionAttachmentsShape.clear();\n debugDisplayObjects.meshTrianglesLine.clear();\n debugDisplayObjects.meshHullLine.clear();\n debugDisplayObjects.clippingPolygon.clear();\n debugDisplayObjects.boundingBoxesRect.clear();\n debugDisplayObjects.boundingBoxesCircle.clear();\n debugDisplayObjects.boundingBoxesPolygon.clear();\n debugDisplayObjects.pathsCurve.clear();\n debugDisplayObjects.pathsLine.clear();\n\n for (let len = debugDisplayObjects.bones.children.length; len > 0; len--)\n {\n debugDisplayObjects.bones.children[len - 1].destroy({ children: true, texture: true, textureSource: true });\n }\n\n const scale = Math.abs(spine.scale.x || spine.scale.y || 1);\n const lineWidth = this.lineWidth / scale;\n\n if (this.drawBones)\n {\n this.drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale);\n }\n\n if (this.drawPaths)\n {\n this.drawPathsFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawBoundingBoxes)\n {\n this.drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawClipping)\n {\n this.drawClippingFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawMeshHull || this.drawMeshTriangles)\n {\n this.drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawRegionAttachments)\n {\n this.drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawEvents)\n {\n for (const child of debugDisplayObjects.eventText.children)\n {\n child.alpha -= 0.05;\n child.y -= 2;\n }\n }\n }\n\n private drawBonesFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number, scale: number): void\n {\n const skeleton = spine.skeleton;\n const skeletonX = skeleton.x;\n const skeletonY = skeleton.y;\n const bones = skeleton.bones;\n\n debugDisplayObjects.skeletonXY.strokeStyle = { width: lineWidth, color: this.skeletonXYColor };\n\n for (let i = 0, len = bones.length; i < len; i++)\n {\n const bone = bones[i];\n const boneLen = bone.data.length;\n const starX = skeletonX + bone.worldX;\n const starY = skeletonY + bone.worldY;\n const endX = skeletonX + (boneLen * bone.a) + bone.worldX;\n const endY = skeletonY + (boneLen * bone.b) + bone.worldY;\n\n if (bone.data.name === 'root' || bone.data.parent === null)\n {\n continue;\n }\n\n const w = Math.abs(starX - endX);\n const h = Math.abs(starY - endY);\n // a = w, // side length a\n const a2 = Math.pow(w, 2); // square root of side length a\n const b = h; // side length b\n const b2 = Math.pow(h, 2); // square root of side length b\n const c = Math.sqrt(a2 + b2); // side length c\n const c2 = Math.pow(c, 2); // square root of side length c\n const rad = Math.PI / 180;\n // A = Math.acos([a2 + c2 - b2] / [2 * a * c]) || 0, // Angle A\n // C = Math.acos([a2 + b2 - c2] / [2 * a * b]) || 0, // C angle\n const B = Math.acos((c2 + b2 - a2) / (2 * b * c)) || 0; // angle of corner B\n\n if (c === 0)\n {\n continue;\n }\n\n const gp = new Graphics();\n\n debugDisplayObjects.bones.addChild(gp);\n\n // draw bone\n const refRation = c / 50 / scale;\n\n gp.context\n .poly([0, 0, 0 - refRation, c - (refRation * 3), 0, c - refRation, 0 + refRation, c - (refRation * 3)])\n .fill(this.bonesColor);\n gp.x = starX;\n gp.y = starY;\n gp.pivot.y = c;\n\n // Calculate bone rotation angle\n let rotation = 0;\n\n if (starX < endX && starY < endY)\n {\n // bottom right\n rotation = -B + (180 * rad);\n }\n else if (starX > endX && starY < endY)\n {\n // bottom left\n rotation = 180 * (rad + B);\n }\n else if (starX > endX && starY > endY)\n {\n // top left\n rotation = -B;\n }\n else if (starX < endX && starY > endY)\n {\n // bottom left\n rotation = B;\n }\n else if (starY === endY && starX < endX)\n {\n // To the right\n rotation = 90 * rad;\n }\n else if (starY === endY && starX > endX)\n {\n // go left\n rotation = -90 * rad;\n }\n else if (starX === endX && starY < endY)\n {\n // down\n rotation = 180 * rad;\n }\n else if (starX === endX && starY > endY)\n {\n // up\n rotation = 0;\n }\n gp.rotation = rotation;\n\n // Draw the starting rotation point of the bone\n gp.circle(0, c, refRation * 1.2)\n .fill({ color: 0x000000, alpha: 0.6 })\n .stroke({ width: lineWidth, color: this.skeletonXYColor });\n }\n\n // Draw the skeleton starting point \"X\" form\n const startDotSize = lineWidth * 3;\n\n debugDisplayObjects.skeletonXY.context\n .moveTo(skeletonX - startDotSize, skeletonY - startDotSize)\n .lineTo(skeletonX + startDotSize, skeletonY + startDotSize)\n .moveTo(skeletonX + startDotSize, skeletonY - startDotSize)\n .lineTo(skeletonX - startDotSize, skeletonY + startDotSize)\n .stroke();\n }\n\n private drawRegionAttachmentsFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof RegionAttachment))\n {\n continue;\n }\n\n const regionAttachment = attachment;\n\n const vertices = new Float32Array(8);\n\n regionAttachment.computeWorldVertices(slot, vertices, 0, 2);\n\n debugDisplayObjects.regionAttachmentsShape.poly(Array.from(vertices.slice(0, 8)));\n }\n\n debugDisplayObjects.regionAttachmentsShape.stroke({\n color: this.regionAttachmentsColor,\n width: lineWidth\n });\n }\n\n private drawMeshHullAndMeshTriangles(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n\n if (!slot.bone.active)\n {\n continue;\n }\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof MeshAttachment))\n {\n continue;\n }\n\n const meshAttachment = attachment;\n\n const vertices = new Float32Array(meshAttachment.worldVerticesLength);\n const triangles = meshAttachment.triangles;\n let hullLength = meshAttachment.hullLength;\n\n meshAttachment.computeWorldVertices(slot, 0, meshAttachment.worldVerticesLength, vertices, 0, 2);\n // draw the skinned mesh (triangle)\n if (this.drawMeshTriangles)\n {\n for (let i = 0, len = triangles.length; i < len; i += 3)\n {\n const v1 = triangles[i] * 2;\n const v2 = triangles[i + 1] * 2;\n const v3 = triangles[i + 2] * 2;\n\n debugDisplayObjects.meshTrianglesLine.context\n .moveTo(vertices[v1], vertices[v1 + 1])\n .lineTo(vertices[v2], vertices[v2 + 1])\n .lineTo(vertices[v3], vertices[v3 + 1]);\n }\n }\n\n // draw skin border\n if (this.drawMeshHull && hullLength > 0)\n {\n hullLength = (hullLength >> 1) * 2;\n let lastX = vertices[hullLength - 2];\n let lastY = vertices[hullLength - 1];\n\n for (let i = 0, len = hullLength; i < len; i += 2)\n {\n const x = vertices[i];\n const y = vertices[i + 1];\n\n debugDisplayObjects.meshHullLine.context\n .moveTo(x, y)\n .lineTo(lastX, lastY);\n lastX = x;\n lastY = y;\n }\n }\n }\n\n debugDisplayObjects.meshHullLine.stroke({ width: lineWidth, color: this.meshHullColor });\n debugDisplayObjects.meshTrianglesLine.stroke({ width: lineWidth, color: this.meshTrianglesColor });\n }\n\n drawClippingFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n\n if (!slot.bone.active)\n {\n continue;\n }\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof ClippingAttachment))\n {\n continue;\n }\n\n const clippingAttachment = attachment;\n\n const nn = clippingAttachment.worldVerticesLength;\n const world = new Float32Array(nn);\n\n clippingAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n debugDisplayObjects.clippingPolygon.poly(Array.from(world));\n }\n\n debugDisplayObjects.clippingPolygon.stroke({\n width: lineWidth, color: this.clippingPolygonColor, alpha: 1\n });\n }\n\n drawBoundingBoxesFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n // draw the total outline of the bounding box\n debugDisplayObjects.boundingBoxesRect.lineStyle(lineWidth, this.boundingBoxesRectColor, 5);\n\n const bounds = new SkeletonBounds();\n\n bounds.update(spine.skeleton, true);\n\n debugDisplayObjects.boundingBoxesRect\n .rect(bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight())\n .stroke({ width: lineWidth, color: this.boundingBoxesRectColor });\n\n const polygons = bounds.polygons;\n const drawPolygon = (polygonVertices: ArrayLike, _offset: unknown, count: number): void =>\n {\n if (count < 3)\n {\n throw new Error('Polygon must contain at least 3 vertices');\n }\n const paths:number[] = [];\n const dotSize = lineWidth * 2;\n\n for (let i = 0, len = polygonVertices.length; i < len; i += 2)\n {\n const x1 = polygonVertices[i];\n const y1 = polygonVertices[i + 1];\n\n // draw the bounding box node\n debugDisplayObjects.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor);\n debugDisplayObjects.boundingBoxesCircle.drawCircle(x1, y1, dotSize);\n debugDisplayObjects.boundingBoxesCircle.fill(0);\n\n paths.push(x1, y1);\n }\n\n // draw the bounding box area\n debugDisplayObjects.boundingBoxesPolygon\n .poly(paths)\n .fill({\n color: this.boundingBoxesPolygonColor,\n alpha: 0.1\n })\n .stroke({\n width: lineWidth,\n color: this.boundingBoxesPolygonColor\n });\n };\n\n for (let i = 0, len = polygons.length; i < len; i++)\n {\n const polygon = polygons[i];\n\n drawPolygon(polygon, 0, polygon.length);\n }\n }\n\n private drawPathsFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n\n if (!slot.bone.active)\n {\n continue;\n }\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof PathAttachment))\n {\n continue;\n }\n\n const pathAttachment = attachment;\n let nn = pathAttachment.worldVerticesLength;\n const world = new Float32Array(nn);\n\n pathAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n let x1 = world[2];\n let y1 = world[3];\n let x2 = 0;\n let y2 = 0;\n\n if (pathAttachment.closed)\n {\n const cx1 = world[0];\n const cy1 = world[1];\n const cx2 = world[nn - 2];\n const cy2 = world[nn - 1];\n\n x2 = world[nn - 4];\n y2 = world[nn - 3];\n\n // curve\n debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n\n // handle\n debugDisplayObjects.pathsLine.moveTo(x1, y1);\n debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n debugDisplayObjects.pathsLine.moveTo(x2, y2);\n debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n }\n nn -= 4;\n for (let ii = 4; ii < nn; ii += 6)\n {\n const cx1 = world[ii];\n const cy1 = world[ii + 1];\n const cx2 = world[ii + 2];\n const cy2 = world[ii + 3];\n\n x2 = world[ii + 4];\n y2 = world[ii + 5];\n // curve\n debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n\n // handle\n debugDisplayObjects.pathsLine.moveTo(x1, y1);\n debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n debugDisplayObjects.pathsLine.moveTo(x2, y2);\n debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n x1 = x2;\n y1 = y2;\n }\n }\n\n debugDisplayObjects.pathsCurve.stroke({ width: lineWidth, color: this.pathsCurveColor });\n debugDisplayObjects.pathsLine.stroke({ width: lineWidth, color: this.pathsLineColor });\n }\n\n public unregisterSpine(spine: Spine): void\n {\n if (!this.registeredSpines.has(spine))\n {\n console.warn('SpineDebugRenderer.unregisterSpine() - spine is not registered, can\\'t unregister!', spine);\n }\n const debugDisplayObjects = this.registeredSpines.get(spine);\n\n if (!debugDisplayObjects)\n {\n return;\n }\n\n spine.state.removeListener(debugDisplayObjects.eventCallback);\n\n debugDisplayObjects.parentDebugContainer.destroy({ textureSource: true, children: true, texture: true });\n this.registeredSpines.delete(spine);\n }\n}\n"],"names":["prevRequire","x","c","a","i","e","o","_SpineTexture","Texture","image","__publicField","PixiTexture","texture","minFilter","magFilter","style","uWrap","vWrap","filter","TextureFilter","wrap","TextureWrap","blend","BlendMode","SpineTexture","R","w","S","u","L","M","t","s","d","spineTextureAtlasLoader","ExtensionType","LoaderParserPriority","url","checkExtension","DOMAdapter","asset","options","isExtensionRight","isString","atlas","loader","metadata","basePath","path","retval","TextureAtlas","TextureSource","pixiTexture","textureLoadingPromises","page","pageName","providedPage","assetsToLoadIn","__spreadProps","__spreadValues","pixiPromise","extensions","isJson","resource","isBuffer","spineLoaderExtension","response","isJsonSpineModel","isBinarySpineModel","placeHolderBufferData","placeHolderIndexData","DarkTintBatchGeometry","Geometry","attributeBuffer","Buffer","BufferUsage","indexBuffer","stride","darkTintBit","darkTintBitGl","DarkTintShader","Shader","maxTextures","glProgram","compileHighShaderGlProgram","colorBitGl","generateTextureBatchBitGl","roundPixelsBitGl","gpuProgram","compileHighShaderGpuProgram","colorBit","generateTextureBatchBit","roundPixelsBit","getBatchSamplersUniformGroup","defaultShader","_DarkTintBatcher","Batcher","element","float32View","uint32View","index","textureId","textureIdAndRound","wt","b","tx","ty","positions","uvs","argb","darkColor","offset","end","i2","y","bounds","w0","w1","h0","h1","DarkTintBatcher","BatchableSpineSlot","slotColor","parentColor","parentAlpha","abgr","mixedA","parentB","parentG","parentR","mixedR","mixedG","mixedB","renderable","data","blendMode","roundPixels","clippedData","_","B","r","h","clipper","SkeletonClipping","spineBlendModeMap","SpinePipe","renderer","spine","instructionSet","_a","_b","_c","_d","_e","gpuSpine","batcher","drawOrder","n","slot","attachment","RegionAttachment","MeshAttachment","cacheData","batchableSpineSlot","containerAttachment","container","collectAllRenderables","vectorAux","Vector2","lightColor","Color","Skeleton","Spine","ViewContainer","SkeletonData","skeletonData","AnimationState","AnimationStateData","slots","slotRef","value","Ticker","dt","_deltaFrame","deltaSeconds","bone","position","boneAux","aux","outPos","time","skeleton","Physics","currentDrawOrder","lastAttachments","spineAttachmentsDirty","skeletonColor","attachmentColor","ClippingAttachment","clippedVertices","clippedTriangles","verticesCount","indicesCount","sizeChange","vertices","indices","slotAttachment","DEG_TO_RAD","renderGroup","slotOrContainer","containerToRemove","Container","SkeletonBounds","skeletonBounds","point","scale","cacheKey","Cache","skeletonAsset","Assets","atlasAsset","attachmentLoader","AtlasAttachmentLoader","parser","SkeletonBinary","SkeletonJson","SpineDebugRenderer","debugDisplayObjects","Graphics","event","text","Text","len","lineWidth","child","skeletonX","skeletonY","bones","boneLen","starX","starY","endX","endY","a2","b2","c2","rad","gp","refRation","rotation","startDotSize","regionAttachment","meshAttachment","triangles","hullLength","v1","v2","v3","lastX","lastY","clippingAttachment","nn","world","polygons","drawPolygon","polygonVertices","_offset","count","paths","dotSize","x1","y1","polygon","PathAttachment","pathAttachment","x2","y2","cx1","cy1","cx2","cy2","ii"],"mappings":"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"} \ No newline at end of file diff --git a/dist/spine-pixi.js b/dist/spine-pixi.js new file mode 100644 index 0000000..c856552 --- /dev/null +++ b/dist/spine-pixi.js @@ -0,0 +1,13132 @@ +"use strict"; +var spine = (() => { + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] + }) : x)(function(x) { + if (typeof require !== "undefined") + return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); + }); + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + + // src/index.ts + var src_exports = {}; + __export(src_exports, { + AlphaTimeline: () => AlphaTimeline, + Animation: () => Animation, + AnimationState: () => AnimationState, + AnimationStateAdapter: () => AnimationStateAdapter, + AnimationStateData: () => AnimationStateData, + AssetManagerBase: () => AssetManagerBase, + AtlasAttachmentLoader: () => AtlasAttachmentLoader, + Attachment: () => Attachment, + AttachmentTimeline: () => AttachmentTimeline, + BinaryInput: () => BinaryInput, + BlendMode: () => BlendMode, + Bone: () => Bone, + BoneData: () => BoneData, + BoundingBoxAttachment: () => BoundingBoxAttachment, + CURRENT: () => CURRENT, + ClippingAttachment: () => ClippingAttachment, + Color: () => Color, + ConstraintData: () => ConstraintData, + CurveTimeline: () => CurveTimeline, + CurveTimeline1: () => CurveTimeline1, + CurveTimeline2: () => CurveTimeline2, + DebugUtils: () => DebugUtils, + DeformTimeline: () => DeformTimeline, + Downloader: () => Downloader, + DrawOrderTimeline: () => DrawOrderTimeline, + Event: () => Event, + EventData: () => EventData, + EventQueue: () => EventQueue, + EventTimeline: () => EventTimeline, + EventType: () => EventType, + FIRST: () => FIRST, + FakeTexture: () => FakeTexture, + HOLD_FIRST: () => HOLD_FIRST, + HOLD_MIX: () => HOLD_MIX, + HOLD_SUBSEQUENT: () => HOLD_SUBSEQUENT, + IkConstraint: () => IkConstraint, + IkConstraintData: () => IkConstraintData, + IkConstraintTimeline: () => IkConstraintTimeline, + Inherit: () => Inherit, + InheritTimeline: () => InheritTimeline, + IntSet: () => IntSet, + Interpolation: () => Interpolation, + MathUtils: () => MathUtils, + MeshAttachment: () => MeshAttachment, + MixBlend: () => MixBlend, + MixDirection: () => MixDirection, + PathAttachment: () => PathAttachment, + PathConstraint: () => PathConstraint, + PathConstraintData: () => PathConstraintData, + PathConstraintMixTimeline: () => PathConstraintMixTimeline, + PathConstraintPositionTimeline: () => PathConstraintPositionTimeline, + PathConstraintSpacingTimeline: () => PathConstraintSpacingTimeline, + Physics: () => Physics, + PhysicsConstraintDampingTimeline: () => PhysicsConstraintDampingTimeline, + PhysicsConstraintGravityTimeline: () => PhysicsConstraintGravityTimeline, + PhysicsConstraintInertiaTimeline: () => PhysicsConstraintInertiaTimeline, + PhysicsConstraintMassTimeline: () => PhysicsConstraintMassTimeline, + PhysicsConstraintMixTimeline: () => PhysicsConstraintMixTimeline, + PhysicsConstraintResetTimeline: () => PhysicsConstraintResetTimeline, + PhysicsConstraintStrengthTimeline: () => PhysicsConstraintStrengthTimeline, + PhysicsConstraintTimeline: () => PhysicsConstraintTimeline, + PhysicsConstraintWindTimeline: () => PhysicsConstraintWindTimeline, + PointAttachment: () => PointAttachment, + Pool: () => Pool, + PositionMode: () => PositionMode, + Pow: () => Pow, + PowOut: () => PowOut, + RGB2Timeline: () => RGB2Timeline, + RGBA2Timeline: () => RGBA2Timeline, + RGBATimeline: () => RGBATimeline, + RGBTimeline: () => RGBTimeline, + RegionAttachment: () => RegionAttachment, + RotateMode: () => RotateMode, + RotateTimeline: () => RotateTimeline, + SETUP: () => SETUP, + SUBSEQUENT: () => SUBSEQUENT, + ScaleTimeline: () => ScaleTimeline, + ScaleXTimeline: () => ScaleXTimeline, + ScaleYTimeline: () => ScaleYTimeline, + SequenceTimeline: () => SequenceTimeline, + ShearTimeline: () => ShearTimeline, + ShearXTimeline: () => ShearXTimeline, + ShearYTimeline: () => ShearYTimeline, + Skeleton: () => Skeleton, + SkeletonBinary: () => SkeletonBinary, + SkeletonBounds: () => SkeletonBounds, + SkeletonClipping: () => SkeletonClipping, + SkeletonData: () => SkeletonData, + SkeletonJson: () => SkeletonJson, + Skin: () => Skin, + SkinEntry: () => SkinEntry, + Slot: () => Slot, + SlotData: () => SlotData, + SpacingMode: () => SpacingMode, + Spine: () => Spine, + SpineDebugRenderer: () => SpineDebugRenderer, + SpinePipe: () => SpinePipe, + SpineTexture: () => SpineTexture, + StringSet: () => StringSet, + Texture: () => Texture, + TextureAtlas: () => TextureAtlas, + TextureAtlasPage: () => TextureAtlasPage, + TextureAtlasRegion: () => TextureAtlasRegion, + TextureFilter: () => TextureFilter, + TextureRegion: () => TextureRegion, + TextureWrap: () => TextureWrap, + TimeKeeper: () => TimeKeeper, + Timeline: () => Timeline, + TrackEntry: () => TrackEntry, + TransformConstraint: () => TransformConstraint, + TransformConstraintData: () => TransformConstraintData, + TransformConstraintTimeline: () => TransformConstraintTimeline, + TranslateTimeline: () => TranslateTimeline, + TranslateXTimeline: () => TranslateXTimeline, + TranslateYTimeline: () => TranslateYTimeline, + Triangulator: () => Triangulator, + Utils: () => Utils, + Vector2: () => Vector2, + VertexAttachment: () => VertexAttachment, + WindowedMean: () => WindowedMean + }); + + // src/require-shim.ts + if (typeof window !== "undefined" && window.PIXI) { + const prevRequire = window.require; + window.require = (x) => { + if (prevRequire) + return prevRequire(x); + else if (x.startsWith("@pixi/") || x.startsWith("pixi.js")) + return window.PIXI; + }; + } + + // src/assets/atlasLoader.ts + var import_pixi2 = __require("pixi.js"); + + // src/SpineTexture.ts + var import_pixi = __require("pixi.js"); + + // node_modules/@esotericsoftware/spine-core/dist/Utils.js + var IntSet = class { + array = new Array(); + add(value) { + let contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + } + contains(value) { + return this.array[value | 0] != void 0; + } + remove(value) { + this.array[value | 0] = void 0; + } + clear() { + this.array.length = 0; + } + }; + var StringSet = class { + entries = {}; + size = 0; + add(value) { + let contains = this.entries[value]; + this.entries[value] = true; + if (!contains) { + this.size++; + return true; + } + return false; + } + addAll(values) { + let oldSize = this.size; + for (var i = 0, n = values.length; i < n; i++) + this.add(values[i]); + return oldSize != this.size; + } + contains(value) { + return this.entries[value]; + } + clear() { + this.entries = {}; + this.size = 0; + } + }; + var Color = class _Color { + r; + g; + b; + a; + static WHITE = new _Color(1, 1, 1, 1); + static RED = new _Color(1, 0, 0, 1); + static GREEN = new _Color(0, 1, 0, 1); + static BLUE = new _Color(0, 0, 1, 1); + static MAGENTA = new _Color(1, 0, 1, 1); + constructor(r = 0, g = 0, b = 0, a = 0) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + set(r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + return this.clamp(); + } + setFromColor(c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + } + setFromString(hex) { + hex = hex.charAt(0) == "#" ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255; + this.g = parseInt(hex.substr(2, 2), 16) / 255; + this.b = parseInt(hex.substr(4, 2), 16) / 255; + this.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255; + return this; + } + add(r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + return this.clamp(); + } + clamp() { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + } + static rgba8888ToColor(color, value) { + color.r = ((value & 4278190080) >>> 24) / 255; + color.g = ((value & 16711680) >>> 16) / 255; + color.b = ((value & 65280) >>> 8) / 255; + color.a = (value & 255) / 255; + } + static rgb888ToColor(color, value) { + color.r = ((value & 16711680) >>> 16) / 255; + color.g = ((value & 65280) >>> 8) / 255; + color.b = (value & 255) / 255; + } + toRgb888() { + const hex = (x) => ("0" + (x * 255).toString(16)).slice(-2); + return Number("0x" + hex(this.r) + hex(this.g) + hex(this.b)); + } + static fromString(hex) { + return new _Color().setFromString(hex); + } + }; + var MathUtils = class _MathUtils { + static PI = 3.1415927; + static PI2 = _MathUtils.PI * 2; + static invPI2 = 1 / _MathUtils.PI2; + static radiansToDegrees = 180 / _MathUtils.PI; + static radDeg = _MathUtils.radiansToDegrees; + static degreesToRadians = _MathUtils.PI / 180; + static degRad = _MathUtils.degreesToRadians; + static clamp(value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + } + static cosDeg(degrees) { + return Math.cos(degrees * _MathUtils.degRad); + } + static sinDeg(degrees) { + return Math.sin(degrees * _MathUtils.degRad); + } + static atan2Deg(y, x) { + return Math.atan2(y, x) * _MathUtils.degRad; + } + static signum(value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + } + static toInt(x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + } + static cbrt(x) { + let y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + } + static randomTriangular(min, max) { + return _MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + } + static randomTriangularWith(min, max, mode) { + let u = Math.random(); + let d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + } + static isPowerOfTwo(value) { + return value && (value & value - 1) === 0; + } + }; + var Interpolation = class { + apply(start, end, a) { + return start + (end - start) * this.applyInternal(a); + } + }; + var Pow = class extends Interpolation { + power = 2; + constructor(power) { + super(); + this.power = power; + } + applyInternal(a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + } + }; + var PowOut = class extends Pow { + constructor(power) { + super(power); + } + applyInternal(a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + } + }; + var Utils = class _Utils { + static SUPPORTS_TYPED_ARRAYS = typeof Float32Array !== "undefined"; + static arrayCopy(source, sourceStart, dest, destStart, numElements) { + for (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + } + static arrayFill(array, fromIndex, toIndex, value) { + for (let i = fromIndex; i < toIndex; i++) + array[i] = value; + } + static setArraySize(array, size, value = 0) { + let oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (let i = oldSize; i < size; i++) + array[i] = value; + } + return array; + } + static ensureArrayCapacity(array, size, value = 0) { + if (array.length >= size) + return array; + return _Utils.setArraySize(array, size, value); + } + static newArray(size, defaultValue) { + let array = new Array(size); + for (let i = 0; i < size; i++) + array[i] = defaultValue; + return array; + } + static newFloatArray(size) { + if (_Utils.SUPPORTS_TYPED_ARRAYS) + return new Float32Array(size); + else { + let array = new Array(size); + for (let i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + } + static newShortArray(size) { + if (_Utils.SUPPORTS_TYPED_ARRAYS) + return new Int16Array(size); + else { + let array = new Array(size); + for (let i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + } + static toFloatArray(array) { + return _Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + } + static toSinglePrecision(value) { + return _Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + } + // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 + static webkit602BugfixHelper(alpha, blend) { + } + static contains(array, element, identity = true) { + for (var i = 0; i < array.length; i++) + if (array[i] == element) + return true; + return false; + } + static enumValue(type, name) { + return type[name[0].toUpperCase() + name.slice(1)]; + } + }; + var DebugUtils = class { + static logBones(skeleton) { + for (let i = 0; i < skeleton.bones.length; i++) { + let bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + } + }; + var Pool = class { + items = new Array(); + instantiator; + constructor(instantiator) { + this.instantiator = instantiator; + } + obtain() { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + } + free(item) { + if (item.reset) + item.reset(); + this.items.push(item); + } + freeAll(items) { + for (let i = 0; i < items.length; i++) + this.free(items[i]); + } + clear() { + this.items.length = 0; + } + }; + var Vector2 = class { + x; + y; + constructor(x = 0, y = 0) { + this.x = x; + this.y = y; + } + set(x, y) { + this.x = x; + this.y = y; + return this; + } + length() { + let x = this.x; + let y = this.y; + return Math.sqrt(x * x + y * y); + } + normalize() { + let len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + } + }; + var TimeKeeper = class { + maxDelta = 0.064; + framesPerSecond = 0; + delta = 0; + totalTime = 0; + lastTime = Date.now() / 1e3; + frameCount = 0; + frameTime = 0; + update() { + let now = Date.now() / 1e3; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + } + }; + var WindowedMean = class { + values; + addedValues = 0; + lastValue = 0; + mean = 0; + dirty = true; + constructor(windowSize = 32) { + this.values = new Array(windowSize); + } + hasEnoughData() { + return this.addedValues >= this.values.length; + } + addValue(value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + } + getMean() { + if (this.hasEnoughData()) { + if (this.dirty) { + let mean = 0; + for (let i = 0; i < this.values.length; i++) + mean += this.values[i]; + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + return 0; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/Attachment.js + var Attachment = class { + name; + constructor(name) { + if (!name) + throw new Error("name cannot be null."); + this.name = name; + } + }; + var VertexAttachment = class _VertexAttachment extends Attachment { + static nextID = 0; + /** The unique ID for this attachment. */ + id = _VertexAttachment.nextID++; + /** The bones which affect the {@link #getVertices()}. The array entries are, for each vertex, the number of bones affecting + * the vertex followed by that many bone indices, which is the index of the bone in {@link Skeleton#bones}. Will be null + * if this attachment has no weights. */ + bones = null; + /** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y` + * entries for each vertex. For a weighted attachment, the values are `x,y,weight` entries for each bone affecting + * each vertex. */ + vertices = []; + /** The maximum number of world vertex values that can be output by + * {@link #computeWorldVertices()} using the `count` parameter. */ + worldVerticesLength = 0; + /** Timelines for the timeline attachment are also applied to this attachment. + * May be null if no attachment-specific timelines should be applied. */ + timelineAttachment = this; + constructor(name) { + super(name); + } + /** Transforms the attachment's local {@link #vertices} to world coordinates. If the slot's {@link Slot#deform} is + * not empty, it is used to deform the vertices. + * + * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine + * Runtimes Guide. + * @param start The index of the first {@link #vertices} value to transform. Each vertex has 2 values, x and y. + * @param count The number of world vertex values to output. Must be <= {@link #worldVerticesLength} - `start`. + * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` * + * `stride` / 2. + * @param offset The `worldVertices` index to begin writing values. + * @param stride The number of `worldVertices` entries between the value pairs written. */ + computeWorldVertices(slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + let skeleton = slot.bone.skeleton; + let deformArray = slot.deform; + let vertices = this.vertices; + let bones = this.bones; + if (!bones) { + if (deformArray.length > 0) + vertices = deformArray; + let bone = slot.bone; + let x = bone.worldX; + let y = bone.worldY; + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (let v2 = start, w = offset; w < count; v2 += 2, w += stride) { + let vx = vertices[v2], vy = vertices[v2 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + let v = 0, skip = 0; + for (let i = 0; i < start; i += 2) { + let n = bones[v]; + v += n + 1; + skip += n; + } + let skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (let w = offset, b = skip * 3; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + let bone = skeletonBones[bones[v]]; + let vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } else { + let deform = deformArray; + for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + let bone = skeletonBones[bones[v]]; + let vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + } + /** Does not copy id (generated) or name (set on construction). **/ + copyTo(attachment) { + if (this.bones) { + attachment.bones = new Array(this.bones.length); + Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } else + attachment.bones = null; + if (this.vertices) { + attachment.vertices = Utils.newFloatArray(this.vertices.length); + Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.timelineAttachment = this.timelineAttachment; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/Sequence.js + var Sequence = class _Sequence { + static _nextID = 0; + id = _Sequence.nextID(); + regions; + start = 0; + digits = 0; + /** The index of the region to show for the setup pose. */ + setupIndex = 0; + constructor(count) { + this.regions = new Array(count); + } + copy() { + let copy = new _Sequence(this.regions.length); + Utils.arrayCopy(this.regions, 0, copy.regions, 0, this.regions.length); + copy.start = this.start; + copy.digits = this.digits; + copy.setupIndex = this.setupIndex; + return copy; + } + apply(slot, attachment) { + let index = slot.sequenceIndex; + if (index == -1) + index = this.setupIndex; + if (index >= this.regions.length) + index = this.regions.length - 1; + let region = this.regions[index]; + if (attachment.region != region) { + attachment.region = region; + attachment.updateRegion(); + } + } + getPath(basePath, index) { + let result = basePath; + let frame = (this.start + index).toString(); + for (let i = this.digits - frame.length; i > 0; i--) + result += "0"; + result += frame; + return result; + } + static nextID() { + return _Sequence._nextID++; + } + }; + var SequenceMode; + (function(SequenceMode2) { + SequenceMode2[SequenceMode2["hold"] = 0] = "hold"; + SequenceMode2[SequenceMode2["once"] = 1] = "once"; + SequenceMode2[SequenceMode2["loop"] = 2] = "loop"; + SequenceMode2[SequenceMode2["pingpong"] = 3] = "pingpong"; + SequenceMode2[SequenceMode2["onceReverse"] = 4] = "onceReverse"; + SequenceMode2[SequenceMode2["loopReverse"] = 5] = "loopReverse"; + SequenceMode2[SequenceMode2["pingpongReverse"] = 6] = "pingpongReverse"; + })(SequenceMode || (SequenceMode = {})); + var SequenceModeValues = [ + SequenceMode.hold, + SequenceMode.once, + SequenceMode.loop, + SequenceMode.pingpong, + SequenceMode.onceReverse, + SequenceMode.loopReverse, + SequenceMode.pingpongReverse + ]; + + // node_modules/@esotericsoftware/spine-core/dist/Animation.js + var Animation = class { + /** The animation's name, which is unique across all animations in the skeleton. */ + name; + timelines = []; + timelineIds = new StringSet(); + /** The duration of the animation in seconds, which is the highest time of all keys in the timeline. */ + duration; + constructor(name, timelines, duration) { + if (!name) + throw new Error("name cannot be null."); + this.name = name; + this.setTimelines(timelines); + this.duration = duration; + } + setTimelines(timelines) { + if (!timelines) + throw new Error("timelines cannot be null."); + this.timelines = timelines; + this.timelineIds.clear(); + for (var i = 0; i < timelines.length; i++) + this.timelineIds.addAll(timelines[i].getPropertyIds()); + } + hasTimeline(ids) { + for (let i = 0; i < ids.length; i++) + if (this.timelineIds.contains(ids[i])) + return true; + return false; + } + /** Applies all the animation's timelines to the specified skeleton. + * + * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. + * @param loop If true, the animation repeats after {@link #getDuration()}. + * @param events May be null to ignore fired events. */ + apply(skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (!skeleton) + throw new Error("skeleton cannot be null."); + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) + lastTime %= this.duration; + } + let timelines = this.timelines; + for (let i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + } + }; + var MixBlend; + (function(MixBlend2) { + MixBlend2[MixBlend2["setup"] = 0] = "setup"; + MixBlend2[MixBlend2["first"] = 1] = "first"; + MixBlend2[MixBlend2["replace"] = 2] = "replace"; + MixBlend2[MixBlend2["add"] = 3] = "add"; + })(MixBlend || (MixBlend = {})); + var MixDirection; + (function(MixDirection2) { + MixDirection2[MixDirection2["mixIn"] = 0] = "mixIn"; + MixDirection2[MixDirection2["mixOut"] = 1] = "mixOut"; + })(MixDirection || (MixDirection = {})); + var Property = { + rotate: 0, + x: 1, + y: 2, + scaleX: 3, + scaleY: 4, + shearX: 5, + shearY: 6, + inherit: 7, + rgb: 8, + alpha: 9, + rgb2: 10, + attachment: 11, + deform: 12, + event: 13, + drawOrder: 14, + ikConstraint: 15, + transformConstraint: 16, + pathConstraintPosition: 17, + pathConstraintSpacing: 18, + pathConstraintMix: 19, + physicsConstraintInertia: 20, + physicsConstraintStrength: 21, + physicsConstraintDamping: 22, + physicsConstraintMass: 23, + physicsConstraintWind: 24, + physicsConstraintGravity: 25, + physicsConstraintMix: 26, + physicsConstraintReset: 27, + sequence: 28 + }; + var Timeline = class { + propertyIds; + frames; + constructor(frameCount, propertyIds) { + this.propertyIds = propertyIds; + this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries()); + } + getPropertyIds() { + return this.propertyIds; + } + getFrameEntries() { + return 1; + } + getFrameCount() { + return this.frames.length / this.getFrameEntries(); + } + getDuration() { + return this.frames[this.frames.length - this.getFrameEntries()]; + } + static search1(frames, time) { + let n = frames.length; + for (let i = 1; i < n; i++) + if (frames[i] > time) + return i - 1; + return n - 1; + } + static search(frames, time, step) { + let n = frames.length; + for (let i = step; i < n; i += step) + if (frames[i] > time) + return i - step; + return n - step; + } + }; + var CurveTimeline = class extends Timeline { + curves; + // type, x, y, ... + constructor(frameCount, bezierCount, propertyIds) { + super(frameCount, propertyIds); + this.curves = Utils.newFloatArray( + frameCount + bezierCount * 18 + /*BEZIER_SIZE*/ + ); + this.curves[frameCount - 1] = 1; + } + /** Sets the specified key frame to linear interpolation. */ + setLinear(frame) { + this.curves[frame] = 0; + } + /** Sets the specified key frame to stepped interpolation. */ + setStepped(frame) { + this.curves[frame] = 1; + } + /** Shrinks the storage for Bezier curves, for use when bezierCount (specified in the constructor) was larger + * than the actual number of Bezier curves. */ + shrink(bezierCount) { + let size = this.getFrameCount() + bezierCount * 18; + if (this.curves.length > size) { + let newCurves = Utils.newFloatArray(size); + Utils.arrayCopy(this.curves, 0, newCurves, 0, size); + this.curves = newCurves; + } + } + /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than + * one curve per frame. + * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and bezierCount - 1 (specified + * in the constructor), inclusive. + * @param frame Between 0 and frameCount - 1, inclusive. + * @param value The index of the value for this frame that this curve is used for. + * @param time1 The time for the first key. + * @param value1 The value for the first key. + * @param cx1 The time for the first Bezier handle. + * @param cy1 The value for the first Bezier handle. + * @param cx2 The time of the second Bezier handle. + * @param cy2 The value for the second Bezier handle. + * @param time2 The time for the second key. + * @param value2 The value for the second key. */ + setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) { + let curves = this.curves; + let i = this.getFrameCount() + bezier * 18; + if (value == 0) + curves[frame] = 2 + i; + let tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03; + let dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 6e-3; + let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy; + let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667; + let x = time1 + dx, y = value1 + dy; + for (let n = i + 18; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dx += ddx; + dy += ddy; + ddx += dddx; + ddy += dddy; + x += dx; + y += dy; + } + } + /** Returns the Bezier interpolated value for the specified time. + * @param frameIndex The index into {@link #getFrames()} for the values of the frame before time. + * @param valueOffset The offset from frameIndex to the value this curve is used for. + * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */ + getBezierValue(time, frameIndex, valueOffset, i) { + let curves = this.curves; + if (curves[i] > time) { + let x2 = this.frames[frameIndex], y2 = this.frames[frameIndex + valueOffset]; + return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2); + } + let n = i + 18; + for (i += 2; i < n; i += 2) { + if (curves[i] >= time) { + let x2 = curves[i - 2], y2 = curves[i - 1]; + return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2); + } + } + frameIndex += this.getFrameEntries(); + let x = curves[n - 2], y = curves[n - 1]; + return y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y); + } + }; + var CurveTimeline1 = class extends CurveTimeline { + constructor(frameCount, bezierCount, propertyId) { + super(frameCount, bezierCount, [propertyId]); + } + getFrameEntries() { + return 2; + } + /** Sets the time and value for the specified frame. + * @param frame Between 0 and frameCount, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, value) { + frame <<= 1; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*VALUE*/ + ] = value; + } + /** Returns the interpolated value for the specified time. */ + getCurveValue(time) { + let frames = this.frames; + let i = frames.length - 2; + for (let ii = 2; ii <= i; ii += 2) { + if (frames[ii] > time) { + i = ii - 2; + break; + } + } + let curveType = this.curves[i >> 1]; + switch (curveType) { + case 0: + let before = frames[i], value = frames[ + i + 1 + /*VALUE*/ + ]; + return value + (time - before) / (frames[ + i + 2 + /*ENTRIES*/ + ] - before) * (frames[ + i + 2 + 1 + /*VALUE*/ + ] - value); + case 1: + return frames[ + i + 1 + /*VALUE*/ + ]; + } + return this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + } + getRelativeValue(time, alpha, blend, current, setup) { + if (time < this.frames[0]) { + switch (blend) { + case MixBlend.setup: + return setup; + case MixBlend.first: + return current + (setup - current) * alpha; + } + return current; + } + let value = this.getCurveValue(time); + switch (blend) { + case MixBlend.setup: + return setup + value * alpha; + case MixBlend.first: + case MixBlend.replace: + value += setup - current; + } + return current + value * alpha; + } + getAbsoluteValue(time, alpha, blend, current, setup) { + if (time < this.frames[0]) { + switch (blend) { + case MixBlend.setup: + return setup; + case MixBlend.first: + return current + (setup - current) * alpha; + } + return current; + } + let value = this.getCurveValue(time); + if (blend == MixBlend.setup) + return setup + (value - setup) * alpha; + return current + (value - current) * alpha; + } + getAbsoluteValue2(time, alpha, blend, current, setup, value) { + if (time < this.frames[0]) { + switch (blend) { + case MixBlend.setup: + return setup; + case MixBlend.first: + return current + (setup - current) * alpha; + } + return current; + } + if (blend == MixBlend.setup) + return setup + (value - setup) * alpha; + return current + (value - current) * alpha; + } + getScaleValue(time, alpha, blend, direction, current, setup) { + const frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + return setup; + case MixBlend.first: + return current + (setup - current) * alpha; + } + return current; + } + let value = this.getCurveValue(time) * setup; + if (alpha == 1) { + if (blend == MixBlend.add) + return current + value - setup; + return value; + } + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + return setup + (Math.abs(value) * MathUtils.signum(setup) - setup) * alpha; + case MixBlend.first: + case MixBlend.replace: + return current + (Math.abs(value) * MathUtils.signum(current) - current) * alpha; + } + } else { + let s = 0; + switch (blend) { + case MixBlend.setup: + s = Math.abs(setup) * MathUtils.signum(value); + return s + (value - s) * alpha; + case MixBlend.first: + case MixBlend.replace: + s = Math.abs(current) * MathUtils.signum(value); + return s + (value - s) * alpha; + } + } + return current + (value - setup) * alpha; + } + }; + var CurveTimeline2 = class extends CurveTimeline { + /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}. + * @param propertyIds Unique identifiers for the properties the timeline modifies. */ + constructor(frameCount, bezierCount, propertyId1, propertyId2) { + super(frameCount, bezierCount, [propertyId1, propertyId2]); + } + getFrameEntries() { + return 3; + } + /** Sets the time and values for the specified frame. + * @param frame Between 0 and frameCount, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, value1, value2) { + frame *= 3; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*VALUE1*/ + ] = value1; + this.frames[ + frame + 2 + /*VALUE2*/ + ] = value2; + } + }; + var RotateTimeline = class extends CurveTimeline1 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.rotate + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (bone.active) + bone.rotation = this.getRelativeValue(time, alpha, blend, bone.rotation, bone.data.rotation); + } + }; + var TranslateTimeline = class extends CurveTimeline2 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.x + "|" + boneIndex, Property.y + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + let x = 0, y = 0; + let i = Timeline.search( + frames, + time, + 3 + /*ENTRIES*/ + ); + let curveType = this.curves[ + i / 3 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: + let before = frames[i]; + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + let t = (time - before) / (frames[ + i + 3 + /*ENTRIES*/ + ] - before); + x += (frames[ + i + 3 + 1 + /*VALUE1*/ + ] - x) * t; + y += (frames[ + i + 3 + 2 + /*VALUE2*/ + ] - y) * t; + break; + case 1: + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + break; + default: + x = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + } + }; + var TranslateXTimeline = class extends CurveTimeline1 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.x + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (bone.active) + bone.x = this.getRelativeValue(time, alpha, blend, bone.x, bone.data.x); + } + }; + var TranslateYTimeline = class extends CurveTimeline1 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.y + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (bone.active) + bone.y = this.getRelativeValue(time, alpha, blend, bone.y, bone.data.y); + } + }; + var ScaleTimeline = class extends CurveTimeline2 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.scaleX + "|" + boneIndex, Property.scaleY + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + let x, y; + let i = Timeline.search( + frames, + time, + 3 + /*ENTRIES*/ + ); + let curveType = this.curves[ + i / 3 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: + let before = frames[i]; + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + let t = (time - before) / (frames[ + i + 3 + /*ENTRIES*/ + ] - before); + x += (frames[ + i + 3 + 1 + /*VALUE1*/ + ] - x) * t; + y += (frames[ + i + 3 + 2 + /*VALUE2*/ + ] - y) * t; + break; + case 1: + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + break; + default: + x = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + x *= bone.data.scaleX; + y *= bone.data.scaleY; + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } else { + bone.scaleX = x; + bone.scaleY = y; + } + } else { + let bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bone.scaleX += (x - bone.data.scaleX) * alpha; + bone.scaleY += (y - bone.data.scaleY) * alpha; + } + } else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * MathUtils.signum(x); + by = Math.abs(bone.scaleY) * MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bone.scaleX += (x - bone.data.scaleX) * alpha; + bone.scaleY += (y - bone.data.scaleY) * alpha; + } + } + } + } + }; + var ScaleXTimeline = class extends CurveTimeline1 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.scaleX + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (bone.active) + bone.scaleX = this.getScaleValue(time, alpha, blend, direction, bone.scaleX, bone.data.scaleX); + } + }; + var ScaleYTimeline = class extends CurveTimeline1 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.scaleY + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (bone.active) + bone.scaleY = this.getScaleValue(time, alpha, blend, direction, bone.scaleY, bone.data.scaleY); + } + }; + var ShearTimeline = class extends CurveTimeline2 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.shearX + "|" + boneIndex, Property.shearY + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + let x = 0, y = 0; + let i = Timeline.search( + frames, + time, + 3 + /*ENTRIES*/ + ); + let curveType = this.curves[ + i / 3 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: + let before = frames[i]; + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + let t = (time - before) / (frames[ + i + 3 + /*ENTRIES*/ + ] - before); + x += (frames[ + i + 3 + 1 + /*VALUE1*/ + ] - x) * t; + y += (frames[ + i + 3 + 2 + /*VALUE2*/ + ] - y) * t; + break; + case 1: + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + break; + default: + x = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + } + }; + var ShearXTimeline = class extends CurveTimeline1 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.shearX + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (bone.active) + bone.shearX = this.getRelativeValue(time, alpha, blend, bone.shearX, bone.data.shearX); + } + }; + var ShearYTimeline = class extends CurveTimeline1 { + boneIndex = 0; + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, Property.shearY + "|" + boneIndex); + this.boneIndex = boneIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (bone.active) + bone.shearY = this.getRelativeValue(time, alpha, blend, bone.shearY, bone.data.shearY); + } + }; + var InheritTimeline = class extends Timeline { + boneIndex = 0; + constructor(frameCount, boneIndex) { + super(frameCount, [Property.inherit + "|" + boneIndex]); + this.boneIndex = boneIndex; + } + getFrameEntries() { + return 2; + } + /** Sets the transform mode for the specified frame. + * @param frame Between 0 and frameCount, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, inherit) { + frame *= 2; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*INHERIT*/ + ] = inherit; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + let frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + bone.inherit = bone.data.inherit; + return; + } + bone.inherit = this.frames[ + Timeline.search( + frames, + time, + 2 + /*ENTRIES*/ + ) + 1 + /*INHERIT*/ + ]; + } + }; + var RGBATimeline = class extends CurveTimeline { + slotIndex = 0; + constructor(frameCount, bezierCount, slotIndex) { + super(frameCount, bezierCount, [ + Property.rgb + "|" + slotIndex, + Property.alpha + "|" + slotIndex + ]); + this.slotIndex = slotIndex; + } + getFrameEntries() { + return 5; + } + /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */ + setFrame(frame, time, r, g, b, a) { + frame *= 5; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + this.frames[ + frame + 4 + /*A*/ + ] = a; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + let frames = this.frames; + let color = slot.color; + if (time < frames[0]) { + let setup = slot.data.color; + switch (blend) { + case MixBlend.setup: + color.setFromColor(setup); + return; + case MixBlend.first: + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + let r = 0, g = 0, b = 0, a = 0; + let i = Timeline.search( + frames, + time, + 5 + /*ENTRIES*/ + ); + let curveType = this.curves[ + i / 5 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: + let before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + let t = (time - before) / (frames[ + i + 5 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 5 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 5 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 5 + 3 + /*B*/ + ] - b) * t; + a += (frames[ + i + 5 + 4 + /*A*/ + ] - a) * t; + break; + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + a = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + } + if (alpha == 1) + color.set(r, g, b, a); + else { + if (blend == MixBlend.setup) + color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + } + }; + var RGBTimeline = class extends CurveTimeline { + slotIndex = 0; + constructor(frameCount, bezierCount, slotIndex) { + super(frameCount, bezierCount, [ + Property.rgb + "|" + slotIndex + ]); + this.slotIndex = slotIndex; + } + getFrameEntries() { + return 4; + } + /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */ + setFrame(frame, time, r, g, b) { + frame <<= 2; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + let frames = this.frames; + let color = slot.color; + if (time < frames[0]) { + let setup = slot.data.color; + switch (blend) { + case MixBlend.setup: + color.r = setup.r; + color.g = setup.g; + color.b = setup.b; + return; + case MixBlend.first: + color.r += (setup.r - color.r) * alpha; + color.g += (setup.g - color.g) * alpha; + color.b += (setup.b - color.b) * alpha; + } + return; + } + let r = 0, g = 0, b = 0; + let i = Timeline.search( + frames, + time, + 4 + /*ENTRIES*/ + ); + let curveType = this.curves[i >> 2]; + switch (curveType) { + case 0: + let before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + let t = (time - before) / (frames[ + i + 4 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 4 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 4 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 4 + 3 + /*B*/ + ] - b) * t; + break; + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + } + if (alpha == 1) { + color.r = r; + color.g = g; + color.b = b; + } else { + if (blend == MixBlend.setup) { + let setup = slot.data.color; + color.r = setup.r; + color.g = setup.g; + color.b = setup.b; + } + color.r += (r - color.r) * alpha; + color.g += (g - color.g) * alpha; + color.b += (b - color.b) * alpha; + } + } + }; + var AlphaTimeline = class extends CurveTimeline1 { + slotIndex = 0; + constructor(frameCount, bezierCount, slotIndex) { + super(frameCount, bezierCount, Property.alpha + "|" + slotIndex); + this.slotIndex = slotIndex; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + let color = slot.color; + if (time < this.frames[0]) { + let setup = slot.data.color; + switch (blend) { + case MixBlend.setup: + color.a = setup.a; + return; + case MixBlend.first: + color.a += (setup.a - color.a) * alpha; + } + return; + } + let a = this.getCurveValue(time); + if (alpha == 1) + color.a = a; + else { + if (blend == MixBlend.setup) + color.a = slot.data.color.a; + color.a += (a - color.a) * alpha; + } + } + }; + var RGBA2Timeline = class extends CurveTimeline { + slotIndex = 0; + constructor(frameCount, bezierCount, slotIndex) { + super(frameCount, bezierCount, [ + Property.rgb + "|" + slotIndex, + Property.alpha + "|" + slotIndex, + Property.rgb2 + "|" + slotIndex + ]); + this.slotIndex = slotIndex; + } + getFrameEntries() { + return 8; + } + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + setFrame(frame, time, r, g, b, a, r2, g2, b2) { + frame <<= 3; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + this.frames[ + frame + 4 + /*A*/ + ] = a; + this.frames[ + frame + 5 + /*R2*/ + ] = r2; + this.frames[ + frame + 6 + /*G2*/ + ] = g2; + this.frames[ + frame + 7 + /*B2*/ + ] = b2; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + let frames = this.frames; + let light = slot.color, dark = slot.darkColor; + if (time < frames[0]) { + let setupLight = slot.data.color, setupDark = slot.data.darkColor; + switch (blend) { + case MixBlend.setup: + light.setFromColor(setupLight); + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + return; + case MixBlend.first: + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.r += (setupDark.r - dark.r) * alpha; + dark.g += (setupDark.g - dark.g) * alpha; + dark.b += (setupDark.b - dark.b) * alpha; + } + return; + } + let r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + let i = Timeline.search( + frames, + time, + 8 + /*ENTRIES*/ + ); + let curveType = this.curves[i >> 3]; + switch (curveType) { + case 0: + let before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + r2 = frames[ + i + 5 + /*R2*/ + ]; + g2 = frames[ + i + 6 + /*G2*/ + ]; + b2 = frames[ + i + 7 + /*B2*/ + ]; + let t = (time - before) / (frames[ + i + 8 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 8 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 8 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 8 + 3 + /*B*/ + ] - b) * t; + a += (frames[ + i + 8 + 4 + /*A*/ + ] - a) * t; + r2 += (frames[ + i + 8 + 5 + /*R2*/ + ] - r2) * t; + g2 += (frames[ + i + 8 + 6 + /*G2*/ + ] - g2) * t; + b2 += (frames[ + i + 8 + 7 + /*B2*/ + ] - b2) * t; + break; + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + r2 = frames[ + i + 5 + /*R2*/ + ]; + g2 = frames[ + i + 6 + /*G2*/ + ]; + b2 = frames[ + i + 7 + /*B2*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + a = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + r2 = this.getBezierValue( + time, + i, + 5, + curveType + 18 * 4 - 2 + /*BEZIER*/ + ); + g2 = this.getBezierValue( + time, + i, + 6, + curveType + 18 * 5 - 2 + /*BEZIER*/ + ); + b2 = this.getBezierValue( + time, + i, + 7, + curveType + 18 * 6 - 2 + /*BEZIER*/ + ); + } + if (alpha == 1) { + light.set(r, g, b, a); + dark.r = r2; + dark.g = g2; + dark.b = b2; + } else { + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + let setupDark = slot.data.darkColor; + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.r += (r2 - dark.r) * alpha; + dark.g += (g2 - dark.g) * alpha; + dark.b += (b2 - dark.b) * alpha; + } + } + }; + var RGB2Timeline = class extends CurveTimeline { + slotIndex = 0; + constructor(frameCount, bezierCount, slotIndex) { + super(frameCount, bezierCount, [ + Property.rgb + "|" + slotIndex, + Property.rgb2 + "|" + slotIndex + ]); + this.slotIndex = slotIndex; + } + getFrameEntries() { + return 7; + } + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + setFrame(frame, time, r, g, b, r2, g2, b2) { + frame *= 7; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + this.frames[ + frame + 4 + /*R2*/ + ] = r2; + this.frames[ + frame + 5 + /*G2*/ + ] = g2; + this.frames[ + frame + 6 + /*B2*/ + ] = b2; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + let frames = this.frames; + let light = slot.color, dark = slot.darkColor; + if (time < frames[0]) { + let setupLight = slot.data.color, setupDark = slot.data.darkColor; + switch (blend) { + case MixBlend.setup: + light.r = setupLight.r; + light.g = setupLight.g; + light.b = setupLight.b; + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + return; + case MixBlend.first: + light.r += (setupLight.r - light.r) * alpha; + light.g += (setupLight.g - light.g) * alpha; + light.b += (setupLight.b - light.b) * alpha; + dark.r += (setupDark.r - dark.r) * alpha; + dark.g += (setupDark.g - dark.g) * alpha; + dark.b += (setupDark.b - dark.b) * alpha; + } + return; + } + let r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + let i = Timeline.search( + frames, + time, + 7 + /*ENTRIES*/ + ); + let curveType = this.curves[ + i / 7 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: + let before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + r2 = frames[ + i + 4 + /*R2*/ + ]; + g2 = frames[ + i + 5 + /*G2*/ + ]; + b2 = frames[ + i + 6 + /*B2*/ + ]; + let t = (time - before) / (frames[ + i + 7 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 7 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 7 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 7 + 3 + /*B*/ + ] - b) * t; + r2 += (frames[ + i + 7 + 4 + /*R2*/ + ] - r2) * t; + g2 += (frames[ + i + 7 + 5 + /*G2*/ + ] - g2) * t; + b2 += (frames[ + i + 7 + 6 + /*B2*/ + ] - b2) * t; + break; + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + r2 = frames[ + i + 4 + /*R2*/ + ]; + g2 = frames[ + i + 5 + /*G2*/ + ]; + b2 = frames[ + i + 6 + /*B2*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + r2 = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + g2 = this.getBezierValue( + time, + i, + 5, + curveType + 18 * 4 - 2 + /*BEZIER*/ + ); + b2 = this.getBezierValue( + time, + i, + 6, + curveType + 18 * 5 - 2 + /*BEZIER*/ + ); + } + if (alpha == 1) { + light.r = r; + light.g = g; + light.b = b; + dark.r = r2; + dark.g = g2; + dark.b = b2; + } else { + if (blend == MixBlend.setup) { + let setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.r = setupLight.r; + light.g = setupLight.g; + light.b = setupLight.b; + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + } + light.r += (r - light.r) * alpha; + light.g += (g - light.g) * alpha; + light.b += (b - light.b) * alpha; + dark.r += (r2 - dark.r) * alpha; + dark.g += (g2 - dark.g) * alpha; + dark.b += (b2 - dark.b) * alpha; + } + } + }; + var AttachmentTimeline = class extends Timeline { + slotIndex = 0; + /** The attachment name for each key frame. May contain null values to clear the attachment. */ + attachmentNames; + constructor(frameCount, slotIndex) { + super(frameCount, [ + Property.attachment + "|" + slotIndex + ]); + this.slotIndex = slotIndex; + this.attachmentNames = new Array(frameCount); + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time in seconds and the attachment name for the specified key frame. */ + setFrame(frame, time, attachmentName) { + this.frames[frame] = time; + this.attachmentNames[frame] = attachmentName; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + if (time < this.frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + this.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]); + } + setAttachment(skeleton, slot, attachmentName) { + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + } + }; + var DeformTimeline = class extends CurveTimeline { + slotIndex = 0; + /** The attachment that will be deformed. */ + attachment; + /** The vertices for each key frame. */ + vertices; + constructor(frameCount, bezierCount, slotIndex, attachment) { + super(frameCount, bezierCount, [ + Property.deform + "|" + slotIndex + "|" + attachment.id + ]); + this.slotIndex = slotIndex; + this.attachment = attachment; + this.vertices = new Array(frameCount); + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time in seconds and the vertices for the specified key frame. + * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */ + setFrame(frame, time, vertices) { + this.frames[frame] = time; + this.vertices[frame] = vertices; + } + /** @param value1 Ignored (0 is used for a deform timeline). + * @param value2 Ignored (1 is used for a deform timeline). */ + setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) { + let curves = this.curves; + let i = this.getFrameCount() + bezier * 18; + if (value == 0) + curves[frame] = 2 + i; + let tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06; + let dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3, dddy = (cy1 - cy2 + 0.33333333) * 0.018; + let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy; + let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667; + let x = time1 + dx, y = dy; + for (let n = i + 18; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dx += ddx; + dy += ddy; + ddx += dddx; + ddy += dddy; + x += dx; + y += dy; + } + } + getCurvePercent(time, frame) { + let curves = this.curves; + let i = curves[frame]; + switch (i) { + case 0: + let x2 = this.frames[frame]; + return (time - x2) / (this.frames[frame + this.getFrameEntries()] - x2); + case 1: + return 0; + } + i -= 2; + if (curves[i] > time) { + let x2 = this.frames[frame]; + return curves[i + 1] * (time - x2) / (curves[i] - x2); + } + let n = i + 18; + for (i += 2; i < n; i += 2) { + if (curves[i] >= time) { + let x2 = curves[i - 2], y2 = curves[i - 1]; + return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2); + } + } + let x = curves[n - 2], y = curves[n - 1]; + return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x); + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + let slotAttachment = slot.getAttachment(); + if (!slotAttachment) + return; + if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.timelineAttachment != this.attachment) + return; + let deform = slot.deform; + if (deform.length == 0) + blend = MixBlend.setup; + let vertices = this.vertices; + let vertexCount = vertices[0].length; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + deform.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deform.length = 0; + return; + } + deform.length = vertexCount; + let vertexAttachment = slotAttachment; + if (!vertexAttachment.bones) { + let setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform[i] += (setupVertices[i] - deform[i]) * alpha; + } else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform[i] *= alpha; + } + } + return; + } + deform.length = vertexCount; + if (time >= frames[frames.length - 1]) { + let lastVertices = vertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + let vertexAttachment = slotAttachment; + if (!vertexAttachment.bones) { + let setupVertices = vertexAttachment.vertices; + for (let i2 = 0; i2 < vertexCount; i2++) + deform[i2] += lastVertices[i2] - setupVertices[i2]; + } else { + for (let i2 = 0; i2 < vertexCount; i2++) + deform[i2] += lastVertices[i2]; + } + } else + Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } else { + switch (blend) { + case MixBlend.setup: { + let vertexAttachment2 = slotAttachment; + if (!vertexAttachment2.bones) { + let setupVertices = vertexAttachment2.vertices; + for (let i2 = 0; i2 < vertexCount; i2++) { + let setup = setupVertices[i2]; + deform[i2] = setup + (lastVertices[i2] - setup) * alpha; + } + } else { + for (let i2 = 0; i2 < vertexCount; i2++) + deform[i2] = lastVertices[i2] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (let i2 = 0; i2 < vertexCount; i2++) + deform[i2] += (lastVertices[i2] - deform[i2]) * alpha; + break; + case MixBlend.add: + let vertexAttachment = slotAttachment; + if (!vertexAttachment.bones) { + let setupVertices = vertexAttachment.vertices; + for (let i2 = 0; i2 < vertexCount; i2++) + deform[i2] += (lastVertices[i2] - setupVertices[i2]) * alpha; + } else { + for (let i2 = 0; i2 < vertexCount; i2++) + deform[i2] += lastVertices[i2] * alpha; + } + } + } + return; + } + let frame = Timeline.search1(frames, time); + let percent = this.getCurvePercent(time, frame); + let prevVertices = vertices[frame]; + let nextVertices = vertices[frame + 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + let vertexAttachment = slotAttachment; + if (!vertexAttachment.bones) { + let setupVertices = vertexAttachment.vertices; + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2]; + deform[i2] += prev + (nextVertices[i2] - prev) * percent - setupVertices[i2]; + } + } else { + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2]; + deform[i2] += prev + (nextVertices[i2] - prev) * percent; + } + } + } else { + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2]; + deform[i2] = prev + (nextVertices[i2] - prev) * percent; + } + } + } else { + switch (blend) { + case MixBlend.setup: { + let vertexAttachment2 = slotAttachment; + if (!vertexAttachment2.bones) { + let setupVertices = vertexAttachment2.vertices; + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2], setup = setupVertices[i2]; + deform[i2] = setup + (prev + (nextVertices[i2] - prev) * percent - setup) * alpha; + } + } else { + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2]; + deform[i2] = (prev + (nextVertices[i2] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2]; + deform[i2] += (prev + (nextVertices[i2] - prev) * percent - deform[i2]) * alpha; + } + break; + case MixBlend.add: + let vertexAttachment = slotAttachment; + if (!vertexAttachment.bones) { + let setupVertices = vertexAttachment.vertices; + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2]; + deform[i2] += (prev + (nextVertices[i2] - prev) * percent - setupVertices[i2]) * alpha; + } + } else { + for (let i2 = 0; i2 < vertexCount; i2++) { + let prev = prevVertices[i2]; + deform[i2] += (prev + (nextVertices[i2] - prev) * percent) * alpha; + } + } + } + } + } + }; + var EventTimeline = class _EventTimeline extends Timeline { + static propertyIds = ["" + Property.event]; + /** The event for each key frame. */ + events; + constructor(frameCount) { + super(frameCount, _EventTimeline.propertyIds); + this.events = new Array(frameCount); + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time in seconds and the event for the specified key frame. */ + setFrame(frame, event) { + this.frames[frame] = event.time; + this.events[frame] = event; + } + /** Fires events for frames > `lastTime` and <= `time`. */ + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (!firedEvents) + return; + let frames = this.frames; + let frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) + return; + let i = 0; + if (lastTime < frames[0]) + i = 0; + else { + i = Timeline.search1(frames, lastTime) + 1; + let frameTime = frames[i]; + while (i > 0) { + if (frames[i - 1] != frameTime) + break; + i--; + } + } + for (; i < frameCount && time >= frames[i]; i++) + firedEvents.push(this.events[i]); + } + }; + var DrawOrderTimeline = class _DrawOrderTimeline extends Timeline { + static propertyIds = ["" + Property.drawOrder]; + /** The draw order for each key frame. See {@link #setFrame(int, float, int[])}. */ + drawOrders; + constructor(frameCount) { + super(frameCount, _DrawOrderTimeline.propertyIds); + this.drawOrders = new Array(frameCount); + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time in seconds and the draw order for the specified key frame. + * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose + * draw order. */ + setFrame(frame, time, drawOrder) { + this.frames[frame] = time; + this.drawOrders[frame] = drawOrder; + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + if (time < this.frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + let idx = Timeline.search1(this.frames, time); + let drawOrderToSetupIndex = this.drawOrders[idx]; + if (!drawOrderToSetupIndex) + Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + else { + let drawOrder = skeleton.drawOrder; + let slots = skeleton.slots; + for (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + } + }; + var IkConstraintTimeline = class extends CurveTimeline { + /** The index of the IK constraint in {@link Skeleton#getIkConstraints()} that will be changed when this timeline is applied */ + constraintIndex = 0; + constructor(frameCount, bezierCount, ikConstraintIndex) { + super(frameCount, bezierCount, [ + Property.ikConstraint + "|" + ikConstraintIndex + ]); + this.constraintIndex = ikConstraintIndex; + } + getFrameEntries() { + return 6; + } + /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */ + setFrame(frame, time, mix, softness, bendDirection, compress, stretch) { + frame *= 6; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*MIX*/ + ] = mix; + this.frames[ + frame + 2 + /*SOFTNESS*/ + ] = softness; + this.frames[ + frame + 3 + /*BEND_DIRECTION*/ + ] = bendDirection; + this.frames[ + frame + 4 + /*COMPRESS*/ + ] = compress ? 1 : 0; + this.frames[ + frame + 5 + /*STRETCH*/ + ] = stretch ? 1 : 0; + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let constraint = skeleton.ikConstraints[this.constraintIndex]; + if (!constraint.active) + return; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + let mix = 0, softness = 0; + let i = Timeline.search( + frames, + time, + 6 + /*ENTRIES*/ + ); + let curveType = this.curves[ + i / 6 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: + let before = frames[i]; + mix = frames[ + i + 1 + /*MIX*/ + ]; + softness = frames[ + i + 2 + /*SOFTNESS*/ + ]; + let t = (time - before) / (frames[ + i + 6 + /*ENTRIES*/ + ] - before); + mix += (frames[ + i + 6 + 1 + /*MIX*/ + ] - mix) * t; + softness += (frames[ + i + 6 + 2 + /*SOFTNESS*/ + ] - softness) * t; + break; + case 1: + mix = frames[ + i + 1 + /*MIX*/ + ]; + softness = frames[ + i + 2 + /*SOFTNESS*/ + ]; + break; + default: + mix = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + softness = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + (softness - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = frames[ + i + 3 + /*BEND_DIRECTION*/ + ]; + constraint.compress = frames[ + i + 4 + /*COMPRESS*/ + ] != 0; + constraint.stretch = frames[ + i + 5 + /*STRETCH*/ + ] != 0; + } + } else { + constraint.mix += (mix - constraint.mix) * alpha; + constraint.softness += (softness - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[ + i + 3 + /*BEND_DIRECTION*/ + ]; + constraint.compress = frames[ + i + 4 + /*COMPRESS*/ + ] != 0; + constraint.stretch = frames[ + i + 5 + /*STRETCH*/ + ] != 0; + } + } + } + }; + var TransformConstraintTimeline = class extends CurveTimeline { + /** The index of the transform constraint slot in {@link Skeleton#transformConstraints} that will be changed. */ + constraintIndex = 0; + constructor(frameCount, bezierCount, transformConstraintIndex) { + super(frameCount, bezierCount, [ + Property.transformConstraint + "|" + transformConstraintIndex + ]); + this.constraintIndex = transformConstraintIndex; + } + getFrameEntries() { + return 7; + } + /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */ + setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY) { + let frames = this.frames; + frame *= 7; + frames[frame] = time; + frames[ + frame + 1 + /*ROTATE*/ + ] = mixRotate; + frames[ + frame + 2 + /*X*/ + ] = mixX; + frames[ + frame + 3 + /*Y*/ + ] = mixY; + frames[ + frame + 4 + /*SCALEX*/ + ] = mixScaleX; + frames[ + frame + 5 + /*SCALEY*/ + ] = mixScaleY; + frames[ + frame + 6 + /*SHEARY*/ + ] = mixShearY; + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let constraint = skeleton.transformConstraints[this.constraintIndex]; + if (!constraint.active) + return; + let frames = this.frames; + if (time < frames[0]) { + let data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.mixRotate = data.mixRotate; + constraint.mixX = data.mixX; + constraint.mixY = data.mixY; + constraint.mixScaleX = data.mixScaleX; + constraint.mixScaleY = data.mixScaleY; + constraint.mixShearY = data.mixShearY; + return; + case MixBlend.first: + constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha; + constraint.mixX += (data.mixX - constraint.mixX) * alpha; + constraint.mixY += (data.mixY - constraint.mixY) * alpha; + constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha; + constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha; + constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha; + } + return; + } + let rotate, x, y, scaleX, scaleY, shearY; + let i = Timeline.search( + frames, + time, + 7 + /*ENTRIES*/ + ); + let curveType = this.curves[ + i / 7 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: + let before = frames[i]; + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + scaleX = frames[ + i + 4 + /*SCALEX*/ + ]; + scaleY = frames[ + i + 5 + /*SCALEY*/ + ]; + shearY = frames[ + i + 6 + /*SHEARY*/ + ]; + let t = (time - before) / (frames[ + i + 7 + /*ENTRIES*/ + ] - before); + rotate += (frames[ + i + 7 + 1 + /*ROTATE*/ + ] - rotate) * t; + x += (frames[ + i + 7 + 2 + /*X*/ + ] - x) * t; + y += (frames[ + i + 7 + 3 + /*Y*/ + ] - y) * t; + scaleX += (frames[ + i + 7 + 4 + /*SCALEX*/ + ] - scaleX) * t; + scaleY += (frames[ + i + 7 + 5 + /*SCALEY*/ + ] - scaleY) * t; + shearY += (frames[ + i + 7 + 6 + /*SHEARY*/ + ] - shearY) * t; + break; + case 1: + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + scaleX = frames[ + i + 4 + /*SCALEX*/ + ]; + scaleY = frames[ + i + 5 + /*SCALEY*/ + ]; + shearY = frames[ + i + 6 + /*SHEARY*/ + ]; + break; + default: + rotate = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + x = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + scaleX = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + scaleY = this.getBezierValue( + time, + i, + 5, + curveType + 18 * 4 - 2 + /*BEZIER*/ + ); + shearY = this.getBezierValue( + time, + i, + 6, + curveType + 18 * 5 - 2 + /*BEZIER*/ + ); + } + if (blend == MixBlend.setup) { + let data = constraint.data; + constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha; + constraint.mixX = data.mixX + (x - data.mixX) * alpha; + constraint.mixY = data.mixY + (y - data.mixY) * alpha; + constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha; + constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha; + constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha; + } else { + constraint.mixRotate += (rotate - constraint.mixRotate) * alpha; + constraint.mixX += (x - constraint.mixX) * alpha; + constraint.mixY += (y - constraint.mixY) * alpha; + constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha; + constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha; + constraint.mixShearY += (shearY - constraint.mixShearY) * alpha; + } + } + }; + var PathConstraintPositionTimeline = class extends CurveTimeline1 { + /** The index of the path constraint in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is + * applied. */ + constraintIndex = 0; + constructor(frameCount, bezierCount, pathConstraintIndex) { + super(frameCount, bezierCount, Property.pathConstraintPosition + "|" + pathConstraintIndex); + this.constraintIndex = pathConstraintIndex; + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let constraint = skeleton.pathConstraints[this.constraintIndex]; + if (constraint.active) + constraint.position = this.getAbsoluteValue(time, alpha, blend, constraint.position, constraint.data.position); + } + }; + var PathConstraintSpacingTimeline = class extends CurveTimeline1 { + /** The index of the path constraint in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is + * applied. */ + constraintIndex = 0; + constructor(frameCount, bezierCount, pathConstraintIndex) { + super(frameCount, bezierCount, Property.pathConstraintSpacing + "|" + pathConstraintIndex); + this.constraintIndex = pathConstraintIndex; + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let constraint = skeleton.pathConstraints[this.constraintIndex]; + if (constraint.active) + constraint.spacing = this.getAbsoluteValue(time, alpha, blend, constraint.spacing, constraint.data.spacing); + } + }; + var PathConstraintMixTimeline = class extends CurveTimeline { + /** The index of the path constraint in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is + * applied. */ + constraintIndex = 0; + constructor(frameCount, bezierCount, pathConstraintIndex) { + super(frameCount, bezierCount, [ + Property.pathConstraintMix + "|" + pathConstraintIndex + ]); + this.constraintIndex = pathConstraintIndex; + } + getFrameEntries() { + return 4; + } + setFrame(frame, time, mixRotate, mixX, mixY) { + let frames = this.frames; + frame <<= 2; + frames[frame] = time; + frames[ + frame + 1 + /*ROTATE*/ + ] = mixRotate; + frames[ + frame + 2 + /*X*/ + ] = mixX; + frames[ + frame + 3 + /*Y*/ + ] = mixY; + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let constraint = skeleton.pathConstraints[this.constraintIndex]; + if (!constraint.active) + return; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mixRotate = constraint.data.mixRotate; + constraint.mixX = constraint.data.mixX; + constraint.mixY = constraint.data.mixY; + return; + case MixBlend.first: + constraint.mixRotate += (constraint.data.mixRotate - constraint.mixRotate) * alpha; + constraint.mixX += (constraint.data.mixX - constraint.mixX) * alpha; + constraint.mixY += (constraint.data.mixY - constraint.mixY) * alpha; + } + return; + } + let rotate, x, y; + let i = Timeline.search( + frames, + time, + 4 + /*ENTRIES*/ + ); + let curveType = this.curves[i >> 2]; + switch (curveType) { + case 0: + let before = frames[i]; + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + let t = (time - before) / (frames[ + i + 4 + /*ENTRIES*/ + ] - before); + rotate += (frames[ + i + 4 + 1 + /*ROTATE*/ + ] - rotate) * t; + x += (frames[ + i + 4 + 2 + /*X*/ + ] - x) * t; + y += (frames[ + i + 4 + 3 + /*Y*/ + ] - y) * t; + break; + case 1: + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + break; + default: + rotate = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + x = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + } + if (blend == MixBlend.setup) { + let data = constraint.data; + constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha; + constraint.mixX = data.mixX + (x - data.mixX) * alpha; + constraint.mixY = data.mixY + (y - data.mixY) * alpha; + } else { + constraint.mixRotate += (rotate - constraint.mixRotate) * alpha; + constraint.mixX += (x - constraint.mixX) * alpha; + constraint.mixY += (y - constraint.mixY) * alpha; + } + } + }; + var PhysicsConstraintTimeline = class extends CurveTimeline1 { + /** The index of the physics constraint in {@link Skeleton#getPhysicsConstraints()} that will be changed when this timeline + * is applied, or -1 if all physics constraints in the skeleton will be changed. */ + constraintIndex = 0; + /** @param physicsConstraintIndex -1 for all physics constraints in the skeleton. */ + constructor(frameCount, bezierCount, physicsConstraintIndex, property) { + super(frameCount, bezierCount, property + "|" + physicsConstraintIndex); + this.constraintIndex = physicsConstraintIndex; + } + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let constraint; + if (this.constraintIndex == -1) { + const value = time >= this.frames[0] ? this.getCurveValue(time) : 0; + for (const constraint2 of skeleton.physicsConstraints) { + if (constraint2.active && this.global(constraint2.data)) + this.set(constraint2, this.getAbsoluteValue2(time, alpha, blend, this.get(constraint2), this.setup(constraint2), value)); + } + } else { + constraint = skeleton.physicsConstraints[this.constraintIndex]; + if (constraint.active) + this.set(constraint, this.getAbsoluteValue(time, alpha, blend, this.get(constraint), this.setup(constraint))); + } + } + }; + var PhysicsConstraintInertiaTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, physicsConstraintIndex) { + super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintInertia); + } + setup(constraint) { + return constraint.data.inertia; + } + get(constraint) { + return constraint.inertia; + } + set(constraint, value) { + constraint.inertia = value; + } + global(constraint) { + return constraint.inertiaGlobal; + } + }; + var PhysicsConstraintStrengthTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, physicsConstraintIndex) { + super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintStrength); + } + setup(constraint) { + return constraint.data.strength; + } + get(constraint) { + return constraint.strength; + } + set(constraint, value) { + constraint.strength = value; + } + global(constraint) { + return constraint.strengthGlobal; + } + }; + var PhysicsConstraintDampingTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, physicsConstraintIndex) { + super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintDamping); + } + setup(constraint) { + return constraint.data.damping; + } + get(constraint) { + return constraint.damping; + } + set(constraint, value) { + constraint.damping = value; + } + global(constraint) { + return constraint.dampingGlobal; + } + }; + var PhysicsConstraintMassTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, physicsConstraintIndex) { + super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintMass); + } + setup(constraint) { + return 1 / constraint.data.massInverse; + } + get(constraint) { + return 1 / constraint.massInverse; + } + set(constraint, value) { + constraint.massInverse = 1 / value; + } + global(constraint) { + return constraint.massGlobal; + } + }; + var PhysicsConstraintWindTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, physicsConstraintIndex) { + super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintWind); + } + setup(constraint) { + return constraint.data.wind; + } + get(constraint) { + return constraint.wind; + } + set(constraint, value) { + constraint.wind = value; + } + global(constraint) { + return constraint.windGlobal; + } + }; + var PhysicsConstraintGravityTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, physicsConstraintIndex) { + super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintGravity); + } + setup(constraint) { + return constraint.data.gravity; + } + get(constraint) { + return constraint.gravity; + } + set(constraint, value) { + constraint.gravity = value; + } + global(constraint) { + return constraint.gravityGlobal; + } + }; + var PhysicsConstraintMixTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, physicsConstraintIndex) { + super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintMix); + } + setup(constraint) { + return constraint.data.mix; + } + get(constraint) { + return constraint.mix; + } + set(constraint, value) { + constraint.mix = value; + } + global(constraint) { + return constraint.mixGlobal; + } + }; + var PhysicsConstraintResetTimeline = class _PhysicsConstraintResetTimeline extends Timeline { + static propertyIds = [Property.physicsConstraintReset.toString()]; + /** The index of the physics constraint in {@link Skeleton#getPhysicsConstraints()} that will be reset when this timeline is + * applied, or -1 if all physics constraints in the skeleton will be reset. */ + constraintIndex; + /** @param physicsConstraintIndex -1 for all physics constraints in the skeleton. */ + constructor(frameCount, physicsConstraintIndex) { + super(frameCount, _PhysicsConstraintResetTimeline.propertyIds); + this.constraintIndex = physicsConstraintIndex; + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time for the specified frame. + * @param frame Between 0 and frameCount, inclusive. */ + setFrame(frame, time) { + this.frames[frame] = time; + } + /** Resets the physics constraint when frames > lastTime and <= time. */ + apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + let constraint; + if (this.constraintIndex != -1) { + constraint = skeleton.physicsConstraints[this.constraintIndex]; + if (!constraint.active) + return; + } + const frames = this.frames; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, blend, direction); + lastTime = -1; + } else if (lastTime >= frames[frames.length - 1]) + return; + if (time < frames[0]) + return; + if (lastTime < frames[0] || time >= frames[Timeline.search1(frames, lastTime) + 1]) { + if (constraint != null) + constraint.reset(); + else { + for (const constraint2 of skeleton.physicsConstraints) { + if (constraint2.active) + constraint2.reset(); + } + } + } + } + }; + var SequenceTimeline = class _SequenceTimeline extends Timeline { + static ENTRIES = 3; + static MODE = 1; + static DELAY = 2; + slotIndex; + attachment; + constructor(frameCount, slotIndex, attachment) { + super(frameCount, [ + Property.sequence + "|" + slotIndex + "|" + attachment.sequence.id + ]); + this.slotIndex = slotIndex; + this.attachment = attachment; + } + getFrameEntries() { + return _SequenceTimeline.ENTRIES; + } + getSlotIndex() { + return this.slotIndex; + } + getAttachment() { + return this.attachment; + } + /** Sets the time, mode, index, and frame time for the specified frame. + * @param frame Between 0 and frameCount, inclusive. + * @param time Seconds between frames. */ + setFrame(frame, time, mode, index, delay) { + let frames = this.frames; + frame *= _SequenceTimeline.ENTRIES; + frames[frame] = time; + frames[frame + _SequenceTimeline.MODE] = mode | index << 4; + frames[frame + _SequenceTimeline.DELAY] = delay; + } + apply(skeleton, lastTime, time, events, alpha, blend, direction) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + let slotAttachment = slot.attachment; + let attachment = this.attachment; + if (slotAttachment != attachment) { + if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.timelineAttachment != attachment) + return; + } + let frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + slot.sequenceIndex = -1; + return; + } + let i = Timeline.search(frames, time, _SequenceTimeline.ENTRIES); + let before = frames[i]; + let modeAndIndex = frames[i + _SequenceTimeline.MODE]; + let delay = frames[i + _SequenceTimeline.DELAY]; + if (!this.attachment.sequence) + return; + let index = modeAndIndex >> 4, count = this.attachment.sequence.regions.length; + let mode = SequenceModeValues[modeAndIndex & 15]; + if (mode != SequenceMode.hold) { + index += (time - before) / delay + 1e-5 | 0; + switch (mode) { + case SequenceMode.once: + index = Math.min(count - 1, index); + break; + case SequenceMode.loop: + index %= count; + break; + case SequenceMode.pingpong: { + let n = (count << 1) - 2; + index = n == 0 ? 0 : index % n; + if (index >= count) + index = n - index; + break; + } + case SequenceMode.onceReverse: + index = Math.max(count - 1 - index, 0); + break; + case SequenceMode.loopReverse: + index = count - 1 - index % count; + break; + case SequenceMode.pingpongReverse: { + let n = (count << 1) - 2; + index = n == 0 ? 0 : (index + count - 1) % n; + if (index >= count) + index = n - index; + } + } + } + slot.sequenceIndex = index; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/AnimationState.js + var AnimationState = class _AnimationState { + static _emptyAnimation = new Animation("", [], 0); + static emptyAnimation() { + return _AnimationState._emptyAnimation; + } + /** The AnimationStateData to look up mix durations. */ + data; + /** The list of tracks that currently have animations, which may contain null entries. */ + tracks = new Array(); + /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower + * or faster. Defaults to 1. + * + * See TrackEntry {@link TrackEntry#timeScale} for affecting a single animation. */ + timeScale = 1; + unkeyedState = 0; + events = new Array(); + listeners = new Array(); + queue = new EventQueue(this); + propertyIDs = new StringSet(); + animationsChanged = false; + trackEntryPool = new Pool(() => new TrackEntry()); + constructor(data) { + this.data = data; + } + /** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */ + update(delta) { + delta *= this.timeScale; + let tracks = this.tracks; + for (let i = 0, n = tracks.length; i < n; i++) { + let current = tracks[i]; + if (!current) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + let currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + let next = current.next; + if (next) { + let nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } else if (current.trackLast >= current.trackEnd && !current.mixingFrom) { + tracks[i] = null; + this.queue.end(current); + this.clearNext(current); + continue; + } + if (current.mixingFrom && this.updateMixingFrom(current, delta)) { + let from = current.mixingFrom; + current.mixingFrom = null; + if (from) + from.mixingTo = null; + while (from) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + } + /** Returns true when all mixing from entries are complete. */ + updateMixingFrom(to, delta) { + let from = to.mixingFrom; + if (!from) + return true; + let finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + } + /** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the + * animation state can be applied to multiple skeletons to pose them identically. + * @returns True if any animations were applied. */ + apply(skeleton) { + if (!skeleton) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + let events = this.events; + let tracks = this.tracks; + let applied = false; + for (let i2 = 0, n2 = tracks.length; i2 < n2; i2++) { + let current = tracks[i2]; + if (!current || current.delay > 0) + continue; + applied = true; + let blend = i2 == 0 ? MixBlend.first : current.mixBlend; + let alpha = current.alpha; + if (current.mixingFrom) + alpha *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && !current.next) + alpha = 0; + let attachments = alpha >= current.alphaAttachmentThreshold; + let animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime; + let applyEvents = events; + if (current.reverse) { + applyTime = current.animation.duration - applyTime; + applyEvents = null; + } + let timelines = current.animation.timelines; + let timelineCount = timelines.length; + if (i2 == 0 && alpha == 1 || blend == MixBlend.add) { + if (i2 == 0) + attachments = true; + for (let ii = 0; ii < timelineCount; ii++) { + Utils.webkit602BugfixHelper(alpha, blend); + var timeline = timelines[ii]; + if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, attachments); + else + timeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, blend, MixDirection.mixIn); + } + } else { + let timelineMode = current.timelineMode; + let shortestRotation = current.shortestRotation; + let firstFrame = !shortestRotation && current.timelinesRotation.length != timelineCount << 1; + if (firstFrame) + current.timelinesRotation.length = timelineCount << 1; + for (let ii = 0; ii < timelineCount; ii++) { + let timeline2 = timelines[ii]; + let timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup; + if (!shortestRotation && timeline2 instanceof RotateTimeline) { + this.applyRotateTimeline(timeline2, skeleton, applyTime, alpha, timelineBlend, current.timelinesRotation, ii << 1, firstFrame); + } else if (timeline2 instanceof AttachmentTimeline) { + this.applyAttachmentTimeline(timeline2, skeleton, applyTime, blend, attachments); + } else { + Utils.webkit602BugfixHelper(alpha, blend); + timeline2.apply(skeleton, animationLast, applyTime, applyEvents, alpha, timelineBlend, MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + } + applyMixingFrom(to, skeleton, blend) { + let from = to.mixingFrom; + if (from.mixingFrom) + this.applyMixingFrom(from, skeleton, blend); + let mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == MixBlend.first) + blend = MixBlend.setup; + } else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != MixBlend.first) + blend = from.mixBlend; + } + let attachments = mix < from.mixAttachmentThreshold, drawOrder = mix < from.mixDrawOrderThreshold; + let timelines = from.animation.timelines; + let timelineCount = timelines.length; + let alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + let animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime; + let events = null; + if (from.reverse) + applyTime = from.animation.duration - applyTime; + else if (mix < from.eventThreshold) + events = this.events; + if (blend == MixBlend.add) { + for (let i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, MixDirection.mixOut); + } else { + let timelineMode = from.timelineMode; + let timelineHoldMix = from.timelineHoldMix; + let shortestRotation = from.shortestRotation; + let firstFrame = !shortestRotation && from.timelinesRotation.length != timelineCount << 1; + if (firstFrame) + from.timelinesRotation.length = timelineCount << 1; + from.totalAlpha = 0; + for (let i = 0; i < timelineCount; i++) { + let timeline = timelines[i]; + let direction = MixDirection.mixOut; + let timelineBlend; + let alpha = 0; + switch (timelineMode[i]) { + case SUBSEQUENT: + if (!drawOrder && timeline instanceof DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaMix; + break; + case HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case HOLD_FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = MixBlend.setup; + let holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (!shortestRotation && timeline instanceof RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, applyTime, timelineBlend, attachments && alpha >= from.alphaAttachmentThreshold); + else { + Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == MixBlend.setup) + direction = MixDirection.mixIn; + timeline.apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + } + applyAttachmentTimeline(timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + if (time < timeline.frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } else + this.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], attachments); + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + SETUP; + } + setAttachment(skeleton, slot, attachmentName, attachments) { + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + CURRENT; + } + applyRotateTimeline(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn); + return; + } + let bone = skeleton.bones[timeline.boneIndex]; + if (!bone.active) + return; + let frames = timeline.frames; + let r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } else { + r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation; + r2 = bone.data.rotation + timeline.getCurveValue(time); + } + let total = 0, diff = r2 - r1; + diff -= Math.ceil(diff / 360 - 0.5) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } else { + let lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + let loops = lastTotal - lastTotal % 360; + total = diff + loops; + let current = diff >= 0, dir = lastTotal >= 0; + if (Math.abs(lastDiff) <= 90 && MathUtils.signum(lastDiff) != MathUtils.signum(diff)) { + if (Math.abs(lastTotal - loops) > 180) { + total += 360 * MathUtils.signum(lastTotal); + dir = current; + } else if (loops != 0) + total -= 360 * MathUtils.signum(lastTotal); + else + dir = current; + } + if (dir != current) + total += 360 * MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + bone.rotation = r1 + total * alpha; + } + queueEvents(entry, animationTime) { + let animationStart = entry.animationStart, animationEnd = entry.animationEnd; + let duration = animationEnd - animationStart; + let trackLastWrapped = entry.trackLast % duration; + let events = this.events; + let i = 0, n = events.length; + for (; i < n; i++) { + let event = events[i]; + if (event.time < trackLastWrapped) + break; + if (event.time > animationEnd) + continue; + this.queue.event(entry, event); + } + let complete = false; + if (entry.loop) { + if (duration == 0) + complete = true; + else { + const cycles = Math.floor(entry.trackTime / duration); + complete = cycles > 0 && cycles > Math.floor(entry.trackLast / duration); + } + } else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + let event = events[i]; + if (event.time < animationStart) + continue; + this.queue.event(entry, event); + } + } + /** Removes all animations from all tracks, leaving skeletons in their current pose. + * + * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose, + * rather than leaving them in their current pose. */ + clearTracks() { + let oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + /** Removes all animations from the track, leaving skeletons in their current pose. + * + * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose, + * rather than leaving them in their current pose. */ + clearTrack(trackIndex) { + if (trackIndex >= this.tracks.length) + return; + let current = this.tracks[trackIndex]; + if (!current) + return; + this.queue.end(current); + this.clearNext(current); + let entry = current; + while (true) { + let from = entry.mixingFrom; + if (!from) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + } + setCurrent(index, current, interrupt) { + let from = this.expandToIndex(index); + this.tracks[index] = current; + current.previous = null; + if (from) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + } + /** Sets an animation by name. + * + * See {@link #setAnimationWith()}. */ + setAnimation(trackIndex, animationName, loop = false) { + let animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + } + /** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never + * applied to a skeleton, it is replaced (not mixed from). + * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its + * duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared. + * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener#dispose()} event occurs. */ + setAnimationWith(trackIndex, animation, loop = false) { + if (!animation) + throw new Error("animation cannot be null."); + let interrupt = true; + let current = this.expandToIndex(trackIndex); + if (current) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.clearNext(current); + current = current.mixingFrom; + interrupt = false; + } else + this.clearNext(current); + } + let entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + } + /** Queues an animation by name. + * + * See {@link #addAnimationWith()}. */ + addAnimation(trackIndex, animationName, loop = false, delay = 0) { + let animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + } + /** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is + * equivalent to calling {@link #setAnimationWith()}. + * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry + * minus any mix duration (from the {@link AnimationStateData}) plus the specified `delay` (ie the mix + * ends at (`delay` = 0) or before (`delay` < 0) the previous track entry duration). If the + * previous entry is looping, its next loop completion is used instead of its duration. + * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener#dispose()} event occurs. */ + addAnimationWith(trackIndex, animation, loop = false, delay = 0) { + if (!animation) + throw new Error("animation cannot be null."); + let last = this.expandToIndex(trackIndex); + if (last) { + while (last.next) + last = last.next; + } + let entry = this.trackEntry(trackIndex, animation, loop, last); + if (!last) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } else { + last.next = entry; + entry.previous = last; + if (delay <= 0) + delay += last.getTrackComplete() - entry.mixDuration; + } + entry.delay = delay; + return entry; + } + /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's + * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out. + * + * Mixing out is done by setting an empty animation with a mix duration using either {@link #setEmptyAnimation()}, + * {@link #setEmptyAnimations()}, or {@link #addEmptyAnimation()}. Mixing to an empty animation causes + * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation + * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of + * 0 still mixes out over one frame. + * + * Mixing in is done by first setting an empty animation, then adding an animation using + * {@link #addAnimation()} and on the returned track entry, set the + * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and + * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the + * setup pose value if no lower tracks key the property to the value keyed in the new animation. */ + setEmptyAnimation(trackIndex, mixDuration = 0) { + let entry = this.setAnimationWith(trackIndex, _AnimationState.emptyAnimation(), false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's + * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling + * {@link #setEmptyAnimation()}. + * + * See {@link #setEmptyAnimation()}. + * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry + * minus any mix duration plus the specified `delay` (ie the mix ends at (`delay` = 0) or + * before (`delay` < 0) the previous track entry duration). If the previous entry is looping, its next + * loop completion is used instead of its duration. + * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener#dispose()} event occurs. */ + addEmptyAnimation(trackIndex, mixDuration = 0, delay = 0) { + let entry = this.addAnimationWith(trackIndex, _AnimationState.emptyAnimation(), false, delay); + if (delay <= 0) + entry.delay += entry.mixDuration - mixDuration; + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix + * duration. */ + setEmptyAnimations(mixDuration = 0) { + let oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) { + let current = this.tracks[i]; + if (current) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + expandToIndex(index) { + if (index < this.tracks.length) + return this.tracks[index]; + Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + } + /** @param last May be null. */ + trackEntry(trackIndex, animation, loop, last) { + let entry = this.trackEntryPool.obtain(); + entry.reset(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.reverse = false; + entry.shortestRotation = false; + entry.eventThreshold = 0; + entry.alphaAttachmentThreshold = 0; + entry.mixAttachmentThreshold = 0; + entry.mixDrawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.mixTime = 0; + entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation); + entry.interruptAlpha = 1; + entry.totalAlpha = 0; + entry.mixBlend = MixBlend.replace; + return entry; + } + /** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */ + clearNext(entry) { + let next = entry.next; + while (next) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + } + _animationsChanged() { + this.animationsChanged = false; + this.propertyIDs.clear(); + let tracks = this.tracks; + for (let i = 0, n = tracks.length; i < n; i++) { + let entry = tracks[i]; + if (!entry) + continue; + while (entry.mixingFrom) + entry = entry.mixingFrom; + do { + if (!entry.mixingTo || entry.mixBlend != MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry); + } + } + computeHold(entry) { + let to = entry.mixingTo; + let timelines = entry.animation.timelines; + let timelinesCount = entry.animation.timelines.length; + let timelineMode = entry.timelineMode; + timelineMode.length = timelinesCount; + let timelineHoldMix = entry.timelineHoldMix; + timelineHoldMix.length = 0; + let propertyIDs = this.propertyIDs; + if (to && to.holdPrevious) { + for (let i = 0; i < timelinesCount; i++) + timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT; + return; + } + outer: + for (let i = 0; i < timelinesCount; i++) { + let timeline = timelines[i]; + let ids = timeline.getPropertyIds(); + if (!propertyIDs.addAll(ids)) + timelineMode[i] = SUBSEQUENT; + else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline || timeline instanceof EventTimeline || !to.animation.hasTimeline(ids)) { + timelineMode[i] = FIRST; + } else { + for (let next = to.mixingTo; next; next = next.mixingTo) { + if (next.animation.hasTimeline(ids)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = HOLD_MIX; + timelineHoldMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = HOLD_FIRST; + } + } + } + /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */ + getCurrent(trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + } + /** Adds a listener to receive events for all track entries. */ + addListener(listener) { + if (!listener) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + } + /** Removes the listener added with {@link #addListener()}. */ + removeListener(listener) { + let index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + } + /** Removes all listeners added with {@link #addListener()}. */ + clearListeners() { + this.listeners.length = 0; + } + /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an + * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery + * are not wanted because new animations are being set. */ + clearListenerNotifications() { + this.queue.clear(); + } + }; + var TrackEntry = class { + /** The animation to apply for this track entry. */ + animation = null; + previous = null; + /** The animation queued to start after this animation, or null. `next` makes up a linked list. */ + next = null; + /** The track entry for the previous animation when mixing from the previous animation to this animation, or null if no + * mixing is currently occuring. When mixing from multiple animations, `mixingFrom` makes up a linked list. */ + mixingFrom = null; + /** The track entry for the next animation when mixing from this animation to the next animation, or null if no mixing is + * currently occuring. When mixing to multiple animations, `mixingTo` makes up a linked list. */ + mixingTo = null; + /** The listener for events generated by this track entry, or null. + * + * A track entry returned from {@link AnimationState#setAnimation()} is already the current animation + * for the track, so the track entry listener {@link AnimationStateListener#start()} will not be called. */ + listener = null; + /** The index of the track where this track entry is either current or queued. + * + * See {@link AnimationState#getCurrent()}. */ + trackIndex = 0; + /** If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its + * duration. */ + loop = false; + /** If true, when mixing from the previous animation to this animation, the previous animation is applied as normal instead + * of being mixed out. + * + * When mixing between animations that key the same property, if a lower track also keys that property then the value will + * briefly dip toward the lower track value during the mix. This happens because the first animation mixes from 100% to 0% + * while the second animation mixes from 0% to 100%. Setting `holdPrevious` to true applies the first animation + * at 100% during the mix so the lower track value is overwritten. Such dipping does not occur on the lowest track which + * keys the property, only when a higher track also keys the property. + * + * Snapping will occur if `holdPrevious` is true and this animation does not key all the same properties as the + * previous animation. */ + holdPrevious = false; + reverse = false; + shortestRotation = false; + /** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the + * `eventThreshold`, event timelines are applied while this animation is being mixed out. Defaults to 0, so event + * timelines are not applied while this animation is being mixed out. */ + eventThreshold = 0; + /** When the mix percentage ({@link #mixtime} / {@link #mixDuration}) is less than the + * `attachmentThreshold`, attachment timelines are applied while this animation is being mixed out. Defaults to + * 0, so attachment timelines are not applied while this animation is being mixed out. */ + mixAttachmentThreshold = 0; + /** When {@link #getAlpha()} is greater than alphaAttachmentThreshold, attachment timelines are applied. + * Defaults to 0, so attachment timelines are always applied. */ + alphaAttachmentThreshold = 0; + /** When the mix percentage ({@link #getMixTime()} / {@link #getMixDuration()}) is less than the + * mixDrawOrderThreshold, draw order timelines are applied while this animation is being mixed out. Defaults to + * 0, so draw order timelines are not applied while this animation is being mixed out. */ + mixDrawOrderThreshold = 0; + /** Seconds when this animation starts, both initially and after looping. Defaults to 0. + * + * When changing the `animationStart` time, it often makes sense to set {@link #animationLast} to the same + * value to prevent timeline keys before the start time from triggering. */ + animationStart = 0; + /** Seconds for the last frame of this animation. Non-looping animations won't play past this time. Looping animations will + * loop back to {@link #animationStart} at this time. Defaults to the animation {@link Animation#duration}. */ + animationEnd = 0; + /** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. Eg, when this + * animation is applied, event timelines will fire all events between the `animationLast` time (exclusive) and + * `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this animation + * is applied. */ + animationLast = 0; + nextAnimationLast = 0; + /** Seconds to postpone playing the animation. When this track entry is the current track entry, `delay` + * postpones incrementing the {@link #trackTime}. When this track entry is queued, `delay` is the time from + * the start of the previous animation to when this track entry will become the current track entry (ie when the previous + * track entry {@link TrackEntry#trackTime} >= this track entry's `delay`). + * + * {@link #timeScale} affects the delay. */ + delay = 0; + /** Current time in seconds this track entry has been the current track entry. The track time determines + * {@link #animationTime}. The track time can be set to start the animation at a time other than 0, without affecting + * looping. */ + trackTime = 0; + trackLast = 0; + nextTrackLast = 0; + /** The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float + * value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time + * is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the + * properties keyed by the animation are set to the setup pose and the track is cleared. + * + * It may be desired to use {@link AnimationState#addEmptyAnimation()} rather than have the animation + * abruptly cease being applied. */ + trackEnd = 0; + /** Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or + * faster. Defaults to 1. + * + * {@link #mixTime} is not affected by track entry time scale, so {@link #mixDuration} may need to be adjusted to + * match the animation speed. + * + * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the + * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, assuming time scale to be 1. If + * the time scale is not 1, the delay may need to be adjusted. + * + * See AnimationState {@link AnimationState#timeScale} for affecting all animations. */ + timeScale = 0; + /** Values < 1 mix this animation with the skeleton's current pose (usually the pose resulting from lower tracks). Defaults + * to 1, which overwrites the skeleton's current pose with this animation. + * + * Typically track 0 is used to completely pose the skeleton, then alpha is used on higher tracks. It doesn't make sense to + * use alpha on track 0 if the skeleton pose is from the last frame render. */ + alpha = 0; + /** Seconds from 0 to the {@link #getMixDuration()} when mixing from the previous animation to this animation. May be + * slightly more than `mixDuration` when the mix is complete. */ + mixTime = 0; + /** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by AnimationStateData + * {@link AnimationStateData#getMix()} based on the animation before this animation (if any). + * + * A mix duration of 0 still mixes out over one frame to provide the track entry being mixed out a chance to revert the + * properties it was animating. + * + * The `mixDuration` can be set manually rather than use the value from + * {@link AnimationStateData#getMix()}. In that case, the `mixDuration` can be set for a new + * track entry only before {@link AnimationState#update(float)} is first called. + * + * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the + * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, not a mix duration set + * afterward. */ + _mixDuration = 0; + interruptAlpha = 0; + totalAlpha = 0; + get mixDuration() { + return this._mixDuration; + } + set mixDuration(mixDuration) { + this._mixDuration = mixDuration; + } + setMixDurationWithDelay(mixDuration, delay) { + this._mixDuration = mixDuration; + if (this.previous != null && delay <= 0) + delay += this.previous.getTrackComplete() - mixDuration; + this.delay = delay; + } + /** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which + * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to + * the values from the lower tracks. + * + * The `mixBlend` can be set for a new track entry only before {@link AnimationState#apply()} is first + * called. */ + mixBlend = MixBlend.replace; + timelineMode = new Array(); + timelineHoldMix = new Array(); + timelinesRotation = new Array(); + reset() { + this.next = null; + this.previous = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + } + /** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart} + * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the + * `animationStart` time. */ + getAnimationTime() { + if (this.loop) { + let duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return this.trackTime % duration + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + } + setAnimationLast(animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + } + /** Returns true if at least one loop has been completed. + * + * See {@link AnimationStateListener#complete()}. */ + isComplete() { + return this.trackTime >= this.animationEnd - this.animationStart; + } + /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the + * long way around when using {@link #alpha} and starting animations on other tracks. + * + * Mixing with {@link MixBlend#replace} involves finding a rotation between two others, which has two possible solutions: + * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long + * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the + * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */ + resetRotationDirections() { + this.timelinesRotation.length = 0; + } + getTrackComplete() { + let duration = this.animationEnd - this.animationStart; + if (duration != 0) { + if (this.loop) + return duration * (1 + (this.trackTime / duration | 0)); + if (this.trackTime < duration) + return duration; + } + return this.trackTime; + } + /** Returns true if this track entry has been applied at least once. + *

+ * See {@link AnimationState#apply(Skeleton)}. */ + wasApplied() { + return this.nextTrackLast != -1; + } + }; + var EventQueue = class { + objects = []; + drainDisabled = false; + animState; + constructor(animState) { + this.animState = animState; + } + start(entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + interrupt(entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + } + end(entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + dispose(entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + } + complete(entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + } + event(entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + } + drain() { + if (this.drainDisabled) + return; + this.drainDisabled = true; + let objects = this.objects; + let listeners = this.animState.listeners; + for (let i = 0; i < objects.length; i += 2) { + let type = objects[i]; + let entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener && entry.listener.start) + entry.listener.start(entry); + for (let ii = 0; ii < listeners.length; ii++) { + let listener = listeners[ii]; + if (listener.start) + listener.start(entry); + } + break; + case EventType.interrupt: + if (entry.listener && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (let ii = 0; ii < listeners.length; ii++) { + let listener = listeners[ii]; + if (listener.interrupt) + listener.interrupt(entry); + } + break; + case EventType.end: + if (entry.listener && entry.listener.end) + entry.listener.end(entry); + for (let ii = 0; ii < listeners.length; ii++) { + let listener = listeners[ii]; + if (listener.end) + listener.end(entry); + } + case EventType.dispose: + if (entry.listener && entry.listener.dispose) + entry.listener.dispose(entry); + for (let ii = 0; ii < listeners.length; ii++) { + let listener = listeners[ii]; + if (listener.dispose) + listener.dispose(entry); + } + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener && entry.listener.complete) + entry.listener.complete(entry); + for (let ii = 0; ii < listeners.length; ii++) { + let listener = listeners[ii]; + if (listener.complete) + listener.complete(entry); + } + break; + case EventType.event: + let event = objects[i++ + 2]; + if (entry.listener && entry.listener.event) + entry.listener.event(entry, event); + for (let ii = 0; ii < listeners.length; ii++) { + let listener = listeners[ii]; + if (listener.event) + listener.event(entry, event); + } + break; + } + } + this.clear(); + this.drainDisabled = false; + } + clear() { + this.objects.length = 0; + } + }; + var EventType; + (function(EventType2) { + EventType2[EventType2["start"] = 0] = "start"; + EventType2[EventType2["interrupt"] = 1] = "interrupt"; + EventType2[EventType2["end"] = 2] = "end"; + EventType2[EventType2["dispose"] = 3] = "dispose"; + EventType2[EventType2["complete"] = 4] = "complete"; + EventType2[EventType2["event"] = 5] = "event"; + })(EventType || (EventType = {})); + var AnimationStateAdapter = class { + start(entry) { + } + interrupt(entry) { + } + end(entry) { + } + dispose(entry) { + } + complete(entry) { + } + event(entry, event) { + } + }; + var SUBSEQUENT = 0; + var FIRST = 1; + var HOLD_SUBSEQUENT = 2; + var HOLD_FIRST = 3; + var HOLD_MIX = 4; + var SETUP = 1; + var CURRENT = 2; + + // node_modules/@esotericsoftware/spine-core/dist/AnimationStateData.js + var AnimationStateData = class { + /** The SkeletonData to look up animations when they are specified by name. */ + skeletonData; + animationToMixTime = {}; + /** The mix duration to use when no mix duration has been defined between two animations. */ + defaultMix = 0; + constructor(skeletonData) { + if (!skeletonData) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + /** Sets a mix duration by animation name. + * + * See {@link #setMixWith()}. */ + setMix(fromName, toName, duration) { + let from = this.skeletonData.findAnimation(fromName); + if (!from) + throw new Error("Animation not found: " + fromName); + let to = this.skeletonData.findAnimation(toName); + if (!to) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + } + /** Sets the mix duration when changing from the specified animation to the other. + * + * See {@link TrackEntry#mixDuration}. */ + setMixWith(from, to, duration) { + if (!from) + throw new Error("from cannot be null."); + if (!to) + throw new Error("to cannot be null."); + let key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + } + /** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if + * no mix duration has been set. */ + getMix(from, to) { + let key = from.name + "." + to.name; + let value = this.animationToMixTime[key]; + return value === void 0 ? this.defaultMix : value; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/BoundingBoxAttachment.js + var BoundingBoxAttachment = class _BoundingBoxAttachment extends VertexAttachment { + color = new Color(1, 1, 1, 1); + constructor(name) { + super(name); + } + copy() { + let copy = new _BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/ClippingAttachment.js + var ClippingAttachment = class _ClippingAttachment extends VertexAttachment { + /** Clipping is performed between the clipping polygon's slot and the end slot. Returns null if clipping is done until the end of + * the skeleton's rendering. */ + endSlot = null; + // Nonessential. + /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons + * are not usually rendered at runtime. */ + color = new Color(0.2275, 0.2275, 0.8078, 1); + // ce3a3aff + constructor(name) { + super(name); + } + copy() { + let copy = new _ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/Texture.js + var Texture = class { + _image; + constructor(image) { + this._image = image; + } + getImage() { + return this._image; + } + }; + var TextureFilter; + (function(TextureFilter2) { + TextureFilter2[TextureFilter2["Nearest"] = 9728] = "Nearest"; + TextureFilter2[TextureFilter2["Linear"] = 9729] = "Linear"; + TextureFilter2[TextureFilter2["MipMap"] = 9987] = "MipMap"; + TextureFilter2[TextureFilter2["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter2[TextureFilter2["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter2[TextureFilter2["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter2[TextureFilter2["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter || (TextureFilter = {})); + var TextureWrap; + (function(TextureWrap2) { + TextureWrap2[TextureWrap2["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap2[TextureWrap2["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap2[TextureWrap2["Repeat"] = 10497] = "Repeat"; + })(TextureWrap || (TextureWrap = {})); + var TextureRegion = class { + texture; + u = 0; + v = 0; + u2 = 0; + v2 = 0; + width = 0; + height = 0; + degrees = 0; + offsetX = 0; + offsetY = 0; + originalWidth = 0; + originalHeight = 0; + }; + var FakeTexture = class extends Texture { + setFilters(minFilter, magFilter) { + } + setWraps(uWrap, vWrap) { + } + dispose() { + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/TextureAtlas.js + var TextureAtlas = class { + pages = new Array(); + regions = new Array(); + constructor(atlasText) { + let reader = new TextureAtlasReader(atlasText); + let entry = new Array(4); + let pageFields = {}; + pageFields["size"] = (page2) => { + page2.width = parseInt(entry[1]); + page2.height = parseInt(entry[2]); + }; + pageFields["format"] = () => { + }; + pageFields["filter"] = (page2) => { + page2.minFilter = Utils.enumValue(TextureFilter, entry[1]); + page2.magFilter = Utils.enumValue(TextureFilter, entry[2]); + }; + pageFields["repeat"] = (page2) => { + if (entry[1].indexOf("x") != -1) + page2.uWrap = TextureWrap.Repeat; + if (entry[1].indexOf("y") != -1) + page2.vWrap = TextureWrap.Repeat; + }; + pageFields["pma"] = (page2) => { + page2.pma = entry[1] == "true"; + }; + var regionFields = {}; + regionFields["xy"] = (region) => { + region.x = parseInt(entry[1]); + region.y = parseInt(entry[2]); + }; + regionFields["size"] = (region) => { + region.width = parseInt(entry[1]); + region.height = parseInt(entry[2]); + }; + regionFields["bounds"] = (region) => { + region.x = parseInt(entry[1]); + region.y = parseInt(entry[2]); + region.width = parseInt(entry[3]); + region.height = parseInt(entry[4]); + }; + regionFields["offset"] = (region) => { + region.offsetX = parseInt(entry[1]); + region.offsetY = parseInt(entry[2]); + }; + regionFields["orig"] = (region) => { + region.originalWidth = parseInt(entry[1]); + region.originalHeight = parseInt(entry[2]); + }; + regionFields["offsets"] = (region) => { + region.offsetX = parseInt(entry[1]); + region.offsetY = parseInt(entry[2]); + region.originalWidth = parseInt(entry[3]); + region.originalHeight = parseInt(entry[4]); + }; + regionFields["rotate"] = (region) => { + let value = entry[1]; + if (value == "true") + region.degrees = 90; + else if (value != "false") + region.degrees = parseInt(value); + }; + regionFields["index"] = (region) => { + region.index = parseInt(entry[1]); + }; + let line = reader.readLine(); + while (line && line.trim().length == 0) + line = reader.readLine(); + while (true) { + if (!line || line.trim().length == 0) + break; + if (reader.readEntry(entry, line) == 0) + break; + line = reader.readLine(); + } + let page = null; + let names = null; + let values = null; + while (true) { + if (line === null) + break; + if (line.trim().length == 0) { + page = null; + line = reader.readLine(); + } else if (!page) { + page = new TextureAtlasPage(line.trim()); + while (true) { + if (reader.readEntry(entry, line = reader.readLine()) == 0) + break; + let field = pageFields[entry[0]]; + if (field) + field(page); + } + this.pages.push(page); + } else { + let region = new TextureAtlasRegion(page, line); + while (true) { + let count = reader.readEntry(entry, line = reader.readLine()); + if (count == 0) + break; + let field = regionFields[entry[0]]; + if (field) + field(region); + else { + if (!names) + names = []; + if (!values) + values = []; + names.push(entry[0]); + let entryValues = []; + for (let i = 0; i < count; i++) + entryValues.push(parseInt(entry[i + 1])); + values.push(entryValues); + } + } + if (region.originalWidth == 0 && region.originalHeight == 0) { + region.originalWidth = region.width; + region.originalHeight = region.height; + } + if (names && names.length > 0 && values && values.length > 0) { + region.names = names; + region.values = values; + names = null; + values = null; + } + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.degrees == 90) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + this.regions.push(region); + } + } + } + findRegion(name) { + for (let i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + } + setTextures(assetManager, pathPrefix = "") { + for (let page of this.pages) + page.setTexture(assetManager.get(pathPrefix + page.name)); + } + dispose() { + for (let i = 0; i < this.pages.length; i++) { + this.pages[i].texture?.dispose(); + } + } + }; + var TextureAtlasReader = class { + lines; + index = 0; + constructor(text) { + this.lines = text.split(/\r\n|\r|\n/); + } + readLine() { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + } + readEntry(entry, line) { + if (!line) + return 0; + line = line.trim(); + if (line.length == 0) + return 0; + let colon = line.indexOf(":"); + if (colon == -1) + return 0; + entry[0] = line.substr(0, colon).trim(); + for (let i = 1, lastMatch = colon + 1; ; i++) { + let comma = line.indexOf(",", lastMatch); + if (comma == -1) { + entry[i] = line.substr(lastMatch).trim(); + return i; + } + entry[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + if (i == 4) + return 4; + } + } + }; + var TextureAtlasPage = class { + name; + minFilter = TextureFilter.Nearest; + magFilter = TextureFilter.Nearest; + uWrap = TextureWrap.ClampToEdge; + vWrap = TextureWrap.ClampToEdge; + texture = null; + width = 0; + height = 0; + pma = false; + regions = new Array(); + constructor(name) { + this.name = name; + } + setTexture(texture) { + this.texture = texture; + texture.setFilters(this.minFilter, this.magFilter); + texture.setWraps(this.uWrap, this.vWrap); + for (let region of this.regions) + region.texture = texture; + } + }; + var TextureAtlasRegion = class extends TextureRegion { + page; + name; + x = 0; + y = 0; + offsetX = 0; + offsetY = 0; + originalWidth = 0; + originalHeight = 0; + index = 0; + degrees = 0; + names = null; + values = null; + constructor(page, name) { + super(); + this.page = page; + this.name = name; + page.regions.push(this); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/MeshAttachment.js + var MeshAttachment = class _MeshAttachment extends VertexAttachment { + region = null; + /** The name of the texture region for this attachment. */ + path; + /** The UV pair for each vertex, normalized within the texture region. */ + regionUVs = []; + /** The UV pair for each vertex, normalized within the entire texture. + * + * See {@link #updateUVs}. */ + uvs = []; + /** Triplets of vertex indices which describe the mesh's triangulation. */ + triangles = []; + /** The color to tint the mesh. */ + color = new Color(1, 1, 1, 1); + /** The width of the mesh's image. Available only when nonessential data was exported. */ + width = 0; + /** The height of the mesh's image. Available only when nonessential data was exported. */ + height = 0; + /** The number of entries at the beginning of {@link #vertices} that make up the mesh hull. */ + hullLength = 0; + /** Vertex index pairs describing edges for controling triangulation. Mesh triangles will never cross edges. Only available if + * nonessential data was exported. Triangulation is not performed at runtime. */ + edges = []; + parentMesh = null; + sequence = null; + tempColor = new Color(0, 0, 0, 0); + constructor(name, path2) { + super(name); + this.path = path2; + } + /** Calculates {@link #uvs} using the {@link #regionUVs} and region. Must be called if the region, the region's properties, or + * the {@link #regionUVs} are changed. */ + updateRegion() { + if (!this.region) + throw new Error("Region not set."); + let regionUVs = this.regionUVs; + if (!this.uvs || this.uvs.length != regionUVs.length) + this.uvs = Utils.newFloatArray(regionUVs.length); + let uvs = this.uvs; + let n = this.uvs.length; + let u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof TextureAtlasRegion) { + let region = this.region, page = region.page; + let textureWidth = page.width, textureHeight = page.height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } else if (!this.region) { + u = v = 0; + width = height = 1; + } else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + } + /** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices}, + * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the + * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */ + getParentMesh() { + return this.parentMesh; + } + /** @param parentMesh May be null. */ + setParentMesh(parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + } + copy() { + if (this.parentMesh) + return this.newLinkedMesh(); + let copy = new _MeshAttachment(this.name, this.path); + copy.region = this.region; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + copy.sequence = this.sequence != null ? this.sequence.copy() : null; + if (this.edges) { + copy.edges = new Array(this.edges.length); + Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + } + computeWorldVertices(slot, start, count, worldVertices, offset, stride) { + if (this.sequence != null) + this.sequence.apply(slot, this); + super.computeWorldVertices(slot, start, count, worldVertices, offset, stride); + } + /** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/ + newLinkedMesh() { + let copy = new _MeshAttachment(this.name, this.path); + copy.region = this.region; + copy.color.setFromColor(this.color); + copy.timelineAttachment = this.timelineAttachment; + copy.setParentMesh(this.parentMesh ? this.parentMesh : this); + if (copy.region != null) + copy.updateRegion(); + return copy; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/PathAttachment.js + var PathAttachment = class _PathAttachment extends VertexAttachment { + /** The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve. */ + lengths = []; + /** If true, the start and end knots are connected. */ + closed = false; + /** If true, additional calculations are performed to make calculating positions along the path more accurate. If false, fewer + * calculations are performed but calculating positions along the path is less accurate. */ + constantSpeed = false; + /** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually + * rendered at runtime. */ + color = new Color(1, 1, 1, 1); + constructor(name) { + super(name); + } + copy() { + let copy = new _PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/PointAttachment.js + var PointAttachment = class _PointAttachment extends VertexAttachment { + x = 0; + y = 0; + rotation = 0; + /** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments + * are not usually rendered at runtime. */ + color = new Color(0.38, 0.94, 0, 1); + constructor(name) { + super(name); + } + computeWorldPosition(bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + } + computeWorldRotation(bone) { + const r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r); + const x = cos * bone.a + sin * bone.b; + const y = cos * bone.c + sin * bone.d; + return MathUtils.atan2Deg(y, x); + } + copy() { + let copy = new _PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/attachments/RegionAttachment.js + var RegionAttachment = class _RegionAttachment extends Attachment { + /** The local x translation. */ + x = 0; + /** The local y translation. */ + y = 0; + /** The local scaleX. */ + scaleX = 1; + /** The local scaleY. */ + scaleY = 1; + /** The local rotation. */ + rotation = 0; + /** The width of the region attachment in Spine. */ + width = 0; + /** The height of the region attachment in Spine. */ + height = 0; + /** The color to tint the region attachment. */ + color = new Color(1, 1, 1, 1); + /** The name of the texture region for this attachment. */ + path; + region = null; + sequence = null; + /** For each of the 4 vertices, a pair of x,y values that is the local position of the vertex. + * + * See {@link #updateOffset()}. */ + offset = Utils.newFloatArray(8); + uvs = Utils.newFloatArray(8); + tempColor = new Color(1, 1, 1, 1); + constructor(name, path2) { + super(name); + this.path = path2; + } + /** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */ + updateRegion() { + if (!this.region) + throw new Error("Region not set."); + let region = this.region; + let uvs = this.uvs; + if (region == null) { + uvs[0] = 0; + uvs[1] = 0; + uvs[2] = 0; + uvs[3] = 1; + uvs[4] = 1; + uvs[5] = 1; + uvs[6] = 1; + uvs[7] = 0; + return; + } + let regionScaleX = this.width / this.region.originalWidth * this.scaleX; + let regionScaleY = this.height / this.region.originalHeight * this.scaleY; + let localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + let localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + let localX2 = localX + this.region.width * regionScaleX; + let localY2 = localY + this.region.height * regionScaleY; + let radians = this.rotation * MathUtils.degRad; + let cos = Math.cos(radians); + let sin = Math.sin(radians); + let x = this.x, y = this.y; + let localXCos = localX * cos + x; + let localXSin = localX * sin; + let localYCos = localY * cos + y; + let localYSin = localY * sin; + let localX2Cos = localX2 * cos + x; + let localX2Sin = localX2 * sin; + let localY2Cos = localY2 * cos + y; + let localY2Sin = localY2 * sin; + let offset = this.offset; + offset[0] = localXCos - localYSin; + offset[1] = localYCos + localXSin; + offset[2] = localXCos - localY2Sin; + offset[3] = localY2Cos + localXSin; + offset[4] = localX2Cos - localY2Sin; + offset[5] = localY2Cos + localX2Sin; + offset[6] = localX2Cos - localYSin; + offset[7] = localYCos + localX2Sin; + if (region.degrees == 90) { + uvs[0] = region.u2; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + } else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + } + /** Transforms the attachment's four vertices to world coordinates. If the attachment has a {@link #sequence}, the region may + * be changed. + *

+ * See World transforms in the Spine + * Runtimes Guide. + * @param worldVertices The output world vertices. Must have a length >= offset + 8. + * @param offset The worldVertices index to begin writing values. + * @param stride The number of worldVertices entries between the value pairs written. */ + computeWorldVertices(slot, worldVertices, offset, stride) { + if (this.sequence != null) + this.sequence.apply(slot, this); + let bone = slot.bone; + let vertexOffset = this.offset; + let x = bone.worldX, y = bone.worldY; + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let offsetX = 0, offsetY = 0; + offsetX = vertexOffset[0]; + offsetY = vertexOffset[1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[2]; + offsetY = vertexOffset[3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[4]; + offsetY = vertexOffset[5]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[6]; + offsetY = vertexOffset[7]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + } + copy() { + let copy = new _RegionAttachment(this.name, this.path); + copy.region = this.region; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + copy.sequence = this.sequence != null ? this.sequence.copy() : null; + return copy; + } + static X1 = 0; + static Y1 = 1; + static C1R = 2; + static C1G = 3; + static C1B = 4; + static C1A = 5; + static U1 = 6; + static V1 = 7; + static X2 = 8; + static Y2 = 9; + static C2R = 10; + static C2G = 11; + static C2B = 12; + static C2A = 13; + static U2 = 14; + static V2 = 15; + static X3 = 16; + static Y3 = 17; + static C3R = 18; + static C3G = 19; + static C3B = 20; + static C3A = 21; + static U3 = 22; + static V3 = 23; + static X4 = 24; + static Y4 = 25; + static C4R = 26; + static C4G = 27; + static C4B = 28; + static C4A = 29; + static U4 = 30; + static V4 = 31; + }; + + // node_modules/@esotericsoftware/spine-core/dist/AtlasAttachmentLoader.js + var AtlasAttachmentLoader = class { + atlas; + constructor(atlas) { + this.atlas = atlas; + } + loadSequence(name, basePath, sequence) { + let regions = sequence.regions; + for (let i = 0, n = regions.length; i < n; i++) { + let path2 = sequence.getPath(basePath, i); + let region = this.atlas.findRegion(path2); + if (region == null) + throw new Error("Region not found in atlas: " + path2 + " (sequence: " + name + ")"); + regions[i] = region; + } + } + newRegionAttachment(skin, name, path2, sequence) { + let attachment = new RegionAttachment(name, path2); + if (sequence != null) { + this.loadSequence(name, path2, sequence); + } else { + let region = this.atlas.findRegion(path2); + if (!region) + throw new Error("Region not found in atlas: " + path2 + " (region attachment: " + name + ")"); + attachment.region = region; + } + return attachment; + } + newMeshAttachment(skin, name, path2, sequence) { + let attachment = new MeshAttachment(name, path2); + if (sequence != null) { + this.loadSequence(name, path2, sequence); + } else { + let region = this.atlas.findRegion(path2); + if (!region) + throw new Error("Region not found in atlas: " + path2 + " (mesh attachment: " + name + ")"); + attachment.region = region; + } + return attachment; + } + newBoundingBoxAttachment(skin, name) { + return new BoundingBoxAttachment(name); + } + newPathAttachment(skin, name) { + return new PathAttachment(name); + } + newPointAttachment(skin, name) { + return new PointAttachment(name); + } + newClippingAttachment(skin, name) { + return new ClippingAttachment(name); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/BoneData.js + var BoneData = class { + /** The index of the bone in {@link Skeleton#getBones()}. */ + index = 0; + /** The name of the bone, which is unique across all bones in the skeleton. */ + name; + /** @returns May be null. */ + parent = null; + /** The bone's length. */ + length = 0; + /** The local x translation. */ + x = 0; + /** The local y translation. */ + y = 0; + /** The local rotation in degrees, counter clockwise. */ + rotation = 0; + /** The local scaleX. */ + scaleX = 1; + /** The local scaleY. */ + scaleY = 1; + /** The local shearX. */ + shearX = 0; + /** The local shearX. */ + shearY = 0; + /** The transform mode for how parent world transforms affect this bone. */ + inherit = Inherit.Normal; + /** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this + * bone. + * @see Skin#bones */ + skinRequired = false; + /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually + * rendered at runtime. */ + color = new Color(); + /** The bone icon as it was in Spine, or null if nonessential data was not exported. */ + icon; + /** False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */ + visible = false; + constructor(index, name, parent) { + if (index < 0) + throw new Error("index must be >= 0."); + if (!name) + throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + }; + var Inherit; + (function(Inherit2) { + Inherit2[Inherit2["Normal"] = 0] = "Normal"; + Inherit2[Inherit2["OnlyTranslation"] = 1] = "OnlyTranslation"; + Inherit2[Inherit2["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + Inherit2[Inherit2["NoScale"] = 3] = "NoScale"; + Inherit2[Inherit2["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(Inherit || (Inherit = {})); + + // node_modules/@esotericsoftware/spine-core/dist/Bone.js + var Bone = class { + /** The bone's setup pose data. */ + data; + /** The skeleton this bone belongs to. */ + skeleton; + /** The parent bone, or null if this is the root bone. */ + parent = null; + /** The immediate children of this bone. */ + children = new Array(); + /** The local x translation. */ + x = 0; + /** The local y translation. */ + y = 0; + /** The local rotation in degrees, counter clockwise. */ + rotation = 0; + /** The local scaleX. */ + scaleX = 0; + /** The local scaleY. */ + scaleY = 0; + /** The local shearX. */ + shearX = 0; + /** The local shearY. */ + shearY = 0; + /** The applied local x translation. */ + ax = 0; + /** The applied local y translation. */ + ay = 0; + /** The applied local rotation in degrees, counter clockwise. */ + arotation = 0; + /** The applied local scaleX. */ + ascaleX = 0; + /** The applied local scaleY. */ + ascaleY = 0; + /** The applied local shearX. */ + ashearX = 0; + /** The applied local shearY. */ + ashearY = 0; + /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */ + a = 0; + /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */ + b = 0; + /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */ + c = 0; + /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */ + d = 0; + /** The world X position. If changed, {@link #updateAppliedTransform()} should be called. */ + worldY = 0; + /** The world Y position. If changed, {@link #updateAppliedTransform()} should be called. */ + worldX = 0; + inherit = Inherit.Normal; + sorted = false; + active = false; + /** @param parent May be null. */ + constructor(data, skeleton, parent) { + if (!data) + throw new Error("data cannot be null."); + if (!skeleton) + throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + /** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the + * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */ + isActive() { + return this.active; + } + /** Computes the world transform using the parent bone and this bone's local applied transform. */ + update(physics) { + this.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY); + } + /** Computes the world transform using the parent bone and this bone's local transform. + * + * See {@link #updateWorldTransformWith()}. */ + updateWorldTransform() { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + } + /** Computes the world transform using the parent bone and the specified local transform. The applied transform is set to the + * specified local transform. Child bones are not updated. + * + * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine + * Runtimes Guide. */ + updateWorldTransformWith(x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + let parent = this.parent; + if (!parent) { + let skeleton = this.skeleton; + const sx = skeleton.scaleX, sy = skeleton.scaleY; + const rx = (rotation + shearX) * MathUtils.degRad; + const ry = (rotation + 90 + shearY) * MathUtils.degRad; + this.a = Math.cos(rx) * scaleX * sx; + this.b = Math.cos(ry) * scaleY * sx; + this.c = Math.sin(rx) * scaleX * sy; + this.d = Math.sin(ry) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.inherit) { + case Inherit.Normal: { + const rx = (rotation + shearX) * MathUtils.degRad; + const ry = (rotation + 90 + shearY) * MathUtils.degRad; + const la = Math.cos(rx) * scaleX; + const lb = Math.cos(ry) * scaleY; + const lc = Math.sin(rx) * scaleX; + const ld = Math.sin(ry) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case Inherit.OnlyTranslation: { + const rx = (rotation + shearX) * MathUtils.degRad; + const ry = (rotation + 90 + shearY) * MathUtils.degRad; + this.a = Math.cos(rx) * scaleX; + this.b = Math.cos(ry) * scaleY; + this.c = Math.sin(rx) * scaleX; + this.d = Math.sin(ry) * scaleY; + break; + } + case Inherit.NoRotationOrReflection: { + let s = pa * pa + pc * pc; + let prx = 0; + if (s > 1e-4) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * MathUtils.radDeg; + } else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg; + } + const rx = (rotation + shearX - prx) * MathUtils.degRad; + const ry = (rotation + shearY - prx + 90) * MathUtils.degRad; + const la = Math.cos(rx) * scaleX; + const lb = Math.cos(ry) * scaleY; + const lc = Math.sin(rx) * scaleX; + const ld = Math.sin(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case Inherit.NoScale: + case Inherit.NoScaleOrReflection: { + rotation *= MathUtils.degRad; + const cos = Math.cos(rotation), sin = Math.sin(rotation); + let za = (pa * cos + pb * sin) / this.skeleton.scaleX; + let zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + let s = Math.sqrt(za * za + zc * zc); + if (s > 1e-5) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.inherit == Inherit.NoScale && pa * pd - pb * pc < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + rotation = Math.PI / 2 + Math.atan2(zc, za); + const zb = Math.cos(rotation) * s; + const zd = Math.sin(rotation) * s; + shearX *= MathUtils.degRad; + shearY = (90 + shearY) * MathUtils.degRad; + const la = Math.cos(shearX) * scaleX; + const lb = Math.cos(shearY) * scaleY; + const lc = Math.sin(shearX) * scaleX; + const ld = Math.sin(shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + } + /** Sets this bone's local transform to the setup pose. */ + setToSetupPose() { + let data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + this.inherit = data.inherit; + } + /** Computes the applied transform values from the world transform. + * + * If the world transform is modified (by a constraint, {@link #rotateWorld(float)}, etc) then this method should be called so + * the applied transform matches the world transform. The applied transform may be needed by other code (eg to apply other + * constraints). + * + * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after + * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */ + updateAppliedTransform() { + let parent = this.parent; + if (!parent) { + this.ax = this.worldX - this.skeleton.x; + this.ay = this.worldY - this.skeleton.y; + this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * MathUtils.radDeg; + return; + } + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + let pid = 1 / (pa * pd - pb * pc); + let ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid; + let dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = dx * ia - dy * ib; + this.ay = dy * id - dx * ic; + let ra, rb, rc, rd; + if (this.inherit == Inherit.OnlyTranslation) { + ra = this.a; + rb = this.b; + rc = this.c; + rd = this.d; + } else { + switch (this.inherit) { + case Inherit.NoRotationOrReflection: { + let s2 = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + let sa = pa / this.skeleton.scaleX; + let sc = pc / this.skeleton.scaleY; + pb = -sc * s2 * this.skeleton.scaleX; + pd = sa * s2 * this.skeleton.scaleY; + pid = 1 / (pa * pd - pb * pc); + ia = pd * pid; + ib = pb * pid; + break; + } + case Inherit.NoScale: + case Inherit.NoScaleOrReflection: + let cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation); + pa = (pa * cos + pb * sin) / this.skeleton.scaleX; + pc = (pc * cos + pd * sin) / this.skeleton.scaleY; + let s = Math.sqrt(pa * pa + pc * pc); + if (s > 1e-5) + s = 1 / s; + pa *= s; + pc *= s; + s = Math.sqrt(pa * pa + pc * pc); + if (this.inherit == Inherit.NoScale && pid < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + let r = MathUtils.PI / 2 + Math.atan2(pc, pa); + pb = Math.cos(r) * s; + pd = Math.sin(r) * s; + pid = 1 / (pa * pd - pb * pc); + ia = pd * pid; + ib = pb * pid; + ic = pc * pid; + id = pa * pid; + } + ra = ia * this.a - ib * this.c; + rb = ia * this.b - ib * this.d; + rc = id * this.c - ic * this.a; + rd = id * this.d - ic * this.b; + } + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 1e-4) { + let det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = -Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg; + } else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg; + } + } + /** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */ + getWorldRotationX() { + return Math.atan2(this.c, this.a) * MathUtils.radDeg; + } + /** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */ + getWorldRotationY() { + return Math.atan2(this.d, this.b) * MathUtils.radDeg; + } + /** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */ + getWorldScaleX() { + return Math.sqrt(this.a * this.a + this.c * this.c); + } + /** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */ + getWorldScaleY() { + return Math.sqrt(this.b * this.b + this.d * this.d); + } + /** Transforms a point from world coordinates to the bone's local coordinates. */ + worldToLocal(world) { + let invDet = 1 / (this.a * this.d - this.b * this.c); + let x = world.x - this.worldX, y = world.y - this.worldY; + world.x = x * this.d * invDet - y * this.b * invDet; + world.y = y * this.a * invDet - x * this.c * invDet; + return world; + } + /** Transforms a point from the bone's local coordinates to world coordinates. */ + localToWorld(local) { + let x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + } + /** Transforms a point from world coordinates to the parent bone's local coordinates. */ + worldToParent(world) { + if (world == null) + throw new Error("world cannot be null."); + return this.parent == null ? world : this.parent.worldToLocal(world); + } + /** Transforms a point from the parent bone's coordinates to world coordinates. */ + parentToWorld(world) { + if (world == null) + throw new Error("world cannot be null."); + return this.parent == null ? world : this.parent.localToWorld(world); + } + /** Transforms a world rotation to a local rotation. */ + worldToLocalRotation(worldRotation) { + let sin = MathUtils.sinDeg(worldRotation), cos = MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg + this.rotation - this.shearX; + } + /** Transforms a local rotation to a world rotation. */ + localToWorldRotation(localRotation) { + localRotation -= this.rotation - this.shearX; + let sin = MathUtils.sinDeg(localRotation), cos = MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg; + } + /** Rotates the world transform the specified amount. + *

+ * After changes are made to the world transform, {@link #updateAppliedTransform()} should be called and + * {@link #update(Physics)} will need to be called on any child bones, recursively. */ + rotateWorld(degrees) { + degrees *= MathUtils.degRad; + const sin = Math.sin(degrees), cos = Math.cos(degrees); + const ra = this.a, rb = this.b; + this.a = cos * ra - sin * this.c; + this.b = cos * rb - sin * this.d; + this.c = sin * ra + cos * this.c; + this.d = sin * rb + cos * this.d; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/ConstraintData.js + var ConstraintData = class { + name; + order; + skinRequired; + constructor(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/AssetManagerBase.js + var AssetManagerBase = class { + pathPrefix = ""; + textureLoader; + downloader; + assets = {}; + errors = {}; + toLoad = 0; + loaded = 0; + constructor(textureLoader, pathPrefix = "", downloader = new Downloader()) { + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + this.downloader = downloader; + } + start(path2) { + this.toLoad++; + return this.pathPrefix + path2; + } + success(callback, path2, asset) { + this.toLoad--; + this.loaded++; + this.assets[path2] = asset; + if (callback) + callback(path2, asset); + } + error(callback, path2, message) { + this.toLoad--; + this.loaded++; + this.errors[path2] = message; + if (callback) + callback(path2, message); + } + loadAll() { + let promise = new Promise((resolve, reject) => { + let check = () => { + if (this.isLoadingComplete()) { + if (this.hasErrors()) + reject(this.errors); + else + resolve(this); + return; + } + requestAnimationFrame(check); + }; + requestAnimationFrame(check); + }); + return promise; + } + setRawDataURI(path2, data) { + this.downloader.rawDataUris[this.pathPrefix + path2] = data; + } + loadBinary(path2, success = () => { + }, error = () => { + }) { + path2 = this.start(path2); + this.downloader.downloadBinary(path2, (data) => { + this.success(success, path2, data); + }, (status, responseText) => { + this.error(error, path2, `Couldn't load binary ${path2}: status ${status}, ${responseText}`); + }); + } + loadText(path2, success = () => { + }, error = () => { + }) { + path2 = this.start(path2); + this.downloader.downloadText(path2, (data) => { + this.success(success, path2, data); + }, (status, responseText) => { + this.error(error, path2, `Couldn't load text ${path2}: status ${status}, ${responseText}`); + }); + } + loadJson(path2, success = () => { + }, error = () => { + }) { + path2 = this.start(path2); + this.downloader.downloadJson(path2, (data) => { + this.success(success, path2, data); + }, (status, responseText) => { + this.error(error, path2, `Couldn't load JSON ${path2}: status ${status}, ${responseText}`); + }); + } + loadTexture(path2, success = () => { + }, error = () => { + }) { + path2 = this.start(path2); + let isBrowser = !!(typeof window !== "undefined" && typeof navigator !== "undefined" && window.document); + let isWebWorker = !isBrowser; + if (isWebWorker) { + fetch(path2, { mode: "cors" }).then((response) => { + if (response.ok) + return response.blob(); + this.error(error, path2, `Couldn't load image: ${path2}`); + return null; + }).then((blob) => { + return blob ? createImageBitmap(blob, { premultiplyAlpha: "none", colorSpaceConversion: "none" }) : null; + }).then((bitmap) => { + if (bitmap) + this.success(success, path2, this.textureLoader(bitmap)); + }); + } else { + let image = new Image(); + image.crossOrigin = "anonymous"; + image.onload = () => { + this.success(success, path2, this.textureLoader(image)); + }; + image.onerror = () => { + this.error(error, path2, `Couldn't load image: ${path2}`); + }; + if (this.downloader.rawDataUris[path2]) + path2 = this.downloader.rawDataUris[path2]; + image.src = path2; + } + } + loadTextureAtlas(path2, success = () => { + }, error = () => { + }, fileAlias) { + let index = path2.lastIndexOf("/"); + let parent = index >= 0 ? path2.substring(0, index + 1) : ""; + path2 = this.start(path2); + this.downloader.downloadText(path2, (atlasText) => { + try { + let atlas = new TextureAtlas(atlasText); + let toLoad = atlas.pages.length, abort = false; + for (let page of atlas.pages) { + this.loadTexture(!fileAlias ? parent + page.name : fileAlias[page.name], (imagePath, texture) => { + if (!abort) { + page.setTexture(texture); + if (--toLoad == 0) + this.success(success, path2, atlas); + } + }, (imagePath, message) => { + if (!abort) + this.error(error, path2, `Couldn't load texture atlas ${path2} page image: ${imagePath}`); + abort = true; + }); + } + } catch (e) { + this.error(error, path2, `Couldn't parse texture atlas ${path2}: ${e.message}`); + } + }, (status, responseText) => { + this.error(error, path2, `Couldn't load texture atlas ${path2}: status ${status}, ${responseText}`); + }); + } + get(path2) { + return this.assets[this.pathPrefix + path2]; + } + require(path2) { + path2 = this.pathPrefix + path2; + let asset = this.assets[path2]; + if (asset) + return asset; + let error = this.errors[path2]; + throw Error("Asset not found: " + path2 + (error ? "\n" + error : "")); + } + remove(path2) { + path2 = this.pathPrefix + path2; + let asset = this.assets[path2]; + if (asset.dispose) + asset.dispose(); + delete this.assets[path2]; + return asset; + } + removeAll() { + for (let key in this.assets) { + let asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + } + isLoadingComplete() { + return this.toLoad == 0; + } + getToLoad() { + return this.toLoad; + } + getLoaded() { + return this.loaded; + } + dispose() { + this.removeAll(); + } + hasErrors() { + return Object.keys(this.errors).length > 0; + } + getErrors() { + return this.errors; + } + }; + var Downloader = class { + callbacks = {}; + rawDataUris = {}; + dataUriToString(dataUri) { + if (!dataUri.startsWith("data:")) { + throw new Error("Not a data URI."); + } + let base64Idx = dataUri.indexOf("base64,"); + if (base64Idx != -1) { + base64Idx += "base64,".length; + return atob(dataUri.substr(base64Idx)); + } else { + return dataUri.substr(dataUri.indexOf(",") + 1); + } + } + base64ToUint8Array(base64) { + var binary_string = window.atob(base64); + var len = binary_string.length; + var bytes = new Uint8Array(len); + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + return bytes; + } + dataUriToUint8Array(dataUri) { + if (!dataUri.startsWith("data:")) { + throw new Error("Not a data URI."); + } + let base64Idx = dataUri.indexOf("base64,"); + if (base64Idx == -1) + throw new Error("Not a binary data URI."); + base64Idx += "base64,".length; + return this.base64ToUint8Array(dataUri.substr(base64Idx)); + } + downloadText(url, success, error) { + if (this.start(url, success, error)) + return; + if (this.rawDataUris[url]) { + try { + let dataUri = this.rawDataUris[url]; + this.finish(url, 200, this.dataUriToString(dataUri)); + } catch (e) { + this.finish(url, 400, JSON.stringify(e)); + } + return; + } + let request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.open("GET", url, true); + let done = () => { + this.finish(url, request.status, request.responseText); + }; + request.onload = done; + request.onerror = done; + request.send(); + } + downloadJson(url, success, error) { + this.downloadText(url, (data) => { + success(JSON.parse(data)); + }, error); + } + downloadBinary(url, success, error) { + if (this.start(url, success, error)) + return; + if (this.rawDataUris[url]) { + try { + let dataUri = this.rawDataUris[url]; + this.finish(url, 200, this.dataUriToUint8Array(dataUri)); + } catch (e) { + this.finish(url, 400, JSON.stringify(e)); + } + return; + } + let request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = "arraybuffer"; + let onerror = () => { + this.finish(url, request.status, request.response); + }; + request.onload = () => { + if (request.status == 200 || request.status == 0) + this.finish(url, 200, new Uint8Array(request.response)); + else + onerror(); + }; + request.onerror = onerror; + request.send(); + } + start(url, success, error) { + let callbacks = this.callbacks[url]; + try { + if (callbacks) + return true; + this.callbacks[url] = callbacks = []; + } finally { + callbacks.push(success, error); + } + } + finish(url, status, data) { + let callbacks = this.callbacks[url]; + delete this.callbacks[url]; + let args = status == 200 || status == 0 ? [data] : [status, data]; + for (let i = args.length - 1, n = callbacks.length; i < n; i += 2) + callbacks[i].apply(null, args); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/Event.js + var Event = class { + data; + intValue = 0; + floatValue = 0; + stringValue = null; + time = 0; + volume = 0; + balance = 0; + constructor(time, data) { + if (!data) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/EventData.js + var EventData = class { + name; + intValue = 0; + floatValue = 0; + stringValue = null; + audioPath = null; + volume = 0; + balance = 0; + constructor(name) { + this.name = name; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/IkConstraint.js + var IkConstraint = class { + /** The IK constraint's setup pose data. */ + data; + /** The bones that will be modified by this IK constraint. */ + bones; + /** The bone that is the IK target. */ + target; + /** Controls the bend direction of the IK bones, either 1 or -1. */ + bendDirection = 0; + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + compress = false; + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ + stretch = false; + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + mix = 1; + /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */ + softness = 0; + active = false; + constructor(data, skeleton) { + if (!data) + throw new Error("data cannot be null."); + if (!skeleton) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) { + let bone = skeleton.findBone(data.bones[i].name); + if (!bone) + throw new Error(`Couldn't find bone ${data.bones[i].name}`); + this.bones.push(bone); + } + let target = skeleton.findBone(data.target.name); + if (!target) + throw new Error(`Couldn't find bone ${data.target.name}`); + this.target = target; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + } + isActive() { + return this.active; + } + setToSetupPose() { + const data = this.data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + } + update(physics) { + if (this.mix == 0) + return; + let target = this.target; + let bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.data.uniform, this.softness, this.mix); + break; + } + } + /** Applies 1 bone IK. The target is specified in the world coordinate system. */ + apply1(bone, targetX, targetY, compress, stretch, uniform, alpha) { + let p = bone.parent; + if (!p) + throw new Error("IK bone must have parent."); + let pa = p.a, pb = p.b, pc = p.c, pd = p.d; + let rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.inherit) { + case Inherit.OnlyTranslation: + tx = (targetX - bone.worldX) * MathUtils.signum(bone.skeleton.scaleX); + ty = (targetY - bone.worldY) * MathUtils.signum(bone.skeleton.scaleY); + break; + case Inherit.NoRotationOrReflection: + let s = Math.abs(pa * pd - pb * pc) / Math.max(1e-4, pa * pa + pc * pc); + let sa = pa / bone.skeleton.scaleX; + let sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg; + default: + let x = targetX - p.worldX, y = targetY - p.worldY; + let d = pa * pd - pb * pc; + if (Math.abs(d) <= 1e-4) { + tx = 0; + ty = 0; + } else { + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + } + rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + let sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.inherit) { + case Inherit.NoScale: + case Inherit.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + const b = bone.data.length * sx; + if (b > 1e-4) { + const dd = tx * tx + ty * ty; + if (compress && dd < b * b || stretch && dd > b * b) { + const s = (Math.sqrt(dd) / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + } + /** Applies 2 bone IK. The target is specified in the world coordinate system. + * @param child A direct descendant of the parent bone. */ + apply2(parent, child, targetX, targetY, bendDir, stretch, uniform, softness, alpha) { + if (parent.inherit != Inherit.Normal || child.inherit != Inherit.Normal) + return; + let px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, sx = psx, sy = psy, csx = child.ascaleX; + let os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } else + os2 = 0; + let cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + let u = Math.abs(psx - psy) <= 1e-4; + if (!u || stretch) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + let pp = parent.parent; + if (!pp) + throw new Error("IK parent must itself have a parent."); + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + let id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY; + id = Math.abs(id) <= 1e-4 ? 0 : 1 / id; + let dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + let l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 1e-4) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + let tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + let dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) * 0.5; + let td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + let p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: + if (u) { + l2 *= psx; + let cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) { + cos = -1; + a2 = Math.PI * bendDir; + } else if (cos > 1) { + cos = 1; + a2 = 0; + if (stretch) { + a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + sx *= a; + if (uniform) + sy *= a; + } + } else + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } else { + a = psx * l2; + b = psy * l2; + let aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + let c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + let q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) * 0.5; + let r0 = q / c2, r1 = c / q; + let r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + let minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + let maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) * 0.5) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + let os = Math.atan2(cy, cx) * s2; + let rotation = parent.arotation; + a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, sy, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/IkConstraintData.js + var IkConstraintData = class extends ConstraintData { + /** The bones that are constrained by this IK constraint. */ + bones = new Array(); + /** The bone that is the IK target. */ + _target = null; + set target(boneData) { + this._target = boneData; + } + get target() { + if (!this._target) + throw new Error("BoneData not set."); + else + return this._target; + } + /** Controls the bend direction of the IK bones, either 1 or -1. */ + bendDirection = 0; + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + compress = false; + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ + stretch = false; + /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone + * is scaled on both the X and Y axes. */ + uniform = false; + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + mix = 0; + /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */ + softness = 0; + constructor(name) { + super(name, 0, false); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/PathConstraintData.js + var PathConstraintData = class extends ConstraintData { + /** The bones that will be modified by this path constraint. */ + bones = new Array(); + /** The slot whose path attachment will be used to constrained the bones. */ + _target = null; + set target(slotData) { + this._target = slotData; + } + get target() { + if (!this._target) + throw new Error("SlotData not set."); + else + return this._target; + } + /** The mode for positioning the first bone on the path. */ + positionMode = PositionMode.Fixed; + /** The mode for positioning the bones after the first bone on the path. */ + spacingMode = SpacingMode.Fixed; + /** The mode for adjusting the rotation of the bones. */ + rotateMode = RotateMode.Chain; + /** An offset added to the constrained bone rotation. */ + offsetRotation = 0; + /** The position along the path. */ + position = 0; + /** The spacing between bones. */ + spacing = 0; + mixRotate = 0; + mixX = 0; + mixY = 0; + constructor(name) { + super(name, 0, false); + } + }; + var PositionMode; + (function(PositionMode2) { + PositionMode2[PositionMode2["Fixed"] = 0] = "Fixed"; + PositionMode2[PositionMode2["Percent"] = 1] = "Percent"; + })(PositionMode || (PositionMode = {})); + var SpacingMode; + (function(SpacingMode2) { + SpacingMode2[SpacingMode2["Length"] = 0] = "Length"; + SpacingMode2[SpacingMode2["Fixed"] = 1] = "Fixed"; + SpacingMode2[SpacingMode2["Percent"] = 2] = "Percent"; + SpacingMode2[SpacingMode2["Proportional"] = 3] = "Proportional"; + })(SpacingMode || (SpacingMode = {})); + var RotateMode; + (function(RotateMode2) { + RotateMode2[RotateMode2["Tangent"] = 0] = "Tangent"; + RotateMode2[RotateMode2["Chain"] = 1] = "Chain"; + RotateMode2[RotateMode2["ChainScale"] = 2] = "ChainScale"; + })(RotateMode || (RotateMode = {})); + + // node_modules/@esotericsoftware/spine-core/dist/PathConstraint.js + var PathConstraint = class _PathConstraint { + static NONE = -1; + static BEFORE = -2; + static AFTER = -3; + static epsilon = 1e-5; + /** The path constraint's setup pose data. */ + data; + /** The bones that will be modified by this path constraint. */ + bones; + /** The slot whose path attachment will be used to constrained the bones. */ + target; + /** The position along the path. */ + position = 0; + /** The spacing between bones. */ + spacing = 0; + mixRotate = 0; + mixX = 0; + mixY = 0; + spaces = new Array(); + positions = new Array(); + world = new Array(); + curves = new Array(); + lengths = new Array(); + segments = new Array(); + active = false; + constructor(data, skeleton) { + if (!data) + throw new Error("data cannot be null."); + if (!skeleton) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (let i = 0, n = data.bones.length; i < n; i++) { + let bone = skeleton.findBone(data.bones[i].name); + if (!bone) + throw new Error(`Couldn't find bone ${data.bones[i].name}.`); + this.bones.push(bone); + } + let target = skeleton.findSlot(data.target.name); + if (!target) + throw new Error(`Couldn't find target bone ${data.target.name}`); + this.target = target; + this.position = data.position; + this.spacing = data.spacing; + this.mixRotate = data.mixRotate; + this.mixX = data.mixX; + this.mixY = data.mixY; + } + isActive() { + return this.active; + } + setToSetupPose() { + const data = this.data; + this.position = data.position; + this.spacing = data.spacing; + this.mixRotate = data.mixRotate; + this.mixX = data.mixX; + this.mixY = data.mixY; + } + update(physics) { + let attachment = this.target.getAttachment(); + if (!(attachment instanceof PathAttachment)) + return; + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY; + if (mixRotate == 0 && mixX == 0 && mixY == 0) + return; + let data = this.data; + let tangents = data.rotateMode == RotateMode.Tangent, scale = data.rotateMode == RotateMode.ChainScale; + let bones = this.bones; + let boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + let spaces = Utils.setArraySize(this.spaces, spacesCount), lengths = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : []; + let spacing = this.spacing; + switch (data.spacingMode) { + case SpacingMode.Percent: + if (scale) { + for (let i = 0, n = spacesCount - 1; i < n; i++) { + let bone = bones[i]; + let setupLength = bone.data.length; + let x = setupLength * bone.a, y = setupLength * bone.c; + lengths[i] = Math.sqrt(x * x + y * y); + } + } + Utils.arrayFill(spaces, 1, spacesCount, spacing); + break; + case SpacingMode.Proportional: + let sum = 0; + for (let i = 0, n = spacesCount - 1; i < n; ) { + let bone = bones[i]; + let setupLength = bone.data.length; + if (setupLength < _PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = spacing; + } else { + let x = setupLength * bone.a, y = setupLength * bone.c; + let length = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length; + spaces[++i] = length; + sum += length; + } + } + if (sum > 0) { + sum = spacesCount / sum * spacing; + for (let i = 1; i < spacesCount; i++) + spaces[i] *= sum; + } + break; + default: + let lengthSpacing = data.spacingMode == SpacingMode.Length; + for (let i = 0, n = spacesCount - 1; i < n; ) { + let bone = bones[i]; + let setupLength = bone.data.length; + if (setupLength < _PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = spacing; + } else { + let x = setupLength * bone.a, y = setupLength * bone.c; + let length = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; + } + } + } + let positions = this.computeWorldPositions(attachment, spacesCount, tangents); + let boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + let tip = false; + if (offsetRotation == 0) + tip = data.rotateMode == RotateMode.Chain; + else { + tip = false; + let p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad; + } + for (let i = 0, p = 3; i < boneCount; i++, p += 3) { + let bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * mixX; + bone.worldY += (boneY - bone.worldY) * mixY; + let x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + let length = lengths[i]; + if (length != 0) { + let s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * mixRotate + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (mixRotate > 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + let length = bone.data.length; + boneX += (length * (cos * a - sin * c) - dx) * mixRotate; + boneY += (length * (sin * a + cos * c) - dy) * mixRotate; + } else { + r += offsetRotation; + } + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.updateAppliedTransform(); + } + } + computeWorldPositions(path2, spacesCount, tangents) { + let target = this.target; + let position = this.position; + let spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = this.world; + let closed2 = path2.closed; + let verticesLength = path2.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = _PathConstraint.NONE; + if (!path2.constantSpeed) { + let lengths = path2.lengths; + curveCount -= closed2 ? 1 : 2; + let pathLength2 = lengths[curveCount]; + if (this.data.positionMode == PositionMode.Percent) + position *= pathLength2; + let multiplier2; + switch (this.data.spacingMode) { + case SpacingMode.Percent: + multiplier2 = pathLength2; + break; + case SpacingMode.Proportional: + multiplier2 = pathLength2 / spacesCount; + break; + default: + multiplier2 = 1; + } + world = Utils.setArraySize(this.world, 8); + for (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + let space = spaces[i] * multiplier2; + position += space; + let p = position; + if (closed2) { + p %= pathLength2; + if (p < 0) + p += pathLength2; + curve = 0; + } else if (p < 0) { + if (prevCurve != _PathConstraint.BEFORE) { + prevCurve = _PathConstraint.BEFORE; + path2.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength2) { + if (prevCurve != _PathConstraint.AFTER) { + prevCurve = _PathConstraint.AFTER; + path2.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength2, world, 0, out, o); + continue; + } + for (; ; curve++) { + let length = lengths[curve]; + if (p > length) + continue; + if (curve == 0) + p /= length; + else { + let prev = lengths[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed2 && curve == curveCount) { + path2.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path2.computeWorldVertices(target, 0, 4, world, 4, 2); + } else + path2.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || i > 0 && space == 0); + } + return out; + } + if (closed2) { + verticesLength += 2; + world = Utils.setArraySize(this.world, verticesLength); + path2.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path2.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + world = Utils.setArraySize(this.world, verticesLength); + path2.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + let curves = Utils.setArraySize(this.curves, curveCount); + let pathLength = 0; + let x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + let tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (let i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (this.data.positionMode == PositionMode.Percent) + position *= pathLength; + let multiplier; + switch (this.data.spacingMode) { + case SpacingMode.Percent: + multiplier = pathLength; + break; + case SpacingMode.Proportional: + multiplier = pathLength / spacesCount; + break; + default: + multiplier = 1; + } + let segments = this.segments; + let curveLength = 0; + for (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + let space = spaces[i] * multiplier; + position += space; + let p = position; + if (closed2) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (; ; curve++) { + let length = curves[curve]; + if (p > length) + continue; + if (curve == 0) + p /= length; + else { + let prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + let ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 6e-3; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 6e-3; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (; ; segment++) { + let length = segments[segment]; + if (p > length) + continue; + if (segment == 0) + p /= length; + else { + let prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || i > 0 && space == 0); + } + return out; + } + addBeforePosition(p, temp, i, out, o) { + let x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + addAfterPosition(p, temp, i, out, o) { + let x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + addCurvePosition(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + let tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + let ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + let x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 1e-3) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraint.js + var PhysicsConstraint = class { + data; + _bone = null; + /** The bone constrained by this physics constraint. */ + set bone(bone) { + this._bone = bone; + } + get bone() { + if (!this._bone) + throw new Error("Bone not set."); + else + return this._bone; + } + inertia = 0; + strength = 0; + damping = 0; + massInverse = 0; + wind = 0; + gravity = 0; + mix = 0; + _reset = true; + ux = 0; + uy = 0; + cx = 0; + cy = 0; + tx = 0; + ty = 0; + xOffset = 0; + xVelocity = 0; + yOffset = 0; + yVelocity = 0; + rotateOffset = 0; + rotateVelocity = 0; + scaleOffset = 0; + scaleVelocity = 0; + active = false; + skeleton; + remaining = 0; + lastTime = 0; + constructor(data, skeleton) { + this.data = data; + this.skeleton = skeleton; + this.bone = skeleton.bones[data.bone.index]; + this.inertia = data.inertia; + this.strength = data.strength; + this.damping = data.damping; + this.massInverse = data.massInverse; + this.wind = data.wind; + this.gravity = data.gravity; + this.mix = data.mix; + } + reset() { + this.remaining = 0; + this.lastTime = this.skeleton.time; + this._reset = true; + this.xOffset = 0; + this.xVelocity = 0; + this.yOffset = 0; + this.yVelocity = 0; + this.rotateOffset = 0; + this.rotateVelocity = 0; + this.scaleOffset = 0; + this.scaleVelocity = 0; + } + setToSetupPose() { + const data = this.data; + this.inertia = data.inertia; + this.strength = data.strength; + this.damping = data.damping; + this.massInverse = data.massInverse; + this.wind = data.wind; + this.gravity = data.gravity; + this.mix = data.mix; + } + isActive() { + return this.active; + } + /** Applies the constraint to the constrained bones. */ + update(physics) { + const mix = this.mix; + if (mix == 0) + return; + const x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0; + const bone = this.bone; + const l = bone.data.length; + switch (physics) { + case Physics.none: + return; + case Physics.reset: + this.reset(); + case Physics.update: + const delta = Math.max(this.skeleton.time - this.lastTime, 0); + this.remaining += delta; + this.lastTime = this.skeleton.time; + const bx = bone.worldX, by = bone.worldY; + if (this._reset) { + this._reset = false; + this.ux = bx; + this.uy = by; + } else { + let a = this.remaining, i = this.inertia, q = this.data.limit * delta, t = this.data.step, f = this.skeleton.data.referenceScale, d = -1; + if (x || y) { + if (x) { + const u = (this.ux - bx) * i; + this.xOffset += u > q ? q : u < -q ? -q : u; + this.ux = bx; + } + if (y) { + const u = (this.uy - by) * i; + this.yOffset += u > q ? q : u < -q ? -q : u; + this.uy = by; + } + if (a >= t) { + d = Math.pow(this.damping, 60 * t); + const m = this.massInverse * t, e = this.strength, w = this.wind * f, g = (Skeleton.yDown ? -this.gravity : this.gravity) * f; + do { + if (x) { + this.xVelocity += (w - this.xOffset * e) * m; + this.xOffset += this.xVelocity * t; + this.xVelocity *= d; + } + if (y) { + this.yVelocity -= (g + this.yOffset * e) * m; + this.yOffset += this.yVelocity * t; + this.yVelocity *= d; + } + a -= t; + } while (a >= t); + } + if (x) + bone.worldX += this.xOffset * mix * this.data.x; + if (y) + bone.worldY += this.yOffset * mix * this.data.y; + } + if (rotateOrShearX || scaleX) { + let ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0; + let dx = this.cx - bone.worldX, dy = this.cy - bone.worldY; + if (dx > q) + dx = q; + else if (dx < -q) + dx = -q; + if (dy > q) + dy = q; + else if (dy < -q) + dy = -q; + if (rotateOrShearX) { + mr = (this.data.rotate + this.data.shearX) * mix; + let r = Math.atan2(dy + this.ty, dx + this.tx) - ca - this.rotateOffset * mr; + this.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i; + r = this.rotateOffset * mr + ca; + c = Math.cos(r); + s = Math.sin(r); + if (scaleX) { + r = l * bone.getWorldScaleX(); + if (r > 0) + this.scaleOffset += (dx * c + dy * s) * i / r; + } + } else { + c = Math.cos(ca); + s = Math.sin(ca); + const r = l * bone.getWorldScaleX(); + if (r > 0) + this.scaleOffset += (dx * c + dy * s) * i / r; + } + a = this.remaining; + if (a >= t) { + if (d == -1) + d = Math.pow(this.damping, 60 * t); + const m = this.massInverse * t, e = this.strength, w = this.wind, g = Skeleton.yDown ? -this.gravity : this.gravity, h = l / f; + while (true) { + a -= t; + if (scaleX) { + this.scaleVelocity += (w * c - g * s - this.scaleOffset * e) * m; + this.scaleOffset += this.scaleVelocity * t; + this.scaleVelocity *= d; + } + if (rotateOrShearX) { + this.rotateVelocity -= ((w * s + g * c) * h + this.rotateOffset * e) * m; + this.rotateOffset += this.rotateVelocity * t; + this.rotateVelocity *= d; + if (a < t) + break; + const r = this.rotateOffset * mr + ca; + c = Math.cos(r); + s = Math.sin(r); + } else if (a < t) + break; + } + } + } + this.remaining = a; + } + this.cx = bone.worldX; + this.cy = bone.worldY; + break; + case Physics.pose: + if (x) + bone.worldX += this.xOffset * mix * this.data.x; + if (y) + bone.worldY += this.yOffset * mix * this.data.y; + } + if (rotateOrShearX) { + let o = this.rotateOffset * mix, s = 0, c = 0, a = 0; + if (this.data.shearX > 0) { + let r = 0; + if (this.data.rotate > 0) { + r = o * this.data.rotate; + s = Math.sin(r); + c = Math.cos(r); + a = bone.b; + bone.b = c * a - s * bone.d; + bone.d = s * a + c * bone.d; + } + r += o * this.data.shearX; + s = Math.sin(r); + c = Math.cos(r); + a = bone.a; + bone.a = c * a - s * bone.c; + bone.c = s * a + c * bone.c; + } else { + o *= this.data.rotate; + s = Math.sin(o); + c = Math.cos(o); + a = bone.a; + bone.a = c * a - s * bone.c; + bone.c = s * a + c * bone.c; + a = bone.b; + bone.b = c * a - s * bone.d; + bone.d = s * a + c * bone.d; + } + } + if (scaleX) { + const s = 1 + this.scaleOffset * mix * this.data.scaleX; + bone.a *= s; + bone.c *= s; + } + if (physics != Physics.pose) { + this.tx = l * bone.a; + this.ty = l * bone.c; + } + bone.updateAppliedTransform(); + } + /** Translates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone moved an additional + * amount in world space. */ + translate(x, y) { + this.ux -= x; + this.uy -= y; + this.cx -= x; + this.cy -= y; + } + /** Rotates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone rotated around the + * specified point in world space. */ + rotate(x, y, degrees) { + const r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r); + const dx = this.cx - x, dy = this.cy - y; + this.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/Slot.js + var Slot = class { + /** The slot's setup pose data. */ + data; + /** The bone this slot belongs to. */ + bone; + /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two + * color tinting. */ + color; + /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark + * color's alpha is not used. */ + darkColor = null; + attachment = null; + attachmentState = 0; + /** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the + * {@link Sequence#getSetupIndex()}. */ + sequenceIndex = -1; + /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a + * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions. + * + * See {@link VertexAttachment#computeWorldVertices()} and {@link DeformTimeline}. */ + deform = new Array(); + constructor(data, bone) { + if (!data) + throw new Error("data cannot be null."); + if (!bone) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new Color(); + this.darkColor = !data.darkColor ? null : new Color(); + this.setToSetupPose(); + } + /** The skeleton this slot belongs to. */ + getSkeleton() { + return this.bone.skeleton; + } + /** The current attachment for the slot, or null if the slot has no attachment. */ + getAttachment() { + return this.attachment; + } + /** Sets the slot's attachment and, if the attachment changed, resets {@link #sequenceIndex} and clears the {@link #deform}. + * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getTimelineAttachment()} as the + * specified attachment. */ + setAttachment(attachment) { + if (this.attachment == attachment) + return; + if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment) || attachment.timelineAttachment != this.attachment.timelineAttachment) { + this.deform.length = 0; + } + this.attachment = attachment; + this.sequenceIndex = -1; + } + /** Sets this slot to the setup pose. */ + setToSetupPose() { + this.color.setFromColor(this.data.color); + if (this.darkColor) + this.darkColor.setFromColor(this.data.darkColor); + if (!this.data.attachmentName) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/TransformConstraint.js + var TransformConstraint = class { + /** The transform constraint's setup pose data. */ + data; + /** The bones that will be modified by this transform constraint. */ + bones; + /** The target bone whose world transform will be copied to the constrained bones. */ + target; + mixRotate = 0; + mixX = 0; + mixY = 0; + mixScaleX = 0; + mixScaleY = 0; + mixShearY = 0; + temp = new Vector2(); + active = false; + constructor(data, skeleton) { + if (!data) + throw new Error("data cannot be null."); + if (!skeleton) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) { + let bone = skeleton.findBone(data.bones[i].name); + if (!bone) + throw new Error(`Couldn't find bone ${data.bones[i].name}.`); + this.bones.push(bone); + } + let target = skeleton.findBone(data.target.name); + if (!target) + throw new Error(`Couldn't find target bone ${data.target.name}.`); + this.target = target; + this.mixRotate = data.mixRotate; + this.mixX = data.mixX; + this.mixY = data.mixY; + this.mixScaleX = data.mixScaleX; + this.mixScaleY = data.mixScaleY; + this.mixShearY = data.mixShearY; + } + isActive() { + return this.active; + } + setToSetupPose() { + const data = this.data; + this.mixRotate = data.mixRotate; + this.mixX = data.mixX; + this.mixY = data.mixY; + this.mixScaleX = data.mixScaleX; + this.mixScaleY = data.mixScaleY; + this.mixShearY = data.mixShearY; + } + update(physics) { + if (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleY == 0 && this.mixShearY == 0) + return; + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + } + applyAbsoluteWorld() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let translate = mixX != 0 || mixY != 0; + let target = this.target; + let ta = target.a, tb = target.b, tc = target.c, td = target.d; + let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + let offsetRotation = this.data.offsetRotation * degRadReflect; + let offsetShearY = this.data.offsetShearY * degRadReflect; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (mixRotate != 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + let cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + if (translate) { + let temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * mixX; + bone.worldY += (temp.y - bone.worldY) * mixY; + } + if (mixScaleX != 0) { + let s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + if (s != 0) + s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s; + bone.a *= s; + bone.c *= s; + } + if (mixScaleY != 0) { + let s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + if (s != 0) + s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s; + bone.b *= s; + bone.d *= s; + } + if (mixShearY > 0) { + let b = bone.b, d = bone.d; + let by = Math.atan2(d, b); + let r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r = by + (r + offsetShearY) * mixShearY; + let s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + } + bone.updateAppliedTransform(); + } + } + applyRelativeWorld() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let translate = mixX != 0 || mixY != 0; + let target = this.target; + let ta = target.a, tb = target.b, tc = target.c, td = target.d; + let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + let offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (mixRotate != 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let r = Math.atan2(tc, ta) + offsetRotation; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + let cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + if (translate) { + let temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * mixX; + bone.worldY += temp.y * mixY; + } + if (mixScaleX != 0) { + let s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1; + bone.a *= s; + bone.c *= s; + } + if (mixScaleY != 0) { + let s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1; + bone.b *= s; + bone.d *= s; + } + if (mixShearY > 0) { + let r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + let b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY; + let s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + } + bone.updateAppliedTransform(); + } + } + applyAbsoluteLocal() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let target = this.target; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + let rotation = bone.arotation; + if (mixRotate != 0) + rotation += (target.arotation - rotation + this.data.offsetRotation) * mixRotate; + let x = bone.ax, y = bone.ay; + x += (target.ax - x + this.data.offsetX) * mixX; + y += (target.ay - y + this.data.offsetY) * mixY; + let scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (mixScaleX != 0 && scaleX != 0) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX; + if (mixScaleY != 0 && scaleY != 0) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY; + let shearY = bone.ashearY; + if (mixShearY != 0) + shearY += (target.ashearY - shearY + this.data.offsetShearY) * mixShearY; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + applyRelativeLocal() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let target = this.target; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + let rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate; + let x = bone.ax + (target.ax + this.data.offsetX) * mixX; + let y = bone.ay + (target.ay + this.data.offsetY) * mixY; + let scaleX = bone.ascaleX * ((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX + 1); + let scaleY = bone.ascaleY * ((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY + 1); + let shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/Skeleton.js + var Skeleton = class _Skeleton { + static quadTriangles = [0, 1, 2, 2, 3, 0]; + static yDown = false; + /** The skeleton's setup pose data. */ + data; + /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */ + bones; + /** The skeleton's slots in the setup pose draw order. */ + slots; + /** The skeleton's slots in the order they should be drawn. The returned array may be modified to change the draw order. */ + drawOrder; + /** The skeleton's IK constraints. */ + ikConstraints; + /** The skeleton's transform constraints. */ + transformConstraints; + /** The skeleton's path constraints. */ + pathConstraints; + /** The skeleton's physics constraints. */ + physicsConstraints; + /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */ + _updateCache = new Array(); + /** The skeleton's current skin. May be null. */ + skin = null; + /** The color to tint all the skeleton's attachments. */ + color; + /** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale + * inheritance. */ + scaleX = 1; + /** Scales the entire skeleton on the Y axis. This affects all bones, even if the bone's transform mode disallows scale + * inheritance. */ + _scaleY = 1; + get scaleY() { + return _Skeleton.yDown ? -this._scaleY : this._scaleY; + } + set scaleY(scaleY) { + this._scaleY = scaleY; + } + /** Sets the skeleton X position, which is added to the root bone worldX position. */ + x = 0; + /** Sets the skeleton Y position, which is added to the root bone worldY position. */ + y = 0; + /** Returns the skeleton's time. This is used for time-based manipulations, such as {@link PhysicsConstraint}. + *

+ * See {@link #update(float)}. */ + time = 0; + constructor(data) { + if (!data) + throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) { + let boneData = data.bones[i]; + let bone; + if (!boneData.parent) + bone = new Bone(boneData, this, null); + else { + let parent = this.bones[boneData.parent.index]; + bone = new Bone(boneData, this, parent); + parent.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (let i = 0; i < data.slots.length; i++) { + let slotData = data.slots[i]; + let bone = this.bones[slotData.boneData.index]; + let slot = new Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (let i = 0; i < data.ikConstraints.length; i++) { + let ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (let i = 0; i < data.transformConstraints.length; i++) { + let transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (let i = 0; i < data.pathConstraints.length; i++) { + let pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new PathConstraint(pathConstraintData, this)); + } + this.physicsConstraints = new Array(); + for (let i = 0; i < data.physicsConstraints.length; i++) { + let physicsConstraintData = data.physicsConstraints[i]; + this.physicsConstraints.push(new PhysicsConstraint(physicsConstraintData, this)); + } + this.color = new Color(1, 1, 1, 1); + this.updateCache(); + } + /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones, + * constraints, or weighted path attachments are added or removed. */ + updateCache() { + let updateCache = this._updateCache; + updateCache.length = 0; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (this.skin) { + let skinBones = this.skin.bones; + for (let i = 0, n = this.skin.bones.length; i < n; i++) { + let bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone); + } + } + let ikConstraints = this.ikConstraints; + let transformConstraints = this.transformConstraints; + let pathConstraints = this.pathConstraints; + let physicsConstraints = this.physicsConstraints; + let ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length, physicsCount = this.physicsConstraints.length; + let constraintCount = ikCount + transformCount + pathCount + physicsCount; + outer: + for (let i = 0; i < constraintCount; i++) { + for (let ii = 0; ii < ikCount; ii++) { + let constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (let ii = 0; ii < transformCount; ii++) { + let constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (let ii = 0; ii < pathCount; ii++) { + let constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + for (let ii = 0; ii < physicsCount; ii++) { + const constraint = physicsConstraints[ii]; + if (constraint.data.order == i) { + this.sortPhysicsConstraint(constraint); + continue outer; + } + } + } + for (let i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + } + sortIkConstraint(constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || this.skin && Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) + return; + let target = constraint.target; + this.sortBone(target); + let constrained = constraint.bones; + let parent = constrained[0]; + this.sortBone(parent); + if (constrained.length == 1) { + this._updateCache.push(constraint); + this.sortReset(parent.children); + } else { + let child = constrained[constrained.length - 1]; + this.sortBone(child); + this._updateCache.push(constraint); + this.sortReset(parent.children); + child.sorted = true; + } + } + sortPathConstraint(constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || this.skin && Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) + return; + let slot = constraint.target; + let slotIndex = slot.data.index; + let slotBone = slot.bone; + if (this.skin) + this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (let i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + let attachment = slot.getAttachment(); + if (attachment instanceof PathAttachment) + this.sortPathConstraintAttachmentWith(attachment, slotBone); + let constrained = constraint.bones; + let boneCount = constrained.length; + for (let i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (let i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (let i = 0; i < boneCount; i++) + constrained[i].sorted = true; + } + sortTransformConstraint(constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || this.skin && Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) + return; + this.sortBone(constraint.target); + let constrained = constraint.bones; + let boneCount = constrained.length; + if (constraint.data.local) { + for (let i = 0; i < boneCount; i++) { + let child = constrained[i]; + this.sortBone(child.parent); + this.sortBone(child); + } + } else { + for (let i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + this._updateCache.push(constraint); + for (let i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (let i = 0; i < boneCount; i++) + constrained[i].sorted = true; + } + sortPathConstraintAttachment(skin, slotIndex, slotBone) { + let attachments = skin.attachments[slotIndex]; + if (!attachments) + return; + for (let key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + } + sortPathConstraintAttachmentWith(attachment, slotBone) { + if (!(attachment instanceof PathAttachment)) + return; + let pathBones = attachment.bones; + if (!pathBones) + this.sortBone(slotBone); + else { + let bones = this.bones; + for (let i = 0, n = pathBones.length; i < n; ) { + let nn = pathBones[i++]; + nn += i; + while (i < nn) + this.sortBone(bones[pathBones[i++]]); + } + } + } + sortPhysicsConstraint(constraint) { + const bone = constraint.bone; + constraint.active = bone.active && (!constraint.data.skinRequired || this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) + return; + this.sortBone(bone); + this._updateCache.push(constraint); + this.sortReset(bone.children); + bone.sorted = true; + } + sortBone(bone) { + if (!bone) + return; + if (bone.sorted) + return; + let parent = bone.parent; + if (parent) + this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + } + sortReset(bones) { + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (!bone.active) + continue; + if (bone.sorted) + this.sortReset(bone.children); + bone.sorted = false; + } + } + /** Updates the world transform for each bone and applies all constraints. + * + * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine + * Runtimes Guide. */ + updateWorldTransform(physics) { + if (physics === void 0 || physics === null) + throw new Error("physics is undefined"); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + } + let updateCache = this._updateCache; + for (let i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(physics); + } + updateWorldTransformWith(physics, parent) { + let rootBone = this.getRootBone(); + if (!rootBone) + throw new Error("Root bone must not be null."); + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + rootBone.worldX = pa * this.x + pb * this.y + parent.worldX; + rootBone.worldY = pc * this.x + pd * this.y + parent.worldY; + const rx = (rootBone.rotation + rootBone.shearX) * MathUtils.degRad; + const ry = (rootBone.rotation + 90 + rootBone.shearY) * MathUtils.degRad; + const la = Math.cos(rx) * rootBone.scaleX; + const lb = Math.cos(ry) * rootBone.scaleY; + const lc = Math.sin(rx) * rootBone.scaleX; + const ld = Math.sin(ry) * rootBone.scaleY; + rootBone.a = (pa * la + pb * lc) * this.scaleX; + rootBone.b = (pa * lb + pb * ld) * this.scaleX; + rootBone.c = (pc * la + pd * lc) * this.scaleY; + rootBone.d = (pc * lb + pd * ld) * this.scaleY; + let updateCache = this._updateCache; + for (let i = 0, n = updateCache.length; i < n; i++) { + let updatable = updateCache[i]; + if (updatable != rootBone) + updatable.update(physics); + } + } + /** Sets the bones, constraints, and slots to their setup pose values. */ + setToSetupPose() { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + } + /** Sets the bones and constraints to their setup pose values. */ + setBonesToSetupPose() { + for (const bone of this.bones) + bone.setToSetupPose(); + for (const constraint of this.ikConstraints) + constraint.setToSetupPose(); + for (const constraint of this.transformConstraints) + constraint.setToSetupPose(); + for (const constraint of this.pathConstraints) + constraint.setToSetupPose(); + for (const constraint of this.physicsConstraints) + constraint.setToSetupPose(); + } + /** Sets the slots and draw order to their setup pose values. */ + setSlotsToSetupPose() { + let slots = this.slots; + Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (let i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + } + /** @returns May return null. */ + getRootBone() { + if (this.bones.length == 0) + return null; + return this.bones[0]; + } + /** @returns May be null. */ + findBone(boneName) { + if (!boneName) + throw new Error("boneName cannot be null."); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (bone.data.name == boneName) + return bone; + } + return null; + } + /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it + * repeatedly. + * @returns May be null. */ + findSlot(slotName) { + if (!slotName) + throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (slot.data.name == slotName) + return slot; + } + return null; + } + /** Sets a skin by name. + * + * See {@link #setSkin()}. */ + setSkinByName(skinName) { + let skin = this.data.findSkin(skinName); + if (!skin) + throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + } + /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the + * skin is changed, {@link #updateCache()} is called. + * + * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no + * old skin, each slot's setup mode attachment is attached from the new skin. + * + * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling + * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the + * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin. + * @param newSkin May be null. */ + setSkin(newSkin) { + if (newSkin == this.skin) + return; + if (newSkin) { + if (this.skin) + newSkin.attachAll(this, this.skin); + else { + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + let name = slot.data.attachmentName; + if (name) { + let attachment = newSkin.getAttachment(i, name); + if (attachment) + slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + } + /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment + * name. + * + * See {@link #getAttachment()}. + * @returns May be null. */ + getAttachmentByName(slotName, attachmentName) { + let slot = this.data.findSlot(slotName); + if (!slot) + throw new Error(`Can't find slot with name ${slotName}`); + return this.getAttachment(slot.index, attachmentName); + } + /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and + * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked. + * + * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. + * @returns May be null. */ + getAttachment(slotIndex, attachmentName) { + if (!attachmentName) + throw new Error("attachmentName cannot be null."); + if (this.skin) { + let attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) + return attachment; + } + if (this.data.defaultSkin) + return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + } + /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with + * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}. + * @param attachmentName May be null to clear the slot's attachment. */ + setAttachment(slotName, attachmentName) { + if (!slotName) + throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (slot.data.name == slotName) { + let attachment = null; + if (attachmentName) { + attachment = this.getAttachment(i, attachmentName); + if (!attachment) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + } + /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method + * than to call it repeatedly. + * @return May be null. */ + findIkConstraint(constraintName) { + if (!constraintName) + throw new Error("constraintName cannot be null."); + return this.ikConstraints.find((constraint) => constraint.data.name == constraintName) ?? null; + } + /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of + * this method than to call it repeatedly. + * @return May be null. */ + findTransformConstraint(constraintName) { + if (!constraintName) + throw new Error("constraintName cannot be null."); + return this.transformConstraints.find((constraint) => constraint.data.name == constraintName) ?? null; + } + /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method + * than to call it repeatedly. + * @return May be null. */ + findPathConstraint(constraintName) { + if (!constraintName) + throw new Error("constraintName cannot be null."); + return this.pathConstraints.find((constraint) => constraint.data.name == constraintName) ?? null; + } + /** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this + * method than to call it repeatedly. */ + findPhysicsConstraint(constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + return this.physicsConstraints.find((constraint) => constraint.data.name == constraintName) ?? null; + } + /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose as `{ x: number, y: number, width: number, height: number }`. + * Note that this method will create temporary objects which can add to garbage collection pressure. Use `getBounds()` if garbage collection is a concern. */ + getBoundsRect() { + let offset = new Vector2(); + let size = new Vector2(); + this.getBounds(offset, size); + return { x: offset.x, y: offset.y, width: size.x, height: size.y }; + } + /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose. + * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB. + * @param size An output value, the width and height of the AABB. + * @param temp Working memory to temporarily store attachments' computed world vertices. + * @param clipper {@link SkeletonClipping} to use. If null, no clipping is applied. */ + getBounds(offset, size, temp = new Array(2), clipper3 = null) { + if (!offset) + throw new Error("offset cannot be null."); + if (!size) + throw new Error("size cannot be null."); + let drawOrder = this.drawOrder; + let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (let i = 0, n = drawOrder.length; i < n; i++) { + let slot = drawOrder[i]; + if (!slot.bone.active) + continue; + let verticesLength = 0; + let vertices = null; + let triangles = null; + let attachment = slot.getAttachment(); + if (attachment instanceof RegionAttachment) { + verticesLength = 8; + vertices = Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot, vertices, 0, 2); + triangles = _Skeleton.quadTriangles; + } else if (attachment instanceof MeshAttachment) { + let mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + triangles = mesh.triangles; + } else if (attachment instanceof ClippingAttachment && clipper3 != null) { + clipper3.clipStart(slot, attachment); + continue; + } + if (vertices && triangles) { + if (clipper3 != null && clipper3.isClipping()) { + clipper3.clipTriangles(vertices, verticesLength, triangles, triangles.length); + vertices = clipper3.clippedVertices; + verticesLength = clipper3.clippedVertices.length; + } + for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) { + let x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + if (clipper3 != null) + clipper3.clipEndWithSlot(slot); + } + if (clipper3 != null) + clipper3.clipEnd(); + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + } + /** Increments the skeleton's {@link #time}. */ + update(delta) { + this.time += delta; + } + physicsTranslate(x, y) { + const physicsConstraints = this.physicsConstraints; + for (let i = 0, n = physicsConstraints.length; i < n; i++) + physicsConstraints[i].translate(x, y); + } + /** Calls {@link PhysicsConstraint#rotate(float, float, float)} for each physics constraint. */ + physicsRotate(x, y, degrees) { + const physicsConstraints = this.physicsConstraints; + for (let i = 0, n = physicsConstraints.length; i < n; i++) + physicsConstraints[i].rotate(x, y, degrees); + } + }; + var Physics; + (function(Physics2) { + Physics2[Physics2["none"] = 0] = "none"; + Physics2[Physics2["reset"] = 1] = "reset"; + Physics2[Physics2["update"] = 2] = "update"; + Physics2[Physics2["pose"] = 3] = "pose"; + })(Physics || (Physics = {})); + + // node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraintData.js + var PhysicsConstraintData = class extends ConstraintData { + _bone = null; + /** The bone constrained by this physics constraint. */ + set bone(boneData) { + this._bone = boneData; + } + get bone() { + if (!this._bone) + throw new Error("BoneData not set."); + else + return this._bone; + } + x = 0; + y = 0; + rotate = 0; + scaleX = 0; + shearX = 0; + limit = 0; + step = 0; + inertia = 0; + strength = 0; + damping = 0; + massInverse = 0; + wind = 0; + gravity = 0; + /** A percentage (0-1) that controls the mix between the constrained and unconstrained poses. */ + mix = 0; + inertiaGlobal = false; + strengthGlobal = false; + dampingGlobal = false; + massGlobal = false; + windGlobal = false; + gravityGlobal = false; + mixGlobal = false; + constructor(name) { + super(name, 0, false); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/SkeletonData.js + var SkeletonData = class { + /** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */ + name = null; + /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */ + bones = new Array(); + // Ordered parents first. + /** The skeleton's slots in the setup pose draw order. */ + slots = new Array(); + // Setup pose draw order. + skins = new Array(); + /** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine. + * + * See {@link Skeleton#getAttachmentByName()}. + * May be null. */ + defaultSkin = null; + /** The skeleton's events. */ + events = new Array(); + /** The skeleton's animations. */ + animations = new Array(); + /** The skeleton's IK constraints. */ + ikConstraints = new Array(); + /** The skeleton's transform constraints. */ + transformConstraints = new Array(); + /** The skeleton's path constraints. */ + pathConstraints = new Array(); + /** The skeleton's physics constraints. */ + physicsConstraints = new Array(); + /** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */ + x = 0; + /** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */ + y = 0; + /** The width of the skeleton's axis aligned bounding box in the setup pose. */ + width = 0; + /** The height of the skeleton's axis aligned bounding box in the setup pose. */ + height = 0; + /** Baseline scale factor for applying distance-dependent effects on non-scalable properties, such as angle or scale. Default + * is 100. */ + referenceScale = 100; + /** The Spine version used to export the skeleton data, or null. */ + version = null; + /** The skeleton data hash. This value will change if any of the skeleton data has changed. May be null. */ + hash = null; + // Nonessential + /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */ + fps = 0; + /** The path to the images directory as defined in Spine. Available only when nonessential data was exported. May be null. */ + imagesPath = null; + /** The path to the audio directory as defined in Spine. Available only when nonessential data was exported. May be null. */ + audioPath = null; + /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findBone(boneName) { + if (!boneName) + throw new Error("boneName cannot be null."); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + } + /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findSlot(slotName) { + if (!slotName) + throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + } + /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findSkin(skinName) { + if (!skinName) + throw new Error("skinName cannot be null."); + let skins = this.skins; + for (let i = 0, n = skins.length; i < n; i++) { + let skin = skins[i]; + if (skin.name == skinName) + return skin; + } + return null; + } + /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findEvent(eventDataName) { + if (!eventDataName) + throw new Error("eventDataName cannot be null."); + let events = this.events; + for (let i = 0, n = events.length; i < n; i++) { + let event = events[i]; + if (event.name == eventDataName) + return event; + } + return null; + } + /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to + * call it multiple times. + * @returns May be null. */ + findAnimation(animationName) { + if (!animationName) + throw new Error("animationName cannot be null."); + let animations = this.animations; + for (let i = 0, n = animations.length; i < n; i++) { + let animation = animations[i]; + if (animation.name == animationName) + return animation; + } + return null; + } + /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method + * than to call it multiple times. + * @return May be null. */ + findIkConstraint(constraintName) { + if (!constraintName) + throw new Error("constraintName cannot be null."); + const ikConstraints = this.ikConstraints; + for (let i = 0, n = ikConstraints.length; i < n; i++) { + const constraint = ikConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + } + /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of + * this method than to call it multiple times. + * @return May be null. */ + findTransformConstraint(constraintName) { + if (!constraintName) + throw new Error("constraintName cannot be null."); + const transformConstraints = this.transformConstraints; + for (let i = 0, n = transformConstraints.length; i < n; i++) { + const constraint = transformConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + } + /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method + * than to call it multiple times. + * @return May be null. */ + findPathConstraint(constraintName) { + if (!constraintName) + throw new Error("constraintName cannot be null."); + const pathConstraints = this.pathConstraints; + for (let i = 0, n = pathConstraints.length; i < n; i++) { + const constraint = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + } + /** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this method + * than to call it multiple times. + * @return May be null. */ + findPhysicsConstraint(constraintName) { + if (!constraintName) + throw new Error("constraintName cannot be null."); + const physicsConstraints = this.physicsConstraints; + for (let i = 0, n = physicsConstraints.length; i < n; i++) { + const constraint = physicsConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/Skin.js + var SkinEntry = class { + slotIndex; + name; + attachment; + constructor(slotIndex = 0, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + }; + var Skin = class { + /** The skin's name, which is unique across all skins in the skeleton. */ + name; + attachments = new Array(); + bones = Array(); + constraints = new Array(); + /** The color of the skin as it was in Spine, or a default color if nonessential data was not exported. */ + color = new Color(0.99607843, 0.61960787, 0.30980393, 1); + // fe9e4fff + constructor(name) { + if (!name) + throw new Error("name cannot be null."); + this.name = name; + } + /** Adds an attachment to the skin for the specified slot index and name. */ + setAttachment(slotIndex, name, attachment) { + if (!attachment) + throw new Error("attachment cannot be null."); + let attachments = this.attachments; + if (slotIndex >= attachments.length) + attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) + attachments[slotIndex] = {}; + attachments[slotIndex][name] = attachment; + } + /** Adds all attachments, bones, and constraints from the specified skin to this skin. */ + addSkin(skin) { + for (let i = 0; i < skin.bones.length; i++) { + let bone = skin.bones[i]; + let contained = false; + for (let ii = 0; ii < this.bones.length; ii++) { + if (this.bones[ii] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (let i = 0; i < skin.constraints.length; i++) { + let constraint = skin.constraints[i]; + let contained = false; + for (let ii = 0; ii < this.constraints.length; ii++) { + if (this.constraints[ii] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + let attachments = skin.getAttachments(); + for (let i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not + * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */ + copySkin(skin) { + for (let i = 0; i < skin.bones.length; i++) { + let bone = skin.bones[i]; + let contained = false; + for (let ii = 0; ii < this.bones.length; ii++) { + if (this.bones[ii] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (let i = 0; i < skin.constraints.length; i++) { + let constraint = skin.constraints[i]; + let contained = false; + for (let ii = 0; ii < this.constraints.length; ii++) { + if (this.constraints[ii] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + let attachments = skin.getAttachments(); + for (let i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (!attachment.attachment) + continue; + if (attachment.attachment instanceof MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + } + /** Returns the attachment for the specified slot index and name, or null. */ + getAttachment(slotIndex, name) { + let dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + } + /** Removes the attachment in the skin for the specified slot index and name, if any. */ + removeAttachment(slotIndex, name) { + let dictionary = this.attachments[slotIndex]; + if (dictionary) + delete dictionary[name]; + } + /** Returns all attachments in this skin. */ + getAttachments() { + let entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + let slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (let name in slotAttachments) { + let attachment = slotAttachments[name]; + if (attachment) + entries.push(new SkinEntry(i, name, attachment)); + } + } + } + return entries; + } + /** Returns all attachments in this skin for the specified slot index. */ + getAttachmentsForSlot(slotIndex, attachments) { + let slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (let name in slotAttachments) { + let attachment = slotAttachments[name]; + if (attachment) + attachments.push(new SkinEntry(slotIndex, name, attachment)); + } + } + } + /** Clears all attachments, bones, and constraints. */ + clear() { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + } + /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */ + attachAll(skeleton, oldSkin) { + let slotIndex = 0; + for (let i = 0; i < skeleton.slots.length; i++) { + let slot = skeleton.slots[i]; + let slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + let dictionary = oldSkin.attachments[slotIndex]; + for (let key in dictionary) { + let skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + let attachment = this.getAttachment(slotIndex, key); + if (attachment) + slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/SlotData.js + var SlotData = class { + /** The index of the slot in {@link Skeleton#getSlots()}. */ + index = 0; + /** The name of the slot, which is unique across all slots in the skeleton. */ + name; + /** The bone this slot belongs to. */ + boneData; + /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two + * color tinting. */ + color = new Color(1, 1, 1, 1); + /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark + * color's alpha is not used. */ + darkColor = null; + /** The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible. */ + attachmentName = null; + /** The blend mode for drawing the slot's attachment. */ + blendMode = BlendMode.Normal; + /** False if the slot was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */ + visible = true; + constructor(index, name, boneData) { + if (index < 0) + throw new Error("index must be >= 0."); + if (!name) + throw new Error("name cannot be null."); + if (!boneData) + throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + }; + var BlendMode; + (function(BlendMode2) { + BlendMode2[BlendMode2["Normal"] = 0] = "Normal"; + BlendMode2[BlendMode2["Additive"] = 1] = "Additive"; + BlendMode2[BlendMode2["Multiply"] = 2] = "Multiply"; + BlendMode2[BlendMode2["Screen"] = 3] = "Screen"; + })(BlendMode || (BlendMode = {})); + + // node_modules/@esotericsoftware/spine-core/dist/TransformConstraintData.js + var TransformConstraintData = class extends ConstraintData { + /** The bones that will be modified by this transform constraint. */ + bones = new Array(); + /** The target bone whose world transform will be copied to the constrained bones. */ + _target = null; + set target(boneData) { + this._target = boneData; + } + get target() { + if (!this._target) + throw new Error("BoneData not set."); + else + return this._target; + } + mixRotate = 0; + mixX = 0; + mixY = 0; + mixScaleX = 0; + mixScaleY = 0; + mixShearY = 0; + /** An offset added to the constrained bone rotation. */ + offsetRotation = 0; + /** An offset added to the constrained bone X translation. */ + offsetX = 0; + /** An offset added to the constrained bone Y translation. */ + offsetY = 0; + /** An offset added to the constrained bone scaleX. */ + offsetScaleX = 0; + /** An offset added to the constrained bone scaleY. */ + offsetScaleY = 0; + /** An offset added to the constrained bone shearY. */ + offsetShearY = 0; + relative = false; + local = false; + constructor(name) { + super(name, 0, false); + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/SkeletonBinary.js + var SkeletonBinary = class { + /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at + * runtime than were used in Spine. + * + * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */ + scale = 1; + attachmentLoader; + linkedMeshes = new Array(); + constructor(attachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + readSkeletonData(binary) { + let scale = this.scale; + let skeletonData = new SkeletonData(); + skeletonData.name = ""; + let input = new BinaryInput(binary); + let lowHash = input.readInt32(); + let highHash = input.readInt32(); + skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16); + skeletonData.version = input.readString(); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + skeletonData.referenceScale = input.readFloat() * scale; + let nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + let n = 0; + n = input.readInt(true); + for (let i = 0; i < n; i++) { + let str = input.readString(); + if (!str) + throw new Error("String in string table must not be null."); + input.strings.push(str); + } + n = input.readInt(true); + for (let i = 0; i < n; i++) { + let name = input.readString(); + if (!name) + throw new Error("Bone name must not be null."); + let parent = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + let data = new BoneData(i, name, parent); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.inherit = input.readByte(); + data.skinRequired = input.readBoolean(); + if (nonessential) { + Color.rgba8888ToColor(data.color, input.readInt32()); + data.icon = input.readString() ?? void 0; + data.visible = input.readBoolean(); + } + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (let i = 0; i < n; i++) { + let slotName = input.readString(); + if (!slotName) + throw new Error("Slot name must not be null."); + let boneData = skeletonData.bones[input.readInt(true)]; + let data = new SlotData(i, slotName, boneData); + Color.rgba8888ToColor(data.color, input.readInt32()); + let darkColor2 = input.readInt32(); + if (darkColor2 != -1) + Color.rgb888ToColor(data.darkColor = new Color(), darkColor2); + data.attachmentName = input.readStringRef(); + data.blendMode = input.readInt(true); + if (nonessential) + data.visible = input.readBoolean(); + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (let i = 0, nn; i < n; i++) { + let name = input.readString(); + if (!name) + throw new Error("IK constraint data name must not be null."); + let data = new IkConstraintData(name); + data.order = input.readInt(true); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + let flags = input.readByte(); + data.skinRequired = (flags & 1) != 0; + data.bendDirection = (flags & 2) != 0 ? 1 : -1; + data.compress = (flags & 4) != 0; + data.stretch = (flags & 8) != 0; + data.uniform = (flags & 16) != 0; + if ((flags & 32) != 0) + data.mix = (flags & 64) != 0 ? input.readFloat() : 1; + if ((flags & 128) != 0) + data.softness = input.readFloat() * scale; + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (let i = 0, nn; i < n; i++) { + let name = input.readString(); + if (!name) + throw new Error("Transform constraint data name must not be null."); + let data = new TransformConstraintData(name); + data.order = input.readInt(true); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + let flags = input.readByte(); + data.skinRequired = (flags & 1) != 0; + data.local = (flags & 2) != 0; + data.relative = (flags & 4) != 0; + if ((flags & 8) != 0) + data.offsetRotation = input.readFloat(); + if ((flags & 16) != 0) + data.offsetX = input.readFloat() * scale; + if ((flags & 32) != 0) + data.offsetY = input.readFloat() * scale; + if ((flags & 64) != 0) + data.offsetScaleX = input.readFloat(); + if ((flags & 128) != 0) + data.offsetScaleY = input.readFloat(); + flags = input.readByte(); + if ((flags & 1) != 0) + data.offsetShearY = input.readFloat(); + if ((flags & 2) != 0) + data.mixRotate = input.readFloat(); + if ((flags & 4) != 0) + data.mixX = input.readFloat(); + if ((flags & 8) != 0) + data.mixY = input.readFloat(); + if ((flags & 16) != 0) + data.mixScaleX = input.readFloat(); + if ((flags & 32) != 0) + data.mixScaleY = input.readFloat(); + if ((flags & 64) != 0) + data.mixShearY = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (let i = 0, nn; i < n; i++) { + let name = input.readString(); + if (!name) + throw new Error("Path constraint data name must not be null."); + let data = new PathConstraintData(name); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + const flags = input.readByte(); + data.positionMode = flags & 1; + data.spacingMode = flags >> 1 & 3; + data.rotateMode = flags >> 3 & 3; + if ((flags & 128) != 0) + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == PositionMode.Fixed) + data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) + data.spacing *= scale; + data.mixRotate = input.readFloat(); + data.mixX = input.readFloat(); + data.mixY = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + n = input.readInt(true); + for (let i = 0, nn; i < n; i++) { + const name = input.readString(); + if (!name) + throw new Error("Physics constraint data name must not be null."); + const data = new PhysicsConstraintData(name); + data.order = input.readInt(true); + data.bone = skeletonData.bones[input.readInt(true)]; + let flags = input.readByte(); + data.skinRequired = (flags & 1) != 0; + if ((flags & 2) != 0) + data.x = input.readFloat(); + if ((flags & 4) != 0) + data.y = input.readFloat(); + if ((flags & 8) != 0) + data.rotate = input.readFloat(); + if ((flags & 16) != 0) + data.scaleX = input.readFloat(); + if ((flags & 32) != 0) + data.shearX = input.readFloat(); + data.limit = ((flags & 64) != 0 ? input.readFloat() : 5e3) * scale; + data.step = 1 / input.readUnsignedByte(); + data.inertia = input.readFloat(); + data.strength = input.readFloat(); + data.damping = input.readFloat(); + data.massInverse = (flags & 128) != 0 ? input.readFloat() : 1; + data.wind = input.readFloat(); + data.gravity = input.readFloat(); + flags = input.readByte(); + if ((flags & 1) != 0) + data.inertiaGlobal = true; + if ((flags & 2) != 0) + data.strengthGlobal = true; + if ((flags & 4) != 0) + data.dampingGlobal = true; + if ((flags & 8) != 0) + data.massGlobal = true; + if ((flags & 16) != 0) + data.windGlobal = true; + if ((flags & 32) != 0) + data.gravityGlobal = true; + if ((flags & 64) != 0) + data.mixGlobal = true; + data.mix = (flags & 128) != 0 ? input.readFloat() : 1; + skeletonData.physicsConstraints.push(data); + } + let defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + let i = skeletonData.skins.length; + Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) { + let skin = this.readSkin(input, skeletonData, false, nonessential); + if (!skin) + throw new Error("readSkin() should not have returned null."); + skeletonData.skins[i] = skin; + } + } + n = this.linkedMeshes.length; + for (let i = 0; i < n; i++) { + let linkedMesh = this.linkedMeshes[i]; + const skin = skeletonData.skins[linkedMesh.skinIndex]; + if (!linkedMesh.parent) + throw new Error("Linked mesh parent must not be null"); + let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (!parent) + throw new Error(`Parent mesh not found: ${linkedMesh.parent}`); + linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? parent : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent); + if (linkedMesh.mesh.region != null) + linkedMesh.mesh.updateRegion(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (let i = 0; i < n; i++) { + let eventName = input.readString(); + if (!eventName) + throw new Error("Event data name must not be null"); + let data = new EventData(eventName); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (let i = 0; i < n; i++) { + let animationName = input.readString(); + if (!animationName) + throw new Error("Animatio name must not be null."); + skeletonData.animations.push(this.readAnimation(input, animationName, skeletonData)); + } + return skeletonData; + } + readSkin(input, skeletonData, defaultSkin, nonessential) { + let skin = null; + let slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new Skin("default"); + } else { + let skinName = input.readString(); + if (!skinName) + throw new Error("Skin name must not be null."); + skin = new Skin(skinName); + if (nonessential) + Color.rgba8888ToColor(skin.color, input.readInt32()); + skin.bones.length = input.readInt(true); + for (let i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (let i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (let i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (let i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + for (let i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.physicsConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (let i = 0; i < slotCount; i++) { + let slotIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let name = input.readStringRef(); + if (!name) + throw new Error("Attachment name must not be null"); + let attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential); + if (attachment) + skin.setAttachment(slotIndex, name, attachment); + } + } + return skin; + } + readAttachment(input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + let scale = this.scale; + let flags = input.readByte(); + const name = (flags & 8) != 0 ? input.readStringRef() : attachmentName; + if (!name) + throw new Error("Attachment name must not be null"); + switch (flags & 7) { + case AttachmentType.Region: { + let path2 = (flags & 16) != 0 ? input.readStringRef() : null; + const color = (flags & 32) != 0 ? input.readInt32() : 4294967295; + const sequence = (flags & 64) != 0 ? this.readSequence(input) : null; + let rotation = (flags & 128) != 0 ? input.readFloat() : 0; + let x = input.readFloat(); + let y = input.readFloat(); + let scaleX = input.readFloat(); + let scaleY = input.readFloat(); + let width = input.readFloat(); + let height = input.readFloat(); + if (!path2) + path2 = name; + let region = this.attachmentLoader.newRegionAttachment(skin, name, path2, sequence); + if (!region) + return null; + region.path = path2; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + Color.rgba8888ToColor(region.color, color); + region.sequence = sequence; + if (sequence == null) + region.updateRegion(); + return region; + } + case AttachmentType.BoundingBox: { + let vertices = this.readVertices(input, (flags & 16) != 0); + let color = nonessential ? input.readInt32() : 0; + let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (!box) + return null; + box.worldVerticesLength = vertices.length; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) + Color.rgba8888ToColor(box.color, color); + return box; + } + case AttachmentType.Mesh: { + let path2 = (flags & 16) != 0 ? input.readStringRef() : name; + const color = (flags & 32) != 0 ? input.readInt32() : 4294967295; + const sequence = (flags & 64) != 0 ? this.readSequence(input) : null; + const hullLength = input.readInt(true); + const vertices = this.readVertices(input, (flags & 128) != 0); + const uvs = this.readFloatArray(input, vertices.length, 1); + const triangles = this.readShortArray(input, (vertices.length - hullLength - 2) * 3); + let edges = []; + let width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input, input.readInt(true)); + width = input.readFloat(); + height = input.readFloat(); + } + if (!path2) + path2 = name; + let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path2, sequence); + if (!mesh) + return null; + mesh.path = path2; + Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertices.length; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + if (sequence == null) + mesh.updateRegion(); + mesh.hullLength = hullLength << 1; + mesh.sequence = sequence; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case AttachmentType.LinkedMesh: { + const path2 = (flags & 16) != 0 ? input.readStringRef() : name; + if (path2 == null) + throw new Error("Path of linked mesh must not be null"); + const color = (flags & 32) != 0 ? input.readInt32() : 4294967295; + const sequence = (flags & 64) != 0 ? this.readSequence(input) : null; + const inheritTimelines = (flags & 128) != 0; + const skinIndex = input.readInt(true); + const parent = input.readStringRef(); + let width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path2, sequence); + if (!mesh) + return null; + mesh.path = path2; + Color.rgba8888ToColor(mesh.color, color); + mesh.sequence = sequence; + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinIndex, slotIndex, parent, inheritTimelines)); + return mesh; + } + case AttachmentType.Path: { + const closed2 = (flags & 16) != 0; + const constantSpeed = (flags & 32) != 0; + const vertices = this.readVertices(input, (flags & 64) != 0); + const lengths = Utils.newArray(vertices.length / 6, 0); + for (let i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + const color = nonessential ? input.readInt32() : 0; + const path2 = this.attachmentLoader.newPathAttachment(skin, name); + if (!path2) + return null; + path2.closed = closed2; + path2.constantSpeed = constantSpeed; + path2.worldVerticesLength = vertices.length; + path2.vertices = vertices.vertices; + path2.bones = vertices.bones; + path2.lengths = lengths; + if (nonessential) + Color.rgba8888ToColor(path2.color, color); + return path2; + } + case AttachmentType.Point: { + const rotation = input.readFloat(); + const x = input.readFloat(); + const y = input.readFloat(); + const color = nonessential ? input.readInt32() : 0; + const point = this.attachmentLoader.newPointAttachment(skin, name); + if (!point) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + Color.rgba8888ToColor(point.color, color); + return point; + } + case AttachmentType.Clipping: { + const endSlotIndex = input.readInt(true); + const vertices = this.readVertices(input, (flags & 16) != 0); + let color = nonessential ? input.readInt32() : 0; + let clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (!clip) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertices.length; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) + Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + } + readSequence(input) { + let sequence = new Sequence(input.readInt(true)); + sequence.start = input.readInt(true); + sequence.digits = input.readInt(true); + sequence.setupIndex = input.readInt(true); + return sequence; + } + readVertices(input, weighted) { + const scale = this.scale; + const vertexCount = input.readInt(true); + const vertices = new Vertices(); + vertices.length = vertexCount << 1; + if (!weighted) { + vertices.vertices = this.readFloatArray(input, vertices.length, scale); + return vertices; + } + let weights = new Array(); + let bonesArray = new Array(); + for (let i = 0; i < vertexCount; i++) { + let boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (let ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + } + readFloatArray(input, n, scale) { + let array = new Array(n); + if (scale == 1) { + for (let i = 0; i < n; i++) + array[i] = input.readFloat(); + } else { + for (let i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + } + readShortArray(input, n) { + let array = new Array(n); + for (let i = 0; i < n; i++) + array[i] = input.readInt(true); + return array; + } + readAnimation(input, name, skeletonData) { + input.readInt(true); + let timelines = new Array(); + let scale = this.scale; + for (let i = 0, n = input.readInt(true); i < n; i++) { + let slotIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let timelineType = input.readByte(); + let frameCount = input.readInt(true); + let frameLast = frameCount - 1; + switch (timelineType) { + case SLOT_ATTACHMENT: { + let timeline = new AttachmentTimeline(frameCount, slotIndex); + for (let frame = 0; frame < frameCount; frame++) + timeline.setFrame(frame, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + break; + } + case SLOT_RGBA: { + let bezierCount = input.readInt(true); + let timeline = new RGBATimeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + let a = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b, a); + if (frame == frameLast) + break; + let time2 = input.readFloat(); + let r2 = input.readUnsignedByte() / 255; + let g2 = input.readUnsignedByte() / 255; + let b2 = input.readUnsignedByte() / 255; + let a2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1); + } + time = time2; + r = r2; + g = g2; + b = b2; + a = a2; + } + timelines.push(timeline); + break; + } + case SLOT_RGB: { + let bezierCount = input.readInt(true); + let timeline = new RGBTimeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b); + if (frame == frameLast) + break; + let time2 = input.readFloat(); + let r2 = input.readUnsignedByte() / 255; + let g2 = input.readUnsignedByte() / 255; + let b2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1); + } + time = time2; + r = r2; + g = g2; + b = b2; + } + timelines.push(timeline); + break; + } + case SLOT_RGBA2: { + let bezierCount = input.readInt(true); + let timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + let a = input.readUnsignedByte() / 255; + let r2 = input.readUnsignedByte() / 255; + let g2 = input.readUnsignedByte() / 255; + let b2 = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2); + if (frame == frameLast) + break; + let time2 = input.readFloat(); + let nr = input.readUnsignedByte() / 255; + let ng = input.readUnsignedByte() / 255; + let nb = input.readUnsignedByte() / 255; + let na = input.readUnsignedByte() / 255; + let nr2 = input.readUnsignedByte() / 255; + let ng2 = input.readUnsignedByte() / 255; + let nb2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1); + setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1); + setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1); + setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1); + } + time = time2; + r = nr; + g = ng; + b = nb; + a = na; + r2 = nr2; + g2 = ng2; + b2 = nb2; + } + timelines.push(timeline); + break; + } + case SLOT_RGB2: { + let bezierCount = input.readInt(true); + let timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + let r2 = input.readUnsignedByte() / 255; + let g2 = input.readUnsignedByte() / 255; + let b2 = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b, r2, g2, b2); + if (frame == frameLast) + break; + let time2 = input.readFloat(); + let nr = input.readUnsignedByte() / 255; + let ng = input.readUnsignedByte() / 255; + let nb = input.readUnsignedByte() / 255; + let nr2 = input.readUnsignedByte() / 255; + let ng2 = input.readUnsignedByte() / 255; + let nb2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1); + setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1); + setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1); + } + time = time2; + r = nr; + g = ng; + b = nb; + r2 = nr2; + g2 = ng2; + b2 = nb2; + } + timelines.push(timeline); + break; + } + case SLOT_ALPHA: { + let timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex); + let time = input.readFloat(), a = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, a); + if (frame == frameLast) + break; + let time2 = input.readFloat(); + let a2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1); + } + time = time2; + a = a2; + } + timelines.push(timeline); + } + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + let boneIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let type = input.readByte(), frameCount = input.readInt(true); + if (type == BONE_INHERIT) { + let timeline = new InheritTimeline(frameCount, boneIndex); + for (let frame = 0; frame < frameCount; frame++) { + timeline.setFrame(frame, input.readFloat(), input.readByte()); + } + timelines.push(timeline); + continue; + } + let bezierCount = input.readInt(true); + switch (type) { + case BONE_ROTATE: + timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1)); + break; + case BONE_TRANSLATE: + timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale)); + break; + case BONE_TRANSLATEX: + timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale)); + break; + case BONE_TRANSLATEY: + timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale)); + break; + case BONE_SCALE: + timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1)); + break; + case BONE_SCALEX: + timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1)); + break; + case BONE_SCALEY: + timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1)); + break; + case BONE_SHEAR: + timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1)); + break; + case BONE_SHEARX: + timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1)); + break; + case BONE_SHEARY: + timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1)); + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1; + let timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index); + let flags = input.readByte(); + let time = input.readFloat(), mix = (flags & 1) != 0 ? (flags & 2) != 0 ? input.readFloat() : 1 : 0; + let softness = (flags & 4) != 0 ? input.readFloat() * scale : 0; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mix, softness, (flags & 8) != 0 ? 1 : -1, (flags & 16) != 0, (flags & 32) != 0); + if (frame == frameLast) + break; + flags = input.readByte(); + const time2 = input.readFloat(), mix2 = (flags & 1) != 0 ? (flags & 2) != 0 ? input.readFloat() : 1 : 0; + const softness2 = (flags & 4) != 0 ? input.readFloat() * scale : 0; + if ((flags & 64) != 0) { + timeline.setStepped(frame); + } else if ((flags & 128) != 0) { + setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale); + } + time = time2; + mix = mix2; + softness = softness2; + } + timelines.push(timeline); + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1; + let timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index); + let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat(); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + if (frame == frameLast) + break; + let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixShearY = mixShearY2; + } + timelines.push(timeline); + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + let index = input.readInt(true); + let data = skeletonData.pathConstraints[index]; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true); + switch (type) { + case PATH_POSITION: + timelines.push(readTimeline1(input, new PathConstraintPositionTimeline(frameCount, bezierCount, index), data.positionMode == PositionMode.Fixed ? scale : 1)); + break; + case PATH_SPACING: + timelines.push(readTimeline1(input, new PathConstraintSpacingTimeline(frameCount, bezierCount, index), data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1)); + break; + case PATH_MIX: + let timeline = new PathConstraintMixTimeline(frameCount, bezierCount, index); + let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(); + for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY); + if (frame == frameLast) + break; + let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + } + timelines.push(timeline); + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const index = input.readInt(true) - 1; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const type = input.readByte(), frameCount = input.readInt(true); + if (type == PHYSICS_RESET) { + const timeline = new PhysicsConstraintResetTimeline(frameCount, index); + for (let frame = 0; frame < frameCount; frame++) + timeline.setFrame(frame, input.readFloat()); + timelines.push(timeline); + continue; + } + const bezierCount = input.readInt(true); + switch (type) { + case PHYSICS_INERTIA: + timelines.push(readTimeline1(input, new PhysicsConstraintInertiaTimeline(frameCount, bezierCount, index), 1)); + break; + case PHYSICS_STRENGTH: + timelines.push(readTimeline1(input, new PhysicsConstraintStrengthTimeline(frameCount, bezierCount, index), 1)); + break; + case PHYSICS_DAMPING: + timelines.push(readTimeline1(input, new PhysicsConstraintDampingTimeline(frameCount, bezierCount, index), 1)); + break; + case PHYSICS_MASS: + timelines.push(readTimeline1(input, new PhysicsConstraintMassTimeline(frameCount, bezierCount, index), 1)); + break; + case PHYSICS_WIND: + timelines.push(readTimeline1(input, new PhysicsConstraintWindTimeline(frameCount, bezierCount, index), 1)); + break; + case PHYSICS_GRAVITY: + timelines.push(readTimeline1(input, new PhysicsConstraintGravityTimeline(frameCount, bezierCount, index), 1)); + break; + case PHYSICS_MIX: + timelines.push(readTimeline1(input, new PhysicsConstraintMixTimeline(frameCount, bezierCount, index), 1)); + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + let skin = skeletonData.skins[input.readInt(true)]; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let slotIndex = input.readInt(true); + for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + let attachmentName = input.readStringRef(); + if (!attachmentName) + throw new Error("attachmentName must not be null."); + let attachment = skin.getAttachment(slotIndex, attachmentName); + let timelineType = input.readByte(); + let frameCount = input.readInt(true); + let frameLast = frameCount - 1; + switch (timelineType) { + case ATTACHMENT_DEFORM: { + let vertexAttachment = attachment; + let weighted = vertexAttachment.bones; + let vertices = vertexAttachment.vertices; + let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + let bezierCount = input.readInt(true); + let timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment); + let time = input.readFloat(); + for (let frame = 0, bezier = 0; ; frame++) { + let deform; + let end = input.readInt(true); + if (end == 0) + deform = weighted ? Utils.newFloatArray(deformLength) : vertices; + else { + deform = Utils.newFloatArray(deformLength); + let start = input.readInt(true); + end += start; + if (scale == 1) { + for (let v = start; v < end; v++) + deform[v] = input.readFloat(); + } else { + for (let v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (let v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frame, time, deform); + if (frame == frameLast) + break; + let time2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1); + } + time = time2; + } + timelines.push(timeline); + break; + } + case ATTACHMENT_SEQUENCE: { + let timeline = new SequenceTimeline(frameCount, slotIndex, attachment); + for (let frame = 0; frame < frameCount; frame++) { + let time = input.readFloat(); + let modeAndIndex = input.readInt32(); + timeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 15], modeAndIndex >> 4, input.readFloat()); + } + timelines.push(timeline); + break; + } + } + } + } + } + let drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + let timeline = new DrawOrderTimeline(drawOrderCount); + let slotCount = skeletonData.slots.length; + for (let i = 0; i < drawOrderCount; i++) { + let time = input.readFloat(); + let offsetCount = input.readInt(true); + let drawOrder = Utils.newArray(slotCount, 0); + for (let ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + let unchanged = Utils.newArray(slotCount - offsetCount, 0); + let originalIndex = 0, unchangedIndex = 0; + for (let ii = 0; ii < offsetCount; ii++) { + let slotIndex = input.readInt(true); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (let ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + } + let eventCount = input.readInt(true); + if (eventCount > 0) { + let timeline = new EventTimeline(eventCount); + for (let i = 0; i < eventCount; i++) { + let time = input.readFloat(); + let eventData = skeletonData.events[input.readInt(true)]; + let event = new Event(time, eventData); + event.intValue = input.readInt(false); + event.floatValue = input.readFloat(); + event.stringValue = input.readString(); + if (event.stringValue == null) + event.stringValue = eventData.stringValue; + if (event.data.audioPath) { + event.volume = input.readFloat(); + event.balance = input.readFloat(); + } + timeline.setFrame(i, event); + } + timelines.push(timeline); + } + let duration = 0; + for (let i = 0, n = timelines.length; i < n; i++) + duration = Math.max(duration, timelines[i].getDuration()); + return new Animation(name, timelines, duration); + } + }; + var BinaryInput = class { + strings; + index; + buffer; + constructor(data, strings = new Array(), index = 0, buffer = new DataView(data.buffer)) { + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + readByte() { + return this.buffer.getInt8(this.index++); + } + readUnsignedByte() { + return this.buffer.getUint8(this.index++); + } + readShort() { + let value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + } + readInt32() { + let value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + } + readInt(optimizePositive) { + let b = this.readByte(); + let result = b & 127; + if ((b & 128) != 0) { + b = this.readByte(); + result |= (b & 127) << 7; + if ((b & 128) != 0) { + b = this.readByte(); + result |= (b & 127) << 14; + if ((b & 128) != 0) { + b = this.readByte(); + result |= (b & 127) << 21; + if ((b & 128) != 0) { + b = this.readByte(); + result |= (b & 127) << 28; + } + } + } + } + return optimizePositive ? result : result >>> 1 ^ -(result & 1); + } + readStringRef() { + let index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + } + readString() { + let byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + let chars = ""; + let charCount = 0; + for (let i = 0; i < byteCount; ) { + let b = this.readUnsignedByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode((b & 31) << 6 | this.readByte() & 63); + i += 2; + break; + case 14: + chars += String.fromCharCode((b & 15) << 12 | (this.readByte() & 63) << 6 | this.readByte() & 63); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + } + readFloat() { + let value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + } + readBoolean() { + return this.readByte() != 0; + } + }; + var LinkedMesh = class { + parent; + skinIndex; + slotIndex; + mesh; + inheritTimeline; + constructor(mesh, skinIndex, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skinIndex = skinIndex; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritTimeline = inheritDeform; + } + }; + var Vertices = class { + bones; + vertices; + length; + constructor(bones = null, vertices = null, length = 0) { + this.bones = bones; + this.vertices = vertices; + this.length = length; + } + }; + var AttachmentType; + (function(AttachmentType2) { + AttachmentType2[AttachmentType2["Region"] = 0] = "Region"; + AttachmentType2[AttachmentType2["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType2[AttachmentType2["Mesh"] = 2] = "Mesh"; + AttachmentType2[AttachmentType2["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType2[AttachmentType2["Path"] = 4] = "Path"; + AttachmentType2[AttachmentType2["Point"] = 5] = "Point"; + AttachmentType2[AttachmentType2["Clipping"] = 6] = "Clipping"; + })(AttachmentType || (AttachmentType = {})); + function readTimeline1(input, timeline, scale) { + let time = input.readFloat(), value = input.readFloat() * scale; + for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) { + timeline.setFrame(frame, time, value); + if (frame == frameLast) + break; + let time2 = input.readFloat(), value2 = input.readFloat() * scale; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale); + } + time = time2; + value = value2; + } + return timeline; + } + function readTimeline2(input, timeline, scale) { + let time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale; + for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) { + timeline.setFrame(frame, time, value1, value2); + if (frame == frameLast) + break; + let time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale); + setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + } + return timeline; + } + function setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) { + timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2); + } + var BONE_ROTATE = 0; + var BONE_TRANSLATE = 1; + var BONE_TRANSLATEX = 2; + var BONE_TRANSLATEY = 3; + var BONE_SCALE = 4; + var BONE_SCALEX = 5; + var BONE_SCALEY = 6; + var BONE_SHEAR = 7; + var BONE_SHEARX = 8; + var BONE_SHEARY = 9; + var BONE_INHERIT = 10; + var SLOT_ATTACHMENT = 0; + var SLOT_RGBA = 1; + var SLOT_RGB = 2; + var SLOT_RGBA2 = 3; + var SLOT_RGB2 = 4; + var SLOT_ALPHA = 5; + var ATTACHMENT_DEFORM = 0; + var ATTACHMENT_SEQUENCE = 1; + var PATH_POSITION = 0; + var PATH_SPACING = 1; + var PATH_MIX = 2; + var PHYSICS_INERTIA = 0; + var PHYSICS_STRENGTH = 1; + var PHYSICS_DAMPING = 2; + var PHYSICS_MASS = 4; + var PHYSICS_WIND = 5; + var PHYSICS_GRAVITY = 6; + var PHYSICS_MIX = 7; + var PHYSICS_RESET = 8; + var CURVE_STEPPED = 1; + var CURVE_BEZIER = 2; + + // node_modules/@esotericsoftware/spine-core/dist/SkeletonBounds.js + var SkeletonBounds = class { + /** The left edge of the axis aligned bounding box. */ + minX = 0; + /** The bottom edge of the axis aligned bounding box. */ + minY = 0; + /** The right edge of the axis aligned bounding box. */ + maxX = 0; + /** The top edge of the axis aligned bounding box. */ + maxY = 0; + /** The visible bounding boxes. */ + boundingBoxes = new Array(); + /** The world vertices for the bounding box polygons. */ + polygons = new Array(); + polygonPool = new Pool(() => { + return Utils.newFloatArray(16); + }); + /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding + * box's polygon. + * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the + * SkeletonBounds AABB methods will always return true. */ + update(skeleton, updateAabb) { + if (!skeleton) + throw new Error("skeleton cannot be null."); + let boundingBoxes = this.boundingBoxes; + let polygons = this.polygons; + let polygonPool = this.polygonPool; + let slots = skeleton.slots; + let slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (let i = 0; i < slotCount; i++) { + let slot = slots[i]; + if (!slot.bone.active) + continue; + let attachment = slot.getAttachment(); + if (attachment instanceof BoundingBoxAttachment) { + let boundingBox = attachment; + boundingBoxes.push(boundingBox); + let polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + } + aabbCompute() { + let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + let polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) { + let polygon = polygons[i]; + let vertices = polygon; + for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) { + let x = vertices[ii]; + let y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + } + /** Returns true if the axis aligned bounding box contains the point. */ + aabbContainsPoint(x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + } + /** Returns true if the axis aligned bounding box intersects the line segment. */ + aabbIntersectsSegment(x1, y1, x2, y2) { + let minX = this.minX; + let minY = this.minY; + let maxX = this.maxX; + let maxY = this.maxY; + if (x1 <= minX && x2 <= minX || y1 <= minY && y2 <= minY || x1 >= maxX && x2 >= maxX || y1 >= maxY && y2 >= maxY) + return false; + let m = (y2 - y1) / (x2 - x1); + let y = m * (minX - x1) + y1; + if (y > minY && y < maxY) + return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) + return true; + let x = (minY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + return false; + } + /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */ + aabbIntersectsSkeleton(bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + } + /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more + * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */ + containsPoint(x, y) { + let polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) + return this.boundingBoxes[i]; + return null; + } + /** Returns true if the polygon contains the point. */ + containsPointPolygon(polygon, x, y) { + let vertices = polygon; + let nn = polygon.length; + let prevIndex = nn - 2; + let inside = false; + for (let ii = 0; ii < nn; ii += 2) { + let vertexY = vertices[ii + 1]; + let prevY = vertices[prevIndex + 1]; + if (vertexY < y && prevY >= y || prevY < y && vertexY >= y) { + let vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + } + return inside; + } + /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it + * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns + * true. */ + intersectsSegment(x1, y1, x2, y2) { + let polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) + return this.boundingBoxes[i]; + return null; + } + /** Returns true if the polygon contains any part of the line segment. */ + intersectsSegmentPolygon(polygon, x1, y1, x2, y2) { + let vertices = polygon; + let nn = polygon.length; + let width12 = x1 - x2, height12 = y1 - y2; + let det1 = x1 * y2 - y1 * x2; + let x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (let ii = 0; ii < nn; ii += 2) { + let x4 = vertices[ii], y4 = vertices[ii + 1]; + let det2 = x3 * y4 - y3 * x4; + let width34 = x3 - x4, height34 = y3 - y4; + let det3 = width12 * height34 - height12 * width34; + let x = (det1 * width34 - width12 * det2) / det3; + if ((x >= x3 && x <= x4 || x >= x4 && x <= x3) && (x >= x1 && x <= x2 || x >= x2 && x <= x1)) { + let y = (det1 * height34 - height12 * det2) / det3; + if ((y >= y3 && y <= y4 || y >= y4 && y <= y3) && (y >= y1 && y <= y2 || y >= y2 && y <= y1)) + return true; + } + x3 = x4; + y3 = y4; + } + return false; + } + /** Returns the polygon for the specified bounding box, or null. */ + getPolygon(boundingBox) { + if (!boundingBox) + throw new Error("boundingBox cannot be null."); + let index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + } + /** The width of the axis aligned bounding box. */ + getWidth() { + return this.maxX - this.minX; + } + /** The height of the axis aligned bounding box. */ + getHeight() { + return this.maxY - this.minY; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/Triangulator.js + var Triangulator = class _Triangulator { + convexPolygons = new Array(); + convexPolygonsIndices = new Array(); + indicesArray = new Array(); + isConcaveArray = new Array(); + triangles = new Array(); + polygonPool = new Pool(() => { + return new Array(); + }); + polygonIndicesPool = new Pool(() => { + return new Array(); + }); + triangulate(verticesArray) { + let vertices = verticesArray; + let vertexCount = verticesArray.length >> 1; + let indices = this.indicesArray; + indices.length = 0; + for (let i = 0; i < vertexCount; i++) + indices[i] = i; + let isConcave = this.isConcaveArray; + isConcave.length = 0; + for (let i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = _Triangulator.isConcave(i, vertexCount, vertices, indices); + let triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + let previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: + if (!isConcave[i]) { + let p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + let p1x = vertices[p1], p1y = vertices[p1 + 1]; + let p2x = vertices[p2], p2y = vertices[p2 + 1]; + let p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (let ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) + continue; + let v = indices[ii] << 1; + let vx = vertices[v], vy = vertices[v + 1]; + if (_Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (_Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (_Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) + break outer; + } + } + } + break; + } + if (next == 0) { + do { + if (!isConcave[i]) + break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + let previousIndex = (vertexCount + i - 1) % vertexCount; + let nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = _Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = _Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + } + decompose(verticesArray, triangles) { + let vertices = verticesArray; + let convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + let convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + let polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + let polygon = this.polygonPool.obtain(); + polygon.length = 0; + let fanBaseIndex = -1, lastWinding = 0; + for (let i = 0, n = triangles.length; i < n; i += 3) { + let t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + let x1 = vertices[t1], y1 = vertices[t1 + 1]; + let x2 = vertices[t2], y2 = vertices[t2 + 1]; + let x3 = vertices[t3], y3 = vertices[t3 + 1]; + let merged = false; + if (fanBaseIndex == t1) { + let o = polygon.length - 4; + let winding1 = _Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + let winding2 = _Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = _Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (let i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) + continue; + let firstIndex = polygonIndices[0]; + let lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + let o = polygon.length - 4; + let prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + let prevX = polygon[o + 2], prevY = polygon[o + 3]; + let firstX = polygon[0], firstY = polygon[1]; + let secondX = polygon[2], secondY = polygon[3]; + let winding = _Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (let ii = 0; ii < n; ii++) { + if (ii == i) + continue; + let otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) + continue; + let otherFirstIndex = otherIndices[0]; + let otherSecondIndex = otherIndices[1]; + let otherLastIndex = otherIndices[2]; + let otherPoly = convexPolygons[ii]; + let x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) + continue; + let winding1 = _Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + let winding2 = _Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (let i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + } + static isConcave(index, vertexCount, vertices, indices) { + let previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + let current = indices[index] << 1; + let next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + } + static positiveArea(p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + } + static winding(p1x, p1y, p2x, p2y, p3x, p3y) { + let px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/SkeletonClipping.js + var SkeletonClipping = class _SkeletonClipping { + triangulator = new Triangulator(); + clippingPolygon = new Array(); + clipOutput = new Array(); + clippedVertices = new Array(); + clippedTriangles = new Array(); + scratch = new Array(); + clipAttachment = null; + clippingPolygons = null; + clipStart(slot, clip) { + if (this.clipAttachment) + return 0; + this.clipAttachment = clip; + let n = clip.worldVerticesLength; + let vertices = Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + let clippingPolygon = this.clippingPolygon; + _SkeletonClipping.makeClockwise(clippingPolygon); + let clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (let i = 0, n2 = clippingPolygons.length; i < n2; i++) { + let polygon = clippingPolygons[i]; + _SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + } + clipEndWithSlot(slot) { + if (this.clipAttachment && this.clipAttachment.endSlot == slot.data) + this.clipEnd(); + } + clipEnd() { + if (!this.clipAttachment) + return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + } + isClipping() { + return this.clipAttachment != null; + } + clipTriangles(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + if (uvs && light && dark && typeof twoColor === "boolean") + this.clipTrianglesRender(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor); + else + this.clipTrianglesNoRender(vertices, verticesLength, triangles, trianglesLength); + } + clipTrianglesNoRender(vertices, verticesLength, triangles, trianglesLength) { + let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + let clippedTriangles = this.clippedTriangles; + let polygons = this.clippingPolygons; + let polygonsCount = polygons.length; + let vertexSize = 2; + let index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: + for (let i = 0; i < trianglesLength; i += 3) { + let vertexOffset = triangles[i] << 1; + let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + for (let p = 0; p < polygonsCount; p++) { + let s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + let clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + let clipOutputCount = clipOutputLength >> 1; + let clipOutputItems = this.clipOutput; + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (let ii = 0; ii < clipOutputLength; ii += 2) { + let x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + s += 2; + } + s = clippedTriangles.length; + let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (let ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + ii; + clippedTrianglesItems[s + 2] = index + ii + 1; + s += 3; + } + index += clipOutputCount + 1; + } else { + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = x2; + clippedVerticesItems[s + 3] = y2; + clippedVerticesItems[s + 4] = x3; + clippedVerticesItems[s + 5] = y3; + s = clippedTriangles.length; + let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + 1; + clippedTrianglesItems[s + 2] = index + 2; + index += 3; + continue outer; + } + } + } + } + clipTrianglesRender(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + let clippedTriangles = this.clippedTriangles; + let polygons = this.clippingPolygons; + let polygonsCount = polygons.length; + let vertexSize = twoColor ? 12 : 8; + let index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: + for (let i = 0; i < trianglesLength; i += 3) { + let vertexOffset = triangles[i] << 1; + let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + for (let p = 0; p < polygonsCount; p++) { + let s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + let clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + let d = 1 / (d0 * d2 + d1 * (y1 - y3)); + let clipOutputCount = clipOutputLength >> 1; + let clipOutputItems = this.clipOutput; + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (let ii = 0; ii < clipOutputLength; ii += 2) { + let x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + let c0 = x - x3, c1 = y - y3; + let a = (d0 * c0 + d1 * c1) * d; + let b = (d4 * c0 + d2 * c1) * d; + let c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (let ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + ii; + clippedTrianglesItems[s + 2] = index + ii + 1; + s += 3; + } + index += clipOutputCount + 1; + } else { + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + s = clippedTriangles.length; + let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + 1; + clippedTrianglesItems[s + 2] = index + 2; + index += 3; + continue outer; + } + } + } + } + /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping + * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */ + clip(x1, y1, x2, y2, x3, y3, clippingArea, output) { + let originalOutput = output; + let clipped = false; + let input; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } else + input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + let clippingVertices = clippingArea; + let clippingVerticesLast = clippingArea.length - 4; + for (let i = 0; ; i += 2) { + let edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + let edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + let deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + let inputVertices = input; + let inputVerticesLength = input.length - 2, outputStart = output.length; + for (let ii = 0; ii < inputVerticesLength; ii += 2) { + let inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + let inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + let side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + let c0 = inputY2 - inputY, c2 = inputX2 - inputX; + let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 1e-6) { + let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + } else if (side2) { + let c0 = inputY2 - inputY, c2 = inputX2 - inputX; + let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 1e-6) { + let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) + break; + let temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (let i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } else + originalOutput.length = originalOutput.length - 2; + return clipped; + } + static makeClockwise(polygon) { + let vertices = polygon; + let verticeslength = polygon.length; + let area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (let i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) + return; + for (let i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + let x = vertices[i], y = vertices[i + 1]; + let other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + } + }; + + // node_modules/@esotericsoftware/spine-core/dist/SkeletonJson.js + var SkeletonJson = class { + attachmentLoader; + /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at + * runtime than were used in Spine. + * + * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */ + scale = 1; + linkedMeshes = new Array(); + constructor(attachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + readSkeletonData(json) { + let scale = this.scale; + let skeletonData = new SkeletonData(); + let root = typeof json === "string" ? JSON.parse(json) : json; + let skeletonMap = root.skeleton; + if (skeletonMap) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.referenceScale = getValue(skeletonMap, "referenceScale", 100) * scale; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images ?? null; + skeletonData.audioPath = skeletonMap.audio ?? null; + } + if (root.bones) { + for (let i = 0; i < root.bones.length; i++) { + let boneMap = root.bones[i]; + let parent = null; + let parentName = getValue(boneMap, "parent", null); + if (parentName) + parent = skeletonData.findBone(parentName); + let data = new BoneData(skeletonData.bones.length, boneMap.name, parent); + data.length = getValue(boneMap, "length", 0) * scale; + data.x = getValue(boneMap, "x", 0) * scale; + data.y = getValue(boneMap, "y", 0) * scale; + data.rotation = getValue(boneMap, "rotation", 0); + data.scaleX = getValue(boneMap, "scaleX", 1); + data.scaleY = getValue(boneMap, "scaleY", 1); + data.shearX = getValue(boneMap, "shearX", 0); + data.shearY = getValue(boneMap, "shearY", 0); + data.inherit = Utils.enumValue(Inherit, getValue(boneMap, "inherit", "Normal")); + data.skinRequired = getValue(boneMap, "skin", false); + let color = getValue(boneMap, "color", null); + if (color) + data.color.setFromString(color); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (let i = 0; i < root.slots.length; i++) { + let slotMap = root.slots[i]; + let slotName = slotMap.name; + let boneData = skeletonData.findBone(slotMap.bone); + if (!boneData) + throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotName}`); + let data = new SlotData(skeletonData.slots.length, slotName, boneData); + let color = getValue(slotMap, "color", null); + if (color) + data.color.setFromString(color); + let dark = getValue(slotMap, "dark", null); + if (dark) + data.darkColor = Color.fromString(dark); + data.attachmentName = getValue(slotMap, "attachment", null); + data.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, "blend", "normal")); + data.visible = getValue(slotMap, "visible", true); + skeletonData.slots.push(data); + } + } + if (root.ik) { + for (let i = 0; i < root.ik.length; i++) { + let constraintMap = root.ik[i]; + let data = new IkConstraintData(constraintMap.name); + data.order = getValue(constraintMap, "order", 0); + data.skinRequired = getValue(constraintMap, "skin", false); + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + let bone = skeletonData.findBone(constraintMap.bones[ii]); + if (!bone) + throw new Error(`Couldn't find bone ${constraintMap.bones[ii]} for IK constraint ${constraintMap.name}.`); + data.bones.push(bone); + } + let target = skeletonData.findBone(constraintMap.target); + ; + if (!target) + throw new Error(`Couldn't find target bone ${constraintMap.target} for IK constraint ${constraintMap.name}.`); + data.target = target; + data.mix = getValue(constraintMap, "mix", 1); + data.softness = getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = getValue(constraintMap, "compress", false); + data.stretch = getValue(constraintMap, "stretch", false); + data.uniform = getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + } + if (root.transform) { + for (let i = 0; i < root.transform.length; i++) { + let constraintMap = root.transform[i]; + let data = new TransformConstraintData(constraintMap.name); + data.order = getValue(constraintMap, "order", 0); + data.skinRequired = getValue(constraintMap, "skin", false); + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + let boneName = constraintMap.bones[ii]; + let bone = skeletonData.findBone(boneName); + if (!bone) + throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`); + data.bones.push(bone); + } + let targetName = constraintMap.target; + let target = skeletonData.findBone(targetName); + if (!target) + throw new Error(`Couldn't find target bone ${targetName} for transform constraint ${constraintMap.name}.`); + data.target = target; + data.local = getValue(constraintMap, "local", false); + data.relative = getValue(constraintMap, "relative", false); + data.offsetRotation = getValue(constraintMap, "rotation", 0); + data.offsetX = getValue(constraintMap, "x", 0) * scale; + data.offsetY = getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = getValue(constraintMap, "scaleY", 0); + data.offsetShearY = getValue(constraintMap, "shearY", 0); + data.mixRotate = getValue(constraintMap, "mixRotate", 1); + data.mixX = getValue(constraintMap, "mixX", 1); + data.mixY = getValue(constraintMap, "mixY", data.mixX); + data.mixScaleX = getValue(constraintMap, "mixScaleX", 1); + data.mixScaleY = getValue(constraintMap, "mixScaleY", data.mixScaleX); + data.mixShearY = getValue(constraintMap, "mixShearY", 1); + skeletonData.transformConstraints.push(data); + } + } + if (root.path) { + for (let i = 0; i < root.path.length; i++) { + let constraintMap = root.path[i]; + let data = new PathConstraintData(constraintMap.name); + data.order = getValue(constraintMap, "order", 0); + data.skinRequired = getValue(constraintMap, "skin", false); + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + let boneName = constraintMap.bones[ii]; + let bone = skeletonData.findBone(boneName); + if (!bone) + throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`); + data.bones.push(bone); + } + let targetName = constraintMap.target; + let target = skeletonData.findSlot(targetName); + if (!target) + throw new Error(`Couldn't find target slot ${targetName} for path constraint ${constraintMap.name}.`); + data.target = target; + data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, "positionMode", "Percent")); + data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, "spacingMode", "Length")); + data.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, "rotateMode", "Tangent")); + data.offsetRotation = getValue(constraintMap, "rotation", 0); + data.position = getValue(constraintMap, "position", 0); + if (data.positionMode == PositionMode.Fixed) + data.position *= scale; + data.spacing = getValue(constraintMap, "spacing", 0); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) + data.spacing *= scale; + data.mixRotate = getValue(constraintMap, "mixRotate", 1); + data.mixX = getValue(constraintMap, "mixX", 1); + data.mixY = getValue(constraintMap, "mixY", data.mixX); + skeletonData.pathConstraints.push(data); + } + } + if (root.physics) { + for (let i = 0; i < root.physics.length; i++) { + const constraintMap = root.physics[i]; + const data = new PhysicsConstraintData(constraintMap.name); + data.order = getValue(constraintMap, "order", 0); + data.skinRequired = getValue(constraintMap, "skin", false); + const boneName = constraintMap.bone; + const bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Physics bone not found: " + boneName); + data.bone = bone; + data.x = getValue(constraintMap, "x", 0); + data.y = getValue(constraintMap, "y", 0); + data.rotate = getValue(constraintMap, "rotate", 0); + data.scaleX = getValue(constraintMap, "scaleX", 0); + data.shearX = getValue(constraintMap, "shearX", 0); + data.limit = getValue(constraintMap, "limit", 5e3) * scale; + data.step = 1 / getValue(constraintMap, "fps", 60); + data.inertia = getValue(constraintMap, "inertia", 1); + data.strength = getValue(constraintMap, "strength", 100); + data.damping = getValue(constraintMap, "damping", 1); + data.massInverse = 1 / getValue(constraintMap, "mass", 1); + data.wind = getValue(constraintMap, "wind", 0); + data.gravity = getValue(constraintMap, "gravity", 0); + data.mix = getValue(constraintMap, "mix", 1); + data.inertiaGlobal = getValue(constraintMap, "inertiaGlobal", false); + data.strengthGlobal = getValue(constraintMap, "strengthGlobal", false); + data.dampingGlobal = getValue(constraintMap, "dampingGlobal", false); + data.massGlobal = getValue(constraintMap, "massGlobal", false); + data.windGlobal = getValue(constraintMap, "windGlobal", false); + data.gravityGlobal = getValue(constraintMap, "gravityGlobal", false); + data.mixGlobal = getValue(constraintMap, "mixGlobal", false); + skeletonData.physicsConstraints.push(data); + } + } + if (root.skins) { + for (let i = 0; i < root.skins.length; i++) { + let skinMap = root.skins[i]; + let skin = new Skin(skinMap.name); + if (skinMap.bones) { + for (let ii = 0; ii < skinMap.bones.length; ii++) { + let boneName = skinMap.bones[ii]; + let bone = skeletonData.findBone(boneName); + if (!bone) + throw new Error(`Couldn't find bone ${boneName} for skin ${skinMap.name}.`); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (let ii = 0; ii < skinMap.ik.length; ii++) { + let constraintName = skinMap.ik[ii]; + let constraint = skeletonData.findIkConstraint(constraintName); + if (!constraint) + throw new Error(`Couldn't find IK constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (let ii = 0; ii < skinMap.transform.length; ii++) { + let constraintName = skinMap.transform[ii]; + let constraint = skeletonData.findTransformConstraint(constraintName); + if (!constraint) + throw new Error(`Couldn't find transform constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (let ii = 0; ii < skinMap.path.length; ii++) { + let constraintName = skinMap.path[ii]; + let constraint = skeletonData.findPathConstraint(constraintName); + if (!constraint) + throw new Error(`Couldn't find path constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + if (skinMap.physics) { + for (let ii = 0; ii < skinMap.physics.length; ii++) { + let constraintName = skinMap.physics[ii]; + let constraint = skeletonData.findPhysicsConstraint(constraintName); + if (!constraint) + throw new Error(`Couldn't find physics constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + for (let slotName in skinMap.attachments) { + let slot = skeletonData.findSlot(slotName); + if (!slot) + throw new Error(`Couldn't find slot ${slotName} for skin ${skinMap.name}.`); + let slotMap = skinMap.attachments[slotName]; + for (let entryName in slotMap) { + let attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment) + skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") + skeletonData.defaultSkin = skin; + } + } + for (let i = 0, n = this.linkedMeshes.length; i < n; i++) { + let linkedMesh = this.linkedMeshes[i]; + let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (!skin) + throw new Error(`Skin not found: ${linkedMesh.skin}`); + let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (!parent) + throw new Error(`Parent mesh not found: ${linkedMesh.parent}`); + linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? parent : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent); + if (linkedMesh.mesh.region != null) + linkedMesh.mesh.updateRegion(); + } + this.linkedMeshes.length = 0; + if (root.events) { + for (let eventName in root.events) { + let eventMap = root.events[eventName]; + let data = new EventData(eventName); + data.intValue = getValue(eventMap, "int", 0); + data.floatValue = getValue(eventMap, "float", 0); + data.stringValue = getValue(eventMap, "string", ""); + data.audioPath = getValue(eventMap, "audio", null); + if (data.audioPath) { + data.volume = getValue(eventMap, "volume", 1); + data.balance = getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (let animationName in root.animations) { + let animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + return skeletonData; + } + readAttachment(map, skin, slotIndex, name, skeletonData) { + let scale = this.scale; + name = getValue(map, "name", name); + switch (getValue(map, "type", "region")) { + case "region": { + let path2 = getValue(map, "path", name); + let sequence = this.readSequence(getValue(map, "sequence", null)); + let region = this.attachmentLoader.newRegionAttachment(skin, name, path2, sequence); + if (!region) + return null; + region.path = path2; + region.x = getValue(map, "x", 0) * scale; + region.y = getValue(map, "y", 0) * scale; + region.scaleX = getValue(map, "scaleX", 1); + region.scaleY = getValue(map, "scaleY", 1); + region.rotation = getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + region.sequence = sequence; + let color = getValue(map, "color", null); + if (color) + region.color.setFromString(color); + if (region.region != null) + region.updateRegion(); + return region; + } + case "boundingbox": { + let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (!box) + return null; + this.readVertices(map, box, map.vertexCount << 1); + let color = getValue(map, "color", null); + if (color) + box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + let path2 = getValue(map, "path", name); + let sequence = this.readSequence(getValue(map, "sequence", null)); + let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path2, sequence); + if (!mesh) + return null; + mesh.path = path2; + let color = getValue(map, "color", null); + if (color) + mesh.color.setFromString(color); + mesh.width = getValue(map, "width", 0) * scale; + mesh.height = getValue(map, "height", 0) * scale; + mesh.sequence = sequence; + let parent = getValue(map, "parent", null); + if (parent) { + this.linkedMeshes.push(new LinkedMesh2(mesh, getValue(map, "skin", null), slotIndex, parent, getValue(map, "timelines", true))); + return mesh; + } + let uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + if (mesh.region != null) + mesh.updateRegion(); + mesh.edges = getValue(map, "edges", null); + mesh.hullLength = getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + let path2 = this.attachmentLoader.newPathAttachment(skin, name); + if (!path2) + return null; + path2.closed = getValue(map, "closed", false); + path2.constantSpeed = getValue(map, "constantSpeed", true); + let vertexCount = map.vertexCount; + this.readVertices(map, path2, vertexCount << 1); + let lengths = Utils.newArray(vertexCount / 3, 0); + for (let i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path2.lengths = lengths; + let color = getValue(map, "color", null); + if (color) + path2.color.setFromString(color); + return path2; + } + case "point": { + let point = this.attachmentLoader.newPointAttachment(skin, name); + if (!point) + return null; + point.x = getValue(map, "x", 0) * scale; + point.y = getValue(map, "y", 0) * scale; + point.rotation = getValue(map, "rotation", 0); + let color = getValue(map, "color", null); + if (color) + point.color.setFromString(color); + return point; + } + case "clipping": { + let clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (!clip) + return null; + let end = getValue(map, "end", null); + if (end) + clip.endSlot = skeletonData.findSlot(end); + let vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + let color = getValue(map, "color", null); + if (color) + clip.color.setFromString(color); + return clip; + } + } + return null; + } + readSequence(map) { + if (map == null) + return null; + let sequence = new Sequence(getValue(map, "count", 0)); + sequence.start = getValue(map, "start", 1); + sequence.digits = getValue(map, "digits", 0); + sequence.setupIndex = getValue(map, "setup", 0); + return sequence; + } + readVertices(map, attachment, verticesLength) { + let scale = this.scale; + attachment.worldVerticesLength = verticesLength; + let vertices = map.vertices; + if (verticesLength == vertices.length) { + let scaledVertices = Utils.toFloatArray(vertices); + if (scale != 1) { + for (let i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + let weights = new Array(); + let bones = new Array(); + for (let i = 0, n = vertices.length; i < n; ) { + let boneCount = vertices[i++]; + bones.push(boneCount); + for (let nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = Utils.toFloatArray(weights); + } + readAnimation(map, name, skeletonData) { + let scale = this.scale; + let timelines = new Array(); + if (map.slots) { + for (let slotName in map.slots) { + let slotMap = map.slots[slotName]; + let slot = skeletonData.findSlot(slotName); + if (!slot) + throw new Error("Slot not found: " + slotName); + let slotIndex = slot.index; + for (let timelineName in slotMap) { + let timelineMap = slotMap[timelineName]; + if (!timelineMap) + continue; + let frames = timelineMap.length; + if (timelineName == "attachment") { + let timeline = new AttachmentTimeline(frames, slotIndex); + for (let frame = 0; frame < frames; frame++) { + let keyMap = timelineMap[frame]; + timeline.setFrame(frame, getValue(keyMap, "time", 0), getValue(keyMap, "name", null)); + } + timelines.push(timeline); + } else if (timelineName == "rgba") { + let timeline = new RGBATimeline(frames, frames << 2, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color = Color.fromString(keyMap.color); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color.r, color.g, color.b, color.a); + let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let newColor = Color.fromString(nextMap.color); + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1); + } + time = time2; + color = newColor; + keyMap = nextMap; + } + timelines.push(timeline); + } else if (timelineName == "rgb") { + let timeline = new RGBTimeline(frames, frames * 3, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color = Color.fromString(keyMap.color); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color.r, color.g, color.b); + let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let newColor = Color.fromString(nextMap.color); + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + } + time = time2; + color = newColor; + keyMap = nextMap; + } + timelines.push(timeline); + } else if (timelineName == "alpha") { + timelines.push(readTimeline12(timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1)); + } else if (timelineName == "rgba2") { + let timeline = new RGBA2Timeline(frames, frames * 7, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color = Color.fromString(keyMap.light); + let color2 = Color.fromString(keyMap.dark); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b); + let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let newColor = Color.fromString(nextMap.light); + let newColor2 = Color.fromString(nextMap.dark); + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1); + } + time = time2; + color = newColor; + color2 = newColor2; + keyMap = nextMap; + } + timelines.push(timeline); + } else if (timelineName == "rgb2") { + let timeline = new RGB2Timeline(frames, frames * 6, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color = Color.fromString(keyMap.light); + let color2 = Color.fromString(keyMap.dark); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b); + let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let newColor = Color.fromString(nextMap.light); + let newColor2 = Color.fromString(nextMap.dark); + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1); + } + time = time2; + color = newColor; + color2 = newColor2; + keyMap = nextMap; + } + timelines.push(timeline); + } + } + } + } + if (map.bones) { + for (let boneName in map.bones) { + let boneMap = map.bones[boneName]; + let bone = skeletonData.findBone(boneName); + if (!bone) + throw new Error("Bone not found: " + boneName); + let boneIndex = bone.index; + for (let timelineName in boneMap) { + let timelineMap = boneMap[timelineName]; + let frames = timelineMap.length; + if (frames == 0) + continue; + if (timelineName === "rotate") { + timelines.push(readTimeline12(timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1)); + } else if (timelineName === "translate") { + let timeline = new TranslateTimeline(frames, frames << 1, boneIndex); + timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 0, scale)); + } else if (timelineName === "translatex") { + let timeline = new TranslateXTimeline(frames, frames, boneIndex); + timelines.push(readTimeline12(timelineMap, timeline, 0, scale)); + } else if (timelineName === "translatey") { + let timeline = new TranslateYTimeline(frames, frames, boneIndex); + timelines.push(readTimeline12(timelineMap, timeline, 0, scale)); + } else if (timelineName === "scale") { + let timeline = new ScaleTimeline(frames, frames << 1, boneIndex); + timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 1, 1)); + } else if (timelineName === "scalex") { + let timeline = new ScaleXTimeline(frames, frames, boneIndex); + timelines.push(readTimeline12(timelineMap, timeline, 1, 1)); + } else if (timelineName === "scaley") { + let timeline = new ScaleYTimeline(frames, frames, boneIndex); + timelines.push(readTimeline12(timelineMap, timeline, 1, 1)); + } else if (timelineName === "shear") { + let timeline = new ShearTimeline(frames, frames << 1, boneIndex); + timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 0, 1)); + } else if (timelineName === "shearx") { + let timeline = new ShearXTimeline(frames, frames, boneIndex); + timelines.push(readTimeline12(timelineMap, timeline, 0, 1)); + } else if (timelineName === "sheary") { + let timeline = new ShearYTimeline(frames, frames, boneIndex); + timelines.push(readTimeline12(timelineMap, timeline, 0, 1)); + } else if (timelineName === "inherit") { + let timeline = new InheritTimeline(frames, bone.index); + for (let frame = 0; frame < timelineMap.length; frame++) { + let aFrame = timelineMap[frame]; + timeline.setFrame(frame, getValue(aFrame, "time", 0), Utils.enumValue(Inherit, getValue(aFrame, "inherit", "Normal"))); + } + timelines.push(timeline); + } + } + } + } + if (map.ik) { + for (let constraintName in map.ik) { + let constraintMap = map.ik[constraintName]; + let keyMap = constraintMap[0]; + if (!keyMap) + continue; + let constraint = skeletonData.findIkConstraint(constraintName); + if (!constraint) + throw new Error("IK Constraint not found: " + constraintName); + let constraintIndex = skeletonData.ikConstraints.indexOf(constraint); + let timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex); + let time = getValue(keyMap, "time", 0); + let mix = getValue(keyMap, "mix", 1); + let softness = getValue(keyMap, "softness", 0) * scale; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mix, softness, getValue(keyMap, "bendPositive", true) ? 1 : -1, getValue(keyMap, "compress", false), getValue(keyMap, "stretch", false)); + let nextMap = constraintMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let mix2 = getValue(nextMap, "mix", 1); + let softness2 = getValue(nextMap, "softness", 0) * scale; + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale); + } + time = time2; + mix = mix2; + softness = softness2; + keyMap = nextMap; + } + timelines.push(timeline); + } + } + if (map.transform) { + for (let constraintName in map.transform) { + let timelineMap = map.transform[constraintName]; + let keyMap = timelineMap[0]; + if (!keyMap) + continue; + let constraint = skeletonData.findTransformConstraint(constraintName); + if (!constraint) + throw new Error("Transform constraint not found: " + constraintName); + let constraintIndex = skeletonData.transformConstraints.indexOf(constraint); + let timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6, constraintIndex); + let time = getValue(keyMap, "time", 0); + let mixRotate = getValue(keyMap, "mixRotate", 1); + let mixX = getValue(keyMap, "mixX", 1); + let mixY = getValue(keyMap, "mixY", mixX); + let mixScaleX = getValue(keyMap, "mixScaleX", 1); + let mixScaleY = getValue(keyMap, "mixScaleY", mixScaleX); + let mixShearY = getValue(keyMap, "mixShearY", 1); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let mixRotate2 = getValue(nextMap, "mixRotate", 1); + let mixX2 = getValue(nextMap, "mixX", 1); + let mixY2 = getValue(nextMap, "mixY", mixX2); + let mixScaleX2 = getValue(nextMap, "mixScaleX", 1); + let mixScaleY2 = getValue(nextMap, "mixScaleY", mixScaleX2); + let mixShearY2 = getValue(nextMap, "mixShearY", 1); + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixScaleX = mixScaleX2; + keyMap = nextMap; + } + timelines.push(timeline); + } + } + if (map.path) { + for (let constraintName in map.path) { + let constraintMap = map.path[constraintName]; + let constraint = skeletonData.findPathConstraint(constraintName); + if (!constraint) + throw new Error("Path constraint not found: " + constraintName); + let constraintIndex = skeletonData.pathConstraints.indexOf(constraint); + for (let timelineName in constraintMap) { + let timelineMap = constraintMap[timelineName]; + let keyMap = timelineMap[0]; + if (!keyMap) + continue; + let frames = timelineMap.length; + if (timelineName === "position") { + let timeline = new PathConstraintPositionTimeline(frames, frames, constraintIndex); + timelines.push(readTimeline12(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1)); + } else if (timelineName === "spacing") { + let timeline = new PathConstraintSpacingTimeline(frames, frames, constraintIndex); + timelines.push(readTimeline12(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1)); + } else if (timelineName === "mix") { + let timeline = new PathConstraintMixTimeline(frames, frames * 3, constraintIndex); + let time = getValue(keyMap, "time", 0); + let mixRotate = getValue(keyMap, "mixRotate", 1); + let mixX = getValue(keyMap, "mixX", 1); + let mixY = getValue(keyMap, "mixY", mixX); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY); + let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let mixRotate2 = getValue(nextMap, "mixRotate", 1); + let mixX2 = getValue(nextMap, "mixX", 1); + let mixY2 = getValue(nextMap, "mixY", mixX2); + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + keyMap = nextMap; + } + timelines.push(timeline); + } + } + } + } + if (map.physics) { + for (let constraintName in map.physics) { + let constraintMap = map.physics[constraintName]; + let constraintIndex = -1; + if (constraintName.length > 0) { + let constraint = skeletonData.findPhysicsConstraint(constraintName); + if (!constraint) + throw new Error("Physics constraint not found: " + constraintName); + constraintIndex = skeletonData.physicsConstraints.indexOf(constraint); + } + for (let timelineName in constraintMap) { + let timelineMap = constraintMap[timelineName]; + let keyMap = timelineMap[0]; + if (!keyMap) + continue; + let frames = timelineMap.length; + if (timelineName == "reset") { + const timeline2 = new PhysicsConstraintResetTimeline(frames, constraintIndex); + for (let frame = 0; keyMap != null; keyMap = timelineMap[frame + 1], frame++) + timeline2.setFrame(frame, getValue(keyMap, "time", 0)); + timelines.push(timeline2); + continue; + } + let timeline; + if (timelineName == "inertia") + timeline = new PhysicsConstraintInertiaTimeline(frames, frames, constraintIndex); + else if (timelineName == "strength") + timeline = new PhysicsConstraintStrengthTimeline(frames, frames, constraintIndex); + else if (timelineName == "damping") + timeline = new PhysicsConstraintDampingTimeline(frames, frames, constraintIndex); + else if (timelineName == "mass") + timeline = new PhysicsConstraintMassTimeline(frames, frames, constraintIndex); + else if (timelineName == "wind") + timeline = new PhysicsConstraintWindTimeline(frames, frames, constraintIndex); + else if (timelineName == "gravity") + timeline = new PhysicsConstraintGravityTimeline(frames, frames, constraintIndex); + else if (timelineName == "mix") + timeline = new PhysicsConstraintMixTimeline(frames, frames, constraintIndex); + else + continue; + timelines.push(readTimeline12(timelineMap, timeline, 0, 1)); + } + } + } + if (map.attachments) { + for (let attachmentsName in map.attachments) { + let attachmentsMap = map.attachments[attachmentsName]; + let skin = skeletonData.findSkin(attachmentsName); + if (!skin) + throw new Error("Skin not found: " + attachmentsName); + for (let slotMapName in attachmentsMap) { + let slotMap = attachmentsMap[slotMapName]; + let slot = skeletonData.findSlot(slotMapName); + if (!slot) + throw new Error("Slot not found: " + slotMapName); + let slotIndex = slot.index; + for (let attachmentMapName in slotMap) { + let attachmentMap = slotMap[attachmentMapName]; + let attachment = skin.getAttachment(slotIndex, attachmentMapName); + for (let timelineMapName in attachmentMap) { + let timelineMap = attachmentMap[timelineMapName]; + let keyMap = timelineMap[0]; + if (!keyMap) + continue; + if (timelineMapName == "deform") { + let weighted = attachment.bones; + let vertices = attachment.vertices; + let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + let timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment); + let time = getValue(keyMap, "time", 0); + for (let frame = 0, bezier = 0; ; frame++) { + let deform; + let verticesValue = getValue(keyMap, "vertices", null); + if (!verticesValue) + deform = weighted ? Utils.newFloatArray(deformLength) : vertices; + else { + deform = Utils.newFloatArray(deformLength); + let start = getValue(keyMap, "offset", 0); + Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (let i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (let i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frame, time, deform); + let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + let time2 = getValue(nextMap, "time", 0); + let curve = keyMap.curve; + if (curve) + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1); + time = time2; + keyMap = nextMap; + } + timelines.push(timeline); + } else if (timelineMapName == "sequence") { + let timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment); + let lastDelay = 0; + for (let frame = 0; frame < timelineMap.length; frame++) { + let delay = getValue(keyMap, "delay", lastDelay); + let time = getValue(keyMap, "time", 0); + let mode = SequenceMode[getValue(keyMap, "mode", "hold")]; + let index = getValue(keyMap, "index", 0); + timeline.setFrame(frame, time, mode, index, delay); + lastDelay = delay; + keyMap = timelineMap[frame + 1]; + } + timelines.push(timeline); + } + } + } + } + } + } + if (map.drawOrder) { + let timeline = new DrawOrderTimeline(map.drawOrder.length); + let slotCount = skeletonData.slots.length; + let frame = 0; + for (let i = 0; i < map.drawOrder.length; i++, frame++) { + let drawOrderMap = map.drawOrder[i]; + let drawOrder = null; + let offsets = getValue(drawOrderMap, "offsets", null); + if (offsets) { + drawOrder = Utils.newArray(slotCount, -1); + let unchanged = Utils.newArray(slotCount - offsets.length, 0); + let originalIndex = 0, unchangedIndex = 0; + for (let ii = 0; ii < offsets.length; ii++) { + let offsetMap = offsets[ii]; + let slot = skeletonData.findSlot(offsetMap.slot); + if (!slot) + throw new Error("Slot not found: " + slot); + let slotIndex = slot.index; + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (let ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frame, getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + } + if (map.events) { + let timeline = new EventTimeline(map.events.length); + let frame = 0; + for (let i = 0; i < map.events.length; i++, frame++) { + let eventMap = map.events[i]; + let eventData = skeletonData.findEvent(eventMap.name); + if (!eventData) + throw new Error("Event not found: " + eventMap.name); + let event = new Event(Utils.toSinglePrecision(getValue(eventMap, "time", 0)), eventData); + event.intValue = getValue(eventMap, "int", eventData.intValue); + event.floatValue = getValue(eventMap, "float", eventData.floatValue); + event.stringValue = getValue(eventMap, "string", eventData.stringValue); + if (event.data.audioPath) { + event.volume = getValue(eventMap, "volume", 1); + event.balance = getValue(eventMap, "balance", 0); + } + timeline.setFrame(frame, event); + } + timelines.push(timeline); + } + let duration = 0; + for (let i = 0, n = timelines.length; i < n; i++) + duration = Math.max(duration, timelines[i].getDuration()); + skeletonData.animations.push(new Animation(name, timelines, duration)); + } + }; + var LinkedMesh2 = class { + parent; + skin; + slotIndex; + mesh; + inheritTimeline; + constructor(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritTimeline = inheritDeform; + } + }; + function readTimeline12(keys, timeline, defaultValue, scale) { + let keyMap = keys[0]; + let time = getValue(keyMap, "time", 0); + let value = getValue(keyMap, "value", defaultValue) * scale; + let bezier = 0; + for (let frame = 0; ; frame++) { + timeline.setFrame(frame, time, value); + let nextMap = keys[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + return timeline; + } + let time2 = getValue(nextMap, "time", 0); + let value2 = getValue(nextMap, "value", defaultValue) * scale; + if (keyMap.curve) + bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); + time = time2; + value = value2; + keyMap = nextMap; + } + } + function readTimeline22(keys, timeline, name1, name2, defaultValue, scale) { + let keyMap = keys[0]; + let time = getValue(keyMap, "time", 0); + let value1 = getValue(keyMap, name1, defaultValue) * scale; + let value2 = getValue(keyMap, name2, defaultValue) * scale; + let bezier = 0; + for (let frame = 0; ; frame++) { + timeline.setFrame(frame, time, value1, value2); + let nextMap = keys[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + return timeline; + } + let time2 = getValue(nextMap, "time", 0); + let nvalue1 = getValue(nextMap, name1, defaultValue) * scale; + let nvalue2 = getValue(nextMap, name2, defaultValue) * scale; + let curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + keyMap = nextMap; + } + } + function readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) { + if (curve == "stepped") { + timeline.setStepped(frame); + return bezier; + } + let i = value << 2; + let cx1 = curve[i]; + let cy1 = curve[i + 1] * scale; + let cx2 = curve[i + 2]; + let cy2 = curve[i + 3] * scale; + timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; + } + function getValue(map, property, defaultValue) { + return map[property] !== void 0 ? map[property] : defaultValue; + } + + // node_modules/@esotericsoftware/spine-core/dist/polyfills.js + (() => { + if (typeof Math.fround === "undefined") { + Math.fround = /* @__PURE__ */ function(array) { + return function(x) { + return array[0] = x, array[0]; + }; + }(new Float32Array(1)); + } + })(); + + // src/SpineTexture.ts + var SpineTexture = class _SpineTexture extends Texture { + static textureMap = /* @__PURE__ */ new Map(); + static from(texture) { + if (_SpineTexture.textureMap.has(texture)) { + return _SpineTexture.textureMap.get(texture); + } + return new _SpineTexture(texture); + } + texture; + constructor(image) { + super(image.resource); + this.texture = import_pixi.Texture.from(image); + } + setFilters(minFilter, magFilter) { + const style = this.texture.source.style; + style.minFilter = _SpineTexture.toPixiTextureFilter(minFilter); + style.magFilter = _SpineTexture.toPixiTextureFilter(magFilter); + this.texture.source.autoGenerateMipmaps = _SpineTexture.toPixiMipMap(minFilter); + this.texture.source.updateMipmaps(); + } + setWraps(uWrap, vWrap) { + const style = this.texture.source.style; + style.addressModeU = _SpineTexture.toPixiTextureWrap(uWrap); + style.addressModeV = _SpineTexture.toPixiTextureWrap(vWrap); + } + dispose() { + this.texture.destroy(); + } + static toPixiMipMap(filter) { + switch (filter) { + case TextureFilter.Nearest: + case TextureFilter.Linear: + return false; + case TextureFilter.MipMapNearestLinear: + case TextureFilter.MipMapNearestNearest: + case TextureFilter.MipMapLinearLinear: + case TextureFilter.MipMapLinearNearest: + return true; + default: + throw new Error(`Unknown texture filter: ${String(filter)}`); + } + } + static toPixiTextureFilter(filter) { + switch (filter) { + case TextureFilter.Nearest: + case TextureFilter.MipMapNearestLinear: + case TextureFilter.MipMapNearestNearest: + return "nearest"; + case TextureFilter.Linear: + case TextureFilter.MipMapLinearLinear: + case TextureFilter.MipMapLinearNearest: + return "linear"; + default: + throw new Error(`Unknown texture filter: ${String(filter)}`); + } + } + static toPixiTextureWrap(wrap) { + switch (wrap) { + case TextureWrap.ClampToEdge: + return "clamp-to-edge"; + case TextureWrap.MirroredRepeat: + return "mirror-repeat"; + case TextureWrap.Repeat: + return "repeat"; + default: + throw new Error(`Unknown texture wrap: ${String(wrap)}`); + } + } + static toPixiBlending(blend) { + switch (blend) { + case BlendMode.Normal: + return "normal"; + case BlendMode.Additive: + return "add"; + case BlendMode.Multiply: + return "multiply"; + case BlendMode.Screen: + return "screen"; + default: + throw new Error(`Unknown blendMode: ${String(blend)}`); + } + } + }; + + // src/assets/atlasLoader.ts + var spineTextureAtlasLoader = { + extension: import_pixi2.ExtensionType.Asset, + loader: { + extension: { + type: import_pixi2.ExtensionType.LoadParser, + priority: import_pixi2.LoaderParserPriority.Normal, + name: "spineTextureAtlasLoader" + }, + test(url) { + return (0, import_pixi2.checkExtension)(url, ".atlas"); + }, + async load(url) { + const response = await import_pixi2.DOMAdapter.get().fetch(url); + const txt = await response.text(); + return txt; + }, + testParse(asset, options) { + const isExtensionRight = (0, import_pixi2.checkExtension)(options.src, ".atlas"); + const isString = typeof asset === "string"; + return Promise.resolve(isExtensionRight && isString); + }, + unload(atlas) { + atlas.dispose(); + }, + async parse(asset, options, loader) { + const metadata = options.data || {}; + let basePath = import_pixi2.path.dirname(options.src); + if (basePath && basePath.lastIndexOf("/") !== basePath.length - 1) { + basePath += "/"; + } + const retval = new TextureAtlas(asset); + if (metadata.images instanceof import_pixi2.TextureSource || typeof metadata.images === "string") { + const pixiTexture = metadata.images; + metadata.images = {}; + metadata.images[retval.pages[0].name] = pixiTexture; + } + const textureLoadingPromises = []; + for (const page of retval.pages) { + const pageName = page.name; + const providedPage = metadata?.images ? metadata.images[pageName] : void 0; + if (providedPage instanceof import_pixi2.TextureSource) { + page.setTexture(SpineTexture.from(providedPage)); + } else { + const url = providedPage ?? import_pixi2.path.normalize([...basePath.split(import_pixi2.path.sep), pageName].join(import_pixi2.path.sep)); + const assetsToLoadIn = { + src: url, + data: { + ...metadata.imageMetadata, + alphaMode: page.pma ? "premultiplied-alpha" : "premultiply-alpha-on-upload" + } + }; + const pixiPromise = loader.load(assetsToLoadIn).then((texture) => { + page.setTexture(SpineTexture.from(texture.source)); + }); + textureLoadingPromises.push(pixiPromise); + } + } + await Promise.all(textureLoadingPromises); + return retval; + } + } + }; + import_pixi2.extensions.add(spineTextureAtlasLoader); + + // src/assets/skeletonLoader.ts + var import_pixi3 = __require("pixi.js"); + function isJson(resource) { + return Object.prototype.hasOwnProperty.call(resource, "bones"); + } + function isBuffer(resource) { + return resource instanceof Uint8Array; + } + var spineLoaderExtension = { + extension: import_pixi3.ExtensionType.Asset, + loader: { + extension: { + type: import_pixi3.ExtensionType.LoadParser, + priority: import_pixi3.LoaderParserPriority.Normal, + name: "spineSkeletonLoader" + }, + test(url) { + return (0, import_pixi3.checkExtension)(url, ".skel"); + }, + async load(url) { + const response = await import_pixi3.DOMAdapter.get().fetch(url); + const buffer = new Uint8Array(await response.arrayBuffer()); + return buffer; + }, + testParse(asset, options) { + const isJsonSpineModel = (0, import_pixi3.checkExtension)(options.src, ".json") && isJson(asset); + const isBinarySpineModel = (0, import_pixi3.checkExtension)(options.src, ".skel") && isBuffer(asset); + return Promise.resolve(isJsonSpineModel || isBinarySpineModel); + } + } + }; + import_pixi3.extensions.add(spineLoaderExtension); + + // src/darktint/DarkTintBatcher.ts + var import_pixi6 = __require("pixi.js"); + + // src/darktint/DarkTintBatchGeometry.ts + var import_pixi4 = __require("pixi.js"); + var placeHolderBufferData = new Float32Array(1); + var placeHolderIndexData = new Uint32Array(1); + var DarkTintBatchGeometry = class extends import_pixi4.Geometry { + constructor() { + const vertexSize = 7; + const attributeBuffer = new import_pixi4.Buffer({ + data: placeHolderBufferData, + label: "attribute-batch-buffer", + usage: import_pixi4.BufferUsage.VERTEX | import_pixi4.BufferUsage.COPY_DST, + shrinkToFit: false + }); + const indexBuffer = new import_pixi4.Buffer({ + data: placeHolderIndexData, + label: "index-batch-buffer", + usage: import_pixi4.BufferUsage.INDEX | import_pixi4.BufferUsage.COPY_DST, + // | BufferUsage.STATIC, + shrinkToFit: false + }); + const stride = vertexSize * 4; + super({ + attributes: { + aPosition: { + buffer: attributeBuffer, + format: "float32x2", + stride, + offset: 0 + }, + aUV: { + buffer: attributeBuffer, + format: "float32x2", + stride, + offset: 2 * 4 + }, + aColor: { + buffer: attributeBuffer, + format: "unorm8x4", + stride, + offset: 4 * 4 + }, + aDarkColor: { + buffer: attributeBuffer, + format: "unorm8x4", + stride, + offset: 5 * 4 + }, + aTextureIdAndRound: { + buffer: attributeBuffer, + format: "uint16x2", + stride, + offset: 6 * 4 + } + }, + indexBuffer + }); + } + }; + + // src/darktint/DarkTintShader.ts + var import_pixi5 = __require("pixi.js"); + + // src/darktint/darkTintBit.ts + var darkTintBit = { + name: "color-bit", + vertex: { + header: ( + /* wgsl */ + ` + @in aDarkColor: vec4; + @out vDarkColor: vec4; + ` + ), + main: ( + /* wgsl */ + ` + vDarkColor = aDarkColor; + ` + ) + }, + fragment: { + header: ( + /* wgsl */ + ` + @in vDarkColor: vec4; + ` + ), + end: ( + /* wgsl */ + ` + + let alpha = outColor.a * vColor.a; + let rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb; + + finalColor = vec4(rgb, alpha); + + ` + ) + } + }; + var darkTintBitGl = { + name: "color-bit", + vertex: { + header: ( + /* glsl */ + ` + in vec4 aDarkColor; + out vec4 vDarkColor; + ` + ), + main: ( + /* glsl */ + ` + vDarkColor = aDarkColor; + ` + ) + }, + fragment: { + header: ( + /* glsl */ + ` + in vec4 vDarkColor; + ` + ), + end: ( + /* glsl */ + ` + + finalColor.a = outColor.a * vColor.a; + finalColor.rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb; + ` + ) + } + }; + + // src/darktint/DarkTintShader.ts + var DarkTintShader = class extends import_pixi5.Shader { + constructor(maxTextures) { + const glProgram = (0, import_pixi5.compileHighShaderGlProgram)({ + name: "dark-tint-batch", + bits: [ + import_pixi5.colorBitGl, + darkTintBitGl, + (0, import_pixi5.generateTextureBatchBitGl)(maxTextures), + import_pixi5.roundPixelsBitGl + ] + }); + const gpuProgram = (0, import_pixi5.compileHighShaderGpuProgram)({ + name: "dark-tint-batch", + bits: [ + import_pixi5.colorBit, + darkTintBit, + (0, import_pixi5.generateTextureBatchBit)(maxTextures), + import_pixi5.roundPixelsBit + ] + }); + super({ + glProgram, + gpuProgram, + resources: { + batchSamplers: (0, import_pixi5.getBatchSamplersUniformGroup)(maxTextures) + } + }); + } + }; + + // src/darktint/DarkTintBatcher.ts + var defaultShader = null; + var DarkTintBatcher = class _DarkTintBatcher extends import_pixi6.Batcher { + /** @ignore */ + static extension = { + type: [ + import_pixi6.ExtensionType.Batcher + ], + name: "darkTint" + }; + geometry = new DarkTintBatchGeometry(); + shader = defaultShader || (defaultShader = new DarkTintShader(this.maxTextures)); + name = _DarkTintBatcher.extension.name; + /** The size of one attribute. 1 = 32 bit. x, y, u, v, color, darkColor, textureIdAndRound -> total = 7 */ + vertexSize = 7; + packAttributes(element, float32View, uint32View, index, textureId) { + const textureIdAndRound = textureId << 16 | element.roundPixels & 65535; + const wt = element.transform; + const a = wt.a; + const b = wt.b; + const c = wt.c; + const d = wt.d; + const tx = wt.tx; + const ty = wt.ty; + const { positions, uvs } = element; + const argb = element.color; + const darkColor2 = element.darkColor; + const offset = element.attributeOffset; + const end = offset + element.attributeSize; + for (let i = offset; i < end; i++) { + const i2 = i * 2; + const x = positions[i2]; + const y = positions[i2 + 1]; + float32View[index++] = a * x + c * y + tx; + float32View[index++] = d * y + b * x + ty; + float32View[index++] = uvs[i2]; + float32View[index++] = uvs[i2 + 1]; + uint32View[index++] = argb; + uint32View[index++] = darkColor2; + uint32View[index++] = textureIdAndRound; + } + } + packQuadAttributes(element, float32View, uint32View, index, textureId) { + const texture = element.texture; + const wt = element.transform; + const a = wt.a; + const b = wt.b; + const c = wt.c; + const d = wt.d; + const tx = wt.tx; + const ty = wt.ty; + const bounds = element.bounds; + const w0 = bounds.maxX; + const w1 = bounds.minX; + const h0 = bounds.maxY; + const h1 = bounds.minY; + const uvs = texture.uvs; + const argb = element.color; + const darkColor2 = element.darkColor; + const textureIdAndRound = textureId << 16 | element.roundPixels & 65535; + float32View[index + 0] = a * w1 + c * h1 + tx; + float32View[index + 1] = d * h1 + b * w1 + ty; + float32View[index + 2] = uvs.x0; + float32View[index + 3] = uvs.y0; + uint32View[index + 4] = argb; + uint32View[index + 5] = darkColor2; + uint32View[index + 6] = textureIdAndRound; + float32View[index + 7] = a * w0 + c * h1 + tx; + float32View[index + 8] = d * h1 + b * w0 + ty; + float32View[index + 9] = uvs.x1; + float32View[index + 10] = uvs.y1; + uint32View[index + 11] = argb; + uint32View[index + 12] = darkColor2; + uint32View[index + 13] = textureIdAndRound; + float32View[index + 14] = a * w0 + c * h0 + tx; + float32View[index + 15] = d * h0 + b * w0 + ty; + float32View[index + 16] = uvs.x2; + float32View[index + 17] = uvs.y2; + uint32View[index + 18] = argb; + uint32View[index + 19] = darkColor2; + uint32View[index + 20] = textureIdAndRound; + float32View[index + 21] = a * w1 + c * h0 + tx; + float32View[index + 22] = d * h0 + b * w1 + ty; + float32View[index + 23] = uvs.x3; + float32View[index + 24] = uvs.y3; + uint32View[index + 25] = argb; + uint32View[index + 26] = darkColor2; + uint32View[index + 27] = textureIdAndRound; + } + }; + import_pixi6.extensions.add(DarkTintBatcher); + + // src/SpinePipe.ts + var import_pixi7 = __require("pixi.js"); + + // src/BatchableSpineSlot.ts + var BatchableSpineSlot = class { + indexOffset = 0; + attributeOffset = 0; + indexSize; + attributeSize; + batcherName = "darkTint"; + packAsQuad = false; + renderable; + positions; + indices; + uvs; + roundPixels; + data; + blendMode; + darkTint; + texture; + transform; + // used internally by batcher specific.. + // stored for efficient updating.. + _textureId; + _attributeStart; + _indexStart; + _batcher; + _batch; + get color() { + const slotColor = this.data.color; + const parentColor = this.renderable.groupColor; + const parentAlpha = this.renderable.groupAlpha; + let abgr; + const mixedA = slotColor.a * parentAlpha * 255; + if (parentColor !== 16777215) { + const parentB = parentColor >> 16 & 255; + const parentG = parentColor >> 8 & 255; + const parentR = parentColor & 255; + const mixedR = slotColor.r * parentR; + const mixedG = slotColor.g * parentG; + const mixedB = slotColor.b * parentB; + abgr = mixedA << 24 | mixedB << 16 | mixedG << 8 | mixedR; + } else { + abgr = mixedA << 24 | slotColor.b * 255 << 16 | slotColor.g * 255 << 8 | slotColor.r * 255; + } + return abgr; + } + get darkColor() { + const darkColor2 = this.data.darkColor; + return darkColor2.a << 24 | darkColor2.b * 255 << 16 | darkColor2.g * 255 << 8 | darkColor2.r * 255; + } + get groupTransform() { + return this.renderable.groupTransform; + } + setData(renderable, data, texture, blendMode, roundPixels) { + this.renderable = renderable; + this.transform = renderable.groupTransform; + this.data = data; + if (data.clipped) { + const clippedData = data.clippedData; + this.indexSize = clippedData.indicesCount; + this.attributeSize = clippedData.vertexCount; + this.positions = clippedData.vertices; + this.indices = clippedData.indices; + this.uvs = clippedData.uvs; + } else { + this.indexSize = data.indices.length; + this.attributeSize = data.vertices.length / 2; + this.positions = data.vertices; + this.indices = data.indices; + this.uvs = data.uvs; + } + this.texture = texture; + this.roundPixels = roundPixels; + this.blendMode = blendMode; + this.batcherName = data.darkTint ? "darkTint" : "default"; + } + }; + + // src/SpinePipe.ts + var clipper = new SkeletonClipping(); + var spineBlendModeMap = { + 0: "normal", + 1: "add", + 2: "multiply", + 3: "screen" + }; + var SpinePipe = class { + /** @ignore */ + static extension = { + type: [ + import_pixi7.ExtensionType.WebGLPipes, + import_pixi7.ExtensionType.WebGPUPipes, + import_pixi7.ExtensionType.CanvasPipes + ], + name: "spine" + }; + renderer; + gpuSpineData = {}; + constructor(renderer) { + this.renderer = renderer; + } + validateRenderable(spine) { + spine._applyState(); + return spine.spineAttachmentsDirty; + } + addRenderable(spine, instructionSet) { + const gpuSpine = this.gpuSpineData[spine.uid] ||= { slotBatches: {} }; + const batcher = this.renderer.renderPipes.batch; + const drawOrder = spine.skeleton.drawOrder; + const roundPixels = this.renderer._roundPixels | spine._roundPixels; + spine._applyState(); + for (let i = 0, n = drawOrder.length; i < n; i++) { + const slot = drawOrder[i]; + const attachment = slot.getAttachment(); + const blendMode = spineBlendModeMap[slot.data.blendMode]; + if (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment) { + const cacheData = spine._getCachedData(slot, attachment); + const batchableSpineSlot = gpuSpine.slotBatches[cacheData.id] ||= new BatchableSpineSlot(); + batchableSpineSlot.setData( + spine, + cacheData, + attachment.region?.texture.texture || import_pixi7.Texture.EMPTY, + blendMode, + roundPixels + ); + if (!cacheData.skipRender) { + batcher.addToBatch(batchableSpineSlot, instructionSet); + } + } + const containerAttachment = spine._slotsObject[slot.data.name]; + if (containerAttachment) { + const container = containerAttachment.container; + container.includeInBuild = true; + (0, import_pixi7.collectAllRenderables)(container, instructionSet, this.renderer); + container.includeInBuild = false; + } + } + clipper.clipEnd(); + } + updateRenderable(spine) { + const gpuSpine = this.gpuSpineData[spine.uid]; + spine._applyState(); + const drawOrder = spine.skeleton.drawOrder; + for (let i = 0, n = drawOrder.length; i < n; i++) { + const slot = drawOrder[i]; + const attachment = slot.getAttachment(); + if (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment) { + const cacheData = spine._getCachedData(slot, attachment); + if (!cacheData.skipRender) { + const batchableSpineSlot = gpuSpine.slotBatches[spine._getCachedData(slot, attachment).id]; + batchableSpineSlot._batcher?.updateElement(batchableSpineSlot); + } + } + } + } + destroyRenderable(spine) { + this.gpuSpineData[spine.uid] = null; + } + destroy() { + this.gpuSpineData = null; + this.renderer = null; + } + }; + import_pixi7.extensions.add(SpinePipe); + + // src/Spine.ts + var import_pixi8 = __require("pixi.js"); + var vectorAux = new Vector2(); + var lightColor = new Color(); + var darkColor = new Color(); + Skeleton.yDown = true; + var clipper2 = new SkeletonClipping(); + var Spine = class _Spine extends import_pixi8.ViewContainer { + // Pixi properties + batched = true; + buildId = 0; + renderPipeId = "spine"; + _didSpineUpdate = false; + beforeUpdateWorldTransforms = () => { + }; + afterUpdateWorldTransforms = () => { + }; + // Spine properties + skeleton; + state; + skeletonBounds; + _debug = void 0; + _slotsObject = /* @__PURE__ */ Object.create(null); + getSlotFromRef(slotRef) { + let slot; + if (typeof slotRef === "number") + slot = this.skeleton.slots[slotRef]; + else if (typeof slotRef === "string") + slot = this.skeleton.findSlot(slotRef); + else + slot = slotRef; + if (!slot) + throw new Error(`No slot found with the given slot reference: ${slotRef}`); + return slot; + } + spineAttachmentsDirty; + _lastAttachments; + _stateChanged; + attachmentCacheData = []; + get debug() { + return this._debug; + } + set debug(value) { + if (this._debug) { + this._debug.unregisterSpine(this); + } + if (value) { + value.registerSpine(this); + } + this._debug = value; + } + autoUpdateWarned = false; + _autoUpdate = true; + get autoUpdate() { + return this._autoUpdate; + } + set autoUpdate(value) { + if (value) { + import_pixi8.Ticker.shared.add(this.internalUpdate, this); + this.autoUpdateWarned = false; + } else { + import_pixi8.Ticker.shared.remove(this.internalUpdate, this); + } + this._autoUpdate = value; + } + constructor(options) { + if (options instanceof SkeletonData) { + options = { + skeletonData: options + }; + } + super(); + const skeletonData = options instanceof SkeletonData ? options : options.skeletonData; + this.skeleton = new Skeleton(skeletonData); + this.state = new AnimationState(new AnimationStateData(skeletonData)); + this.autoUpdate = options?.autoUpdate ?? true; + const slots = this.skeleton.slots; + for (let i = 0; i < slots.length; i++) { + this.attachmentCacheData[i] = /* @__PURE__ */ Object.create(null); + } + this._updateState(0); + } + update(dt) { + if (this.autoUpdate && !this.autoUpdateWarned) { + console.warn( + // eslint-disable-next-line max-len + "You are calling update on a Spine instance that has autoUpdate set to true. This is probably not what you want." + ); + this.autoUpdateWarned = true; + } + this.internalUpdate(0, dt); + } + internalUpdate(_deltaFrame, deltaSeconds) { + this._updateState(deltaSeconds ?? import_pixi8.Ticker.shared.deltaMS / 1e3); + } + get bounds() { + if (this._boundsDirty) { + this.updateBounds(); + } + return this._bounds; + } + setBonePosition(bone, position) { + const boneAux = bone; + if (typeof bone === "string") { + bone = this.skeleton.findBone(bone); + } + if (!bone) + throw Error(`Cant set bone position, bone ${String(boneAux)} not found`); + vectorAux.set(position.x, position.y); + if (bone.parent) { + const aux = bone.parent.worldToLocal(vectorAux); + bone.x = aux.x; + bone.y = -aux.y; + } else { + bone.x = vectorAux.x; + bone.y = vectorAux.y; + } + } + getBonePosition(bone, outPos) { + const boneAux = bone; + if (typeof bone === "string") { + bone = this.skeleton.findBone(bone); + } + if (!bone) { + console.error(`Cant set bone position! Bone ${String(boneAux)} not found`); + return outPos; + } + if (!outPos) { + outPos = { x: 0, y: 0 }; + } + outPos.x = bone.worldX; + outPos.y = bone.worldY; + return outPos; + } + /** + * Will update the state based on the specified time, this will not apply the state to the skeleton + * as this is differed until the `applyState` method is called. + * + * @param time the time at which to set the state + * @internal + */ + _updateState(time) { + this.state.update(time); + this.skeleton.update(time); + this._stateChanged = true; + this._boundsDirty = true; + this.onViewUpdate(); + } + /** + * Applies the state to this spine instance. + * - updates the state to the skeleton + * - updates its world transform (spine world transform) + * - validates the attachments - to flag if the attachments have changed this state + * - transforms the attachments - to update the vertices of the attachments based on the new positions + * - update the slot attachments - to update the position, rotation, scale, and visibility of the attached containers + * @internal + */ + _applyState() { + if (!this._stateChanged) + return; + this._stateChanged = false; + const { skeleton } = this; + this.state.apply(skeleton); + this.beforeUpdateWorldTransforms(this); + skeleton.updateWorldTransform(Physics.update); + this.afterUpdateWorldTransforms(this); + this.validateAttachments(); + this.transformAttachments(); + this.updateSlotObjects(); + } + validateAttachments() { + const currentDrawOrder = this.skeleton.drawOrder; + const lastAttachments = this._lastAttachments ||= []; + let index = 0; + let spineAttachmentsDirty = false; + for (let i = 0; i < currentDrawOrder.length; i++) { + const slot = currentDrawOrder[i]; + const attachment = slot.getAttachment(); + if (attachment) { + if (attachment !== lastAttachments[index]) { + spineAttachmentsDirty = true; + lastAttachments[index] = attachment; + } + index++; + } + } + if (index !== lastAttachments.length) { + spineAttachmentsDirty = true; + lastAttachments.length = index; + } + this.spineAttachmentsDirty = spineAttachmentsDirty; + } + transformAttachments() { + const currentDrawOrder = this.skeleton.drawOrder; + for (let i = 0; i < currentDrawOrder.length; i++) { + const slot = currentDrawOrder[i]; + const attachment = slot.getAttachment(); + if (attachment) { + if (attachment instanceof MeshAttachment || attachment instanceof RegionAttachment) { + const cacheData = this._getCachedData(slot, attachment); + if (attachment instanceof RegionAttachment) { + attachment.computeWorldVertices(slot, cacheData.vertices, 0, 2); + } else { + attachment.computeWorldVertices( + slot, + 0, + attachment.worldVerticesLength, + cacheData.vertices, + 0, + 2 + ); + } + cacheData.uvs = attachment.uvs; + const skeleton = slot.bone.skeleton; + const skeletonColor = skeleton.color; + const slotColor = slot.color; + const attachmentColor = attachment.color; + cacheData.color.set( + skeletonColor.r * slotColor.r * attachmentColor.r, + skeletonColor.g * slotColor.g * attachmentColor.g, + skeletonColor.b * slotColor.b * attachmentColor.b, + skeletonColor.a * slotColor.a * attachmentColor.a + ); + cacheData.darkTint = !!slot.darkColor; + if (slot.darkColor) { + cacheData.darkColor.setFromColor(slot.darkColor); + } + cacheData.skipRender = cacheData.clipped = false; + if (clipper2.isClipping()) { + this.updateClippingData(cacheData); + } + } else if (attachment instanceof ClippingAttachment) { + clipper2.clipStart(slot, attachment); + continue; + } + } + clipper2.clipEndWithSlot(slot); + } + clipper2.clipEnd(); + } + updateClippingData(cacheData) { + cacheData.clipped = true; + clipper2.clipTriangles( + cacheData.vertices, + cacheData.vertices.length, + cacheData.indices, + cacheData.indices.length, + cacheData.uvs, + lightColor, + darkColor, + false + ); + const { clippedVertices, clippedTriangles } = clipper2; + const verticesCount = clippedVertices.length / 8; + const indicesCount = clippedTriangles.length; + if (!cacheData.clippedData) { + cacheData.clippedData = { + vertices: new Float32Array(verticesCount * 2), + uvs: new Float32Array(verticesCount * 2), + vertexCount: verticesCount, + indices: new Uint16Array(indicesCount), + indicesCount + }; + this.spineAttachmentsDirty = true; + } + const clippedData = cacheData.clippedData; + const sizeChange = clippedData.vertexCount !== verticesCount || indicesCount !== clippedData.indicesCount; + cacheData.skipRender = verticesCount === 0; + if (sizeChange) { + this.spineAttachmentsDirty = true; + if (clippedData.vertexCount < verticesCount) { + clippedData.vertices = new Float32Array(verticesCount * 2); + clippedData.uvs = new Float32Array(verticesCount * 2); + } + if (clippedData.indices.length < indicesCount) { + clippedData.indices = new Uint16Array(indicesCount); + } + } + const { vertices, uvs, indices } = clippedData; + for (let i = 0; i < verticesCount; i++) { + vertices[i * 2] = clippedVertices[i * 8]; + vertices[i * 2 + 1] = clippedVertices[i * 8 + 1]; + uvs[i * 2] = clippedVertices[i * 8 + 6]; + uvs[i * 2 + 1] = clippedVertices[i * 8 + 7]; + } + clippedData.vertexCount = verticesCount; + for (let i = 0; i < indices.length; i++) { + indices[i] = clippedTriangles[i]; + } + clippedData.indicesCount = indicesCount; + } + /** + * ensure that attached containers map correctly to their slots + * along with their position, rotation, scale, and visibility. + */ + updateSlotObjects() { + for (const i in this._slotsObject) { + const slotAttachment = this._slotsObject[i]; + if (!slotAttachment) + continue; + this.updateSlotObject(slotAttachment); + } + } + updateSlotObject(slotAttachment) { + const { slot, container } = slotAttachment; + container.visible = this.skeleton.drawOrder.includes(slot); + if (container.visible) { + const bone = slot.bone; + container.position.set(bone.worldX, bone.worldY); + container.scale.x = bone.getWorldScaleX(); + container.scale.y = bone.getWorldScaleY(); + container.rotation = bone.getWorldRotationX() * import_pixi8.DEG_TO_RAD; + } + } + /** @internal */ + _getCachedData(slot, attachment) { + return this.attachmentCacheData[slot.data.index][attachment.name] || this.initCachedData(slot, attachment); + } + initCachedData(slot, attachment) { + let vertices; + if (attachment instanceof RegionAttachment) { + vertices = new Float32Array(8); + this.attachmentCacheData[slot.data.index][attachment.name] = { + id: `${slot.data.index}-${attachment.name}`, + vertices, + clipped: false, + indices: [0, 1, 2, 0, 2, 3], + uvs: attachment.uvs, + color: new Color(1, 1, 1, 1), + darkColor: new Color(0, 0, 0, 0), + darkTint: false, + skipRender: false + }; + } else { + vertices = new Float32Array(attachment.worldVerticesLength); + this.attachmentCacheData[slot.data.index][attachment.name] = { + id: `${slot.data.index}-${attachment.name}`, + vertices, + clipped: false, + indices: attachment.triangles, + uvs: attachment.uvs, + color: new Color(1, 1, 1, 1), + darkColor: new Color(0, 0, 0, 0), + darkTint: false, + skipRender: false + }; + } + return this.attachmentCacheData[slot.data.index][attachment.name]; + } + onViewUpdate() { + this._didChangeId += 1 << 12; + this._boundsDirty = true; + if (this.didViewUpdate) + return; + this.didViewUpdate = true; + const renderGroup = this.renderGroup || this.parentRenderGroup; + if (renderGroup) { + renderGroup.onChildViewUpdate(this); + } + this.debug?.renderDebug(this); + } + /** + * Attaches a PixiJS container to a specified slot. This will map the world transform of the slots bone + * to the attached container. A container can only be attached to one slot at a time. + * + * @param container - The container to attach to the slot + * @param slotRef - The slot id or slot to attach to + */ + addSlotObject(slot, container) { + slot = this.getSlotFromRef(slot); + for (const i in this._slotsObject) { + if (this._slotsObject[i]?.container === container) { + this.removeSlotObject(this._slotsObject[i].slot); + } + } + this.removeSlotObject(slot); + container.includeInBuild = false; + this.addChild(container); + this._slotsObject[slot.data.name] = { + container, + slot + }; + this.updateSlotObject(this._slotsObject[slot.data.name]); + } + /** + * Removes a PixiJS container from the slot it is attached to. + * + * @param container - The container to detach from the slot + * @param slotOrContainer - The container, slot id or slot to detach from + */ + removeSlotObject(slotOrContainer) { + let containerToRemove; + if (slotOrContainer instanceof import_pixi8.Container) { + for (const i in this._slotsObject) { + if (this._slotsObject[i]?.container === slotOrContainer) { + this._slotsObject[i] = null; + containerToRemove = slotOrContainer; + break; + } + } + } else { + const slot = this.getSlotFromRef(slotOrContainer); + containerToRemove = this._slotsObject[slot.data.name]?.container; + this._slotsObject[slot.data.name] = null; + } + if (containerToRemove) { + this.removeChild(containerToRemove); + containerToRemove.includeInBuild = true; + } + } + /** + * Returns a container attached to a slot, or undefined if no container is attached. + * + * @param slotRef - The slot id or slot to get the attachment from + * @returns - The container attached to the slot + */ + getSlotObject(slot) { + slot = this.getSlotFromRef(slot); + return this._slotsObject[slot.data.name].container; + } + updateBounds() { + this._boundsDirty = false; + this.skeletonBounds ||= new SkeletonBounds(); + const skeletonBounds = this.skeletonBounds; + skeletonBounds.update(this.skeleton, true); + if (skeletonBounds.minX === Infinity) { + this._applyState(); + const drawOrder = this.skeleton.drawOrder; + const bounds = this._bounds; + bounds.clear(); + for (let i = 0; i < drawOrder.length; i++) { + const slot = drawOrder[i]; + const attachment = slot.getAttachment(); + if (attachment && (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment)) { + const cacheData = this._getCachedData(slot, attachment); + bounds.addVertexData(cacheData.vertices, 0, cacheData.vertices.length); + } + } + } else { + this._bounds.minX = skeletonBounds.minX; + this._bounds.minY = skeletonBounds.minY; + this._bounds.maxX = skeletonBounds.maxX; + this._bounds.maxY = skeletonBounds.maxY; + } + } + /** @internal */ + addBounds(bounds) { + bounds.addBounds(this.bounds); + } + /** + * Destroys this sprite renderable and optionally its texture. + * @param options - Options parameter. A boolean will act as if all options + * have been set to that value + * @param {boolean} [options.texture=false] - Should it destroy the current texture of the renderable as well + * @param {boolean} [options.textureSource=false] - Should it destroy the textureSource of the renderable as well + */ + destroy(options = false) { + super.destroy(options); + import_pixi8.Ticker.shared.remove(this.internalUpdate, this); + this.state.clearListeners(); + this.debug = void 0; + this.skeleton = null; + this.state = null; + this._slotsObject = null; + this._lastAttachments = null; + this.attachmentCacheData = null; + } + /** Converts a point from the skeleton coordinate system to the Pixi world coordinate system. */ + skeletonToPixiWorldCoordinates(point) { + this.worldTransform.apply(point, point); + } + /** Converts a point from the Pixi world coordinate system to the skeleton coordinate system. */ + pixiWorldCoordinatesToSkeleton(point) { + this.worldTransform.applyInverse(point, point); + } + /** Converts a point from the Pixi world coordinate system to the bone's local coordinate system. */ + pixiWorldCoordinatesToBone(point, bone) { + this.pixiWorldCoordinatesToSkeleton(point); + if (bone.parent) { + bone.parent.worldToLocal(point); + } else { + bone.worldToLocal(point); + } + } + static from({ skeleton, atlas, scale = 1 }) { + const cacheKey = `${skeleton}-${atlas}-${scale}`; + if (import_pixi8.Cache.has(cacheKey)) { + return new _Spine(import_pixi8.Cache.get(cacheKey)); + } + const skeletonAsset = import_pixi8.Assets.get(skeleton); + const atlasAsset = import_pixi8.Assets.get(atlas); + const attachmentLoader = new AtlasAttachmentLoader(atlasAsset); + const parser = skeletonAsset instanceof Uint8Array ? new SkeletonBinary(attachmentLoader) : new SkeletonJson(attachmentLoader); + parser.scale = scale; + const skeletonData = parser.readSkeletonData(skeletonAsset); + import_pixi8.Cache.set(cacheKey, skeletonData); + return new _Spine({ + skeletonData + }); + } + }; + + // src/SpineDebugRenderer.ts + var import_pixi9 = __require("pixi.js"); + var SpineDebugRenderer = class { + registeredSpines = /* @__PURE__ */ new Map(); + drawMeshHull = true; + drawMeshTriangles = true; + drawBones = true; + drawPaths = true; + drawBoundingBoxes = true; + drawClipping = true; + drawRegionAttachments = true; + drawEvents = true; + lineWidth = 1; + regionAttachmentsColor = 30975; + meshHullColor = 30975; + meshTrianglesColor = 16763904; + clippingPolygonColor = 16711935; + boundingBoxesRectColor = 65280; + boundingBoxesPolygonColor = 65280; + boundingBoxesCircleColor = 65280; + pathsCurveColor = 16711680; + pathsLineColor = 16711935; + skeletonXYColor = 16711680; + bonesColor = 61132; + eventFontSize = 24; + eventFontColor = 0; + /** + * The debug is attached by force to each spine object. + * So we need to create it inside the spine when we get the first update + */ + registerSpine(spine) { + if (this.registeredSpines.has(spine)) { + console.warn("SpineDebugRenderer.registerSpine() - this spine is already registered!", spine); + return; + } + const debugDisplayObjects = { + parentDebugContainer: new import_pixi9.Container(), + bones: new import_pixi9.Container(), + skeletonXY: new import_pixi9.Graphics(), + regionAttachmentsShape: new import_pixi9.Graphics(), + meshTrianglesLine: new import_pixi9.Graphics(), + meshHullLine: new import_pixi9.Graphics(), + clippingPolygon: new import_pixi9.Graphics(), + boundingBoxesRect: new import_pixi9.Graphics(), + boundingBoxesCircle: new import_pixi9.Graphics(), + boundingBoxesPolygon: new import_pixi9.Graphics(), + pathsCurve: new import_pixi9.Graphics(), + pathsLine: new import_pixi9.Graphics(), + eventText: new import_pixi9.Container(), + eventCallback: { + event: (_, event) => { + if (this.drawEvents) { + const scale = Math.abs(spine.scale.x || spine.scale.y || 1); + const text = new import_pixi9.Text({ + text: event.data.name, + style: { + fontSize: this.eventFontSize / scale, + fill: this.eventFontColor, + fontFamily: "monospace" + } + }); + text.scale.x = Math.sign(spine.scale.x); + text.anchor.set(0.5); + debugDisplayObjects.eventText.addChild(text); + setTimeout(() => { + if (!text.destroyed) { + text.destroy(); + } + }, 250); + } + } + } + }; + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.bones); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.skeletonXY); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.regionAttachmentsShape); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshTrianglesLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshHullLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.clippingPolygon); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesRect); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesCircle); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesPolygon); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsCurve); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.eventText); + debugDisplayObjects.parentDebugContainer.zIndex = 9999999; + debugDisplayObjects.parentDebugContainer.accessibleChildren = false; + debugDisplayObjects.parentDebugContainer.eventMode = "none"; + debugDisplayObjects.parentDebugContainer.interactiveChildren = false; + spine.addChild(debugDisplayObjects.parentDebugContainer); + spine.state.addListener(debugDisplayObjects.eventCallback); + this.registeredSpines.set(spine, debugDisplayObjects); + } + renderDebug(spine) { + if (!this.registeredSpines.has(spine)) { + this.registerSpine(spine); + } + const debugDisplayObjects = this.registeredSpines.get(spine); + if (!debugDisplayObjects) { + return; + } + spine.addChild(debugDisplayObjects.parentDebugContainer); + debugDisplayObjects.skeletonXY.clear(); + debugDisplayObjects.regionAttachmentsShape.clear(); + debugDisplayObjects.meshTrianglesLine.clear(); + debugDisplayObjects.meshHullLine.clear(); + debugDisplayObjects.clippingPolygon.clear(); + debugDisplayObjects.boundingBoxesRect.clear(); + debugDisplayObjects.boundingBoxesCircle.clear(); + debugDisplayObjects.boundingBoxesPolygon.clear(); + debugDisplayObjects.pathsCurve.clear(); + debugDisplayObjects.pathsLine.clear(); + for (let len = debugDisplayObjects.bones.children.length; len > 0; len--) { + debugDisplayObjects.bones.children[len - 1].destroy({ children: true, texture: true, textureSource: true }); + } + const scale = Math.abs(spine.scale.x || spine.scale.y || 1); + const lineWidth = this.lineWidth / scale; + if (this.drawBones) { + this.drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale); + } + if (this.drawPaths) { + this.drawPathsFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawBoundingBoxes) { + this.drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawClipping) { + this.drawClippingFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawMeshHull || this.drawMeshTriangles) { + this.drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth); + } + if (this.drawRegionAttachments) { + this.drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawEvents) { + for (const child of debugDisplayObjects.eventText.children) { + child.alpha -= 0.05; + child.y -= 2; + } + } + } + drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale) { + const skeleton = spine.skeleton; + const skeletonX = skeleton.x; + const skeletonY = skeleton.y; + const bones = skeleton.bones; + debugDisplayObjects.skeletonXY.strokeStyle = { width: lineWidth, color: this.skeletonXYColor }; + for (let i = 0, len = bones.length; i < len; i++) { + const bone = bones[i]; + const boneLen = bone.data.length; + const starX = skeletonX + bone.worldX; + const starY = skeletonY + bone.worldY; + const endX = skeletonX + boneLen * bone.a + bone.worldX; + const endY = skeletonY + boneLen * bone.b + bone.worldY; + if (bone.data.name === "root" || bone.data.parent === null) { + continue; + } + const w = Math.abs(starX - endX); + const h = Math.abs(starY - endY); + const a2 = Math.pow(w, 2); + const b = h; + const b2 = Math.pow(h, 2); + const c = Math.sqrt(a2 + b2); + const c2 = Math.pow(c, 2); + const rad = Math.PI / 180; + const B = Math.acos((c2 + b2 - a2) / (2 * b * c)) || 0; + if (c === 0) { + continue; + } + const gp = new import_pixi9.Graphics(); + debugDisplayObjects.bones.addChild(gp); + const refRation = c / 50 / scale; + gp.context.poly([0, 0, 0 - refRation, c - refRation * 3, 0, c - refRation, 0 + refRation, c - refRation * 3]).fill(this.bonesColor); + gp.x = starX; + gp.y = starY; + gp.pivot.y = c; + let rotation = 0; + if (starX < endX && starY < endY) { + rotation = -B + 180 * rad; + } else if (starX > endX && starY < endY) { + rotation = 180 * (rad + B); + } else if (starX > endX && starY > endY) { + rotation = -B; + } else if (starX < endX && starY > endY) { + rotation = B; + } else if (starY === endY && starX < endX) { + rotation = 90 * rad; + } else if (starY === endY && starX > endX) { + rotation = -90 * rad; + } else if (starX === endX && starY < endY) { + rotation = 180 * rad; + } else if (starX === endX && starY > endY) { + rotation = 0; + } + gp.rotation = rotation; + gp.circle(0, c, refRation * 1.2).fill({ color: 0, alpha: 0.6 }).stroke({ width: lineWidth, color: this.skeletonXYColor }); + } + const startDotSize = lineWidth * 3; + debugDisplayObjects.skeletonXY.context.moveTo(skeletonX - startDotSize, skeletonY - startDotSize).lineTo(skeletonX + startDotSize, skeletonY + startDotSize).moveTo(skeletonX + startDotSize, skeletonY - startDotSize).lineTo(skeletonX - startDotSize, skeletonY + startDotSize).stroke(); + } + drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + const attachment = slot.getAttachment(); + if (attachment === null || !(attachment instanceof RegionAttachment)) { + continue; + } + const regionAttachment = attachment; + const vertices = new Float32Array(8); + regionAttachment.computeWorldVertices(slot, vertices, 0, 2); + debugDisplayObjects.regionAttachmentsShape.poly(Array.from(vertices.slice(0, 8))); + } + debugDisplayObjects.regionAttachmentsShape.stroke({ + color: this.regionAttachmentsColor, + width: lineWidth + }); + } + drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + if (!slot.bone.active) { + continue; + } + const attachment = slot.getAttachment(); + if (attachment === null || !(attachment instanceof MeshAttachment)) { + continue; + } + const meshAttachment = attachment; + const vertices = new Float32Array(meshAttachment.worldVerticesLength); + const triangles = meshAttachment.triangles; + let hullLength = meshAttachment.hullLength; + meshAttachment.computeWorldVertices(slot, 0, meshAttachment.worldVerticesLength, vertices, 0, 2); + if (this.drawMeshTriangles) { + for (let i2 = 0, len2 = triangles.length; i2 < len2; i2 += 3) { + const v1 = triangles[i2] * 2; + const v2 = triangles[i2 + 1] * 2; + const v3 = triangles[i2 + 2] * 2; + debugDisplayObjects.meshTrianglesLine.context.moveTo(vertices[v1], vertices[v1 + 1]).lineTo(vertices[v2], vertices[v2 + 1]).lineTo(vertices[v3], vertices[v3 + 1]); + } + } + if (this.drawMeshHull && hullLength > 0) { + hullLength = (hullLength >> 1) * 2; + let lastX = vertices[hullLength - 2]; + let lastY = vertices[hullLength - 1]; + for (let i2 = 0, len2 = hullLength; i2 < len2; i2 += 2) { + const x = vertices[i2]; + const y = vertices[i2 + 1]; + debugDisplayObjects.meshHullLine.context.moveTo(x, y).lineTo(lastX, lastY); + lastX = x; + lastY = y; + } + } + } + debugDisplayObjects.meshHullLine.stroke({ width: lineWidth, color: this.meshHullColor }); + debugDisplayObjects.meshTrianglesLine.stroke({ width: lineWidth, color: this.meshTrianglesColor }); + } + drawClippingFunc(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + if (!slot.bone.active) { + continue; + } + const attachment = slot.getAttachment(); + if (attachment === null || !(attachment instanceof ClippingAttachment)) { + continue; + } + const clippingAttachment = attachment; + const nn = clippingAttachment.worldVerticesLength; + const world = new Float32Array(nn); + clippingAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2); + debugDisplayObjects.clippingPolygon.poly(Array.from(world)); + } + debugDisplayObjects.clippingPolygon.stroke({ + width: lineWidth, + color: this.clippingPolygonColor, + alpha: 1 + }); + } + drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth) { + debugDisplayObjects.boundingBoxesRect.lineStyle(lineWidth, this.boundingBoxesRectColor, 5); + const bounds = new SkeletonBounds(); + bounds.update(spine.skeleton, true); + debugDisplayObjects.boundingBoxesRect.rect(bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight()).stroke({ width: lineWidth, color: this.boundingBoxesRectColor }); + const polygons = bounds.polygons; + const drawPolygon = (polygonVertices, _offset, count) => { + if (count < 3) { + throw new Error("Polygon must contain at least 3 vertices"); + } + const paths = []; + const dotSize = lineWidth * 2; + for (let i = 0, len = polygonVertices.length; i < len; i += 2) { + const x1 = polygonVertices[i]; + const y1 = polygonVertices[i + 1]; + debugDisplayObjects.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor); + debugDisplayObjects.boundingBoxesCircle.drawCircle(x1, y1, dotSize); + debugDisplayObjects.boundingBoxesCircle.fill(0); + paths.push(x1, y1); + } + debugDisplayObjects.boundingBoxesPolygon.poly(paths).fill({ + color: this.boundingBoxesPolygonColor, + alpha: 0.1 + }).stroke({ + width: lineWidth, + color: this.boundingBoxesPolygonColor + }); + }; + for (let i = 0, len = polygons.length; i < len; i++) { + const polygon = polygons[i]; + drawPolygon(polygon, 0, polygon.length); + } + } + drawPathsFunc(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + if (!slot.bone.active) { + continue; + } + const attachment = slot.getAttachment(); + if (attachment === null || !(attachment instanceof PathAttachment)) { + continue; + } + const pathAttachment = attachment; + let nn = pathAttachment.worldVerticesLength; + const world = new Float32Array(nn); + pathAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2); + let x1 = world[2]; + let y1 = world[3]; + let x2 = 0; + let y2 = 0; + if (pathAttachment.closed) { + const cx1 = world[0]; + const cy1 = world[1]; + const cx2 = world[nn - 2]; + const cy2 = world[nn - 1]; + x2 = world[nn - 4]; + y2 = world[nn - 3]; + debugDisplayObjects.pathsCurve.moveTo(x1, y1); + debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2); + debugDisplayObjects.pathsLine.moveTo(x1, y1); + debugDisplayObjects.pathsLine.lineTo(cx1, cy1); + debugDisplayObjects.pathsLine.moveTo(x2, y2); + debugDisplayObjects.pathsLine.lineTo(cx2, cy2); + } + nn -= 4; + for (let ii = 4; ii < nn; ii += 6) { + const cx1 = world[ii]; + const cy1 = world[ii + 1]; + const cx2 = world[ii + 2]; + const cy2 = world[ii + 3]; + x2 = world[ii + 4]; + y2 = world[ii + 5]; + debugDisplayObjects.pathsCurve.moveTo(x1, y1); + debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2); + debugDisplayObjects.pathsLine.moveTo(x1, y1); + debugDisplayObjects.pathsLine.lineTo(cx1, cy1); + debugDisplayObjects.pathsLine.moveTo(x2, y2); + debugDisplayObjects.pathsLine.lineTo(cx2, cy2); + x1 = x2; + y1 = y2; + } + } + debugDisplayObjects.pathsCurve.stroke({ width: lineWidth, color: this.pathsCurveColor }); + debugDisplayObjects.pathsLine.stroke({ width: lineWidth, color: this.pathsLineColor }); + } + unregisterSpine(spine) { + if (!this.registeredSpines.has(spine)) { + console.warn("SpineDebugRenderer.unregisterSpine() - spine is not registered, can't unregister!", spine); + } + const debugDisplayObjects = this.registeredSpines.get(spine); + if (!debugDisplayObjects) { + return; + } + spine.state.removeListener(debugDisplayObjects.eventCallback); + debugDisplayObjects.parentDebugContainer.destroy({ textureSource: true, children: true, texture: true }); + this.registeredSpines.delete(spine); + } + }; + return __toCommonJS(src_exports); +})(); +//# sourceMappingURL=spine-pixi.js.map diff --git a/dist/spine-pixi.js.map b/dist/spine-pixi.js.map new file mode 100644 index 0000000..4247d86 --- /dev/null +++ b/dist/spine-pixi.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/index.ts", "../src/require-shim.ts", "../src/assets/atlasLoader.ts", "../src/SpineTexture.ts", "../node_modules/@esotericsoftware/spine-core/src/Utils.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/Attachment.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/Sequence.ts", "../node_modules/@esotericsoftware/spine-core/src/Animation.ts", "../node_modules/@esotericsoftware/spine-core/src/AnimationState.ts", "../node_modules/@esotericsoftware/spine-core/src/AnimationStateData.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/BoundingBoxAttachment.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/ClippingAttachment.ts", "../node_modules/@esotericsoftware/spine-core/src/Texture.ts", "../node_modules/@esotericsoftware/spine-core/src/TextureAtlas.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/MeshAttachment.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/PathAttachment.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/PointAttachment.ts", "../node_modules/@esotericsoftware/spine-core/src/attachments/RegionAttachment.ts", "../node_modules/@esotericsoftware/spine-core/src/AtlasAttachmentLoader.ts", "../node_modules/@esotericsoftware/spine-core/src/BoneData.ts", "../node_modules/@esotericsoftware/spine-core/src/Bone.ts", "../node_modules/@esotericsoftware/spine-core/src/ConstraintData.ts", "../node_modules/@esotericsoftware/spine-core/src/AssetManagerBase.ts", "../node_modules/@esotericsoftware/spine-core/src/Event.ts", "../node_modules/@esotericsoftware/spine-core/src/EventData.ts", "../node_modules/@esotericsoftware/spine-core/src/IkConstraint.ts", "../node_modules/@esotericsoftware/spine-core/src/IkConstraintData.ts", "../node_modules/@esotericsoftware/spine-core/src/PathConstraintData.ts", "../node_modules/@esotericsoftware/spine-core/src/PathConstraint.ts", "../node_modules/@esotericsoftware/spine-core/src/PhysicsConstraint.ts", "../node_modules/@esotericsoftware/spine-core/src/Slot.ts", "../node_modules/@esotericsoftware/spine-core/src/TransformConstraint.ts", "../node_modules/@esotericsoftware/spine-core/src/Skeleton.ts", "../node_modules/@esotericsoftware/spine-core/src/PhysicsConstraintData.ts", "../node_modules/@esotericsoftware/spine-core/src/SkeletonData.ts", "../node_modules/@esotericsoftware/spine-core/src/Skin.ts", "../node_modules/@esotericsoftware/spine-core/src/SlotData.ts", "../node_modules/@esotericsoftware/spine-core/src/TransformConstraintData.ts", "../node_modules/@esotericsoftware/spine-core/src/SkeletonBinary.ts", "../node_modules/@esotericsoftware/spine-core/src/SkeletonBounds.ts", "../node_modules/@esotericsoftware/spine-core/src/Triangulator.ts", "../node_modules/@esotericsoftware/spine-core/src/SkeletonClipping.ts", "../node_modules/@esotericsoftware/spine-core/src/SkeletonJson.ts", "../node_modules/@esotericsoftware/spine-core/src/polyfills.ts", "../src/assets/skeletonLoader.ts", "../src/darktint/DarkTintBatcher.ts", "../src/darktint/DarkTintBatchGeometry.ts", "../src/darktint/DarkTintShader.ts", "../src/darktint/darkTintBit.ts", "../src/SpinePipe.ts", "../src/BatchableSpineSlot.ts", "../src/Spine.ts", "../src/SpineDebugRenderer.ts"], + "sourcesContent": ["/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport './require-shim.js'; // Side effects add require pixi.js to global scope\nimport './assets/atlasLoader.js'; // Side effects install the loaders into pixi\nimport './assets/skeletonLoader.js'; // Side effects install the loaders into pixi\nimport './darktint/DarkTintBatcher.js'; // Side effects install the batcher into pixi\nimport './SpinePipe.js';\n\nexport * from './assets/atlasLoader.js';\nexport * from './assets/skeletonLoader.js';\nexport * from './require-shim.js';\nexport * from './Spine.js';\nexport * from './SpineDebugRenderer.js';\nexport * from './SpinePipe.js';\nexport * from './SpineTexture.js';\nexport * from '@esotericsoftware/spine-core';\n", "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\ndeclare global\n{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line no-var\n var require: any;\n // eslint-disable-next-line no-var\n var PIXI: any;\n}\n\nif (typeof window !== 'undefined' && window.PIXI)\n{\n const prevRequire = window.require;\n\n // eslint-disable-next-line consistent-return\n (window as any).require = (x: string) =>\n {\n if (prevRequire) return prevRequire(x);\n else if (x.startsWith('@pixi/') || x.startsWith('pixi.js')) return window.PIXI;\n };\n}\n\nexport { };\n", "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n checkExtension,\n DOMAdapter,\n extensions,\n ExtensionType,\n LoaderParserPriority,\n path,\n TextureSource\n} from 'pixi.js';\nimport { SpineTexture } from '../SpineTexture';\nimport { TextureAtlas } from '@esotericsoftware/spine-core';\n\nimport type { AssetExtension, Loader, ResolvedAsset, Texture } from 'pixi.js';\n\ntype RawAtlas = string;\n\nconst spineTextureAtlasLoader: AssetExtension = {\n extension: ExtensionType.Asset,\n\n loader: {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n name: 'spineTextureAtlasLoader',\n },\n\n test(url: string): boolean\n {\n return checkExtension(url, '.atlas');\n },\n\n async load(url: string): Promise\n {\n const response = await DOMAdapter.get().fetch(url);\n\n const txt = await response.text();\n\n return txt;\n },\n\n testParse(asset: unknown, options: ResolvedAsset): Promise\n {\n const isExtensionRight = checkExtension(options.src as string, '.atlas');\n const isString = typeof asset === 'string';\n\n return Promise.resolve(isExtensionRight && isString);\n },\n\n unload(atlas: TextureAtlas)\n {\n atlas.dispose();\n },\n\n async parse(asset: RawAtlas, options: ResolvedAsset, loader: Loader): Promise\n {\n const metadata: ISpineAtlasMetadata = options.data || {};\n let basePath = path.dirname(options.src as string);\n\n if (basePath && basePath.lastIndexOf('/') !== basePath.length - 1)\n {\n basePath += '/';\n }\n\n // Retval is going to be a texture atlas. However we need to wait for it's callback to resolve this promise.\n const retval = new TextureAtlas(asset);\n\n // If the user gave me only one texture, that one is assumed to be the \"first\" texture in the atlas\n if (metadata.images instanceof TextureSource || typeof metadata.images === 'string')\n {\n const pixiTexture = metadata.images;\n\n metadata.images = {} as Record;\n metadata.images[retval.pages[0].name] = pixiTexture;\n }\n\n // we will wait for all promises for the textures at the same time at the end.\n const textureLoadingPromises:Promise[] = [];\n\n // fill the pages\n for (const page of retval.pages)\n {\n const pageName = page.name;\n const providedPage = metadata?.images ? metadata.images[pageName] : undefined;\n\n if (providedPage instanceof TextureSource)\n {\n page.setTexture(SpineTexture.from(providedPage));\n }\n else\n {\n // eslint-disable-next-line max-len\n const url: string = providedPage ?? path.normalize([...basePath.split(path.sep), pageName].join(path.sep));\n\n const assetsToLoadIn = {\n src: url,\n data: {\n ...metadata.imageMetadata,\n alphaMode: page.pma ? 'premultiplied-alpha' : 'premultiply-alpha-on-upload'\n }\n };\n\n const pixiPromise = loader.load(assetsToLoadIn).then((texture) =>\n {\n page.setTexture(SpineTexture.from(texture.source));\n });\n\n textureLoadingPromises.push(pixiPromise);\n }\n }\n\n await Promise.all(textureLoadingPromises);\n\n return retval;\n },\n },\n} as AssetExtension;\n\nextensions.add(spineTextureAtlasLoader);\n\nexport interface ISpineAtlasMetadata\n{\n // If you are downloading an .atlas file, this metadata will go to the Texture loader\n imageMetadata?: any;\n // If you already have atlas pages loaded as pixi textures\n // and want to use that to create the atlas, you can pass them here\n images?: TextureSource | string | Record;\n}\n", "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { Texture as PixiTexture } from 'pixi.js';\nimport { BlendMode, Texture, TextureFilter, TextureWrap } from '@esotericsoftware/spine-core';\n\nimport type { BLEND_MODES, SCALE_MODE, TextureSource, WRAP_MODE } from 'pixi.js';\n\nexport class SpineTexture extends Texture\n{\n private static readonly textureMap: Map = new Map();\n\n public static from(texture: TextureSource): SpineTexture\n {\n if (SpineTexture.textureMap.has(texture))\n {\n return SpineTexture.textureMap.get(texture) as SpineTexture;\n }\n\n return new SpineTexture(texture);\n }\n\n public readonly texture: PixiTexture;\n\n private constructor(image: TextureSource)\n {\n // Todo: maybe add error handling if you feed a video texture to spine?\n super(image.resource);\n this.texture = PixiTexture.from(image);\n }\n\n public setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void\n {\n const style = this.texture.source.style;\n\n style.minFilter = SpineTexture.toPixiTextureFilter(minFilter);\n style.magFilter = SpineTexture.toPixiTextureFilter(magFilter);\n this.texture.source.autoGenerateMipmaps = SpineTexture.toPixiMipMap(minFilter);\n this.texture.source.updateMipmaps();\n }\n\n public setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void\n {\n const style = this.texture.source.style;\n\n style.addressModeU = SpineTexture.toPixiTextureWrap(uWrap);\n style.addressModeV = SpineTexture.toPixiTextureWrap(vWrap);\n }\n\n public dispose(): void\n {\n // I am not entirely sure about this...\n this.texture.destroy();\n }\n\n private static toPixiMipMap(filter: TextureFilter): boolean\n {\n switch (filter)\n {\n case TextureFilter.Nearest:\n case TextureFilter.Linear:\n return false;\n\n case TextureFilter.MipMapNearestLinear:\n case TextureFilter.MipMapNearestNearest:\n case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap\n case TextureFilter.MipMapLinearNearest:\n return true;\n\n default:\n throw new Error(`Unknown texture filter: ${String(filter)}`);\n }\n }\n\n private static toPixiTextureFilter(filter: TextureFilter): SCALE_MODE\n {\n switch (filter)\n {\n case TextureFilter.Nearest:\n case TextureFilter.MipMapNearestLinear:\n case TextureFilter.MipMapNearestNearest:\n return 'nearest';\n\n case TextureFilter.Linear:\n case TextureFilter.MipMapLinearLinear: // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap\n case TextureFilter.MipMapLinearNearest:\n return 'linear';\n\n default:\n throw new Error(`Unknown texture filter: ${String(filter)}`);\n }\n }\n\n private static toPixiTextureWrap(wrap: TextureWrap): WRAP_MODE\n {\n switch (wrap)\n {\n case TextureWrap.ClampToEdge:\n return 'clamp-to-edge';\n\n case TextureWrap.MirroredRepeat:\n return 'mirror-repeat';\n\n case TextureWrap.Repeat:\n return 'repeat';\n\n default:\n throw new Error(`Unknown texture wrap: ${String(wrap)}`);\n }\n }\n\n public static toPixiBlending(blend: BlendMode): BLEND_MODES\n {\n switch (blend)\n {\n case BlendMode.Normal:\n return 'normal';\n\n case BlendMode.Additive:\n return 'add';\n\n case BlendMode.Multiply:\n return 'multiply';\n\n case BlendMode.Screen:\n return 'screen';\n\n default:\n throw new Error(`Unknown blendMode: ${String(blend)}`);\n }\n }\n}\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n type AssetExtension,\n checkExtension,\n DOMAdapter,\n extensions,\n ExtensionType,\n LoaderParserPriority,\n ResolvedAsset\n} from 'pixi.js';\n\ntype SkeletonJsonAsset = any;\ntype SkeletonBinaryAsset = Uint8Array;\n\nfunction isJson(resource: any): resource is SkeletonJsonAsset\n{\n return Object.prototype.hasOwnProperty.call(resource, 'bones');\n}\n\nfunction isBuffer(resource: any): resource is SkeletonBinaryAsset\n{\n return resource instanceof Uint8Array;\n}\n\nconst spineLoaderExtension: AssetExtension = {\n extension: ExtensionType.Asset,\n\n loader: {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n name: 'spineSkeletonLoader',\n },\n\n test(url)\n {\n return checkExtension(url, '.skel');\n },\n\n async load(url: string): Promise\n {\n const response = await DOMAdapter.get().fetch(url);\n\n const buffer = new Uint8Array(await response.arrayBuffer());\n\n return buffer;\n },\n testParse(asset: unknown, options: ResolvedAsset): Promise\n {\n const isJsonSpineModel = checkExtension(options.src, '.json') && isJson(asset);\n const isBinarySpineModel = checkExtension(options.src, '.skel') && isBuffer(asset);\n\n return Promise.resolve(isJsonSpineModel || isBinarySpineModel);\n },\n },\n} as AssetExtension;\n\nextensions.add(spineLoaderExtension);\n", "import {\n Batcher,\n DefaultBatchableMeshElement,\n DefaultBatchableQuadElement,\n extensions,\n ExtensionType,\n Shader\n} from 'pixi.js';\nimport { DarkTintBatchGeometry } from './DarkTintBatchGeometry';\nimport { DarkTintShader } from './DarkTintShader';\n\nlet defaultShader: Shader = null;\n\n/** The default batcher is used to batch quads and meshes. */\nexport class DarkTintBatcher extends Batcher\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.Batcher,\n ],\n name: 'darkTint',\n } as const;\n\n public geometry = new DarkTintBatchGeometry();\n public shader = defaultShader || (defaultShader = new DarkTintShader(this.maxTextures));\n public name = DarkTintBatcher.extension.name;\n\n /** The size of one attribute. 1 = 32 bit. x, y, u, v, color, darkColor, textureIdAndRound -> total = 7 */\n public vertexSize = 7;\n\n public packAttributes(\n element: DefaultBatchableMeshElement & { darkColor: number },\n float32View: Float32Array,\n uint32View: Uint32Array,\n index: number,\n textureId: number\n )\n {\n const textureIdAndRound = (textureId << 16) | (element.roundPixels & 0xFFFF);\n\n const wt = element.transform;\n\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const { positions, uvs } = element;\n\n const argb = element.color;\n const darkColor = element.darkColor;\n\n const offset = element.attributeOffset;\n const end = offset + element.attributeSize;\n\n for (let i = offset; i < end; i++)\n {\n const i2 = i * 2;\n\n const x = positions[i2];\n const y = positions[(i2) + 1];\n\n float32View[index++] = (a * x) + (c * y) + tx;\n float32View[index++] = (d * y) + (b * x) + ty;\n\n float32View[index++] = uvs[i2];\n float32View[index++] = uvs[(i2) + 1];\n\n uint32View[index++] = argb;\n uint32View[index++] = darkColor;\n\n uint32View[index++] = textureIdAndRound;\n }\n }\n\n public packQuadAttributes(\n element: DefaultBatchableQuadElement & { darkColor: number },\n float32View: Float32Array,\n uint32View: Uint32Array,\n index: number,\n textureId: number\n )\n {\n const texture = element.texture;\n\n const wt = element.transform;\n\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const bounds = element.bounds;\n\n const w0 = bounds.maxX;\n const w1 = bounds.minX;\n const h0 = bounds.maxY;\n const h1 = bounds.minY;\n\n const uvs = texture.uvs;\n\n // _ _ _ _\n // a b g r\n const argb = element.color;\n const darkColor = element.darkColor;\n\n const textureIdAndRound = (textureId << 16) | (element.roundPixels & 0xFFFF);\n\n float32View[index + 0] = (a * w1) + (c * h1) + tx;\n float32View[index + 1] = (d * h1) + (b * w1) + ty;\n\n float32View[index + 2] = uvs.x0;\n float32View[index + 3] = uvs.y0;\n\n uint32View[index + 4] = argb;\n uint32View[index + 5] = darkColor;\n uint32View[index + 6] = textureIdAndRound;\n\n // xy\n float32View[index + 7] = (a * w0) + (c * h1) + tx;\n float32View[index + 8] = (d * h1) + (b * w0) + ty;\n\n float32View[index + 9] = uvs.x1;\n float32View[index + 10] = uvs.y1;\n\n uint32View[index + 11] = argb;\n uint32View[index + 12] = darkColor;\n uint32View[index + 13] = textureIdAndRound;\n\n // xy\n float32View[index + 14] = (a * w0) + (c * h0) + tx;\n float32View[index + 15] = (d * h0) + (b * w0) + ty;\n\n float32View[index + 16] = uvs.x2;\n float32View[index + 17] = uvs.y2;\n\n uint32View[index + 18] = argb;\n uint32View[index + 19] = darkColor;\n uint32View[index + 20] = textureIdAndRound;\n\n // xy\n float32View[index + 21] = (a * w1) + (c * h0) + tx;\n float32View[index + 22] = (d * h0) + (b * w1) + ty;\n\n float32View[index + 23] = uvs.x3;\n float32View[index + 24] = uvs.y3;\n\n uint32View[index + 25] = argb;\n uint32View[index + 26] = darkColor;\n uint32View[index + 27] = textureIdAndRound;\n }\n}\n\nextensions.add(DarkTintBatcher);\n", "import { Buffer, BufferUsage, Geometry } from 'pixi.js';\n\nconst placeHolderBufferData = new Float32Array(1);\nconst placeHolderIndexData = new Uint32Array(1);\n\nexport class DarkTintBatchGeometry extends Geometry\n{\n constructor()\n {\n const vertexSize = 7;\n\n const attributeBuffer = new Buffer({\n data: placeHolderBufferData,\n label: 'attribute-batch-buffer',\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST,\n shrinkToFit: false,\n });\n\n const indexBuffer = new Buffer({\n data: placeHolderIndexData,\n label: 'index-batch-buffer',\n usage: BufferUsage.INDEX | BufferUsage.COPY_DST, // | BufferUsage.STATIC,\n shrinkToFit: false,\n });\n\n const stride = vertexSize * 4;\n\n super({\n attributes: {\n aPosition: {\n buffer: attributeBuffer,\n format: 'float32x2',\n stride,\n offset: 0,\n },\n aUV: {\n buffer: attributeBuffer,\n format: 'float32x2',\n stride,\n offset: 2 * 4,\n },\n aColor: {\n buffer: attributeBuffer,\n format: 'unorm8x4',\n stride,\n offset: 4 * 4,\n },\n aDarkColor: {\n buffer: attributeBuffer,\n format: 'unorm8x4',\n stride,\n offset: 5 * 4,\n },\n aTextureIdAndRound: {\n buffer: attributeBuffer,\n format: 'uint16x2',\n stride,\n offset: 6 * 4,\n },\n },\n indexBuffer\n });\n }\n}\n\n", "import {\n colorBit,\n colorBitGl,\n compileHighShaderGlProgram,\n compileHighShaderGpuProgram,\n generateTextureBatchBit,\n generateTextureBatchBitGl,\n getBatchSamplersUniformGroup,\n roundPixelsBit,\n roundPixelsBitGl,\n Shader\n} from 'pixi.js';\nimport { darkTintBit, darkTintBitGl } from './darkTintBit';\n\nexport class DarkTintShader extends Shader\n{\n constructor(maxTextures: number)\n {\n const glProgram = compileHighShaderGlProgram({\n name: 'dark-tint-batch',\n bits: [\n colorBitGl,\n darkTintBitGl,\n generateTextureBatchBitGl(maxTextures),\n roundPixelsBitGl,\n ]\n });\n\n const gpuProgram = compileHighShaderGpuProgram({\n name: 'dark-tint-batch',\n bits: [\n colorBit,\n darkTintBit,\n generateTextureBatchBit(maxTextures),\n roundPixelsBit,\n ]\n });\n\n super({\n glProgram,\n gpuProgram,\n resources: {\n batchSamplers: getBatchSamplersUniformGroup(maxTextures),\n }\n });\n }\n}\n", "/* eslint-disable max-len */\nexport const darkTintBit = {\n name: 'color-bit',\n vertex: {\n header: /* wgsl */`\n @in aDarkColor: vec4;\n @out vDarkColor: vec4;\n `,\n main: /* wgsl */`\n vDarkColor = aDarkColor;\n `\n },\n fragment: {\n header: /* wgsl */`\n @in vDarkColor: vec4;\n `,\n end: /* wgsl */`\n \n let alpha = outColor.a * vColor.a;\n let rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb;\n\n finalColor = vec4(rgb, alpha);\n\n `\n }\n};\n\nexport const darkTintBitGl = {\n name: 'color-bit',\n vertex: {\n header: /* glsl */`\n in vec4 aDarkColor;\n out vec4 vDarkColor;\n `,\n main: /* glsl */`\n vDarkColor = aDarkColor;\n `\n },\n fragment: {\n header: /* glsl */`\n in vec4 vDarkColor;\n `,\n end: /* glsl */`\n \n finalColor.a = outColor.a * vColor.a;\n finalColor.rgb = ((outColor.a - 1.0) * vDarkColor.a + 1.0 - outColor.rgb) * vDarkColor.rgb + outColor.rgb * vColor.rgb;\n `\n }\n};\n", "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n collectAllRenderables,\n extensions, ExtensionType,\n InstructionSet,\n type Renderer,\n type RenderPipe,\n Texture\n} from 'pixi.js';\nimport { BatchableSpineSlot } from './BatchableSpineSlot';\nimport { Spine } from './Spine';\nimport { MeshAttachment, RegionAttachment, SkeletonClipping } from '@esotericsoftware/spine-core';\n\nconst clipper = new SkeletonClipping();\n\nconst spineBlendModeMap = {\n 0: 'normal',\n 1: 'add',\n 2: 'multiply',\n 3: 'screen'\n};\n\n// eslint-disable-next-line max-len\nexport class SpinePipe implements RenderPipe\n{\n /** @ignore */\n static extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes,\n ],\n name: 'spine',\n } as const;\n\n renderer: Renderer;\n\n private gpuSpineData:Record = {};\n\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n }\n\n validateRenderable(spine: Spine): boolean\n {\n spine._applyState();\n // loop through and see if the mesh lengths have changed..\n\n return spine.spineAttachmentsDirty;\n }\n\n addRenderable(spine: Spine, instructionSet:InstructionSet)\n {\n const gpuSpine = this.gpuSpineData[spine.uid] ||= { slotBatches: {} };\n\n const batcher = this.renderer.renderPipes.batch;\n\n const drawOrder = spine.skeleton.drawOrder;\n\n const roundPixels = (this.renderer._roundPixels | spine._roundPixels) as 0 | 1;\n\n spine._applyState();\n\n for (let i = 0, n = drawOrder.length; i < n; i++)\n {\n const slot = drawOrder[i];\n const attachment = slot.getAttachment();\n const blendMode = spineBlendModeMap[slot.data.blendMode];\n\n if (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment)\n {\n const cacheData = spine._getCachedData(slot, attachment);\n const batchableSpineSlot = gpuSpine.slotBatches[cacheData.id] ||= new BatchableSpineSlot();\n\n batchableSpineSlot.setData(\n spine,\n cacheData,\n (attachment.region?.texture.texture) || Texture.EMPTY,\n blendMode,\n roundPixels\n );\n\n if (!cacheData.skipRender)\n {\n batcher.addToBatch(batchableSpineSlot, instructionSet);\n }\n }\n\n const containerAttachment = spine._slotsObject[slot.data.name];\n\n if (containerAttachment)\n {\n const container = containerAttachment.container;\n\n container.includeInBuild = true;\n collectAllRenderables(container, instructionSet, this.renderer);\n container.includeInBuild = false;\n }\n }\n\n clipper.clipEnd();\n }\n\n updateRenderable(spine: Spine)\n {\n // we assume that spine will always change its verts size..\n const gpuSpine = this.gpuSpineData[spine.uid];\n\n spine._applyState();\n\n const drawOrder = spine.skeleton.drawOrder;\n\n for (let i = 0, n = drawOrder.length; i < n; i++)\n {\n const slot = drawOrder[i];\n const attachment = slot.getAttachment();\n\n if (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment)\n {\n const cacheData = spine._getCachedData(slot, attachment);\n\n if (!cacheData.skipRender)\n {\n const batchableSpineSlot = gpuSpine.slotBatches[spine._getCachedData(slot, attachment).id];\n\n batchableSpineSlot._batcher?.updateElement(batchableSpineSlot);\n }\n }\n }\n }\n\n destroyRenderable(spine: Spine)\n {\n // TODO remove the renderable from the batcher\n this.gpuSpineData[spine.uid] = null as any;\n }\n\n destroy()\n {\n this.gpuSpineData = null as any;\n this.renderer = null as any;\n }\n}\n\nextensions.add(SpinePipe);\n", "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { AttachmentCacheData, Spine } from './Spine';\n\nimport type { Batch, Batcher, BLEND_MODES, DefaultBatchableMeshElement, Matrix, Texture } from 'pixi.js';\n\nexport class BatchableSpineSlot implements DefaultBatchableMeshElement\n{\n indexOffset = 0;\n attributeOffset = 0;\n\n indexSize: number;\n attributeSize: number;\n\n batcherName = 'darkTint';\n\n readonly packAsQuad = false;\n\n renderable: Spine;\n\n positions: Float32Array;\n indices: number[] | Uint16Array;\n uvs: Float32Array;\n\n roundPixels: 0 | 1;\n data: AttachmentCacheData;\n blendMode: BLEND_MODES;\n\n darkTint: number;\n\n texture: Texture;\n\n transform: Matrix;\n\n // used internally by batcher specific..\n // stored for efficient updating..\n _textureId: number;\n _attributeStart: number;\n _indexStart: number;\n _batcher: Batcher;\n _batch: Batch;\n\n get color()\n {\n const slotColor = this.data.color;\n\n const parentColor:number = this.renderable.groupColor;\n const parentAlpha:number = this.renderable.groupAlpha;\n let abgr:number;\n\n const mixedA = (slotColor.a * parentAlpha) * 255;\n\n if (parentColor !== 0xFFFFFF)\n {\n const parentB = (parentColor >> 16) & 0xFF;\n const parentG = (parentColor >> 8) & 0xFF;\n const parentR = parentColor & 0xFF;\n\n const mixedR = (slotColor.r * parentR);\n const mixedG = (slotColor.g * parentG);\n const mixedB = (slotColor.b * parentB);\n\n abgr = ((mixedA) << 24) | (mixedB << 16) | (mixedG << 8) | mixedR;\n }\n else\n {\n abgr = ((mixedA) << 24) | ((slotColor.b * 255) << 16) | ((slotColor.g * 255) << 8) | (slotColor.r * 255);\n }\n\n return abgr;\n }\n\n get darkColor()\n {\n const darkColor = this.data.darkColor;\n\n return ((darkColor.a) << 24) | ((darkColor.b * 255) << 16) | ((darkColor.g * 255) << 8) | (darkColor.r * 255);\n }\n\n get groupTransform() { return this.renderable.groupTransform; }\n\n setData(\n renderable:Spine,\n data:AttachmentCacheData,\n texture:Texture,\n blendMode:BLEND_MODES,\n roundPixels: 0 | 1)\n {\n this.renderable = renderable;\n this.transform = renderable.groupTransform;\n this.data = data;\n\n if (data.clipped)\n {\n const clippedData = data.clippedData;\n\n this.indexSize = clippedData.indicesCount;\n this.attributeSize = clippedData.vertexCount;\n this.positions = clippedData.vertices;\n this.indices = clippedData.indices;\n this.uvs = clippedData.uvs;\n }\n else\n {\n this.indexSize = data.indices.length;\n this.attributeSize = data.vertices.length / 2;\n this.positions = data.vertices;\n this.indices = data.indices;\n this.uvs = data.uvs;\n }\n\n this.texture = texture;\n this.roundPixels = roundPixels;\n\n this.blendMode = blendMode;\n\n this.batcherName = data.darkTint ? 'darkTint' : 'default';\n }\n}\n", "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport {\n Assets,\n Bounds,\n Cache,\n Container,\n ContainerOptions,\n DEG_TO_RAD,\n DestroyOptions,\n PointData,\n Ticker,\n ViewContainer,\n} from 'pixi.js';\nimport { ISpineDebugRenderer } from './SpineDebugRenderer';\nimport {\n AnimationState,\n AnimationStateData,\n AtlasAttachmentLoader,\n Attachment,\n Bone,\n ClippingAttachment,\n Color,\n MeshAttachment,\n Physics,\n RegionAttachment,\n Skeleton,\n SkeletonBinary,\n SkeletonBounds,\n SkeletonClipping,\n SkeletonData,\n SkeletonJson,\n Slot,\n type TextureAtlas,\n TrackEntry,\n Vector2,\n} from '@esotericsoftware/spine-core';\n\nexport type SpineFromOptions = {\n skeleton: string;\n atlas: string;\n scale?: number;\n};\n\nconst vectorAux = new Vector2();\nconst lightColor = new Color();\nconst darkColor = new Color();\n\nSkeleton.yDown = true;\n\nconst clipper = new SkeletonClipping();\n\nexport interface SpineOptions extends ContainerOptions\n{\n skeletonData: SkeletonData;\n autoUpdate?: boolean;\n}\n\nexport interface SpineEvents\n{\n complete: [trackEntry: TrackEntry];\n dispose: [trackEntry: TrackEntry];\n end: [trackEntry: TrackEntry];\n event: [trackEntry: TrackEntry, event: Event];\n interrupt: [trackEntry: TrackEntry];\n start: [trackEntry: TrackEntry];\n}\n\nexport interface AttachmentCacheData\n{\n id: string;\n clipped: boolean;\n vertices: Float32Array;\n uvs: Float32Array;\n indices: number[];\n color: Color;\n darkColor: Color | null;\n darkTint: boolean;\n skipRender: boolean;\n clippedData?: {\n vertices: Float32Array;\n uvs: Float32Array;\n indices: Uint16Array;\n vertexCount: number;\n indicesCount: number;\n };\n}\n\nexport class Spine extends ViewContainer\n{\n // Pixi properties\n public batched = true;\n public buildId = 0;\n public override readonly renderPipeId = 'spine';\n public _didSpineUpdate = false;\n\n public beforeUpdateWorldTransforms: (object: Spine) => void = () => { /** */ };\n public afterUpdateWorldTransforms: (object: Spine) => void = () => { /** */ };\n\n // Spine properties\n public skeleton: Skeleton;\n public state: AnimationState;\n public skeletonBounds: SkeletonBounds;\n private _debug?: ISpineDebugRenderer | undefined = undefined;\n\n readonly _slotsObject: Record = Object.create(null);\n\n private getSlotFromRef(slotRef: number | string | Slot): Slot\n {\n let slot: Slot | null;\n\n if (typeof slotRef === 'number') slot = this.skeleton.slots[slotRef];\n else if (typeof slotRef === 'string') slot = this.skeleton.findSlot(slotRef);\n else slot = slotRef;\n\n if (!slot) throw new Error(`No slot found with the given slot reference: ${slotRef}`);\n\n return slot;\n }\n\n public spineAttachmentsDirty: boolean;\n private _lastAttachments: Attachment[];\n\n private _stateChanged: boolean;\n private attachmentCacheData: Record[] = [];\n\n public get debug(): ISpineDebugRenderer | undefined\n {\n return this._debug;\n }\n\n public set debug(value: ISpineDebugRenderer | undefined)\n {\n if (this._debug)\n {\n this._debug.unregisterSpine(this);\n }\n if (value)\n {\n value.registerSpine(this);\n }\n this._debug = value;\n }\n\n private autoUpdateWarned = false;\n private _autoUpdate = true;\n\n public get autoUpdate(): boolean\n {\n return this._autoUpdate;\n }\n\n public set autoUpdate(value: boolean)\n {\n if (value)\n {\n Ticker.shared.add(this.internalUpdate, this);\n this.autoUpdateWarned = false;\n }\n else\n {\n Ticker.shared.remove(this.internalUpdate, this);\n }\n\n this._autoUpdate = value;\n }\n\n constructor(options: SpineOptions | SkeletonData)\n {\n if (options instanceof SkeletonData)\n {\n options = {\n skeletonData: options,\n };\n }\n\n super();\n\n const skeletonData = options instanceof SkeletonData ? options : options.skeletonData;\n\n this.skeleton = new Skeleton(skeletonData);\n this.state = new AnimationState(new AnimationStateData(skeletonData));\n this.autoUpdate = options?.autoUpdate ?? true;\n\n const slots = this.skeleton.slots;\n\n for (let i = 0; i < slots.length; i++)\n {\n this.attachmentCacheData[i] = Object.create(null);\n }\n\n this._updateState(0);\n }\n\n public update(dt: number): void\n {\n if (this.autoUpdate && !this.autoUpdateWarned)\n {\n console.warn(\n // eslint-disable-next-line max-len\n 'You are calling update on a Spine instance that has autoUpdate set to true. This is probably not what you want.',\n );\n this.autoUpdateWarned = true;\n }\n\n this.internalUpdate(0, dt);\n }\n\n protected internalUpdate(_deltaFrame: any, deltaSeconds?: number): void\n {\n // Because reasons, pixi uses deltaFrames at 60fps.\n // We ignore the default deltaFrames and use the deltaSeconds from pixi ticker.\n this._updateState(deltaSeconds ?? Ticker.shared.deltaMS / 1000);\n }\n\n get bounds()\n {\n if (this._boundsDirty)\n {\n this.updateBounds();\n }\n\n return this._bounds;\n }\n\n public setBonePosition(bone: string | Bone, position: PointData): void\n {\n const boneAux = bone;\n\n if (typeof bone === 'string')\n {\n bone = this.skeleton.findBone(bone) as Bone;\n }\n\n if (!bone) throw Error(`Cant set bone position, bone ${String(boneAux)} not found`);\n vectorAux.set(position.x, position.y);\n\n if (bone.parent)\n {\n const aux = bone.parent.worldToLocal(vectorAux);\n\n bone.x = aux.x;\n bone.y = -aux.y;\n }\n else\n {\n bone.x = vectorAux.x;\n bone.y = vectorAux.y;\n }\n }\n\n public getBonePosition(bone: string | Bone, outPos?: PointData): PointData | undefined\n {\n const boneAux = bone;\n\n if (typeof bone === 'string')\n {\n bone = this.skeleton.findBone(bone) as Bone;\n }\n\n if (!bone)\n {\n console.error(`Cant set bone position! Bone ${String(boneAux)} not found`);\n\n return outPos;\n }\n\n if (!outPos)\n {\n outPos = { x: 0, y: 0 };\n }\n\n outPos.x = bone.worldX;\n outPos.y = bone.worldY;\n\n return outPos;\n }\n\n /**\n * Will update the state based on the specified time, this will not apply the state to the skeleton\n * as this is differed until the `applyState` method is called.\n *\n * @param time the time at which to set the state\n * @internal\n */\n _updateState(time: number)\n {\n this.state.update(time);\n this.skeleton.update(time);\n\n this._stateChanged = true;\n\n this._boundsDirty = true;\n\n this.onViewUpdate();\n }\n\n /**\n * Applies the state to this spine instance.\n * - updates the state to the skeleton\n * - updates its world transform (spine world transform)\n * - validates the attachments - to flag if the attachments have changed this state\n * - transforms the attachments - to update the vertices of the attachments based on the new positions\n * - update the slot attachments - to update the position, rotation, scale, and visibility of the attached containers\n * @internal\n */\n _applyState()\n {\n if (!this._stateChanged) return;\n this._stateChanged = false;\n\n const { skeleton } = this;\n\n this.state.apply(skeleton);\n\n this.beforeUpdateWorldTransforms(this);\n skeleton.updateWorldTransform(Physics.update);\n this.afterUpdateWorldTransforms(this);\n\n this.validateAttachments();\n\n this.transformAttachments();\n\n this.updateSlotObjects();\n }\n\n private validateAttachments()\n {\n const currentDrawOrder = this.skeleton.drawOrder;\n\n const lastAttachments = (this._lastAttachments ||= []);\n\n let index = 0;\n\n let spineAttachmentsDirty = false;\n\n for (let i = 0; i < currentDrawOrder.length; i++)\n {\n const slot = currentDrawOrder[i];\n const attachment = slot.getAttachment();\n\n if (attachment)\n {\n if (attachment !== lastAttachments[index])\n {\n spineAttachmentsDirty = true;\n lastAttachments[index] = attachment;\n }\n\n index++;\n }\n }\n\n if (index !== lastAttachments.length)\n {\n spineAttachmentsDirty = true;\n lastAttachments.length = index;\n }\n\n this.spineAttachmentsDirty = spineAttachmentsDirty;\n }\n\n private transformAttachments()\n {\n const currentDrawOrder = this.skeleton.drawOrder;\n\n for (let i = 0; i < currentDrawOrder.length; i++)\n {\n const slot = currentDrawOrder[i];\n\n const attachment = slot.getAttachment();\n\n if (attachment)\n {\n if (attachment instanceof MeshAttachment || attachment instanceof RegionAttachment)\n {\n const cacheData = this._getCachedData(slot, attachment);\n\n if (attachment instanceof RegionAttachment)\n {\n attachment.computeWorldVertices(slot, cacheData.vertices, 0, 2);\n }\n else\n {\n attachment.computeWorldVertices(\n slot,\n 0,\n attachment.worldVerticesLength,\n cacheData.vertices,\n 0,\n 2,\n );\n }\n\n cacheData.uvs = attachment.uvs as Float32Array;\n\n const skeleton = slot.bone.skeleton;\n const skeletonColor = skeleton.color;\n const slotColor = slot.color;\n\n const attachmentColor = attachment.color;\n\n cacheData.color.set(\n skeletonColor.r * slotColor.r * attachmentColor.r,\n skeletonColor.g * slotColor.g * attachmentColor.g,\n skeletonColor.b * slotColor.b * attachmentColor.b,\n skeletonColor.a * slotColor.a * attachmentColor.a,\n );\n\n cacheData.darkTint = !!slot.darkColor;\n\n if (slot.darkColor)\n {\n cacheData.darkColor.setFromColor(slot.darkColor);\n }\n\n cacheData.skipRender = cacheData.clipped = false;\n\n if (clipper.isClipping())\n {\n this.updateClippingData(cacheData);\n }\n }\n else if (attachment instanceof ClippingAttachment)\n {\n clipper.clipStart(slot, attachment);\n continue;\n }\n }\n clipper.clipEndWithSlot(slot);\n }\n clipper.clipEnd();\n }\n\n private updateClippingData(cacheData: AttachmentCacheData)\n {\n cacheData.clipped = true;\n\n clipper.clipTriangles(\n cacheData.vertices,\n cacheData.vertices.length,\n cacheData.indices,\n cacheData.indices.length,\n cacheData.uvs,\n lightColor,\n darkColor,\n false,\n );\n\n const { clippedVertices, clippedTriangles } = clipper;\n\n const verticesCount = clippedVertices.length / 8;\n const indicesCount = clippedTriangles.length;\n\n if (!cacheData.clippedData)\n {\n cacheData.clippedData = {\n vertices: new Float32Array(verticesCount * 2),\n uvs: new Float32Array(verticesCount * 2),\n vertexCount: verticesCount,\n indices: new Uint16Array(indicesCount),\n indicesCount,\n };\n\n this.spineAttachmentsDirty = true;\n }\n\n const clippedData = cacheData.clippedData;\n\n const sizeChange = clippedData.vertexCount !== verticesCount || indicesCount !== clippedData.indicesCount;\n\n cacheData.skipRender = verticesCount === 0;\n\n if (sizeChange)\n {\n this.spineAttachmentsDirty = true;\n\n if (clippedData.vertexCount < verticesCount)\n {\n // buffer reuse!\n clippedData.vertices = new Float32Array(verticesCount * 2);\n clippedData.uvs = new Float32Array(verticesCount * 2);\n }\n\n if (clippedData.indices.length < indicesCount)\n {\n clippedData.indices = new Uint16Array(indicesCount);\n }\n }\n\n const { vertices, uvs, indices } = clippedData;\n\n for (let i = 0; i < verticesCount; i++)\n {\n vertices[i * 2] = clippedVertices[i * 8];\n vertices[(i * 2) + 1] = clippedVertices[(i * 8) + 1];\n\n uvs[i * 2] = clippedVertices[(i * 8) + 6];\n uvs[(i * 2) + 1] = clippedVertices[(i * 8) + 7];\n }\n\n clippedData.vertexCount = verticesCount;\n\n for (let i = 0; i < indices.length; i++)\n {\n indices[i] = clippedTriangles[i];\n }\n\n clippedData.indicesCount = indicesCount;\n }\n\n /**\n * ensure that attached containers map correctly to their slots\n * along with their position, rotation, scale, and visibility.\n */\n private updateSlotObjects()\n {\n for (const i in this._slotsObject)\n {\n const slotAttachment = this._slotsObject[i];\n\n if (!slotAttachment) continue;\n\n this.updateSlotObject(slotAttachment);\n }\n }\n\n private updateSlotObject(slotAttachment: {slot:Slot, container:Container})\n {\n const { slot, container } = slotAttachment;\n\n container.visible = this.skeleton.drawOrder.includes(slot);\n\n if (container.visible)\n {\n const bone = slot.bone;\n\n container.position.set(bone.worldX, bone.worldY);\n\n container.scale.x = bone.getWorldScaleX();\n container.scale.y = bone.getWorldScaleY();\n\n container.rotation = bone.getWorldRotationX() * DEG_TO_RAD;\n }\n }\n\n /** @internal */\n _getCachedData(slot: Slot, attachment: RegionAttachment | MeshAttachment): AttachmentCacheData\n {\n return this.attachmentCacheData[slot.data.index][attachment.name] || this.initCachedData(slot, attachment);\n }\n\n private initCachedData(slot: Slot, attachment: RegionAttachment | MeshAttachment): AttachmentCacheData\n {\n let vertices: Float32Array;\n\n if (attachment instanceof RegionAttachment)\n {\n vertices = new Float32Array(8);\n\n this.attachmentCacheData[slot.data.index][attachment.name] = {\n id: `${slot.data.index}-${attachment.name}`,\n vertices,\n clipped: false,\n indices: [0, 1, 2, 0, 2, 3],\n uvs: attachment.uvs as Float32Array,\n color: new Color(1, 1, 1, 1),\n darkColor: new Color(0, 0, 0, 0),\n darkTint: false,\n skipRender: false,\n };\n }\n else\n {\n vertices = new Float32Array(attachment.worldVerticesLength);\n\n this.attachmentCacheData[slot.data.index][attachment.name] = {\n id: `${slot.data.index}-${attachment.name}`,\n vertices,\n clipped: false,\n indices: attachment.triangles,\n uvs: attachment.uvs as Float32Array,\n color: new Color(1, 1, 1, 1),\n darkColor: new Color(0, 0, 0, 0),\n darkTint: false,\n skipRender: false,\n };\n }\n\n return this.attachmentCacheData[slot.data.index][attachment.name];\n }\n\n protected onViewUpdate()\n {\n // increment from the 12th bit!\n this._didChangeId += 1 << 12;\n\n this._boundsDirty = true;\n\n if (this.didViewUpdate) return;\n this.didViewUpdate = true;\n\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n if (renderGroup)\n {\n renderGroup.onChildViewUpdate(this);\n }\n\n this.debug?.renderDebug(this);\n }\n\n /**\n * Attaches a PixiJS container to a specified slot. This will map the world transform of the slots bone\n * to the attached container. A container can only be attached to one slot at a time.\n *\n * @param container - The container to attach to the slot\n * @param slotRef - The slot id or slot to attach to\n */\n public addSlotObject(slot: number | string | Slot, container: Container)\n {\n slot = this.getSlotFromRef(slot);\n\n // need to check in on the container too...\n for (const i in this._slotsObject)\n {\n if (this._slotsObject[i]?.container === container)\n {\n this.removeSlotObject(this._slotsObject[i].slot);\n }\n }\n\n this.removeSlotObject(slot);\n\n container.includeInBuild = false;\n\n // TODO only add once??\n this.addChild(container);\n\n this._slotsObject[slot.data.name] = {\n container,\n slot\n };\n\n this.updateSlotObject(this._slotsObject[slot.data.name]);\n }\n\n /**\n * Removes a PixiJS container from the slot it is attached to.\n *\n * @param container - The container to detach from the slot\n * @param slotOrContainer - The container, slot id or slot to detach from\n */\n public removeSlotObject(slotOrContainer: number | string | Slot | Container)\n {\n let containerToRemove: Container | undefined;\n\n if (slotOrContainer instanceof Container)\n {\n for (const i in this._slotsObject)\n {\n if (this._slotsObject[i]?.container === slotOrContainer)\n {\n this._slotsObject[i] = null;\n\n containerToRemove = slotOrContainer;\n break;\n }\n }\n }\n else\n {\n const slot = this.getSlotFromRef(slotOrContainer);\n\n containerToRemove = this._slotsObject[slot.data.name]?.container;\n this._slotsObject[slot.data.name] = null;\n }\n\n if (containerToRemove)\n {\n this.removeChild(containerToRemove);\n\n containerToRemove.includeInBuild = true;\n }\n }\n\n /**\n * Returns a container attached to a slot, or undefined if no container is attached.\n *\n * @param slotRef - The slot id or slot to get the attachment from\n * @returns - The container attached to the slot\n */\n public getSlotObject(slot: number | string | Slot)\n {\n slot = this.getSlotFromRef(slot);\n\n return this._slotsObject[slot.data.name].container;\n }\n\n private updateBounds()\n {\n this._boundsDirty = false;\n\n this.skeletonBounds ||= new SkeletonBounds();\n\n const skeletonBounds = this.skeletonBounds;\n\n skeletonBounds.update(this.skeleton, true);\n\n if (skeletonBounds.minX === Infinity)\n {\n this._applyState();\n\n const drawOrder = this.skeleton.drawOrder;\n const bounds = this._bounds;\n\n bounds.clear();\n\n for (let i = 0; i < drawOrder.length; i++)\n {\n const slot = drawOrder[i];\n\n const attachment = slot.getAttachment();\n\n if (attachment && (attachment instanceof RegionAttachment || attachment instanceof MeshAttachment))\n {\n const cacheData = this._getCachedData(slot, attachment);\n\n bounds.addVertexData(cacheData.vertices, 0, cacheData.vertices.length);\n }\n }\n }\n else\n {\n this._bounds.minX = skeletonBounds.minX;\n this._bounds.minY = skeletonBounds.minY;\n this._bounds.maxX = skeletonBounds.maxX;\n this._bounds.maxY = skeletonBounds.maxY;\n }\n }\n\n /** @internal */\n addBounds(bounds: Bounds)\n {\n bounds.addBounds(this.bounds);\n }\n\n /**\n * Destroys this sprite renderable and optionally its texture.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.texture=false] - Should it destroy the current texture of the renderable as well\n * @param {boolean} [options.textureSource=false] - Should it destroy the textureSource of the renderable as well\n */\n public override destroy(options: DestroyOptions = false)\n {\n super.destroy(options);\n\n Ticker.shared.remove(this.internalUpdate, this);\n this.state.clearListeners();\n this.debug = undefined;\n this.skeleton = null as any;\n this.state = null as any;\n (this._slotsObject as any) = null;\n this._lastAttachments = null;\n this.attachmentCacheData = null as any;\n }\n\n /** Converts a point from the skeleton coordinate system to the Pixi world coordinate system. */\n public skeletonToPixiWorldCoordinates(point: { x: number; y: number })\n {\n this.worldTransform.apply(point, point);\n }\n\n /** Converts a point from the Pixi world coordinate system to the skeleton coordinate system. */\n public pixiWorldCoordinatesToSkeleton(point: { x: number; y: number })\n {\n this.worldTransform.applyInverse(point, point);\n }\n\n /** Converts a point from the Pixi world coordinate system to the bone's local coordinate system. */\n public pixiWorldCoordinatesToBone(point: { x: number; y: number }, bone: Bone)\n {\n this.pixiWorldCoordinatesToSkeleton(point);\n if (bone.parent)\n {\n bone.parent.worldToLocal(point as Vector2);\n }\n else\n {\n bone.worldToLocal(point as Vector2);\n }\n }\n\n static from({ skeleton, atlas, scale = 1 }: SpineFromOptions)\n {\n const cacheKey = `${skeleton}-${atlas}-${scale}`;\n\n if (Cache.has(cacheKey))\n {\n return new Spine(Cache.get(cacheKey));\n }\n\n const skeletonAsset = Assets.get(skeleton);\n\n const atlasAsset = Assets.get(atlas);\n const attachmentLoader = new AtlasAttachmentLoader(atlasAsset);\n // eslint-disable-next-line max-len\n const parser\n = skeletonAsset instanceof Uint8Array\n ? new SkeletonBinary(attachmentLoader)\n : new SkeletonJson(attachmentLoader);\n\n // TODO scale?\n parser.scale = scale;\n const skeletonData = parser.readSkeletonData(skeletonAsset);\n\n Cache.set(cacheKey, skeletonData);\n\n return new Spine({\n skeletonData,\n });\n }\n}\n", "/** ****************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software or\n * otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { Container, Graphics, Text } from 'pixi.js';\nimport { Spine } from './Spine';\nimport {\n ClippingAttachment,\n MeshAttachment,\n PathAttachment,\n RegionAttachment,\n SkeletonBounds\n} from '@esotericsoftware/spine-core';\n\nimport type { AnimationStateListener } from '@esotericsoftware/spine-core';\n\n/**\n * Make a class that extends from this interface to create your own debug renderer.\n * @public\n */\nexport interface ISpineDebugRenderer\n{\n /**\n * This will be called every frame, after the spine has been updated.\n */\n renderDebug: (spine: Spine) => void;\n\n /**\n * This is called when the `spine.debug` object is set to null or when the spine is destroyed.\n */\n unregisterSpine: (spine: Spine) => void;\n\n /**\n * This is called when the `spine.debug` object is set to a new instance of a debug renderer.\n */\n registerSpine: (spine: Spine) => void;\n}\n\ntype DebugDisplayObjects = {\n bones: Container;\n skeletonXY: Graphics;\n regionAttachmentsShape: Graphics;\n meshTrianglesLine: Graphics;\n meshHullLine: Graphics;\n clippingPolygon: Graphics;\n boundingBoxesRect: Graphics;\n boundingBoxesCircle: Graphics;\n boundingBoxesPolygon: Graphics;\n pathsCurve: Graphics;\n pathsLine: Graphics;\n parentDebugContainer: Container;\n eventText: Container;\n eventCallback: AnimationStateListener;\n};\n\n/**\n * This is a debug renderer that uses PixiJS Graphics under the hood.\n * @public\n */\nexport class SpineDebugRenderer implements ISpineDebugRenderer\n{\n private readonly registeredSpines: Map = new Map();\n\n public drawMeshHull = true;\n public drawMeshTriangles = true;\n public drawBones = true;\n public drawPaths = true;\n public drawBoundingBoxes = true;\n public drawClipping = true;\n public drawRegionAttachments = true;\n public drawEvents = true;\n\n public lineWidth = 1;\n public regionAttachmentsColor = 0x0078ff;\n public meshHullColor = 0x0078ff;\n public meshTrianglesColor = 0xffcc00;\n public clippingPolygonColor = 0xff00ff;\n public boundingBoxesRectColor = 0x00ff00;\n public boundingBoxesPolygonColor = 0x00ff00;\n public boundingBoxesCircleColor = 0x00ff00;\n public pathsCurveColor = 0xff0000;\n public pathsLineColor = 0xff00ff;\n public skeletonXYColor = 0xff0000;\n public bonesColor = 0x00eecc;\n public eventFontSize = 24;\n public eventFontColor = 0x0;\n\n /**\n * The debug is attached by force to each spine object.\n * So we need to create it inside the spine when we get the first update\n */\n public registerSpine(spine: Spine): void\n {\n if (this.registeredSpines.has(spine))\n {\n console.warn('SpineDebugRenderer.registerSpine() - this spine is already registered!', spine);\n\n return;\n }\n const debugDisplayObjects: DebugDisplayObjects = {\n parentDebugContainer: new Container(),\n bones: new Container(),\n skeletonXY: new Graphics(),\n regionAttachmentsShape: new Graphics(),\n meshTrianglesLine: new Graphics(),\n meshHullLine: new Graphics(),\n clippingPolygon: new Graphics(),\n boundingBoxesRect: new Graphics(),\n boundingBoxesCircle: new Graphics(),\n boundingBoxesPolygon: new Graphics(),\n pathsCurve: new Graphics(),\n pathsLine: new Graphics(),\n eventText: new Container(),\n eventCallback: {\n event: (_, event) =>\n {\n if (this.drawEvents)\n {\n const scale = Math.abs(spine.scale.x || spine.scale.y || 1);\n const text = new Text({\n text: event.data.name,\n style: {\n fontSize: this.eventFontSize / scale,\n fill: this.eventFontColor,\n fontFamily: 'monospace'\n }\n });\n\n text.scale.x = Math.sign(spine.scale.x);\n text.anchor.set(0.5);\n debugDisplayObjects.eventText.addChild(text);\n setTimeout(() =>\n {\n if (!text.destroyed)\n {\n text.destroy();\n }\n }, 250);\n }\n },\n },\n };\n\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.bones);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.skeletonXY);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.regionAttachmentsShape);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshTrianglesLine);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshHullLine);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.clippingPolygon);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesRect);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesCircle);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesPolygon);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsCurve);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsLine);\n debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.eventText);\n\n (debugDisplayObjects.parentDebugContainer as any).zIndex = 9999999;\n\n // Disable screen reader and mouse input on debug objects.\n (debugDisplayObjects.parentDebugContainer as any).accessibleChildren = false;\n (debugDisplayObjects.parentDebugContainer as any).eventMode = 'none';\n (debugDisplayObjects.parentDebugContainer as any).interactiveChildren = false;\n\n spine.addChild(debugDisplayObjects.parentDebugContainer);\n\n spine.state.addListener(debugDisplayObjects.eventCallback);\n\n this.registeredSpines.set(spine, debugDisplayObjects);\n }\n\n public renderDebug(spine: Spine): void\n {\n if (!this.registeredSpines.has(spine))\n {\n // This should never happen. Spines are registered when you assign spine.debug\n this.registerSpine(spine);\n }\n\n const debugDisplayObjects = this.registeredSpines.get(spine);\n\n if (!debugDisplayObjects)\n {\n return;\n }\n spine.addChild(debugDisplayObjects.parentDebugContainer);\n\n debugDisplayObjects.skeletonXY.clear();\n debugDisplayObjects.regionAttachmentsShape.clear();\n debugDisplayObjects.meshTrianglesLine.clear();\n debugDisplayObjects.meshHullLine.clear();\n debugDisplayObjects.clippingPolygon.clear();\n debugDisplayObjects.boundingBoxesRect.clear();\n debugDisplayObjects.boundingBoxesCircle.clear();\n debugDisplayObjects.boundingBoxesPolygon.clear();\n debugDisplayObjects.pathsCurve.clear();\n debugDisplayObjects.pathsLine.clear();\n\n for (let len = debugDisplayObjects.bones.children.length; len > 0; len--)\n {\n debugDisplayObjects.bones.children[len - 1].destroy({ children: true, texture: true, textureSource: true });\n }\n\n const scale = Math.abs(spine.scale.x || spine.scale.y || 1);\n const lineWidth = this.lineWidth / scale;\n\n if (this.drawBones)\n {\n this.drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale);\n }\n\n if (this.drawPaths)\n {\n this.drawPathsFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawBoundingBoxes)\n {\n this.drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawClipping)\n {\n this.drawClippingFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawMeshHull || this.drawMeshTriangles)\n {\n this.drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawRegionAttachments)\n {\n this.drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth);\n }\n\n if (this.drawEvents)\n {\n for (const child of debugDisplayObjects.eventText.children)\n {\n child.alpha -= 0.05;\n child.y -= 2;\n }\n }\n }\n\n private drawBonesFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number, scale: number): void\n {\n const skeleton = spine.skeleton;\n const skeletonX = skeleton.x;\n const skeletonY = skeleton.y;\n const bones = skeleton.bones;\n\n debugDisplayObjects.skeletonXY.strokeStyle = { width: lineWidth, color: this.skeletonXYColor };\n\n for (let i = 0, len = bones.length; i < len; i++)\n {\n const bone = bones[i];\n const boneLen = bone.data.length;\n const starX = skeletonX + bone.worldX;\n const starY = skeletonY + bone.worldY;\n const endX = skeletonX + (boneLen * bone.a) + bone.worldX;\n const endY = skeletonY + (boneLen * bone.b) + bone.worldY;\n\n if (bone.data.name === 'root' || bone.data.parent === null)\n {\n continue;\n }\n\n const w = Math.abs(starX - endX);\n const h = Math.abs(starY - endY);\n // a = w, // side length a\n const a2 = Math.pow(w, 2); // square root of side length a\n const b = h; // side length b\n const b2 = Math.pow(h, 2); // square root of side length b\n const c = Math.sqrt(a2 + b2); // side length c\n const c2 = Math.pow(c, 2); // square root of side length c\n const rad = Math.PI / 180;\n // A = Math.acos([a2 + c2 - b2] / [2 * a * c]) || 0, // Angle A\n // C = Math.acos([a2 + b2 - c2] / [2 * a * b]) || 0, // C angle\n const B = Math.acos((c2 + b2 - a2) / (2 * b * c)) || 0; // angle of corner B\n\n if (c === 0)\n {\n continue;\n }\n\n const gp = new Graphics();\n\n debugDisplayObjects.bones.addChild(gp);\n\n // draw bone\n const refRation = c / 50 / scale;\n\n gp.context\n .poly([0, 0, 0 - refRation, c - (refRation * 3), 0, c - refRation, 0 + refRation, c - (refRation * 3)])\n .fill(this.bonesColor);\n gp.x = starX;\n gp.y = starY;\n gp.pivot.y = c;\n\n // Calculate bone rotation angle\n let rotation = 0;\n\n if (starX < endX && starY < endY)\n {\n // bottom right\n rotation = -B + (180 * rad);\n }\n else if (starX > endX && starY < endY)\n {\n // bottom left\n rotation = 180 * (rad + B);\n }\n else if (starX > endX && starY > endY)\n {\n // top left\n rotation = -B;\n }\n else if (starX < endX && starY > endY)\n {\n // bottom left\n rotation = B;\n }\n else if (starY === endY && starX < endX)\n {\n // To the right\n rotation = 90 * rad;\n }\n else if (starY === endY && starX > endX)\n {\n // go left\n rotation = -90 * rad;\n }\n else if (starX === endX && starY < endY)\n {\n // down\n rotation = 180 * rad;\n }\n else if (starX === endX && starY > endY)\n {\n // up\n rotation = 0;\n }\n gp.rotation = rotation;\n\n // Draw the starting rotation point of the bone\n gp.circle(0, c, refRation * 1.2)\n .fill({ color: 0x000000, alpha: 0.6 })\n .stroke({ width: lineWidth, color: this.skeletonXYColor });\n }\n\n // Draw the skeleton starting point \"X\" form\n const startDotSize = lineWidth * 3;\n\n debugDisplayObjects.skeletonXY.context\n .moveTo(skeletonX - startDotSize, skeletonY - startDotSize)\n .lineTo(skeletonX + startDotSize, skeletonY + startDotSize)\n .moveTo(skeletonX + startDotSize, skeletonY - startDotSize)\n .lineTo(skeletonX - startDotSize, skeletonY + startDotSize)\n .stroke();\n }\n\n private drawRegionAttachmentsFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof RegionAttachment))\n {\n continue;\n }\n\n const regionAttachment = attachment;\n\n const vertices = new Float32Array(8);\n\n regionAttachment.computeWorldVertices(slot, vertices, 0, 2);\n\n debugDisplayObjects.regionAttachmentsShape.poly(Array.from(vertices.slice(0, 8)));\n }\n\n debugDisplayObjects.regionAttachmentsShape.stroke({\n color: this.regionAttachmentsColor,\n width: lineWidth\n });\n }\n\n private drawMeshHullAndMeshTriangles(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n\n if (!slot.bone.active)\n {\n continue;\n }\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof MeshAttachment))\n {\n continue;\n }\n\n const meshAttachment = attachment;\n\n const vertices = new Float32Array(meshAttachment.worldVerticesLength);\n const triangles = meshAttachment.triangles;\n let hullLength = meshAttachment.hullLength;\n\n meshAttachment.computeWorldVertices(slot, 0, meshAttachment.worldVerticesLength, vertices, 0, 2);\n // draw the skinned mesh (triangle)\n if (this.drawMeshTriangles)\n {\n for (let i = 0, len = triangles.length; i < len; i += 3)\n {\n const v1 = triangles[i] * 2;\n const v2 = triangles[i + 1] * 2;\n const v3 = triangles[i + 2] * 2;\n\n debugDisplayObjects.meshTrianglesLine.context\n .moveTo(vertices[v1], vertices[v1 + 1])\n .lineTo(vertices[v2], vertices[v2 + 1])\n .lineTo(vertices[v3], vertices[v3 + 1]);\n }\n }\n\n // draw skin border\n if (this.drawMeshHull && hullLength > 0)\n {\n hullLength = (hullLength >> 1) * 2;\n let lastX = vertices[hullLength - 2];\n let lastY = vertices[hullLength - 1];\n\n for (let i = 0, len = hullLength; i < len; i += 2)\n {\n const x = vertices[i];\n const y = vertices[i + 1];\n\n debugDisplayObjects.meshHullLine.context\n .moveTo(x, y)\n .lineTo(lastX, lastY);\n lastX = x;\n lastY = y;\n }\n }\n }\n\n debugDisplayObjects.meshHullLine.stroke({ width: lineWidth, color: this.meshHullColor });\n debugDisplayObjects.meshTrianglesLine.stroke({ width: lineWidth, color: this.meshTrianglesColor });\n }\n\n drawClippingFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n\n if (!slot.bone.active)\n {\n continue;\n }\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof ClippingAttachment))\n {\n continue;\n }\n\n const clippingAttachment = attachment;\n\n const nn = clippingAttachment.worldVerticesLength;\n const world = new Float32Array(nn);\n\n clippingAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n debugDisplayObjects.clippingPolygon.poly(Array.from(world));\n }\n\n debugDisplayObjects.clippingPolygon.stroke({\n width: lineWidth, color: this.clippingPolygonColor, alpha: 1\n });\n }\n\n drawBoundingBoxesFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n // draw the total outline of the bounding box\n debugDisplayObjects.boundingBoxesRect.lineStyle(lineWidth, this.boundingBoxesRectColor, 5);\n\n const bounds = new SkeletonBounds();\n\n bounds.update(spine.skeleton, true);\n\n debugDisplayObjects.boundingBoxesRect\n .rect(bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight())\n .stroke({ width: lineWidth, color: this.boundingBoxesRectColor });\n\n const polygons = bounds.polygons;\n const drawPolygon = (polygonVertices: ArrayLike, _offset: unknown, count: number): void =>\n {\n if (count < 3)\n {\n throw new Error('Polygon must contain at least 3 vertices');\n }\n const paths:number[] = [];\n const dotSize = lineWidth * 2;\n\n for (let i = 0, len = polygonVertices.length; i < len; i += 2)\n {\n const x1 = polygonVertices[i];\n const y1 = polygonVertices[i + 1];\n\n // draw the bounding box node\n debugDisplayObjects.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor);\n debugDisplayObjects.boundingBoxesCircle.drawCircle(x1, y1, dotSize);\n debugDisplayObjects.boundingBoxesCircle.fill(0);\n\n paths.push(x1, y1);\n }\n\n // draw the bounding box area\n debugDisplayObjects.boundingBoxesPolygon\n .poly(paths)\n .fill({\n color: this.boundingBoxesPolygonColor,\n alpha: 0.1\n })\n .stroke({\n width: lineWidth,\n color: this.boundingBoxesPolygonColor\n });\n };\n\n for (let i = 0, len = polygons.length; i < len; i++)\n {\n const polygon = polygons[i];\n\n drawPolygon(polygon, 0, polygon.length);\n }\n }\n\n private drawPathsFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n {\n const skeleton = spine.skeleton;\n const slots = skeleton.slots;\n\n for (let i = 0, len = slots.length; i < len; i++)\n {\n const slot = slots[i];\n\n if (!slot.bone.active)\n {\n continue;\n }\n const attachment = slot.getAttachment();\n\n if (attachment === null || !(attachment instanceof PathAttachment))\n {\n continue;\n }\n\n const pathAttachment = attachment;\n let nn = pathAttachment.worldVerticesLength;\n const world = new Float32Array(nn);\n\n pathAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n let x1 = world[2];\n let y1 = world[3];\n let x2 = 0;\n let y2 = 0;\n\n if (pathAttachment.closed)\n {\n const cx1 = world[0];\n const cy1 = world[1];\n const cx2 = world[nn - 2];\n const cy2 = world[nn - 1];\n\n x2 = world[nn - 4];\n y2 = world[nn - 3];\n\n // curve\n debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n\n // handle\n debugDisplayObjects.pathsLine.moveTo(x1, y1);\n debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n debugDisplayObjects.pathsLine.moveTo(x2, y2);\n debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n }\n nn -= 4;\n for (let ii = 4; ii < nn; ii += 6)\n {\n const cx1 = world[ii];\n const cy1 = world[ii + 1];\n const cx2 = world[ii + 2];\n const cy2 = world[ii + 3];\n\n x2 = world[ii + 4];\n y2 = world[ii + 5];\n // curve\n debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n\n // handle\n debugDisplayObjects.pathsLine.moveTo(x1, y1);\n debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n debugDisplayObjects.pathsLine.moveTo(x2, y2);\n debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n x1 = x2;\n y1 = y2;\n }\n }\n\n debugDisplayObjects.pathsCurve.stroke({ width: lineWidth, color: this.pathsCurveColor });\n debugDisplayObjects.pathsLine.stroke({ width: lineWidth, color: this.pathsLineColor });\n }\n\n public unregisterSpine(spine: Spine): void\n {\n if (!this.registeredSpines.has(spine))\n {\n console.warn('SpineDebugRenderer.unregisterSpine() - spine is not registered, can\\'t unregister!', spine);\n }\n const debugDisplayObjects = this.registeredSpines.get(spine);\n\n if (!debugDisplayObjects)\n {\n return;\n }\n\n spine.state.removeListener(debugDisplayObjects.eventCallback);\n\n debugDisplayObjects.parentDebugContainer.destroy({ textureSource: true, children: true, texture: true });\n this.registeredSpines.delete(spine);\n }\n}\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACuCA,MAAI,OAAO,WAAW,eAAe,OAAO,MAC5C;AACI,UAAM,cAAc,OAAO;AAG3B,IAAC,OAAe,UAAU,CAAC,MAC3B;AACI,UAAI;AAAa,eAAO,YAAY,CAAC;AAAA,eAC5B,EAAE,WAAW,QAAQ,KAAK,EAAE,WAAW,SAAS;AAAG,eAAO,OAAO;AAAA,IAC9E;AAAA,EACJ;;;ACpBA,MAAAA,eAQO;;;ACRP,oBAAuC;;;ACOjC,MAAO,SAAP,MAAa;IAClB,QAAQ,IAAI,MAAK;IAEjB,IAAK,OAAa;AACjB,UAAI,WAAW,KAAK,SAAS,KAAK;AAClC,WAAK,MAAM,QAAQ,CAAC,IAAI,QAAQ;AAChC,aAAO,CAAC;IACT;IAEA,SAAU,OAAa;AACtB,aAAO,KAAK,MAAM,QAAQ,CAAC,KAAK;IACjC;IAEA,OAAQ,OAAa;AACpB,WAAK,MAAM,QAAQ,CAAC,IAAI;IACzB;IAEA,QAAK;AACJ,WAAK,MAAM,SAAS;IACrB;;AAGK,MAAO,YAAP,MAAgB;IACrB,UAA8B,CAAA;IAC9B,OAAO;IAEP,IAAK,OAAa;AACjB,UAAI,WAAW,KAAK,QAAQ,KAAK;AACjC,WAAK,QAAQ,KAAK,IAAI;AACtB,UAAI,CAAC,UAAU;AACd,aAAK;AACL,eAAO;;AAER,aAAO;IACR;IAEA,OAAQ,QAAgB;AACvB,UAAI,UAAU,KAAK;AACnB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG;AACzC,aAAK,IAAI,OAAO,CAAC,CAAC;AACnB,aAAO,WAAW,KAAK;IACxB;IAEA,SAAU,OAAa;AACtB,aAAO,KAAK,QAAQ,KAAK;IAC1B;IAEA,QAAK;AACJ,WAAK,UAAU,CAAA;AACf,WAAK,OAAO;IACb;;AAgBK,MAAO,QAAP,MAAO,OAAK;IAOG;IAAsB;IAAsB;IAAsB;IAN/E,OAAO,QAAQ,IAAI,OAAM,GAAG,GAAG,GAAG,CAAC;IACnC,OAAO,MAAM,IAAI,OAAM,GAAG,GAAG,GAAG,CAAC;IACjC,OAAO,QAAQ,IAAI,OAAM,GAAG,GAAG,GAAG,CAAC;IACnC,OAAO,OAAO,IAAI,OAAM,GAAG,GAAG,GAAG,CAAC;IAClC,OAAO,UAAU,IAAI,OAAM,GAAG,GAAG,GAAG,CAAC;IAE5C,YAAoB,IAAY,GAAU,IAAY,GAAU,IAAY,GAAU,IAAY,GAAC;AAA/E,WAAA,IAAA;AAAsB,WAAA,IAAA;AAAsB,WAAA,IAAA;AAAsB,WAAA,IAAA;IACtF;IAEA,IAAK,GAAW,GAAW,GAAW,GAAS;AAC9C,WAAK,IAAI;AACT,WAAK,IAAI;AACT,WAAK,IAAI;AACT,WAAK,IAAI;AACT,aAAO,KAAK,MAAK;IAClB;IAEA,aAAc,GAAQ;AACrB,WAAK,IAAI,EAAE;AACX,WAAK,IAAI,EAAE;AACX,WAAK,IAAI,EAAE;AACX,WAAK,IAAI,EAAE;AACX,aAAO;IACR;IAEA,cAAe,KAAW;AACzB,YAAM,IAAI,OAAO,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI;AAC7C,WAAK,IAAI,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,WAAK,IAAI,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,WAAK,IAAI,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,WAAK,IAAI,IAAI,UAAU,IAAI,IAAI,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI;AAChE,aAAO;IACR;IAEA,IAAK,GAAW,GAAW,GAAW,GAAS;AAC9C,WAAK,KAAK;AACV,WAAK,KAAK;AACV,WAAK,KAAK;AACV,WAAK,KAAK;AACV,aAAO,KAAK,MAAK;IAClB;IAEA,QAAK;AACJ,UAAI,KAAK,IAAI;AAAG,aAAK,IAAI;eAChB,KAAK,IAAI;AAAG,aAAK,IAAI;AAE9B,UAAI,KAAK,IAAI;AAAG,aAAK,IAAI;eAChB,KAAK,IAAI;AAAG,aAAK,IAAI;AAE9B,UAAI,KAAK,IAAI;AAAG,aAAK,IAAI;eAChB,KAAK,IAAI;AAAG,aAAK,IAAI;AAE9B,UAAI,KAAK,IAAI;AAAG,aAAK,IAAI;eAChB,KAAK,IAAI;AAAG,aAAK,IAAI;AAC9B,aAAO;IACR;IAEA,OAAO,gBAAiB,OAAc,OAAa;AAClD,YAAM,MAAM,QAAQ,gBAAgB,MAAM;AAC1C,YAAM,MAAM,QAAQ,cAAgB,MAAM;AAC1C,YAAM,MAAM,QAAQ,WAAgB,KAAK;AACzC,YAAM,KAAM,QAAQ,OAAe;IACpC;IAEA,OAAO,cAAe,OAAc,OAAa;AAChD,YAAM,MAAM,QAAQ,cAAgB,MAAM;AAC1C,YAAM,MAAM,QAAQ,WAAgB,KAAK;AACzC,YAAM,KAAM,QAAQ,OAAe;IACpC;IAEA,WAAQ;AACP,YAAM,MAAM,CAAC,OAAe,OAAO,IAAI,KAAK,SAAS,EAAE,GAAG,MAAM,EAAE;AAClE,aAAO,OAAO,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IAC7D;IAEA,OAAO,WAAY,KAAW;AAC7B,aAAO,IAAI,OAAK,EAAG,cAAc,GAAG;IACrC;;AAGK,MAAO,YAAP,MAAO,WAAS;IACrB,OAAO,KAAK;IACZ,OAAO,MAAM,WAAU,KAAK;IAC5B,OAAO,SAAS,IAAI,WAAU;IAC9B,OAAO,mBAAmB,MAAM,WAAU;IAC1C,OAAO,SAAS,WAAU;IAC1B,OAAO,mBAAmB,WAAU,KAAK;IACzC,OAAO,SAAS,WAAU;IAE1B,OAAO,MAAO,OAAe,KAAa,KAAW;AACpD,UAAI,QAAQ;AAAK,eAAO;AACxB,UAAI,QAAQ;AAAK,eAAO;AACxB,aAAO;IACR;IAEA,OAAO,OAAQ,SAAe;AAC7B,aAAO,KAAK,IAAI,UAAU,WAAU,MAAM;IAC3C;IAEA,OAAO,OAAQ,SAAe;AAC7B,aAAO,KAAK,IAAI,UAAU,WAAU,MAAM;IAC3C;IAEA,OAAO,SAAU,GAAW,GAAS;AACpC,aAAO,KAAK,MAAM,GAAG,CAAC,IAAI,WAAU;IACrC;IAEA,OAAO,OAAQ,OAAa;AAC3B,aAAO,QAAQ,IAAI,IAAI,QAAQ,IAAI,KAAK;IACzC;IAEA,OAAO,MAAO,GAAS;AACtB,aAAO,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IAC3C;IAEA,OAAO,KAAM,GAAS;AACrB,UAAI,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;AACnC,aAAO,IAAI,IAAI,CAAC,IAAI;IACrB;IAEA,OAAO,iBAAkB,KAAa,KAAW;AAChD,aAAO,WAAU,qBAAqB,KAAK,MAAM,MAAM,OAAO,GAAG;IAClE;IAEA,OAAO,qBAAsB,KAAa,KAAa,MAAY;AAClE,UAAI,IAAI,KAAK,OAAM;AACnB,UAAI,IAAI,MAAM;AACd,UAAI,MAAM,OAAO,OAAO;AAAG,eAAO,MAAM,KAAK,KAAK,IAAI,KAAK,OAAO,IAAI;AACtE,aAAO,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,KAAK;IAClD;IAEA,OAAO,aAAc,OAAa;AACjC,aAAO,UAAU,QAAS,QAAQ,OAAQ;IAC3C;;AAGK,MAAgB,gBAAhB,MAA6B;IAElC,MAAO,OAAe,KAAa,GAAS;AAC3C,aAAO,SAAS,MAAM,SAAS,KAAK,cAAc,CAAC;IACpD;;AAGK,MAAO,MAAP,cAAmB,cAAa;IAC3B,QAAQ;IAElB,YAAa,OAAa;AACzB,YAAK;AACL,WAAK,QAAQ;IACd;IAEA,cAAe,GAAS;AACvB,UAAI,KAAK;AAAK,eAAO,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,IAAI;AACnD,aAAO,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,IAAI,KAAK,KAAK;IAC7E;;AAGK,MAAO,SAAP,cAAsB,IAAG;IAC9B,YAAa,OAAa;AACzB,YAAM,KAAK;IACZ;IAEA,cAAe,GAAS;AACvB,aAAO,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,IAAI,KAAK,KAAK;IACvE;;AAGK,MAAO,QAAP,MAAO,OAAK;IACjB,OAAO,wBAAwB,OAAQ,iBAAkB;IAEzD,OAAO,UAAc,QAAsB,aAAqB,MAAoB,WAAmB,aAAmB;AACzH,eAAS,IAAI,aAAa,IAAI,WAAW,IAAI,cAAc,aAAa,KAAK,KAAK;AACjF,aAAK,CAAC,IAAI,OAAO,CAAC;;IAEpB;IAEA,OAAO,UAAc,OAAqB,WAAmB,SAAiB,OAAQ;AACrF,eAAS,IAAI,WAAW,IAAI,SAAS;AACpC,cAAM,CAAC,IAAI;IACb;IAEA,OAAO,aAAiB,OAAiB,MAAc,QAAa,GAAC;AACpE,UAAI,UAAU,MAAM;AACpB,UAAI,WAAW;AAAM,eAAO;AAC5B,YAAM,SAAS;AACf,UAAI,UAAU,MAAM;AACnB,iBAAS,IAAI,SAAS,IAAI,MAAM;AAAK,gBAAM,CAAC,IAAI;;AAEjD,aAAO;IACR;IAEA,OAAO,oBAAwB,OAAiB,MAAc,QAAa,GAAC;AAC3E,UAAI,MAAM,UAAU;AAAM,eAAO;AACjC,aAAO,OAAM,aAAa,OAAO,MAAM,KAAK;IAC7C;IAEA,OAAO,SAAa,MAAc,cAAe;AAChD,UAAI,QAAQ,IAAI,MAAS,IAAI;AAC7B,eAAS,IAAI,GAAG,IAAI,MAAM;AAAK,cAAM,CAAC,IAAI;AAC1C,aAAO;IACR;IAEA,OAAO,cAAe,MAAY;AACjC,UAAI,OAAM;AACT,eAAO,IAAI,aAAa,IAAI;WACxB;AACJ,YAAI,QAAQ,IAAI,MAAc,IAAI;AAClC,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAAK,gBAAM,CAAC,IAAI;AAClD,eAAO;;IAET;IAEA,OAAO,cAAe,MAAY;AACjC,UAAI,OAAM;AACT,eAAO,IAAI,WAAW,IAAI;WACtB;AACJ,YAAI,QAAQ,IAAI,MAAc,IAAI;AAClC,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAAK,gBAAM,CAAC,IAAI;AAClD,eAAO;;IAET;IAEA,OAAO,aAAc,OAAoB;AACxC,aAAO,OAAM,wBAAwB,IAAI,aAAa,KAAK,IAAI;IAChE;IAEA,OAAO,kBAAmB,OAAa;AACtC,aAAO,OAAM,wBAAwB,KAAK,OAAO,KAAK,IAAI;IAC3D;;IAGA,OAAO,sBAAuB,OAAe,OAAe;IAC5D;IAEA,OAAO,SAAa,OAAiB,SAAY,WAAW,MAAI;AAC/D,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AACjC,YAAI,MAAM,CAAC,KAAK;AAAS,iBAAO;AACjC,aAAO;IACR;IAEA,OAAO,UAAW,MAAW,MAAY;AACxC,aAAO,KAAK,KAAK,CAAC,EAAE,YAAW,IAAK,KAAK,MAAM,CAAC,CAAC;IAClD;;AAGK,MAAO,aAAP,MAAiB;IACtB,OAAO,SAAU,UAAkB;AAClC,eAAS,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK;AAC/C,YAAI,OAAO,SAAS,MAAM,CAAC;AAC3B,gBAAQ,IAAI,KAAK,KAAK,OAAO,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,OAAO,KAAK,SAAS,OAAO,KAAK,MAAM;;IAEtI;;AAGK,MAAO,OAAP,MAAW;IACR,QAAQ,IAAI,MAAK;IACjB;IAER,YAAa,cAAqB;AACjC,WAAK,eAAe;IACrB;IAEA,SAAM;AACL,aAAO,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,IAAG,IAAM,KAAK,aAAY;IACrE;IAEA,KAAM,MAAO;AACZ,UAAK,KAAa;AAAQ,aAAa,MAAK;AAC5C,WAAK,MAAM,KAAK,IAAI;IACrB;IAEA,QAAS,OAAmB;AAC3B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AACjC,aAAK,KAAK,MAAM,CAAC,CAAC;IACpB;IAEA,QAAK;AACJ,WAAK,MAAM,SAAS;IACrB;;AAGK,MAAO,UAAP,MAAc;IACC;IAAc;IAAlC,YAAoB,IAAI,GAAU,IAAI,GAAC;AAAnB,WAAA,IAAA;AAAc,WAAA,IAAA;IAClC;IAEA,IAAK,GAAW,GAAS;AACxB,WAAK,IAAI;AACT,WAAK,IAAI;AACT,aAAO;IACR;IAEA,SAAM;AACL,UAAI,IAAI,KAAK;AACb,UAAI,IAAI,KAAK;AACb,aAAO,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;IAC/B;IAEA,YAAS;AACR,UAAI,MAAM,KAAK,OAAM;AACrB,UAAI,OAAO,GAAG;AACb,aAAK,KAAK;AACV,aAAK,KAAK;;AAEX,aAAO;IACR;;AAGK,MAAO,aAAP,MAAiB;IACtB,WAAW;IACX,kBAAkB;IAClB,QAAQ;IACR,YAAY;IAEJ,WAAW,KAAK,IAAG,IAAK;IACxB,aAAa;IACb,YAAY;IAEpB,SAAM;AACL,UAAI,MAAM,KAAK,IAAG,IAAK;AACvB,WAAK,QAAQ,MAAM,KAAK;AACxB,WAAK,aAAa,KAAK;AACvB,WAAK,aAAa,KAAK;AACvB,UAAI,KAAK,QAAQ,KAAK;AAAU,aAAK,QAAQ,KAAK;AAClD,WAAK,WAAW;AAEhB,WAAK;AACL,UAAI,KAAK,YAAY,GAAG;AACvB,aAAK,kBAAkB,KAAK,aAAa,KAAK;AAC9C,aAAK,YAAY;AACjB,aAAK,aAAa;;IAEpB;;AAQK,MAAO,eAAP,MAAmB;IACxB;IACA,cAAc;IACd,YAAY;IACZ,OAAO;IACP,QAAQ;IAER,YAAa,aAAqB,IAAE;AACnC,WAAK,SAAS,IAAI,MAAc,UAAU;IAC3C;IAEA,gBAAa;AACZ,aAAO,KAAK,eAAe,KAAK,OAAO;IACxC;IAEA,SAAU,OAAa;AACtB,UAAI,KAAK,cAAc,KAAK,OAAO;AAAQ,aAAK;AAChD,WAAK,OAAO,KAAK,WAAW,IAAI;AAChC,UAAI,KAAK,YAAY,KAAK,OAAO,SAAS;AAAG,aAAK,YAAY;AAC9D,WAAK,QAAQ;IACd;IAEA,UAAO;AACN,UAAI,KAAK,cAAa,GAAI;AACzB,YAAI,KAAK,OAAO;AACf,cAAI,OAAO;AACX,mBAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ;AACvC,oBAAQ,KAAK,OAAO,CAAC;AACtB,eAAK,OAAO,OAAO,KAAK,OAAO;AAC/B,eAAK,QAAQ;;AAEd,eAAO,KAAK;;AAEb,aAAO;IACR;;;;AC3bK,MAAgB,aAAhB,MAA0B;IAC/B;IAEA,YAAa,MAAY;AACxB,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,WAAK,OAAO;IACb;;AAOK,MAAgB,mBAAhB,MAAgB,0BAAyB,WAAU;IAChD,OAAO,SAAS;;IAGxB,KAAK,kBAAiB;;;;IAKtB,QAA8B;;;;IAK9B,WAA4B,CAAA;;;IAI5B,sBAAsB;;;IAItB,qBAAiC;IAEjC,YAAa,MAAY;AACxB,YAAM,IAAI;IACX;;;;;;;;;;;;IAaA,qBAAsB,MAAY,OAAe,OAAe,eAAgC,QAAgB,QAAc;AAC7H,cAAQ,UAAU,SAAS,KAAK;AAChC,UAAI,WAAW,KAAK,KAAK;AACzB,UAAI,cAAc,KAAK;AACvB,UAAI,WAAW,KAAK;AACpB,UAAI,QAAQ,KAAK;AACjB,UAAI,CAAC,OAAO;AACX,YAAI,YAAY,SAAS;AAAG,qBAAW;AACvC,YAAI,OAAO,KAAK;AAChB,YAAI,IAAI,KAAK;AACb,YAAI,IAAI,KAAK;AACb,YAAI,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK;AACjD,iBAASC,KAAI,OAAO,IAAI,QAAQ,IAAI,OAAOA,MAAK,GAAG,KAAK,QAAQ;AAC/D,cAAI,KAAK,SAASA,EAAC,GAAG,KAAK,SAASA,KAAI,CAAC;AACzC,wBAAc,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI;AACrC,wBAAc,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI;;AAE1C;;AAED,UAAI,IAAI,GAAG,OAAO;AAClB,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK,GAAG;AAClC,YAAI,IAAI,MAAM,CAAC;AACf,aAAK,IAAI;AACT,gBAAQ;;AAET,UAAI,gBAAgB,SAAS;AAC7B,UAAI,YAAY,UAAU,GAAG;AAC5B,iBAAS,IAAI,QAAQ,IAAI,OAAO,GAAG,IAAI,OAAO,KAAK,QAAQ;AAC1D,cAAI,KAAK,GAAG,KAAK;AACjB,cAAI,IAAI,MAAM,GAAG;AACjB,eAAK;AACL,iBAAO,IAAI,GAAG,KAAK,KAAK,GAAG;AAC1B,gBAAI,OAAO,cAAc,MAAM,CAAC,CAAC;AACjC,gBAAI,KAAK,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,SAAS,SAAS,IAAI,CAAC;AACnE,mBAAO,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,UAAU;AAClD,mBAAO,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,UAAU;;AAEnD,wBAAc,CAAC,IAAI;AACnB,wBAAc,IAAI,CAAC,IAAI;;aAElB;AACN,YAAI,SAAS;AACb,iBAAS,IAAI,QAAQ,IAAI,OAAO,GAAG,IAAI,QAAQ,GAAG,IAAI,OAAO,KAAK,QAAQ;AACzE,cAAI,KAAK,GAAG,KAAK;AACjB,cAAI,IAAI,MAAM,GAAG;AACjB,eAAK;AACL,iBAAO,IAAI,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG;AAClC,gBAAI,OAAO,cAAc,MAAM,CAAC,CAAC;AACjC,gBAAI,KAAK,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,SAAS,SAAS,IAAI,CAAC;AAC/F,mBAAO,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,UAAU;AAClD,mBAAO,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,UAAU;;AAEnD,wBAAc,CAAC,IAAI;AACnB,wBAAc,IAAI,CAAC,IAAI;;;IAG1B;;IAGA,OAAQ,YAA4B;AACnC,UAAI,KAAK,OAAO;AACf,mBAAW,QAAQ,IAAI,MAAc,KAAK,MAAM,MAAM;AACtD,cAAM,UAAU,KAAK,OAAO,GAAG,WAAW,OAAO,GAAG,KAAK,MAAM,MAAM;;AAErE,mBAAW,QAAQ;AAEpB,UAAI,KAAK,UAAU;AAClB,mBAAW,WAAW,MAAM,cAAc,KAAK,SAAS,MAAM;AAC9D,cAAM,UAAU,KAAK,UAAU,GAAG,WAAW,UAAU,GAAG,KAAK,SAAS,MAAM;;AAG/E,iBAAW,sBAAsB,KAAK;AACtC,iBAAW,qBAAqB,KAAK;IACtC;;;;AC3HK,MAAO,WAAP,MAAO,UAAQ;IACZ,OAAO,UAAU;IAEzB,KAAK,UAAS,OAAM;IACpB;IACA,QAAQ;IACR,SAAS;;IAET,aAAa;IAEb,YAAa,OAAa;AACzB,WAAK,UAAU,IAAI,MAAqB,KAAK;IAC9C;IAEA,OAAI;AACH,UAAI,OAAO,IAAI,UAAS,KAAK,QAAQ,MAAM;AAC3C,YAAM,UAAU,KAAK,SAAS,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,MAAM;AACrE,WAAK,QAAQ,KAAK;AAClB,WAAK,SAAS,KAAK;AACnB,WAAK,aAAa,KAAK;AACvB,aAAO;IACR;IAEA,MAAO,MAAY,YAA4B;AAC9C,UAAI,QAAQ,KAAK;AACjB,UAAI,SAAS;AAAI,gBAAQ,KAAK;AAC9B,UAAI,SAAS,KAAK,QAAQ;AAAQ,gBAAQ,KAAK,QAAQ,SAAS;AAChE,UAAI,SAAS,KAAK,QAAQ,KAAK;AAC/B,UAAI,WAAW,UAAU,QAAQ;AAChC,mBAAW,SAAS;AACpB,mBAAW,aAAY;;IAEzB;IAEA,QAAS,UAAkB,OAAa;AACvC,UAAI,SAAS;AACb,UAAI,SAAS,KAAK,QAAQ,OAAO,SAAQ;AACzC,eAAS,IAAI,KAAK,SAAS,MAAM,QAAQ,IAAI,GAAG;AAC/C,kBAAU;AACX,gBAAU;AACV,aAAO;IACR;IAEQ,OAAO,SAAM;AACpB,aAAO,UAAS;IACjB;;AAGD,MAAY;AAAZ,GAAA,SAAYC,eAAY;AACvB,IAAAA,cAAAA,cAAA,MAAA,IAAA,CAAA,IAAA;AACA,IAAAA,cAAAA,cAAA,MAAA,IAAA,CAAA,IAAA;AACA,IAAAA,cAAAA,cAAA,MAAA,IAAA,CAAA,IAAA;AACA,IAAAA,cAAAA,cAAA,UAAA,IAAA,CAAA,IAAA;AACA,IAAAA,cAAAA,cAAA,aAAA,IAAA,CAAA,IAAA;AACA,IAAAA,cAAAA,cAAA,aAAA,IAAA,CAAA,IAAA;AACA,IAAAA,cAAAA,cAAA,iBAAA,IAAA,CAAA,IAAA;EACD,GARY,iBAAA,eAAY,CAAA,EAAA;AAUjB,MAAM,qBAAqB;IACjC,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;;;;ACxDR,MAAO,YAAP,MAAgB;;IAErB;IACA,YAA6B,CAAA;IAC7B,cAAyB,IAAI,UAAS;;IAGtC;IAEA,YAAa,MAAc,WAA4B,UAAgB;AACtE,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,WAAK,OAAO;AACZ,WAAK,aAAa,SAAS;AAC3B,WAAK,WAAW;IACjB;IAEA,aAAc,WAA0B;AACvC,UAAI,CAAC;AAAW,cAAM,IAAI,MAAM,2BAA2B;AAC3D,WAAK,YAAY;AACjB,WAAK,YAAY,MAAK;AACtB,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ;AACrC,aAAK,YAAY,OAAO,UAAU,CAAC,EAAE,eAAc,CAAE;IACvD;IAEA,YAAa,KAAa;AACzB,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAC/B,YAAI,KAAK,YAAY,SAAS,IAAI,CAAC,CAAC;AAAG,iBAAO;AAC/C,aAAO;IACR;;;;;;IAOA,MAAO,UAAoB,UAAkB,MAAc,MAAe,QAAsB,OAAe,OAAiB,WAAuB;AACtJ,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AAEzD,UAAI,QAAQ,KAAK,YAAY,GAAG;AAC/B,gBAAQ,KAAK;AACb,YAAI,WAAW;AAAG,sBAAY,KAAK;;AAGpC,UAAI,YAAY,KAAK;AACrB,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG;AAC5C,kBAAU,CAAC,EAAE,MAAM,UAAU,UAAU,MAAM,QAAQ,OAAO,OAAO,SAAS;IAC9E;;AAOD,MAAY;AAAZ,GAAA,SAAYC,WAAQ;AAGnB,IAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;AAMA,IAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;AAKA,IAAAA,UAAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AAOA,IAAAA,UAAAA,UAAA,KAAA,IAAA,CAAA,IAAA;EACD,GAtBY,aAAA,WAAQ,CAAA,EAAA;AA4BpB,MAAY;AAAZ,GAAA,SAAYC,eAAY;AACvB,IAAAA,cAAAA,cAAA,OAAA,IAAA,CAAA,IAAA;AAAO,IAAAA,cAAAA,cAAA,QAAA,IAAA,CAAA,IAAA;EACR,GAFY,iBAAA,eAAY,CAAA,EAAA;AAIxB,MAAM,WAAW;IAChB,QAAQ;IACR,GAAG;IACH,GAAG;IACH,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IAET,KAAK;IACL,OAAO;IACP,MAAM;IAEN,YAAY;IACZ,QAAQ;IAER,OAAO;IACP,WAAW;IAEX,cAAc;IACd,qBAAqB;IAErB,wBAAwB;IACxB,uBAAuB;IACvB,mBAAmB;IAEnB,0BAA0B;IAC1B,2BAA2B;IAC3B,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;IAC1B,sBAAsB;IACtB,wBAAwB;IAExB,UAAU;;AAIL,MAAgB,WAAhB,MAAwB;IAC7B;IACA;IAEA,YAAa,YAAoB,aAAqB;AACrD,WAAK,cAAc;AACnB,WAAK,SAAS,MAAM,cAAc,aAAa,KAAK,gBAAe,CAAE;IACtE;IAEA,iBAAc;AACb,aAAO,KAAK;IACb;IAEA,kBAAe;AACd,aAAO;IACR;IAEA,gBAAa;AACZ,aAAO,KAAK,OAAO,SAAS,KAAK,gBAAe;IACjD;IAEA,cAAW;AACV,aAAO,KAAK,OAAO,KAAK,OAAO,SAAS,KAAK,gBAAe,CAAE;IAC/D;IAIA,OAAO,QAAS,QAAyB,MAAY;AACpD,UAAI,IAAI,OAAO;AACf,eAAS,IAAI,GAAG,IAAI,GAAG;AACtB,YAAI,OAAO,CAAC,IAAI;AAAM,iBAAO,IAAI;AAClC,aAAO,IAAI;IACZ;IAEA,OAAO,OAAQ,QAAyB,MAAc,MAAY;AACjE,UAAI,IAAI,OAAO;AACf,eAAS,IAAI,MAAM,IAAI,GAAG,KAAK;AAC9B,YAAI,OAAO,CAAC,IAAI;AAAM,iBAAO,IAAI;AAClC,aAAO,IAAI;IACZ;;AAcK,MAAgB,gBAAhB,cAAsC,SAAQ;IACzC;;IAEV,YAAa,YAAoB,aAAqB,aAAqB;AAC1E,YAAM,YAAY,WAAW;AAC7B,WAAK,SAAS,MAAM;QAAc,aAAa,cAAc;;MAAiB;AAC9E,WAAK,OAAO,aAAa,CAAC,IAAI;IAC/B;;IAGA,UAAW,OAAa;AACvB,WAAK,OAAO,KAAK,IAAI;IACtB;;IAGA,WAAY,OAAa;AACxB,WAAK,OAAO,KAAK,IAAI;IACtB;;;IAIA,OAAQ,aAAmB;AAC1B,UAAI,OAAO,KAAK,cAAa,IAAK,cAAc;AAChD,UAAI,KAAK,OAAO,SAAS,MAAM;AAC9B,YAAI,YAAY,MAAM,cAAc,IAAI;AACxC,cAAM,UAAU,KAAK,QAAQ,GAAG,WAAW,GAAG,IAAI;AAClD,aAAK,SAAS;;IAEhB;;;;;;;;;;;;;;;IAgBA,UAAW,QAAgB,OAAe,OAAe,OAAe,QAAgB,KAAa,KAAa,KACjH,KAAa,OAAe,QAAc;AAC1C,UAAI,SAAS,KAAK;AAClB,UAAI,IAAI,KAAK,cAAa,IAAK,SAAS;AACxC,UAAI,SAAS;AAAG,eAAO,KAAK,IAAI,IAAc;AAC9C,UAAI,QAAQ,QAAQ,MAAM,IAAI,OAAO,MAAM,QAAQ,SAAS,MAAM,IAAI,OAAO;AAC7E,UAAI,SAAS,MAAM,OAAO,IAAI,QAAQ,SAAS,MAAO,SAAS,MAAM,OAAO,IAAI,SAAS,UAAU;AACnG,UAAI,MAAM,OAAO,IAAI,MAAM,MAAM,OAAO,IAAI;AAC5C,UAAI,MAAM,MAAM,SAAS,MAAM,OAAO,OAAO,YAAY,MAAM,MAAM,UAAU,MAAM,OAAO,OAAO;AACnG,UAAI,IAAI,QAAQ,IAAI,IAAI,SAAS;AACjC,eAAS,IAAI,IAAI,IAAmB,IAAI,GAAG,KAAK,GAAG;AAClD,eAAO,CAAC,IAAI;AACZ,eAAO,IAAI,CAAC,IAAI;AAChB,cAAM;AACN,cAAM;AACN,eAAO;AACP,eAAO;AACP,aAAK;AACL,aAAK;;IAEP;;;;;IAMA,eAAgB,MAAc,YAAoB,aAAqB,GAAS;AAC/E,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,CAAC,IAAI,MAAM;AACrB,YAAIC,KAAI,KAAK,OAAO,UAAU,GAAGC,KAAI,KAAK,OAAO,aAAa,WAAW;AACzE,eAAOA,MAAK,OAAOD,OAAM,OAAO,CAAC,IAAIA,OAAM,OAAO,IAAI,CAAC,IAAIC;;AAE5D,UAAI,IAAI,IAAI;AACZ,WAAK,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;AAC3B,YAAI,OAAO,CAAC,KAAK,MAAM;AACtB,cAAID,KAAI,OAAO,IAAI,CAAC,GAAGC,KAAI,OAAO,IAAI,CAAC;AACvC,iBAAOA,MAAK,OAAOD,OAAM,OAAO,CAAC,IAAIA,OAAM,OAAO,IAAI,CAAC,IAAIC;;;AAG7D,oBAAc,KAAK,gBAAe;AAClC,UAAI,IAAI,OAAO,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,CAAC;AACvC,aAAO,KAAK,OAAO,MAAM,KAAK,OAAO,UAAU,IAAI,MAAM,KAAK,OAAO,aAAa,WAAW,IAAI;IAClG;;AAGK,MAAgB,iBAAhB,cAAuC,cAAa;IACzD,YAAa,YAAoB,aAAqB,YAAkB;AACvE,YAAM,YAAY,aAAa,CAAC,UAAU,CAAC;IAC5C;IAEA,kBAAe;AACd,aAAO;IACR;;;;IAKA,SAAU,OAAe,MAAc,OAAa;AACnD,gBAAU;AACV,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAU,IAAI;IACnC;;IAGA,cAAe,MAAY;AAC1B,UAAI,SAAS,KAAK;AAClB,UAAI,IAAI,OAAO,SAAS;AACxB,eAAS,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG;AAClC,YAAI,OAAO,EAAE,IAAI,MAAM;AACtB,cAAI,KAAK;AACT;;;AAIF,UAAI,YAAY,KAAK,OAAO,KAAK,CAAC;AAClC,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC,GAAG,QAAQ;YAAO,IAAI;;UAAU;AACrD,iBAAO,SAAS,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI,WAAW;YAAO,IAAI,IAAe;;UAAU,IAAI;QACjH,KAAK;AACJ,iBAAO;YAAO,IAAI;;UAAU;;AAE9B,aAAO,KAAK;QAAe;QAAM;QAAG;QAAY,YAAY;;MAAW;IACxE;IAEA,iBAAkB,MAAc,OAAe,OAAiB,SAAiB,OAAa;AAC7F,UAAI,OAAO,KAAK,OAAO,CAAC,GAAG;AAC1B,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,mBAAO;UACR,KAAK,SAAS;AACb,mBAAO,WAAW,QAAQ,WAAW;;AAEvC,eAAO;;AAER,UAAI,QAAQ,KAAK,cAAc,IAAI;AACnC,cAAQ,OAAO;QACd,KAAK,SAAS;AACb,iBAAO,QAAQ,QAAQ;QACxB,KAAK,SAAS;QACd,KAAK,SAAS;AACb,mBAAS,QAAQ;;AAEnB,aAAO,UAAU,QAAQ;IAC1B;IAEA,iBAAkB,MAAc,OAAe,OAAiB,SAAiB,OAAa;AAC7F,UAAI,OAAO,KAAK,OAAO,CAAC,GAAG;AAC1B,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,mBAAO;UACR,KAAK,SAAS;AACb,mBAAO,WAAW,QAAQ,WAAW;;AAEvC,eAAO;;AAER,UAAI,QAAQ,KAAK,cAAc,IAAI;AACnC,UAAI,SAAS,SAAS;AAAO,eAAO,SAAS,QAAQ,SAAS;AAC9D,aAAO,WAAW,QAAQ,WAAW;IACtC;IAEA,kBAAmB,MAAc,OAAe,OAAiB,SAAiB,OAAe,OAAa;AAC7G,UAAI,OAAO,KAAK,OAAO,CAAC,GAAG;AAC1B,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,mBAAO;UACR,KAAK,SAAS;AACb,mBAAO,WAAW,QAAQ,WAAW;;AAEvC,eAAO;;AAER,UAAI,SAAS,SAAS;AAAO,eAAO,SAAS,QAAQ,SAAS;AAC9D,aAAO,WAAW,QAAQ,WAAW;IACtC;IAEA,cAAe,MAAc,OAAe,OAAiB,WAAyB,SAAiB,OAAa;AACnH,YAAM,SAAS,KAAK;AACpB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,mBAAO;UACR,KAAK,SAAS;AACb,mBAAO,WAAW,QAAQ,WAAW;;AAEvC,eAAO;;AAER,UAAI,QAAQ,KAAK,cAAc,IAAI,IAAI;AACvC,UAAI,SAAS,GAAG;AACf,YAAI,SAAS,SAAS;AAAK,iBAAO,UAAU,QAAQ;AACpD,eAAO;;AAGR,UAAI,aAAa,aAAa,QAAQ;AACrC,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,mBAAO,SAAS,KAAK,IAAI,KAAK,IAAI,UAAU,OAAO,KAAK,IAAI,SAAS;UACtE,KAAK,SAAS;UACd,KAAK,SAAS;AACb,mBAAO,WAAW,KAAK,IAAI,KAAK,IAAI,UAAU,OAAO,OAAO,IAAI,WAAW;;aAEvE;AACN,YAAI,IAAI;AACR,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,gBAAI,KAAK,IAAI,KAAK,IAAI,UAAU,OAAO,KAAK;AAC5C,mBAAO,KAAK,QAAQ,KAAK;UAC1B,KAAK,SAAS;UACd,KAAK,SAAS;AACb,gBAAI,KAAK,IAAI,OAAO,IAAI,UAAU,OAAO,KAAK;AAC9C,mBAAO,KAAK,QAAQ,KAAK;;;AAG5B,aAAO,WAAW,QAAQ,SAAS;IACpC;;AAIK,MAAgB,iBAAhB,cAAuC,cAAa;;;IAGzD,YAAa,YAAoB,aAAqB,aAAqB,aAAmB;AAC7F,YAAM,YAAY,aAAa,CAAC,aAAa,WAAW,CAAC;IAC1D;IAEA,kBAAe;AACd,aAAO;IACR;;;;IAKA,SAAU,OAAe,MAAc,QAAgB,QAAc;AACpE,eAAS;AACT,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAW,IAAI;AACnC,WAAK;QAAO,QAAQ;;MAAW,IAAI;IACpC;;AAIK,MAAO,iBAAP,cAA8B,eAAc;IACjD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,SAAS,MAAM,SAAS;AAChE,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAA6B,OAAe,OAAiB,WAAuB;AAC9I,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,KAAK;AAAQ,aAAK,WAAW,KAAK,iBAAiB,MAAM,OAAO,OAAO,KAAK,UAAU,KAAK,KAAK,QAAQ;IAC7G;;AAIK,MAAO,oBAAP,cAAiC,eAAc;IACpD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aACjB,SAAS,IAAI,MAAM,WACnB,SAAS,IAAI,MAAM,SAAS;AAE7B,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK;AAAQ;AAElB,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,iBAAK,IAAI,KAAK,KAAK;AACnB,iBAAK,IAAI,KAAK,KAAK;AACnB;UACD,KAAK,SAAS;AACb,iBAAK,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;AACnC,iBAAK,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK;;AAErC;;AAGD,UAAI,IAAI,GAAG,IAAI;AACf,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK;QAAO,IAAI;;MAAY;AAC5C,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,gBAAM;YAAO,IAAI,IAAe;;UAAW,IAAI,KAAK;AACpD,gBAAM;YAAO,IAAI,IAAe;;UAAW,IAAI,KAAK;AACpD;QACD,KAAK;AACJ,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI;YAAO,IAAI;;UAAW;AAC1B;QACD;AACC,cAAI,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY;;UAAW;AACrE,cAAI,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY,KAAoB;;UAAW;;AAG3F,cAAQ,OAAO;QACd,KAAK,SAAS;AACb,eAAK,IAAI,KAAK,KAAK,IAAI,IAAI;AAC3B,eAAK,IAAI,KAAK,KAAK,IAAI,IAAI;AAC3B;QACD,KAAK,SAAS;QACd,KAAK,SAAS;AACb,eAAK,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;AACvC,eAAK,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;AACvC;QACD,KAAK,SAAS;AACb,eAAK,KAAK,IAAI;AACd,eAAK,KAAK,IAAI;;IAEjB;;AAIK,MAAO,qBAAP,cAAkC,eAAc;IACrD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,IAAI,MAAM,SAAS;AAC3D,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,KAAK;AAAQ,aAAK,IAAI,KAAK,iBAAiB,MAAM,OAAO,OAAO,KAAK,GAAG,KAAK,KAAK,CAAC;IACxF;;AAIK,MAAO,qBAAP,cAAkC,eAAc;IACrD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,IAAI,MAAM,SAAS;AAC3D,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,KAAK;AAAQ,aAAK,IAAI,KAAK,iBAAiB,MAAM,OAAO,OAAO,KAAK,GAAG,KAAK,KAAK,CAAC;IACxF;;AAIK,MAAO,gBAAP,cAA6B,eAAc;IAChD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aACjB,SAAS,SAAS,MAAM,WACxB,SAAS,SAAS,MAAM,SAAS;AAElC,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK;AAAQ;AAElB,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,iBAAK,SAAS,KAAK,KAAK;AACxB,iBAAK,SAAS,KAAK,KAAK;AACxB;UACD,KAAK,SAAS;AACb,iBAAK,WAAW,KAAK,KAAK,SAAS,KAAK,UAAU;AAClD,iBAAK,WAAW,KAAK,KAAK,SAAS,KAAK,UAAU;;AAEpD;;AAGD,UAAI,GAAG;AACP,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK;QAAO,IAAI;;MAAY;AAC5C,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,gBAAM;YAAO,IAAI,IAAe;;UAAW,IAAI,KAAK;AACpD,gBAAM;YAAO,IAAI,IAAe;;UAAW,IAAI,KAAK;AACpD;QACD,KAAK;AACJ,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI;YAAO,IAAI;;UAAW;AAC1B;QACD;AACC,cAAI,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY;;UAAW;AACrE,cAAI,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY,KAAoB;;UAAW;;AAE3F,WAAK,KAAK,KAAK;AACf,WAAK,KAAK,KAAK;AAEf,UAAI,SAAS,GAAG;AACf,YAAI,SAAS,SAAS,KAAK;AAC1B,eAAK,UAAU,IAAI,KAAK,KAAK;AAC7B,eAAK,UAAU,IAAI,KAAK,KAAK;eACvB;AACN,eAAK,SAAS;AACd,eAAK,SAAS;;aAET;AACN,YAAI,KAAK,GAAG,KAAK;AACjB,YAAI,aAAa,aAAa,QAAQ;AACrC,kBAAQ,OAAO;YACd,KAAK,SAAS;AACb,mBAAK,KAAK,KAAK;AACf,mBAAK,KAAK,KAAK;AACf,mBAAK,SAAS,MAAM,KAAK,IAAI,CAAC,IAAI,UAAU,OAAO,EAAE,IAAI,MAAM;AAC/D,mBAAK,SAAS,MAAM,KAAK,IAAI,CAAC,IAAI,UAAU,OAAO,EAAE,IAAI,MAAM;AAC/D;YACD,KAAK,SAAS;YACd,KAAK,SAAS;AACb,mBAAK,KAAK;AACV,mBAAK,KAAK;AACV,mBAAK,SAAS,MAAM,KAAK,IAAI,CAAC,IAAI,UAAU,OAAO,EAAE,IAAI,MAAM;AAC/D,mBAAK,SAAS,MAAM,KAAK,IAAI,CAAC,IAAI,UAAU,OAAO,EAAE,IAAI,MAAM;AAC/D;YACD,KAAK,SAAS;AACb,mBAAK,WAAW,IAAI,KAAK,KAAK,UAAU;AACxC,mBAAK,WAAW,IAAI,KAAK,KAAK,UAAU;;eAEpC;AACN,kBAAQ,OAAO;YACd,KAAK,SAAS;AACb,mBAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,UAAU,OAAO,CAAC;AACpD,mBAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,UAAU,OAAO,CAAC;AACpD,mBAAK,SAAS,MAAM,IAAI,MAAM;AAC9B,mBAAK,SAAS,MAAM,IAAI,MAAM;AAC9B;YACD,KAAK,SAAS;YACd,KAAK,SAAS;AACb,mBAAK,KAAK,IAAI,KAAK,MAAM,IAAI,UAAU,OAAO,CAAC;AAC/C,mBAAK,KAAK,IAAI,KAAK,MAAM,IAAI,UAAU,OAAO,CAAC;AAC/C,mBAAK,SAAS,MAAM,IAAI,MAAM;AAC9B,mBAAK,SAAS,MAAM,IAAI,MAAM;AAC9B;YACD,KAAK,SAAS;AACb,mBAAK,WAAW,IAAI,KAAK,KAAK,UAAU;AACxC,mBAAK,WAAW,IAAI,KAAK,KAAK,UAAU;;;;IAI7C;;AAIK,MAAO,iBAAP,cAA8B,eAAc;IACjD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,SAAS,MAAM,SAAS;AAChE,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,KAAK;AAAQ,aAAK,SAAS,KAAK,cAAc,MAAM,OAAO,OAAO,WAAW,KAAK,QAAQ,KAAK,KAAK,MAAM;IAC/G;;AAIK,MAAO,iBAAP,cAA8B,eAAc;IACjD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,SAAS,MAAM,SAAS;AAChE,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,KAAK;AAAQ,aAAK,SAAS,KAAK,cAAc,MAAM,OAAO,OAAO,WAAW,KAAK,QAAQ,KAAK,KAAK,MAAM;IAC/G;;AAIK,MAAO,gBAAP,cAA6B,eAAc;IAChD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aACjB,SAAS,SAAS,MAAM,WACxB,SAAS,SAAS,MAAM,SAAS;AAElC,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK;AAAQ;AAElB,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,iBAAK,SAAS,KAAK,KAAK;AACxB,iBAAK,SAAS,KAAK,KAAK;AACxB;UACD,KAAK,SAAS;AACb,iBAAK,WAAW,KAAK,KAAK,SAAS,KAAK,UAAU;AAClD,iBAAK,WAAW,KAAK,KAAK,SAAS,KAAK,UAAU;;AAEpD;;AAGD,UAAI,IAAI,GAAG,IAAI;AACf,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK;QAAO,IAAI;;MAAY;AAC5C,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,gBAAM;YAAO,IAAI,IAAe;;UAAW,IAAI,KAAK;AACpD,gBAAM;YAAO,IAAI,IAAe;;UAAW,IAAI,KAAK;AACpD;QACD,KAAK;AACJ,cAAI;YAAO,IAAI;;UAAW;AAC1B,cAAI;YAAO,IAAI;;UAAW;AAC1B;QACD;AACC,cAAI,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY;;UAAW;AACrE,cAAI,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY,KAAoB;;UAAW;;AAG3F,cAAQ,OAAO;QACd,KAAK,SAAS;AACb,eAAK,SAAS,KAAK,KAAK,SAAS,IAAI;AACrC,eAAK,SAAS,KAAK,KAAK,SAAS,IAAI;AACrC;QACD,KAAK,SAAS;QACd,KAAK,SAAS;AACb,eAAK,WAAW,KAAK,KAAK,SAAS,IAAI,KAAK,UAAU;AACtD,eAAK,WAAW,KAAK,KAAK,SAAS,IAAI,KAAK,UAAU;AACtD;QACD,KAAK,SAAS;AACb,eAAK,UAAU,IAAI;AACnB,eAAK,UAAU,IAAI;;IAEtB;;AAIK,MAAO,iBAAP,cAA8B,eAAc;IACjD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,SAAS,MAAM,SAAS;AAChE,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,KAAK;AAAQ,aAAK,SAAS,KAAK,iBAAiB,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,KAAK,MAAM;IACvG;;AAIK,MAAO,iBAAP,cAA8B,eAAc;IACjD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,SAAS,MAAM,SAAS;AAChE,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,KAAK;AAAQ,aAAK,SAAS,KAAK,iBAAiB,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,KAAK,MAAM;IACvG;;AAGK,MAAO,kBAAP,cAA+B,SAAQ;IAC5C,YAAY;IAEZ,YAAa,YAAoB,WAAiB;AACjD,YAAM,YAAY,CAAC,SAAS,UAAU,MAAM,SAAS,CAAC;AACtD,WAAK,YAAY;IAClB;IAEO,kBAAe;AACrB,aAAO;IACR;;;;IAKO,SAAU,OAAe,MAAc,SAAgB;AAC7D,eAAS;AACT,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAY,IAAI;IACrC;IAEO,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AAC9I,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK;AAAQ;AAElB,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,YAAI,SAAS,SAAS,SAAS,SAAS,SAAS;AAAO,eAAK,UAAU,KAAK,KAAK;AACjF;;AAED,WAAK,UAAU,KAAK;QAAO,SAAS;UAAO;UAAQ;UAAM;;QAAY,IAAI;;MAAY;IACtF;;AAIK,MAAO,eAAP,cAA4B,cAAa;IAC9C,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa;QAC9B,SAAS,MAAM,MAAM;QACrB,SAAS,QAAQ,MAAM;OACvB;AACD,WAAK,YAAY;IAClB;IAEA,kBAAe;AACd,aAAO;IACR;;IAGA,SAAU,OAAe,MAAc,GAAW,GAAW,GAAW,GAAS;AAChF,eAAS;AACT,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;IAC/B;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,KAAK;AAAQ;AAEvB,UAAI,SAAS,KAAK;AAClB,UAAI,QAAQ,KAAK;AACjB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,YAAI,QAAQ,KAAK,KAAK;AACtB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,kBAAM,aAAa,KAAK;AACxB;UACD,KAAK,SAAS;AACb,kBAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM,KAAK,QAAQ,MAAM,IAAI,MAAM,KAAK,QACxF,MAAM,IAAI,MAAM,KAAK,KAAK;;AAE9B;;AAGD,UAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC7B,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK;QAAO,IAAI;;MAAY;AAC5C,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C;QACD,KAAK;AACJ,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB;QACD;AACC,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY;;UAAW;AAChE,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB;;UAAW;AACpF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;AACxF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;;AAE1F,UAAI,SAAS;AACZ,cAAM,IAAI,GAAG,GAAG,GAAG,CAAC;WAChB;AACJ,YAAI,SAAS,SAAS;AAAO,gBAAM,aAAa,KAAK,KAAK,KAAK;AAC/D,cAAM,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK;;IAEtG;;AAIK,MAAO,cAAP,cAA2B,cAAa;IAC7C,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa;QAC9B,SAAS,MAAM,MAAM;OACrB;AACD,WAAK,YAAY;IAClB;IAEA,kBAAe;AACd,aAAO;IACR;;IAGA,SAAU,OAAe,MAAc,GAAW,GAAW,GAAS;AACrE,gBAAU;AACV,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;IAC/B;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,KAAK;AAAQ;AAEvB,UAAI,SAAS,KAAK;AAClB,UAAI,QAAQ,KAAK;AACjB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,YAAI,QAAQ,KAAK,KAAK;AACtB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,kBAAM,IAAI,MAAM;AAChB,kBAAM,IAAI,MAAM;AAChB,kBAAM,IAAI,MAAM;AAChB;UACD,KAAK,SAAS;AACb,kBAAM,MAAM,MAAM,IAAI,MAAM,KAAK;AACjC,kBAAM,MAAM,MAAM,IAAI,MAAM,KAAK;AACjC,kBAAM,MAAM,MAAM,IAAI,MAAM,KAAK;;AAEnC;;AAGD,UAAI,IAAI,GAAG,IAAI,GAAG,IAAI;AACtB,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK,OAAO,KAAK,CAAC;AAClC,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C;QACD,KAAK;AACJ,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB;QACD;AACC,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY;;UAAW;AAChE,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB;;UAAW;AACpF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;;AAE1F,UAAI,SAAS,GAAG;AACf,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;aACJ;AACN,YAAI,SAAS,SAAS,OAAO;AAC5B,cAAI,QAAQ,KAAK,KAAK;AACtB,gBAAM,IAAI,MAAM;AAChB,gBAAM,IAAI,MAAM;AAChB,gBAAM,IAAI,MAAM;;AAEjB,cAAM,MAAM,IAAI,MAAM,KAAK;AAC3B,cAAM,MAAM,IAAI,MAAM,KAAK;AAC3B,cAAM,MAAM,IAAI,MAAM,KAAK;;IAE7B;;AAIK,MAAO,gBAAP,cAA6B,eAAc;IAChD,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa,SAAS,QAAQ,MAAM,SAAS;AAC/D,WAAK,YAAY;IAClB;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,KAAK;AAAQ;AAEvB,UAAI,QAAQ,KAAK;AACjB,UAAI,OAAO,KAAK,OAAO,CAAC,GAAG;AAC1B,YAAI,QAAQ,KAAK,KAAK;AACtB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,kBAAM,IAAI,MAAM;AAChB;UACD,KAAK,SAAS;AACb,kBAAM,MAAM,MAAM,IAAI,MAAM,KAAK;;AAEnC;;AAGD,UAAI,IAAI,KAAK,cAAc,IAAI;AAC/B,UAAI,SAAS;AACZ,cAAM,IAAI;WACN;AACJ,YAAI,SAAS,SAAS;AAAO,gBAAM,IAAI,KAAK,KAAK,MAAM;AACvD,cAAM,MAAM,IAAI,MAAM,KAAK;;IAE7B;;AAIK,MAAO,gBAAP,cAA6B,cAAa;IAC/C,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa;QAC9B,SAAS,MAAM,MAAM;QACrB,SAAS,QAAQ,MAAM;QACvB,SAAS,OAAO,MAAM;OACtB;AACD,WAAK,YAAY;IAClB;IAEA,kBAAe;AACd,aAAO;IACR;;IAGA,SAAU,OAAe,MAAc,GAAW,GAAW,GAAW,GAAW,IAAY,IAAY,IAAU;AACpH,gBAAU;AACV,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAO,IAAI;AAC/B,WAAK;QAAO,QAAQ;;MAAO,IAAI;AAC/B,WAAK;QAAO,QAAQ;;MAAO,IAAI;IAChC;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,KAAK;AAAQ;AAEvB,UAAI,SAAS,KAAK;AAClB,UAAI,QAAQ,KAAK,OAAO,OAAO,KAAK;AACpC,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,YAAI,aAAa,KAAK,KAAK,OAAO,YAAY,KAAK,KAAK;AACxD,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,kBAAM,aAAa,UAAU;AAC7B,iBAAK,IAAI,UAAU;AACnB,iBAAK,IAAI,UAAU;AACnB,iBAAK,IAAI,UAAU;AACnB;UACD,KAAK,SAAS;AACb,kBAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,WAAW,IAAI,MAAM,KAAK,QAAQ,WAAW,IAAI,MAAM,KAAK,QACvG,WAAW,IAAI,MAAM,KAAK,KAAK;AACjC,iBAAK,MAAM,UAAU,IAAI,KAAK,KAAK;AACnC,iBAAK,MAAM,UAAU,IAAI,KAAK,KAAK;AACnC,iBAAK,MAAM,UAAU,IAAI,KAAK,KAAK;;AAErC;;AAGD,UAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AACrD,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK,OAAO,KAAK,CAAC;AAClC,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,iBAAO;YAAO,IAAI,IAAe;;UAAO,IAAI,MAAM;AAClD,iBAAO;YAAO,IAAI,IAAe;;UAAO,IAAI,MAAM;AAClD,iBAAO;YAAO,IAAI,IAAe;;UAAO,IAAI,MAAM;AAClD;QACD,KAAK;AACJ,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB;QACD;AACC,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY;;UAAW;AAChE,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB;;UAAW;AACpF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;AACxF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;AACxF,eAAK,KAAK;YAAe;YAAM;YAAG;YAAS,YAAY,KAAoB,IAAI;;UAAW;AAC1F,eAAK,KAAK;YAAe;YAAM;YAAG;YAAS,YAAY,KAAoB,IAAI;;UAAW;AAC1F,eAAK,KAAK;YAAe;YAAM;YAAG;YAAS,YAAY,KAAoB,IAAI;;UAAW;;AAG5F,UAAI,SAAS,GAAG;AACf,cAAM,IAAI,GAAG,GAAG,GAAG,CAAC;AACpB,aAAK,IAAI;AACT,aAAK,IAAI;AACT,aAAK,IAAI;aACH;AACN,YAAI,SAAS,SAAS,OAAO;AAC5B,gBAAM,aAAa,KAAK,KAAK,KAAK;AAClC,cAAI,YAAY,KAAK,KAAK;AAC1B,eAAK,IAAI,UAAU;AACnB,eAAK,IAAI,UAAU;AACnB,eAAK,IAAI,UAAU;;AAEpB,cAAM,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK;AACpG,aAAK,MAAM,KAAK,KAAK,KAAK;AAC1B,aAAK,MAAM,KAAK,KAAK,KAAK;AAC1B,aAAK,MAAM,KAAK,KAAK,KAAK;;IAE5B;;AAIK,MAAO,eAAP,cAA4B,cAAa;IAC9C,YAAY;IAEZ,YAAa,YAAoB,aAAqB,WAAiB;AACtE,YAAM,YAAY,aAAa;QAC9B,SAAS,MAAM,MAAM;QACrB,SAAS,OAAO,MAAM;OACtB;AACD,WAAK,YAAY;IAClB;IAEA,kBAAe;AACd,aAAO;IACR;;IAGA,SAAU,OAAe,MAAc,GAAW,GAAW,GAAW,IAAY,IAAY,IAAU;AACzG,eAAS;AACT,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAM,IAAI;AAC9B,WAAK;QAAO,QAAQ;;MAAO,IAAI;AAC/B,WAAK;QAAO,QAAQ;;MAAO,IAAI;AAC/B,WAAK;QAAO,QAAQ;;MAAO,IAAI;IAChC;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,KAAK;AAAQ;AAEvB,UAAI,SAAS,KAAK;AAClB,UAAI,QAAQ,KAAK,OAAO,OAAO,KAAK;AACpC,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,YAAI,aAAa,KAAK,KAAK,OAAO,YAAY,KAAK,KAAK;AACxD,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,kBAAM,IAAI,WAAW;AACrB,kBAAM,IAAI,WAAW;AACrB,kBAAM,IAAI,WAAW;AACrB,iBAAK,IAAI,UAAU;AACnB,iBAAK,IAAI,UAAU;AACnB,iBAAK,IAAI,UAAU;AACnB;UACD,KAAK,SAAS;AACb,kBAAM,MAAM,WAAW,IAAI,MAAM,KAAK;AACtC,kBAAM,MAAM,WAAW,IAAI,MAAM,KAAK;AACtC,kBAAM,MAAM,WAAW,IAAI,MAAM,KAAK;AACtC,iBAAK,MAAM,UAAU,IAAI,KAAK,KAAK;AACnC,iBAAK,MAAM,UAAU,IAAI,KAAK,KAAK;AACnC,iBAAK,MAAM,UAAU,IAAI,KAAK,KAAK;;AAErC;;AAGD,UAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AACrD,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK;QAAO,IAAI;;MAAY;AAC5C,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,iBAAO;YAAO,IAAI,IAAe;;UAAO,IAAI,MAAM;AAClD,iBAAO;YAAO,IAAI,IAAe;;UAAO,IAAI,MAAM;AAClD,iBAAO;YAAO,IAAI,IAAe;;UAAO,IAAI,MAAM;AAClD;QACD,KAAK;AACJ,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB,eAAK;YAAO,IAAI;;UAAO;AACvB;QACD;AACC,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY;;UAAW;AAChE,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB;;UAAW;AACpF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;AACxF,eAAK,KAAK;YAAe;YAAM;YAAG;YAAS,YAAY,KAAoB,IAAI;;UAAW;AAC1F,eAAK,KAAK;YAAe;YAAM;YAAG;YAAS,YAAY,KAAoB,IAAI;;UAAW;AAC1F,eAAK,KAAK;YAAe;YAAM;YAAG;YAAS,YAAY,KAAoB,IAAI;;UAAW;;AAG5F,UAAI,SAAS,GAAG;AACf,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,aAAK,IAAI;AACT,aAAK,IAAI;AACT,aAAK,IAAI;aACH;AACN,YAAI,SAAS,SAAS,OAAO;AAC5B,cAAI,aAAa,KAAK,KAAK,OAAO,YAAY,KAAK,KAAK;AACxD,gBAAM,IAAI,WAAW;AACrB,gBAAM,IAAI,WAAW;AACrB,gBAAM,IAAI,WAAW;AACrB,eAAK,IAAI,UAAU;AACnB,eAAK,IAAI,UAAU;AACnB,eAAK,IAAI,UAAU;;AAEpB,cAAM,MAAM,IAAI,MAAM,KAAK;AAC3B,cAAM,MAAM,IAAI,MAAM,KAAK;AAC3B,cAAM,MAAM,IAAI,MAAM,KAAK;AAC3B,aAAK,MAAM,KAAK,KAAK,KAAK;AAC1B,aAAK,MAAM,KAAK,KAAK,KAAK;AAC1B,aAAK,MAAM,KAAK,KAAK,KAAK;;IAE5B;;AAIK,MAAO,qBAAP,cAAkC,SAAQ;IAC/C,YAAY;;IAGZ;IAEA,YAAa,YAAoB,WAAiB;AACjD,YAAM,YAAY;QACjB,SAAS,aAAa,MAAM;OAC5B;AACD,WAAK,YAAY;AACjB,WAAK,kBAAkB,IAAI,MAAc,UAAU;IACpD;IAEA,gBAAa;AACZ,aAAO,KAAK,OAAO;IACpB;;IAGA,SAAU,OAAe,MAAc,gBAA6B;AACnE,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK,gBAAgB,KAAK,IAAI;IAC/B;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,KAAK;AAAQ;AAEvB,UAAI,aAAa,aAAa,QAAQ;AACrC,YAAI,SAAS,SAAS;AAAO,eAAK,cAAc,UAAU,MAAM,KAAK,KAAK,cAAc;AACxF;;AAGD,UAAI,OAAO,KAAK,OAAO,CAAC,GAAG;AAC1B,YAAI,SAAS,SAAS,SAAS,SAAS,SAAS;AAAO,eAAK,cAAc,UAAU,MAAM,KAAK,KAAK,cAAc;AACnH;;AAGD,WAAK,cAAc,UAAU,MAAM,KAAK,gBAAgB,SAAS,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC;IAC7F;IAEA,cAAe,UAAoB,MAAY,gBAA6B;AAC3E,WAAK,cAAc,CAAC,iBAAiB,OAAO,SAAS,cAAc,KAAK,WAAW,cAAc,CAAC;IACnG;;AAIK,MAAO,iBAAP,cAA8B,cAAa;IAChD,YAAY;;IAGZ;;IAGA;IAEA,YAAa,YAAoB,aAAqB,WAAmB,YAA4B;AACpG,YAAM,YAAY,aAAa;QAC9B,SAAS,SAAS,MAAM,YAAY,MAAM,WAAW;OACrD;AACD,WAAK,YAAY;AACjB,WAAK,aAAa;AAClB,WAAK,WAAW,IAAI,MAAuB,UAAU;IACtD;IAEA,gBAAa;AACZ,aAAO,KAAK,OAAO;IACpB;;;IAIA,SAAU,OAAe,MAAc,UAAyB;AAC/D,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK,SAAS,KAAK,IAAI;IACxB;;;IAIA,UAAW,QAAgB,OAAe,OAAe,OAAe,QAAgB,KAAa,KAAa,KACjH,KAAa,OAAe,QAAc;AAC1C,UAAI,SAAS,KAAK;AAClB,UAAI,IAAI,KAAK,cAAa,IAAK,SAAS;AACxC,UAAI,SAAS;AAAG,eAAO,KAAK,IAAI,IAAc;AAC9C,UAAI,QAAQ,QAAQ,MAAM,IAAI,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM;AACrE,UAAI,SAAS,MAAM,OAAO,IAAI,QAAQ,SAAS,MAAO,QAAQ,MAAM,MAAM,cAAc;AACxF,UAAI,MAAM,OAAO,IAAI,MAAM,MAAM,OAAO,IAAI;AAC5C,UAAI,MAAM,MAAM,SAAS,MAAM,OAAO,OAAO,YAAY,KAAK,MAAM,MAAM,OAAO,OAAO;AACxF,UAAI,IAAI,QAAQ,IAAI,IAAI;AACxB,eAAS,IAAI,IAAI,IAAmB,IAAI,GAAG,KAAK,GAAG;AAClD,eAAO,CAAC,IAAI;AACZ,eAAO,IAAI,CAAC,IAAI;AAChB,cAAM;AACN,cAAM;AACN,eAAO;AACP,eAAO;AACP,aAAK;AACL,aAAK;;IAEP;IAEA,gBAAiB,MAAc,OAAa;AAC3C,UAAI,SAAS,KAAK;AAClB,UAAI,IAAI,OAAO,KAAK;AACpB,cAAQ,GAAG;QACV,KAAK;AACJ,cAAID,KAAI,KAAK,OAAO,KAAK;AACzB,kBAAQ,OAAOA,OAAM,KAAK,OAAO,QAAQ,KAAK,gBAAe,CAAE,IAAIA;QACpE,KAAK;AACJ,iBAAO;;AAET,WAAK;AACL,UAAI,OAAO,CAAC,IAAI,MAAM;AACrB,YAAIA,KAAI,KAAK,OAAO,KAAK;AACzB,eAAO,OAAO,IAAI,CAAC,KAAK,OAAOA,OAAM,OAAO,CAAC,IAAIA;;AAElD,UAAI,IAAI,IAAI;AACZ,WAAK,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;AAC3B,YAAI,OAAO,CAAC,KAAK,MAAM;AACtB,cAAIA,KAAI,OAAO,IAAI,CAAC,GAAGC,KAAI,OAAO,IAAI,CAAC;AACvC,iBAAOA,MAAK,OAAOD,OAAM,OAAO,CAAC,IAAIA,OAAM,OAAO,IAAI,CAAC,IAAIC;;;AAG7D,UAAI,IAAI,OAAO,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,CAAC;AACvC,aAAO,KAAK,IAAI,MAAM,OAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,gBAAe,CAAE,IAAI;IAClF;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,OAAa,SAAS,MAAM,KAAK,SAAS;AAC9C,UAAI,CAAC,KAAK,KAAK;AAAQ;AACvB,UAAI,iBAAoC,KAAK,cAAa;AAC1D,UAAI,CAAC;AAAgB;AACrB,UAAI,EAAE,0BAA0B,qBAAwC,eAAgB,sBAAsB,KAAK;AAAY;AAE/H,UAAI,SAAwB,KAAK;AACjC,UAAI,OAAO,UAAU;AAAG,gBAAQ,SAAS;AAEzC,UAAI,WAAW,KAAK;AACpB,UAAI,cAAc,SAAS,CAAC,EAAE;AAE9B,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,mBAAO,SAAS;AAChB;UACD,KAAK,SAAS;AACb,gBAAI,SAAS,GAAG;AACf,qBAAO,SAAS;AAChB;;AAED,mBAAO,SAAS;AAChB,gBAAI,mBAAqC;AACzC,gBAAI,CAAC,iBAAiB,OAAO;AAE5B,kBAAI,gBAAgB,iBAAiB;AACrC,uBAAS,IAAI,GAAG,IAAI,aAAa;AAChC,uBAAO,CAAC,MAAM,cAAc,CAAC,IAAI,OAAO,CAAC,KAAK;mBACzC;AAEN,sBAAQ,IAAI;AACZ,uBAAS,IAAI,GAAG,IAAI,aAAa;AAChC,uBAAO,CAAC,KAAK;;;AAGjB;;AAGD,aAAO,SAAS;AAChB,UAAI,QAAQ,OAAO,OAAO,SAAS,CAAC,GAAG;AACtC,YAAI,eAAe,SAAS,OAAO,SAAS,CAAC;AAC7C,YAAI,SAAS,GAAG;AACf,cAAI,SAAS,SAAS,KAAK;AAC1B,gBAAI,mBAAmB;AACvB,gBAAI,CAAC,iBAAiB,OAAO;AAE5B,kBAAI,gBAAgB,iBAAiB;AACrC,uBAASC,KAAI,GAAGA,KAAI,aAAaA;AAChC,uBAAOA,EAAC,KAAK,aAAaA,EAAC,IAAI,cAAcA,EAAC;mBACzC;AAEN,uBAASA,KAAI,GAAGA,KAAI,aAAaA;AAChC,uBAAOA,EAAC,KAAK,aAAaA,EAAC;;;AAG7B,kBAAM,UAAU,cAAc,GAAG,QAAQ,GAAG,WAAW;eAClD;AACN,kBAAQ,OAAO;YACd,KAAK,SAAS,OAAO;AACpB,kBAAIC,oBAAmB;AACvB,kBAAI,CAACA,kBAAiB,OAAO;AAE5B,oBAAI,gBAAgBA,kBAAiB;AACrC,yBAASD,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,sBAAI,QAAQ,cAAcA,EAAC;AAC3B,yBAAOA,EAAC,IAAI,SAAS,aAAaA,EAAC,IAAI,SAAS;;qBAE3C;AAEN,yBAASA,KAAI,GAAGA,KAAI,aAAaA;AAChC,yBAAOA,EAAC,IAAI,aAAaA,EAAC,IAAI;;AAEhC;;YAED,KAAK,SAAS;YACd,KAAK,SAAS;AACb,uBAASA,KAAI,GAAGA,KAAI,aAAaA;AAChC,uBAAOA,EAAC,MAAM,aAAaA,EAAC,IAAI,OAAOA,EAAC,KAAK;AAC9C;YACD,KAAK,SAAS;AACb,kBAAI,mBAAmB;AACvB,kBAAI,CAAC,iBAAiB,OAAO;AAE5B,oBAAI,gBAAgB,iBAAiB;AACrC,yBAASA,KAAI,GAAGA,KAAI,aAAaA;AAChC,yBAAOA,EAAC,MAAM,aAAaA,EAAC,IAAI,cAAcA,EAAC,KAAK;qBAC/C;AAEN,yBAASA,KAAI,GAAGA,KAAI,aAAaA;AAChC,yBAAOA,EAAC,KAAK,aAAaA,EAAC,IAAI;;;;AAIpC;;AAID,UAAI,QAAQ,SAAS,QAAQ,QAAQ,IAAI;AACzC,UAAI,UAAU,KAAK,gBAAgB,MAAM,KAAK;AAC9C,UAAI,eAAe,SAAS,KAAK;AACjC,UAAI,eAAe,SAAS,QAAQ,CAAC;AAErC,UAAI,SAAS,GAAG;AACf,YAAI,SAAS,SAAS,KAAK;AAC1B,cAAI,mBAAmB;AACvB,cAAI,CAAC,iBAAiB,OAAO;AAE5B,gBAAI,gBAAgB,iBAAiB;AACrC,qBAASA,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,kBAAI,OAAO,aAAaA,EAAC;AACzB,qBAAOA,EAAC,KAAK,QAAQ,aAAaA,EAAC,IAAI,QAAQ,UAAU,cAAcA,EAAC;;iBAEnE;AAEN,qBAASA,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,kBAAI,OAAO,aAAaA,EAAC;AACzB,qBAAOA,EAAC,KAAK,QAAQ,aAAaA,EAAC,IAAI,QAAQ;;;eAG3C;AACN,mBAASA,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,gBAAI,OAAO,aAAaA,EAAC;AACzB,mBAAOA,EAAC,IAAI,QAAQ,aAAaA,EAAC,IAAI,QAAQ;;;aAG1C;AACN,gBAAQ,OAAO;UACd,KAAK,SAAS,OAAO;AACpB,gBAAIC,oBAAmB;AACvB,gBAAI,CAACA,kBAAiB,OAAO;AAE5B,kBAAI,gBAAgBA,kBAAiB;AACrC,uBAASD,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,oBAAI,OAAO,aAAaA,EAAC,GAAG,QAAQ,cAAcA,EAAC;AACnD,uBAAOA,EAAC,IAAI,SAAS,QAAQ,aAAaA,EAAC,IAAI,QAAQ,UAAU,SAAS;;mBAErE;AAEN,uBAASA,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,oBAAI,OAAO,aAAaA,EAAC;AACzB,uBAAOA,EAAC,KAAK,QAAQ,aAAaA,EAAC,IAAI,QAAQ,WAAW;;;AAG5D;;UAED,KAAK,SAAS;UACd,KAAK,SAAS;AACb,qBAASA,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,kBAAI,OAAO,aAAaA,EAAC;AACzB,qBAAOA,EAAC,MAAM,QAAQ,aAAaA,EAAC,IAAI,QAAQ,UAAU,OAAOA,EAAC,KAAK;;AAExE;UACD,KAAK,SAAS;AACb,gBAAI,mBAAmB;AACvB,gBAAI,CAAC,iBAAiB,OAAO;AAE5B,kBAAI,gBAAgB,iBAAiB;AACrC,uBAASA,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,oBAAI,OAAO,aAAaA,EAAC;AACzB,uBAAOA,EAAC,MAAM,QAAQ,aAAaA,EAAC,IAAI,QAAQ,UAAU,cAAcA,EAAC,KAAK;;mBAEzE;AAEN,uBAASA,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACrC,oBAAI,OAAO,aAAaA,EAAC;AACzB,uBAAOA,EAAC,MAAM,QAAQ,aAAaA,EAAC,IAAI,QAAQ,WAAW;;;;;IAKjE;;AAIK,MAAO,gBAAP,MAAO,uBAAsB,SAAQ;IAC1C,OAAO,cAAc,CAAC,KAAK,SAAS,KAAK;;IAGzC;IAEA,YAAa,YAAkB;AAC9B,YAAM,YAAY,eAAc,WAAW;AAE3C,WAAK,SAAS,IAAI,MAAa,UAAU;IAC1C;IAEA,gBAAa;AACZ,aAAO,KAAK,OAAO;IACpB;;IAGA,SAAU,OAAe,OAAY;AACpC,WAAK,OAAO,KAAK,IAAI,MAAM;AAC3B,WAAK,OAAO,KAAK,IAAI;IACtB;;IAGA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,CAAC;AAAa;AAElB,UAAI,SAAS,KAAK;AAClB,UAAI,aAAa,KAAK,OAAO;AAE7B,UAAI,WAAW,MAAM;AACpB,aAAK,MAAM,UAAU,UAAU,OAAO,WAAW,aAAa,OAAO,OAAO,SAAS;AACrF,mBAAW;iBACD,YAAY,OAAO,aAAa,CAAC;AAC3C;AACD,UAAI,OAAO,OAAO,CAAC;AAAG;AAEtB,UAAI,IAAI;AACR,UAAI,WAAW,OAAO,CAAC;AACtB,YAAI;WACA;AACJ,YAAI,SAAS,QAAQ,QAAQ,QAAQ,IAAI;AACzC,YAAI,YAAY,OAAO,CAAC;AACxB,eAAO,IAAI,GAAG;AACb,cAAI,OAAO,IAAI,CAAC,KAAK;AAAW;AAChC;;;AAGF,aAAO,IAAI,cAAc,QAAQ,OAAO,CAAC,GAAG;AAC3C,oBAAY,KAAK,KAAK,OAAO,CAAC,CAAC;IACjC;;AAIK,MAAO,oBAAP,MAAO,2BAA0B,SAAQ;IAC9C,OAAO,cAAc,CAAC,KAAK,SAAS,SAAS;;IAG7C;IAEA,YAAa,YAAkB;AAC9B,YAAM,YAAY,mBAAkB,WAAW;AAC/C,WAAK,aAAa,IAAI,MAA4B,UAAU;IAC7D;IAEA,gBAAa;AACZ,aAAO,KAAK,OAAO;IACpB;;;;IAKA,SAAU,OAAe,MAAc,WAA+B;AACrE,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK,WAAW,KAAK,IAAI;IAC1B;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,aAAa,aAAa,QAAQ;AACrC,YAAI,SAAS,SAAS;AAAO,gBAAM,UAAU,SAAS,OAAO,GAAG,SAAS,WAAW,GAAG,SAAS,MAAM,MAAM;AAC5G;;AAGD,UAAI,OAAO,KAAK,OAAO,CAAC,GAAG;AAC1B,YAAI,SAAS,SAAS,SAAS,SAAS,SAAS;AAAO,gBAAM,UAAU,SAAS,OAAO,GAAG,SAAS,WAAW,GAAG,SAAS,MAAM,MAAM;AACvI;;AAGD,UAAI,MAAM,SAAS,QAAQ,KAAK,QAAQ,IAAI;AAC5C,UAAI,wBAAwB,KAAK,WAAW,GAAG;AAC/C,UAAI,CAAC;AACJ,cAAM,UAAU,SAAS,OAAO,GAAG,SAAS,WAAW,GAAG,SAAS,MAAM,MAAM;WAC3E;AACJ,YAAI,YAAyB,SAAS;AACtC,YAAI,QAAqB,SAAS;AAClC,iBAAS,IAAI,GAAG,IAAI,sBAAsB,QAAQ,IAAI,GAAG;AACxD,oBAAU,CAAC,IAAI,MAAM,sBAAsB,CAAC,CAAC;;IAEhD;;AAKK,MAAO,uBAAP,cAAoC,cAAa;;IAEtD,kBAA0B;IAE1B,YAAa,YAAoB,aAAqB,mBAAyB;AAC9E,YAAM,YAAY,aAAa;QAC9B,SAAS,eAAe,MAAM;OAC9B;AACD,WAAK,kBAAkB;IACxB;IAEA,kBAAe;AACd,aAAO;IACR;;IAGA,SAAU,OAAe,MAAc,KAAa,UAAkB,eAAuB,UAAmB,SAAgB;AAC/H,eAAS;AACT,WAAK,OAAO,KAAK,IAAI;AACrB,WAAK;QAAO,QAAQ;;MAAQ,IAAI;AAChC,WAAK;QAAO,QAAQ;;MAAa,IAAI;AACrC,WAAK;QAAO,QAAQ;;MAAmB,IAAI;AAC3C,WAAK;QAAO,QAAQ;;MAAa,IAAI,WAAW,IAAI;AACpD,WAAK;QAAO,QAAQ;;MAAY,IAAI,UAAU,IAAI;IACnD;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,aAA2B,SAAS,cAAc,KAAK,eAAe;AAC1E,UAAI,CAAC,WAAW;AAAQ;AAExB,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,uBAAW,MAAM,WAAW,KAAK;AACjC,uBAAW,WAAW,WAAW,KAAK;AACtC,uBAAW,gBAAgB,WAAW,KAAK;AAC3C,uBAAW,WAAW,WAAW,KAAK;AACtC,uBAAW,UAAU,WAAW,KAAK;AACrC;UACD,KAAK,SAAS;AACb,uBAAW,QAAQ,WAAW,KAAK,MAAM,WAAW,OAAO;AAC3D,uBAAW,aAAa,WAAW,KAAK,WAAW,WAAW,YAAY;AAC1E,uBAAW,gBAAgB,WAAW,KAAK;AAC3C,uBAAW,WAAW,WAAW,KAAK;AACtC,uBAAW,UAAU,WAAW,KAAK;;AAEvC;;AAGD,UAAI,MAAM,GAAG,WAAW;AACxB,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK;QAAO,IAAI;;MAAY;AAC5C,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,gBAAM;YAAO,IAAI;;UAAQ;AACzB,qBAAW;YAAO,IAAI;;UAAa;AACnC,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,kBAAQ;YAAO,IAAI,IAAe;;UAAQ,IAAI,OAAO;AACrD,uBAAa;YAAO,IAAI,IAAe;;UAAa,IAAI,YAAY;AACpE;QACD,KAAK;AACJ,gBAAM;YAAO,IAAI;;UAAQ;AACzB,qBAAW;YAAO,IAAI;;UAAa;AACnC;QACD;AACC,gBAAM,KAAK;YAAe;YAAM;YAAG;YAAU,YAAY;;UAAW;AACpE,qBAAW,KAAK;YAAe;YAAM;YAAG;YAAe,YAAY,KAAoB;;UAAW;;AAGpG,UAAI,SAAS,SAAS,OAAO;AAC5B,mBAAW,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,KAAK,OAAO;AACrE,mBAAW,WAAW,WAAW,KAAK,YAAY,WAAW,WAAW,KAAK,YAAY;AAEzF,YAAI,aAAa,aAAa,QAAQ;AACrC,qBAAW,gBAAgB,WAAW,KAAK;AAC3C,qBAAW,WAAW,WAAW,KAAK;AACtC,qBAAW,UAAU,WAAW,KAAK;eAC/B;AACN,qBAAW,gBAAgB;YAAO,IAAI;;UAAmB;AACzD,qBAAW,WAAW;YAAO,IAAI;;UAAa,KAAK;AACnD,qBAAW,UAAU;YAAO,IAAI;;UAAY,KAAK;;aAE5C;AACN,mBAAW,QAAQ,MAAM,WAAW,OAAO;AAC3C,mBAAW,aAAa,WAAW,WAAW,YAAY;AAC1D,YAAI,aAAa,aAAa,OAAO;AACpC,qBAAW,gBAAgB;YAAO,IAAI;;UAAmB;AACzD,qBAAW,WAAW;YAAO,IAAI;;UAAa,KAAK;AACnD,qBAAW,UAAU;YAAO,IAAI;;UAAY,KAAK;;;IAGpD;;AAKK,MAAO,8BAAP,cAA2C,cAAa;;IAE7D,kBAA0B;IAE1B,YAAa,YAAoB,aAAqB,0BAAgC;AACrF,YAAM,YAAY,aAAa;QAC9B,SAAS,sBAAsB,MAAM;OACrC;AACD,WAAK,kBAAkB;IACxB;IAEA,kBAAe;AACd,aAAO;IACR;;IAGA,SAAU,OAAe,MAAc,WAAmB,MAAc,MAAc,WAAmB,WACxG,WAAiB;AACjB,UAAI,SAAS,KAAK;AAClB,eAAS;AACT,aAAO,KAAK,IAAI;AAChB;QAAO,QAAQ;;MAAW,IAAI;AAC9B;QAAO,QAAQ;;MAAM,IAAI;AACzB;QAAO,QAAQ;;MAAM,IAAI;AACzB;QAAO,QAAQ;;MAAW,IAAI;AAC9B;QAAO,QAAQ;;MAAW,IAAI;AAC9B;QAAO,QAAQ;;MAAW,IAAI;IAC/B;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,aAAkC,SAAS,qBAAqB,KAAK,eAAe;AACxF,UAAI,CAAC,WAAW;AAAQ;AAExB,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,YAAI,OAAO,WAAW;AACtB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,uBAAW,YAAY,KAAK;AAC5B,uBAAW,OAAO,KAAK;AACvB,uBAAW,OAAO,KAAK;AACvB,uBAAW,YAAY,KAAK;AAC5B,uBAAW,YAAY,KAAK;AAC5B,uBAAW,YAAY,KAAK;AAC5B;UACD,KAAK,SAAS;AACb,uBAAW,cAAc,KAAK,YAAY,WAAW,aAAa;AAClE,uBAAW,SAAS,KAAK,OAAO,WAAW,QAAQ;AACnD,uBAAW,SAAS,KAAK,OAAO,WAAW,QAAQ;AACnD,uBAAW,cAAc,KAAK,YAAY,WAAW,aAAa;AAClE,uBAAW,cAAc,KAAK,YAAY,WAAW,aAAa;AAClE,uBAAW,cAAc,KAAK,YAAY,WAAW,aAAa;;AAEpE;;AAGD,UAAI,QAAQ,GAAG,GAAG,QAAQ,QAAQ;AAClC,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK;QAAO,IAAI;;MAAY;AAC5C,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,mBAAS;YAAO,IAAI;;UAAW;AAC/B,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,mBAAS;YAAO,IAAI;;UAAW;AAC/B,mBAAS;YAAO,IAAI;;UAAW;AAC/B,mBAAS;YAAO,IAAI;;UAAW;AAC/B,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,qBAAW;YAAO,IAAI,IAAe;;UAAW,IAAI,UAAU;AAC9D,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,qBAAW;YAAO,IAAI,IAAe;;UAAW,IAAI,UAAU;AAC9D,qBAAW;YAAO,IAAI,IAAe;;UAAW,IAAI,UAAU;AAC9D,qBAAW;YAAO,IAAI,IAAe;;UAAW,IAAI,UAAU;AAC9D;QACD,KAAK;AACJ,mBAAS;YAAO,IAAI;;UAAW;AAC/B,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,mBAAS;YAAO,IAAI;;UAAW;AAC/B,mBAAS;YAAO,IAAI;;UAAW;AAC/B,mBAAS;YAAO,IAAI;;UAAW;AAC/B;QACD;AACC,mBAAS,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY;;UAAW;AAC1E,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB;;UAAW;AACpF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;AACxF,mBAAS,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY,KAAoB,IAAI;;UAAW;AAClG,mBAAS,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY,KAAoB,IAAI;;UAAW;AAClG,mBAAS,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY,KAAoB,IAAI;;UAAW;;AAGpG,UAAI,SAAS,SAAS,OAAO;AAC5B,YAAI,OAAO,WAAW;AACtB,mBAAW,YAAY,KAAK,aAAa,SAAS,KAAK,aAAa;AACpE,mBAAW,OAAO,KAAK,QAAQ,IAAI,KAAK,QAAQ;AAChD,mBAAW,OAAO,KAAK,QAAQ,IAAI,KAAK,QAAQ;AAChD,mBAAW,YAAY,KAAK,aAAa,SAAS,KAAK,aAAa;AACpE,mBAAW,YAAY,KAAK,aAAa,SAAS,KAAK,aAAa;AACpE,mBAAW,YAAY,KAAK,aAAa,SAAS,KAAK,aAAa;aAC9D;AACN,mBAAW,cAAc,SAAS,WAAW,aAAa;AAC1D,mBAAW,SAAS,IAAI,WAAW,QAAQ;AAC3C,mBAAW,SAAS,IAAI,WAAW,QAAQ;AAC3C,mBAAW,cAAc,SAAS,WAAW,aAAa;AAC1D,mBAAW,cAAc,SAAS,WAAW,aAAa;AAC1D,mBAAW,cAAc,SAAS,WAAW,aAAa;;IAE5D;;AAIK,MAAO,iCAAP,cAA8C,eAAc;;;IAGjE,kBAA0B;IAE1B,YAAa,YAAoB,aAAqB,qBAA2B;AAChF,YAAM,YAAY,aAAa,SAAS,yBAAyB,MAAM,mBAAmB;AAC1F,WAAK,kBAAkB;IACxB;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,aAA6B,SAAS,gBAAgB,KAAK,eAAe;AAC9E,UAAI,WAAW;AACd,mBAAW,WAAW,KAAK,iBAAiB,MAAM,OAAO,OAAO,WAAW,UAAU,WAAW,KAAK,QAAQ;IAC/G;;AAIK,MAAO,gCAAP,cAA6C,eAAc;;;IAGhE,kBAAkB;IAElB,YAAa,YAAoB,aAAqB,qBAA2B;AAChF,YAAM,YAAY,aAAa,SAAS,wBAAwB,MAAM,mBAAmB;AACzF,WAAK,kBAAkB;IACxB;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,aAA6B,SAAS,gBAAgB,KAAK,eAAe;AAC9E,UAAI,WAAW;AACd,mBAAW,UAAU,KAAK,iBAAiB,MAAM,OAAO,OAAO,WAAW,SAAS,WAAW,KAAK,OAAO;IAC5G;;AAKK,MAAO,4BAAP,cAAyC,cAAa;;;IAG3D,kBAAkB;IAElB,YAAa,YAAoB,aAAqB,qBAA2B;AAChF,YAAM,YAAY,aAAa;QAC9B,SAAS,oBAAoB,MAAM;OACnC;AACD,WAAK,kBAAkB;IACxB;IAEA,kBAAe;AACd,aAAO;IACR;IAEA,SAAU,OAAe,MAAc,WAAmB,MAAc,MAAY;AACnF,UAAI,SAAS,KAAK;AAClB,gBAAU;AACV,aAAO,KAAK,IAAI;AAChB;QAAO,QAAQ;;MAAW,IAAI;AAC9B;QAAO,QAAQ;;MAAM,IAAI;AACzB;QAAO,QAAQ;;MAAM,IAAI;IAC1B;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI,aAA6B,SAAS,gBAAgB,KAAK,eAAe;AAC9E,UAAI,CAAC,WAAW;AAAQ;AAExB,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,uBAAW,YAAY,WAAW,KAAK;AACvC,uBAAW,OAAO,WAAW,KAAK;AAClC,uBAAW,OAAO,WAAW,KAAK;AAClC;UACD,KAAK,SAAS;AACb,uBAAW,cAAc,WAAW,KAAK,YAAY,WAAW,aAAa;AAC7E,uBAAW,SAAS,WAAW,KAAK,OAAO,WAAW,QAAQ;AAC9D,uBAAW,SAAS,WAAW,KAAK,OAAO,WAAW,QAAQ;;AAEhE;;AAGD,UAAI,QAAQ,GAAG;AACf,UAAI,IAAI,SAAS;QAAO;QAAQ;QAAM;;MAAY;AAClD,UAAI,YAAY,KAAK,OAAO,KAAK,CAAC;AAClC,cAAQ,WAAW;QAClB,KAAK;AACJ,cAAI,SAAS,OAAO,CAAC;AACrB,mBAAS;YAAO,IAAI;;UAAW;AAC/B,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI,KAAK,OAAO,WAAW;YAAO,IAAI;;UAAY,IAAI;AACtD,qBAAW;YAAO,IAAI,IAAe;;UAAW,IAAI,UAAU;AAC9D,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C,gBAAM;YAAO,IAAI,IAAe;;UAAM,IAAI,KAAK;AAC/C;QACD,KAAK;AACJ,mBAAS;YAAO,IAAI;;UAAW;AAC/B,cAAI;YAAO,IAAI;;UAAM;AACrB,cAAI;YAAO,IAAI;;UAAM;AACrB;QACD;AACC,mBAAS,KAAK;YAAe;YAAM;YAAG;YAAa,YAAY;;UAAW;AAC1E,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB;;UAAW;AACpF,cAAI,KAAK;YAAe;YAAM;YAAG;YAAQ,YAAY,KAAoB,IAAI;;UAAW;;AAG1F,UAAI,SAAS,SAAS,OAAO;AAC5B,YAAI,OAAO,WAAW;AACtB,mBAAW,YAAY,KAAK,aAAa,SAAS,KAAK,aAAa;AACpE,mBAAW,OAAO,KAAK,QAAQ,IAAI,KAAK,QAAQ;AAChD,mBAAW,OAAO,KAAK,QAAQ,IAAI,KAAK,QAAQ;aAC1C;AACN,mBAAW,cAAc,SAAS,WAAW,aAAa;AAC1D,mBAAW,SAAS,IAAI,WAAW,QAAQ;AAC3C,mBAAW,SAAS,IAAI,WAAW,QAAQ;;IAE7C;;AAIK,MAAgB,4BAAhB,cAAkD,eAAc;;;IAGrE,kBAAkB;;IAGlB,YAAa,YAAoB,aAAqB,wBAAgC,UAAgB;AACrG,YAAM,YAAY,aAAa,WAAW,MAAM,sBAAsB;AACtE,WAAK,kBAAkB;IACxB;IAEA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAC5I,UAAI;AACJ,UAAI,KAAK,mBAAmB,IAAI;AAC/B,cAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI;AAElE,mBAAWE,eAAc,SAAS,oBAAoB;AACrD,cAAIA,YAAW,UAAU,KAAK,OAAOA,YAAW,IAAI;AACnD,iBAAK,IAAIA,aAAY,KAAK,kBAAkB,MAAM,OAAO,OAAO,KAAK,IAAIA,WAAU,GAAG,KAAK,MAAMA,WAAU,GAAG,KAAK,CAAC;;aAEhH;AACN,qBAAa,SAAS,mBAAmB,KAAK,eAAe;AAC7D,YAAI,WAAW;AAAQ,eAAK,IAAI,YAAY,KAAK,iBAAiB,MAAM,OAAO,OAAO,KAAK,IAAI,UAAU,GAAG,KAAK,MAAM,UAAU,CAAC,CAAC;;IAErI;;AAYK,MAAO,mCAAP,cAAgD,0BAAyB;IAC9E,YAAa,YAAoB,aAAqB,wBAA8B;AACnF,YAAM,YAAY,aAAa,wBAAwB,SAAS,wBAAwB;IACzF;IAEA,MAAO,YAA6B;AACnC,aAAO,WAAW,KAAK;IACxB;IAEA,IAAK,YAA6B;AACjC,aAAO,WAAW;IACnB;IAEA,IAAK,YAA+B,OAAa;AAChD,iBAAW,UAAU;IACtB;IAEA,OAAQ,YAAiC;AACxC,aAAO,WAAW;IACnB;;AAIK,MAAO,oCAAP,cAAiD,0BAAyB;IAC/E,YAAa,YAAoB,aAAqB,wBAA8B;AACnF,YAAM,YAAY,aAAa,wBAAwB,SAAS,yBAAyB;IAC1F;IAEA,MAAO,YAA6B;AACnC,aAAO,WAAW,KAAK;IACxB;IAEA,IAAK,YAA6B;AACjC,aAAO,WAAW;IACnB;IAEA,IAAK,YAA+B,OAAa;AAChD,iBAAW,WAAW;IACvB;IAEA,OAAQ,YAAiC;AACxC,aAAO,WAAW;IACnB;;AAIK,MAAO,mCAAP,cAAgD,0BAAyB;IAC9E,YAAa,YAAoB,aAAqB,wBAA8B;AACnF,YAAM,YAAY,aAAa,wBAAwB,SAAS,wBAAwB;IACzF;IAEA,MAAO,YAA6B;AACnC,aAAO,WAAW,KAAK;IACxB;IAEA,IAAK,YAA6B;AACjC,aAAO,WAAW;IACnB;IAEA,IAAK,YAA+B,OAAa;AAChD,iBAAW,UAAU;IACtB;IAEA,OAAQ,YAAiC;AACxC,aAAO,WAAW;IACnB;;AAIK,MAAO,gCAAP,cAA6C,0BAAyB;IAC3E,YAAa,YAAoB,aAAqB,wBAA8B;AACnF,YAAM,YAAY,aAAa,wBAAwB,SAAS,qBAAqB;IACtF;IAEA,MAAO,YAA6B;AACnC,aAAO,IAAI,WAAW,KAAK;IAC5B;IAEA,IAAK,YAA6B;AACjC,aAAO,IAAI,WAAW;IACvB;IAEA,IAAK,YAA+B,OAAa;AAChD,iBAAW,cAAc,IAAI;IAC9B;IAEA,OAAQ,YAAiC;AACxC,aAAO,WAAW;IACnB;;AAIK,MAAO,gCAAP,cAA6C,0BAAyB;IAC3E,YAAa,YAAoB,aAAqB,wBAA8B;AACnF,YAAM,YAAY,aAAa,wBAAwB,SAAS,qBAAqB;IACtF;IAEA,MAAO,YAA6B;AACnC,aAAO,WAAW,KAAK;IACxB;IAEA,IAAK,YAA6B;AACjC,aAAO,WAAW;IACnB;IAEA,IAAK,YAA+B,OAAa;AAChD,iBAAW,OAAO;IACnB;IAEA,OAAQ,YAAiC;AACxC,aAAO,WAAW;IACnB;;AAIK,MAAO,mCAAP,cAAgD,0BAAyB;IAC9E,YAAa,YAAoB,aAAqB,wBAA8B;AACnF,YAAM,YAAY,aAAa,wBAAwB,SAAS,wBAAwB;IACzF;IAEA,MAAO,YAA6B;AACnC,aAAO,WAAW,KAAK;IACxB;IAEA,IAAK,YAA6B;AACjC,aAAO,WAAW;IACnB;IAEA,IAAK,YAA+B,OAAa;AAChD,iBAAW,UAAU;IACtB;IAEA,OAAQ,YAAiC;AACxC,aAAO,WAAW;IACnB;;AAIK,MAAO,+BAAP,cAA4C,0BAAyB;IAC1E,YAAa,YAAoB,aAAqB,wBAA8B;AACnF,YAAM,YAAY,aAAa,wBAAwB,SAAS,oBAAoB;IACrF;IAEA,MAAO,YAA6B;AACnC,aAAO,WAAW,KAAK;IACxB;IAEA,IAAK,YAA6B;AACjC,aAAO,WAAW;IACnB;IAEA,IAAK,YAA+B,OAAa;AAChD,iBAAW,MAAM;IAClB;IAEA,OAAQ,YAAiC;AACxC,aAAO,WAAW;IACnB;;AAIK,MAAO,iCAAP,MAAO,wCAAuC,SAAQ;IACnD,OAAO,cAAwB,CAAC,SAAS,uBAAuB,SAAQ,CAAE;;;IAIlF;;IAGA,YAAa,YAAoB,wBAA8B;AAC9D,YAAM,YAAY,gCAA+B,WAAW;AAC5D,WAAK,kBAAkB;IACxB;IAEA,gBAAa;AACZ,aAAO,KAAK,OAAO;IACpB;;;IAIA,SAAU,OAAe,MAAY;AACpC,WAAK,OAAO,KAAK,IAAI;IACtB;;IAGA,MAAO,UAAoB,UAAkB,MAAc,aAA2B,OAAe,OAAiB,WAAuB;AAE5I,UAAI;AACJ,UAAI,KAAK,mBAAmB,IAAI;AAC/B,qBAAa,SAAS,mBAAmB,KAAK,eAAe;AAC7D,YAAI,CAAC,WAAW;AAAQ;;AAGzB,YAAM,SAAS,KAAK;AAEpB,UAAI,WAAW,MAAM;AACpB,aAAK,MAAM,UAAU,UAAU,OAAO,WAAW,CAAA,GAAI,OAAO,OAAO,SAAS;AAC5E,mBAAW;iBACD,YAAY,OAAO,OAAO,SAAS,CAAC;AAC9C;AACD,UAAI,OAAO,OAAO,CAAC;AAAG;AAEtB,UAAI,WAAW,OAAO,CAAC,KAAK,QAAQ,OAAO,SAAS,QAAQ,QAAQ,QAAQ,IAAI,CAAC,GAAG;AACnF,YAAI,cAAc;AACjB,qBAAW,MAAK;aACZ;AACJ,qBAAWA,eAAc,SAAS,oBAAoB;AACrD,gBAAIA,YAAW;AAAQ,cAAAA,YAAW,MAAK;;;;IAI3C;;AAIK,MAAO,mBAAP,MAAO,0BAAyB,SAAQ;IAC7C,OAAO,UAAU;IACjB,OAAO,OAAO;IACd,OAAO,QAAQ;IAEf;IACA;IAEA,YAAa,YAAoB,WAAmB,YAA4B;AAC/E,YAAM,YAAY;QACjB,SAAS,WAAW,MAAM,YAAY,MAAM,WAAW,SAAU;OACjE;AACD,WAAK,YAAY;AACjB,WAAK,aAAa;IACnB;IAEA,kBAAe;AACd,aAAO,kBAAiB;IACzB;IAEA,eAAY;AACX,aAAO,KAAK;IACb;IAEA,gBAAa;AACZ,aAAO,KAAK;IACb;;;;IAKA,SAAU,OAAe,MAAc,MAAoB,OAAe,OAAa;AACtF,UAAI,SAAS,KAAK;AAClB,eAAS,kBAAiB;AAC1B,aAAO,KAAK,IAAI;AAChB,aAAO,QAAQ,kBAAiB,IAAI,IAAI,OAAQ,SAAS;AACzD,aAAO,QAAQ,kBAAiB,KAAK,IAAI;IAC1C;IAEA,MAAO,UAAoB,UAAkB,MAAc,QAAsB,OAAe,OAAiB,WAAuB;AACvI,UAAI,OAAO,SAAS,MAAM,KAAK,SAAS;AACxC,UAAI,CAAC,KAAK,KAAK;AAAQ;AACvB,UAAI,iBAAiB,KAAK;AAC1B,UAAI,aAAa,KAAK;AACtB,UAAI,kBAAkB,YAAY;AACjC,YAAI,EAAE,0BAA0B,qBAC3B,eAAoC,sBAAsB;AAAY;;AAG5E,UAAI,SAAS,KAAK;AAClB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,YAAI,SAAS,SAAS,SAAS,SAAS,SAAS;AAAO,eAAK,gBAAgB;AAC7E;;AAGD,UAAI,IAAI,SAAS,OAAO,QAAQ,MAAM,kBAAiB,OAAO;AAC9D,UAAI,SAAS,OAAO,CAAC;AACrB,UAAI,eAAe,OAAO,IAAI,kBAAiB,IAAI;AACnD,UAAI,QAAQ,OAAO,IAAI,kBAAiB,KAAK;AAE7C,UAAI,CAAC,KAAK,WAAW;AAAU;AAC/B,UAAI,QAAQ,gBAAgB,GAAG,QAAQ,KAAK,WAAW,SAAU,QAAQ;AACzE,UAAI,OAAO,mBAAmB,eAAe,EAAG;AAChD,UAAI,QAAQ,aAAa,MAAM;AAC9B,kBAAY,OAAO,UAAU,QAAQ,OAAW;AAChD,gBAAQ,MAAM;UACb,KAAK,aAAa;AACjB,oBAAQ,KAAK,IAAI,QAAQ,GAAG,KAAK;AACjC;UACD,KAAK,aAAa;AACjB,qBAAS;AACT;UACD,KAAK,aAAa,UAAU;AAC3B,gBAAI,KAAK,SAAS,KAAK;AACvB,oBAAQ,KAAK,IAAI,IAAI,QAAQ;AAC7B,gBAAI,SAAS;AAAO,sBAAQ,IAAI;AAChC;;UAED,KAAK,aAAa;AACjB,oBAAQ,KAAK,IAAI,QAAQ,IAAI,OAAO,CAAC;AACrC;UACD,KAAK,aAAa;AACjB,oBAAQ,QAAQ,IAAK,QAAQ;AAC7B;UACD,KAAK,aAAa,iBAAiB;AAClC,gBAAI,KAAK,SAAS,KAAK;AACvB,oBAAQ,KAAK,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC3C,gBAAI,SAAS;AAAO,sBAAQ,IAAI;;;;AAInC,WAAK,gBAAgB;IACtB;;;;ACzxEK,MAAO,iBAAP,MAAO,gBAAc;IAC1B,OAAO,kBAAkB,IAAI,UAAU,WAAW,CAAA,GAAI,CAAC;IAC/C,OAAO,iBAAc;AAC5B,aAAO,gBAAe;IACvB;;IAGA;;IAGA,SAAS,IAAI,MAAK;;;;;IAMlB,YAAY;IACZ,eAAe;IAEf,SAAS,IAAI,MAAK;IAClB,YAAY,IAAI,MAAK;IACrB,QAAQ,IAAI,WAAW,IAAI;IAC3B,cAAc,IAAI,UAAS;IAC3B,oBAAoB;IAEpB,iBAAiB,IAAI,KAAiB,MAAM,IAAI,WAAU,CAAE;IAE5D,YAAa,MAAwB;AACpC,WAAK,OAAO;IACb;;IAGA,OAAQ,OAAa;AACpB,eAAS,KAAK;AACd,UAAI,SAAS,KAAK;AAClB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AAC9C,YAAI,UAAU,OAAO,CAAC;AACtB,YAAI,CAAC;AAAS;AAEd,gBAAQ,gBAAgB,QAAQ;AAChC,gBAAQ,YAAY,QAAQ;AAE5B,YAAI,eAAe,QAAQ,QAAQ;AAEnC,YAAI,QAAQ,QAAQ,GAAG;AACtB,kBAAQ,SAAS;AACjB,cAAI,QAAQ,QAAQ;AAAG;AACvB,yBAAe,CAAC,QAAQ;AACxB,kBAAQ,QAAQ;;AAGjB,YAAI,OAAO,QAAQ;AACnB,YAAI,MAAM;AAET,cAAI,WAAW,QAAQ,YAAY,KAAK;AACxC,cAAI,YAAY,GAAG;AAClB,iBAAK,QAAQ;AACb,iBAAK,aAAa,QAAQ,aAAa,IAAI,KAAK,WAAW,QAAQ,YAAY,SAAS,KAAK;AAC7F,oBAAQ,aAAa;AACrB,iBAAK,WAAW,GAAG,MAAM,IAAI;AAC7B,mBAAO,KAAK,YAAY;AACvB,mBAAK,WAAW;AAChB,qBAAO,KAAK;;AAEb;;mBAES,QAAQ,aAAa,QAAQ,YAAY,CAAC,QAAQ,YAAY;AACxE,iBAAO,CAAC,IAAI;AACZ,eAAK,MAAM,IAAI,OAAO;AACtB,eAAK,UAAU,OAAO;AACtB;;AAED,YAAI,QAAQ,cAAc,KAAK,iBAAiB,SAAS,KAAK,GAAG;AAEhE,cAAI,OAA0B,QAAQ;AACtC,kBAAQ,aAAa;AACrB,cAAI;AAAM,iBAAK,WAAW;AAC1B,iBAAO,MAAM;AACZ,iBAAK,MAAM,IAAI,IAAI;AACnB,mBAAO,KAAK;;;AAId,gBAAQ,aAAa;;AAGtB,WAAK,MAAM,MAAK;IACjB;;IAGA,iBAAkB,IAAgB,OAAa;AAC9C,UAAI,OAAO,GAAG;AACd,UAAI,CAAC;AAAM,eAAO;AAElB,UAAI,WAAW,KAAK,iBAAiB,MAAM,KAAK;AAEhD,WAAK,gBAAgB,KAAK;AAC1B,WAAK,YAAY,KAAK;AAGtB,UAAI,GAAG,UAAU,KAAK,GAAG,WAAW,GAAG,aAAa;AAEnD,YAAI,KAAK,cAAc,KAAK,GAAG,eAAe,GAAG;AAChD,aAAG,aAAa,KAAK;AACrB,cAAI,KAAK;AAAY,iBAAK,WAAW,WAAW;AAChD,aAAG,iBAAiB,KAAK;AACzB,eAAK,MAAM,IAAI,IAAI;;AAEpB,eAAO;;AAGR,WAAK,aAAa,QAAQ,KAAK;AAC/B,SAAG,WAAW;AACd,aAAO;IACR;;;;IAKA,MAAO,UAAkB;AACxB,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,KAAK;AAAmB,aAAK,mBAAkB;AAEnD,UAAI,SAAS,KAAK;AAClB,UAAI,SAAS,KAAK;AAClB,UAAI,UAAU;AAEd,eAASC,KAAI,GAAGC,KAAI,OAAO,QAAQD,KAAIC,IAAGD,MAAK;AAC9C,YAAI,UAAU,OAAOA,EAAC;AACtB,YAAI,CAAC,WAAW,QAAQ,QAAQ;AAAG;AACnC,kBAAU;AACV,YAAI,QAAkBA,MAAK,IAAI,SAAS,QAAQ,QAAQ;AAGxD,YAAI,QAAQ,QAAQ;AACpB,YAAI,QAAQ;AACX,mBAAS,KAAK,gBAAgB,SAAS,UAAU,KAAK;iBAC9C,QAAQ,aAAa,QAAQ,YAAY,CAAC,QAAQ;AAC1D,kBAAQ;AACT,YAAI,cAAc,SAAS,QAAQ;AAInC,YAAI,gBAAgB,QAAQ,eAAe,gBAAgB,QAAQ,iBAAgB,GAAI,YAAY;AACnG,YAAI,cAA8B;AAClC,YAAI,QAAQ,SAAS;AACpB,sBAAY,QAAQ,UAAW,WAAW;AAC1C,wBAAc;;AAEf,YAAI,YAAY,QAAQ,UAAW;AACnC,YAAI,gBAAgB,UAAU;AAC9B,YAAKA,MAAK,KAAK,SAAS,KAAM,SAAS,SAAS,KAAK;AACpD,cAAIA,MAAK;AAAG,0BAAc;AAC1B,mBAAS,KAAK,GAAG,KAAK,eAAe,MAAM;AAI1C,kBAAM,sBAAsB,OAAO,KAAK;AACxC,gBAAI,WAAW,UAAU,EAAE;AAC3B,gBAAI,oBAAoB;AACvB,mBAAK,wBAAwB,UAAU,UAAU,WAAW,OAAO,WAAW;;AAE9E,uBAAS,MAAM,UAAU,eAAe,WAAW,aAAa,OAAO,OAAO,aAAa,KAAK;;eAE5F;AACN,cAAI,eAAe,QAAQ;AAE3B,cAAI,mBAAmB,QAAQ;AAC/B,cAAI,aAAa,CAAC,oBAAoB,QAAQ,kBAAkB,UAAU,iBAAiB;AAC3F,cAAI;AAAY,oBAAQ,kBAAkB,SAAS,iBAAiB;AAEpE,mBAAS,KAAK,GAAG,KAAK,eAAe,MAAM;AAC1C,gBAAIE,YAAW,UAAU,EAAE;AAC3B,gBAAI,gBAAgB,aAAa,EAAE,KAAK,aAAa,QAAQ,SAAS;AACtE,gBAAI,CAAC,oBAAoBA,qBAAoB,gBAAgB;AAC5D,mBAAK,oBAAoBA,WAAU,UAAU,WAAW,OAAO,eAAe,QAAQ,mBAAmB,MAAM,GAAG,UAAU;uBAClHA,qBAAoB,oBAAoB;AAClD,mBAAK,wBAAwBA,WAAU,UAAU,WAAW,OAAO,WAAW;mBACxE;AAEN,oBAAM,sBAAsB,OAAO,KAAK;AACxC,cAAAA,UAAS,MAAM,UAAU,eAAe,WAAW,aAAa,OAAO,eAAe,aAAa,KAAK;;;;AAI3G,aAAK,YAAY,SAAS,aAAa;AACvC,eAAO,SAAS;AAChB,gBAAQ,oBAAoB;AAC5B,gBAAQ,gBAAgB,QAAQ;;AAMjC,UAAI,aAAa,KAAK,eAAe;AACrC,UAAI,QAAQ,SAAS;AACrB,eAAS,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,IAAI,GAAG,KAAK;AACtD,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,KAAK,mBAAmB,YAAY;AACvC,cAAI,iBAAiB,KAAK,KAAK;AAC/B,eAAK,cAAc,CAAC,iBAAiB,OAAO,SAAS,cAAc,KAAK,KAAK,OAAO,cAAc,CAAC;;;AAGrG,WAAK,gBAAgB;AAErB,WAAK,MAAM,MAAK;AAChB,aAAO;IACR;IAEA,gBAAiB,IAAgB,UAAoB,OAAe;AACnE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK;AAAY,aAAK,gBAAgB,MAAM,UAAU,KAAK;AAE/D,UAAI,MAAM;AACV,UAAI,GAAG,eAAe,GAAG;AACxB,cAAM;AACN,YAAI,SAAS,SAAS;AAAO,kBAAQ,SAAS;aACxC;AACN,cAAM,GAAG,UAAU,GAAG;AACtB,YAAI,MAAM;AAAG,gBAAM;AACnB,YAAI,SAAS,SAAS;AAAO,kBAAQ,KAAK;;AAG3C,UAAI,cAAc,MAAM,KAAK,wBAAwB,YAAY,MAAM,KAAK;AAC5E,UAAI,YAAY,KAAK,UAAW;AAChC,UAAI,gBAAgB,UAAU;AAC9B,UAAI,YAAY,KAAK,QAAQ,GAAG,gBAAgB,WAAW,aAAa,IAAI;AAC5E,UAAI,gBAAgB,KAAK,eAAe,gBAAgB,KAAK,iBAAgB,GAAI,YAAY;AAC7F,UAAI,SAAS;AACb,UAAI,KAAK;AACR,oBAAY,KAAK,UAAW,WAAW;eAC/B,MAAM,KAAK;AACnB,iBAAS,KAAK;AAEf,UAAI,SAAS,SAAS,KAAK;AAC1B,iBAAS,IAAI,GAAG,IAAI,eAAe;AAClC,oBAAU,CAAC,EAAE,MAAM,UAAU,eAAe,WAAW,QAAQ,UAAU,OAAO,aAAa,MAAM;aAC9F;AACN,YAAI,eAAe,KAAK;AACxB,YAAI,kBAAkB,KAAK;AAE3B,YAAI,mBAAmB,KAAK;AAC5B,YAAI,aAAa,CAAC,oBAAoB,KAAK,kBAAkB,UAAU,iBAAiB;AACxF,YAAI;AAAY,eAAK,kBAAkB,SAAS,iBAAiB;AAEjE,aAAK,aAAa;AAClB,iBAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACvC,cAAI,WAAW,UAAU,CAAC;AAC1B,cAAI,YAAY,aAAa;AAC7B,cAAI;AACJ,cAAI,QAAQ;AACZ,kBAAQ,aAAa,CAAC,GAAG;YACxB,KAAK;AACJ,kBAAI,CAAC,aAAa,oBAAoB;AAAmB;AACzD,8BAAgB;AAChB,sBAAQ;AACR;YACD,KAAK;AACJ,8BAAgB,SAAS;AACzB,sBAAQ;AACR;YACD,KAAK;AACJ,8BAAgB;AAChB,sBAAQ;AACR;YACD,KAAK;AACJ,8BAAgB,SAAS;AACzB,sBAAQ;AACR;YACD;AACC,8BAAgB,SAAS;AACzB,kBAAI,UAAU,gBAAgB,CAAC;AAC/B,sBAAQ,YAAY,KAAK,IAAI,GAAG,IAAI,QAAQ,UAAU,QAAQ,WAAW;AACzE;;AAEF,eAAK,cAAc;AAEnB,cAAI,CAAC,oBAAoB,oBAAoB;AAC5C,iBAAK,oBAAoB,UAAU,UAAU,WAAW,OAAO,eAAe,KAAK,mBAAmB,KAAK,GAAG,UAAU;mBAChH,oBAAoB;AAC5B,iBAAK,wBAAwB,UAAU,UAAU,WAAW,eAAe,eAAe,SAAS,KAAK,wBAAwB;eAC5H;AAEJ,kBAAM,sBAAsB,OAAO,KAAK;AACxC,gBAAI,aAAa,oBAAoB,qBAAqB,iBAAiB,SAAS;AACnF,0BAAY,aAAa;AAC1B,qBAAS,MAAM,UAAU,eAAe,WAAW,QAAQ,OAAO,eAAe,SAAS;;;;AAK7F,UAAI,GAAG,cAAc;AAAG,aAAK,YAAY,MAAM,aAAa;AAC5D,WAAK,OAAO,SAAS;AACrB,WAAK,oBAAoB;AACzB,WAAK,gBAAgB,KAAK;AAE1B,aAAO;IACR;IAEA,wBAAyB,UAA8B,UAAoB,MAAc,OAAiB,aAAoB;AAC7H,UAAI,OAAO,SAAS,MAAM,SAAS,SAAS;AAC5C,UAAI,CAAC,KAAK,KAAK;AAAQ;AAEvB,UAAI,OAAO,SAAS,OAAO,CAAC,GAAG;AAC9B,YAAI,SAAS,SAAS,SAAS,SAAS,SAAS;AAChD,eAAK,cAAc,UAAU,MAAM,KAAK,KAAK,gBAAgB,WAAW;;AAEzE,aAAK,cAAc,UAAU,MAAM,SAAS,gBAAgB,SAAS,QAAQ,SAAS,QAAQ,IAAI,CAAC,GAAG,WAAW;AAGlH,UAAI,KAAK,mBAAmB,KAAK;AAAc,aAAK,kBAAkB,KAAK,eAAe;IAC3F;IAEA,cAAe,UAAoB,MAAY,gBAA+B,aAAoB;AACjG,WAAK,cAAc,CAAC,iBAAiB,OAAO,SAAS,cAAc,KAAK,KAAK,OAAO,cAAc,CAAC;AACnG,UAAI;AAAa,aAAK,kBAAkB,KAAK,eAAe;IAC7D;IAEA,oBAAqB,UAA0B,UAAoB,MAAc,OAAe,OAC/F,mBAAkC,GAAW,YAAmB;AAEhE,UAAI;AAAY,0BAAkB,CAAC,IAAI;AAEvC,UAAI,SAAS,GAAG;AACf,iBAAS,MAAM,UAAU,GAAG,MAAM,MAAM,GAAG,OAAO,aAAa,KAAK;AACpE;;AAGD,UAAI,OAAO,SAAS,MAAM,SAAS,SAAS;AAC5C,UAAI,CAAC,KAAK;AAAQ;AAClB,UAAI,SAAS,SAAS;AACtB,UAAI,KAAK,GAAG,KAAK;AACjB,UAAI,OAAO,OAAO,CAAC,GAAG;AACrB,gBAAQ,OAAO;UACd,KAAK,SAAS;AACb,iBAAK,WAAW,KAAK,KAAK;UAC3B;AACC;UACD,KAAK,SAAS;AACb,iBAAK,KAAK;AACV,iBAAK,KAAK,KAAK;;aAEX;AACN,aAAK,SAAS,SAAS,QAAQ,KAAK,KAAK,WAAW,KAAK;AACzD,aAAK,KAAK,KAAK,WAAW,SAAS,cAAc,IAAI;;AAItD,UAAI,QAAQ,GAAG,OAAO,KAAK;AAC3B,cAAQ,KAAK,KAAK,OAAO,MAAM,GAAG,IAAI;AACtC,UAAI,QAAQ,GAAG;AACd,gBAAQ,kBAAkB,CAAC;aACrB;AACN,YAAI,YAAY,GAAG,WAAW;AAC9B,YAAI,YAAY;AACf,sBAAY;AACZ,qBAAW;eACL;AACN,sBAAY,kBAAkB,CAAC;AAC/B,qBAAW,kBAAkB,IAAI,CAAC;;AAEnC,YAAI,QAAQ,YAAY,YAAY;AACpC,gBAAQ,OAAO;AACf,YAAI,UAAU,QAAQ,GAAG,MAAM,aAAa;AAC5C,YAAI,KAAK,IAAI,QAAQ,KAAK,MAAM,UAAU,OAAO,QAAQ,KAAK,UAAU,OAAO,IAAI,GAAG;AACrF,cAAI,KAAK,IAAI,YAAY,KAAK,IAAI,KAAK;AACtC,qBAAS,MAAM,UAAU,OAAO,SAAS;AACzC,kBAAM;qBACI,SAAS;AACnB,qBAAS,MAAM,UAAU,OAAO,SAAS;;AAEzC,kBAAM;;AAER,YAAI,OAAO;AAAS,mBAAS,MAAM,UAAU,OAAO,SAAS;AAC7D,0BAAkB,CAAC,IAAI;;AAExB,wBAAkB,IAAI,CAAC,IAAI;AAC3B,WAAK,WAAW,KAAK,QAAQ;IAC9B;IAEA,YAAa,OAAmB,eAAqB;AACpD,UAAI,iBAAiB,MAAM,gBAAgB,eAAe,MAAM;AAChE,UAAI,WAAW,eAAe;AAC9B,UAAI,mBAAmB,MAAM,YAAY;AAGzC,UAAI,SAAS,KAAK;AAClB,UAAI,IAAI,GAAG,IAAI,OAAO;AACtB,aAAO,IAAI,GAAG,KAAK;AAClB,YAAI,QAAQ,OAAO,CAAC;AACpB,YAAI,MAAM,OAAO;AAAkB;AACnC,YAAI,MAAM,OAAO;AAAc;AAC/B,aAAK,MAAM,MAAM,OAAO,KAAK;;AAI9B,UAAI,WAAW;AACf,UAAI,MAAM,MAAM;AACf,YAAI,YAAY;AACf,qBAAW;aACP;AACJ,gBAAM,SAAS,KAAK,MAAM,MAAM,YAAY,QAAQ;AACpD,qBAAW,SAAS,KAAK,SAAS,KAAK,MAAM,MAAM,YAAY,QAAQ;;;AAGxE,mBAAW,iBAAiB,gBAAgB,MAAM,gBAAgB;AACnE,UAAI;AAAU,aAAK,MAAM,SAAS,KAAK;AAGvC,aAAO,IAAI,GAAG,KAAK;AAClB,YAAI,QAAQ,OAAO,CAAC;AACpB,YAAI,MAAM,OAAO;AAAgB;AACjC,aAAK,MAAM,MAAM,OAAO,KAAK;;IAE/B;;;;;IAMA,cAAW;AACV,UAAI,mBAAmB,KAAK,MAAM;AAClC,WAAK,MAAM,gBAAgB;AAC3B,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC9C,aAAK,WAAW,CAAC;AAClB,WAAK,OAAO,SAAS;AACrB,WAAK,MAAM,gBAAgB;AAC3B,WAAK,MAAM,MAAK;IACjB;;;;;IAMA,WAAY,YAAkB;AAC7B,UAAI,cAAc,KAAK,OAAO;AAAQ;AACtC,UAAI,UAAU,KAAK,OAAO,UAAU;AACpC,UAAI,CAAC;AAAS;AAEd,WAAK,MAAM,IAAI,OAAO;AAEtB,WAAK,UAAU,OAAO;AAEtB,UAAI,QAAQ;AACZ,aAAO,MAAM;AACZ,YAAI,OAAO,MAAM;AACjB,YAAI,CAAC;AAAM;AACX,aAAK,MAAM,IAAI,IAAI;AACnB,cAAM,aAAa;AACnB,cAAM,WAAW;AACjB,gBAAQ;;AAGT,WAAK,OAAO,QAAQ,UAAU,IAAI;AAElC,WAAK,MAAM,MAAK;IACjB;IAEA,WAAY,OAAe,SAAqB,WAAkB;AACjE,UAAI,OAAO,KAAK,cAAc,KAAK;AACnC,WAAK,OAAO,KAAK,IAAI;AACrB,cAAQ,WAAW;AAEnB,UAAI,MAAM;AACT,YAAI;AAAW,eAAK,MAAM,UAAU,IAAI;AACxC,gBAAQ,aAAa;AACrB,aAAK,WAAW;AAChB,gBAAQ,UAAU;AAGlB,YAAI,KAAK,cAAc,KAAK,cAAc;AACzC,kBAAQ,kBAAkB,KAAK,IAAI,GAAG,KAAK,UAAU,KAAK,WAAW;AAEtE,aAAK,kBAAkB,SAAS;;AAGjC,WAAK,MAAM,MAAM,OAAO;IACzB;;;;IAKA,aAAc,YAAoB,eAAuB,OAAgB,OAAK;AAC7E,UAAI,YAAY,KAAK,KAAK,aAAa,cAAc,aAAa;AAClE,UAAI,CAAC;AAAW,cAAM,IAAI,MAAM,0BAA0B,aAAa;AACvE,aAAO,KAAK,iBAAiB,YAAY,WAAW,IAAI;IACzD;;;;;;;IAQA,iBAAkB,YAAoB,WAAsB,OAAgB,OAAK;AAChF,UAAI,CAAC;AAAW,cAAM,IAAI,MAAM,2BAA2B;AAC3D,UAAI,YAAY;AAChB,UAAI,UAAU,KAAK,cAAc,UAAU;AAC3C,UAAI,SAAS;AACZ,YAAI,QAAQ,iBAAiB,IAAI;AAEhC,eAAK,OAAO,UAAU,IAAI,QAAQ;AAClC,eAAK,MAAM,UAAU,OAAO;AAC5B,eAAK,MAAM,IAAI,OAAO;AACtB,eAAK,UAAU,OAAO;AACtB,oBAAU,QAAQ;AAClB,sBAAY;;AAEZ,eAAK,UAAU,OAAO;;AAExB,UAAI,QAAQ,KAAK,WAAW,YAAY,WAAW,MAAM,OAAO;AAChE,WAAK,WAAW,YAAY,OAAO,SAAS;AAC5C,WAAK,MAAM,MAAK;AAChB,aAAO;IACR;;;;IAKA,aAAc,YAAoB,eAAuB,OAAgB,OAAO,QAAgB,GAAC;AAChG,UAAI,YAAY,KAAK,KAAK,aAAa,cAAc,aAAa;AAClE,UAAI,CAAC;AAAW,cAAM,IAAI,MAAM,0BAA0B,aAAa;AACvE,aAAO,KAAK,iBAAiB,YAAY,WAAW,MAAM,KAAK;IAChE;;;;;;;;;IAUA,iBAAkB,YAAoB,WAAsB,OAAgB,OAAO,QAAgB,GAAC;AACnG,UAAI,CAAC;AAAW,cAAM,IAAI,MAAM,2BAA2B;AAE3D,UAAI,OAAO,KAAK,cAAc,UAAU;AACxC,UAAI,MAAM;AACT,eAAO,KAAK;AACX,iBAAO,KAAK;;AAGd,UAAI,QAAQ,KAAK,WAAW,YAAY,WAAW,MAAM,IAAI;AAE7D,UAAI,CAAC,MAAM;AACV,aAAK,WAAW,YAAY,OAAO,IAAI;AACvC,aAAK,MAAM,MAAK;aACV;AACN,aAAK,OAAO;AACZ,cAAM,WAAW;AACjB,YAAI,SAAS;AAAG,mBAAS,KAAK,iBAAgB,IAAK,MAAM;;AAG1D,YAAM,QAAQ;AACd,aAAO;IACR;;;;;;;;;;;;;;;IAgBA,kBAAmB,YAAoB,cAAsB,GAAC;AAC7D,UAAI,QAAQ,KAAK,iBAAiB,YAAY,gBAAe,eAAc,GAAI,KAAK;AACpF,YAAM,cAAc;AACpB,YAAM,WAAW;AACjB,aAAO;IACR;;;;;;;;;;;;IAaA,kBAAmB,YAAoB,cAAsB,GAAG,QAAgB,GAAC;AAChF,UAAI,QAAQ,KAAK,iBAAiB,YAAY,gBAAe,eAAc,GAAI,OAAO,KAAK;AAC3F,UAAI,SAAS;AAAG,cAAM,SAAS,MAAM,cAAc;AACnD,YAAM,cAAc;AACpB,YAAM,WAAW;AACjB,aAAO;IACR;;;IAIA,mBAAoB,cAAsB,GAAC;AAC1C,UAAI,mBAAmB,KAAK,MAAM;AAClC,WAAK,MAAM,gBAAgB;AAC3B,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,IAAI,GAAG,KAAK;AACnD,YAAI,UAAU,KAAK,OAAO,CAAC;AAC3B,YAAI;AAAS,eAAK,kBAAkB,QAAQ,YAAY,WAAW;;AAEpE,WAAK,MAAM,gBAAgB;AAC3B,WAAK,MAAM,MAAK;IACjB;IAEA,cAAe,OAAa;AAC3B,UAAI,QAAQ,KAAK,OAAO;AAAQ,eAAO,KAAK,OAAO,KAAK;AACxD,YAAM,oBAAoB,KAAK,QAAQ,QAAQ,GAAG,IAAI;AACtD,WAAK,OAAO,SAAS,QAAQ;AAC7B,aAAO;IACR;;IAGA,WAAY,YAAoB,WAAsB,MAAe,MAAuB;AAC3F,UAAI,QAAQ,KAAK,eAAe,OAAM;AACtC,YAAM,MAAK;AACX,YAAM,aAAa;AACnB,YAAM,YAAY;AAClB,YAAM,OAAO;AACb,YAAM,eAAe;AAErB,YAAM,UAAU;AAChB,YAAM,mBAAmB;AAEzB,YAAM,iBAAiB;AACvB,YAAM,2BAA2B;AACjC,YAAM,yBAAyB;AAC/B,YAAM,wBAAwB;AAE9B,YAAM,iBAAiB;AACvB,YAAM,eAAe,UAAU;AAC/B,YAAM,gBAAgB;AACtB,YAAM,oBAAoB;AAE1B,YAAM,QAAQ;AACd,YAAM,YAAY;AAClB,YAAM,YAAY;AAClB,YAAM,gBAAgB;AACtB,YAAM,WAAW,OAAO;AACxB,YAAM,YAAY;AAElB,YAAM,QAAQ;AACd,YAAM,UAAU;AAChB,YAAM,cAAc,CAAC,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK,WAAY,SAAS;AAC3E,YAAM,iBAAiB;AACvB,YAAM,aAAa;AACnB,YAAM,WAAW,SAAS;AAC1B,aAAO;IACR;;IAGA,UAAW,OAAiB;AAC3B,UAAI,OAAO,MAAM;AACjB,aAAO,MAAM;AACZ,aAAK,MAAM,QAAQ,IAAI;AACvB,eAAO,KAAK;;AAEb,YAAM,OAAO;IACd;IAEA,qBAAkB;AACjB,WAAK,oBAAoB;AAEzB,WAAK,YAAY,MAAK;AACtB,UAAI,SAAS,KAAK;AAClB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AAC9C,YAAI,QAAQ,OAAO,CAAC;AACpB,YAAI,CAAC;AAAO;AACZ,eAAO,MAAM;AACZ,kBAAQ,MAAM;AACf,WAAG;AACF,cAAI,CAAC,MAAM,YAAY,MAAM,YAAY,SAAS;AAAK,iBAAK,YAAY,KAAK;AAC7E,kBAAQ,MAAM;iBACN;;IAEX;IAEA,YAAa,OAAiB;AAC7B,UAAI,KAAK,MAAM;AACf,UAAI,YAAY,MAAM,UAAW;AACjC,UAAI,iBAAiB,MAAM,UAAW,UAAU;AAChD,UAAI,eAAe,MAAM;AACzB,mBAAa,SAAS;AACtB,UAAI,kBAAkB,MAAM;AAC5B,sBAAgB,SAAS;AACzB,UAAI,cAAc,KAAK;AAEvB,UAAI,MAAM,GAAG,cAAc;AAC1B,iBAAS,IAAI,GAAG,IAAI,gBAAgB;AACnC,uBAAa,CAAC,IAAI,YAAY,OAAO,UAAU,CAAC,EAAE,eAAc,CAAE,IAAI,aAAa;AACpF;;AAGD;AACA,iBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACxC,cAAI,WAAW,UAAU,CAAC;AAC1B,cAAI,MAAM,SAAS,eAAc;AACjC,cAAI,CAAC,YAAY,OAAO,GAAG;AAC1B,yBAAa,CAAC,IAAI;mBACV,CAAC,MAAM,oBAAoB,sBAAsB,oBAAoB,qBAC1E,oBAAoB,iBAAiB,CAAC,GAAG,UAAW,YAAY,GAAG,GAAG;AACzE,yBAAa,CAAC,IAAI;iBACZ;AACN,qBAAS,OAAO,GAAG,UAAU,MAAM,OAAO,KAAM,UAAU;AACzD,kBAAI,KAAK,UAAW,YAAY,GAAG;AAAG;AACtC,kBAAI,MAAM,cAAc,GAAG;AAC1B,6BAAa,CAAC,IAAI;AAClB,gCAAgB,CAAC,IAAI;AACrB,yBAAS;;AAEV;;AAED,yBAAa,CAAC,IAAI;;;IAGrB;;IAGA,WAAY,YAAkB;AAC7B,UAAI,cAAc,KAAK,OAAO;AAAQ,eAAO;AAC7C,aAAO,KAAK,OAAO,UAAU;IAC9B;;IAGA,YAAa,UAAgC;AAC5C,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,WAAK,UAAU,KAAK,QAAQ;IAC7B;;IAGA,eAAgB,UAAgC;AAC/C,UAAI,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAC3C,UAAI,SAAS;AAAG,aAAK,UAAU,OAAO,OAAO,CAAC;IAC/C;;IAGA,iBAAc;AACb,WAAK,UAAU,SAAS;IACzB;;;;IAKA,6BAA0B;AACzB,WAAK,MAAM,MAAK;IACjB;;AAMK,MAAO,aAAP,MAAiB;;IAEtB,YAA8B;IAE9B,WAA8B;;IAG9B,OAA0B;;;IAI1B,aAAgC;;;IAIhC,WAA8B;;;;;IAM9B,WAA0C;;;;IAK1C,aAAqB;;;IAIrB,OAAgB;;;;;;;;;;;;IAahB,eAAwB;IAExB,UAAmB;IAEnB,mBAA4B;;;;IAK5B,iBAAyB;;;;IAKzB,yBAAiC;;;IAIjC,2BAAmC;;;;IAKnC,wBAAgC;;;;;IAMhC,iBAAyB;;;IAIzB,eAAuB;;;;;IAOvB,gBAAwB;IAExB,oBAA4B;;;;;;;IAQ5B,QAAgB;;;;IAKhB,YAAoB;IAEpB,YAAoB;IAAG,gBAAwB;;;;;;;;IAS/C,WAAmB;;;;;;;;;;;;IAanB,YAAoB;;;;;;IAOpB,QAAgB;;;IAIhB,UAAkB;;;;;;;;;;;;;;IAelB,eAAuB;IAAG,iBAAyB;IAAG,aAAqB;IAE3E,IAAI,cAAW;AACd,aAAO,KAAK;IACb;IAEA,IAAI,YAAa,aAAmB;AACnC,WAAK,eAAe;IACrB;IAEA,wBAAyB,aAAqB,OAAa;AAC1D,WAAK,eAAe;AACpB,UAAI,KAAK,YAAY,QAAQ,SAAS;AAAG,iBAAS,KAAK,SAAS,iBAAgB,IAAK;AACrF,WAAK,QAAQ;IACd;;;;;;;IAQA,WAAW,SAAS;IACpB,eAAe,IAAI,MAAK;IACxB,kBAAkB,IAAI,MAAK;IAC3B,oBAAoB,IAAI,MAAK;IAE7B,QAAK;AACJ,WAAK,OAAO;AACZ,WAAK,WAAW;AAChB,WAAK,aAAa;AAClB,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,WAAK,WAAW;AAChB,WAAK,aAAa,SAAS;AAC3B,WAAK,gBAAgB,SAAS;AAC9B,WAAK,kBAAkB,SAAS;IACjC;;;;IAKA,mBAAgB;AACf,UAAI,KAAK,MAAM;AACd,YAAI,WAAW,KAAK,eAAe,KAAK;AACxC,YAAI,YAAY;AAAG,iBAAO,KAAK;AAC/B,eAAQ,KAAK,YAAY,WAAY,KAAK;;AAE3C,aAAO,KAAK,IAAI,KAAK,YAAY,KAAK,gBAAgB,KAAK,YAAY;IACxE;IAEA,iBAAkB,eAAqB;AACtC,WAAK,gBAAgB;AACrB,WAAK,oBAAoB;IAC1B;;;;IAKA,aAAU;AACT,aAAO,KAAK,aAAa,KAAK,eAAe,KAAK;IACnD;;;;;;;;IASA,0BAAuB;AACtB,WAAK,kBAAkB,SAAS;IACjC;IAEA,mBAAgB;AACf,UAAI,WAAW,KAAK,eAAe,KAAK;AACxC,UAAI,YAAY,GAAG;AAClB,YAAI,KAAK;AAAM,iBAAO,YAAY,KAAM,KAAK,YAAY,WAAY;AACrE,YAAI,KAAK,YAAY;AAAU,iBAAO;;AAEvC,aAAO,KAAK;IACb;;;;IAKA,aAAU;AACT,aAAO,KAAK,iBAAiB;IAC9B;;AAGK,MAAO,aAAP,MAAiB;IACtB,UAAsB,CAAA;IACtB,gBAAgB;IAChB;IAEA,YAAa,WAAyB;AACrC,WAAK,YAAY;IAClB;IAEA,MAAO,OAAiB;AACvB,WAAK,QAAQ,KAAK,UAAU,KAAK;AACjC,WAAK,QAAQ,KAAK,KAAK;AACvB,WAAK,UAAU,oBAAoB;IACpC;IAEA,UAAW,OAAiB;AAC3B,WAAK,QAAQ,KAAK,UAAU,SAAS;AACrC,WAAK,QAAQ,KAAK,KAAK;IACxB;IAEA,IAAK,OAAiB;AACrB,WAAK,QAAQ,KAAK,UAAU,GAAG;AAC/B,WAAK,QAAQ,KAAK,KAAK;AACvB,WAAK,UAAU,oBAAoB;IACpC;IAEA,QAAS,OAAiB;AACzB,WAAK,QAAQ,KAAK,UAAU,OAAO;AACnC,WAAK,QAAQ,KAAK,KAAK;IACxB;IAEA,SAAU,OAAiB;AAC1B,WAAK,QAAQ,KAAK,UAAU,QAAQ;AACpC,WAAK,QAAQ,KAAK,KAAK;IACxB;IAEA,MAAO,OAAmB,OAAY;AACrC,WAAK,QAAQ,KAAK,UAAU,KAAK;AACjC,WAAK,QAAQ,KAAK,KAAK;AACvB,WAAK,QAAQ,KAAK,KAAK;IACxB;IAEA,QAAK;AACJ,UAAI,KAAK;AAAe;AACxB,WAAK,gBAAgB;AAErB,UAAI,UAAU,KAAK;AACnB,UAAI,YAAY,KAAK,UAAU;AAE/B,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AAC3C,YAAI,OAAO,QAAQ,CAAC;AACpB,YAAI,QAAQ,QAAQ,IAAI,CAAC;AACzB,gBAAQ,MAAM;UACb,KAAK,UAAU;AACd,gBAAI,MAAM,YAAY,MAAM,SAAS;AAAO,oBAAM,SAAS,MAAM,KAAK;AACtE,qBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC7C,kBAAI,WAAW,UAAU,EAAE;AAC3B,kBAAI,SAAS;AAAO,yBAAS,MAAM,KAAK;;AAEzC;UACD,KAAK,UAAU;AACd,gBAAI,MAAM,YAAY,MAAM,SAAS;AAAW,oBAAM,SAAS,UAAU,KAAK;AAC9E,qBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC7C,kBAAI,WAAW,UAAU,EAAE;AAC3B,kBAAI,SAAS;AAAW,yBAAS,UAAU,KAAK;;AAEjD;UACD,KAAK,UAAU;AACd,gBAAI,MAAM,YAAY,MAAM,SAAS;AAAK,oBAAM,SAAS,IAAI,KAAK;AAClE,qBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC7C,kBAAI,WAAW,UAAU,EAAE;AAC3B,kBAAI,SAAS;AAAK,yBAAS,IAAI,KAAK;;UAGtC,KAAK,UAAU;AACd,gBAAI,MAAM,YAAY,MAAM,SAAS;AAAS,oBAAM,SAAS,QAAQ,KAAK;AAC1E,qBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC7C,kBAAI,WAAW,UAAU,EAAE;AAC3B,kBAAI,SAAS;AAAS,yBAAS,QAAQ,KAAK;;AAE7C,iBAAK,UAAU,eAAe,KAAK,KAAK;AACxC;UACD,KAAK,UAAU;AACd,gBAAI,MAAM,YAAY,MAAM,SAAS;AAAU,oBAAM,SAAS,SAAS,KAAK;AAC5E,qBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC7C,kBAAI,WAAW,UAAU,EAAE;AAC3B,kBAAI,SAAS;AAAU,yBAAS,SAAS,KAAK;;AAE/C;UACD,KAAK,UAAU;AACd,gBAAI,QAAQ,QAAQ,MAAM,CAAC;AAC3B,gBAAI,MAAM,YAAY,MAAM,SAAS;AAAO,oBAAM,SAAS,MAAM,OAAO,KAAK;AAC7E,qBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC7C,kBAAI,WAAW,UAAU,EAAE;AAC3B,kBAAI,SAAS;AAAO,yBAAS,MAAM,OAAO,KAAK;;AAEhD;;;AAGH,WAAK,MAAK;AAEV,WAAK,gBAAgB;IACtB;IAEA,QAAK;AACJ,WAAK,QAAQ,SAAS;IACvB;;AAGD,MAAY;AAAZ,GAAA,SAAYC,YAAS;AACpB,IAAAA,WAAAA,WAAA,OAAA,IAAA,CAAA,IAAA;AAAO,IAAAA,WAAAA,WAAA,WAAA,IAAA,CAAA,IAAA;AAAW,IAAAA,WAAAA,WAAA,KAAA,IAAA,CAAA,IAAA;AAAK,IAAAA,WAAAA,WAAA,SAAA,IAAA,CAAA,IAAA;AAAS,IAAAA,WAAAA,WAAA,UAAA,IAAA,CAAA,IAAA;AAAU,IAAAA,WAAAA,WAAA,OAAA,IAAA,CAAA,IAAA;EAC3C,GAFY,cAAA,YAAS,CAAA,EAAA;AA+Bf,MAAgB,wBAAhB,MAAqC;IAC1C,MAAO,OAAiB;IACxB;IAEA,UAAW,OAAiB;IAC5B;IAEA,IAAK,OAAiB;IACtB;IAEA,QAAS,OAAiB;IAC1B;IAEA,SAAU,OAAiB;IAC3B;IAEA,MAAO,OAAmB,OAAY;IACtC;;AAMM,MAAM,aAAa;AAKnB,MAAM,QAAQ;AAMd,MAAM,kBAAkB;AAMxB,MAAM,aAAa;AAanB,MAAM,WAAW;AAEjB,MAAM,QAAQ;AACd,MAAM,UAAU;;;AC7qCjB,MAAO,qBAAP,MAAyB;;IAE9B;IAEA,qBAAwC,CAAA;;IAGxC,aAAa;IAEb,YAAa,cAA0B;AACtC,UAAI,CAAC;AAAc,cAAM,IAAI,MAAM,8BAA8B;AACjE,WAAK,eAAe;IACrB;;;;IAKA,OAAQ,UAAkB,QAAgB,UAAgB;AACzD,UAAI,OAAO,KAAK,aAAa,cAAc,QAAQ;AACnD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,0BAA0B,QAAQ;AAC7D,UAAI,KAAK,KAAK,aAAa,cAAc,MAAM;AAC/C,UAAI,CAAC;AAAI,cAAM,IAAI,MAAM,0BAA0B,MAAM;AACzD,WAAK,WAAW,MAAM,IAAI,QAAQ;IACnC;;;;IAKA,WAAY,MAAiB,IAAe,UAAgB;AAC3D,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,CAAC;AAAI,cAAM,IAAI,MAAM,oBAAoB;AAC7C,UAAI,MAAM,KAAK,OAAO,MAAM,GAAG;AAC/B,WAAK,mBAAmB,GAAG,IAAI;IAChC;;;IAIA,OAAQ,MAAiB,IAAa;AACrC,UAAI,MAAM,KAAK,OAAO,MAAM,GAAG;AAC/B,UAAI,QAAQ,KAAK,mBAAmB,GAAG;AACvC,aAAO,UAAU,SAAY,KAAK,aAAa;IAChD;;;;ACvCK,MAAO,wBAAP,MAAO,+BAA8B,iBAAgB;IAC1D,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;IAE5B,YAAa,MAAY;AACxB,YAAM,IAAI;IACX;IAEA,OAAI;AACH,UAAI,OAAO,IAAI,uBAAsB,KAAK,IAAI;AAC9C,WAAK,OAAO,IAAI;AAChB,WAAK,MAAM,aAAa,KAAK,KAAK;AAClC,aAAO;IACR;;;;ACfK,MAAO,qBAAP,MAAO,4BAA2B,iBAAgB;;;IAGvD,UAA2B;;;;IAK3B,QAAQ,IAAI,MAAM,QAAQ,QAAQ,QAAQ,CAAC;;IAE3C,YAAa,MAAY;AACxB,YAAM,IAAI;IACX;IAEA,OAAI;AACH,UAAI,OAAO,IAAI,oBAAmB,KAAK,IAAI;AAC3C,WAAK,OAAO,IAAI;AAChB,WAAK,UAAU,KAAK;AACpB,WAAK,MAAM,aAAa,KAAK,KAAK;AAClC,aAAO;IACR;;;;ACzBK,MAAgB,UAAhB,MAAuB;IAClB;IAEV,YAAa,OAAqC;AACjD,WAAK,SAAS;IACf;IAEA,WAAQ;AACP,aAAO,KAAK;IACb;;AAOD,MAAY;AAAZ,GAAA,SAAYC,gBAAa;AACxB,IAAAA,eAAAA,eAAA,SAAA,IAAA,IAAA,IAAA;AACA,IAAAA,eAAAA,eAAA,QAAA,IAAA,IAAA,IAAA;AACA,IAAAA,eAAAA,eAAA,QAAA,IAAA,IAAA,IAAA;AACA,IAAAA,eAAAA,eAAA,sBAAA,IAAA,IAAA,IAAA;AACA,IAAAA,eAAAA,eAAA,qBAAA,IAAA,IAAA,IAAA;AACA,IAAAA,eAAAA,eAAA,qBAAA,IAAA,IAAA,IAAA;AACA,IAAAA,eAAAA,eAAA,oBAAA,IAAA,IAAA,IAAA;EACD,GARY,kBAAA,gBAAa,CAAA,EAAA;AAUzB,MAAY;AAAZ,GAAA,SAAYC,cAAW;AACtB,IAAAA,aAAAA,aAAA,gBAAA,IAAA,KAAA,IAAA;AACA,IAAAA,aAAAA,aAAA,aAAA,IAAA,KAAA,IAAA;AACA,IAAAA,aAAAA,aAAA,QAAA,IAAA,KAAA,IAAA;EACD,GAJY,gBAAA,cAAW,CAAA,EAAA;AAMjB,MAAO,gBAAP,MAAoB;IACzB;IACA,IAAI;IAAG,IAAI;IACX,KAAK;IAAG,KAAK;IACb,QAAQ;IAAG,SAAS;IACpB,UAAU;IACV,UAAU;IAAG,UAAU;IACvB,gBAAgB;IAAG,iBAAiB;;AAG/B,MAAO,cAAP,cAA2B,QAAO;IACvC,WAAY,WAA0B,WAAwB;IAAI;IAClE,SAAU,OAAoB,OAAkB;IAAI;IACpD,UAAO;IAAM;;;;ACzCR,MAAO,eAAP,MAAmB;IACxB,QAAQ,IAAI,MAAK;IACjB,UAAU,IAAI,MAAK;IAEnB,YAAa,WAAiB;AAC7B,UAAI,SAAS,IAAI,mBAAmB,SAAS;AAC7C,UAAI,QAAQ,IAAI,MAAc,CAAC;AAE/B,UAAI,aAA0D,CAAA;AAC9D,iBAAW,MAAM,IAAI,CAACC,UAA0B;AAC/C,QAAAA,MAAM,QAAQ,SAAS,MAAM,CAAC,CAAC;AAC/B,QAAAA,MAAM,SAAS,SAAS,MAAM,CAAC,CAAC;MACjC;AACA,iBAAW,QAAQ,IAAI,MAAK;MAE5B;AACA,iBAAW,QAAQ,IAAI,CAACA,UAA0B;AACjD,QAAAA,MAAM,YAAY,MAAM,UAAU,eAAe,MAAM,CAAC,CAAC;AACzD,QAAAA,MAAM,YAAY,MAAM,UAAU,eAAe,MAAM,CAAC,CAAC;MAC1D;AACA,iBAAW,QAAQ,IAAI,CAACA,UAA0B;AACjD,YAAI,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK;AAAI,UAAAA,MAAM,QAAQ,YAAY;AAC3D,YAAI,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK;AAAI,UAAAA,MAAM,QAAQ,YAAY;MAC5D;AACA,iBAAW,KAAK,IAAI,CAACA,UAA0B;AAC9C,QAAAA,MAAM,MAAM,MAAM,CAAC,KAAK;MACzB;AAEA,UAAI,eAAgE,CAAA;AACpE,mBAAa,IAAI,IAAI,CAAC,WAA8B;AACnD,eAAO,IAAI,SAAS,MAAM,CAAC,CAAC;AAC5B,eAAO,IAAI,SAAS,MAAM,CAAC,CAAC;MAC7B;AACA,mBAAa,MAAM,IAAI,CAAC,WAA8B;AACrD,eAAO,QAAQ,SAAS,MAAM,CAAC,CAAC;AAChC,eAAO,SAAS,SAAS,MAAM,CAAC,CAAC;MAClC;AACA,mBAAa,QAAQ,IAAI,CAAC,WAA8B;AACvD,eAAO,IAAI,SAAS,MAAM,CAAC,CAAC;AAC5B,eAAO,IAAI,SAAS,MAAM,CAAC,CAAC;AAC5B,eAAO,QAAQ,SAAS,MAAM,CAAC,CAAC;AAChC,eAAO,SAAS,SAAS,MAAM,CAAC,CAAC;MAClC;AACA,mBAAa,QAAQ,IAAI,CAAC,WAA8B;AACvD,eAAO,UAAU,SAAS,MAAM,CAAC,CAAC;AAClC,eAAO,UAAU,SAAS,MAAM,CAAC,CAAC;MACnC;AACA,mBAAa,MAAM,IAAI,CAAC,WAA8B;AACrD,eAAO,gBAAgB,SAAS,MAAM,CAAC,CAAC;AACxC,eAAO,iBAAiB,SAAS,MAAM,CAAC,CAAC;MAC1C;AACA,mBAAa,SAAS,IAAI,CAAC,WAA8B;AACxD,eAAO,UAAU,SAAS,MAAM,CAAC,CAAC;AAClC,eAAO,UAAU,SAAS,MAAM,CAAC,CAAC;AAClC,eAAO,gBAAgB,SAAS,MAAM,CAAC,CAAC;AACxC,eAAO,iBAAiB,SAAS,MAAM,CAAC,CAAC;MAC1C;AACA,mBAAa,QAAQ,IAAI,CAAC,WAA8B;AACvD,YAAI,QAAQ,MAAM,CAAC;AACnB,YAAI,SAAS;AACZ,iBAAO,UAAU;iBACT,SAAS;AACjB,iBAAO,UAAU,SAAS,KAAK;MACjC;AACA,mBAAa,OAAO,IAAI,CAAC,WAA8B;AACtD,eAAO,QAAQ,SAAS,MAAM,CAAC,CAAC;MACjC;AAEA,UAAI,OAAO,OAAO,SAAQ;AAE1B,aAAO,QAAQ,KAAK,KAAI,EAAG,UAAU;AACpC,eAAO,OAAO,SAAQ;AAEvB,aAAO,MAAM;AACZ,YAAI,CAAC,QAAQ,KAAK,KAAI,EAAG,UAAU;AAAG;AACtC,YAAI,OAAO,UAAU,OAAO,IAAI,KAAK;AAAG;AACxC,eAAO,OAAO,SAAQ;;AAIvB,UAAI,OAAgC;AACpC,UAAI,QAAyB;AAC7B,UAAI,SAA4B;AAChC,aAAO,MAAM;AACZ,YAAI,SAAS;AAAM;AACnB,YAAI,KAAK,KAAI,EAAG,UAAU,GAAG;AAC5B,iBAAO;AACP,iBAAO,OAAO,SAAQ;mBACZ,CAAC,MAAM;AACjB,iBAAO,IAAI,iBAAiB,KAAK,KAAI,CAAE;AACvC,iBAAO,MAAM;AACZ,gBAAI,OAAO,UAAU,OAAO,OAAO,OAAO,SAAQ,CAAE,KAAK;AAAG;AAC5D,gBAAI,QAAQ,WAAW,MAAM,CAAC,CAAC;AAC/B,gBAAI;AAAO,oBAAM,IAAI;;AAEtB,eAAK,MAAM,KAAK,IAAI;eACd;AACN,cAAI,SAAS,IAAI,mBAAmB,MAAM,IAAI;AAE9C,iBAAO,MAAM;AACZ,gBAAI,QAAQ,OAAO,UAAU,OAAO,OAAO,OAAO,SAAQ,CAAE;AAC5D,gBAAI,SAAS;AAAG;AAChB,gBAAI,QAAQ,aAAa,MAAM,CAAC,CAAC;AACjC,gBAAI;AACH,oBAAM,MAAM;iBACR;AACJ,kBAAI,CAAC;AAAO,wBAAQ,CAAA;AACpB,kBAAI,CAAC;AAAQ,yBAAS,CAAA;AACtB,oBAAM,KAAK,MAAM,CAAC,CAAC;AACnB,kBAAI,cAAwB,CAAA;AAC5B,uBAAS,IAAI,GAAG,IAAI,OAAO;AAC1B,4BAAY,KAAK,SAAS,MAAM,IAAI,CAAC,CAAC,CAAC;AACxC,qBAAO,KAAK,WAAW;;;AAGzB,cAAI,OAAO,iBAAiB,KAAK,OAAO,kBAAkB,GAAG;AAC5D,mBAAO,gBAAgB,OAAO;AAC9B,mBAAO,iBAAiB,OAAO;;AAEhC,cAAI,SAAS,MAAM,SAAS,KAAK,UAAU,OAAO,SAAS,GAAG;AAC7D,mBAAO,QAAQ;AACf,mBAAO,SAAS;AAChB,oBAAQ;AACR,qBAAS;;AAEV,iBAAO,IAAI,OAAO,IAAI,KAAK;AAC3B,iBAAO,IAAI,OAAO,IAAI,KAAK;AAC3B,cAAI,OAAO,WAAW,IAAI;AACzB,mBAAO,MAAM,OAAO,IAAI,OAAO,UAAU,KAAK;AAC9C,mBAAO,MAAM,OAAO,IAAI,OAAO,SAAS,KAAK;iBACvC;AACN,mBAAO,MAAM,OAAO,IAAI,OAAO,SAAS,KAAK;AAC7C,mBAAO,MAAM,OAAO,IAAI,OAAO,UAAU,KAAK;;AAE/C,eAAK,QAAQ,KAAK,MAAM;;;IAG3B;IAEA,WAAY,MAAY;AACvB,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC7C,YAAI,KAAK,QAAQ,CAAC,EAAE,QAAQ,MAAM;AACjC,iBAAO,KAAK,QAAQ,CAAC;;;AAGvB,aAAO;IACR;IAEA,YAAa,cAAgC,aAAqB,IAAE;AACnE,eAAS,QAAQ,KAAK;AACrB,aAAK,WAAW,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC;IAC1D;IAEA,UAAO;AACN,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,aAAK,MAAM,CAAC,EAAE,SAAS,QAAO;;IAEhC;;AAGD,MAAM,qBAAN,MAAwB;IACvB;IACA,QAAgB;IAEhB,YAAa,MAAY;AACxB,WAAK,QAAQ,KAAK,MAAM,YAAY;IACrC;IAEA,WAAQ;AACP,UAAI,KAAK,SAAS,KAAK,MAAM;AAC5B,eAAO;AACR,aAAO,KAAK,MAAM,KAAK,OAAO;IAC/B;IAEA,UAAW,OAAiB,MAAmB;AAC9C,UAAI,CAAC;AAAM,eAAO;AAClB,aAAO,KAAK,KAAI;AAChB,UAAI,KAAK,UAAU;AAAG,eAAO;AAE7B,UAAI,QAAQ,KAAK,QAAQ,GAAG;AAC5B,UAAI,SAAS;AAAI,eAAO;AACxB,YAAM,CAAC,IAAI,KAAK,OAAO,GAAG,KAAK,EAAE,KAAI;AACrC,eAAS,IAAI,GAAG,YAAY,QAAQ,KAAK,KAAK;AAC7C,YAAI,QAAQ,KAAK,QAAQ,KAAK,SAAS;AACvC,YAAI,SAAS,IAAI;AAChB,gBAAM,CAAC,IAAI,KAAK,OAAO,SAAS,EAAE,KAAI;AACtC,iBAAO;;AAER,cAAM,CAAC,IAAI,KAAK,OAAO,WAAW,QAAQ,SAAS,EAAE,KAAI;AACzD,oBAAY,QAAQ;AACpB,YAAI,KAAK;AAAG,iBAAO;;IAErB;;AAGK,MAAO,mBAAP,MAAuB;IAC5B;IACA,YAA2B,cAAc;IACzC,YAA2B,cAAc;IACzC,QAAqB,YAAY;IACjC,QAAqB,YAAY;IACjC,UAA0B;IAC1B,QAAgB;IAChB,SAAiB;IACjB,MAAe;IACf,UAAU,IAAI,MAAK;IAEnB,YAAa,MAAY;AACxB,WAAK,OAAO;IACb;IAEA,WAAY,SAAgB;AAC3B,WAAK,UAAU;AACf,cAAQ,WAAW,KAAK,WAAW,KAAK,SAAS;AACjD,cAAQ,SAAS,KAAK,OAAO,KAAK,KAAK;AACvC,eAAS,UAAU,KAAK;AACvB,eAAO,UAAU;IACnB;;AAGK,MAAO,qBAAP,cAAkC,cAAa;IACpD;IACA;IACA,IAAY;IACZ,IAAY;IACZ,UAAkB;IAClB,UAAkB;IAClB,gBAAwB;IACxB,iBAAyB;IACzB,QAAgB;IAChB,UAAkB;IAClB,QAAyB;IACzB,SAA4B;IAE5B,YAAa,MAAwB,MAAY;AAChD,YAAK;AACL,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,WAAK,QAAQ,KAAK,IAAI;IACvB;;;;ACvOK,MAAO,iBAAP,MAAO,wBAAuB,iBAAgB;IACnD,SAA+B;;IAG/B;;IAGA,YAA6B,CAAA;;;;IAK7B,MAAuB,CAAA;;IAGvB,YAA2B,CAAA;;IAG3B,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;;IAG5B,QAAgB;;IAGhB,SAAiB;;IAGjB,aAAqB;;;IAIrB,QAAuB,CAAA;IAEf,aAAoC;IAE5C,WAA4B;IAE5B,YAAY,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;IAEhC,YAAa,MAAcC,OAAY;AACtC,YAAM,IAAI;AACV,WAAK,OAAOA;IACb;;;IAIA,eAAY;AACX,UAAI,CAAC,KAAK;AAAQ,cAAM,IAAI,MAAM,iBAAiB;AACnD,UAAI,YAAY,KAAK;AACrB,UAAI,CAAC,KAAK,OAAO,KAAK,IAAI,UAAU,UAAU;AAAQ,aAAK,MAAM,MAAM,cAAc,UAAU,MAAM;AACrG,UAAI,MAAM,KAAK;AACf,UAAI,IAAI,KAAK,IAAI;AACjB,UAAI,IAAI,KAAK,OAAO,GAAG,IAAI,KAAK,OAAO,GAAG,QAAQ,GAAG,SAAS;AAC9D,UAAI,KAAK,kBAAkB,oBAAoB;AAC9C,YAAI,SAAS,KAAK,QAAQ,OAAO,OAAO;AACxC,YAAI,eAAe,KAAK,OAAO,gBAAgB,KAAK;AACpD,gBAAQ,OAAO,SAAS;UACvB,KAAK;AACJ,kBAAM,OAAO,iBAAiB,OAAO,UAAU,OAAO,UAAU;AAChE,kBAAM,OAAO,gBAAgB,OAAO,UAAU,OAAO,SAAS;AAC9D,oBAAQ,OAAO,iBAAiB;AAChC,qBAAS,OAAO,gBAAgB;AAChC,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC9B,kBAAI,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,IAAI;AAChC,kBAAI,IAAI,CAAC,IAAI,KAAK,IAAI,UAAU,CAAC,KAAK;;AAEvC;UACD,KAAK;AACJ,kBAAM,OAAO,gBAAgB,OAAO,UAAU,OAAO,SAAS;AAC9D,iBAAK,OAAO,UAAU;AACtB,oBAAQ,OAAO,gBAAgB;AAC/B,qBAAS,OAAO,iBAAiB;AACjC,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC9B,kBAAI,CAAC,IAAI,KAAK,IAAI,UAAU,CAAC,KAAK;AAClC,kBAAI,IAAI,CAAC,IAAI,KAAK,IAAI,UAAU,IAAI,CAAC,KAAK;;AAE3C;UACD,KAAK;AACJ,iBAAK,OAAO,UAAU;AACtB,iBAAK,OAAO,UAAU;AACtB,oBAAQ,OAAO,iBAAiB;AAChC,qBAAS,OAAO,gBAAgB;AAChC,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC9B,kBAAI,CAAC,IAAI,KAAK,IAAI,UAAU,IAAI,CAAC,KAAK;AACtC,kBAAI,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI;;AAEjC;;AAEF,aAAK,OAAO,UAAU;AACtB,cAAM,OAAO,iBAAiB,OAAO,UAAU,OAAO,UAAU;AAChE,gBAAQ,OAAO,gBAAgB;AAC/B,iBAAS,OAAO,iBAAiB;iBACvB,CAAC,KAAK,QAAQ;AACxB,YAAI,IAAI;AACR,gBAAQ,SAAS;aACX;AACN,gBAAQ,KAAK,OAAO,KAAK;AACzB,iBAAS,KAAK,OAAO,KAAK;;AAG3B,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC9B,YAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI;AAC5B,YAAI,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,IAAI;;IAEtC;;;;IAKA,gBAAa;AACZ,aAAO,KAAK;IACb;;IAGA,cAAe,YAA0B;AACxC,WAAK,aAAa;AAClB,UAAI,YAAY;AACf,aAAK,QAAQ,WAAW;AACxB,aAAK,WAAW,WAAW;AAC3B,aAAK,sBAAsB,WAAW;AACtC,aAAK,YAAY,WAAW;AAC5B,aAAK,YAAY,WAAW;AAC5B,aAAK,aAAa,WAAW;AAC7B,aAAK,sBAAsB,WAAW;;IAExC;IAEA,OAAI;AACH,UAAI,KAAK;AAAY,eAAO,KAAK,cAAa;AAE9C,UAAI,OAAO,IAAI,gBAAe,KAAK,MAAM,KAAK,IAAI;AAClD,WAAK,SAAS,KAAK;AACnB,WAAK,MAAM,aAAa,KAAK,KAAK;AAElC,WAAK,OAAO,IAAI;AAChB,WAAK,YAAY,IAAI,MAAc,KAAK,UAAU,MAAM;AACxD,YAAM,UAAU,KAAK,WAAW,GAAG,KAAK,WAAW,GAAG,KAAK,UAAU,MAAM;AAC3E,WAAK,MAAM,IAAI,MAAc,KAAK,IAAI,MAAM;AAC5C,YAAM,UAAU,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,MAAM;AACzD,WAAK,YAAY,IAAI,MAAc,KAAK,UAAU,MAAM;AACxD,YAAM,UAAU,KAAK,WAAW,GAAG,KAAK,WAAW,GAAG,KAAK,UAAU,MAAM;AAC3E,WAAK,aAAa,KAAK;AAEvB,WAAK,WAAW,KAAK,YAAY,OAAO,KAAK,SAAS,KAAI,IAAK;AAG/D,UAAI,KAAK,OAAO;AACf,aAAK,QAAQ,IAAI,MAAc,KAAK,MAAM,MAAM;AAChD,cAAM,UAAU,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,MAAM,MAAM;;AAEhE,WAAK,QAAQ,KAAK;AAClB,WAAK,SAAS,KAAK;AAEnB,aAAO;IACR;IAEA,qBAAsB,MAAY,OAAe,OAAe,eAAgC,QAAgB,QAAc;AAC7H,UAAI,KAAK,YAAY;AAAM,aAAK,SAAS,MAAM,MAAM,IAAI;AACzD,YAAM,qBAAqB,MAAM,OAAO,OAAO,eAAe,QAAQ,MAAM;IAC7E;;IAGA,gBAAa;AACZ,UAAI,OAAO,IAAI,gBAAe,KAAK,MAAM,KAAK,IAAI;AAClD,WAAK,SAAS,KAAK;AACnB,WAAK,MAAM,aAAa,KAAK,KAAK;AAClC,WAAK,qBAAqB,KAAK;AAC/B,WAAK,cAAc,KAAK,aAAa,KAAK,aAAa,IAAI;AAC3D,UAAI,KAAK,UAAU;AAAM,aAAK,aAAY;AAC1C,aAAO;IACR;;;;AChLK,MAAO,iBAAP,MAAO,wBAAuB,iBAAgB;;IAGnD,UAAyB,CAAA;;IAGzB,SAAS;;;IAIT,gBAAgB;;;IAIhB,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;IAE5B,YAAa,MAAY;AACxB,YAAM,IAAI;IACX;IAEA,OAAI;AACH,UAAI,OAAO,IAAI,gBAAe,KAAK,IAAI;AACvC,WAAK,OAAO,IAAI;AAChB,WAAK,UAAU,IAAI,MAAc,KAAK,QAAQ,MAAM;AACpD,YAAM,UAAU,KAAK,SAAS,GAAG,KAAK,SAAS,GAAG,KAAK,QAAQ,MAAM;AACrE,WAAK,SAAS;AACd,WAAK,gBAAgB,KAAK;AAC1B,WAAK,MAAM,aAAa,KAAK,KAAK;AAClC,aAAO;IACR;;;;AC1BK,MAAO,kBAAP,MAAO,yBAAwB,iBAAgB;IACpD,IAAY;IACZ,IAAY;IACZ,WAAmB;;;IAInB,QAAQ,IAAI,MAAM,MAAM,MAAM,GAAG,CAAC;IAElC,YAAa,MAAY;AACxB,YAAM,IAAI;IACX;IAEA,qBAAsB,MAAY,OAAc;AAC/C,YAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACnD,YAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACnD,aAAO;IACR;IAEA,qBAAsB,MAAU;AAC/B,YAAM,IAAI,KAAK,WAAW,UAAU,QAAQ,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC;AAC/E,YAAM,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK;AACpC,YAAM,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK;AACpC,aAAO,UAAU,SAAS,GAAG,CAAC;IAC/B;IAEA,OAAI;AACH,UAAI,OAAO,IAAI,iBAAgB,KAAK,IAAI;AACxC,WAAK,IAAI,KAAK;AACd,WAAK,IAAI,KAAK;AACd,WAAK,WAAW,KAAK;AACrB,WAAK,MAAM,aAAa,KAAK,KAAK;AAClC,aAAO;IACR;;;;AC/BK,MAAO,mBAAP,MAAO,0BAAyB,WAAU;;IAE/C,IAAI;;IAGJ,IAAI;;IAGJ,SAAS;;IAGT,SAAS;;IAGT,WAAW;;IAGX,QAAQ;;IAGR,SAAS;;IAGT,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;;IAG5B;IAEA,SAA+B;IAC/B,WAA4B;;;;IAK5B,SAAS,MAAM,cAAc,CAAC;IAE9B,MAAM,MAAM,cAAc,CAAC;IAE3B,YAAY,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;IAEhC,YAAa,MAAcC,OAAY;AACtC,YAAM,IAAI;AACV,WAAK,OAAOA;IACb;;IAGA,eAAY;AACX,UAAI,CAAC,KAAK;AAAQ,cAAM,IAAI,MAAM,iBAAiB;AACnD,UAAI,SAAS,KAAK;AAClB,UAAI,MAAM,KAAK;AAEf,UAAI,UAAU,MAAM;AACnB,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,IAAI;AACT;;AAGD,UAAI,eAAe,KAAK,QAAQ,KAAK,OAAO,gBAAgB,KAAK;AACjE,UAAI,eAAe,KAAK,SAAS,KAAK,OAAO,iBAAiB,KAAK;AACnE,UAAI,SAAS,CAAC,KAAK,QAAQ,IAAI,KAAK,SAAS,KAAK,OAAO,UAAU;AACnE,UAAI,SAAS,CAAC,KAAK,SAAS,IAAI,KAAK,SAAS,KAAK,OAAO,UAAU;AACpE,UAAI,UAAU,SAAS,KAAK,OAAO,QAAQ;AAC3C,UAAI,UAAU,SAAS,KAAK,OAAO,SAAS;AAC5C,UAAI,UAAU,KAAK,WAAW,UAAU;AACxC,UAAI,MAAM,KAAK,IAAI,OAAO;AAC1B,UAAI,MAAM,KAAK,IAAI,OAAO;AAC1B,UAAI,IAAI,KAAK,GAAG,IAAI,KAAK;AACzB,UAAI,YAAY,SAAS,MAAM;AAC/B,UAAI,YAAY,SAAS;AACzB,UAAI,YAAY,SAAS,MAAM;AAC/B,UAAI,YAAY,SAAS;AACzB,UAAI,aAAa,UAAU,MAAM;AACjC,UAAI,aAAa,UAAU;AAC3B,UAAI,aAAa,UAAU,MAAM;AACjC,UAAI,aAAa,UAAU;AAC3B,UAAI,SAAS,KAAK;AAClB,aAAO,CAAC,IAAI,YAAY;AACxB,aAAO,CAAC,IAAI,YAAY;AACxB,aAAO,CAAC,IAAI,YAAY;AACxB,aAAO,CAAC,IAAI,aAAa;AACzB,aAAO,CAAC,IAAI,aAAa;AACzB,aAAO,CAAC,IAAI,aAAa;AACzB,aAAO,CAAC,IAAI,aAAa;AACzB,aAAO,CAAC,IAAI,YAAY;AAExB,UAAI,OAAO,WAAW,IAAI;AACzB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;aACV;AACN,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;AAChB,YAAI,CAAC,IAAI,OAAO;;IAElB;;;;;;;;;IAUA,qBAAsB,MAAY,eAAgC,QAAgB,QAAc;AAC/F,UAAI,KAAK,YAAY;AACpB,aAAK,SAAS,MAAM,MAAM,IAAI;AAE/B,UAAI,OAAO,KAAK;AAChB,UAAI,eAAe,KAAK;AACxB,UAAI,IAAI,KAAK,QAAQ,IAAI,KAAK;AAC9B,UAAI,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK;AACjD,UAAI,UAAU,GAAG,UAAU;AAE3B,gBAAU,aAAa,CAAC;AACxB,gBAAU,aAAa,CAAC;AACxB,oBAAc,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI;AACpD,oBAAc,SAAS,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI;AACxD,gBAAU;AAEV,gBAAU,aAAa,CAAC;AACxB,gBAAU,aAAa,CAAC;AACxB,oBAAc,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI;AACpD,oBAAc,SAAS,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI;AACxD,gBAAU;AAEV,gBAAU,aAAa,CAAC;AACxB,gBAAU,aAAa,CAAC;AACxB,oBAAc,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI;AACpD,oBAAc,SAAS,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI;AACxD,gBAAU;AAEV,gBAAU,aAAa,CAAC;AACxB,gBAAU,aAAa,CAAC;AACxB,oBAAc,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI;AACpD,oBAAc,SAAS,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI;IACzD;IAEA,OAAI;AACH,UAAI,OAAO,IAAI,kBAAiB,KAAK,MAAM,KAAK,IAAI;AACpD,WAAK,SAAS,KAAK;AACnB,WAAK,IAAI,KAAK;AACd,WAAK,IAAI,KAAK;AACd,WAAK,SAAS,KAAK;AACnB,WAAK,SAAS,KAAK;AACnB,WAAK,WAAW,KAAK;AACrB,WAAK,QAAQ,KAAK;AAClB,WAAK,SAAS,KAAK;AACnB,YAAM,UAAU,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC;AAC3C,YAAM,UAAU,KAAK,QAAQ,GAAG,KAAK,QAAQ,GAAG,CAAC;AACjD,WAAK,MAAM,aAAa,KAAK,KAAK;AAClC,WAAK,WAAW,KAAK,YAAY,OAAO,KAAK,SAAS,KAAI,IAAK;AAC/D,aAAO;IACR;IAEA,OAAO,KAAK;IACZ,OAAO,KAAK;IACZ,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,KAAK;IACZ,OAAO,KAAK;IAEZ,OAAO,KAAK;IACZ,OAAO,KAAK;IACZ,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,KAAK;IACZ,OAAO,KAAK;IAEZ,OAAO,KAAK;IACZ,OAAO,KAAK;IACZ,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,KAAK;IACZ,OAAO,KAAK;IAEZ,OAAO,KAAK;IACZ,OAAO,KAAK;IACZ,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,KAAK;IACZ,OAAO,KAAK;;;;ACzMP,MAAO,wBAAP,MAA4B;IACjC;IAEA,YAAa,OAAmB;AAC/B,WAAK,QAAQ;IACd;IAEA,aAAc,MAAc,UAAkB,UAAkB;AAC/D,UAAI,UAAU,SAAS;AACvB,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAC/C,YAAIC,QAAO,SAAS,QAAQ,UAAU,CAAC;AACvC,YAAI,SAAS,KAAK,MAAM,WAAWA,KAAI;AACvC,YAAI,UAAU;AAAM,gBAAM,IAAI,MAAM,gCAAgCA,QAAO,iBAAiB,OAAO,GAAG;AACtG,gBAAQ,CAAC,IAAI;;IAEf;IAEA,oBAAqB,MAAY,MAAcA,OAAc,UAAkB;AAC9E,UAAI,aAAa,IAAI,iBAAiB,MAAMA,KAAI;AAChD,UAAI,YAAY,MAAM;AACrB,aAAK,aAAa,MAAMA,OAAM,QAAQ;aAChC;AACN,YAAI,SAAS,KAAK,MAAM,WAAWA,KAAI;AACvC,YAAI,CAAC;AAAQ,gBAAM,IAAI,MAAM,gCAAgCA,QAAO,0BAA0B,OAAO,GAAG;AACxG,mBAAW,SAAS;;AAErB,aAAO;IACR;IAEA,kBAAmB,MAAY,MAAcA,OAAc,UAAkB;AAC5E,UAAI,aAAa,IAAI,eAAe,MAAMA,KAAI;AAC9C,UAAI,YAAY,MAAM;AACrB,aAAK,aAAa,MAAMA,OAAM,QAAQ;aAChC;AACN,YAAI,SAAS,KAAK,MAAM,WAAWA,KAAI;AACvC,YAAI,CAAC;AAAQ,gBAAM,IAAI,MAAM,gCAAgCA,QAAO,wBAAwB,OAAO,GAAG;AACtG,mBAAW,SAAS;;AAErB,aAAO;IACR;IAEA,yBAA0B,MAAY,MAAY;AACjD,aAAO,IAAI,sBAAsB,IAAI;IACtC;IAEA,kBAAmB,MAAY,MAAY;AAC1C,aAAO,IAAI,eAAe,IAAI;IAC/B;IAEA,mBAAoB,MAAY,MAAY;AAC3C,aAAO,IAAI,gBAAgB,IAAI;IAChC;IAEA,sBAAuB,MAAY,MAAY;AAC9C,aAAO,IAAI,mBAAmB,IAAI;IACnC;;;;ACnEK,MAAO,WAAP,MAAe;;IAEpB,QAAgB;;IAGhB;;IAGA,SAA0B;;IAG1B,SAAiB;;IAGjB,IAAI;;IAGJ,IAAI;;IAGJ,WAAW;;IAGX,SAAS;;IAGT,SAAS;;IAGT,SAAS;;IAGT,SAAS;;IAGT,UAAU,QAAQ;;;;IAKlB,eAAe;;;IAIf,QAAQ,IAAI,MAAK;;IAGjB;;IAGA,UAAU;IAEV,YAAa,OAAe,MAAc,QAAuB;AAChE,UAAI,QAAQ;AAAG,cAAM,IAAI,MAAM,qBAAqB;AACpD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,WAAK,QAAQ;AACb,WAAK,OAAO;AACZ,WAAK,SAAS;IACf;;AAID,MAAY;AAAZ,GAAA,SAAYC,UAAO;AAAG,IAAAA,SAAAA,SAAA,QAAA,IAAA,CAAA,IAAA;AAAQ,IAAAA,SAAAA,SAAA,iBAAA,IAAA,CAAA,IAAA;AAAiB,IAAAA,SAAAA,SAAA,wBAAA,IAAA,CAAA,IAAA;AAAwB,IAAAA,SAAAA,SAAA,SAAA,IAAA,CAAA,IAAA;AAAS,IAAAA,SAAAA,SAAA,qBAAA,IAAA,CAAA,IAAA;EAAoB,GAAxF,YAAA,UAAO,CAAA,EAAA;;;ACvDb,MAAO,OAAP,MAAW;;IAEhB;;IAGA;;IAGA,SAAsB;;IAGtB,WAAW,IAAI,MAAK;;IAGpB,IAAI;;IAGJ,IAAI;;IAGJ,WAAW;;IAGX,SAAS;;IAGT,SAAS;;IAGT,SAAS;;IAGT,SAAS;;IAGT,KAAK;;IAGL,KAAK;;IAGL,YAAY;;IAGZ,UAAU;;IAGV,UAAU;;IAGV,UAAU;;IAGV,UAAU;;IAGV,IAAI;;IAGJ,IAAI;;IAGJ,IAAI;;IAGJ,IAAI;;IAGJ,SAAS;;IAGT,SAAS;IAET,UAAmB,QAAQ;IAE3B,SAAS;IACT,SAAS;;IAGT,YAAa,MAAgB,UAAoB,QAAmB;AACnE,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,WAAK,OAAO;AACZ,WAAK,WAAW;AAChB,WAAK,SAAS;AACd,WAAK,eAAc;IACpB;;;IAIA,WAAQ;AACP,aAAO,KAAK;IACb;;IAGA,OAAQ,SAAgB;AACvB,WAAK,yBAAyB,KAAK,IAAI,KAAK,IAAI,KAAK,WAAW,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,KAAK,OAAO;IACvH;;;;IAKA,uBAAoB;AACnB,WAAK,yBAAyB,KAAK,GAAG,KAAK,GAAG,KAAK,UAAU,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,MAAM;IAChH;;;;;;IAOA,yBAA0B,GAAW,GAAW,UAAkB,QAAgB,QAAgB,QAAgB,QAAc;AAC/H,WAAK,KAAK;AACV,WAAK,KAAK;AACV,WAAK,YAAY;AACjB,WAAK,UAAU;AACf,WAAK,UAAU;AACf,WAAK,UAAU;AACf,WAAK,UAAU;AAEf,UAAI,SAAS,KAAK;AAClB,UAAI,CAAC,QAAQ;AACZ,YAAI,WAAW,KAAK;AACpB,cAAM,KAAK,SAAS,QAAQ,KAAK,SAAS;AAC1C,cAAM,MAAM,WAAW,UAAU,UAAU;AAC3C,cAAM,MAAM,WAAW,KAAK,UAAU,UAAU;AAChD,aAAK,IAAI,KAAK,IAAI,EAAE,IAAI,SAAS;AACjC,aAAK,IAAI,KAAK,IAAI,EAAE,IAAI,SAAS;AACjC,aAAK,IAAI,KAAK,IAAI,EAAE,IAAI,SAAS;AACjC,aAAK,IAAI,KAAK,IAAI,EAAE,IAAI,SAAS;AACjC,aAAK,SAAS,IAAI,KAAK,SAAS;AAChC,aAAK,SAAS,IAAI,KAAK,SAAS;AAChC;;AAGD,UAAI,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO;AAC7D,WAAK,SAAS,KAAK,IAAI,KAAK,IAAI,OAAO;AACvC,WAAK,SAAS,KAAK,IAAI,KAAK,IAAI,OAAO;AAEvC,cAAQ,KAAK,SAAS;QACrB,KAAK,QAAQ,QAAQ;AACpB,gBAAM,MAAM,WAAW,UAAU,UAAU;AAC3C,gBAAM,MAAM,WAAW,KAAK,UAAU,UAAU;AAChD,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB;;QAED,KAAK,QAAQ,iBAAiB;AAC7B,gBAAM,MAAM,WAAW,UAAU,UAAU;AAC3C,gBAAM,MAAM,WAAW,KAAK,UAAU,UAAU;AAChD,eAAK,IAAI,KAAK,IAAI,EAAE,IAAI;AACxB,eAAK,IAAI,KAAK,IAAI,EAAE,IAAI;AACxB,eAAK,IAAI,KAAK,IAAI,EAAE,IAAI;AACxB,eAAK,IAAI,KAAK,IAAI,EAAE,IAAI;AACxB;;QAED,KAAK,QAAQ,wBAAwB;AACpC,cAAI,IAAI,KAAK,KAAK,KAAK;AACvB,cAAI,MAAM;AACV,cAAI,IAAI,MAAQ;AACf,gBAAI,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI;AAClC,kBAAM,KAAK,SAAS;AACpB,kBAAM,KAAK,SAAS;AACpB,iBAAK,KAAK;AACV,iBAAK,KAAK;AACV,kBAAM,KAAK,MAAM,IAAI,EAAE,IAAI,UAAU;iBAC/B;AACN,iBAAK;AACL,iBAAK;AACL,kBAAM,KAAK,KAAK,MAAM,IAAI,EAAE,IAAI,UAAU;;AAE3C,gBAAM,MAAM,WAAW,SAAS,OAAO,UAAU;AACjD,gBAAM,MAAM,WAAW,SAAS,MAAM,MAAM,UAAU;AACtD,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,gBAAM,KAAK,KAAK,IAAI,EAAE,IAAI;AAC1B,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB;;QAED,KAAK,QAAQ;QACb,KAAK,QAAQ,qBAAqB;AACjC,sBAAY,UAAU;AACtB,gBAAM,MAAM,KAAK,IAAI,QAAQ,GAAG,MAAM,KAAK,IAAI,QAAQ;AACvD,cAAI,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS;AAC/C,cAAI,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS;AAC/C,cAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACnC,cAAI,IAAI;AAAS,gBAAI,IAAI;AACzB,gBAAM;AACN,gBAAM;AACN,cAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAC/B,cAAI,KAAK,WAAW,QAAQ,WACvB,KAAK,KAAK,KAAK,KAAK,MAAO,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS;AAAI,gBAAI,CAAC;AAC5F,qBAAW,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,EAAE;AAC1C,gBAAM,KAAK,KAAK,IAAI,QAAQ,IAAI;AAChC,gBAAM,KAAK,KAAK,IAAI,QAAQ,IAAI;AAChC,oBAAU,UAAU;AACpB,oBAAU,KAAK,UAAU,UAAU;AACnC,gBAAM,KAAK,KAAK,IAAI,MAAM,IAAI;AAC9B,gBAAM,KAAK,KAAK,IAAI,MAAM,IAAI;AAC9B,gBAAM,KAAK,KAAK,IAAI,MAAM,IAAI;AAC9B,gBAAM,KAAK,KAAK,IAAI,MAAM,IAAI;AAC9B,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB,eAAK,IAAI,KAAK,KAAK,KAAK;AACxB;;;AAGF,WAAK,KAAK,KAAK,SAAS;AACxB,WAAK,KAAK,KAAK,SAAS;AACxB,WAAK,KAAK,KAAK,SAAS;AACxB,WAAK,KAAK,KAAK,SAAS;IACzB;;IAGA,iBAAc;AACb,UAAI,OAAO,KAAK;AAChB,WAAK,IAAI,KAAK;AACd,WAAK,IAAI,KAAK;AACd,WAAK,WAAW,KAAK;AACrB,WAAK,SAAS,KAAK;AACnB,WAAK,SAAS,KAAK;AACnB,WAAK,SAAS,KAAK;AACnB,WAAK,SAAS,KAAK;AACnB,WAAK,UAAU,KAAK;IACrB;;;;;;;;;IAUA,yBAAsB;AACrB,UAAI,SAAS,KAAK;AAClB,UAAI,CAAC,QAAQ;AACZ,aAAK,KAAK,KAAK,SAAS,KAAK,SAAS;AACtC,aAAK,KAAK,KAAK,SAAS,KAAK,SAAS;AACtC,aAAK,YAAY,KAAK,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,UAAU;AACxD,aAAK,UAAU,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAC1D,aAAK,UAAU,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAC1D,aAAK,UAAU;AACf,aAAK,UAAU,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,UAAU;AAC5G;;AAED,UAAI,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO;AAC7D,UAAI,MAAM,KAAK,KAAK,KAAK,KAAK;AAC9B,UAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAC3D,UAAI,KAAK,KAAK,SAAS,OAAO,QAAQ,KAAK,KAAK,SAAS,OAAO;AAChE,WAAK,KAAM,KAAK,KAAK,KAAK;AAC1B,WAAK,KAAM,KAAK,KAAK,KAAK;AAE1B,UAAI,IAAI,IAAI,IAAI;AAChB,UAAI,KAAK,WAAW,QAAQ,iBAAiB;AAC5C,aAAK,KAAK;AACV,aAAK,KAAK;AACV,aAAK,KAAK;AACV,aAAK,KAAK;aACJ;AACN,gBAAQ,KAAK,SAAS;UACrB,KAAK,QAAQ,wBAAwB;AACpC,gBAAIC,KAAI,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,KAAK;AACtD,gBAAI,KAAK,KAAK,KAAK,SAAS;AAC5B,gBAAI,KAAK,KAAK,KAAK,SAAS;AAC5B,iBAAK,CAAC,KAAKA,KAAI,KAAK,SAAS;AAC7B,iBAAK,KAAKA,KAAI,KAAK,SAAS;AAC5B,kBAAM,KAAK,KAAK,KAAK,KAAK;AAC1B,iBAAK,KAAK;AACV,iBAAK,KAAK;AACV;;UAED,KAAK,QAAQ;UACb,KAAK,QAAQ;AACZ,gBAAI,MAAM,UAAU,OAAO,KAAK,QAAQ,GAAG,MAAM,UAAU,OAAO,KAAK,QAAQ;AAC/E,kBAAM,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS;AAC3C,kBAAM,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS;AAC3C,gBAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACnC,gBAAI,IAAI;AAAS,kBAAI,IAAI;AACzB,kBAAM;AACN,kBAAM;AACN,gBAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAC/B,gBAAI,KAAK,WAAW,QAAQ,WAAW,MAAM,MAAM,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS;AAAI,kBAAI,CAAC;AAC/G,gBAAI,IAAI,UAAU,KAAK,IAAI,KAAK,MAAM,IAAI,EAAE;AAC5C,iBAAK,KAAK,IAAI,CAAC,IAAI;AACnB,iBAAK,KAAK,IAAI,CAAC,IAAI;AACnB,kBAAM,KAAK,KAAK,KAAK,KAAK;AAC1B,iBAAK,KAAK;AACV,iBAAK,KAAK;AACV,iBAAK,KAAK;AACV,iBAAK,KAAK;;AAEZ,aAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AAC7B,aAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AAC7B,aAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AAC7B,aAAK,KAAK,KAAK,IAAI,KAAK,KAAK;;AAG9B,WAAK,UAAU;AACf,WAAK,UAAU,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAC1C,UAAI,KAAK,UAAU,MAAQ;AAC1B,YAAI,MAAM,KAAK,KAAK,KAAK;AACzB,aAAK,UAAU,MAAM,KAAK;AAC1B,aAAK,UAAU,CAAC,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,GAAG,IAAI,UAAU;AAC/D,aAAK,YAAY,KAAK,MAAM,IAAI,EAAE,IAAI,UAAU;aAC1C;AACN,aAAK,UAAU;AACf,aAAK,UAAU,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAC1C,aAAK,UAAU;AACf,aAAK,YAAY,KAAK,KAAK,MAAM,IAAI,EAAE,IAAI,UAAU;;IAEvD;;IAIA,oBAAiB;AAChB,aAAO,KAAK,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,UAAU;IAC/C;;IAGA,oBAAiB;AAChB,aAAO,KAAK,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,UAAU;IAC/C;;IAGA,iBAAc;AACb,aAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;IACnD;;IAGA,iBAAc;AACb,aAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;IACnD;;IAGA,aAAc,OAAc;AAC3B,UAAI,SAAS,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAClD,UAAI,IAAI,MAAM,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;AAClD,YAAM,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI;AAC7C,YAAM,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI;AAC7C,aAAO;IACR;;IAGA,aAAc,OAAc;AAC3B,UAAI,IAAI,MAAM,GAAG,IAAI,MAAM;AAC3B,YAAM,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK;AACzC,YAAM,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK;AACzC,aAAO;IACR;;IAGA,cAAe,OAAc;AAC5B,UAAI,SAAS;AAAM,cAAM,IAAI,MAAM,uBAAuB;AAC1D,aAAO,KAAK,UAAU,OAAO,QAAQ,KAAK,OAAO,aAAa,KAAK;IACpE;;IAGA,cAAe,OAAc;AAC5B,UAAI,SAAS;AAAM,cAAM,IAAI,MAAM,uBAAuB;AAC1D,aAAO,KAAK,UAAU,OAAO,QAAQ,KAAK,OAAO,aAAa,KAAK;IACpE;;IAGA,qBAAsB,eAAqB;AAC1C,UAAI,MAAM,UAAU,OAAO,aAAa,GAAG,MAAM,UAAU,OAAO,aAAa;AAC/E,aAAO,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,IAAI,UAAU,SAAS,KAAK,WAAW,KAAK;IACvH;;IAGA,qBAAsB,eAAqB;AAC1C,uBAAiB,KAAK,WAAW,KAAK;AACtC,UAAI,MAAM,UAAU,OAAO,aAAa,GAAG,MAAM,UAAU,OAAO,aAAa;AAC/E,aAAO,KAAK,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,MAAM,KAAK,CAAC,IAAI,UAAU;IACzF;;;;;IAMA,YAAa,SAAe;AAC3B,iBAAW,UAAU;AACrB,YAAM,MAAM,KAAK,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,OAAO;AACrD,YAAM,KAAK,KAAK,GAAG,KAAK,KAAK;AAC7B,WAAK,IAAI,MAAM,KAAK,MAAM,KAAK;AAC/B,WAAK,IAAI,MAAM,KAAK,MAAM,KAAK;AAC/B,WAAK,IAAI,MAAM,KAAK,MAAM,KAAK;AAC/B,WAAK,IAAI,MAAM,KAAK,MAAM,KAAK;IAChC;;;;ACxZK,MAAgB,iBAAhB,MAA8B;IACf;IAAqB;IAAsB;IAA/D,YAAoB,MAAqB,OAAsB,cAAqB;AAAhE,WAAA,OAAA;AAAqB,WAAA,QAAA;AAAsB,WAAA,eAAA;IAAyB;;;;ACEnF,MAAO,mBAAP,MAAuB;IACpB,aAAqB;IACrB;IACA;IACA,SAAyB,CAAA;IACzB,SAA4B,CAAA;IAC5B,SAAS;IACT,SAAS;IAEjB,YAAa,eAAmE,aAAqB,IAAI,aAAyB,IAAI,WAAU,GAAE;AACjJ,WAAK,gBAAgB;AACrB,WAAK,aAAa;AAClB,WAAK,aAAa;IACnB;IAEQ,MAAOC,OAAY;AAC1B,WAAK;AACL,aAAO,KAAK,aAAaA;IAC1B;IAEQ,QAAS,UAA6CA,OAAc,OAAU;AACrF,WAAK;AACL,WAAK;AACL,WAAK,OAAOA,KAAI,IAAI;AACpB,UAAI;AAAU,iBAASA,OAAM,KAAK;IACnC;IAEQ,MAAO,UAAmDA,OAAc,SAAe;AAC9F,WAAK;AACL,WAAK;AACL,WAAK,OAAOA,KAAI,IAAI;AACpB,UAAI;AAAU,iBAASA,OAAM,OAAO;IACrC;IAEA,UAAO;AACN,UAAI,UAAU,IAAI,QAAQ,CAAC,SAAmD,WAA+C;AAC5H,YAAI,QAAQ,MAAK;AAChB,cAAI,KAAK,kBAAiB,GAAI;AAC7B,gBAAI,KAAK,UAAS;AAAI,qBAAO,KAAK,MAAM;;AACnC,sBAAQ,IAAI;AACjB;;AAED,gCAAsB,KAAK;QAC5B;AACA,8BAAsB,KAAK;MAC5B,CAAC;AACD,aAAO;IACR;IAEA,cAAeA,OAAc,MAAY;AACxC,WAAK,WAAW,YAAY,KAAK,aAAaA,KAAI,IAAI;IACvD;IAEA,WAAYA,OACX,UAAsD,MAAK;IAAG,GAC9D,QAAiD,MAAK;IAAG,GAAC;AAC1D,MAAAA,QAAO,KAAK,MAAMA,KAAI;AAEtB,WAAK,WAAW,eAAeA,OAAM,CAAC,SAA0B;AAC/D,aAAK,QAAQ,SAASA,OAAM,IAAI;MACjC,GAAG,CAAC,QAAgB,iBAA8B;AACjD,aAAK,MAAM,OAAOA,OAAM,wBAAwBA,KAAI,YAAY,MAAM,KAAK,YAAY,EAAE;MAC1F,CAAC;IACF;IAEA,SAAUA,OACT,UAAgD,MAAK;IAAG,GACxD,QAAiD,MAAK;IAAG,GAAC;AAC1D,MAAAA,QAAO,KAAK,MAAMA,KAAI;AAEtB,WAAK,WAAW,aAAaA,OAAM,CAAC,SAAsB;AACzD,aAAK,QAAQ,SAASA,OAAM,IAAI;MACjC,GAAG,CAAC,QAAgB,iBAA8B;AACjD,aAAK,MAAM,OAAOA,OAAM,sBAAsBA,KAAI,YAAY,MAAM,KAAK,YAAY,EAAE;MACxF,CAAC;IACF;IAEA,SAAUA,OACT,UAAkD,MAAK;IAAG,GAC1D,QAAiD,MAAK;IAAG,GAAC;AAC1D,MAAAA,QAAO,KAAK,MAAMA,KAAI;AAEtB,WAAK,WAAW,aAAaA,OAAM,CAAC,SAAsB;AACzD,aAAK,QAAQ,SAASA,OAAM,IAAI;MACjC,GAAG,CAAC,QAAgB,iBAA8B;AACjD,aAAK,MAAM,OAAOA,OAAM,sBAAsBA,KAAI,YAAY,MAAM,KAAK,YAAY,EAAE;MACxF,CAAC;IACF;IAEA,YAAaA,OACZ,UAAoD,MAAK;IAAG,GAC5D,QAAiD,MAAK;IAAG,GAAC;AAC1D,MAAAA,QAAO,KAAK,MAAMA,KAAI;AAEtB,UAAI,YAAY,CAAC,EAAE,OAAO,WAAW,eAAe,OAAO,cAAc,eAAe,OAAO;AAC/F,UAAI,cAAc,CAAC;AACnB,UAAI,aAAa;AAChB,cAAMA,OAAM,EAAE,MAAmB,OAAM,CAAE,EAAE,KAAK,CAAC,aAAY;AAC5D,cAAI,SAAS;AAAI,mBAAO,SAAS,KAAI;AACrC,eAAK,MAAM,OAAOA,OAAM,wBAAwBA,KAAI,EAAE;AACtD,iBAAO;QACR,CAAC,EAAE,KAAK,CAAC,SAAQ;AAChB,iBAAO,OAAO,kBAAkB,MAAM,EAAE,kBAAkB,QAAQ,sBAAsB,OAAM,CAAE,IAAI;QACrG,CAAC,EAAE,KAAK,CAAC,WAAU;AAClB,cAAI;AAAQ,iBAAK,QAAQ,SAASA,OAAM,KAAK,cAAc,MAAM,CAAC;QACnE,CAAC;aACK;AACN,YAAI,QAAQ,IAAI,MAAK;AACrB,cAAM,cAAc;AACpB,cAAM,SAAS,MAAK;AACnB,eAAK,QAAQ,SAASA,OAAM,KAAK,cAAc,KAAK,CAAC;QACtD;AACA,cAAM,UAAU,MAAK;AACpB,eAAK,MAAM,OAAOA,OAAM,wBAAwBA,KAAI,EAAE;QACvD;AACA,YAAI,KAAK,WAAW,YAAYA,KAAI;AAAG,UAAAA,QAAO,KAAK,WAAW,YAAYA,KAAI;AAC9E,cAAM,MAAMA;;IAEd;IAEA,iBAAkBA,OACjB,UAAuD,MAAK;IAAG,GAC/D,QAAiD,MAAK;IAAG,GACzD,WAAyC;AAEzC,UAAI,QAAQA,MAAK,YAAY,GAAG;AAChC,UAAI,SAAS,SAAS,IAAIA,MAAK,UAAU,GAAG,QAAQ,CAAC,IAAI;AACzD,MAAAA,QAAO,KAAK,MAAMA,KAAI;AAEtB,WAAK,WAAW,aAAaA,OAAM,CAAC,cAA2B;AAC9D,YAAI;AACH,cAAI,QAAQ,IAAI,aAAa,SAAS;AACtC,cAAI,SAAS,MAAM,MAAM,QAAQ,QAAQ;AACzC,mBAAS,QAAQ,MAAM,OAAO;AAC7B,iBAAK,YAAY,CAAC,YAAY,SAAS,KAAK,OAAO,UAAU,KAAK,IAAK,GACtE,CAAC,WAAmB,YAAoB;AACvC,kBAAI,CAAC,OAAO;AACX,qBAAK,WAAW,OAAO;AACvB,oBAAI,EAAE,UAAU;AAAG,uBAAK,QAAQ,SAASA,OAAM,KAAK;;YAEtD,GACA,CAAC,WAAmB,YAAmB;AACtC,kBAAI,CAAC;AAAO,qBAAK,MAAM,OAAOA,OAAM,+BAA+BA,KAAI,gBAAgB,SAAS,EAAE;AAClG,sBAAQ;YACT,CAAC;;iBAGK,GAAG;AACX,eAAK,MAAM,OAAOA,OAAM,gCAAgCA,KAAI,KAAM,EAAU,OAAO,EAAE;;MAEvF,GAAG,CAAC,QAAgB,iBAA8B;AACjD,aAAK,MAAM,OAAOA,OAAM,+BAA+BA,KAAI,YAAY,MAAM,KAAK,YAAY,EAAE;MACjG,CAAC;IACF;IAEA,IAAKA,OAAY;AAChB,aAAO,KAAK,OAAO,KAAK,aAAaA,KAAI;IAC1C;IAEA,QAASA,OAAY;AACpB,MAAAA,QAAO,KAAK,aAAaA;AACzB,UAAI,QAAQ,KAAK,OAAOA,KAAI;AAC5B,UAAI;AAAO,eAAO;AAClB,UAAI,QAAQ,KAAK,OAAOA,KAAI;AAC5B,YAAM,MAAM,sBAAsBA,SAAQ,QAAQ,OAAO,QAAQ,GAAG;IACrE;IAEA,OAAQA,OAAY;AACnB,MAAAA,QAAO,KAAK,aAAaA;AACzB,UAAI,QAAQ,KAAK,OAAOA,KAAI;AAC5B,UAAU,MAAO;AAAe,cAAO,QAAO;AAC9C,aAAO,KAAK,OAAOA,KAAI;AACvB,aAAO;IACR;IAEA,YAAS;AACR,eAAS,OAAO,KAAK,QAAQ;AAC5B,YAAI,QAAQ,KAAK,OAAO,GAAG;AAC3B,YAAU,MAAO;AAAe,gBAAO,QAAO;;AAE/C,WAAK,SAAS,CAAA;IACf;IAEA,oBAAiB;AAChB,aAAO,KAAK,UAAU;IACvB;IAEA,YAAS;AACR,aAAO,KAAK;IACb;IAEA,YAAS;AACR,aAAO,KAAK;IACb;IAEA,UAAO;AACN,WAAK,UAAS;IACf;IAEA,YAAS;AACR,aAAO,OAAO,KAAK,KAAK,MAAM,EAAE,SAAS;IAC1C;IAEA,YAAS;AACR,aAAO,KAAK;IACb;;AAGK,MAAO,aAAP,MAAiB;IACd,YAAwC,CAAA;IAChD,cAAiC,CAAA;IAEjC,gBAAiB,SAAe;AAC/B,UAAI,CAAC,QAAQ,WAAW,OAAO,GAAG;AACjC,cAAM,IAAI,MAAM,iBAAiB;;AAGlC,UAAI,YAAY,QAAQ,QAAQ,SAAS;AACzC,UAAI,aAAa,IAAI;AACpB,qBAAa,UAAU;AACvB,eAAO,KAAK,QAAQ,OAAO,SAAS,CAAC;aAC/B;AACN,eAAO,QAAQ,OAAO,QAAQ,QAAQ,GAAG,IAAI,CAAC;;IAEhD;IAEA,mBAAoB,QAAc;AACjC,UAAI,gBAAgB,OAAO,KAAK,MAAM;AACtC,UAAI,MAAM,cAAc;AACxB,UAAI,QAAQ,IAAI,WAAW,GAAG;AAC9B,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC7B,cAAM,CAAC,IAAI,cAAc,WAAW,CAAC;;AAEtC,aAAO;IACR;IAEA,oBAAqB,SAAe;AACnC,UAAI,CAAC,QAAQ,WAAW,OAAO,GAAG;AACjC,cAAM,IAAI,MAAM,iBAAiB;;AAGlC,UAAI,YAAY,QAAQ,QAAQ,SAAS;AACzC,UAAI,aAAa;AAAI,cAAM,IAAI,MAAM,wBAAwB;AAC7D,mBAAa,UAAU;AACvB,aAAO,KAAK,mBAAmB,QAAQ,OAAO,SAAS,CAAC;IACzD;IAEA,aAAc,KAAa,SAAiC,OAAqD;AAChH,UAAI,KAAK,MAAM,KAAK,SAAS,KAAK;AAAG;AACrC,UAAI,KAAK,YAAY,GAAG,GAAG;AAC1B,YAAI;AACH,cAAI,UAAU,KAAK,YAAY,GAAG;AAClC,eAAK,OAAO,KAAK,KAAK,KAAK,gBAAgB,OAAO,CAAC;iBAC3C,GAAG;AACX,eAAK,OAAO,KAAK,KAAK,KAAK,UAAU,CAAC,CAAC;;AAExC;;AAED,UAAI,UAAU,IAAI,eAAc;AAChC,cAAQ,iBAAiB,WAAW;AACpC,cAAQ,KAAK,OAAO,KAAK,IAAI;AAC7B,UAAI,OAAO,MAAK;AACf,aAAK,OAAO,KAAK,QAAQ,QAAQ,QAAQ,YAAY;MACtD;AACA,cAAQ,SAAS;AACjB,cAAQ,UAAU;AAClB,cAAQ,KAAI;IACb;IAEA,aAAc,KAAa,SAAiC,OAAqD;AAChH,WAAK,aAAa,KAAK,CAAC,SAAsB;AAC7C,gBAAQ,KAAK,MAAM,IAAI,CAAC;MACzB,GAAG,KAAK;IACT;IAEA,eAAgB,KAAa,SAAqC,OAAqD;AACtH,UAAI,KAAK,MAAM,KAAK,SAAS,KAAK;AAAG;AACrC,UAAI,KAAK,YAAY,GAAG,GAAG;AAC1B,YAAI;AACH,cAAI,UAAU,KAAK,YAAY,GAAG;AAClC,eAAK,OAAO,KAAK,KAAK,KAAK,oBAAoB,OAAO,CAAC;iBAC/C,GAAG;AACX,eAAK,OAAO,KAAK,KAAK,KAAK,UAAU,CAAC,CAAC;;AAExC;;AAED,UAAI,UAAU,IAAI,eAAc;AAChC,cAAQ,KAAK,OAAO,KAAK,IAAI;AAC7B,cAAQ,eAAe;AACvB,UAAI,UAAU,MAAK;AAClB,aAAK,OAAO,KAAK,QAAQ,QAAQ,QAAQ,QAAQ;MAClD;AACA,cAAQ,SAAS,MAAK;AACrB,YAAI,QAAQ,UAAU,OAAO,QAAQ,UAAU;AAC9C,eAAK,OAAO,KAAK,KAAK,IAAI,WAAW,QAAQ,QAAuB,CAAC;;AAErE,kBAAO;MACT;AACA,cAAQ,UAAU;AAClB,cAAQ,KAAI;IACb;IAEQ,MAAO,KAAa,SAAc,OAAU;AACnD,UAAI,YAAY,KAAK,UAAU,GAAG;AAClC,UAAI;AACH,YAAI;AAAW,iBAAO;AACtB,aAAK,UAAU,GAAG,IAAI,YAAY,CAAA;;AAElC,kBAAU,KAAK,SAAS,KAAK;;IAE/B;IAEQ,OAAQ,KAAa,QAAgB,MAAS;AACrD,UAAI,YAAY,KAAK,UAAU,GAAG;AAClC,aAAO,KAAK,UAAU,GAAG;AACzB,UAAI,OAAO,UAAU,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI;AAChE,eAAS,IAAI,KAAK,SAAS,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAC/D,kBAAU,CAAC,EAAE,MAAM,MAAM,IAAI;IAC/B;;;;AC3TK,MAAO,QAAP,MAAY;IACjB;IACA,WAAmB;IACnB,aAAqB;IACrB,cAA6B;IAC7B,OAAe;IACf,SAAiB;IACjB,UAAkB;IAElB,YAAa,MAAc,MAAe;AACzC,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,WAAK,OAAO;AACZ,WAAK,OAAO;IACb;;;;ACjBK,MAAO,YAAP,MAAgB;IACrB;IACA,WAAmB;IACnB,aAAqB;IACrB,cAA6B;IAC7B,YAA2B;IAC3B,SAAiB;IACjB,UAAkB;IAElB,YAAa,MAAY;AACxB,WAAK,OAAO;IACb;;;;ACHK,MAAO,eAAP,MAAmB;;IAExB;;IAGA;;IAGA;;IAGA,gBAAgB;;IAGhB,WAAW;;;IAIX,UAAU;;IAGV,MAAM;;IAGN,WAAW;IACX,SAAS;IAET,YAAa,MAAwB,UAAkB;AACtD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,WAAK,OAAO;AAEZ,WAAK,QAAQ,IAAI,MAAK;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,YAAI,OAAO,SAAS,SAAS,KAAK,MAAM,CAAC,EAAE,IAAI;AAC/C,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,sBAAsB,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE;AACrE,aAAK,MAAM,KAAK,IAAI;;AAErB,UAAI,SAAS,SAAS,SAAS,KAAK,OAAO,IAAI;AAC/C,UAAI,CAAC;AAAQ,cAAM,IAAI,MAAM,sBAAsB,KAAK,OAAO,IAAI,EAAE;AAErE,WAAK,SAAS;AACd,WAAK,MAAM,KAAK;AAChB,WAAK,WAAW,KAAK;AACrB,WAAK,gBAAgB,KAAK;AAC1B,WAAK,WAAW,KAAK;AACrB,WAAK,UAAU,KAAK;IACrB;IAEA,WAAQ;AACP,aAAO,KAAK;IACb;IAEA,iBAAc;AACb,YAAM,OAAO,KAAK;AAClB,WAAK,MAAM,KAAK;AAChB,WAAK,WAAW,KAAK;AACrB,WAAK,gBAAgB,KAAK;AAC1B,WAAK,WAAW,KAAK;AACrB,WAAK,UAAU,KAAK;IACrB;IAEA,OAAQ,SAAgB;AACvB,UAAI,KAAK,OAAO;AAAG;AACnB,UAAI,SAAS,KAAK;AAClB,UAAI,QAAQ,KAAK;AACjB,cAAQ,MAAM,QAAQ;QACrB,KAAK;AACJ,eAAK,OAAO,MAAM,CAAC,GAAG,OAAO,QAAQ,OAAO,QAAQ,KAAK,UAAU,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,GAAG;AAC5G;QACD,KAAK;AACJ,eAAK,OAAO,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,OAAO,QAAQ,OAAO,QAAQ,KAAK,eAAe,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,UAAU,KAAK,GAAG;AAC1I;;IAEH;;IAGA,OAAQ,MAAY,SAAiB,SAAiB,UAAmB,SAAkB,SAAkB,OAAa;AACzH,UAAI,IAAI,KAAK;AACb,UAAI,CAAC;AAAG,cAAM,IAAI,MAAM,2BAA2B;AACnD,UAAI,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE;AACzC,UAAI,aAAa,CAAC,KAAK,UAAU,KAAK,WAAW,KAAK,GAAG,KAAK;AAE9D,cAAQ,KAAK,SAAS;QACrB,KAAK,QAAQ;AACZ,gBAAM,UAAU,KAAK,UAAU,UAAU,OAAO,KAAK,SAAS,MAAM;AACpE,gBAAM,UAAU,KAAK,UAAU,UAAU,OAAO,KAAK,SAAS,MAAM;AACpE;QACD,KAAK,QAAQ;AACZ,cAAI,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,IAAI,MAAQ,KAAK,KAAK,KAAK,EAAE;AACxE,cAAI,KAAK,KAAK,KAAK,SAAS;AAC5B,cAAI,KAAK,KAAK,KAAK,SAAS;AAC5B,eAAK,CAAC,KAAK,IAAI,KAAK,SAAS;AAC7B,eAAK,KAAK,IAAI,KAAK,SAAS;AAC5B,wBAAc,KAAK,MAAM,IAAI,EAAE,IAAI,UAAU;QAE9C;AACC,cAAI,IAAI,UAAU,EAAE,QAAQ,IAAI,UAAU,EAAE;AAC5C,cAAI,IAAI,KAAK,KAAK,KAAK;AACvB,cAAI,KAAK,IAAI,CAAC,KAAK,MAAQ;AAC1B,iBAAK;AACL,iBAAK;iBACC;AACN,kBAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK;AAClC,kBAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK;;;AAGrC,oBAAc,KAAK,MAAM,IAAI,EAAE,IAAI,UAAU;AAC7C,UAAI,KAAK,UAAU;AAAG,sBAAc;AACpC,UAAI,aAAa;AAChB,sBAAc;eACN,aAAa;AACrB,sBAAc;AACf,UAAI,KAAK,KAAK,SAAS,KAAK,KAAK;AACjC,UAAI,YAAY,SAAS;AACxB,gBAAQ,KAAK,SAAS;UACrB,KAAK,QAAQ;UACb,KAAK,QAAQ;AACZ,iBAAK,UAAU,KAAK;AACpB,iBAAK,UAAU,KAAK;;AAEtB,cAAM,IAAI,KAAK,KAAK,SAAS;AAC7B,YAAI,IAAI,MAAQ;AACf,gBAAM,KAAK,KAAK,KAAK,KAAK;AAC1B,cAAK,YAAY,KAAK,IAAI,KAAO,WAAW,KAAK,IAAI,GAAI;AACxD,kBAAM,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,KAAK,QAAQ;AAC5C,kBAAM;AACN,gBAAI;AAAS,oBAAM;;;;AAItB,WAAK,yBAAyB,KAAK,IAAI,KAAK,IAAI,KAAK,YAAY,aAAa,OAAO,IAAI,IAAI,KAAK,SACjG,KAAK,OAAO;IACd;;;IAIA,OAAQ,QAAc,OAAa,SAAiB,SAAiB,SAAiB,SAAkB,SAAkB,UAAkB,OAAa;AACxJ,UAAI,OAAO,WAAW,QAAQ,UAAU,MAAM,WAAW,QAAQ;AAAQ;AACzE,UAAI,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,MAAM,OAAO,SAAS,MAAM,OAAO,SAAS,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM;AAChH,UAAI,MAAM,GAAG,MAAM,GAAG,KAAK;AAC3B,UAAI,MAAM,GAAG;AACZ,cAAM,CAAC;AACP,cAAM;AACN,aAAK;aACC;AACN,cAAM;AACN,aAAK;;AAEN,UAAI,MAAM,GAAG;AACZ,cAAM,CAAC;AACP,aAAK,CAAC;;AAEP,UAAI,MAAM,GAAG;AACZ,cAAM,CAAC;AACP,cAAM;;AAEN,cAAM;AACP,UAAI,KAAK,MAAM,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI,OAAO;AAClG,UAAI,IAAI,KAAK,IAAI,MAAM,GAAG,KAAK;AAC/B,UAAI,CAAC,KAAK,SAAS;AAClB,aAAK;AACL,cAAM,IAAI,KAAK,OAAO;AACtB,cAAM,IAAI,KAAK,OAAO;aAChB;AACN,aAAK,MAAM;AACX,cAAM,IAAI,KAAK,IAAI,KAAK,OAAO;AAC/B,cAAM,IAAI,KAAK,IAAI,KAAK,OAAO;;AAEhC,UAAI,KAAK,OAAO;AAChB,UAAI,CAAC;AAAI,cAAM,IAAI,MAAM,sCAAsC;AAC/D,UAAI,GAAG;AACP,UAAI,GAAG;AACP,UAAI,GAAG;AACP,UAAI,GAAG;AACP,UAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,GAAG,QAAQ,IAAI,MAAM,GAAG;AAC1D,WAAK,KAAK,IAAI,EAAE,KAAK,OAAS,IAAI,IAAI;AACtC,UAAI,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK;AAChE,UAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,GAAG,KAAK,MAAM,KAAK,SAAS,KAAK,IAAI;AACzE,UAAI,KAAK,MAAQ;AAChB,aAAK,OAAO,QAAQ,SAAS,SAAS,OAAO,SAAS,OAAO,KAAK;AAClE,cAAM,yBAAyB,IAAI,IAAI,GAAG,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,OAAO;AACpG;;AAED,UAAI,UAAU,GAAG;AACjB,UAAI,UAAU,GAAG;AACjB,UAAI,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK;AAChE,UAAI,KAAK,KAAK,KAAK,KAAK;AACxB,UAAI,YAAY,GAAG;AAClB,oBAAY,OAAO,MAAM,KAAK;AAC9B,YAAI,KAAK,KAAK,KAAK,EAAE,GAAG,KAAK,KAAK,KAAK,KAAK,MAAM;AAClD,YAAI,KAAK,GAAG;AACX,cAAI,IAAI,KAAK,IAAI,GAAG,MAAM,WAAW,EAAE,IAAI;AAC3C,eAAK,KAAK,YAAY,IAAI,IAAI,MAAM;AACpC,gBAAM,IAAI;AACV,gBAAM,IAAI;AACV,eAAK,KAAK,KAAK,KAAK;;;AAGtB;AACA,YAAI,GAAG;AACN,gBAAM;AACN,cAAI,OAAO,KAAK,KAAK,KAAK,KAAK,OAAO,IAAI,KAAK;AAC/C,cAAI,MAAM,IAAI;AACb,kBAAM;AACN,iBAAK,KAAK,KAAK;qBACL,MAAM,GAAG;AACnB,kBAAM;AACN,iBAAK;AACL,gBAAI,SAAS;AACZ,mBAAK,KAAK,KAAK,EAAE,KAAK,KAAK,MAAM,KAAK,QAAQ;AAC9C,oBAAM;AACN,kBAAI;AAAS,sBAAM;;;AAGpB,iBAAK,KAAK,KAAK,GAAG,IAAI;AACvB,cAAI,KAAK,KAAK;AACd,cAAI,KAAK,KAAK,IAAI,EAAE;AACpB,eAAK,KAAK,MAAM,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;eAC1C;AACN,cAAI,MAAM;AACV,cAAI,MAAM;AACV,cAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,IAAI,EAAE;AAClD,cAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAClC,cAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AACjC,cAAI,KAAK,KAAK,IAAI,KAAK;AACvB,cAAI,KAAK,GAAG;AACX,gBAAI,IAAI,KAAK,KAAK,CAAC;AACnB,gBAAI,KAAK;AAAG,kBAAI,CAAC;AACjB,gBAAI,EAAE,KAAK,KAAK;AAChB,gBAAI,KAAK,IAAI,IAAI,KAAK,IAAI;AAC1B,gBAAI,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK;AAC3C,gBAAI,IAAI,KAAK,IAAI;AAChB,kBAAI,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI;AAC5B,mBAAK,KAAK,KAAK,MAAM,GAAG,CAAC;AACzB,mBAAK,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG;AACvC,oBAAM;;;AAGR,cAAI,WAAW,UAAU,IAAI,OAAO,KAAK,GAAG,UAAU,OAAO,MAAM,OAAO;AAC1E,cAAI,WAAW,GAAG,OAAO,KAAK,GAAG,UAAU,OAAO,MAAM,OAAO;AAC/D,cAAI,CAAC,IAAI,MAAM,KAAK;AACpB,cAAI,KAAK,MAAM,KAAK,GAAG;AACtB,gBAAI,KAAK,KAAK,CAAC;AACf,gBAAI,IAAI,KAAK,IAAI,CAAC,IAAI;AACtB,gBAAI,IAAI,KAAK,IAAI,CAAC;AAClB,gBAAI,IAAI,IAAI,IAAI;AAChB,gBAAI,IAAI,SAAS;AAChB,yBAAW;AACX,wBAAU;AACV,qBAAO;AACP,qBAAO;;AAER,gBAAI,IAAI,SAAS;AAChB,yBAAW;AACX,wBAAU;AACV,qBAAO;AACP,qBAAO;;;AAGT,cAAI,OAAO,UAAU,WAAW,KAAK;AACpC,iBAAK,KAAK,KAAK,MAAM,OAAO,SAAS,IAAI;AACzC,iBAAK,WAAW;iBACV;AACN,iBAAK,KAAK,KAAK,MAAM,OAAO,SAAS,IAAI;AACzC,iBAAK,WAAW;;;AAGlB,UAAI,KAAK,KAAK,MAAM,IAAI,EAAE,IAAI;AAC9B,UAAI,WAAW,OAAO;AACtB,YAAM,KAAK,MAAM,UAAU,SAAS,MAAM;AAC1C,UAAI,KAAK;AACR,cAAM;eACE,KAAK;AACb,cAAM;AACP,aAAO,yBAAyB,IAAI,IAAI,WAAW,KAAK,OAAO,IAAI,IAAI,GAAG,CAAC;AAC3E,iBAAW,MAAM;AACjB,aAAO,KAAK,MAAM,UAAU,SAAS,MAAM,WAAW,KAAK,MAAM;AACjE,UAAI,KAAK;AACR,cAAM;eACE,KAAK;AACb,cAAM;AACP,YAAM,yBAAyB,IAAI,IAAI,WAAW,KAAK,OAAO,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,OAAO;IACzH;;;;AC/RK,MAAO,mBAAP,cAAgC,eAAc;;IAEnD,QAAQ,IAAI,MAAK;;IAGT,UAA2B;IACnC,IAAW,OAAQ,UAAkB;AAAI,WAAK,UAAU;IAAU;IAClE,IAAW,SAAM;AAChB,UAAI,CAAC,KAAK;AAAS,cAAM,IAAI,MAAM,mBAAmB;;AACjD,eAAO,KAAK;IAClB;;IAGA,gBAAgB;;IAGhB,WAAW;;;IAIX,UAAU;;;IAIV,UAAU;;IAGV,MAAM;;IAGN,WAAW;IAEX,YAAa,MAAY;AACxB,YAAM,MAAM,GAAG,KAAK;IACrB;;;;ACjCK,MAAO,qBAAP,cAAkC,eAAc;;IAGrD,QAAQ,IAAI,MAAK;;IAGT,UAA2B;IACnC,IAAW,OAAQ,UAAkB;AAAI,WAAK,UAAU;IAAU;IAClE,IAAW,SAAM;AAChB,UAAI,CAAC,KAAK;AAAS,cAAM,IAAI,MAAM,mBAAmB;;AACjD,eAAO,KAAK;IAClB;;IAGA,eAA6B,aAAa;;IAG1C,cAA2B,YAAY;;IAGvC,aAAyB,WAAW;;IAGpC,iBAAyB;;IAGzB,WAAmB;;IAGnB,UAAkB;IAElB,YAAY;IACZ,OAAO;IACP,OAAO;IAEP,YAAa,MAAY;AACxB,YAAM,MAAM,GAAG,KAAK;IACrB;;AAMD,MAAY;AAAZ,GAAA,SAAYC,eAAY;AAAG,IAAAA,cAAAA,cAAA,OAAA,IAAA,CAAA,IAAA;AAAO,IAAAA,cAAAA,cAAA,SAAA,IAAA,CAAA,IAAA;EAAQ,GAA9B,iBAAA,eAAY,CAAA,EAAA;AAKxB,MAAY;AAAZ,GAAA,SAAYC,cAAW;AAAG,IAAAA,aAAAA,aAAA,QAAA,IAAA,CAAA,IAAA;AAAQ,IAAAA,aAAAA,aAAA,OAAA,IAAA,CAAA,IAAA;AAAO,IAAAA,aAAAA,aAAA,SAAA,IAAA,CAAA,IAAA;AAAS,IAAAA,aAAAA,aAAA,cAAA,IAAA,CAAA,IAAA;EAAa,GAAnD,gBAAA,cAAW,CAAA,EAAA;AAKvB,MAAY;AAAZ,GAAA,SAAYC,aAAU;AAAG,IAAAA,YAAAA,YAAA,SAAA,IAAA,CAAA,IAAA;AAAS,IAAAA,YAAAA,YAAA,OAAA,IAAA,CAAA,IAAA;AAAO,IAAAA,YAAAA,YAAA,YAAA,IAAA,CAAA,IAAA;EAAW,GAAxC,eAAA,aAAU,CAAA,EAAA;;;AChDhB,MAAO,iBAAP,MAAO,gBAAc;IAC1B,OAAO,OAAO;IAAI,OAAO,SAAS;IAAI,OAAO,QAAQ;IACrD,OAAO,UAAU;;IAGjB;;IAGA;;IAGA;;IAGA,WAAW;;IAGX,UAAU;IAEV,YAAY;IAEZ,OAAO;IAEP,OAAO;IAEP,SAAS,IAAI,MAAK;IAAY,YAAY,IAAI,MAAK;IACnD,QAAQ,IAAI,MAAK;IAAY,SAAS,IAAI,MAAK;IAAY,UAAU,IAAI,MAAK;IAC9E,WAAW,IAAI,MAAK;IAEpB,SAAS;IAET,YAAa,MAA0B,UAAkB;AACxD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,WAAK,OAAO;AAEZ,WAAK,QAAQ,IAAI,MAAK;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK;AAClD,YAAI,OAAO,SAAS,SAAS,KAAK,MAAM,CAAC,EAAE,IAAI;AAC/C,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,sBAAsB,KAAK,MAAM,CAAC,EAAE,IAAI,GAAG;AACtE,aAAK,MAAM,KAAK,IAAI;;AAErB,UAAI,SAAS,SAAS,SAAS,KAAK,OAAO,IAAI;AAC/C,UAAI,CAAC;AAAQ,cAAM,IAAI,MAAM,6BAA6B,KAAK,OAAO,IAAI,EAAE;AAC5E,WAAK,SAAS;AAEd,WAAK,WAAW,KAAK;AACrB,WAAK,UAAU,KAAK;AACpB,WAAK,YAAY,KAAK;AACtB,WAAK,OAAO,KAAK;AACjB,WAAK,OAAO,KAAK;IAClB;IAEA,WAAQ;AACP,aAAO,KAAK;IACb;IAEA,iBAAc;AACb,YAAM,OAAO,KAAK;AAClB,WAAK,WAAW,KAAK;AACrB,WAAK,UAAU,KAAK;AACpB,WAAK,YAAY,KAAK;AACtB,WAAK,OAAO,KAAK;AACjB,WAAK,OAAO,KAAK;IAClB;IAEA,OAAQ,SAAgB;AACvB,UAAI,aAAa,KAAK,OAAO,cAAa;AAC1C,UAAI,EAAE,sBAAsB;AAAiB;AAE7C,UAAI,YAAY,KAAK,WAAW,OAAO,KAAK,MAAM,OAAO,KAAK;AAC9D,UAAI,aAAa,KAAK,QAAQ,KAAK,QAAQ;AAAG;AAE9C,UAAI,OAAO,KAAK;AAChB,UAAI,WAAW,KAAK,cAAc,WAAW,SAAS,QAAQ,KAAK,cAAc,WAAW;AAE5F,UAAI,QAAQ,KAAK;AACjB,UAAI,YAAY,MAAM,QAAQ,cAAc,WAAW,YAAY,YAAY;AAC/E,UAAI,SAAS,MAAM,aAAa,KAAK,QAAQ,WAAW,GAAG,UAAyB,QAAQ,KAAK,UAAU,MAAM,aAAa,KAAK,SAAS,SAAS,IAAI,CAAA;AACzJ,UAAI,UAAU,KAAK;AAEnB,cAAQ,KAAK,aAAa;QACzB,KAAK,YAAY;AAChB,cAAI,OAAO;AACV,qBAAS,IAAI,GAAG,IAAI,cAAc,GAAG,IAAI,GAAG,KAAK;AAChD,kBAAI,OAAO,MAAM,CAAC;AAClB,kBAAI,cAAc,KAAK,KAAK;AAC5B,kBAAI,IAAI,cAAc,KAAK,GAAG,IAAI,cAAc,KAAK;AACrD,sBAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;;;AAGtC,gBAAM,UAAU,QAAQ,GAAG,aAAa,OAAO;AAC/C;QACD,KAAK,YAAY;AAChB,cAAI,MAAM;AACV,mBAAS,IAAI,GAAG,IAAI,cAAc,GAAG,IAAI,KAAI;AAC5C,gBAAI,OAAO,MAAM,CAAC;AAClB,gBAAI,cAAc,KAAK,KAAK;AAC5B,gBAAI,cAAc,gBAAe,SAAS;AACzC,kBAAI;AAAO,wBAAQ,CAAC,IAAI;AACxB,qBAAO,EAAE,CAAC,IAAI;mBACR;AACN,kBAAI,IAAI,cAAc,KAAK,GAAG,IAAI,cAAc,KAAK;AACrD,kBAAI,SAAS,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AACpC,kBAAI;AAAO,wBAAQ,CAAC,IAAI;AACxB,qBAAO,EAAE,CAAC,IAAI;AACd,qBAAO;;;AAGT,cAAI,MAAM,GAAG;AACZ,kBAAM,cAAc,MAAM;AAC1B,qBAAS,IAAI,GAAG,IAAI,aAAa;AAChC,qBAAO,CAAC,KAAK;;AAEf;QACD;AACC,cAAI,gBAAgB,KAAK,eAAe,YAAY;AACpD,mBAAS,IAAI,GAAG,IAAI,cAAc,GAAG,IAAI,KAAI;AAC5C,gBAAI,OAAO,MAAM,CAAC;AAClB,gBAAI,cAAc,KAAK,KAAK;AAC5B,gBAAI,cAAc,gBAAe,SAAS;AACzC,kBAAI;AAAO,wBAAQ,CAAC,IAAI;AACxB,qBAAO,EAAE,CAAC,IAAI;mBACR;AACN,kBAAI,IAAI,cAAc,KAAK,GAAG,IAAI,cAAc,KAAK;AACrD,kBAAI,SAAS,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AACpC,kBAAI;AAAO,wBAAQ,CAAC,IAAI;AACxB,qBAAO,EAAE,CAAC,KAAK,gBAAgB,cAAc,UAAU,WAAW,SAAS;;;;AAK/E,UAAI,YAAY,KAAK,sBAAsC,YAAY,aAAa,QAAQ;AAC5F,UAAI,QAAQ,UAAU,CAAC,GAAG,QAAQ,UAAU,CAAC,GAAG,iBAAiB,KAAK;AACtE,UAAI,MAAM;AACV,UAAI,kBAAkB;AACrB,cAAM,KAAK,cAAc,WAAW;WAChC;AACJ,cAAM;AACN,YAAI,IAAI,KAAK,OAAO;AACpB,0BAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,UAAU,SAAS,CAAC,UAAU;;AAE7E,eAAS,IAAI,GAAG,IAAI,GAAG,IAAI,WAAW,KAAK,KAAK,GAAG;AAClD,YAAI,OAAO,MAAM,CAAC;AAClB,aAAK,WAAW,QAAQ,KAAK,UAAU;AACvC,aAAK,WAAW,QAAQ,KAAK,UAAU;AACvC,YAAI,IAAI,UAAU,CAAC,GAAG,IAAI,UAAU,IAAI,CAAC,GAAG,KAAK,IAAI,OAAO,KAAK,IAAI;AACrE,YAAI,OAAO;AACV,cAAI,SAAS,QAAQ,CAAC;AACtB,cAAI,UAAU,GAAG;AAChB,gBAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,SAAS,KAAK,YAAY;AAClE,iBAAK,KAAK;AACV,iBAAK,KAAK;;;AAGZ,gBAAQ;AACR,gBAAQ;AACR,YAAI,YAAY,GAAG;AAClB,cAAI,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM;AAC1E,cAAI;AACH,gBAAI,UAAU,IAAI,CAAC;mBACX,OAAO,IAAI,CAAC,KAAK;AACzB,gBAAI,UAAU,IAAI,CAAC;;AAEnB,gBAAI,KAAK,MAAM,IAAI,EAAE;AACtB,eAAK,KAAK,MAAM,GAAG,CAAC;AACpB,cAAI,KAAK;AACR,kBAAM,KAAK,IAAI,CAAC;AAChB,kBAAM,KAAK,IAAI,CAAC;AAChB,gBAAI,SAAS,KAAK,KAAK;AACvB,sBAAU,UAAU,MAAM,IAAI,MAAM,KAAK,MAAM;AAC/C,sBAAU,UAAU,MAAM,IAAI,MAAM,KAAK,MAAM;iBACzC;AACN,iBAAK;;AAEN,cAAI,IAAI,UAAU;AACjB,iBAAK,UAAU;mBACP,IAAI,CAAC,UAAU;AACvB,iBAAK,UAAU;AAChB,eAAK;AACL,gBAAM,KAAK,IAAI,CAAC;AAChB,gBAAM,KAAK,IAAI,CAAC;AAChB,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;;AAE1B,aAAK,uBAAsB;;IAE7B;IAEA,sBAAuBC,OAAsB,aAAqB,UAAiB;AAClF,UAAI,SAAS,KAAK;AAClB,UAAI,WAAW,KAAK;AACpB,UAAI,SAAS,KAAK,QAAQ,MAAM,MAAM,aAAa,KAAK,WAAW,cAAc,IAAI,CAAC,GAAG,QAAuB,KAAK;AACrH,UAAIC,UAASD,MAAK;AAClB,UAAI,iBAAiBA,MAAK,qBAAqB,aAAa,iBAAiB,GAAG,YAAY,gBAAe;AAE3G,UAAI,CAACA,MAAK,eAAe;AACxB,YAAI,UAAUA,MAAK;AACnB,sBAAcC,UAAS,IAAI;AAC3B,YAAIC,cAAa,QAAQ,UAAU;AACnC,YAAI,KAAK,KAAK,gBAAgB,aAAa;AAAS,sBAAYA;AAEhE,YAAIC;AACJ,gBAAQ,KAAK,KAAK,aAAa;UAC9B,KAAK,YAAY;AAChB,YAAAA,cAAaD;AACb;UACD,KAAK,YAAY;AAChB,YAAAC,cAAaD,cAAa;AAC1B;UACD;AACC,YAAAC,cAAa;;AAEf,gBAAQ,MAAM,aAAa,KAAK,OAAO,CAAC;AACxC,iBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,aAAa,KAAK,KAAK,GAAG;AAC/D,cAAI,QAAQ,OAAO,CAAC,IAAIA;AACxB,sBAAY;AACZ,cAAI,IAAI;AAER,cAAIF,SAAQ;AACX,iBAAKC;AACL,gBAAI,IAAI;AAAG,mBAAKA;AAChB,oBAAQ;qBACE,IAAI,GAAG;AACjB,gBAAI,aAAa,gBAAe,QAAQ;AACvC,0BAAY,gBAAe;AAC3B,cAAAF,MAAK,qBAAqB,QAAQ,GAAG,GAAG,OAAO,GAAG,CAAC;;AAEpD,iBAAK,kBAAkB,GAAG,OAAO,GAAG,KAAK,CAAC;AAC1C;qBACU,IAAIE,aAAY;AAC1B,gBAAI,aAAa,gBAAe,OAAO;AACtC,0BAAY,gBAAe;AAC3B,cAAAF,MAAK,qBAAqB,QAAQ,iBAAiB,GAAG,GAAG,OAAO,GAAG,CAAC;;AAErE,iBAAK,iBAAiB,IAAIE,aAAY,OAAO,GAAG,KAAK,CAAC;AACtD;;AAID,mBAAS,SAAS;AACjB,gBAAI,SAAS,QAAQ,KAAK;AAC1B,gBAAI,IAAI;AAAQ;AAChB,gBAAI,SAAS;AACZ,mBAAK;iBACD;AACJ,kBAAI,OAAO,QAAQ,QAAQ,CAAC;AAC5B,mBAAK,IAAI,SAAS,SAAS;;AAE5B;;AAED,cAAI,SAAS,WAAW;AACvB,wBAAY;AACZ,gBAAID,WAAU,SAAS,YAAY;AAClC,cAAAD,MAAK,qBAAqB,QAAQ,iBAAiB,GAAG,GAAG,OAAO,GAAG,CAAC;AACpE,cAAAA,MAAK,qBAAqB,QAAQ,GAAG,GAAG,OAAO,GAAG,CAAC;;AAEnD,cAAAA,MAAK,qBAAqB,QAAQ,QAAQ,IAAI,GAAG,GAAG,OAAO,GAAG,CAAC;;AAEjE,eAAK,iBAAiB,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,GAC7G,YAAa,IAAI,KAAK,SAAS,CAAE;;AAEnC,eAAO;;AAIR,UAAIC,SAAQ;AACX,0BAAkB;AAClB,gBAAQ,MAAM,aAAa,KAAK,OAAO,cAAc;AACrD,QAAAD,MAAK,qBAAqB,QAAQ,GAAG,iBAAiB,GAAG,OAAO,GAAG,CAAC;AACpE,QAAAA,MAAK,qBAAqB,QAAQ,GAAG,GAAG,OAAO,iBAAiB,GAAG,CAAC;AACpE,cAAM,iBAAiB,CAAC,IAAI,MAAM,CAAC;AACnC,cAAM,iBAAiB,CAAC,IAAI,MAAM,CAAC;aAC7B;AACN;AACA,0BAAkB;AAClB,gBAAQ,MAAM,aAAa,KAAK,OAAO,cAAc;AACrD,QAAAA,MAAK,qBAAqB,QAAQ,GAAG,gBAAgB,OAAO,GAAG,CAAC;;AAIjE,UAAI,SAAS,MAAM,aAAa,KAAK,QAAQ,UAAU;AACvD,UAAI,aAAa;AACjB,UAAI,KAAK,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK;AACnF,UAAI,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM;AACjF,eAAS,IAAI,GAAG,IAAI,GAAG,IAAI,YAAY,KAAK,KAAK,GAAG;AACnD,cAAM,MAAM,CAAC;AACb,cAAM,MAAM,IAAI,CAAC;AACjB,cAAM,MAAM,IAAI,CAAC;AACjB,cAAM,MAAM,IAAI,CAAC;AACjB,aAAK,MAAM,IAAI,CAAC;AAChB,aAAK,MAAM,IAAI,CAAC;AAChB,gBAAQ,KAAK,MAAM,IAAI,OAAO;AAC9B,gBAAQ,KAAK,MAAM,IAAI,OAAO;AAC9B,kBAAU,MAAM,OAAO,IAAI,KAAK,MAAM;AACtC,kBAAU,MAAM,OAAO,IAAI,KAAK,MAAM;AACtC,eAAO,OAAO,IAAI;AAClB,eAAO,OAAO,IAAI;AAClB,eAAO,MAAM,MAAM,OAAO,OAAO,QAAQ;AACzC,eAAO,MAAM,MAAM,OAAO,OAAO,QAAQ;AACzC,sBAAc,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC7C,eAAO;AACP,eAAO;AACP,gBAAQ;AACR,gBAAQ;AACR,sBAAc,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC7C,eAAO;AACP,eAAO;AACP,sBAAc,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC7C,eAAO,OAAO;AACd,eAAO,OAAO;AACd,sBAAc,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC7C,eAAO,CAAC,IAAI;AACZ,aAAK;AACL,aAAK;;AAGN,UAAI,KAAK,KAAK,gBAAgB,aAAa;AAAS,oBAAY;AAEhE,UAAI;AACJ,cAAQ,KAAK,KAAK,aAAa;QAC9B,KAAK,YAAY;AAChB,uBAAa;AACb;QACD,KAAK,YAAY;AAChB,uBAAa,aAAa;AAC1B;QACD;AACC,uBAAa;;AAGf,UAAI,WAAW,KAAK;AACpB,UAAI,cAAc;AAClB,eAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,aAAa,KAAK,KAAK,GAAG;AAC5E,YAAI,QAAQ,OAAO,CAAC,IAAI;AACxB,oBAAY;AACZ,YAAI,IAAI;AAER,YAAIC,SAAQ;AACX,eAAK;AACL,cAAI,IAAI;AAAG,iBAAK;AAChB,kBAAQ;mBACE,IAAI,GAAG;AACjB,eAAK,kBAAkB,GAAG,OAAO,GAAG,KAAK,CAAC;AAC1C;mBACU,IAAI,YAAY;AAC1B,eAAK,iBAAiB,IAAI,YAAY,OAAO,iBAAiB,GAAG,KAAK,CAAC;AACvE;;AAID,iBAAS,SAAS;AACjB,cAAI,SAAS,OAAO,KAAK;AACzB,cAAI,IAAI;AAAQ;AAChB,cAAI,SAAS;AACZ,iBAAK;eACD;AACJ,gBAAI,OAAO,OAAO,QAAQ,CAAC;AAC3B,iBAAK,IAAI,SAAS,SAAS;;AAE5B;;AAID,YAAI,SAAS,WAAW;AACvB,sBAAY;AACZ,cAAI,KAAK,QAAQ;AACjB,eAAK,MAAM,EAAE;AACb,eAAK,MAAM,KAAK,CAAC;AACjB,gBAAM,MAAM,KAAK,CAAC;AAClB,gBAAM,MAAM,KAAK,CAAC;AAClB,gBAAM,MAAM,KAAK,CAAC;AAClB,gBAAM,MAAM,KAAK,CAAC;AAClB,eAAK,MAAM,KAAK,CAAC;AACjB,eAAK,MAAM,KAAK,CAAC;AACjB,kBAAQ,KAAK,MAAM,IAAI,OAAO;AAC9B,kBAAQ,KAAK,MAAM,IAAI,OAAO;AAC9B,oBAAU,MAAM,OAAO,IAAI,KAAK,MAAM;AACtC,oBAAU,MAAM,OAAO,IAAI,KAAK,MAAM;AACtC,iBAAO,OAAO,IAAI;AAClB,iBAAO,OAAO,IAAI;AAClB,iBAAO,MAAM,MAAM,MAAM,OAAO,QAAQ;AACxC,iBAAO,MAAM,MAAM,MAAM,OAAO,QAAQ;AACxC,wBAAc,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC7C,mBAAS,CAAC,IAAI;AACd,eAAK,KAAK,GAAG,KAAK,GAAG,MAAM;AAC1B,mBAAO;AACP,mBAAO;AACP,oBAAQ;AACR,oBAAQ;AACR,2BAAe,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC9C,qBAAS,EAAE,IAAI;;AAEhB,iBAAO;AACP,iBAAO;AACP,yBAAe,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC9C,mBAAS,CAAC,IAAI;AACd,iBAAO,OAAO;AACd,iBAAO,OAAO;AACd,yBAAe,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AAC9C,mBAAS,CAAC,IAAI;AACd,oBAAU;;AAIX,aAAK;AACL,iBAAS,WAAW;AACnB,cAAI,SAAS,SAAS,OAAO;AAC7B,cAAI,IAAI;AAAQ;AAChB,cAAI,WAAW;AACd,iBAAK;eACD;AACJ,gBAAI,OAAO,SAAS,UAAU,CAAC;AAC/B,gBAAI,WAAW,IAAI,SAAS,SAAS;;AAEtC;;AAED,aAAK,iBAAiB,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,YAAa,IAAI,KAAK,SAAS,CAAE;;AAE7G,aAAO;IACR;IAEA,kBAAmB,GAAW,MAAqB,GAAW,KAAoB,GAAS;AAC1F,UAAI,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE;AACvG,UAAI,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAC5B,UAAI,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAChC,UAAI,IAAI,CAAC,IAAI;IACd;IAEA,iBAAkB,GAAW,MAAqB,GAAW,KAAoB,GAAS;AACzF,UAAI,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,MAAM,IAAI,EAAE;AACvG,UAAI,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAC5B,UAAI,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAChC,UAAI,IAAI,CAAC,IAAI;IACd;IAEA,iBAAkB,GAAW,IAAY,IAAY,KAAa,KAAa,KAAa,KAAa,IAAY,IACpH,KAAoB,GAAW,UAAiB;AAChD,UAAI,KAAK,KAAK,MAAM,CAAC,GAAG;AACvB,YAAI,CAAC,IAAI;AACT,YAAI,IAAI,CAAC,IAAI;AACb,YAAI,IAAI,CAAC,IAAI,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AAC1C;;AAED,UAAI,KAAK,IAAI,GAAG,MAAM,KAAK,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,KAAK;AAChE,UAAI,KAAK,IAAI,GAAG,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,OAAO,MAAM;AAC3D,UAAI,IAAI,KAAK,MAAM,MAAM,OAAO,MAAM,OAAO,KAAK,KAAK,IAAI,KAAK,MAAM,MAAM,OAAO,MAAM,OAAO,KAAK;AACrG,UAAI,CAAC,IAAI;AACT,UAAI,IAAI,CAAC,IAAI;AACb,UAAI,UAAU;AACb,YAAI,IAAI;AACP,cAAI,IAAI,CAAC,IAAI,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;;AAE1C,cAAI,IAAI,CAAC,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG;;IAE3G;;;;AC5cK,MAAO,oBAAP,MAAwB;IACpB;IACD,QAAqB;;IAE7B,IAAW,KAAM,MAAU;AAAI,WAAK,QAAQ;IAAM;IAClD,IAAW,OAAI;AACd,UAAI,CAAC,KAAK;AAAO,cAAM,IAAI,MAAM,eAAe;;AAC3C,eAAO,KAAK;IAClB;IACA,UAAU;IACV,WAAW;IACX,UAAU;IACV,cAAc;IACd,OAAO;IACP,UAAU;IACV,MAAM;IAEN,SAAS;IACT,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,UAAU;IACV,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAEhB,SAAS;IAEA;IACT,YAAY;IACZ,WAAW;IAEX,YAAa,MAA6B,UAAkB;AAC3D,WAAK,OAAO;AACZ,WAAK,WAAW;AAEhB,WAAK,OAAO,SAAS,MAAM,KAAK,KAAK,KAAK;AAE1C,WAAK,UAAU,KAAK;AACpB,WAAK,WAAW,KAAK;AACrB,WAAK,UAAU,KAAK;AACpB,WAAK,cAAc,KAAK;AACxB,WAAK,OAAO,KAAK;AACjB,WAAK,UAAU,KAAK;AACpB,WAAK,MAAM,KAAK;IACjB;IAEA,QAAK;AACJ,WAAK,YAAY;AACjB,WAAK,WAAW,KAAK,SAAS;AAC9B,WAAK,SAAS;AACd,WAAK,UAAU;AACf,WAAK,YAAY;AACjB,WAAK,UAAU;AACf,WAAK,YAAY;AACjB,WAAK,eAAe;AACpB,WAAK,iBAAiB;AACtB,WAAK,cAAc;AACnB,WAAK,gBAAgB;IACtB;IAEA,iBAAc;AACb,YAAM,OAAO,KAAK;AAClB,WAAK,UAAU,KAAK;AACpB,WAAK,WAAW,KAAK;AACrB,WAAK,UAAU,KAAK;AACpB,WAAK,cAAc,KAAK;AACxB,WAAK,OAAO,KAAK;AACjB,WAAK,UAAU,KAAK;AACpB,WAAK,MAAM,KAAK;IACjB;IAEA,WAAQ;AACP,aAAO,KAAK;IACb;;IAGA,OAAQ,SAAgB;AACvB,YAAM,MAAM,KAAK;AACjB,UAAI,OAAO;AAAG;AAEd,YAAM,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,iBAAiB,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,GAAG,SAAS,KAAK,KAAK,SAAS;AAC3I,YAAM,OAAO,KAAK;AAClB,YAAM,IAAI,KAAK,KAAK;AAEpB,cAAQ,SAAS;QAChB,KAAK,QAAQ;AACZ;QACD,KAAK,QAAQ;AACZ,eAAK,MAAK;QAEX,KAAK,QAAQ;AACZ,gBAAM,QAAQ,KAAK,IAAI,KAAK,SAAS,OAAO,KAAK,UAAU,CAAC;AAC5D,eAAK,aAAa;AAClB,eAAK,WAAW,KAAK,SAAS;AAE9B,gBAAM,KAAK,KAAK,QAAQ,KAAK,KAAK;AAClC,cAAI,KAAK,QAAQ;AAChB,iBAAK,SAAS;AACd,iBAAK,KAAK;AACV,iBAAK,KAAK;iBACJ;AACN,gBAAI,IAAI,KAAK,WAAW,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,SAAS,KAAK,gBAAgB,IAAI;AACtI,gBAAI,KAAK,GAAG;AACX,kBAAI,GAAG;AACN,sBAAM,KAAK,KAAK,KAAK,MAAM;AAC3B,qBAAK,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,qBAAK,KAAK;;AAEX,kBAAI,GAAG;AACN,sBAAM,KAAK,KAAK,KAAK,MAAM;AAC3B,qBAAK,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,qBAAK,KAAK;;AAEX,kBAAI,KAAK,GAAG;AACX,oBAAI,KAAK,IAAI,KAAK,SAAS,KAAK,CAAC;AACjC,sBAAM,IAAI,KAAK,cAAc,GAAG,IAAI,KAAK,UAAU,IAAI,KAAK,OAAO,GAAG,KAAK,SAAS,QAAQ,CAAC,KAAK,UAAU,KAAK,WAAW;AAC5H,mBAAG;AACF,sBAAI,GAAG;AACN,yBAAK,cAAc,IAAI,KAAK,UAAU,KAAK;AAC3C,yBAAK,WAAW,KAAK,YAAY;AACjC,yBAAK,aAAa;;AAEnB,sBAAI,GAAG;AACN,yBAAK,cAAc,IAAI,KAAK,UAAU,KAAK;AAC3C,yBAAK,WAAW,KAAK,YAAY;AACjC,yBAAK,aAAa;;AAEnB,uBAAK;yBACG,KAAK;;AAEf,kBAAI;AAAG,qBAAK,UAAU,KAAK,UAAU,MAAM,KAAK,KAAK;AACrD,kBAAI;AAAG,qBAAK,UAAU,KAAK,UAAU,MAAM,KAAK,KAAK;;AAEtD,gBAAI,kBAAkB,QAAQ;AAC7B,kBAAI,KAAK,KAAK,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK;AACxD,kBAAI,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK;AACpD,kBAAI,KAAK;AACR,qBAAK;uBACG,KAAK,CAAC;AACd,qBAAK,CAAC;AACP,kBAAI,KAAK;AACR,qBAAK;uBACG,KAAK,CAAC;AACd,qBAAK,CAAC;AACP,kBAAI,gBAAgB;AACnB,sBAAM,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU;AAC7C,oBAAI,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,eAAe;AAC1E,qBAAK,iBAAiB,IAAI,KAAK,KAAK,IAAI,UAAU,SAAS,GAAG,IAAI,UAAU,OAAO;AACnF,oBAAI,KAAK,eAAe,KAAK;AAC7B,oBAAI,KAAK,IAAI,CAAC;AACd,oBAAI,KAAK,IAAI,CAAC;AACd,oBAAI,QAAQ;AACX,sBAAI,IAAI,KAAK,eAAc;AAC3B,sBAAI,IAAI;AAAG,yBAAK,gBAAgB,KAAK,IAAI,KAAK,KAAK,IAAI;;qBAElD;AACN,oBAAI,KAAK,IAAI,EAAE;AACf,oBAAI,KAAK,IAAI,EAAE;AACf,sBAAM,IAAI,IAAI,KAAK,eAAc;AACjC,oBAAI,IAAI;AAAG,uBAAK,gBAAgB,KAAK,IAAI,KAAK,KAAK,IAAI;;AAExD,kBAAI,KAAK;AACT,kBAAI,KAAK,GAAG;AACX,oBAAI,KAAK;AAAI,sBAAI,KAAK,IAAI,KAAK,SAAS,KAAK,CAAC;AAC9C,sBAAM,IAAI,KAAK,cAAc,GAAG,IAAI,KAAK,UAAU,IAAI,KAAK,MAAM,IAAK,SAAS,QAAQ,CAAC,KAAK,UAAU,KAAK,SAAU,IAAI,IAAI;AAC/H,uBAAO,MAAM;AACZ,uBAAK;AACL,sBAAI,QAAQ;AACX,yBAAK,kBAAkB,IAAI,IAAI,IAAI,IAAI,KAAK,cAAc,KAAK;AAC/D,yBAAK,eAAe,KAAK,gBAAgB;AACzC,yBAAK,iBAAiB;;AAEvB,sBAAI,gBAAgB;AACnB,yBAAK,oBAAoB,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,eAAe,KAAK;AACvE,yBAAK,gBAAgB,KAAK,iBAAiB;AAC3C,yBAAK,kBAAkB;AACvB,wBAAI,IAAI;AAAG;AACX,0BAAM,IAAI,KAAK,eAAe,KAAK;AACnC,wBAAI,KAAK,IAAI,CAAC;AACd,wBAAI,KAAK,IAAI,CAAC;6BACJ,IAAI;AACd;;;;AAIJ,iBAAK,YAAY;;AAElB,eAAK,KAAK,KAAK;AACf,eAAK,KAAK,KAAK;AACf;QACD,KAAK,QAAQ;AACZ,cAAI;AAAG,iBAAK,UAAU,KAAK,UAAU,MAAM,KAAK,KAAK;AACrD,cAAI;AAAG,iBAAK,UAAU,KAAK,UAAU,MAAM,KAAK,KAAK;;AAGvD,UAAI,gBAAgB;AACnB,YAAI,IAAI,KAAK,eAAe,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI;AACnD,YAAI,KAAK,KAAK,SAAS,GAAG;AACzB,cAAI,IAAI;AACR,cAAI,KAAK,KAAK,SAAS,GAAG;AACzB,gBAAI,IAAI,KAAK,KAAK;AAClB,gBAAI,KAAK,IAAI,CAAC;AACd,gBAAI,KAAK,IAAI,CAAC;AACd,gBAAI,KAAK;AACT,iBAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AAC1B,iBAAK,IAAI,IAAI,IAAI,IAAI,KAAK;;AAE3B,eAAK,IAAI,KAAK,KAAK;AACnB,cAAI,KAAK,IAAI,CAAC;AACd,cAAI,KAAK,IAAI,CAAC;AACd,cAAI,KAAK;AACT,eAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AAC1B,eAAK,IAAI,IAAI,IAAI,IAAI,KAAK;eACpB;AACN,eAAK,KAAK,KAAK;AACf,cAAI,KAAK,IAAI,CAAC;AACd,cAAI,KAAK,IAAI,CAAC;AACd,cAAI,KAAK;AACT,eAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AAC1B,eAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AAC1B,cAAI,KAAK;AACT,eAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AAC1B,eAAK,IAAI,IAAI,IAAI,IAAI,KAAK;;;AAG5B,UAAI,QAAQ;AACX,cAAM,IAAI,IAAI,KAAK,cAAc,MAAM,KAAK,KAAK;AACjD,aAAK,KAAK;AACV,aAAK,KAAK;;AAEX,UAAI,WAAW,QAAQ,MAAM;AAC5B,aAAK,KAAK,IAAI,KAAK;AACnB,aAAK,KAAK,IAAI,KAAK;;AAEpB,WAAK,uBAAsB;IAC5B;;;IAIA,UAAW,GAAW,GAAS;AAC9B,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,MAAM;IACZ;;;IAIA,OAAQ,GAAW,GAAW,SAAe;AAC5C,YAAM,IAAI,UAAU,UAAU,QAAQ,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC;AACzE,YAAM,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK,KAAK;AACvC,WAAK,UAAU,KAAK,MAAM,KAAK,MAAM,IAAI,KAAK,MAAM,KAAK,MAAM,EAAE;IAClE;;;;ACrQK,MAAO,OAAP,MAAW;;IAEhB;;IAGA;;;IAIA;;;IAIA,YAA0B;IAE1B,aAAgC;IAEhC,kBAA0B;;;IAI1B,gBAAwB;;;;;IAMxB,SAAS,IAAI,MAAK;IAElB,YAAa,MAAgB,MAAU;AACtC,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,WAAK,QAAQ,IAAI,MAAK;AACtB,WAAK,YAAY,CAAC,KAAK,YAAY,OAAO,IAAI,MAAK;AACnD,WAAK,eAAc;IACpB;;IAGA,cAAW;AACV,aAAO,KAAK,KAAK;IAClB;;IAGA,gBAAa;AACZ,aAAO,KAAK;IACb;;;;IAKA,cAAe,YAA6B;AAC3C,UAAI,KAAK,cAAc;AAAY;AACnC,UAAI,EAAE,sBAAsB,qBAAqB,EAAE,KAAK,sBAAsB,qBACvD,WAAY,sBAAyC,KAAK,WAAY,oBAAoB;AAChH,aAAK,OAAO,SAAS;;AAEtB,WAAK,aAAa;AAClB,WAAK,gBAAgB;IACtB;;IAGA,iBAAc;AACb,WAAK,MAAM,aAAa,KAAK,KAAK,KAAK;AACvC,UAAI,KAAK;AAAW,aAAK,UAAU,aAAa,KAAK,KAAK,SAAU;AACpE,UAAI,CAAC,KAAK,KAAK;AACd,aAAK,aAAa;WACd;AACJ,aAAK,aAAa;AAClB,aAAK,cAAc,KAAK,KAAK,SAAS,cAAc,KAAK,KAAK,OAAO,KAAK,KAAK,cAAc,CAAC;;IAEhG;;;;ACtEK,MAAO,sBAAP,MAA0B;;IAG/B;;IAGA;;IAGA;IAEA,YAAY;IAAG,OAAO;IAAG,OAAO;IAAG,YAAY;IAAG,YAAY;IAAG,YAAY;IAE7E,OAAO,IAAI,QAAO;IAClB,SAAS;IAET,YAAa,MAA+B,UAAkB;AAC7D,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,WAAK,OAAO;AAEZ,WAAK,QAAQ,IAAI,MAAK;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,YAAI,OAAO,SAAS,SAAS,KAAK,MAAM,CAAC,EAAE,IAAI;AAC/C,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,sBAAsB,KAAK,MAAM,CAAC,EAAE,IAAI,GAAG;AACtE,aAAK,MAAM,KAAK,IAAI;;AAErB,UAAI,SAAS,SAAS,SAAS,KAAK,OAAO,IAAI;AAC/C,UAAI,CAAC;AAAQ,cAAM,IAAI,MAAM,6BAA6B,KAAK,OAAO,IAAI,GAAG;AAC7E,WAAK,SAAS;AAEd,WAAK,YAAY,KAAK;AACtB,WAAK,OAAO,KAAK;AACjB,WAAK,OAAO,KAAK;AACjB,WAAK,YAAY,KAAK;AACtB,WAAK,YAAY,KAAK;AACtB,WAAK,YAAY,KAAK;IACvB;IAEA,WAAQ;AACP,aAAO,KAAK;IACb;IAEA,iBAAc;AACb,YAAM,OAAO,KAAK;AAClB,WAAK,YAAY,KAAK;AACtB,WAAK,OAAO,KAAK;AACjB,WAAK,OAAO,KAAK;AACjB,WAAK,YAAY,KAAK;AACtB,WAAK,YAAY,KAAK;AACtB,WAAK,YAAY,KAAK;IACvB;IAEA,OAAQ,SAAgB;AACvB,UAAI,KAAK,aAAa,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,aAAa,KAAK,KAAK,aAAa,KAAK,KAAK,aAAa;AAAG;AAElI,UAAI,KAAK,KAAK,OAAO;AACpB,YAAI,KAAK,KAAK;AACb,eAAK,mBAAkB;;AAEvB,eAAK,mBAAkB;aAClB;AACN,YAAI,KAAK,KAAK;AACb,eAAK,mBAAkB;;AAEvB,eAAK,mBAAkB;;IAE1B;IAEA,qBAAkB;AACjB,UAAI,YAAY,KAAK,WAAW,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,KAAK,WACpF,YAAY,KAAK,WAAW,YAAY,KAAK;AAC9C,UAAI,YAAY,QAAQ,KAAK,QAAQ;AAErC,UAAI,SAAS,KAAK;AAClB,UAAI,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO;AAC7D,UAAI,gBAAgB,KAAK,KAAK,KAAK,KAAK,IAAI,UAAU,SAAS,CAAC,UAAU;AAC1E,UAAI,iBAAiB,KAAK,KAAK,iBAAiB;AAChD,UAAI,eAAe,KAAK,KAAK,eAAe;AAE5C,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAElB,YAAI,aAAa,GAAG;AACnB,cAAI,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK;AACjD,cAAI,IAAI,KAAK,MAAM,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,CAAC,IAAI;AAChD,cAAI,IAAI,UAAU;AACjB,iBAAK,UAAU;mBACP,IAAI,CAAC,UAAU;AACvB,iBAAK,UAAU;AAChB,eAAK;AACL,cAAI,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC;AACvC,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;;AAG1B,YAAI,WAAW;AACd,cAAI,OAAO,KAAK;AAChB,iBAAO,aAAa,KAAK,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,OAAO,CAAC;AAClE,eAAK,WAAW,KAAK,IAAI,KAAK,UAAU;AACxC,eAAK,WAAW,KAAK,IAAI,KAAK,UAAU;;AAGzC,YAAI,aAAa,GAAG;AACnB,cAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AACnD,cAAI,KAAK;AAAG,iBAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,KAAK,KAAK,gBAAgB,aAAa;AAChG,eAAK,KAAK;AACV,eAAK,KAAK;;AAEX,YAAI,aAAa,GAAG;AACnB,cAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AACnD,cAAI,KAAK;AAAG,iBAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,KAAK,KAAK,gBAAgB,aAAa;AAChG,eAAK,KAAK;AACV,eAAK,KAAK;;AAGX,YAAI,YAAY,GAAG;AAClB,cAAI,IAAI,KAAK,GAAG,IAAI,KAAK;AACzB,cAAI,KAAK,KAAK,MAAM,GAAG,CAAC;AACxB,cAAI,IAAI,KAAK,MAAM,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK,KAAK,MAAM,KAAK,GAAG,KAAK,CAAC;AACjF,cAAI,IAAI,UAAU;AACjB,iBAAK,UAAU;mBACP,IAAI,CAAC,UAAU;AACvB,iBAAK,UAAU;AAChB,cAAI,MAAM,IAAI,gBAAgB;AAC9B,cAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAC/B,eAAK,IAAI,KAAK,IAAI,CAAC,IAAI;AACvB,eAAK,IAAI,KAAK,IAAI,CAAC,IAAI;;AAGxB,aAAK,uBAAsB;;IAE7B;IAEA,qBAAkB;AACjB,UAAI,YAAY,KAAK,WAAW,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,KAAK,WACpF,YAAY,KAAK,WAAW,YAAY,KAAK;AAC9C,UAAI,YAAY,QAAQ,KAAK,QAAQ;AAErC,UAAI,SAAS,KAAK;AAClB,UAAI,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO;AAC7D,UAAI,gBAAgB,KAAK,KAAK,KAAK,KAAK,IAAI,UAAU,SAAS,CAAC,UAAU;AAC1E,UAAI,iBAAiB,KAAK,KAAK,iBAAiB,eAAe,eAAe,KAAK,KAAK,eAAe;AAEvG,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAElB,YAAI,aAAa,GAAG;AACnB,cAAI,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK;AACjD,cAAI,IAAI,KAAK,MAAM,IAAI,EAAE,IAAI;AAC7B,cAAI,IAAI,UAAU;AACjB,iBAAK,UAAU;mBACP,IAAI,CAAC,UAAU;AACvB,iBAAK,UAAU;AAChB,eAAK;AACL,cAAI,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC;AACvC,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;AACzB,eAAK,IAAI,MAAM,IAAI,MAAM;;AAG1B,YAAI,WAAW;AACd,cAAI,OAAO,KAAK;AAChB,iBAAO,aAAa,KAAK,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,OAAO,CAAC;AAClE,eAAK,UAAU,KAAK,IAAI;AACxB,eAAK,UAAU,KAAK,IAAI;;AAGzB,YAAI,aAAa,GAAG;AACnB,cAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,KAAK,KAAK,gBAAgB,YAAY;AAClF,eAAK,KAAK;AACV,eAAK,KAAK;;AAEX,YAAI,aAAa,GAAG;AACnB,cAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,KAAK,KAAK,gBAAgB,YAAY;AAClF,eAAK,KAAK;AACV,eAAK,KAAK;;AAGX,YAAI,YAAY,GAAG;AAClB,cAAI,IAAI,KAAK,MAAM,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,EAAE;AAC9C,cAAI,IAAI,UAAU;AACjB,iBAAK,UAAU;mBACP,IAAI,CAAC,UAAU;AACvB,iBAAK,UAAU;AAChB,cAAI,IAAI,KAAK,GAAG,IAAI,KAAK;AACzB,cAAI,KAAK,MAAM,GAAG,CAAC,KAAK,IAAI,UAAU,KAAK,IAAI,gBAAgB;AAC/D,cAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAC/B,eAAK,IAAI,KAAK,IAAI,CAAC,IAAI;AACvB,eAAK,IAAI,KAAK,IAAI,CAAC,IAAI;;AAGxB,aAAK,uBAAsB;;IAE7B;IAEA,qBAAkB;AACjB,UAAI,YAAY,KAAK,WAAW,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,KAAK,WACpF,YAAY,KAAK,WAAW,YAAY,KAAK;AAE9C,UAAI,SAAS,KAAK;AAElB,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAElB,YAAI,WAAW,KAAK;AACpB,YAAI,aAAa;AAAG,uBAAa,OAAO,YAAY,WAAW,KAAK,KAAK,kBAAkB;AAE3F,YAAI,IAAI,KAAK,IAAI,IAAI,KAAK;AAC1B,cAAM,OAAO,KAAK,IAAI,KAAK,KAAK,WAAW;AAC3C,cAAM,OAAO,KAAK,IAAI,KAAK,KAAK,WAAW;AAE3C,YAAI,SAAS,KAAK,SAAS,SAAS,KAAK;AACzC,YAAI,aAAa,KAAK,UAAU;AAC/B,oBAAU,UAAU,OAAO,UAAU,SAAS,KAAK,KAAK,gBAAgB,aAAa;AACtF,YAAI,aAAa,KAAK,UAAU;AAC/B,oBAAU,UAAU,OAAO,UAAU,SAAS,KAAK,KAAK,gBAAgB,aAAa;AAEtF,YAAI,SAAS,KAAK;AAClB,YAAI,aAAa;AAAG,qBAAW,OAAO,UAAU,SAAS,KAAK,KAAK,gBAAgB;AAEnF,aAAK,yBAAyB,GAAG,GAAG,UAAU,QAAQ,QAAQ,KAAK,SAAS,MAAM;;IAEpF;IAEA,qBAAkB;AACjB,UAAI,YAAY,KAAK,WAAW,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,KAAK,WACpF,YAAY,KAAK,WAAW,YAAY,KAAK;AAE9C,UAAI,SAAS,KAAK;AAElB,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAElB,YAAI,WAAW,KAAK,aAAa,OAAO,YAAY,KAAK,KAAK,kBAAkB;AAChF,YAAI,IAAI,KAAK,MAAM,OAAO,KAAK,KAAK,KAAK,WAAW;AACpD,YAAI,IAAI,KAAK,MAAM,OAAO,KAAK,KAAK,KAAK,WAAW;AACpD,YAAI,SAAS,KAAK,YAAa,OAAO,UAAU,IAAI,KAAK,KAAK,gBAAgB,YAAa;AAC3F,YAAI,SAAS,KAAK,YAAa,OAAO,UAAU,IAAI,KAAK,KAAK,gBAAgB,YAAa;AAC3F,YAAI,SAAS,KAAK,WAAW,OAAO,UAAU,KAAK,KAAK,gBAAgB;AAExE,aAAK,yBAAyB,GAAG,GAAG,UAAU,QAAQ,QAAQ,KAAK,SAAS,MAAM;;IAEpF;;;;ACjPK,MAAO,WAAP,MAAO,UAAQ;IACZ,OAAO,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAChD,OAAO,QAAQ;;IAGf;;IAGA;;IAGA;;IAGA;;IAGA;;IAGA;;IAGA;;IAIA;;IAGA,eAAe,IAAI,MAAK;;IAGxB,OAAoB;;IAGpB;;;IAIA,SAAS;;;IAID,UAAU;IAElB,IAAW,SAAM;AAChB,aAAO,UAAS,QAAQ,CAAC,KAAK,UAAU,KAAK;IAC9C;IAEA,IAAW,OAAQ,QAAc;AAChC,WAAK,UAAU;IAChB;;IAGA,IAAI;;IAGJ,IAAI;;;;IAKJ,OAAO;IAEP,YAAa,MAAkB;AAC9B,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,WAAK,OAAO;AAEZ,WAAK,QAAQ,IAAI,MAAK;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,YAAI,WAAW,KAAK,MAAM,CAAC;AAC3B,YAAI;AACJ,YAAI,CAAC,SAAS;AACb,iBAAO,IAAI,KAAK,UAAU,MAAM,IAAI;aAChC;AACJ,cAAI,SAAS,KAAK,MAAM,SAAS,OAAO,KAAK;AAC7C,iBAAO,IAAI,KAAK,UAAU,MAAM,MAAM;AACtC,iBAAO,SAAS,KAAK,IAAI;;AAE1B,aAAK,MAAM,KAAK,IAAI;;AAGrB,WAAK,QAAQ,IAAI,MAAK;AACtB,WAAK,YAAY,IAAI,MAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,YAAI,WAAW,KAAK,MAAM,CAAC;AAC3B,YAAI,OAAO,KAAK,MAAM,SAAS,SAAS,KAAK;AAC7C,YAAI,OAAO,IAAI,KAAK,UAAU,IAAI;AAClC,aAAK,MAAM,KAAK,IAAI;AACpB,aAAK,UAAU,KAAK,IAAI;;AAGzB,WAAK,gBAAgB,IAAI,MAAK;AAC9B,eAAS,IAAI,GAAG,IAAI,KAAK,cAAc,QAAQ,KAAK;AACnD,YAAI,mBAAmB,KAAK,cAAc,CAAC;AAC3C,aAAK,cAAc,KAAK,IAAI,aAAa,kBAAkB,IAAI,CAAC;;AAGjE,WAAK,uBAAuB,IAAI,MAAK;AACrC,eAAS,IAAI,GAAG,IAAI,KAAK,qBAAqB,QAAQ,KAAK;AAC1D,YAAI,0BAA0B,KAAK,qBAAqB,CAAC;AACzD,aAAK,qBAAqB,KAAK,IAAI,oBAAoB,yBAAyB,IAAI,CAAC;;AAGtF,WAAK,kBAAkB,IAAI,MAAK;AAChC,eAAS,IAAI,GAAG,IAAI,KAAK,gBAAgB,QAAQ,KAAK;AACrD,YAAI,qBAAqB,KAAK,gBAAgB,CAAC;AAC/C,aAAK,gBAAgB,KAAK,IAAI,eAAe,oBAAoB,IAAI,CAAC;;AAGvE,WAAK,qBAAqB,IAAI,MAAK;AACnC,eAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACxD,YAAI,wBAAwB,KAAK,mBAAmB,CAAC;AACrD,aAAK,mBAAmB,KAAK,IAAI,kBAAkB,uBAAuB,IAAI,CAAC;;AAGhF,WAAK,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;AACjC,WAAK,YAAW;IACjB;;;IAIA,cAAW;AACV,UAAI,cAAc,KAAK;AACvB,kBAAY,SAAS;AAErB,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,aAAK,SAAS,KAAK,KAAK;AACxB,aAAK,SAAS,CAAC,KAAK;;AAGrB,UAAI,KAAK,MAAM;AACd,YAAI,YAAY,KAAK,KAAK;AAC1B,iBAAS,IAAI,GAAG,IAAI,KAAK,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK;AACvD,cAAI,OAAoB,KAAK,MAAM,UAAU,CAAC,EAAE,KAAK;AACrD,aAAG;AACF,iBAAK,SAAS;AACd,iBAAK,SAAS;AACd,mBAAO,KAAK;mBACJ;;;AAKX,UAAI,gBAAgB,KAAK;AACzB,UAAI,uBAAuB,KAAK;AAChC,UAAI,kBAAkB,KAAK;AAC3B,UAAI,qBAAqB,KAAK;AAC9B,UAAI,UAAU,cAAc,QAAQ,iBAAiB,qBAAqB,QAAQ,YAAY,gBAAgB,QAAQ,eAAe,KAAK,mBAAmB;AAC7J,UAAI,kBAAkB,UAAU,iBAAiB,YAAY;AAE7D;AACA,iBAAS,IAAI,GAAG,IAAI,iBAAiB,KAAK;AACzC,mBAAS,KAAK,GAAG,KAAK,SAAS,MAAM;AACpC,gBAAI,aAAa,cAAc,EAAE;AACjC,gBAAI,WAAW,KAAK,SAAS,GAAG;AAC/B,mBAAK,iBAAiB,UAAU;AAChC,uBAAS;;;AAGX,mBAAS,KAAK,GAAG,KAAK,gBAAgB,MAAM;AAC3C,gBAAI,aAAa,qBAAqB,EAAE;AACxC,gBAAI,WAAW,KAAK,SAAS,GAAG;AAC/B,mBAAK,wBAAwB,UAAU;AACvC,uBAAS;;;AAGX,mBAAS,KAAK,GAAG,KAAK,WAAW,MAAM;AACtC,gBAAI,aAAa,gBAAgB,EAAE;AACnC,gBAAI,WAAW,KAAK,SAAS,GAAG;AAC/B,mBAAK,mBAAmB,UAAU;AAClC,uBAAS;;;AAGX,mBAAS,KAAK,GAAG,KAAK,cAAc,MAAM;AACzC,kBAAM,aAAa,mBAAmB,EAAE;AACxC,gBAAI,WAAW,KAAK,SAAS,GAAG;AAC/B,mBAAK,sBAAsB,UAAU;AACrC,uBAAS;;;;AAKZ,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG;AACxC,aAAK,SAAS,MAAM,CAAC,CAAC;IACxB;IAEA,iBAAkB,YAAwB;AACzC,iBAAW,SAAS,WAAW,OAAO,SAAQ,MAAO,CAAC,WAAW,KAAK,gBAAiB,KAAK,QAAQ,MAAM,SAAS,KAAK,KAAK,aAAa,WAAW,MAAM,IAAI;AAC/J,UAAI,CAAC,WAAW;AAAQ;AAExB,UAAI,SAAS,WAAW;AACxB,WAAK,SAAS,MAAM;AAEpB,UAAI,cAAc,WAAW;AAC7B,UAAI,SAAS,YAAY,CAAC;AAC1B,WAAK,SAAS,MAAM;AAEpB,UAAI,YAAY,UAAU,GAAG;AAC5B,aAAK,aAAa,KAAK,UAAU;AACjC,aAAK,UAAU,OAAO,QAAQ;aACxB;AACN,YAAI,QAAQ,YAAY,YAAY,SAAS,CAAC;AAC9C,aAAK,SAAS,KAAK;AAEnB,aAAK,aAAa,KAAK,UAAU;AAEjC,aAAK,UAAU,OAAO,QAAQ;AAC9B,cAAM,SAAS;;IAEjB;IAEA,mBAAoB,YAA0B;AAC7C,iBAAW,SAAS,WAAW,OAAO,KAAK,SAAQ,MAAO,CAAC,WAAW,KAAK,gBAAiB,KAAK,QAAQ,MAAM,SAAS,KAAK,KAAK,aAAa,WAAW,MAAM,IAAI;AACpK,UAAI,CAAC,WAAW;AAAQ;AAExB,UAAI,OAAO,WAAW;AACtB,UAAI,YAAY,KAAK,KAAK;AAC1B,UAAI,WAAW,KAAK;AACpB,UAAI,KAAK;AAAM,aAAK,6BAA6B,KAAK,MAAM,WAAW,QAAQ;AAC/E,UAAI,KAAK,KAAK,eAAe,KAAK,KAAK,eAAe,KAAK;AAC1D,aAAK,6BAA6B,KAAK,KAAK,aAAa,WAAW,QAAQ;AAC7E,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,MAAM,QAAQ,IAAI,GAAG;AAClD,aAAK,6BAA6B,KAAK,KAAK,MAAM,CAAC,GAAG,WAAW,QAAQ;AAE1E,UAAI,aAAa,KAAK,cAAa;AACnC,UAAI,sBAAsB;AAAgB,aAAK,iCAAiC,YAAY,QAAQ;AAEpG,UAAI,cAAc,WAAW;AAC7B,UAAI,YAAY,YAAY;AAC5B,eAAS,IAAI,GAAG,IAAI,WAAW;AAC9B,aAAK,SAAS,YAAY,CAAC,CAAC;AAE7B,WAAK,aAAa,KAAK,UAAU;AAEjC,eAAS,IAAI,GAAG,IAAI,WAAW;AAC9B,aAAK,UAAU,YAAY,CAAC,EAAE,QAAQ;AACvC,eAAS,IAAI,GAAG,IAAI,WAAW;AAC9B,oBAAY,CAAC,EAAE,SAAS;IAC1B;IAEA,wBAAyB,YAA+B;AACvD,iBAAW,SAAS,WAAW,OAAO,SAAQ,MAAO,CAAC,WAAW,KAAK,gBAAiB,KAAK,QAAQ,MAAM,SAAS,KAAK,KAAK,aAAa,WAAW,MAAM,IAAI;AAC/J,UAAI,CAAC,WAAW;AAAQ;AAExB,WAAK,SAAS,WAAW,MAAM;AAE/B,UAAI,cAAc,WAAW;AAC7B,UAAI,YAAY,YAAY;AAC5B,UAAI,WAAW,KAAK,OAAO;AAC1B,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,cAAI,QAAQ,YAAY,CAAC;AACzB,eAAK,SAAS,MAAM,MAAO;AAC3B,eAAK,SAAS,KAAK;;aAEd;AACN,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,eAAK,SAAS,YAAY,CAAC,CAAC;;;AAI9B,WAAK,aAAa,KAAK,UAAU;AAEjC,eAAS,IAAI,GAAG,IAAI,WAAW;AAC9B,aAAK,UAAU,YAAY,CAAC,EAAE,QAAQ;AACvC,eAAS,IAAI,GAAG,IAAI,WAAW;AAC9B,oBAAY,CAAC,EAAE,SAAS;IAC1B;IAEA,6BAA8B,MAAY,WAAmB,UAAc;AAC1E,UAAI,cAAc,KAAK,YAAY,SAAS;AAC5C,UAAI,CAAC;AAAa;AAClB,eAAS,OAAO,aAAa;AAC5B,aAAK,iCAAiC,YAAY,GAAG,GAAG,QAAQ;;IAElE;IAEA,iCAAkC,YAAwB,UAAc;AACvE,UAAI,EAAE,sBAAsB;AAAiB;AAC7C,UAAI,YAA6B,WAAY;AAC7C,UAAI,CAAC;AACJ,aAAK,SAAS,QAAQ;WAClB;AACJ,YAAI,QAAQ,KAAK;AACjB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,KAAI;AAC7C,cAAI,KAAK,UAAU,GAAG;AACtB,gBAAM;AACN,iBAAO,IAAI;AACV,iBAAK,SAAS,MAAM,UAAU,GAAG,CAAC,CAAC;;;IAGvC;IAEA,sBAAuB,YAA6B;AACnD,YAAM,OAAO,WAAW;AACxB,iBAAW,SAAS,KAAK,WAAW,CAAC,WAAW,KAAK,gBAAiB,KAAK,QAAQ,QAAQ,MAAM,SAAS,KAAK,KAAK,aAAa,WAAW,MAAM,IAAI;AACtJ,UAAI,CAAC,WAAW;AAAQ;AAExB,WAAK,SAAS,IAAI;AAElB,WAAK,aAAa,KAAK,UAAU;AAEjC,WAAK,UAAU,KAAK,QAAQ;AAC5B,WAAK,SAAS;IACf;IAEA,SAAU,MAAU;AACnB,UAAI,CAAC;AAAM;AACX,UAAI,KAAK;AAAQ;AACjB,UAAI,SAAS,KAAK;AAClB,UAAI;AAAQ,aAAK,SAAS,MAAM;AAChC,WAAK,SAAS;AACd,WAAK,aAAa,KAAK,IAAI;IAC5B;IAEA,UAAW,OAAkB;AAC5B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,CAAC,KAAK;AAAQ;AAClB,YAAI,KAAK;AAAQ,eAAK,UAAU,KAAK,QAAQ;AAC7C,aAAK,SAAS;;IAEhB;;;;;IAMA,qBAAsB,SAAgB;AACrC,UAAI,YAAY,UAAa,YAAY;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACrF,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,aAAK,KAAK,KAAK;AACf,aAAK,KAAK,KAAK;AACf,aAAK,YAAY,KAAK;AACtB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,KAAK;;AAGrB,UAAI,cAAc,KAAK;AACvB,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,IAAI,GAAG;AAC9C,oBAAY,CAAC,EAAE,OAAO,OAAO;IAC/B;IAEA,yBAA0B,SAAkB,QAAY;AAEvD,UAAI,WAAW,KAAK,YAAW;AAC/B,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,6BAA6B;AAC5D,UAAI,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO;AAC7D,eAAS,SAAS,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,OAAO;AACrD,eAAS,SAAS,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,OAAO;AAErD,YAAM,MAAM,SAAS,WAAW,SAAS,UAAU,UAAU;AAC7D,YAAM,MAAM,SAAS,WAAW,KAAK,SAAS,UAAU,UAAU;AAClE,YAAM,KAAK,KAAK,IAAI,EAAE,IAAI,SAAS;AACnC,YAAM,KAAK,KAAK,IAAI,EAAE,IAAI,SAAS;AACnC,YAAM,KAAK,KAAK,IAAI,EAAE,IAAI,SAAS;AACnC,YAAM,KAAK,KAAK,IAAI,EAAE,IAAI,SAAS;AACnC,eAAS,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACxC,eAAS,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACxC,eAAS,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AACxC,eAAS,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAGxC,UAAI,cAAc,KAAK;AACvB,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,IAAI,GAAG,KAAK;AACnD,YAAI,YAAY,YAAY,CAAC;AAC7B,YAAI,aAAa;AAAU,oBAAU,OAAO,OAAO;;IAErD;;IAGA,iBAAc;AACb,WAAK,oBAAmB;AACxB,WAAK,oBAAmB;IACzB;;IAGA,sBAAmB;AAClB,iBAAW,QAAQ,KAAK;AAAO,aAAK,eAAc;AAClD,iBAAW,cAAc,KAAK;AAAe,mBAAW,eAAc;AACtE,iBAAW,cAAc,KAAK;AAAsB,mBAAW,eAAc;AAC7E,iBAAW,cAAc,KAAK;AAAiB,mBAAW,eAAc;AACxE,iBAAW,cAAc,KAAK;AAAoB,mBAAW,eAAc;IAC5E;;IAGA,sBAAmB;AAClB,UAAI,QAAQ,KAAK;AACjB,YAAM,UAAU,OAAO,GAAG,KAAK,WAAW,GAAG,MAAM,MAAM;AACzD,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG;AACxC,cAAM,CAAC,EAAE,eAAc;IACzB;;IAGA,cAAW;AACV,UAAI,KAAK,MAAM,UAAU;AAAG,eAAO;AACnC,aAAO,KAAK,MAAM,CAAC;IACpB;;IAGA,SAAU,UAAgB;AACzB,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,KAAK,KAAK,QAAQ;AAAU,iBAAO;;AAExC,aAAO;IACR;;;;IAKA,SAAU,UAAgB;AACzB,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,KAAK,KAAK,QAAQ;AAAU,iBAAO;;AAExC,aAAO;IACR;;;;IAKA,cAAe,UAAgB;AAC9B,UAAI,OAAO,KAAK,KAAK,SAAS,QAAQ;AACtC,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,qBAAqB,QAAQ;AACxD,WAAK,QAAQ,IAAI;IAClB;;;;;;;;;;;IAYA,QAAS,SAAa;AACrB,UAAI,WAAW,KAAK;AAAM;AAC1B,UAAI,SAAS;AACZ,YAAI,KAAK;AACR,kBAAQ,UAAU,MAAM,KAAK,IAAI;aAC7B;AACJ,cAAI,QAAQ,KAAK;AACjB,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,gBAAI,OAAO,MAAM,CAAC;AAClB,gBAAI,OAAO,KAAK,KAAK;AACrB,gBAAI,MAAM;AACT,kBAAI,aAAa,QAAQ,cAAc,GAAG,IAAI;AAC9C,kBAAI;AAAY,qBAAK,cAAc,UAAU;;;;;AAKjD,WAAK,OAAO;AACZ,WAAK,YAAW;IACjB;;;;;;IAQA,oBAAqB,UAAkB,gBAAsB;AAC5D,UAAI,OAAO,KAAK,KAAK,SAAS,QAAQ;AACtC,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,6BAA6B,QAAQ,EAAE;AAClE,aAAO,KAAK,cAAc,KAAK,OAAO,cAAc;IACrD;;;;;;IAOA,cAAe,WAAmB,gBAAsB;AACvD,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,UAAI,KAAK,MAAM;AACd,YAAI,aAAa,KAAK,KAAK,cAAc,WAAW,cAAc;AAClE,YAAI;AAAY,iBAAO;;AAExB,UAAI,KAAK,KAAK;AAAa,eAAO,KAAK,KAAK,YAAY,cAAc,WAAW,cAAc;AAC/F,aAAO;IACR;;;;IAKA,cAAe,UAAkB,gBAAsB;AACtD,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,KAAK,KAAK,QAAQ,UAAU;AAC/B,cAAI,aAAgC;AACpC,cAAI,gBAAgB;AACnB,yBAAa,KAAK,cAAc,GAAG,cAAc;AACjD,gBAAI,CAAC;AAAY,oBAAM,IAAI,MAAM,2BAA2B,iBAAiB,iBAAiB,QAAQ;;AAEvG,eAAK,cAAc,UAAU;AAC7B;;;AAGF,YAAM,IAAI,MAAM,qBAAqB,QAAQ;IAC9C;;;;IAMA,iBAAkB,gBAAsB;AACvC,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,aAAO,KAAK,cAAc,KAAK,CAAC,eAAe,WAAW,KAAK,QAAQ,cAAc,KAAK;IAC3F;;;;IAKA,wBAAyB,gBAAsB;AAC9C,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,aAAO,KAAK,qBAAqB,KAAK,CAAC,eAAe,WAAW,KAAK,QAAQ,cAAc,KAAK;IAClG;;;;IAKA,mBAAoB,gBAAsB;AACzC,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,aAAO,KAAK,gBAAgB,KAAK,CAAC,eAAe,WAAW,KAAK,QAAQ,cAAc,KAAK;IAC7F;;;IAIA,sBAAuB,gBAAsB;AAC5C,UAAI,kBAAkB;AAAM,cAAM,IAAI,MAAM,gCAAgC;AAC5E,aAAO,KAAK,mBAAmB,KAAK,CAAC,eAAe,WAAW,KAAK,QAAQ,cAAc,KAAK;IAChG;;;IAIA,gBAAa;AACZ,UAAI,SAAS,IAAI,QAAO;AACxB,UAAI,OAAO,IAAI,QAAO;AACtB,WAAK,UAAU,QAAQ,IAAI;AAC3B,aAAO,EAAE,GAAG,OAAO,GAAG,GAAG,OAAO,GAAG,OAAO,KAAK,GAAG,QAAQ,KAAK,EAAC;IACjE;;;;;;IAOA,UAAW,QAAiB,MAAe,OAAsB,IAAI,MAAc,CAAC,GAAGG,WAAmC,MAAI;AAC7H,UAAI,CAAC;AAAQ,cAAM,IAAI,MAAM,wBAAwB;AACrD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,YAAY,KAAK;AACrB,UAAI,OAAO,OAAO,mBAAmB,OAAO,OAAO,mBAAmB,OAAO,OAAO,mBAAmB,OAAO,OAAO;AACrH,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AACjD,YAAI,OAAO,UAAU,CAAC;AACtB,YAAI,CAAC,KAAK,KAAK;AAAQ;AACvB,YAAI,iBAAiB;AACrB,YAAI,WAAmC;AACvC,YAAI,YAAoC;AACxC,YAAI,aAAa,KAAK,cAAa;AACnC,YAAI,sBAAsB,kBAAkB;AAC3C,2BAAiB;AACjB,qBAAW,MAAM,aAAa,MAAM,gBAAgB,CAAC;AACrD,qBAAW,qBAAqB,MAAM,UAAU,GAAG,CAAC;AACpD,sBAAY,UAAS;mBACX,sBAAsB,gBAAgB;AAChD,cAAI,OAAwB;AAC5B,2BAAiB,KAAK;AACtB,qBAAW,MAAM,aAAa,MAAM,gBAAgB,CAAC;AACrD,eAAK,qBAAqB,MAAM,GAAG,gBAAgB,UAAU,GAAG,CAAC;AACjE,sBAAY,KAAK;mBACP,sBAAsB,sBAAsBA,YAAW,MAAM;AACvE,UAAAA,SAAQ,UAAU,MAAM,UAAU;AAClC;;AAED,YAAI,YAAY,WAAW;AAC1B,cAAIA,YAAW,QAAQA,SAAQ,WAAU,GAAI;AAC5C,YAAAA,SAAQ,cAAc,UAAU,gBAAgB,WAAW,UAAU,MAAM;AAC3E,uBAAWA,SAAQ;AACnB,6BAAiBA,SAAQ,gBAAgB;;AAE1C,mBAAS,KAAK,GAAG,KAAK,SAAS,QAAQ,KAAK,IAAI,MAAM,GAAG;AACxD,gBAAI,IAAI,SAAS,EAAE,GAAG,IAAI,SAAS,KAAK,CAAC;AACzC,mBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,mBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,mBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,mBAAO,KAAK,IAAI,MAAM,CAAC;;;AAGzB,YAAIA,YAAW;AAAM,UAAAA,SAAQ,gBAAgB,IAAI;;AAElD,UAAIA,YAAW;AAAM,QAAAA,SAAQ,QAAO;AACpC,aAAO,IAAI,MAAM,IAAI;AACrB,WAAK,IAAI,OAAO,MAAM,OAAO,IAAI;IAClC;;IAGA,OAAQ,OAAa;AACpB,WAAK,QAAQ;IACd;IAEA,iBAAkB,GAAW,GAAS;AACrC,YAAM,qBAAqB,KAAK;AAChC,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG;AACrD,2BAAmB,CAAC,EAAE,UAAU,GAAG,CAAC;IACtC;;IAGA,cAAe,GAAW,GAAW,SAAe;AACnD,YAAM,qBAAqB,KAAK;AAChC,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG;AACrD,2BAAmB,CAAC,EAAE,OAAO,GAAG,GAAG,OAAO;IAC5C;;AAID,MAAY;AAAZ,GAAA,SAAYC,UAAO;AAElB,IAAAA,SAAAA,SAAA,MAAA,IAAA,CAAA,IAAA;AAGA,IAAAA,SAAAA,SAAA,OAAA,IAAA,CAAA,IAAA;AAGA,IAAAA,SAAAA,SAAA,QAAA,IAAA,CAAA,IAAA;AAGA,IAAAA,SAAAA,SAAA,MAAA,IAAA,CAAA,IAAA;EACD,GAZY,YAAA,UAAO,CAAA,EAAA;;;ACroBb,MAAO,wBAAP,cAAqC,eAAc;IAChD,QAAyB;;IAEjC,IAAW,KAAM,UAAkB;AAAI,WAAK,QAAQ;IAAU;IAC9D,IAAW,OAAI;AACd,UAAI,CAAC,KAAK;AAAO,cAAM,IAAI,MAAM,mBAAmB;;AAC/C,eAAO,KAAK;IAClB;IAEA,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,OAAO;IACP,UAAU;IACV,WAAW;IACX,UAAU;IACV,cAAc;IACd,OAAO;IACP,UAAU;;IAEV,MAAM;IACN,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,YAAY;IAEZ,YAAa,MAAY;AACxB,YAAM,MAAM,GAAG,KAAK;IACrB;;;;AC3BK,MAAO,eAAP,MAAmB;;IAGxB,OAAsB;;IAGtB,QAAQ,IAAI,MAAK;;;IAGjB,QAAQ,IAAI,MAAK;;IAEjB,QAAQ,IAAI,MAAK;;;;;IAMjB,cAA2B;;IAG3B,SAAS,IAAI,MAAK;;IAGlB,aAAa,IAAI,MAAK;;IAGtB,gBAAgB,IAAI,MAAK;;IAGzB,uBAAuB,IAAI,MAAK;;IAGhC,kBAAkB,IAAI,MAAK;;IAG3B,qBAAqB,IAAI,MAAK;;IAG9B,IAAY;;IAGZ,IAAY;;IAGZ,QAAgB;;IAGhB,SAAiB;;;IAIjB,iBAAiB;;IAGjB,UAAyB;;IAGzB,OAAsB;;;IAItB,MAAM;;IAGN,aAA4B;;IAG5B,YAA2B;;;;IAK3B,SAAU,UAAgB;AACzB,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,KAAK,QAAQ;AAAU,iBAAO;;AAEnC,aAAO;IACR;;;;IAKA,SAAU,UAAgB;AACzB,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,KAAK,QAAQ;AAAU,iBAAO;;AAEnC,aAAO;IACR;;;;IAKA,SAAU,UAAgB;AACzB,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,QAAQ,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC7C,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,KAAK,QAAQ;AAAU,iBAAO;;AAEnC,aAAO;IACR;;;;IAKA,UAAW,eAAqB;AAC/B,UAAI,CAAC;AAAe,cAAM,IAAI,MAAM,+BAA+B;AACnE,UAAI,SAAS,KAAK;AAClB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AAC9C,YAAI,QAAQ,OAAO,CAAC;AACpB,YAAI,MAAM,QAAQ;AAAe,iBAAO;;AAEzC,aAAO;IACR;;;;IAKA,cAAe,eAAqB;AACnC,UAAI,CAAC;AAAe,cAAM,IAAI,MAAM,+BAA+B;AACnE,UAAI,aAAa,KAAK;AACtB,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,IAAI,GAAG,KAAK;AAClD,YAAI,YAAY,WAAW,CAAC;AAC5B,YAAI,UAAU,QAAQ;AAAe,iBAAO;;AAE7C,aAAO;IACR;;;;IAKA,iBAAkB,gBAAsB;AACvC,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,YAAM,gBAAgB,KAAK;AAC3B,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,IAAI,GAAG,KAAK;AACrD,cAAM,aAAa,cAAc,CAAC;AAClC,YAAI,WAAW,QAAQ;AAAgB,iBAAO;;AAE/C,aAAO;IACR;;;;IAKA,wBAAyB,gBAAsB;AAC9C,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,YAAM,uBAAuB,KAAK;AAClC,eAAS,IAAI,GAAG,IAAI,qBAAqB,QAAQ,IAAI,GAAG,KAAK;AAC5D,cAAM,aAAa,qBAAqB,CAAC;AACzC,YAAI,WAAW,QAAQ;AAAgB,iBAAO;;AAE/C,aAAO;IACR;;;;IAKA,mBAAoB,gBAAsB;AACzC,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,YAAM,kBAAkB,KAAK;AAC7B,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AACvD,cAAM,aAAa,gBAAgB,CAAC;AACpC,YAAI,WAAW,QAAQ;AAAgB,iBAAO;;AAE/C,aAAO;IACR;;;;IAKA,sBAAuB,gBAAsB;AAC5C,UAAI,CAAC;AAAgB,cAAM,IAAI,MAAM,gCAAgC;AACrE,YAAM,qBAAqB,KAAK;AAChC,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;AAC1D,cAAM,aAAa,mBAAmB,CAAC;AACvC,YAAI,WAAW,QAAQ;AAAgB,iBAAO;;AAE/C,aAAO;IACR;;;;AC9LK,MAAO,YAAP,MAAgB;IACD;IAA8B;IAAqB;IAAvE,YAAoB,YAAoB,GAAU,MAAqB,YAAsB;AAAzE,WAAA,YAAA;AAA8B,WAAA,OAAA;AAAqB,WAAA,aAAA;IAA0B;;AAO5F,MAAO,OAAP,MAAW;;IAEhB;IAEA,cAAc,IAAI,MAAK;IACvB,QAAQ,MAAK;IACb,cAAc,IAAI,MAAK;;IAGvB,QAAQ,IAAI,MAAM,YAAY,YAAY,YAAY,CAAC;;IAEvD,YAAa,MAAY;AACxB,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,WAAK,OAAO;IACb;;IAGA,cAAe,WAAmB,MAAc,YAAsB;AACrE,UAAI,CAAC;AAAY,cAAM,IAAI,MAAM,4BAA4B;AAC7D,UAAI,cAAc,KAAK;AACvB,UAAI,aAAa,YAAY;AAAQ,oBAAY,SAAS,YAAY;AACtE,UAAI,CAAC,YAAY,SAAS;AAAG,oBAAY,SAAS,IAAI,CAAA;AACtD,kBAAY,SAAS,EAAE,IAAI,IAAI;IAChC;;IAGA,QAAS,MAAU;AAClB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,YAAI,OAAO,KAAK,MAAM,CAAC;AACvB,YAAI,YAAY;AAChB,iBAAS,KAAK,GAAG,KAAK,KAAK,MAAM,QAAQ,MAAM;AAC9C,cAAI,KAAK,MAAM,EAAE,KAAK,MAAM;AAC3B,wBAAY;AACZ;;;AAGF,YAAI,CAAC;AAAW,eAAK,MAAM,KAAK,IAAI;;AAGrC,eAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AACjD,YAAI,aAAa,KAAK,YAAY,CAAC;AACnC,YAAI,YAAY;AAChB,iBAAS,KAAK,GAAG,KAAK,KAAK,YAAY,QAAQ,MAAM;AACpD,cAAI,KAAK,YAAY,EAAE,KAAK,YAAY;AACvC,wBAAY;AACZ;;;AAGF,YAAI,CAAC;AAAW,eAAK,YAAY,KAAK,UAAU;;AAGjD,UAAI,cAAc,KAAK,eAAc;AACrC,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC5C,YAAI,aAAa,YAAY,CAAC;AAC9B,aAAK,cAAc,WAAW,WAAW,WAAW,MAAM,WAAW,UAAU;;IAEjF;;;IAIA,SAAU,MAAU;AACnB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,YAAI,OAAO,KAAK,MAAM,CAAC;AACvB,YAAI,YAAY;AAChB,iBAAS,KAAK,GAAG,KAAK,KAAK,MAAM,QAAQ,MAAM;AAC9C,cAAI,KAAK,MAAM,EAAE,KAAK,MAAM;AAC3B,wBAAY;AACZ;;;AAGF,YAAI,CAAC;AAAW,eAAK,MAAM,KAAK,IAAI;;AAGrC,eAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AACjD,YAAI,aAAa,KAAK,YAAY,CAAC;AACnC,YAAI,YAAY;AAChB,iBAAS,KAAK,GAAG,KAAK,KAAK,YAAY,QAAQ,MAAM;AACpD,cAAI,KAAK,YAAY,EAAE,KAAK,YAAY;AACvC,wBAAY;AACZ;;;AAGF,YAAI,CAAC;AAAW,eAAK,YAAY,KAAK,UAAU;;AAGjD,UAAI,cAAc,KAAK,eAAc;AACrC,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC5C,YAAI,aAAa,YAAY,CAAC;AAC9B,YAAI,CAAC,WAAW;AAAY;AAC5B,YAAI,WAAW,sBAAsB,gBAAgB;AACpD,qBAAW,aAAa,WAAW,WAAW,cAAa;AAC3D,eAAK,cAAc,WAAW,WAAW,WAAW,MAAM,WAAW,UAAU;eACzE;AACN,qBAAW,aAAa,WAAW,WAAW,KAAI;AAClD,eAAK,cAAc,WAAW,WAAW,WAAW,MAAM,WAAW,UAAU;;;IAGlF;;IAGA,cAAe,WAAmB,MAAY;AAC7C,UAAI,aAAa,KAAK,YAAY,SAAS;AAC3C,aAAO,aAAa,WAAW,IAAI,IAAI;IACxC;;IAGA,iBAAkB,WAAmB,MAAY;AAChD,UAAI,aAAa,KAAK,YAAY,SAAS;AAC3C,UAAI;AAAY,eAAO,WAAW,IAAI;IACvC;;IAGA,iBAAc;AACb,UAAI,UAAU,IAAI,MAAK;AACvB,eAAS,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;AACjD,YAAI,kBAAkB,KAAK,YAAY,CAAC;AACxC,YAAI,iBAAiB;AACpB,mBAAS,QAAQ,iBAAiB;AACjC,gBAAI,aAAa,gBAAgB,IAAI;AACrC,gBAAI;AAAY,sBAAQ,KAAK,IAAI,UAAU,GAAG,MAAM,UAAU,CAAC;;;;AAIlE,aAAO;IACR;;IAGA,sBAAuB,WAAmB,aAA6B;AACtE,UAAI,kBAAkB,KAAK,YAAY,SAAS;AAChD,UAAI,iBAAiB;AACpB,iBAAS,QAAQ,iBAAiB;AACjC,cAAI,aAAa,gBAAgB,IAAI;AACrC,cAAI;AAAY,wBAAY,KAAK,IAAI,UAAU,WAAW,MAAM,UAAU,CAAC;;;IAG9E;;IAGA,QAAK;AACJ,WAAK,YAAY,SAAS;AAC1B,WAAK,MAAM,SAAS;AACpB,WAAK,YAAY,SAAS;IAC3B;;IAGA,UAAW,UAAoB,SAAa;AAC3C,UAAI,YAAY;AAChB,eAAS,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK;AAC/C,YAAI,OAAO,SAAS,MAAM,CAAC;AAC3B,YAAI,iBAAiB,KAAK,cAAa;AACvC,YAAI,kBAAkB,YAAY,QAAQ,YAAY,QAAQ;AAC7D,cAAI,aAAa,QAAQ,YAAY,SAAS;AAC9C,mBAAS,OAAO,YAAY;AAC3B,gBAAI,iBAA6B,WAAW,GAAG;AAC/C,gBAAI,kBAAkB,gBAAgB;AACrC,kBAAI,aAAa,KAAK,cAAc,WAAW,GAAG;AAClD,kBAAI;AAAY,qBAAK,cAAc,UAAU;AAC7C;;;;AAIH;;IAEF;;;;AC/KK,MAAO,WAAP,MAAe;;IAEpB,QAAgB;;IAGhB;;IAGA;;;IAIA,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;;;IAI5B,YAA0B;;IAG1B,iBAAgC;;IAGhC,YAAuB,UAAU;;IAGjC,UAAU;IAEV,YAAa,OAAe,MAAc,UAAkB;AAC3D,UAAI,QAAQ;AAAG,cAAM,IAAI,MAAM,qBAAqB;AACpD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,sBAAsB;AACjD,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,WAAK,QAAQ;AACb,WAAK,OAAO;AACZ,WAAK,WAAW;IACjB;;AAID,MAAY;AAAZ,GAAA,SAAYC,YAAS;AAAG,IAAAA,WAAAA,WAAA,QAAA,IAAA,CAAA,IAAA;AAAQ,IAAAA,WAAAA,WAAA,UAAA,IAAA,CAAA,IAAA;AAAU,IAAAA,WAAAA,WAAA,UAAA,IAAA,CAAA,IAAA;AAAU,IAAAA,WAAAA,WAAA,QAAA,IAAA,CAAA,IAAA;EAAO,GAA/C,cAAA,YAAS,CAAA,EAAA;;;ACpCf,MAAO,0BAAP,cAAuC,eAAc;;IAG1D,QAAQ,IAAI,MAAK;;IAGT,UAA2B;IACnC,IAAW,OAAQ,UAAkB;AAAI,WAAK,UAAU;IAAU;IAClE,IAAW,SAAM;AAChB,UAAI,CAAC,KAAK;AAAS,cAAM,IAAI,MAAM,mBAAmB;;AACjD,eAAO,KAAK;IAClB;IAEA,YAAY;IACZ,OAAO;IACP,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,YAAY;;IAGZ,iBAAiB;;IAGjB,UAAU;;IAGV,UAAU;;IAGV,eAAe;;IAGf,eAAe;;IAGf,eAAe;IAEf,WAAW;IACX,QAAQ;IAER,YAAa,MAAY;AACxB,YAAM,MAAM,GAAG,KAAK;IACrB;;;;AC1BK,MAAO,iBAAP,MAAqB;;;;;IAK1B,QAAQ;IAER;IACQ,eAAe,IAAI,MAAK;IAEhC,YAAa,kBAAkC;AAC9C,WAAK,mBAAmB;IACzB;IAEA,iBAAkB,QAAkB;AACnC,UAAI,QAAQ,KAAK;AAEjB,UAAI,eAAe,IAAI,aAAY;AACnC,mBAAa,OAAO;AAEpB,UAAI,QAAQ,IAAI,YAAY,MAAM;AAElC,UAAI,UAAU,MAAM,UAAS;AAC7B,UAAI,WAAW,MAAM,UAAS;AAC9B,mBAAa,OAAO,YAAY,KAAK,WAAW,IAAI,OAAO,SAAS,SAAS,EAAE,IAAI,QAAQ,SAAS,EAAE;AACtG,mBAAa,UAAU,MAAM,WAAU;AACvC,mBAAa,IAAI,MAAM,UAAS;AAChC,mBAAa,IAAI,MAAM,UAAS;AAChC,mBAAa,QAAQ,MAAM,UAAS;AACpC,mBAAa,SAAS,MAAM,UAAS;AACrC,mBAAa,iBAAiB,MAAM,UAAS,IAAK;AAElD,UAAI,eAAe,MAAM,YAAW;AACpC,UAAI,cAAc;AACjB,qBAAa,MAAM,MAAM,UAAS;AAClC,qBAAa,aAAa,MAAM,WAAU;AAC1C,qBAAa,YAAY,MAAM,WAAU;;AAG1C,UAAI,IAAI;AAER,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAI,MAAM,MAAM,WAAU;AAC1B,YAAI,CAAC;AAAK,gBAAM,IAAI,MAAM,0CAA0C;AACpE,cAAM,QAAQ,KAAK,GAAG;;AAIvB,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAI,OAAO,MAAM,WAAU;AAC3B,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,6BAA6B;AACxD,YAAI,SAAS,KAAK,IAAI,OAAO,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AACnE,YAAI,OAAO,IAAI,SAAS,GAAG,MAAM,MAAM;AACvC,aAAK,WAAW,MAAM,UAAS;AAC/B,aAAK,IAAI,MAAM,UAAS,IAAK;AAC7B,aAAK,IAAI,MAAM,UAAS,IAAK;AAC7B,aAAK,SAAS,MAAM,UAAS;AAC7B,aAAK,SAAS,MAAM,UAAS;AAC7B,aAAK,SAAS,MAAM,UAAS;AAC7B,aAAK,SAAS,MAAM,UAAS;AAC7B,aAAK,SAAS,MAAM,UAAS,IAAK;AAClC,aAAK,UAAU,MAAM,SAAQ;AAC7B,aAAK,eAAe,MAAM,YAAW;AACrC,YAAI,cAAc;AACjB,gBAAM,gBAAgB,KAAK,OAAO,MAAM,UAAS,CAAE;AACnD,eAAK,OAAO,MAAM,WAAU,KAAM;AAClC,eAAK,UAAU,MAAM,YAAW;;AAEjC,qBAAa,MAAM,KAAK,IAAI;;AAI7B,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAI,WAAW,MAAM,WAAU;AAC/B,YAAI,CAAC;AAAU,gBAAM,IAAI,MAAM,6BAA6B;AAC5D,YAAI,WAAW,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AACrD,YAAI,OAAO,IAAI,SAAS,GAAG,UAAU,QAAQ;AAC7C,cAAM,gBAAgB,KAAK,OAAO,MAAM,UAAS,CAAE;AAEnD,YAAIC,aAAY,MAAM,UAAS;AAC/B,YAAIA,cAAa;AAAI,gBAAM,cAAc,KAAK,YAAY,IAAI,MAAK,GAAIA,UAAS;AAEhF,aAAK,iBAAiB,MAAM,cAAa;AACzC,aAAK,YAAY,MAAM,QAAQ,IAAI;AACnC,YAAI;AAAc,eAAK,UAAU,MAAM,YAAW;AAClD,qBAAa,MAAM,KAAK,IAAI;;AAI7B,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC/B,YAAI,OAAO,MAAM,WAAU;AAC3B,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,2CAA2C;AACtE,YAAI,OAAO,IAAI,iBAAiB,IAAI;AACpC,aAAK,QAAQ,MAAM,QAAQ,IAAI;AAC/B,aAAK,MAAM,QAAQ,IAAI;AACvB,iBAAS,KAAK,GAAG,KAAK,IAAI;AACzB,eAAK,MAAM,KAAK,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC,CAAC;AACxD,aAAK,SAAS,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AACpD,YAAI,QAAQ,MAAM,SAAQ;AAC1B,aAAK,gBAAgB,QAAQ,MAAM;AACnC,aAAK,iBAAiB,QAAQ,MAAM,IAAI,IAAI;AAC5C,aAAK,YAAY,QAAQ,MAAM;AAC/B,aAAK,WAAW,QAAQ,MAAM;AAC9B,aAAK,WAAW,QAAQ,OAAO;AAC/B,aAAK,QAAQ,OAAO;AAAG,eAAK,OAAO,QAAQ,OAAO,IAAI,MAAM,UAAS,IAAK;AAC1E,aAAK,QAAQ,QAAQ;AAAG,eAAK,WAAW,MAAM,UAAS,IAAK;AAC5D,qBAAa,cAAc,KAAK,IAAI;;AAIrC,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC/B,YAAI,OAAO,MAAM,WAAU;AAC3B,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,kDAAkD;AAC7E,YAAI,OAAO,IAAI,wBAAwB,IAAI;AAC3C,aAAK,QAAQ,MAAM,QAAQ,IAAI;AAC/B,aAAK,MAAM,QAAQ,IAAI;AACvB,iBAAS,KAAK,GAAG,KAAK,IAAI;AACzB,eAAK,MAAM,KAAK,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC,CAAC;AACxD,aAAK,SAAS,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AACpD,YAAI,QAAQ,MAAM,SAAQ;AAC1B,aAAK,gBAAgB,QAAQ,MAAM;AACnC,aAAK,SAAS,QAAQ,MAAM;AAC5B,aAAK,YAAY,QAAQ,MAAM;AAC/B,aAAK,QAAQ,MAAM;AAAG,eAAK,iBAAiB,MAAM,UAAS;AAC3D,aAAK,QAAQ,OAAO;AAAG,eAAK,UAAU,MAAM,UAAS,IAAK;AAC1D,aAAK,QAAQ,OAAO;AAAG,eAAK,UAAU,MAAM,UAAS,IAAK;AAC1D,aAAK,QAAQ,OAAO;AAAG,eAAK,eAAe,MAAM,UAAS;AAC1D,aAAK,QAAQ,QAAQ;AAAG,eAAK,eAAe,MAAM,UAAS;AAC3D,gBAAQ,MAAM,SAAQ;AACtB,aAAK,QAAQ,MAAM;AAAG,eAAK,eAAe,MAAM,UAAS;AACzD,aAAK,QAAQ,MAAM;AAAG,eAAK,YAAY,MAAM,UAAS;AACtD,aAAK,QAAQ,MAAM;AAAG,eAAK,OAAO,MAAM,UAAS;AACjD,aAAK,QAAQ,MAAM;AAAG,eAAK,OAAO,MAAM,UAAS;AACjD,aAAK,QAAQ,OAAO;AAAG,eAAK,YAAY,MAAM,UAAS;AACvD,aAAK,QAAQ,OAAO;AAAG,eAAK,YAAY,MAAM,UAAS;AACvD,aAAK,QAAQ,OAAO;AAAG,eAAK,YAAY,MAAM,UAAS;AACvD,qBAAa,qBAAqB,KAAK,IAAI;;AAI5C,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC/B,YAAI,OAAO,MAAM,WAAU;AAC3B,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,6CAA6C;AACxE,YAAI,OAAO,IAAI,mBAAmB,IAAI;AACtC,aAAK,QAAQ,MAAM,QAAQ,IAAI;AAC/B,aAAK,eAAe,MAAM,YAAW;AACrC,aAAK,MAAM,QAAQ,IAAI;AACvB,iBAAS,KAAK,GAAG,KAAK,IAAI;AACzB,eAAK,MAAM,KAAK,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC,CAAC;AACxD,aAAK,SAAS,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AACpD,cAAM,QAAQ,MAAM,SAAQ;AAC5B,aAAK,eAAe,QAAQ;AAC5B,aAAK,cAAe,SAAS,IAAK;AAClC,aAAK,aAAc,SAAS,IAAK;AACjC,aAAK,QAAQ,QAAQ;AAAG,eAAK,iBAAiB,MAAM,UAAS;AAC7D,aAAK,WAAW,MAAM,UAAS;AAC/B,YAAI,KAAK,gBAAgB,aAAa;AAAO,eAAK,YAAY;AAC9D,aAAK,UAAU,MAAM,UAAS;AAC9B,YAAI,KAAK,eAAe,YAAY,UAAU,KAAK,eAAe,YAAY;AAAO,eAAK,WAAW;AACrG,aAAK,YAAY,MAAM,UAAS;AAChC,aAAK,OAAO,MAAM,UAAS;AAC3B,aAAK,OAAO,MAAM,UAAS;AAC3B,qBAAa,gBAAgB,KAAK,IAAI;;AAIvC,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC/B,cAAM,OAAO,MAAM,WAAU;AAC7B,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,gDAAgD;AAC3E,cAAM,OAAO,IAAI,sBAAsB,IAAI;AAC3C,aAAK,QAAQ,MAAM,QAAQ,IAAI;AAC/B,aAAK,OAAO,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AAClD,YAAI,QAAQ,MAAM,SAAQ;AAC1B,aAAK,gBAAgB,QAAQ,MAAM;AACnC,aAAK,QAAQ,MAAM;AAAG,eAAK,IAAI,MAAM,UAAS;AAC9C,aAAK,QAAQ,MAAM;AAAG,eAAK,IAAI,MAAM,UAAS;AAC9C,aAAK,QAAQ,MAAM;AAAG,eAAK,SAAS,MAAM,UAAS;AACnD,aAAK,QAAQ,OAAO;AAAG,eAAK,SAAS,MAAM,UAAS;AACpD,aAAK,QAAQ,OAAO;AAAG,eAAK,SAAS,MAAM,UAAS;AACpD,aAAK,UAAU,QAAQ,OAAO,IAAI,MAAM,UAAS,IAAK,OAAQ;AAC9D,aAAK,OAAO,IAAI,MAAM,iBAAgB;AACtC,aAAK,UAAU,MAAM,UAAS;AAC9B,aAAK,WAAW,MAAM,UAAS;AAC/B,aAAK,UAAU,MAAM,UAAS;AAC9B,aAAK,eAAe,QAAQ,QAAQ,IAAI,MAAM,UAAS,IAAK;AAC5D,aAAK,OAAO,MAAM,UAAS;AAC3B,aAAK,UAAU,MAAM,UAAS;AAC9B,gBAAQ,MAAM,SAAQ;AACtB,aAAK,QAAQ,MAAM;AAAG,eAAK,gBAAgB;AAC3C,aAAK,QAAQ,MAAM;AAAG,eAAK,iBAAiB;AAC5C,aAAK,QAAQ,MAAM;AAAG,eAAK,gBAAgB;AAC3C,aAAK,QAAQ,MAAM;AAAG,eAAK,aAAa;AACxC,aAAK,QAAQ,OAAO;AAAG,eAAK,aAAa;AACzC,aAAK,QAAQ,OAAO;AAAG,eAAK,gBAAgB;AAC5C,aAAK,QAAQ,OAAO;AAAG,eAAK,YAAY;AACxC,aAAK,OAAO,QAAQ,QAAQ,IAAI,MAAM,UAAS,IAAK;AACpD,qBAAa,mBAAmB,KAAK,IAAI;;AAI1C,UAAI,cAAc,KAAK,SAAS,OAAO,cAAc,MAAM,YAAY;AACvE,UAAI,aAAa;AAChB,qBAAa,cAAc;AAC3B,qBAAa,MAAM,KAAK,WAAW;;AAIpC;AACC,YAAI,IAAI,aAAa,MAAM;AAC3B,cAAM,aAAa,aAAa,OAAO,IAAI,IAAI,MAAM,QAAQ,IAAI,CAAC;AAClE,eAAO,IAAI,GAAG,KAAK;AAClB,cAAI,OAAO,KAAK,SAAS,OAAO,cAAc,OAAO,YAAY;AACjE,cAAI,CAAC;AAAM,kBAAM,IAAI,MAAM,2CAA2C;AACtE,uBAAa,MAAM,CAAC,IAAI;;;AAK1B,UAAI,KAAK,aAAa;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAI,aAAa,KAAK,aAAa,CAAC;AACpC,cAAM,OAAO,aAAa,MAAM,WAAW,SAAS;AACpD,YAAI,CAAC,WAAW;AAAQ,gBAAM,IAAI,MAAM,qCAAqC;AAC7E,YAAI,SAAS,KAAK,cAAc,WAAW,WAAW,WAAW,MAAM;AACvE,YAAI,CAAC;AAAQ,gBAAM,IAAI,MAAM,0BAA0B,WAAW,MAAM,EAAE;AAC1E,mBAAW,KAAK,qBAAqB,WAAW,kBAAkB,SAA6B,WAAW;AAC1G,mBAAW,KAAK,cAAc,MAAwB;AACtD,YAAI,WAAW,KAAK,UAAU;AAAM,qBAAW,KAAK,aAAY;;AAEjE,WAAK,aAAa,SAAS;AAG3B,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAI,YAAY,MAAM,WAAU;AAChC,YAAI,CAAC;AAAW,gBAAM,IAAI,MAAM,kCAAkC;AAClE,YAAI,OAAO,IAAI,UAAU,SAAS;AAClC,aAAK,WAAW,MAAM,QAAQ,KAAK;AACnC,aAAK,aAAa,MAAM,UAAS;AACjC,aAAK,cAAc,MAAM,WAAU;AACnC,aAAK,YAAY,MAAM,WAAU;AACjC,YAAI,KAAK,WAAW;AACnB,eAAK,SAAS,MAAM,UAAS;AAC7B,eAAK,UAAU,MAAM,UAAS;;AAE/B,qBAAa,OAAO,KAAK,IAAI;;AAI9B,UAAI,MAAM,QAAQ,IAAI;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAI,gBAAgB,MAAM,WAAU;AACpC,YAAI,CAAC;AAAe,gBAAM,IAAI,MAAM,iCAAiC;AACrE,qBAAa,WAAW,KAAK,KAAK,cAAc,OAAO,eAAe,YAAY,CAAC;;AAEpF,aAAO;IACR;IAEQ,SAAU,OAAoB,cAA4B,aAAsB,cAAqB;AAC5G,UAAI,OAAO;AACX,UAAI,YAAY;AAEhB,UAAI,aAAa;AAChB,oBAAY,MAAM,QAAQ,IAAI;AAC9B,YAAI,aAAa;AAAG,iBAAO;AAC3B,eAAO,IAAI,KAAK,SAAS;aACnB;AACN,YAAI,WAAW,MAAM,WAAU;AAC/B,YAAI,CAAC;AAAU,gBAAM,IAAI,MAAM,6BAA6B;AAC5D,eAAO,IAAI,KAAK,QAAQ;AACxB,YAAI;AAAc,gBAAM,gBAAgB,KAAK,OAAO,MAAM,UAAS,CAAE;AACrE,aAAK,MAAM,SAAS,MAAM,QAAQ,IAAI;AACtC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IAAI,GAAG;AAC7C,eAAK,MAAM,CAAC,IAAI,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AAEvD,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG;AAC/C,eAAK,YAAY,KAAK,aAAa,cAAc,MAAM,QAAQ,IAAI,CAAC,CAAC;AACtE,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG;AAC/C,eAAK,YAAY,KAAK,aAAa,qBAAqB,MAAM,QAAQ,IAAI,CAAC,CAAC;AAC7E,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG;AAC/C,eAAK,YAAY,KAAK,aAAa,gBAAgB,MAAM,QAAQ,IAAI,CAAC,CAAC;AACxE,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG;AAC/C,eAAK,YAAY,KAAK,aAAa,mBAAmB,MAAM,QAAQ,IAAI,CAAC,CAAC;AAE3E,oBAAY,MAAM,QAAQ,IAAI;;AAG/B,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,YAAI,YAAY,MAAM,QAAQ,IAAI;AAClC,iBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,IAAI,MAAM;AACzD,cAAI,OAAO,MAAM,cAAa;AAC9B,cAAI,CAAC;AACJ,kBAAM,IAAI,MAAM,kCAAkC;AACnD,cAAI,aAAa,KAAK,eAAe,OAAO,cAAc,MAAM,WAAW,MAAM,YAAY;AAC7F,cAAI;AAAY,iBAAK,cAAc,WAAW,MAAM,UAAU;;;AAGhE,aAAO;IACR;IAEQ,eAAgB,OAAoB,cAA4B,MAAY,WAAmB,gBAA2C,cAAqB;AACtK,UAAI,QAAQ,KAAK;AAEjB,UAAI,QAAQ,MAAM,SAAQ;AAC1B,YAAM,QAAQ,QAAQ,MAAM,IAAI,MAAM,cAAa,IAAK;AACxD,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,kCAAkC;AAC7D,cAAS,QAAQ,GAA0B;QAC1C,KAAK,eAAe,QAAQ;AAC3B,cAAIC,SAAQ,QAAQ,OAAO,IAAI,MAAM,cAAa,IAAK;AACvD,gBAAM,SAAS,QAAQ,OAAO,IAAI,MAAM,UAAS,IAAK;AACtD,gBAAM,YAAY,QAAQ,OAAO,IAAI,KAAK,aAAa,KAAK,IAAI;AAChE,cAAI,YAAY,QAAQ,QAAQ,IAAI,MAAM,UAAS,IAAK;AACxD,cAAI,IAAI,MAAM,UAAS;AACvB,cAAI,IAAI,MAAM,UAAS;AACvB,cAAI,SAAS,MAAM,UAAS;AAC5B,cAAI,SAAS,MAAM,UAAS;AAC5B,cAAI,QAAQ,MAAM,UAAS;AAC3B,cAAI,SAAS,MAAM,UAAS;AAE5B,cAAI,CAACA;AAAM,YAAAA,QAAO;AAClB,cAAI,SAAS,KAAK,iBAAiB,oBAAoB,MAAM,MAAMA,OAAM,QAAQ;AACjF,cAAI,CAAC;AAAQ,mBAAO;AACpB,iBAAO,OAAOA;AACd,iBAAO,IAAI,IAAI;AACf,iBAAO,IAAI,IAAI;AACf,iBAAO,SAAS;AAChB,iBAAO,SAAS;AAChB,iBAAO,WAAW;AAClB,iBAAO,QAAQ,QAAQ;AACvB,iBAAO,SAAS,SAAS;AACzB,gBAAM,gBAAgB,OAAO,OAAO,KAAK;AACzC,iBAAO,WAAW;AAClB,cAAI,YAAY;AAAM,mBAAO,aAAY;AACzC,iBAAO;;QAER,KAAK,eAAe,aAAa;AAChC,cAAI,WAAW,KAAK,aAAa,QAAQ,QAAQ,OAAO,CAAC;AACzD,cAAI,QAAQ,eAAe,MAAM,UAAS,IAAK;AAE/C,cAAI,MAAM,KAAK,iBAAiB,yBAAyB,MAAM,IAAI;AACnE,cAAI,CAAC;AAAK,mBAAO;AACjB,cAAI,sBAAsB,SAAS;AACnC,cAAI,WAAW,SAAS;AACxB,cAAI,QAAQ,SAAS;AACrB,cAAI;AAAc,kBAAM,gBAAgB,IAAI,OAAO,KAAK;AACxD,iBAAO;;QAER,KAAK,eAAe,MAAM;AACzB,cAAIA,SAAQ,QAAQ,OAAO,IAAI,MAAM,cAAa,IAAK;AACvD,gBAAM,SAAS,QAAQ,OAAO,IAAI,MAAM,UAAS,IAAK;AACtD,gBAAM,YAAY,QAAQ,OAAO,IAAI,KAAK,aAAa,KAAK,IAAI;AAChE,gBAAM,aAAa,MAAM,QAAQ,IAAI;AACrC,gBAAM,WAAW,KAAK,aAAa,QAAQ,QAAQ,QAAQ,CAAC;AAC5D,gBAAM,MAAM,KAAK,eAAe,OAAO,SAAS,QAAQ,CAAC;AACzD,gBAAM,YAAY,KAAK,eAAe,QAAQ,SAAS,SAAS,aAAa,KAAK,CAAC;AACnF,cAAI,QAAkB,CAAA;AACtB,cAAI,QAAQ,GAAG,SAAS;AACxB,cAAI,cAAc;AACjB,oBAAQ,KAAK,eAAe,OAAO,MAAM,QAAQ,IAAI,CAAC;AACtD,oBAAQ,MAAM,UAAS;AACvB,qBAAS,MAAM,UAAS;;AAGzB,cAAI,CAACA;AAAM,YAAAA,QAAO;AAClB,cAAI,OAAO,KAAK,iBAAiB,kBAAkB,MAAM,MAAMA,OAAM,QAAQ;AAC7E,cAAI,CAAC;AAAM,mBAAO;AAClB,eAAK,OAAOA;AACZ,gBAAM,gBAAgB,KAAK,OAAO,KAAK;AACvC,eAAK,QAAQ,SAAS;AACtB,eAAK,WAAW,SAAS;AACzB,eAAK,sBAAsB,SAAS;AACpC,eAAK,YAAY;AACjB,eAAK,YAAY;AACjB,cAAI,YAAY;AAAM,iBAAK,aAAY;AACvC,eAAK,aAAa,cAAc;AAChC,eAAK,WAAW;AAChB,cAAI,cAAc;AACjB,iBAAK,QAAQ;AACb,iBAAK,QAAQ,QAAQ;AACrB,iBAAK,SAAS,SAAS;;AAExB,iBAAO;;QAER,KAAK,eAAe,YAAY;AAC/B,gBAAMA,SAAQ,QAAQ,OAAO,IAAI,MAAM,cAAa,IAAK;AACzD,cAAIA,SAAQ;AAAM,kBAAM,IAAI,MAAM,sCAAsC;AACxE,gBAAM,SAAS,QAAQ,OAAO,IAAI,MAAM,UAAS,IAAK;AACtD,gBAAM,YAAY,QAAQ,OAAO,IAAI,KAAK,aAAa,KAAK,IAAI;AAChE,gBAAM,oBAAoB,QAAQ,QAAQ;AAC1C,gBAAM,YAAY,MAAM,QAAQ,IAAI;AACpC,gBAAM,SAAS,MAAM,cAAa;AAClC,cAAI,QAAQ,GAAG,SAAS;AACxB,cAAI,cAAc;AACjB,oBAAQ,MAAM,UAAS;AACvB,qBAAS,MAAM,UAAS;;AAGzB,cAAI,OAAO,KAAK,iBAAiB,kBAAkB,MAAM,MAAMA,OAAM,QAAQ;AAC7E,cAAI,CAAC;AAAM,mBAAO;AAClB,eAAK,OAAOA;AACZ,gBAAM,gBAAgB,KAAK,OAAO,KAAK;AACvC,eAAK,WAAW;AAChB,cAAI,cAAc;AACjB,iBAAK,QAAQ,QAAQ;AACrB,iBAAK,SAAS,SAAS;;AAExB,eAAK,aAAa,KAAK,IAAI,WAAW,MAAM,WAAW,WAAW,QAAQ,gBAAgB,CAAC;AAC3F,iBAAO;;QAER,KAAK,eAAe,MAAM;AACzB,gBAAMC,WAAU,QAAQ,OAAO;AAC/B,gBAAM,iBAAiB,QAAQ,OAAO;AACtC,gBAAM,WAAW,KAAK,aAAa,QAAQ,QAAQ,OAAO,CAAC;AAE3D,gBAAM,UAAU,MAAM,SAAS,SAAS,SAAS,GAAG,CAAC;AACrD,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAI,GAAG;AAC1C,oBAAQ,CAAC,IAAI,MAAM,UAAS,IAAK;AAClC,gBAAM,QAAQ,eAAe,MAAM,UAAS,IAAK;AAEjD,gBAAMD,QAAO,KAAK,iBAAiB,kBAAkB,MAAM,IAAI;AAC/D,cAAI,CAACA;AAAM,mBAAO;AAClB,UAAAA,MAAK,SAASC;AACd,UAAAD,MAAK,gBAAgB;AACrB,UAAAA,MAAK,sBAAsB,SAAS;AACpC,UAAAA,MAAK,WAAW,SAAS;AACzB,UAAAA,MAAK,QAAQ,SAAS;AACtB,UAAAA,MAAK,UAAU;AACf,cAAI;AAAc,kBAAM,gBAAgBA,MAAK,OAAO,KAAK;AACzD,iBAAOA;;QAER,KAAK,eAAe,OAAO;AAC1B,gBAAM,WAAW,MAAM,UAAS;AAChC,gBAAM,IAAI,MAAM,UAAS;AACzB,gBAAM,IAAI,MAAM,UAAS;AACzB,gBAAM,QAAQ,eAAe,MAAM,UAAS,IAAK;AAEjD,gBAAM,QAAQ,KAAK,iBAAiB,mBAAmB,MAAM,IAAI;AACjE,cAAI,CAAC;AAAO,mBAAO;AACnB,gBAAM,IAAI,IAAI;AACd,gBAAM,IAAI,IAAI;AACd,gBAAM,WAAW;AACjB,cAAI;AAAc,kBAAM,gBAAgB,MAAM,OAAO,KAAK;AAC1D,iBAAO;;QAER,KAAK,eAAe,UAAU;AAC7B,gBAAM,eAAe,MAAM,QAAQ,IAAI;AACvC,gBAAM,WAAW,KAAK,aAAa,QAAQ,QAAQ,OAAO,CAAC;AAC3D,cAAI,QAAQ,eAAe,MAAM,UAAS,IAAK;AAE/C,cAAI,OAAO,KAAK,iBAAiB,sBAAsB,MAAM,IAAI;AACjE,cAAI,CAAC;AAAM,mBAAO;AAClB,eAAK,UAAU,aAAa,MAAM,YAAY;AAC9C,eAAK,sBAAsB,SAAS;AACpC,eAAK,WAAW,SAAS;AACzB,eAAK,QAAQ,SAAS;AACtB,cAAI;AAAc,kBAAM,gBAAgB,KAAK,OAAO,KAAK;AACzD,iBAAO;;;AAGT,aAAO;IACR;IAEQ,aAAc,OAAkB;AACvC,UAAI,WAAW,IAAI,SAAS,MAAM,QAAQ,IAAI,CAAC;AAC/C,eAAS,QAAQ,MAAM,QAAQ,IAAI;AACnC,eAAS,SAAS,MAAM,QAAQ,IAAI;AACpC,eAAS,aAAa,MAAM,QAAQ,IAAI;AACxC,aAAO;IACR;IAEQ,aAAc,OAAoB,UAAiB;AAC1D,YAAM,QAAQ,KAAK;AACnB,YAAM,cAAc,MAAM,QAAQ,IAAI;AACtC,YAAM,WAAW,IAAI,SAAQ;AAC7B,eAAS,SAAS,eAAe;AACjC,UAAI,CAAC,UAAU;AACd,iBAAS,WAAW,KAAK,eAAe,OAAO,SAAS,QAAQ,KAAK;AACrE,eAAO;;AAER,UAAI,UAAU,IAAI,MAAK;AACvB,UAAI,aAAa,IAAI,MAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACrC,YAAI,YAAY,MAAM,QAAQ,IAAI;AAClC,mBAAW,KAAK,SAAS;AACzB,iBAAS,KAAK,GAAG,KAAK,WAAW,MAAM;AACtC,qBAAW,KAAK,MAAM,QAAQ,IAAI,CAAC;AACnC,kBAAQ,KAAK,MAAM,UAAS,IAAK,KAAK;AACtC,kBAAQ,KAAK,MAAM,UAAS,IAAK,KAAK;AACtC,kBAAQ,KAAK,MAAM,UAAS,CAAE;;;AAGhC,eAAS,WAAW,MAAM,aAAa,OAAO;AAC9C,eAAS,QAAQ;AACjB,aAAO;IACR;IAEQ,eAAgB,OAAoB,GAAW,OAAa;AACnE,UAAI,QAAQ,IAAI,MAAc,CAAC;AAC/B,UAAI,SAAS,GAAG;AACf,iBAAS,IAAI,GAAG,IAAI,GAAG;AACtB,gBAAM,CAAC,IAAI,MAAM,UAAS;aACrB;AACN,iBAAS,IAAI,GAAG,IAAI,GAAG;AACtB,gBAAM,CAAC,IAAI,MAAM,UAAS,IAAK;;AAEjC,aAAO;IACR;IAEQ,eAAgB,OAAoB,GAAS;AACpD,UAAI,QAAQ,IAAI,MAAc,CAAC;AAC/B,eAAS,IAAI,GAAG,IAAI,GAAG;AACtB,cAAM,CAAC,IAAI,MAAM,QAAQ,IAAI;AAC9B,aAAO;IACR;IAEQ,cAAe,OAAoB,MAAc,cAA0B;AAClF,YAAM,QAAQ,IAAI;AAClB,UAAI,YAAY,IAAI,MAAK;AACzB,UAAI,QAAQ,KAAK;AAGjB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,KAAK;AACpD,YAAI,YAAY,MAAM,QAAQ,IAAI;AAClC,iBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,IAAI,MAAM;AACzD,cAAI,eAAe,MAAM,SAAQ;AACjC,cAAI,aAAa,MAAM,QAAQ,IAAI;AACnC,cAAI,YAAY,aAAa;AAC7B,kBAAQ,cAAc;YACrB,KAAK,iBAAiB;AACrB,kBAAI,WAAW,IAAI,mBAAmB,YAAY,SAAS;AAC3D,uBAAS,QAAQ,GAAG,QAAQ,YAAY;AACvC,yBAAS,SAAS,OAAO,MAAM,UAAS,GAAI,MAAM,cAAa,CAAE;AAClE,wBAAU,KAAK,QAAQ;AACvB;;YAED,KAAK,WAAW;AACf,kBAAI,cAAc,MAAM,QAAQ,IAAI;AACpC,kBAAI,WAAW,IAAI,aAAa,YAAY,aAAa,SAAS;AAElE,kBAAI,OAAO,MAAM,UAAS;AAC1B,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AAEnC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,GAAG,GAAG,GAAG,CAAC;AACzC,oBAAI,SAAS;AAAW;AAExB,oBAAI,QAAQ,MAAM,UAAS;AAC3B,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AAEpC,wBAAQ,MAAM,SAAQ,GAAI;kBACzB,KAAK;AACJ,6BAAS,WAAW,KAAK;AACzB;kBACD,KAAK;AACJ,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;;AAEtE,uBAAO;AACP,oBAAI;AACJ,oBAAI;AACJ,oBAAI;AACJ,oBAAI;;AAEL,wBAAU,KAAK,QAAQ;AACvB;;YAED,KAAK,UAAU;AACd,kBAAI,cAAc,MAAM,QAAQ,IAAI;AACpC,kBAAI,WAAW,IAAI,YAAY,YAAY,aAAa,SAAS;AAEjE,kBAAI,OAAO,MAAM,UAAS;AAC1B,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AAEnC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,GAAG,GAAG,CAAC;AACtC,oBAAI,SAAS;AAAW;AAExB,oBAAI,QAAQ,MAAM,UAAS;AAC3B,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AAEpC,wBAAQ,MAAM,SAAQ,GAAI;kBACzB,KAAK;AACJ,6BAAS,WAAW,KAAK;AACzB;kBACD,KAAK;AACJ,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;;AAEtE,uBAAO;AACP,oBAAI;AACJ,oBAAI;AACJ,oBAAI;;AAEL,wBAAU,KAAK,QAAQ;AACvB;;YAED,KAAK,YAAY;AAChB,kBAAI,cAAc,MAAM,QAAQ,IAAI;AACpC,kBAAI,WAAW,IAAI,cAAc,YAAY,aAAa,SAAS;AAEnE,kBAAI,OAAO,MAAM,UAAS;AAC1B,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,kBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,kBAAI,KAAK,MAAM,iBAAgB,IAAK;AAEpC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE;AACrD,oBAAI,SAAS;AAAW;AACxB,oBAAI,QAAQ,MAAM,UAAS;AAC3B,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,MAAM,MAAM,iBAAgB,IAAK;AACrC,oBAAI,MAAM,MAAM,iBAAgB,IAAK;AACrC,oBAAI,MAAM,MAAM,iBAAgB,IAAK;AAErC,wBAAQ,MAAM,SAAQ,GAAI;kBACzB,KAAK;AACJ,6BAAS,WAAW,KAAK;AACzB;kBACD,KAAK;AACJ,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,IAAI,KAAK,CAAC;AACtE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,IAAI,KAAK,CAAC;AACtE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,IAAI,KAAK,CAAC;;AAExE,uBAAO;AACP,oBAAI;AACJ,oBAAI;AACJ,oBAAI;AACJ,oBAAI;AACJ,qBAAK;AACL,qBAAK;AACL,qBAAK;;AAEN,wBAAU,KAAK,QAAQ;AACvB;;YAED,KAAK,WAAW;AACf,kBAAI,cAAc,MAAM,QAAQ,IAAI;AACpC,kBAAI,WAAW,IAAI,aAAa,YAAY,aAAa,SAAS;AAElE,kBAAI,OAAO,MAAM,UAAS;AAC1B,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,IAAI,MAAM,iBAAgB,IAAK;AACnC,kBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,kBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,kBAAI,KAAK,MAAM,iBAAgB,IAAK;AAEpC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE;AAClD,oBAAI,SAAS;AAAW;AACxB,oBAAI,QAAQ,MAAM,UAAS;AAC3B,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,oBAAI,MAAM,MAAM,iBAAgB,IAAK;AACrC,oBAAI,MAAM,MAAM,iBAAgB,IAAK;AACrC,oBAAI,MAAM,MAAM,iBAAgB,IAAK;AAErC,wBAAQ,MAAM,SAAQ,GAAI;kBACzB,KAAK;AACJ,6BAAS,WAAW,KAAK;AACzB;kBACD,KAAK;AACJ,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACpE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,IAAI,KAAK,CAAC;AACtE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,IAAI,KAAK,CAAC;AACtE,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,IAAI,KAAK,CAAC;;AAExE,uBAAO;AACP,oBAAI;AACJ,oBAAI;AACJ,oBAAI;AACJ,qBAAK;AACL,qBAAK;AACL,qBAAK;;AAEN,wBAAU,KAAK,QAAQ;AACvB;;YAED,KAAK,YAAY;AAChB,kBAAI,WAAW,IAAI,cAAc,YAAY,MAAM,QAAQ,IAAI,GAAG,SAAS;AAC3E,kBAAI,OAAO,MAAM,UAAS,GAAI,IAAI,MAAM,iBAAgB,IAAK;AAC7D,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,CAAC;AAChC,oBAAI,SAAS;AAAW;AACxB,oBAAI,QAAQ,MAAM,UAAS;AAC3B,oBAAI,KAAK,MAAM,iBAAgB,IAAK;AACpC,wBAAQ,MAAM,SAAQ,GAAI;kBACzB,KAAK;AACJ,6BAAS,WAAW,KAAK;AACzB;kBACD,KAAK;AACJ,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;;AAEtE,uBAAO;AACP,oBAAI;;AAEL,wBAAU,KAAK,QAAQ;;;;;AAO3B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,KAAK;AACpD,YAAI,YAAY,MAAM,QAAQ,IAAI;AAClC,iBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,IAAI,MAAM;AACzD,cAAI,OAAO,MAAM,SAAQ,GAAI,aAAa,MAAM,QAAQ,IAAI;AAC5D,cAAI,QAAQ,cAAc;AACzB,gBAAI,WAAW,IAAI,gBAAgB,YAAY,SAAS;AACxD,qBAAS,QAAQ,GAAG,QAAQ,YAAY,SAAS;AAChD,uBAAS,SAAS,OAAO,MAAM,UAAS,GAAI,MAAM,SAAQ,CAAE;;AAE7D,sBAAU,KAAK,QAAQ;AACvB;;AAED,cAAI,cAAc,MAAM,QAAQ,IAAI;AACpC,kBAAQ,MAAM;YACb,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,eAAe,YAAY,aAAa,SAAS,GAAG,CAAC,CAAC;AAC9F;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,kBAAkB,YAAY,aAAa,SAAS,GAAG,KAAK,CAAC;AACrG;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,mBAAmB,YAAY,aAAa,SAAS,GAAG,KAAK,CAAC;AACtG;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,mBAAmB,YAAY,aAAa,SAAS,GAAG,KAAK,CAAC;AACtG;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,cAAc,YAAY,aAAa,SAAS,GAAG,CAAC,CAAC;AAC7F;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,eAAe,YAAY,aAAa,SAAS,GAAG,CAAC,CAAC;AAC9F;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,eAAe,YAAY,aAAa,SAAS,GAAG,CAAC,CAAC;AAC9F;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,cAAc,YAAY,aAAa,SAAS,GAAG,CAAC,CAAC;AAC7F;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,eAAe,YAAY,aAAa,SAAS,GAAG,CAAC,CAAC;AAC9F;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,eAAe,YAAY,aAAa,SAAS,GAAG,CAAC,CAAC;;;;AAMlG,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,KAAK;AACpD,YAAI,QAAQ,MAAM,QAAQ,IAAI,GAAG,aAAa,MAAM,QAAQ,IAAI,GAAG,YAAY,aAAa;AAC5F,YAAI,WAAW,IAAI,qBAAqB,YAAY,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC9E,YAAI,QAAQ,MAAM,SAAQ;AAC1B,YAAI,OAAO,MAAM,UAAS,GAAI,OAAO,QAAQ,MAAM,KAAM,QAAQ,MAAM,IAAI,MAAM,UAAS,IAAK,IAAK;AACpG,YAAI,YAAY,QAAQ,MAAM,IAAI,MAAM,UAAS,IAAK,QAAQ;AAC9D,iBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,mBAAS,SAAS,OAAO,MAAM,KAAK,WAAW,QAAQ,MAAM,IAAI,IAAI,KAAK,QAAQ,OAAO,IAAI,QAAQ,OAAO,CAAC;AAC7G,cAAI,SAAS;AAAW;AACxB,kBAAQ,MAAM,SAAQ;AACtB,gBAAM,QAAQ,MAAM,UAAS,GAAI,QAAQ,QAAQ,MAAM,KAAM,QAAQ,MAAM,IAAI,MAAM,UAAS,IAAK,IAAK;AACxG,gBAAM,aAAa,QAAQ,MAAM,IAAI,MAAM,UAAS,IAAK,QAAQ;AACjE,eAAK,QAAQ,OAAO,GAAG;AACtB,qBAAS,WAAW,KAAK;sBACd,QAAQ,QAAQ,GAAG;AAC9B,sBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,KAAK,MAAM,CAAC;AACxE,sBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,UAAU,WAAW,KAAK;;AAEvF,iBAAO;AACP,gBAAM;AACN,qBAAW;;AAEZ,kBAAU,KAAK,QAAQ;;AAIxB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,KAAK;AACpD,YAAI,QAAQ,MAAM,QAAQ,IAAI,GAAG,aAAa,MAAM,QAAQ,IAAI,GAAG,YAAY,aAAa;AAC5F,YAAI,WAAW,IAAI,4BAA4B,YAAY,MAAM,QAAQ,IAAI,GAAG,KAAK;AACrF,YAAI,OAAO,MAAM,UAAS,GAAI,YAAY,MAAM,UAAS,GAAI,OAAO,MAAM,UAAS,GAAI,OAAO,MAAM,UAAS,GAC5G,YAAY,MAAM,UAAS,GAAI,YAAY,MAAM,UAAS,GAAI,YAAY,MAAM,UAAS;AAC1F,iBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,mBAAS,SAAS,OAAO,MAAM,WAAW,MAAM,MAAM,WAAW,WAAW,SAAS;AACrF,cAAI,SAAS;AAAW;AACxB,cAAI,QAAQ,MAAM,UAAS,GAAI,aAAa,MAAM,UAAS,GAAI,QAAQ,MAAM,UAAS,GAAI,QAAQ,MAAM,UAAS,GAChH,aAAa,MAAM,UAAS,GAAI,aAAa,MAAM,UAAS,GAAI,aAAa,MAAM,UAAS;AAC7F,kBAAQ,MAAM,SAAQ,GAAI;YACzB,KAAK;AACJ,uBAAS,WAAW,KAAK;AACzB;YACD,KAAK;AACJ,wBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AACpF,wBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;AAC1E,wBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;AAC1E,wBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AACpF,wBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AACpF,wBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;;AAEtF,iBAAO;AACP,sBAAY;AACZ,iBAAO;AACP,iBAAO;AACP,sBAAY;AACZ,sBAAY;AACZ,sBAAY;;AAEb,kBAAU,KAAK,QAAQ;;AAIxB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,KAAK;AACpD,YAAI,QAAQ,MAAM,QAAQ,IAAI;AAC9B,YAAI,OAAO,aAAa,gBAAgB,KAAK;AAC7C,iBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,IAAI,MAAM;AACzD,gBAAM,OAAO,MAAM,SAAQ,GAAI,aAAa,MAAM,QAAQ,IAAI,GAAG,cAAc,MAAM,QAAQ,IAAI;AACjG,kBAAQ,MAAM;YACb,KAAK;AACJ,wBACE,KAAK,cAAc,OAAO,IAAI,+BAA+B,YAAY,aAAa,KAAK,GAC3F,KAAK,gBAAgB,aAAa,QAAQ,QAAQ,CAAC,CAAC;AACtD;YACD,KAAK;AACJ,wBACE,KAAK,cAAc,OAAO,IAAI,8BAA8B,YAAY,aAAa,KAAK,GAC1F,KAAK,eAAe,YAAY,UAAU,KAAK,eAAe,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAC9F;YACD,KAAK;AACJ,kBAAI,WAAW,IAAI,0BAA0B,YAAY,aAAa,KAAK;AAC3E,kBAAI,OAAO,MAAM,UAAS,GAAI,YAAY,MAAM,UAAS,GAAI,OAAO,MAAM,UAAS,GAAI,OAAO,MAAM,UAAS;AAC7G,uBAAS,QAAQ,GAAG,SAAS,GAAG,YAAY,SAAS,cAAa,IAAK,KAAK,SAAS;AACpF,yBAAS,SAAS,OAAO,MAAM,WAAW,MAAM,IAAI;AACpD,oBAAI,SAAS;AAAW;AACxB,oBAAI,QAAQ,MAAM,UAAS,GAAI,aAAa,MAAM,UAAS,GAAI,QAAQ,MAAM,UAAS,GACrF,QAAQ,MAAM,UAAS;AACxB,wBAAQ,MAAM,SAAQ,GAAI;kBACzB,KAAK;AACJ,6BAAS,WAAW,KAAK;AACzB;kBACD,KAAK;AACJ,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AACpF,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;AAC1E,8BAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;;AAE5E,uBAAO;AACP,4BAAY;AACZ,uBAAO;AACP,uBAAO;;AAER,wBAAU,KAAK,QAAQ;;;;AAM3B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,KAAK;AACpD,cAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI;AACpC,iBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,IAAI,MAAM;AACzD,gBAAM,OAAO,MAAM,SAAQ,GAAI,aAAa,MAAM,QAAQ,IAAI;AAC9D,cAAI,QAAQ,eAAe;AAC1B,kBAAM,WAAW,IAAI,+BAA+B,YAAY,KAAK;AACrE,qBAAS,QAAQ,GAAG,QAAQ,YAAY;AACvC,uBAAS,SAAS,OAAO,MAAM,UAAS,CAAE;AAC3C,sBAAU,KAAK,QAAQ;AACvB;;AAED,gBAAM,cAAc,MAAM,QAAQ,IAAI;AACtC,kBAAQ,MAAM;YACb,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,iCAAiC,YAAY,aAAa,KAAK,GAAG,CAAC,CAAC;AAC5G;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,kCAAkC,YAAY,aAAa,KAAK,GAAG,CAAC,CAAC;AAC7G;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,iCAAiC,YAAY,aAAa,KAAK,GAAG,CAAC,CAAC;AAC5G;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,8BAA8B,YAAY,aAAa,KAAK,GAAG,CAAC,CAAC;AACzG;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,8BAA8B,YAAY,aAAa,KAAK,GAAG,CAAC,CAAC;AACzG;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,iCAAiC,YAAY,aAAa,KAAK,GAAG,CAAC,CAAC;AAC5G;YACD,KAAK;AACJ,wBAAU,KAAK,cAAc,OAAO,IAAI,6BAA6B,YAAY,aAAa,KAAK,GAAG,CAAC,CAAC;;;;AAM5G,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,IAAI,GAAG,KAAK;AACpD,YAAI,OAAO,aAAa,MAAM,MAAM,QAAQ,IAAI,CAAC;AACjD,iBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,IAAI,MAAM;AACzD,cAAI,YAAY,MAAM,QAAQ,IAAI;AAClC,mBAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,IAAI,GAAG,MAAM,KAAK,OAAO;AAC9D,gBAAI,iBAAiB,MAAM,cAAa;AACxC,gBAAI,CAAC;AAAgB,oBAAM,IAAI,MAAM,kCAAkC;AACvE,gBAAI,aAAa,KAAK,cAAc,WAAW,cAAc;AAC7D,gBAAI,eAAe,MAAM,SAAQ;AACjC,gBAAI,aAAa,MAAM,QAAQ,IAAI;AACnC,gBAAI,YAAY,aAAa;AAE7B,oBAAQ,cAAc;cACrB,KAAK,mBAAmB;AACvB,oBAAI,mBAAmB;AACvB,oBAAI,WAAW,iBAAiB;AAChC,oBAAI,WAAW,iBAAiB;AAChC,oBAAI,eAAe,WAAW,SAAS,SAAS,IAAI,IAAI,SAAS;AAGjE,oBAAI,cAAc,MAAM,QAAQ,IAAI;AACpC,oBAAI,WAAW,IAAI,eAAe,YAAY,aAAa,WAAW,gBAAgB;AAEtF,oBAAI,OAAO,MAAM,UAAS;AAC1B,yBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,sBAAI;AACJ,sBAAI,MAAM,MAAM,QAAQ,IAAI;AAC5B,sBAAI,OAAO;AACV,6BAAS,WAAW,MAAM,cAAc,YAAY,IAAI;uBACpD;AACJ,6BAAS,MAAM,cAAc,YAAY;AACzC,wBAAI,QAAQ,MAAM,QAAQ,IAAI;AAC9B,2BAAO;AACP,wBAAI,SAAS,GAAG;AACf,+BAAS,IAAI,OAAO,IAAI,KAAK;AAC5B,+BAAO,CAAC,IAAI,MAAM,UAAS;2BACtB;AACN,+BAAS,IAAI,OAAO,IAAI,KAAK;AAC5B,+BAAO,CAAC,IAAI,MAAM,UAAS,IAAK;;AAElC,wBAAI,CAAC,UAAU;AACd,+BAAS,IAAI,GAAG,KAAK,OAAO,QAAQ,IAAI,IAAI;AAC3C,+BAAO,CAAC,KAAK,SAAS,CAAC;;;AAI1B,2BAAS,SAAS,OAAO,MAAM,MAAM;AACrC,sBAAI,SAAS;AAAW;AACxB,sBAAI,QAAQ,MAAM,UAAS;AAC3B,0BAAQ,MAAM,SAAQ,GAAI;oBACzB,KAAK;AACJ,+BAAS,WAAW,KAAK;AACzB;oBACD,KAAK;AACJ,gCAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,GAAG,GAAG,CAAC;;AAErE,yBAAO;;AAER,0BAAU,KAAK,QAAQ;AACvB;;cAED,KAAK,qBAAqB;AACzB,oBAAI,WAAW,IAAI,iBAAiB,YAAY,WAAW,UAAyC;AACpG,yBAAS,QAAQ,GAAG,QAAQ,YAAY,SAAS;AAChD,sBAAI,OAAO,MAAM,UAAS;AAC1B,sBAAI,eAAe,MAAM,UAAS;AAClC,2BAAS,SAAS,OAAO,MAAM,mBAAmB,eAAe,EAAG,GAAG,gBAAgB,GACtF,MAAM,UAAS,CAAE;;AAEnB,0BAAU,KAAK,QAAQ;AACvB;;;;;;AAQL,UAAI,iBAAiB,MAAM,QAAQ,IAAI;AACvC,UAAI,iBAAiB,GAAG;AACvB,YAAI,WAAW,IAAI,kBAAkB,cAAc;AACnD,YAAI,YAAY,aAAa,MAAM;AACnC,iBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACxC,cAAI,OAAO,MAAM,UAAS;AAC1B,cAAI,cAAc,MAAM,QAAQ,IAAI;AACpC,cAAI,YAAY,MAAM,SAAS,WAAW,CAAC;AAC3C,mBAAS,KAAK,YAAY,GAAG,MAAM,GAAG;AACrC,sBAAU,EAAE,IAAI;AACjB,cAAI,YAAY,MAAM,SAAS,YAAY,aAAa,CAAC;AACzD,cAAI,gBAAgB,GAAG,iBAAiB;AACxC,mBAAS,KAAK,GAAG,KAAK,aAAa,MAAM;AACxC,gBAAI,YAAY,MAAM,QAAQ,IAAI;AAElC,mBAAO,iBAAiB;AACvB,wBAAU,gBAAgB,IAAI;AAE/B,sBAAU,gBAAgB,MAAM,QAAQ,IAAI,CAAC,IAAI;;AAGlD,iBAAO,gBAAgB;AACtB,sBAAU,gBAAgB,IAAI;AAE/B,mBAAS,KAAK,YAAY,GAAG,MAAM,GAAG;AACrC,gBAAI,UAAU,EAAE,KAAK;AAAI,wBAAU,EAAE,IAAI,UAAU,EAAE,cAAc;AACpE,mBAAS,SAAS,GAAG,MAAM,SAAS;;AAErC,kBAAU,KAAK,QAAQ;;AAIxB,UAAI,aAAa,MAAM,QAAQ,IAAI;AACnC,UAAI,aAAa,GAAG;AACnB,YAAI,WAAW,IAAI,cAAc,UAAU;AAC3C,iBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACpC,cAAI,OAAO,MAAM,UAAS;AAC1B,cAAI,YAAY,aAAa,OAAO,MAAM,QAAQ,IAAI,CAAC;AACvD,cAAI,QAAQ,IAAI,MAAM,MAAM,SAAS;AACrC,gBAAM,WAAW,MAAM,QAAQ,KAAK;AACpC,gBAAM,aAAa,MAAM,UAAS;AAClC,gBAAM,cAAc,MAAM,WAAU;AACpC,cAAI,MAAM,eAAe;AAAM,kBAAM,cAAc,UAAU;AAC7D,cAAI,MAAM,KAAK,WAAW;AACzB,kBAAM,SAAS,MAAM,UAAS;AAC9B,kBAAM,UAAU,MAAM,UAAS;;AAEhC,mBAAS,SAAS,GAAG,KAAK;;AAE3B,kBAAU,KAAK,QAAQ;;AAGxB,UAAI,WAAW;AACf,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG;AAC5C,mBAAW,KAAK,IAAI,UAAU,UAAU,CAAC,EAAE,YAAW,CAAE;AACzD,aAAO,IAAI,UAAU,MAAM,WAAW,QAAQ;IAC/C;;AAGK,MAAO,cAAP,MAAkB;IACe;IAAuC;IAA2B;IAAxG,YAAa,MAAyB,UAAU,IAAI,MAAK,GAAoB,QAAgB,GAAW,SAAS,IAAI,SAAS,KAAK,MAAM,GAAC;AAApG,WAAA,UAAA;AAAuC,WAAA,QAAA;AAA2B,WAAA,SAAA;IACxG;IAEA,WAAQ;AACP,aAAO,KAAK,OAAO,QAAQ,KAAK,OAAO;IACxC;IAEA,mBAAgB;AACf,aAAO,KAAK,OAAO,SAAS,KAAK,OAAO;IACzC;IAEA,YAAS;AACR,UAAI,QAAQ,KAAK,OAAO,SAAS,KAAK,KAAK;AAC3C,WAAK,SAAS;AACd,aAAO;IACR;IAEA,YAAS;AACR,UAAI,QAAQ,KAAK,OAAO,SAAS,KAAK,KAAK;AAC3C,WAAK,SAAS;AACd,aAAO;IACR;IAEA,QAAS,kBAAyB;AACjC,UAAI,IAAI,KAAK,SAAQ;AACrB,UAAI,SAAS,IAAI;AACjB,WAAK,IAAI,QAAS,GAAG;AACpB,YAAI,KAAK,SAAQ;AACjB,mBAAW,IAAI,QAAS;AACxB,aAAK,IAAI,QAAS,GAAG;AACpB,cAAI,KAAK,SAAQ;AACjB,qBAAW,IAAI,QAAS;AACxB,eAAK,IAAI,QAAS,GAAG;AACpB,gBAAI,KAAK,SAAQ;AACjB,uBAAW,IAAI,QAAS;AACxB,iBAAK,IAAI,QAAS,GAAG;AACpB,kBAAI,KAAK,SAAQ;AACjB,yBAAW,IAAI,QAAS;;;;;AAK5B,aAAO,mBAAmB,SAAW,WAAW,IAAK,EAAE,SAAS;IACjE;IAEA,gBAAa;AACZ,UAAI,QAAQ,KAAK,QAAQ,IAAI;AAC7B,aAAO,SAAS,IAAI,OAAO,KAAK,QAAQ,QAAQ,CAAC;IAClD;IAEA,aAAU;AACT,UAAI,YAAY,KAAK,QAAQ,IAAI;AACjC,cAAQ,WAAW;QAClB,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;;AAET;AACA,UAAI,QAAQ;AACZ,UAAI,YAAY;AAChB,eAAS,IAAI,GAAG,IAAI,aAAY;AAC/B,YAAI,IAAI,KAAK,iBAAgB;AAC7B,gBAAQ,KAAK,GAAG;UACf,KAAK;UACL,KAAK;AACJ,qBAAS,OAAO,cAAe,IAAI,OAAS,IAAI,KAAK,SAAQ,IAAK,EAAK;AACvE,iBAAK;AACL;UACD,KAAK;AACJ,qBAAS,OAAO,cAAe,IAAI,OAAS,MAAM,KAAK,SAAQ,IAAK,OAAS,IAAI,KAAK,SAAQ,IAAK,EAAK;AACxG,iBAAK;AACL;UACD;AACC,qBAAS,OAAO,aAAa,CAAC;AAC9B;;;AAGH,aAAO;IACR;IAEA,YAAS;AACR,UAAI,QAAQ,KAAK,OAAO,WAAW,KAAK,KAAK;AAC7C,WAAK,SAAS;AACd,aAAO;IACR;IAEA,cAAW;AACV,aAAO,KAAK,SAAQ,KAAM;IAC3B;;AAGD,MAAM,aAAN,MAAgB;IACf;IAAuB;IACvB;IACA;IACA;IAEA,YAAa,MAAsB,WAAmB,WAAmB,QAAuB,eAAsB;AACrH,WAAK,OAAO;AACZ,WAAK,YAAY;AACjB,WAAK,YAAY;AACjB,WAAK,SAAS;AACd,WAAK,kBAAkB;IACxB;;AAGD,MAAM,WAAN,MAAc;IACO;IAA2C;IAA6D;IAA5H,YAAoB,QAA8B,MAAa,WAAgD,MAAa,SAAiB,GAAC;AAA1H,WAAA,QAAA;AAA2C,WAAA,WAAA;AAA6D,WAAA,SAAA;IAAsB;;AAGnJ,MAAK;AAAL,GAAA,SAAKE,iBAAc;AAAG,IAAAA,gBAAAA,gBAAA,QAAA,IAAA,CAAA,IAAA;AAAQ,IAAAA,gBAAAA,gBAAA,aAAA,IAAA,CAAA,IAAA;AAAa,IAAAA,gBAAAA,gBAAA,MAAA,IAAA,CAAA,IAAA;AAAM,IAAAA,gBAAAA,gBAAA,YAAA,IAAA,CAAA,IAAA;AAAY,IAAAA,gBAAAA,gBAAA,MAAA,IAAA,CAAA,IAAA;AAAM,IAAAA,gBAAAA,gBAAA,OAAA,IAAA,CAAA,IAAA;AAAO,IAAAA,gBAAAA,gBAAA,UAAA,IAAA,CAAA,IAAA;EAAS,GAA9E,mBAAA,iBAAc,CAAA,EAAA;AAEnB,WAAS,cAAe,OAAoB,UAA0B,OAAa;AAClF,QAAI,OAAO,MAAM,UAAS,GAAI,QAAQ,MAAM,UAAS,IAAK;AAC1D,aAAS,QAAQ,GAAG,SAAS,GAAG,YAAY,SAAS,cAAa,IAAK,KAAK,SAAS;AACpF,eAAS,SAAS,OAAO,MAAM,KAAK;AACpC,UAAI,SAAS;AAAW;AACxB,UAAI,QAAQ,MAAM,UAAS,GAAI,SAAS,MAAM,UAAS,IAAK;AAC5D,cAAQ,MAAM,SAAQ,GAAI;QACzB,KAAK;AACJ,mBAAS,WAAW,KAAK;AACzB;QACD,KAAK;AACJ,oBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,OAAO,QAAQ,KAAK;;AAElF,aAAO;AACP,cAAQ;;AAET,WAAO;EACR;AAEA,WAAS,cAAe,OAAoB,UAA0B,OAAa;AAClF,QAAI,OAAO,MAAM,UAAS,GAAI,SAAS,MAAM,UAAS,IAAK,OAAO,SAAS,MAAM,UAAS,IAAK;AAC/F,aAAS,QAAQ,GAAG,SAAS,GAAG,YAAY,SAAS,cAAa,IAAK,KAAK,SAAS;AACpF,eAAS,SAAS,OAAO,MAAM,QAAQ,MAAM;AAC7C,UAAI,SAAS;AAAW;AACxB,UAAI,QAAQ,MAAM,UAAS,GAAI,UAAU,MAAM,UAAS,IAAK,OAAO,UAAU,MAAM,UAAS,IAAK;AAClG,cAAQ,MAAM,SAAQ,GAAI;QACzB,KAAK;AACJ,mBAAS,WAAW,KAAK;AACzB;QACD,KAAK;AACJ,oBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,QAAQ,SAAS,KAAK;AAClF,oBAAU,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,OAAO,QAAQ,SAAS,KAAK;;AAEpF,aAAO;AACP,eAAS;AACT,eAAS;;AAEV,WAAO;EACR;AAEA,WAAS,UAAW,OAAoB,UAAyB,QAAgB,OAAe,OAC/F,OAAe,OAAe,QAAgB,QAAgB,OAAa;AAC3E,aAAS,UAAU,QAAQ,OAAO,OAAO,OAAO,QAAQ,MAAM,UAAS,GAAI,MAAM,UAAS,IAAK,OAAO,MAAM,UAAS,GAAI,MAAM,UAAS,IAAK,OAAO,OAAO,MAAM;EAClK;AAEA,MAAM,cAAc;AACpB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AACxB,MAAM,aAAa;AACnB,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB,MAAM,aAAa;AACnB,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB,MAAM,eAAe;AAErB,MAAM,kBAAkB;AACxB,MAAM,YAAY;AAClB,MAAM,WAAW;AACjB,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,aAAa;AAEnB,MAAM,oBAAoB;AAC1B,MAAM,sBAAsB;AAE5B,MAAM,gBAAgB;AACtB,MAAM,eAAe;AACrB,MAAM,WAAW;AAEjB,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,eAAe;AACrB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM,cAAc;AACpB,MAAM,gBAAgB;AAGtB,MAAM,gBAAgB;AACtB,MAAM,eAAe;;;AC7vCf,MAAO,iBAAP,MAAqB;;IAG1B,OAAO;;IAGP,OAAO;;IAGP,OAAO;;IAGP,OAAO;;IAGP,gBAAgB,IAAI,MAAK;;IAGzB,WAAW,IAAI,MAAK;IAEZ,cAAc,IAAI,KAAsB,MAAK;AACpD,aAAO,MAAM,cAAc,EAAE;IAC9B,CAAC;;;;;IAMD,OAAQ,UAAoB,YAAmB;AAC9C,UAAI,CAAC;AAAU,cAAM,IAAI,MAAM,0BAA0B;AACzD,UAAI,gBAAgB,KAAK;AACzB,UAAI,WAAW,KAAK;AACpB,UAAI,cAAc,KAAK;AACvB,UAAI,QAAQ,SAAS;AACrB,UAAI,YAAY,MAAM;AAEtB,oBAAc,SAAS;AACvB,kBAAY,QAAQ,QAAQ;AAC5B,eAAS,SAAS;AAElB,eAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,CAAC,KAAK,KAAK;AAAQ;AACvB,YAAI,aAAa,KAAK,cAAa;AACnC,YAAI,sBAAsB,uBAAuB;AAChD,cAAI,cAAc;AAClB,wBAAc,KAAK,WAAW;AAE9B,cAAI,UAAU,YAAY,OAAM;AAChC,cAAI,QAAQ,UAAU,YAAY,qBAAqB;AACtD,sBAAU,MAAM,cAAc,YAAY,mBAAmB;;AAE9D,mBAAS,KAAK,OAAO;AACrB,sBAAY,qBAAqB,MAAM,GAAG,YAAY,qBAAqB,SAAS,GAAG,CAAC;;;AAI1F,UAAI,YAAY;AACf,aAAK,YAAW;aACV;AACN,aAAK,OAAO,OAAO;AACnB,aAAK,OAAO,OAAO;AACnB,aAAK,OAAO,OAAO;AACnB,aAAK,OAAO,OAAO;;IAErB;IAEA,cAAW;AACV,UAAI,OAAO,OAAO,mBAAmB,OAAO,OAAO,mBAAmB,OAAO,OAAO,mBAAmB,OAAO,OAAO;AACrH,UAAI,WAAW,KAAK;AACpB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;AAChD,YAAI,UAAU,SAAS,CAAC;AACxB,YAAI,WAAW;AACf,iBAAS,KAAK,GAAG,KAAK,QAAQ,QAAQ,KAAK,IAAI,MAAM,GAAG;AACvD,cAAI,IAAI,SAAS,EAAE;AACnB,cAAI,IAAI,SAAS,KAAK,CAAC;AACvB,iBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,iBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,iBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,iBAAO,KAAK,IAAI,MAAM,CAAC;;;AAGzB,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,WAAK,OAAO;IACb;;IAGA,kBAAmB,GAAW,GAAS;AACtC,aAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK;IACxE;;IAGA,sBAAuB,IAAY,IAAY,IAAY,IAAU;AACpE,UAAI,OAAO,KAAK;AAChB,UAAI,OAAO,KAAK;AAChB,UAAI,OAAO,KAAK;AAChB,UAAI,OAAO,KAAK;AAChB,UAAK,MAAM,QAAQ,MAAM,QAAU,MAAM,QAAQ,MAAM,QAAU,MAAM,QAAQ,MAAM,QAAU,MAAM,QAAQ,MAAM;AAClH,eAAO;AACR,UAAI,KAAK,KAAK,OAAO,KAAK;AAC1B,UAAI,IAAI,KAAK,OAAO,MAAM;AAC1B,UAAI,IAAI,QAAQ,IAAI;AAAM,eAAO;AACjC,UAAI,KAAK,OAAO,MAAM;AACtB,UAAI,IAAI,QAAQ,IAAI;AAAM,eAAO;AACjC,UAAI,KAAK,OAAO,MAAM,IAAI;AAC1B,UAAI,IAAI,QAAQ,IAAI;AAAM,eAAO;AACjC,WAAK,OAAO,MAAM,IAAI;AACtB,UAAI,IAAI,QAAQ,IAAI;AAAM,eAAO;AACjC,aAAO;IACR;;IAGA,uBAAwB,QAAsB;AAC7C,aAAO,KAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,OAAO;IAC5G;;;IAIA,cAAe,GAAW,GAAS;AAClC,UAAI,WAAW,KAAK;AACpB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG;AAC3C,YAAI,KAAK,qBAAqB,SAAS,CAAC,GAAG,GAAG,CAAC;AAAG,iBAAO,KAAK,cAAc,CAAC;AAC9E,aAAO;IACR;;IAGA,qBAAsB,SAA0B,GAAW,GAAS;AACnE,UAAI,WAAW;AACf,UAAI,KAAK,QAAQ;AAEjB,UAAI,YAAY,KAAK;AACrB,UAAI,SAAS;AACb,eAAS,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG;AAClC,YAAI,UAAU,SAAS,KAAK,CAAC;AAC7B,YAAI,QAAQ,SAAS,YAAY,CAAC;AAClC,YAAK,UAAU,KAAK,SAAS,KAAO,QAAQ,KAAK,WAAW,GAAI;AAC/D,cAAI,UAAU,SAAS,EAAE;AACzB,cAAI,WAAW,IAAI,YAAY,QAAQ,YAAY,SAAS,SAAS,IAAI,WAAW;AAAG,qBAAS,CAAC;;AAElG,oBAAY;;AAEb,aAAO;IACR;;;;IAKA,kBAAmB,IAAY,IAAY,IAAY,IAAU;AAChE,UAAI,WAAW,KAAK;AACpB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG;AAC3C,YAAI,KAAK,yBAAyB,SAAS,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAG,iBAAO,KAAK,cAAc,CAAC;AAC5F,aAAO;IACR;;IAGA,yBAA0B,SAA0B,IAAY,IAAY,IAAY,IAAU;AACjG,UAAI,WAAW;AACf,UAAI,KAAK,QAAQ;AAEjB,UAAI,UAAU,KAAK,IAAI,WAAW,KAAK;AACvC,UAAI,OAAO,KAAK,KAAK,KAAK;AAC1B,UAAI,KAAK,SAAS,KAAK,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC;AAC/C,eAAS,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG;AAClC,YAAI,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,KAAK,CAAC;AAC3C,YAAI,OAAO,KAAK,KAAK,KAAK;AAC1B,YAAI,UAAU,KAAK,IAAI,WAAW,KAAK;AACvC,YAAI,OAAO,UAAU,WAAW,WAAW;AAC3C,YAAI,KAAK,OAAO,UAAU,UAAU,QAAQ;AAC5C,aAAM,KAAK,MAAM,KAAK,MAAQ,KAAK,MAAM,KAAK,QAAU,KAAK,MAAM,KAAK,MAAQ,KAAK,MAAM,KAAK,KAAM;AACrG,cAAI,KAAK,OAAO,WAAW,WAAW,QAAQ;AAC9C,eAAM,KAAK,MAAM,KAAK,MAAQ,KAAK,MAAM,KAAK,QAAU,KAAK,MAAM,KAAK,MAAQ,KAAK,MAAM,KAAK;AAAM,mBAAO;;AAE9G,aAAK;AACL,aAAK;;AAEN,aAAO;IACR;;IAGA,WAAY,aAAkC;AAC7C,UAAI,CAAC;AAAa,cAAM,IAAI,MAAM,6BAA6B;AAC/D,UAAI,QAAQ,KAAK,cAAc,QAAQ,WAAW;AAClD,aAAO,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK;IAChD;;IAGA,WAAQ;AACP,aAAO,KAAK,OAAO,KAAK;IACzB;;IAGA,YAAS;AACR,aAAO,KAAK,OAAO,KAAK;IACzB;;;;ACvMK,MAAO,eAAP,MAAO,cAAY;IAChB,iBAAiB,IAAI,MAAK;IAC1B,wBAAwB,IAAI,MAAK;IAEjC,eAAe,IAAI,MAAK;IACxB,iBAAiB,IAAI,MAAK;IAC1B,YAAY,IAAI,MAAK;IAErB,cAAc,IAAI,KAAoB,MAAK;AAClD,aAAO,IAAI,MAAK;IACjB,CAAC;IAEO,qBAAqB,IAAI,KAAoB,MAAK;AACzD,aAAO,IAAI,MAAK;IACjB,CAAC;IAEM,YAAa,eAA8B;AACjD,UAAI,WAAW;AACf,UAAI,cAAc,cAAc,UAAU;AAE1C,UAAI,UAAU,KAAK;AACnB,cAAQ,SAAS;AACjB,eAAS,IAAI,GAAG,IAAI,aAAa;AAChC,gBAAQ,CAAC,IAAI;AAEd,UAAI,YAAY,KAAK;AACrB,gBAAU,SAAS;AACnB,eAAS,IAAI,GAAG,IAAI,aAAa,IAAI,GAAG,EAAE;AACzC,kBAAU,CAAC,IAAI,cAAa,UAAU,GAAG,aAAa,UAAU,OAAO;AAExE,UAAI,YAAY,KAAK;AACrB,gBAAU,SAAS;AAEnB,aAAO,cAAc,GAAG;AAEvB,YAAI,WAAW,cAAc,GAAG,IAAI,GAAG,OAAO;AAC9C,eAAO,MAAM;AACZ;AACA,gBAAI,CAAC,UAAU,CAAC,GAAG;AAClB,kBAAI,KAAK,QAAQ,QAAQ,KAAK,GAAG,KAAK,QAAQ,CAAC,KAAK,GAAG,KAAK,QAAQ,IAAI,KAAK;AAC7E,kBAAI,MAAM,SAAS,EAAE,GAAG,MAAM,SAAS,KAAK,CAAC;AAC7C,kBAAI,MAAM,SAAS,EAAE,GAAG,MAAM,SAAS,KAAK,CAAC;AAC7C,kBAAI,MAAM,SAAS,EAAE,GAAG,MAAM,SAAS,KAAK,CAAC;AAC7C,uBAAS,MAAM,OAAO,KAAK,aAAa,MAAM,UAAU,MAAM,KAAK,KAAK,aAAa;AACpF,oBAAI,CAAC,UAAU,EAAE;AAAG;AACpB,oBAAI,IAAI,QAAQ,EAAE,KAAK;AACvB,oBAAI,KAAK,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC;AACzC,oBAAI,cAAa,aAAa,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE,GAAG;AAC1D,sBAAI,cAAa,aAAa,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE,GAAG;AAC1D,wBAAI,cAAa,aAAa,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE;AAAG,4BAAM;;;;AAIpE;;AAGD,cAAI,QAAQ,GAAG;AACd,eAAG;AACF,kBAAI,CAAC,UAAU,CAAC;AAAG;AACnB;qBACQ,IAAI;AACb;;AAGD,qBAAW;AACX,cAAI;AACJ,kBAAQ,OAAO,KAAK;;AAIrB,kBAAU,KAAK,SAAS,cAAc,IAAI,KAAK,WAAW,CAAC;AAC3D,kBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,kBAAU,KAAK,SAAS,IAAI,KAAK,WAAW,CAAC;AAC7C,gBAAQ,OAAO,GAAG,CAAC;AACnB,kBAAU,OAAO,GAAG,CAAC;AACrB;AAEA,YAAI,iBAAiB,cAAc,IAAI,KAAK;AAC5C,YAAI,YAAY,KAAK,cAAc,IAAI;AACvC,kBAAU,aAAa,IAAI,cAAa,UAAU,eAAe,aAAa,UAAU,OAAO;AAC/F,kBAAU,SAAS,IAAI,cAAa,UAAU,WAAW,aAAa,UAAU,OAAO;;AAGxF,UAAI,eAAe,GAAG;AACrB,kBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,kBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,kBAAU,KAAK,QAAQ,CAAC,CAAC;;AAG1B,aAAO;IACR;IAEA,UAAW,eAA8B,WAAwB;AAChE,UAAI,WAAW;AACf,UAAI,iBAAiB,KAAK;AAC1B,WAAK,YAAY,QAAQ,cAAc;AACvC,qBAAe,SAAS;AAExB,UAAI,wBAAwB,KAAK;AACjC,WAAK,mBAAmB,QAAQ,qBAAqB;AACrD,4BAAsB,SAAS;AAE/B,UAAI,iBAAiB,KAAK,mBAAmB,OAAM;AACnD,qBAAe,SAAS;AAExB,UAAI,UAAU,KAAK,YAAY,OAAM;AACrC,cAAQ,SAAS;AAGjB,UAAI,eAAe,IAAI,cAAc;AACrC,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK,GAAG;AACpD,YAAI,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,UAAU,IAAI,CAAC,KAAK,GAAG,KAAK,UAAU,IAAI,CAAC,KAAK;AACjF,YAAI,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,KAAK,CAAC;AAC3C,YAAI,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,KAAK,CAAC;AAC3C,YAAI,KAAK,SAAS,EAAE,GAAG,KAAK,SAAS,KAAK,CAAC;AAG3C,YAAI,SAAS;AACb,YAAI,gBAAgB,IAAI;AACvB,cAAI,IAAI,QAAQ,SAAS;AACzB,cAAI,WAAW,cAAa,QAAQ,QAAQ,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,IAAI,EAAE;AACtG,cAAI,WAAW,cAAa,QAAQ,IAAI,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC1F,cAAI,YAAY,eAAe,YAAY,aAAa;AACvD,oBAAQ,KAAK,EAAE;AACf,oBAAQ,KAAK,EAAE;AACf,2BAAe,KAAK,EAAE;AACtB,qBAAS;;;AAKX,YAAI,CAAC,QAAQ;AACZ,cAAI,QAAQ,SAAS,GAAG;AACvB,2BAAe,KAAK,OAAO;AAC3B,kCAAsB,KAAK,cAAc;iBACnC;AACN,iBAAK,YAAY,KAAK,OAAO;AAC7B,iBAAK,mBAAmB,KAAK,cAAc;;AAE5C,oBAAU,KAAK,YAAY,OAAM;AACjC,kBAAQ,SAAS;AACjB,kBAAQ,KAAK,EAAE;AACf,kBAAQ,KAAK,EAAE;AACf,kBAAQ,KAAK,EAAE;AACf,kBAAQ,KAAK,EAAE;AACf,kBAAQ,KAAK,EAAE;AACf,kBAAQ,KAAK,EAAE;AACf,2BAAiB,KAAK,mBAAmB,OAAM;AAC/C,yBAAe,SAAS;AACxB,yBAAe,KAAK,EAAE;AACtB,yBAAe,KAAK,EAAE;AACtB,yBAAe,KAAK,EAAE;AACtB,wBAAc,cAAa,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACzD,yBAAe;;;AAIjB,UAAI,QAAQ,SAAS,GAAG;AACvB,uBAAe,KAAK,OAAO;AAC3B,8BAAsB,KAAK,cAAc;;AAI1C,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,IAAI,GAAG,KAAK;AACtD,yBAAiB,sBAAsB,CAAC;AACxC,YAAI,eAAe,UAAU;AAAG;AAChC,YAAI,aAAa,eAAe,CAAC;AACjC,YAAI,YAAY,eAAe,eAAe,SAAS,CAAC;AAExD,kBAAU,eAAe,CAAC;AAC1B,YAAI,IAAI,QAAQ,SAAS;AACzB,YAAI,YAAY,QAAQ,CAAC,GAAG,YAAY,QAAQ,IAAI,CAAC;AACrD,YAAI,QAAQ,QAAQ,IAAI,CAAC,GAAG,QAAQ,QAAQ,IAAI,CAAC;AACjD,YAAI,SAAS,QAAQ,CAAC,GAAG,SAAS,QAAQ,CAAC;AAC3C,YAAI,UAAU,QAAQ,CAAC,GAAG,UAAU,QAAQ,CAAC;AAC7C,YAAI,UAAU,cAAa,QAAQ,WAAW,WAAW,OAAO,OAAO,QAAQ,MAAM;AAErF,iBAAS,KAAK,GAAG,KAAK,GAAG,MAAM;AAC9B,cAAI,MAAM;AAAG;AACb,cAAI,eAAe,sBAAsB,EAAE;AAC3C,cAAI,aAAa,UAAU;AAAG;AAC9B,cAAI,kBAAkB,aAAa,CAAC;AACpC,cAAI,mBAAmB,aAAa,CAAC;AACrC,cAAI,iBAAiB,aAAa,CAAC;AAEnC,cAAI,YAAY,eAAe,EAAE;AACjC,cAAI,KAAK,UAAU,UAAU,SAAS,CAAC,GAAG,KAAK,UAAU,UAAU,SAAS,CAAC;AAE7E,cAAI,mBAAmB,cAAc,oBAAoB;AAAW;AACpE,cAAI,WAAW,cAAa,QAAQ,WAAW,WAAW,OAAO,OAAO,IAAI,EAAE;AAC9E,cAAI,WAAW,cAAa,QAAQ,IAAI,IAAI,QAAQ,QAAQ,SAAS,OAAO;AAC5E,cAAI,YAAY,WAAW,YAAY,SAAS;AAC/C,sBAAU,SAAS;AACnB,yBAAa,SAAS;AACtB,oBAAQ,KAAK,EAAE;AACf,oBAAQ,KAAK,EAAE;AACf,2BAAe,KAAK,cAAc;AAClC,wBAAY;AACZ,wBAAY;AACZ,oBAAQ;AACR,oBAAQ;AACR,iBAAK;;;;AAMR,eAAS,IAAI,eAAe,SAAS,GAAG,KAAK,GAAG,KAAK;AACpD,kBAAU,eAAe,CAAC;AAC1B,YAAI,QAAQ,UAAU,GAAG;AACxB,yBAAe,OAAO,GAAG,CAAC;AAC1B,eAAK,YAAY,KAAK,OAAO;AAC7B,2BAAiB,sBAAsB,CAAC;AACxC,gCAAsB,OAAO,GAAG,CAAC;AACjC,eAAK,mBAAmB,KAAK,cAAc;;;AAI7C,aAAO;IACR;IAEQ,OAAO,UAAW,OAAe,aAAqB,UAA2B,SAAwB;AAChH,UAAI,WAAW,SAAS,cAAc,QAAQ,KAAK,WAAW,KAAK;AACnE,UAAI,UAAU,QAAQ,KAAK,KAAK;AAChC,UAAI,OAAO,SAAS,QAAQ,KAAK,WAAW,KAAK;AACjD,aAAO,CAAC,KAAK,aAAa,SAAS,QAAQ,GAAG,SAAS,WAAW,CAAC,GAAG,SAAS,OAAO,GAAG,SAAS,UAAU,CAAC,GAAG,SAAS,IAAI,GAC5H,SAAS,OAAO,CAAC,CAAC;IACpB;IAEQ,OAAO,aAAc,KAAa,KAAa,KAAa,KAAa,KAAa,KAAW;AACxG,aAAO,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,OAAO,MAAM,QAAQ;IACrE;IAEQ,OAAO,QAAS,KAAa,KAAa,KAAa,KAAa,KAAa,KAAW;AACnG,UAAI,KAAK,MAAM,KAAK,KAAK,MAAM;AAC/B,aAAO,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,MAAM,MAAM,IAAI,IAAI;IAC7D;;;;ACzOK,MAAO,mBAAP,MAAO,kBAAgB;IACpB,eAAe,IAAI,aAAY;IAC/B,kBAAkB,IAAI,MAAK;IAC3B,aAAa,IAAI,MAAK;IAC9B,kBAAkB,IAAI,MAAK;IAC3B,mBAAmB,IAAI,MAAK;IACpB,UAAU,IAAI,MAAK;IAEnB,iBAA4C;IAC5C,mBAAgD;IAExD,UAAW,MAAY,MAAwB;AAC9C,UAAI,KAAK;AAAgB,eAAO;AAChC,WAAK,iBAAiB;AAEtB,UAAI,IAAI,KAAK;AACb,UAAI,WAAW,MAAM,aAAa,KAAK,iBAAiB,CAAC;AACzD,WAAK,qBAAqB,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC;AACpD,UAAI,kBAAkB,KAAK;AAC3B,wBAAiB,cAAc,eAAe;AAC9C,UAAI,mBAAmB,KAAK,mBAAmB,KAAK,aAAa,UAAU,iBAAiB,KAAK,aAAa,YAAY,eAAe,CAAC;AAC1I,eAAS,IAAI,GAAGC,KAAI,iBAAiB,QAAQ,IAAIA,IAAG,KAAK;AACxD,YAAI,UAAU,iBAAiB,CAAC;AAChC,0BAAiB,cAAc,OAAO;AACtC,gBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,gBAAQ,KAAK,QAAQ,CAAC,CAAC;;AAGxB,aAAO,iBAAiB;IACzB;IAEA,gBAAiB,MAAU;AAC1B,UAAI,KAAK,kBAAkB,KAAK,eAAe,WAAW,KAAK;AAAM,aAAK,QAAO;IAClF;IAEA,UAAO;AACN,UAAI,CAAC,KAAK;AAAgB;AAC1B,WAAK,iBAAiB;AACtB,WAAK,mBAAmB;AACxB,WAAK,gBAAgB,SAAS;AAC9B,WAAK,iBAAiB,SAAS;AAC/B,WAAK,gBAAgB,SAAS;IAC/B;IAEA,aAAU;AACT,aAAO,KAAK,kBAAkB;IAC/B;IAKA,cAAe,UAA2B,gBAAwB,WAA4B,iBAAyB,KACtH,OAAe,MAAc,UAAkB;AAE/C,UAAI,OAAO,SAAS,QAAQ,OAAO,aAAa;AAC/C,aAAK,oBAAoB,UAAU,gBAAgB,WAAW,iBAAiB,KAAK,OAAO,MAAM,QAAQ;;AAEzG,aAAK,sBAAsB,UAAU,gBAAgB,WAAW,eAAe;IACjF;IACQ,sBAAuB,UAA2B,gBAAwB,WAA4B,iBAAuB;AAEpI,UAAI,aAAa,KAAK,YAAY,kBAAkB,KAAK;AACzD,UAAI,mBAAmB,KAAK;AAC5B,UAAI,WAAW,KAAK;AACpB,UAAI,gBAAgB,SAAS;AAC7B,UAAI,aAAa;AAEjB,UAAI,QAAQ;AACZ,sBAAgB,SAAS;AACzB,uBAAiB,SAAS;AAC1B;AACA,iBAAS,IAAI,GAAG,IAAI,iBAAiB,KAAK,GAAG;AAC5C,cAAI,eAAe,UAAU,CAAC,KAAK;AACnC,cAAI,KAAK,SAAS,YAAY,GAAG,KAAK,SAAS,eAAe,CAAC;AAE/D,yBAAe,UAAU,IAAI,CAAC,KAAK;AACnC,cAAI,KAAK,SAAS,YAAY,GAAG,KAAK,SAAS,eAAe,CAAC;AAE/D,yBAAe,UAAU,IAAI,CAAC,KAAK;AACnC,cAAI,KAAK,SAAS,YAAY,GAAG,KAAK,SAAS,eAAe,CAAC;AAE/D,mBAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACvC,gBAAI,IAAI,gBAAgB;AACxB,gBAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,UAAU,GAAG;AAC/D,kBAAI,mBAAmB,WAAW;AAClC,kBAAI,oBAAoB;AAAG;AAE3B,kBAAI,kBAAkB,oBAAoB;AAC1C,kBAAI,kBAAkB,KAAK;AAC3B,kBAAI,uBAAuB,MAAM,aAAa,iBAAiB,IAAI,kBAAkB,UAAU;AAC/F,uBAAS,KAAK,GAAG,KAAK,kBAAkB,MAAM,GAAG;AAChD,oBAAI,IAAI,gBAAgB,EAAE,GAAG,IAAI,gBAAgB,KAAK,CAAC;AACvD,qCAAqB,CAAC,IAAI;AAC1B,qCAAqB,IAAI,CAAC,IAAI;AAC9B,qBAAK;;AAGN,kBAAI,iBAAiB;AACrB,kBAAI,wBAAwB,MAAM,aAAa,kBAAkB,IAAI,KAAK,kBAAkB,EAAE;AAC9F;AACA,uBAAS,KAAK,GAAG,KAAK,iBAAiB,MAAM;AAC5C,sCAAsB,CAAC,IAAI;AAC3B,sCAAsB,IAAI,CAAC,IAAK,QAAQ;AACxC,sCAAsB,IAAI,CAAC,IAAK,QAAQ,KAAK;AAC7C,qBAAK;;AAEN,uBAAS,kBAAkB;mBAErB;AACN,kBAAI,uBAAuB,MAAM,aAAa,iBAAiB,IAAI,IAAI,UAAU;AACjF,mCAAqB,CAAC,IAAI;AAC1B,mCAAqB,IAAI,CAAC,IAAI;AAE9B,mCAAqB,IAAI,CAAC,IAAI;AAC9B,mCAAqB,IAAI,CAAC,IAAI;AAE9B,mCAAqB,IAAI,CAAC,IAAI;AAC9B,mCAAqB,IAAI,CAAC,IAAI;AAE9B,kBAAI,iBAAiB;AACrB,kBAAI,wBAAwB,MAAM,aAAa,kBAAkB,IAAI,CAAC;AACtE,oCAAsB,CAAC,IAAI;AAC3B,oCAAsB,IAAI,CAAC,IAAK,QAAQ;AACxC,oCAAsB,IAAI,CAAC,IAAK,QAAQ;AACxC,uBAAS;AACT,uBAAS;;;;IAIb;IAEQ,oBAAqB,UAA2B,gBAAwB,WAA4B,iBAAyB,KACpI,OAAc,MAAa,UAAiB;AAE5C,UAAI,aAAa,KAAK,YAAY,kBAAkB,KAAK;AACzD,UAAI,mBAAmB,KAAK;AAC5B,UAAI,WAAW,KAAK;AACpB,UAAI,gBAAgB,SAAS;AAC7B,UAAI,aAAa,WAAW,KAAK;AAEjC,UAAI,QAAQ;AACZ,sBAAgB,SAAS;AACzB,uBAAiB,SAAS;AAC1B;AACA,iBAAS,IAAI,GAAG,IAAI,iBAAiB,KAAK,GAAG;AAC5C,cAAI,eAAe,UAAU,CAAC,KAAK;AACnC,cAAI,KAAK,SAAS,YAAY,GAAG,KAAK,SAAS,eAAe,CAAC;AAC/D,cAAI,KAAK,IAAI,YAAY,GAAG,KAAK,IAAI,eAAe,CAAC;AAErD,yBAAe,UAAU,IAAI,CAAC,KAAK;AACnC,cAAI,KAAK,SAAS,YAAY,GAAG,KAAK,SAAS,eAAe,CAAC;AAC/D,cAAI,KAAK,IAAI,YAAY,GAAG,KAAK,IAAI,eAAe,CAAC;AAErD,yBAAe,UAAU,IAAI,CAAC,KAAK;AACnC,cAAI,KAAK,SAAS,YAAY,GAAG,KAAK,SAAS,eAAe,CAAC;AAC/D,cAAI,KAAK,IAAI,YAAY,GAAG,KAAK,IAAI,eAAe,CAAC;AAErD,mBAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACvC,gBAAI,IAAI,gBAAgB;AACxB,gBAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,UAAU,GAAG;AAC/D,kBAAI,mBAAmB,WAAW;AAClC,kBAAI,oBAAoB;AAAG;AAC3B,kBAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK;AACxD,kBAAI,IAAI,KAAK,KAAK,KAAK,MAAM,KAAK;AAElC,kBAAI,kBAAkB,oBAAoB;AAC1C,kBAAI,kBAAkB,KAAK;AAC3B,kBAAI,uBAAuB,MAAM,aAAa,iBAAiB,IAAI,kBAAkB,UAAU;AAC/F,uBAAS,KAAK,GAAG,KAAK,kBAAkB,MAAM,GAAG;AAChD,oBAAI,IAAI,gBAAgB,EAAE,GAAG,IAAI,gBAAgB,KAAK,CAAC;AACvD,qCAAqB,CAAC,IAAI;AAC1B,qCAAqB,IAAI,CAAC,IAAI;AAC9B,qCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,qCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,qCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,qCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,oBAAI,KAAK,IAAI,IAAI,KAAK,IAAI;AAC1B,oBAAI,KAAK,KAAK,KAAK,KAAK,MAAM;AAC9B,oBAAI,KAAK,KAAK,KAAK,KAAK,MAAM;AAC9B,oBAAI,IAAI,IAAI,IAAI;AAChB,qCAAqB,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACrD,qCAAqB,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACrD,oBAAI,UAAU;AACb,uCAAqB,IAAI,CAAC,IAAI,KAAK;AACnC,uCAAqB,IAAI,CAAC,IAAI,KAAK;AACnC,uCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,uCAAqB,IAAI,EAAE,IAAI,KAAK;;AAErC,qBAAK;;AAGN,kBAAI,iBAAiB;AACrB,kBAAI,wBAAwB,MAAM,aAAa,kBAAkB,IAAI,KAAK,kBAAkB,EAAE;AAC9F;AACA,uBAAS,KAAK,GAAG,KAAK,iBAAiB,MAAM;AAC5C,sCAAsB,CAAC,IAAI;AAC3B,sCAAsB,IAAI,CAAC,IAAK,QAAQ;AACxC,sCAAsB,IAAI,CAAC,IAAK,QAAQ,KAAK;AAC7C,qBAAK;;AAEN,uBAAS,kBAAkB;mBAErB;AACN,kBAAI,uBAAuB,MAAM,aAAa,iBAAiB,IAAI,IAAI,UAAU;AACjF,mCAAqB,CAAC,IAAI;AAC1B,mCAAqB,IAAI,CAAC,IAAI;AAC9B,mCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,mCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,mCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,mCAAqB,IAAI,CAAC,IAAI,MAAM;AACpC,kBAAI,CAAC,UAAU;AACd,qCAAqB,IAAI,CAAC,IAAI;AAC9B,qCAAqB,IAAI,CAAC,IAAI;AAE9B,qCAAqB,IAAI,CAAC,IAAI;AAC9B,qCAAqB,IAAI,CAAC,IAAI;AAC9B,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI;AAE/B,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI;qBACzB;AACN,qCAAqB,IAAI,CAAC,IAAI;AAC9B,qCAAqB,IAAI,CAAC,IAAI;AAC9B,qCAAqB,IAAI,CAAC,IAAI,KAAK;AACnC,qCAAqB,IAAI,CAAC,IAAI,KAAK;AACnC,qCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,qCAAqB,IAAI,EAAE,IAAI,KAAK;AAEpC,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,qCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,qCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,qCAAqB,IAAI,EAAE,IAAI,KAAK;AAEpC,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI,MAAM;AACrC,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI;AAC/B,qCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,qCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,qCAAqB,IAAI,EAAE,IAAI,KAAK;AACpC,qCAAqB,IAAI,EAAE,IAAI,KAAK;;AAGrC,kBAAI,iBAAiB;AACrB,kBAAI,wBAAwB,MAAM,aAAa,kBAAkB,IAAI,CAAC;AACtE,oCAAsB,CAAC,IAAI;AAC3B,oCAAsB,IAAI,CAAC,IAAK,QAAQ;AACxC,oCAAsB,IAAI,CAAC,IAAK,QAAQ;AACxC,uBAAS;AACT,uBAAS;;;;IAIb;;;IAIA,KAAM,IAAY,IAAY,IAAY,IAAY,IAAY,IAAY,cAA6B,QAAqB;AAC/H,UAAI,iBAAiB;AACrB,UAAI,UAAU;AAGd,UAAI;AACJ,UAAI,aAAa,SAAS,KAAK,GAAG;AACjC,gBAAQ;AACR,iBAAS,KAAK;;AAEd,gBAAQ,KAAK;AAEd,YAAM,SAAS;AACf,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,EAAE;AACb,aAAO,SAAS;AAEhB,UAAI,mBAAmB;AACvB,UAAI,uBAAuB,aAAa,SAAS;AACjD,eAAS,IAAI,KAAK,KAAK,GAAG;AACzB,YAAI,QAAQ,iBAAiB,CAAC,GAAG,QAAQ,iBAAiB,IAAI,CAAC;AAC/D,YAAI,SAAS,iBAAiB,IAAI,CAAC,GAAG,SAAS,iBAAiB,IAAI,CAAC;AACrE,YAAI,SAAS,QAAQ,QAAQ,SAAS,QAAQ;AAE9C,YAAI,gBAAgB;AACpB,YAAI,sBAAsB,MAAM,SAAS,GAAG,cAAc,OAAO;AACjE,iBAAS,KAAK,GAAG,KAAK,qBAAqB,MAAM,GAAG;AACnD,cAAI,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,KAAK,CAAC;AAC7D,cAAI,UAAU,cAAc,KAAK,CAAC,GAAG,UAAU,cAAc,KAAK,CAAC;AACnE,cAAI,QAAQ,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU;AACxE,cAAI,UAAU,SAAS,UAAU,UAAU,SAAS,UAAU,GAAG;AAChE,gBAAI,OAAO;AACV,qBAAO,KAAK,OAAO;AACnB,qBAAO,KAAK,OAAO;AACnB;;AAGD,gBAAI,KAAK,UAAU,QAAQ,KAAK,UAAU;AAC1C,gBAAI,IAAI,MAAM,SAAS,SAAS,MAAM,SAAS;AAC/C,gBAAI,KAAK,IAAI,CAAC,IAAI,MAAU;AAC3B,kBAAI,MAAM,MAAM,QAAQ,UAAU,MAAM,QAAQ,WAAW;AAC3D,qBAAO,KAAK,SAAS,SAAS,SAAS,EAAE;AACzC,qBAAO,KAAK,SAAS,SAAS,SAAS,EAAE;mBACnC;AACN,qBAAO,KAAK,KAAK;AACjB,qBAAO,KAAK,KAAK;;qBAER,OAAO;AACjB,gBAAI,KAAK,UAAU,QAAQ,KAAK,UAAU;AAC1C,gBAAI,IAAI,MAAM,SAAS,SAAS,MAAM,SAAS;AAC/C,gBAAI,KAAK,IAAI,CAAC,IAAI,MAAU;AAC3B,kBAAI,MAAM,MAAM,QAAQ,UAAU,MAAM,QAAQ,WAAW;AAC3D,qBAAO,KAAK,SAAS,SAAS,SAAS,EAAE;AACzC,qBAAO,KAAK,SAAS,SAAS,SAAS,EAAE;mBACnC;AACN,qBAAO,KAAK,KAAK;AACjB,qBAAO,KAAK,KAAK;;AAElB,mBAAO,KAAK,OAAO;AACnB,mBAAO,KAAK,OAAO;;AAEpB,oBAAU;;AAGX,YAAI,eAAe,OAAO,QAAQ;AACjC,yBAAe,SAAS;AACxB,iBAAO;;AAGR,eAAO,KAAK,OAAO,CAAC,CAAC;AACrB,eAAO,KAAK,OAAO,CAAC,CAAC;AAErB,YAAI,KAAK;AAAsB;AAC/B,YAAI,OAAO;AACX,iBAAS;AACT,eAAO,SAAS;AAChB,gBAAQ;;AAGT,UAAI,kBAAkB,QAAQ;AAC7B,uBAAe,SAAS;AACxB,iBAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,IAAI,GAAG;AAC7C,yBAAe,CAAC,IAAI,OAAO,CAAC;;AAE7B,uBAAe,SAAS,eAAe,SAAS;AAEjD,aAAO;IACR;IAEO,OAAO,cAAe,SAAwB;AACpD,UAAI,WAAW;AACf,UAAI,iBAAiB,QAAQ;AAE7B,UAAI,OAAO,SAAS,iBAAiB,CAAC,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,SAAS,iBAAiB,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;AACrI,eAAS,IAAI,GAAG,IAAI,iBAAiB,GAAG,IAAI,GAAG,KAAK,GAAG;AACtD,cAAM,SAAS,CAAC;AAChB,cAAM,SAAS,IAAI,CAAC;AACpB,cAAM,SAAS,IAAI,CAAC;AACpB,cAAM,SAAS,IAAI,CAAC;AACpB,gBAAQ,MAAM,MAAM,MAAM;;AAE3B,UAAI,OAAO;AAAG;AAEd,eAAS,IAAI,GAAG,QAAQ,iBAAiB,GAAG,IAAI,kBAAkB,GAAG,IAAI,GAAG,KAAK,GAAG;AACnF,YAAI,IAAI,SAAS,CAAC,GAAG,IAAI,SAAS,IAAI,CAAC;AACvC,YAAI,QAAQ,QAAQ;AACpB,iBAAS,CAAC,IAAI,SAAS,KAAK;AAC5B,iBAAS,IAAI,CAAC,IAAI,SAAS,QAAQ,CAAC;AACpC,iBAAS,KAAK,IAAI;AAClB,iBAAS,QAAQ,CAAC,IAAI;;IAExB;;;;AC1XK,MAAO,eAAP,MAAmB;IACxB;;;;;IAMA,QAAQ;IACA,eAAe,IAAI,MAAK;IAEhC,YAAa,kBAAkC;AAC9C,WAAK,mBAAmB;IACzB;IAEA,iBAAkB,MAAkB;AACnC,UAAI,QAAQ,KAAK;AACjB,UAAI,eAAe,IAAI,aAAY;AACnC,UAAI,OAAO,OAAQ,SAAU,WAAW,KAAK,MAAM,IAAI,IAAI;AAG3D,UAAI,cAAc,KAAK;AACvB,UAAI,aAAa;AAChB,qBAAa,OAAO,YAAY;AAChC,qBAAa,UAAU,YAAY;AACnC,qBAAa,IAAI,YAAY;AAC7B,qBAAa,IAAI,YAAY;AAC7B,qBAAa,QAAQ,YAAY;AACjC,qBAAa,SAAS,YAAY;AAClC,qBAAa,iBAAiB,SAAS,aAAa,kBAAkB,GAAG,IAAI;AAC7E,qBAAa,MAAM,YAAY;AAC/B,qBAAa,aAAa,YAAY,UAAU;AAChD,qBAAa,YAAY,YAAY,SAAS;;AAI/C,UAAI,KAAK,OAAO;AACf,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,cAAI,UAAU,KAAK,MAAM,CAAC;AAE1B,cAAI,SAA0B;AAC9B,cAAI,aAAqB,SAAS,SAAS,UAAU,IAAI;AACzD,cAAI;AAAY,qBAAS,aAAa,SAAS,UAAU;AACzD,cAAI,OAAO,IAAI,SAAS,aAAa,MAAM,QAAQ,QAAQ,MAAM,MAAM;AACvE,eAAK,SAAS,SAAS,SAAS,UAAU,CAAC,IAAI;AAC/C,eAAK,IAAI,SAAS,SAAS,KAAK,CAAC,IAAI;AACrC,eAAK,IAAI,SAAS,SAAS,KAAK,CAAC,IAAI;AACrC,eAAK,WAAW,SAAS,SAAS,YAAY,CAAC;AAC/C,eAAK,SAAS,SAAS,SAAS,UAAU,CAAC;AAC3C,eAAK,SAAS,SAAS,SAAS,UAAU,CAAC;AAC3C,eAAK,SAAS,SAAS,SAAS,UAAU,CAAC;AAC3C,eAAK,SAAS,SAAS,SAAS,UAAU,CAAC;AAC3C,eAAK,UAAU,MAAM,UAAU,SAAS,SAAS,SAAS,WAAW,QAAQ,CAAC;AAC9E,eAAK,eAAe,SAAS,SAAS,QAAQ,KAAK;AAEnD,cAAI,QAAQ,SAAS,SAAS,SAAS,IAAI;AAC3C,cAAI;AAAO,iBAAK,MAAM,cAAc,KAAK;AAEzC,uBAAa,MAAM,KAAK,IAAI;;;AAK9B,UAAI,KAAK,OAAO;AACf,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,cAAI,UAAU,KAAK,MAAM,CAAC;AAC1B,cAAI,WAAW,QAAQ;AAEvB,cAAI,WAAW,aAAa,SAAS,QAAQ,IAAI;AACjD,cAAI,CAAC;AAAU,kBAAM,IAAI,MAAM,sBAAsB,QAAQ,IAAI,aAAa,QAAQ,EAAE;AACxF,cAAI,OAAO,IAAI,SAAS,aAAa,MAAM,QAAQ,UAAU,QAAQ;AAErE,cAAI,QAAgB,SAAS,SAAS,SAAS,IAAI;AACnD,cAAI;AAAO,iBAAK,MAAM,cAAc,KAAK;AAEzC,cAAI,OAAe,SAAS,SAAS,QAAQ,IAAI;AACjD,cAAI;AAAM,iBAAK,YAAY,MAAM,WAAW,IAAI;AAEhD,eAAK,iBAAiB,SAAS,SAAS,cAAc,IAAI;AAC1D,eAAK,YAAY,MAAM,UAAU,WAAW,SAAS,SAAS,SAAS,QAAQ,CAAC;AAChF,eAAK,UAAU,SAAS,SAAS,WAAW,IAAI;AAChD,uBAAa,MAAM,KAAK,IAAI;;;AAK9B,UAAI,KAAK,IAAI;AACZ,iBAAS,IAAI,GAAG,IAAI,KAAK,GAAG,QAAQ,KAAK;AACxC,cAAI,gBAAgB,KAAK,GAAG,CAAC;AAC7B,cAAI,OAAO,IAAI,iBAAiB,cAAc,IAAI;AAClD,eAAK,QAAQ,SAAS,eAAe,SAAS,CAAC;AAC/C,eAAK,eAAe,SAAS,eAAe,QAAQ,KAAK;AAEzD,mBAAS,KAAK,GAAG,KAAK,cAAc,MAAM,QAAQ,MAAM;AACvD,gBAAI,OAAO,aAAa,SAAS,cAAc,MAAM,EAAE,CAAC;AACxD,gBAAI,CAAC;AAAM,oBAAM,IAAI,MAAM,sBAAsB,cAAc,MAAM,EAAE,CAAC,sBAAsB,cAAc,IAAI,GAAG;AACnH,iBAAK,MAAM,KAAK,IAAI;;AAGrB,cAAI,SAAS,aAAa,SAAS,cAAc,MAAM;AAAE;AACzD,cAAI,CAAC;AAAQ,kBAAM,IAAI,MAAM,6BAA6B,cAAc,MAAM,sBAAsB,cAAc,IAAI,GAAG;AACzH,eAAK,SAAS;AAEd,eAAK,MAAM,SAAS,eAAe,OAAO,CAAC;AAC3C,eAAK,WAAW,SAAS,eAAe,YAAY,CAAC,IAAI;AACzD,eAAK,gBAAgB,SAAS,eAAe,gBAAgB,IAAI,IAAI,IAAI;AACzE,eAAK,WAAW,SAAS,eAAe,YAAY,KAAK;AACzD,eAAK,UAAU,SAAS,eAAe,WAAW,KAAK;AACvD,eAAK,UAAU,SAAS,eAAe,WAAW,KAAK;AAEvD,uBAAa,cAAc,KAAK,IAAI;;;AAKtC,UAAI,KAAK,WAAW;AACnB,iBAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC/C,cAAI,gBAAgB,KAAK,UAAU,CAAC;AACpC,cAAI,OAAO,IAAI,wBAAwB,cAAc,IAAI;AACzD,eAAK,QAAQ,SAAS,eAAe,SAAS,CAAC;AAC/C,eAAK,eAAe,SAAS,eAAe,QAAQ,KAAK;AAEzD,mBAAS,KAAK,GAAG,KAAK,cAAc,MAAM,QAAQ,MAAM;AACvD,gBAAI,WAAW,cAAc,MAAM,EAAE;AACrC,gBAAI,OAAO,aAAa,SAAS,QAAQ;AACzC,gBAAI,CAAC;AAAM,oBAAM,IAAI,MAAM,sBAAsB,QAAQ,6BAA6B,cAAc,IAAI,GAAG;AAC3G,iBAAK,MAAM,KAAK,IAAI;;AAGrB,cAAI,aAAqB,cAAc;AACvC,cAAI,SAAS,aAAa,SAAS,UAAU;AAC7C,cAAI,CAAC;AAAQ,kBAAM,IAAI,MAAM,6BAA6B,UAAU,6BAA6B,cAAc,IAAI,GAAG;AACtH,eAAK,SAAS;AAEd,eAAK,QAAQ,SAAS,eAAe,SAAS,KAAK;AACnD,eAAK,WAAW,SAAS,eAAe,YAAY,KAAK;AACzD,eAAK,iBAAiB,SAAS,eAAe,YAAY,CAAC;AAC3D,eAAK,UAAU,SAAS,eAAe,KAAK,CAAC,IAAI;AACjD,eAAK,UAAU,SAAS,eAAe,KAAK,CAAC,IAAI;AACjD,eAAK,eAAe,SAAS,eAAe,UAAU,CAAC;AACvD,eAAK,eAAe,SAAS,eAAe,UAAU,CAAC;AACvD,eAAK,eAAe,SAAS,eAAe,UAAU,CAAC;AAEvD,eAAK,YAAY,SAAS,eAAe,aAAa,CAAC;AACvD,eAAK,OAAO,SAAS,eAAe,QAAQ,CAAC;AAC7C,eAAK,OAAO,SAAS,eAAe,QAAQ,KAAK,IAAI;AACrD,eAAK,YAAY,SAAS,eAAe,aAAa,CAAC;AACvD,eAAK,YAAY,SAAS,eAAe,aAAa,KAAK,SAAS;AACpE,eAAK,YAAY,SAAS,eAAe,aAAa,CAAC;AAEvD,uBAAa,qBAAqB,KAAK,IAAI;;;AAK7C,UAAI,KAAK,MAAM;AACd,iBAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AAC1C,cAAI,gBAAgB,KAAK,KAAK,CAAC;AAC/B,cAAI,OAAO,IAAI,mBAAmB,cAAc,IAAI;AACpD,eAAK,QAAQ,SAAS,eAAe,SAAS,CAAC;AAC/C,eAAK,eAAe,SAAS,eAAe,QAAQ,KAAK;AAEzD,mBAAS,KAAK,GAAG,KAAK,cAAc,MAAM,QAAQ,MAAM;AACvD,gBAAI,WAAW,cAAc,MAAM,EAAE;AACrC,gBAAI,OAAO,aAAa,SAAS,QAAQ;AACzC,gBAAI,CAAC;AAAM,oBAAM,IAAI,MAAM,sBAAsB,QAAQ,wBAAwB,cAAc,IAAI,GAAG;AACtG,iBAAK,MAAM,KAAK,IAAI;;AAGrB,cAAI,aAAqB,cAAc;AACvC,cAAI,SAAS,aAAa,SAAS,UAAU;AAC7C,cAAI,CAAC;AAAQ,kBAAM,IAAI,MAAM,6BAA6B,UAAU,wBAAwB,cAAc,IAAI,GAAG;AACjH,eAAK,SAAS;AAEd,eAAK,eAAe,MAAM,UAAU,cAAc,SAAS,eAAe,gBAAgB,SAAS,CAAC;AACpG,eAAK,cAAc,MAAM,UAAU,aAAa,SAAS,eAAe,eAAe,QAAQ,CAAC;AAChG,eAAK,aAAa,MAAM,UAAU,YAAY,SAAS,eAAe,cAAc,SAAS,CAAC;AAC9F,eAAK,iBAAiB,SAAS,eAAe,YAAY,CAAC;AAC3D,eAAK,WAAW,SAAS,eAAe,YAAY,CAAC;AACrD,cAAI,KAAK,gBAAgB,aAAa;AAAO,iBAAK,YAAY;AAC9D,eAAK,UAAU,SAAS,eAAe,WAAW,CAAC;AACnD,cAAI,KAAK,eAAe,YAAY,UAAU,KAAK,eAAe,YAAY;AAAO,iBAAK,WAAW;AACrG,eAAK,YAAY,SAAS,eAAe,aAAa,CAAC;AACvD,eAAK,OAAO,SAAS,eAAe,QAAQ,CAAC;AAC7C,eAAK,OAAO,SAAS,eAAe,QAAQ,KAAK,IAAI;AAErD,uBAAa,gBAAgB,KAAK,IAAI;;;AAKxC,UAAI,KAAK,SAAS;AACjB,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC7C,gBAAM,gBAAgB,KAAK,QAAQ,CAAC;AACpC,gBAAM,OAAO,IAAI,sBAAsB,cAAc,IAAI;AACzD,eAAK,QAAQ,SAAS,eAAe,SAAS,CAAC;AAC/C,eAAK,eAAe,SAAS,eAAe,QAAQ,KAAK;AAEzD,gBAAM,WAAW,cAAc;AAC/B,gBAAM,OAAO,aAAa,SAAS,QAAQ;AAC3C,cAAI,QAAQ;AAAM,kBAAM,IAAI,MAAM,6BAA6B,QAAQ;AACvE,eAAK,OAAO;AAEZ,eAAK,IAAI,SAAS,eAAe,KAAK,CAAC;AACvC,eAAK,IAAI,SAAS,eAAe,KAAK,CAAC;AACvC,eAAK,SAAS,SAAS,eAAe,UAAU,CAAC;AACjD,eAAK,SAAS,SAAS,eAAe,UAAU,CAAC;AACjD,eAAK,SAAS,SAAS,eAAe,UAAU,CAAC;AACjD,eAAK,QAAQ,SAAS,eAAe,SAAS,GAAI,IAAI;AACtD,eAAK,OAAO,IAAI,SAAS,eAAe,OAAO,EAAE;AACjD,eAAK,UAAU,SAAS,eAAe,WAAW,CAAC;AACnD,eAAK,WAAW,SAAS,eAAe,YAAY,GAAG;AACvD,eAAK,UAAU,SAAS,eAAe,WAAW,CAAC;AACnD,eAAK,cAAc,IAAI,SAAS,eAAe,QAAQ,CAAC;AACxD,eAAK,OAAO,SAAS,eAAe,QAAQ,CAAC;AAC7C,eAAK,UAAU,SAAS,eAAe,WAAW,CAAC;AACnD,eAAK,MAAM,SAAS,eAAe,OAAO,CAAC;AAC3C,eAAK,gBAAgB,SAAS,eAAe,iBAAiB,KAAK;AACnE,eAAK,iBAAiB,SAAS,eAAe,kBAAkB,KAAK;AACrE,eAAK,gBAAgB,SAAS,eAAe,iBAAiB,KAAK;AACnE,eAAK,aAAa,SAAS,eAAe,cAAc,KAAK;AAC7D,eAAK,aAAa,SAAS,eAAe,cAAc,KAAK;AAC7D,eAAK,gBAAgB,SAAS,eAAe,iBAAiB,KAAK;AACnE,eAAK,YAAY,SAAS,eAAe,aAAa,KAAK;AAE3D,uBAAa,mBAAmB,KAAK,IAAI;;;AAK3C,UAAI,KAAK,OAAO;AACf,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC3C,cAAI,UAAU,KAAK,MAAM,CAAC;AAC1B,cAAI,OAAO,IAAI,KAAK,QAAQ,IAAI;AAEhC,cAAI,QAAQ,OAAO;AAClB,qBAAS,KAAK,GAAG,KAAK,QAAQ,MAAM,QAAQ,MAAM;AACjD,kBAAI,WAAW,QAAQ,MAAM,EAAE;AAC/B,kBAAI,OAAO,aAAa,SAAS,QAAQ;AACzC,kBAAI,CAAC;AAAM,sBAAM,IAAI,MAAM,sBAAsB,QAAQ,aAAa,QAAQ,IAAI,GAAG;AACrF,mBAAK,MAAM,KAAK,IAAI;;;AAItB,cAAI,QAAQ,IAAI;AACf,qBAAS,KAAK,GAAG,KAAK,QAAQ,GAAG,QAAQ,MAAM;AAC9C,kBAAI,iBAAiB,QAAQ,GAAG,EAAE;AAClC,kBAAI,aAAa,aAAa,iBAAiB,cAAc;AAC7D,kBAAI,CAAC;AAAY,sBAAM,IAAI,MAAM,+BAA+B,cAAc,aAAa,QAAQ,IAAI,GAAG;AAC1G,mBAAK,YAAY,KAAK,UAAU;;;AAIlC,cAAI,QAAQ,WAAW;AACtB,qBAAS,KAAK,GAAG,KAAK,QAAQ,UAAU,QAAQ,MAAM;AACrD,kBAAI,iBAAiB,QAAQ,UAAU,EAAE;AACzC,kBAAI,aAAa,aAAa,wBAAwB,cAAc;AACpE,kBAAI,CAAC;AAAY,sBAAM,IAAI,MAAM,sCAAsC,cAAc,aAAa,QAAQ,IAAI,GAAG;AACjH,mBAAK,YAAY,KAAK,UAAU;;;AAIlC,cAAI,QAAQ,MAAM;AACjB,qBAAS,KAAK,GAAG,KAAK,QAAQ,KAAK,QAAQ,MAAM;AAChD,kBAAI,iBAAiB,QAAQ,KAAK,EAAE;AACpC,kBAAI,aAAa,aAAa,mBAAmB,cAAc;AAC/D,kBAAI,CAAC;AAAY,sBAAM,IAAI,MAAM,iCAAiC,cAAc,aAAa,QAAQ,IAAI,GAAG;AAC5G,mBAAK,YAAY,KAAK,UAAU;;;AAIlC,cAAI,QAAQ,SAAS;AACpB,qBAAS,KAAK,GAAG,KAAK,QAAQ,QAAQ,QAAQ,MAAM;AACnD,kBAAI,iBAAiB,QAAQ,QAAQ,EAAE;AACvC,kBAAI,aAAa,aAAa,sBAAsB,cAAc;AAClE,kBAAI,CAAC;AAAY,sBAAM,IAAI,MAAM,oCAAoC,cAAc,aAAa,QAAQ,IAAI,GAAG;AAC/G,mBAAK,YAAY,KAAK,UAAU;;;AAIlC,mBAAS,YAAY,QAAQ,aAAa;AACzC,gBAAI,OAAO,aAAa,SAAS,QAAQ;AACzC,gBAAI,CAAC;AAAM,oBAAM,IAAI,MAAM,sBAAsB,QAAQ,aAAa,QAAQ,IAAI,GAAG;AACrF,gBAAI,UAAU,QAAQ,YAAY,QAAQ;AAC1C,qBAAS,aAAa,SAAS;AAC9B,kBAAI,aAAa,KAAK,eAAe,QAAQ,SAAS,GAAG,MAAM,KAAK,OAAO,WAAW,YAAY;AAClG,kBAAI;AAAY,qBAAK,cAAc,KAAK,OAAO,WAAW,UAAU;;;AAGtE,uBAAa,MAAM,KAAK,IAAI;AAC5B,cAAI,KAAK,QAAQ;AAAW,yBAAa,cAAc;;;AAKzD,eAAS,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,IAAI,GAAG,KAAK;AACzD,YAAI,aAAa,KAAK,aAAa,CAAC;AACpC,YAAI,OAAO,CAAC,WAAW,OAAO,aAAa,cAAc,aAAa,SAAS,WAAW,IAAI;AAC9F,YAAI,CAAC;AAAM,gBAAM,IAAI,MAAM,mBAAmB,WAAW,IAAI,EAAE;AAC/D,YAAI,SAAS,KAAK,cAAc,WAAW,WAAW,WAAW,MAAM;AACvE,YAAI,CAAC;AAAQ,gBAAM,IAAI,MAAM,0BAA0B,WAAW,MAAM,EAAE;AAC1E,mBAAW,KAAK,qBAAqB,WAAW,kBAAoC,SAA2B,WAAW;AAC1H,mBAAW,KAAK,cAA8B,MAAM;AACpD,YAAI,WAAW,KAAK,UAAU;AAAM,qBAAW,KAAK,aAAY;;AAEjE,WAAK,aAAa,SAAS;AAG3B,UAAI,KAAK,QAAQ;AAChB,iBAAS,aAAa,KAAK,QAAQ;AAClC,cAAI,WAAW,KAAK,OAAO,SAAS;AACpC,cAAI,OAAO,IAAI,UAAU,SAAS;AAClC,eAAK,WAAW,SAAS,UAAU,OAAO,CAAC;AAC3C,eAAK,aAAa,SAAS,UAAU,SAAS,CAAC;AAC/C,eAAK,cAAc,SAAS,UAAU,UAAU,EAAE;AAClD,eAAK,YAAY,SAAS,UAAU,SAAS,IAAI;AACjD,cAAI,KAAK,WAAW;AACnB,iBAAK,SAAS,SAAS,UAAU,UAAU,CAAC;AAC5C,iBAAK,UAAU,SAAS,UAAU,WAAW,CAAC;;AAE/C,uBAAa,OAAO,KAAK,IAAI;;;AAK/B,UAAI,KAAK,YAAY;AACpB,iBAAS,iBAAiB,KAAK,YAAY;AAC1C,cAAI,eAAe,KAAK,WAAW,aAAa;AAChD,eAAK,cAAc,cAAc,eAAe,YAAY;;;AAI9D,aAAO;IACR;IAEA,eAAgB,KAAU,MAAY,WAAmB,MAAc,cAA0B;AAChG,UAAI,QAAQ,KAAK;AACjB,aAAO,SAAS,KAAK,QAAQ,IAAI;AAEjC,cAAQ,SAAS,KAAK,QAAQ,QAAQ,GAAG;QACxC,KAAK,UAAU;AACd,cAAIC,QAAO,SAAS,KAAK,QAAQ,IAAI;AACrC,cAAI,WAAW,KAAK,aAAa,SAAS,KAAK,YAAY,IAAI,CAAC;AAChE,cAAI,SAAS,KAAK,iBAAiB,oBAAoB,MAAM,MAAMA,OAAM,QAAQ;AACjF,cAAI,CAAC;AAAQ,mBAAO;AACpB,iBAAO,OAAOA;AACd,iBAAO,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI;AACnC,iBAAO,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI;AACnC,iBAAO,SAAS,SAAS,KAAK,UAAU,CAAC;AACzC,iBAAO,SAAS,SAAS,KAAK,UAAU,CAAC;AACzC,iBAAO,WAAW,SAAS,KAAK,YAAY,CAAC;AAC7C,iBAAO,QAAQ,IAAI,QAAQ;AAC3B,iBAAO,SAAS,IAAI,SAAS;AAC7B,iBAAO,WAAW;AAElB,cAAI,QAAgB,SAAS,KAAK,SAAS,IAAI;AAC/C,cAAI;AAAO,mBAAO,MAAM,cAAc,KAAK;AAE3C,cAAI,OAAO,UAAU;AAAM,mBAAO,aAAY;AAC9C,iBAAO;;QAER,KAAK,eAAe;AACnB,cAAI,MAAM,KAAK,iBAAiB,yBAAyB,MAAM,IAAI;AACnE,cAAI,CAAC;AAAK,mBAAO;AACjB,eAAK,aAAa,KAAK,KAAK,IAAI,eAAe,CAAC;AAChD,cAAI,QAAgB,SAAS,KAAK,SAAS,IAAI;AAC/C,cAAI;AAAO,gBAAI,MAAM,cAAc,KAAK;AACxC,iBAAO;;QAER,KAAK;QACL,KAAK,cAAc;AAClB,cAAIA,QAAO,SAAS,KAAK,QAAQ,IAAI;AACrC,cAAI,WAAW,KAAK,aAAa,SAAS,KAAK,YAAY,IAAI,CAAC;AAChE,cAAI,OAAO,KAAK,iBAAiB,kBAAkB,MAAM,MAAMA,OAAM,QAAQ;AAC7E,cAAI,CAAC;AAAM,mBAAO;AAClB,eAAK,OAAOA;AAEZ,cAAI,QAAQ,SAAS,KAAK,SAAS,IAAI;AACvC,cAAI;AAAO,iBAAK,MAAM,cAAc,KAAK;AAEzC,eAAK,QAAQ,SAAS,KAAK,SAAS,CAAC,IAAI;AACzC,eAAK,SAAS,SAAS,KAAK,UAAU,CAAC,IAAI;AAC3C,eAAK,WAAW;AAEhB,cAAI,SAAiB,SAAS,KAAK,UAAU,IAAI;AACjD,cAAI,QAAQ;AACX,iBAAK,aAAa,KAAK,IAAIC,YAAW,MAAc,SAAS,KAAK,QAAQ,IAAI,GAAG,WAAW,QAAQ,SAAS,KAAK,aAAa,IAAI,CAAC,CAAC;AACrI,mBAAO;;AAGR,cAAI,MAAqB,IAAI;AAC7B,eAAK,aAAa,KAAK,MAAM,IAAI,MAAM;AACvC,eAAK,YAAY,IAAI;AACrB,eAAK,YAAY;AACjB,cAAI,KAAK,UAAU;AAAM,iBAAK,aAAY;AAE1C,eAAK,QAAQ,SAAS,KAAK,SAAS,IAAI;AACxC,eAAK,aAAa,SAAS,KAAK,QAAQ,CAAC,IAAI;AAC7C,iBAAO;;QAER,KAAK,QAAQ;AACZ,cAAID,QAAO,KAAK,iBAAiB,kBAAkB,MAAM,IAAI;AAC7D,cAAI,CAACA;AAAM,mBAAO;AAClB,UAAAA,MAAK,SAAS,SAAS,KAAK,UAAU,KAAK;AAC3C,UAAAA,MAAK,gBAAgB,SAAS,KAAK,iBAAiB,IAAI;AAExD,cAAI,cAAc,IAAI;AACtB,eAAK,aAAa,KAAKA,OAAM,eAAe,CAAC;AAE7C,cAAI,UAAyB,MAAM,SAAS,cAAc,GAAG,CAAC;AAC9D,mBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,QAAQ;AACvC,oBAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;AAC/B,UAAAA,MAAK,UAAU;AAEf,cAAI,QAAgB,SAAS,KAAK,SAAS,IAAI;AAC/C,cAAI;AAAO,YAAAA,MAAK,MAAM,cAAc,KAAK;AACzC,iBAAOA;;QAER,KAAK,SAAS;AACb,cAAI,QAAQ,KAAK,iBAAiB,mBAAmB,MAAM,IAAI;AAC/D,cAAI,CAAC;AAAO,mBAAO;AACnB,gBAAM,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI;AAClC,gBAAM,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI;AAClC,gBAAM,WAAW,SAAS,KAAK,YAAY,CAAC;AAE5C,cAAI,QAAQ,SAAS,KAAK,SAAS,IAAI;AACvC,cAAI;AAAO,kBAAM,MAAM,cAAc,KAAK;AAC1C,iBAAO;;QAER,KAAK,YAAY;AAChB,cAAI,OAAO,KAAK,iBAAiB,sBAAsB,MAAM,IAAI;AACjE,cAAI,CAAC;AAAM,mBAAO;AAElB,cAAI,MAAM,SAAS,KAAK,OAAO,IAAI;AACnC,cAAI;AAAK,iBAAK,UAAU,aAAa,SAAS,GAAG;AAEjD,cAAI,cAAc,IAAI;AACtB,eAAK,aAAa,KAAK,MAAM,eAAe,CAAC;AAE7C,cAAI,QAAgB,SAAS,KAAK,SAAS,IAAI;AAC/C,cAAI;AAAO,iBAAK,MAAM,cAAc,KAAK;AACzC,iBAAO;;;AAGT,aAAO;IACR;IAEA,aAAc,KAAQ;AACrB,UAAI,OAAO;AAAM,eAAO;AACxB,UAAI,WAAW,IAAI,SAAS,SAAS,KAAK,SAAS,CAAC,CAAC;AACrD,eAAS,QAAQ,SAAS,KAAK,SAAS,CAAC;AACzC,eAAS,SAAS,SAAS,KAAK,UAAU,CAAC;AAC3C,eAAS,aAAa,SAAS,KAAK,SAAS,CAAC;AAC9C,aAAO;IACR;IAEA,aAAc,KAAU,YAA8B,gBAAsB;AAC3E,UAAI,QAAQ,KAAK;AACjB,iBAAW,sBAAsB;AACjC,UAAI,WAA0B,IAAI;AAClC,UAAI,kBAAkB,SAAS,QAAQ;AACtC,YAAI,iBAAiB,MAAM,aAAa,QAAQ;AAChD,YAAI,SAAS,GAAG;AACf,mBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG;AAC3C,2BAAe,CAAC,KAAK;;AAEvB,mBAAW,WAAW;AACtB;;AAED,UAAI,UAAU,IAAI,MAAK;AACvB,UAAI,QAAQ,IAAI,MAAK;AACrB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,KAAI;AAC5C,YAAI,YAAY,SAAS,GAAG;AAC5B,cAAM,KAAK,SAAS;AACpB,iBAAS,KAAK,IAAI,YAAY,GAAG,IAAI,IAAI,KAAK,GAAG;AAChD,gBAAM,KAAK,SAAS,CAAC,CAAC;AACtB,kBAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK;AACpC,kBAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK;AACpC,kBAAQ,KAAK,SAAS,IAAI,CAAC,CAAC;;;AAG9B,iBAAW,QAAQ;AACnB,iBAAW,WAAW,MAAM,aAAa,OAAO;IACjD;IAEA,cAAe,KAAU,MAAc,cAA0B;AAChE,UAAI,QAAQ,KAAK;AACjB,UAAI,YAAY,IAAI,MAAK;AAGzB,UAAI,IAAI,OAAO;AACd,iBAAS,YAAY,IAAI,OAAO;AAC/B,cAAI,UAAU,IAAI,MAAM,QAAQ;AAChC,cAAI,OAAO,aAAa,SAAS,QAAQ;AACzC,cAAI,CAAC;AAAM,kBAAM,IAAI,MAAM,qBAAqB,QAAQ;AACxD,cAAI,YAAY,KAAK;AACrB,mBAAS,gBAAgB,SAAS;AACjC,gBAAI,cAAc,QAAQ,YAAY;AACtC,gBAAI,CAAC;AAAa;AAClB,gBAAI,SAAS,YAAY;AACzB,gBAAI,gBAAgB,cAAc;AACjC,kBAAI,WAAW,IAAI,mBAAmB,QAAQ,SAAS;AACvD,uBAAS,QAAQ,GAAG,QAAQ,QAAQ,SAAS;AAC5C,oBAAI,SAAS,YAAY,KAAK;AAC9B,yBAAS,SAAS,OAAO,SAAS,QAAQ,QAAQ,CAAC,GAAG,SAAS,QAAQ,QAAQ,IAAI,CAAC;;AAErF,wBAAU,KAAK,QAAQ;uBAEb,gBAAgB,QAAQ;AAClC,kBAAI,WAAW,IAAI,aAAa,QAAQ,UAAU,GAAG,SAAS;AAC9D,kBAAI,SAAS,YAAY,CAAC;AAC1B,kBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,kBAAI,QAAQ,MAAM,WAAW,OAAO,KAAK;AAEzC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACjE,oBAAI,UAAU,YAAY,QAAQ,CAAC;AACnC,oBAAI,CAAC,SAAS;AACb,2BAAS,OAAO,MAAM;AACtB;;AAED,oBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,oBAAI,WAAW,MAAM,WAAW,QAAQ,KAAK;AAC7C,oBAAI,QAAQ,OAAO;AACnB,oBAAI,OAAO;AACV,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;;AAE1F,uBAAO;AACP,wBAAQ;AACR,yBAAS;;AAGV,wBAAU,KAAK,QAAQ;uBAEb,gBAAgB,OAAO;AACjC,kBAAI,WAAW,IAAI,YAAY,QAAQ,SAAS,GAAG,SAAS;AAC5D,kBAAI,SAAS,YAAY,CAAC;AAC1B,kBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,kBAAI,QAAQ,MAAM,WAAW,OAAO,KAAK;AAEzC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxD,oBAAI,UAAU,YAAY,QAAQ,CAAC;AACnC,oBAAI,CAAC,SAAS;AACb,2BAAS,OAAO,MAAM;AACtB;;AAED,oBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,oBAAI,WAAW,MAAM,WAAW,QAAQ,KAAK;AAC7C,oBAAI,QAAQ,OAAO;AACnB,oBAAI,OAAO;AACV,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;;AAE1F,uBAAO;AACP,wBAAQ;AACR,yBAAS;;AAGV,wBAAU,KAAK,QAAQ;uBAEb,gBAAgB,SAAS;AACnC,wBAAU,KAAKE,eAAc,aAAa,IAAI,cAAc,QAAQ,QAAQ,SAAS,GAAG,GAAG,CAAC,CAAC;uBACnF,gBAAgB,SAAS;AACnC,kBAAI,WAAW,IAAI,cAAc,QAAQ,SAAS,GAAG,SAAS;AAE9D,kBAAI,SAAS,YAAY,CAAC;AAC1B,kBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,kBAAI,QAAQ,MAAM,WAAW,OAAO,KAAK;AACzC,kBAAI,SAAS,MAAM,WAAW,OAAO,IAAI;AAEzC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAC/F,oBAAI,UAAU,YAAY,QAAQ,CAAC;AACnC,oBAAI,CAAC,SAAS;AACb,2BAAS,OAAO,MAAM;AACtB;;AAED,oBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,oBAAI,WAAW,MAAM,WAAW,QAAQ,KAAK;AAC7C,oBAAI,YAAY,MAAM,WAAW,QAAQ,IAAI;AAC7C,oBAAI,QAAQ,OAAO;AACnB,oBAAI,OAAO;AACV,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,OAAO,GAAG,UAAU,GAAG,CAAC;AAC3F,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,OAAO,GAAG,UAAU,GAAG,CAAC;AAC3F,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,OAAO,GAAG,UAAU,GAAG,CAAC;;AAE5F,uBAAO;AACP,wBAAQ;AACR,yBAAS;AACT,yBAAS;;AAGV,wBAAU,KAAK,QAAQ;uBAEb,gBAAgB,QAAQ;AAClC,kBAAI,WAAW,IAAI,aAAa,QAAQ,SAAS,GAAG,SAAS;AAE7D,kBAAI,SAAS,YAAY,CAAC;AAC1B,kBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,kBAAI,QAAQ,MAAM,WAAW,OAAO,KAAK;AACzC,kBAAI,SAAS,MAAM,WAAW,OAAO,IAAI;AAEzC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AACtF,oBAAI,UAAU,YAAY,QAAQ,CAAC;AACnC,oBAAI,CAAC,SAAS;AACb,2BAAS,OAAO,MAAM;AACtB;;AAED,oBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,oBAAI,WAAW,MAAM,WAAW,QAAQ,KAAK;AAC7C,oBAAI,YAAY,MAAM,WAAW,QAAQ,IAAI;AAC7C,oBAAI,QAAQ,OAAO;AACnB,oBAAI,OAAO;AACV,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,GAAG,SAAS,GAAG,CAAC;AACzF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,OAAO,GAAG,UAAU,GAAG,CAAC;AAC3F,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,OAAO,GAAG,UAAU,GAAG,CAAC;AAC3F,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,OAAO,GAAG,UAAU,GAAG,CAAC;;AAE5F,uBAAO;AACP,wBAAQ;AACR,yBAAS;AACT,yBAAS;;AAGV,wBAAU,KAAK,QAAQ;;;;;AAO3B,UAAI,IAAI,OAAO;AACd,iBAAS,YAAY,IAAI,OAAO;AAC/B,cAAI,UAAU,IAAI,MAAM,QAAQ;AAChC,cAAI,OAAO,aAAa,SAAS,QAAQ;AACzC,cAAI,CAAC;AAAM,kBAAM,IAAI,MAAM,qBAAqB,QAAQ;AACxD,cAAI,YAAY,KAAK;AACrB,mBAAS,gBAAgB,SAAS;AACjC,gBAAI,cAAc,QAAQ,YAAY;AACtC,gBAAI,SAAS,YAAY;AACzB,gBAAI,UAAU;AAAG;AAEjB,gBAAI,iBAAiB,UAAU;AAC9B,wBAAU,KAAKA,eAAc,aAAa,IAAI,eAAe,QAAQ,QAAQ,SAAS,GAAG,GAAG,CAAC,CAAC;uBACpF,iBAAiB,aAAa;AACxC,kBAAI,WAAW,IAAI,kBAAkB,QAAQ,UAAU,GAAG,SAAS;AACnE,wBAAU,KAAKC,eAAc,aAAa,UAAU,KAAK,KAAK,GAAG,KAAK,CAAC;uBAC7D,iBAAiB,cAAc;AACzC,kBAAI,WAAW,IAAI,mBAAmB,QAAQ,QAAQ,SAAS;AAC/D,wBAAU,KAAKD,eAAc,aAAa,UAAU,GAAG,KAAK,CAAC;uBACnD,iBAAiB,cAAc;AACzC,kBAAI,WAAW,IAAI,mBAAmB,QAAQ,QAAQ,SAAS;AAC/D,wBAAU,KAAKA,eAAc,aAAa,UAAU,GAAG,KAAK,CAAC;uBACnD,iBAAiB,SAAS;AACpC,kBAAI,WAAW,IAAI,cAAc,QAAQ,UAAU,GAAG,SAAS;AAC/D,wBAAU,KAAKC,eAAc,aAAa,UAAU,KAAK,KAAK,GAAG,CAAC,CAAC;uBACzD,iBAAiB,UAAU;AACrC,kBAAI,WAAW,IAAI,eAAe,QAAQ,QAAQ,SAAS;AAC3D,wBAAU,KAAKD,eAAc,aAAa,UAAU,GAAG,CAAC,CAAC;uBAC/C,iBAAiB,UAAU;AACrC,kBAAI,WAAW,IAAI,eAAe,QAAQ,QAAQ,SAAS;AAC3D,wBAAU,KAAKA,eAAc,aAAa,UAAU,GAAG,CAAC,CAAC;uBAC/C,iBAAiB,SAAS;AACpC,kBAAI,WAAW,IAAI,cAAc,QAAQ,UAAU,GAAG,SAAS;AAC/D,wBAAU,KAAKC,eAAc,aAAa,UAAU,KAAK,KAAK,GAAG,CAAC,CAAC;uBACzD,iBAAiB,UAAU;AACrC,kBAAI,WAAW,IAAI,eAAe,QAAQ,QAAQ,SAAS;AAC3D,wBAAU,KAAKD,eAAc,aAAa,UAAU,GAAG,CAAC,CAAC;uBAC/C,iBAAiB,UAAU;AACrC,kBAAI,WAAW,IAAI,eAAe,QAAQ,QAAQ,SAAS;AAC3D,wBAAU,KAAKA,eAAc,aAAa,UAAU,GAAG,CAAC,CAAC;uBAC/C,iBAAiB,WAAW;AACtC,kBAAI,WAAW,IAAI,gBAAgB,QAAQ,KAAK,KAAK;AACrD,uBAAS,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS;AACxD,oBAAI,SAAS,YAAY,KAAK;AAC9B,yBAAS,SAAS,OAAO,SAAS,QAAQ,QAAQ,CAAC,GAAG,MAAM,UAAU,SAAS,SAAS,QAAQ,WAAW,QAAQ,CAAC,CAAC;;AAEtH,wBAAU,KAAK,QAAQ;;;;;AAO3B,UAAI,IAAI,IAAI;AACX,iBAAS,kBAAkB,IAAI,IAAI;AAClC,cAAI,gBAAgB,IAAI,GAAG,cAAc;AACzC,cAAI,SAAS,cAAc,CAAC;AAC5B,cAAI,CAAC;AAAQ;AAEb,cAAI,aAAa,aAAa,iBAAiB,cAAc;AAC7D,cAAI,CAAC;AAAY,kBAAM,IAAI,MAAM,8BAA8B,cAAc;AAC7E,cAAI,kBAAkB,aAAa,cAAc,QAAQ,UAAU;AACnE,cAAI,WAAW,IAAI,qBAAqB,cAAc,QAAQ,cAAc,UAAU,GAAG,eAAe;AAExG,cAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,cAAI,MAAM,SAAS,QAAQ,OAAO,CAAC;AACnC,cAAI,WAAW,SAAS,QAAQ,YAAY,CAAC,IAAI;AAEjD,mBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,qBAAS,SAAS,OAAO,MAAM,KAAK,UAAU,SAAS,QAAQ,gBAAgB,IAAI,IAAI,IAAI,IAAI,SAAS,QAAQ,YAAY,KAAK,GAAG,SAAS,QAAQ,WAAW,KAAK,CAAC;AACtK,gBAAI,UAAU,cAAc,QAAQ,CAAC;AACrC,gBAAI,CAAC,SAAS;AACb,uBAAS,OAAO,MAAM;AACtB;;AAGD,gBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,gBAAI,OAAO,SAAS,SAAS,OAAO,CAAC;AACrC,gBAAI,YAAY,SAAS,SAAS,YAAY,CAAC,IAAI;AACnD,gBAAI,QAAQ,OAAO;AACnB,gBAAI,OAAO;AACV,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,KAAK,MAAM,CAAC;AAC/E,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,UAAU,WAAW,KAAK;;AAG9F,mBAAO;AACP,kBAAM;AACN,uBAAW;AACX,qBAAS;;AAEV,oBAAU,KAAK,QAAQ;;;AAKzB,UAAI,IAAI,WAAW;AAClB,iBAAS,kBAAkB,IAAI,WAAW;AACzC,cAAI,cAAc,IAAI,UAAU,cAAc;AAC9C,cAAI,SAAS,YAAY,CAAC;AAC1B,cAAI,CAAC;AAAQ;AAEb,cAAI,aAAa,aAAa,wBAAwB,cAAc;AACpE,cAAI,CAAC;AAAY,kBAAM,IAAI,MAAM,qCAAqC,cAAc;AACpF,cAAI,kBAAkB,aAAa,qBAAqB,QAAQ,UAAU;AAC1E,cAAI,WAAW,IAAI,4BAA4B,YAAY,QAAQ,YAAY,SAAS,GAAG,eAAe;AAE1G,cAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,cAAI,YAAY,SAAS,QAAQ,aAAa,CAAC;AAC/C,cAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,cAAI,OAAO,SAAS,QAAQ,QAAQ,IAAI;AACxC,cAAI,YAAY,SAAS,QAAQ,aAAa,CAAC;AAC/C,cAAI,YAAY,SAAS,QAAQ,aAAa,SAAS;AACvD,cAAI,YAAY,SAAS,QAAQ,aAAa,CAAC;AAE/C,mBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,qBAAS,SAAS,OAAO,MAAM,WAAW,MAAM,MAAM,WAAW,WAAW,SAAS;AACrF,gBAAI,UAAU,YAAY,QAAQ,CAAC;AACnC,gBAAI,CAAC,SAAS;AACb,uBAAS,OAAO,MAAM;AACtB;;AAGD,gBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,gBAAI,aAAa,SAAS,SAAS,aAAa,CAAC;AACjD,gBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,gBAAI,QAAQ,SAAS,SAAS,QAAQ,KAAK;AAC3C,gBAAI,aAAa,SAAS,SAAS,aAAa,CAAC;AACjD,gBAAI,aAAa,SAAS,SAAS,aAAa,UAAU;AAC1D,gBAAI,aAAa,SAAS,SAAS,aAAa,CAAC;AACjD,gBAAI,QAAQ,OAAO;AACnB,gBAAI,OAAO;AACV,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AAC3F,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;AACjF,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;AACjF,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AAC3F,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AAC3F,uBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;;AAG5F,mBAAO;AACP,wBAAY;AACZ,mBAAO;AACP,mBAAO;AACP,wBAAY;AACZ,wBAAY;AACZ,wBAAY;AACZ,qBAAS;;AAEV,oBAAU,KAAK,QAAQ;;;AAKzB,UAAI,IAAI,MAAM;AACb,iBAAS,kBAAkB,IAAI,MAAM;AACpC,cAAI,gBAAgB,IAAI,KAAK,cAAc;AAC3C,cAAI,aAAa,aAAa,mBAAmB,cAAc;AAC/D,cAAI,CAAC;AAAY,kBAAM,IAAI,MAAM,gCAAgC,cAAc;AAC/E,cAAI,kBAAkB,aAAa,gBAAgB,QAAQ,UAAU;AACrE,mBAAS,gBAAgB,eAAe;AACvC,gBAAI,cAAc,cAAc,YAAY;AAC5C,gBAAI,SAAS,YAAY,CAAC;AAC1B,gBAAI,CAAC;AAAQ;AAEb,gBAAI,SAAS,YAAY;AACzB,gBAAI,iBAAiB,YAAY;AAChC,kBAAI,WAAW,IAAI,+BAA+B,QAAQ,QAAQ,eAAe;AACjF,wBAAU,KAAKA,eAAc,aAAa,UAAU,GAAG,WAAW,gBAAgB,aAAa,QAAQ,QAAQ,CAAC,CAAC;uBACvG,iBAAiB,WAAW;AACtC,kBAAI,WAAW,IAAI,8BAA8B,QAAQ,QAAQ,eAAe;AAChF,wBAAU,KAAKA,eAAc,aAAa,UAAU,GAAG,WAAW,eAAe,YAAY,UAAU,WAAW,eAAe,YAAY,QAAQ,QAAQ,CAAC,CAAC;uBACrJ,iBAAiB,OAAO;AAClC,kBAAI,WAAW,IAAI,0BAA0B,QAAQ,SAAS,GAAG,eAAe;AAChF,kBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,kBAAI,YAAY,SAAS,QAAQ,aAAa,CAAC;AAC/C,kBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,kBAAI,OAAO,SAAS,QAAQ,QAAQ,IAAI;AACxC,uBAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,yBAAS,SAAS,OAAO,MAAM,WAAW,MAAM,IAAI;AACpD,oBAAI,UAAU,YAAY,QAAQ,CAAC;AACnC,oBAAI,CAAC,SAAS;AACb,2BAAS,OAAO,MAAM;AACtB;;AAED,oBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,oBAAI,aAAa,SAAS,SAAS,aAAa,CAAC;AACjD,oBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,oBAAI,QAAQ,SAAS,SAAS,QAAQ,KAAK;AAC3C,oBAAI,QAAQ,OAAO;AACnB,oBAAI,OAAO;AACV,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,WAAW,YAAY,CAAC;AAC3F,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;AACjF,2BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,MAAM,OAAO,CAAC;;AAElF,uBAAO;AACP,4BAAY;AACZ,uBAAO;AACP,uBAAO;AACP,yBAAS;;AAEV,wBAAU,KAAK,QAAQ;;;;;AAO3B,UAAI,IAAI,SAAS;AAChB,iBAAS,kBAAkB,IAAI,SAAS;AACvC,cAAI,gBAAgB,IAAI,QAAQ,cAAc;AAC9C,cAAI,kBAAkB;AACtB,cAAI,eAAe,SAAS,GAAG;AAC9B,gBAAI,aAAa,aAAa,sBAAsB,cAAc;AAClE,gBAAI,CAAC;AAAY,oBAAM,IAAI,MAAM,mCAAmC,cAAc;AAClF,8BAAkB,aAAa,mBAAmB,QAAQ,UAAU;;AAErE,mBAAS,gBAAgB,eAAe;AACvC,gBAAI,cAAc,cAAc,YAAY;AAC5C,gBAAI,SAAS,YAAY,CAAC;AAC1B,gBAAI,CAAC;AAAQ;AAEb,gBAAI,SAAS,YAAY;AACzB,gBAAI,gBAAgB,SAAS;AAC5B,oBAAME,YAAW,IAAI,+BAA+B,QAAQ,eAAe;AAC3E,uBAAS,QAAQ,GAAG,UAAU,MAAM,SAAS,YAAY,QAAQ,CAAC,GAAG;AACpE,gBAAAA,UAAS,SAAS,OAAO,SAAS,QAAQ,QAAQ,CAAC,CAAC;AACrD,wBAAU,KAAKA,SAAQ;AACvB;;AAGD,gBAAI;AACJ,gBAAI,gBAAgB;AACnB,yBAAW,IAAI,iCAAiC,QAAQ,QAAQ,eAAe;qBACvE,gBAAgB;AACxB,yBAAW,IAAI,kCAAkC,QAAQ,QAAQ,eAAe;qBACxE,gBAAgB;AACxB,yBAAW,IAAI,iCAAiC,QAAQ,QAAQ,eAAe;qBACvE,gBAAgB;AACxB,yBAAW,IAAI,8BAA8B,QAAQ,QAAQ,eAAe;qBACpE,gBAAgB;AACxB,yBAAW,IAAI,8BAA8B,QAAQ,QAAQ,eAAe;qBACpE,gBAAgB;AACxB,yBAAW,IAAI,iCAAiC,QAAQ,QAAQ,eAAe;qBACvE,gBAAgB;AACxB,yBAAW,IAAI,6BAA6B,QAAQ,QAAQ,eAAe;;AAE3E;AACD,sBAAU,KAAKF,eAAc,aAAa,UAAU,GAAG,CAAC,CAAC;;;;AAM5D,UAAI,IAAI,aAAa;AACpB,iBAAS,mBAAmB,IAAI,aAAa;AAC5C,cAAI,iBAAiB,IAAI,YAAY,eAAe;AACpD,cAAI,OAAO,aAAa,SAAS,eAAe;AAChD,cAAI,CAAC;AAAM,kBAAM,IAAI,MAAM,qBAAqB,eAAe;AAC/D,mBAAS,eAAe,gBAAgB;AACvC,gBAAI,UAAU,eAAe,WAAW;AACxC,gBAAI,OAAO,aAAa,SAAS,WAAW;AAC5C,gBAAI,CAAC;AAAM,oBAAM,IAAI,MAAM,qBAAqB,WAAW;AAC3D,gBAAI,YAAY,KAAK;AACrB,qBAAS,qBAAqB,SAAS;AACtC,kBAAI,gBAAgB,QAAQ,iBAAiB;AAC7C,kBAAI,aAA+B,KAAK,cAAc,WAAW,iBAAiB;AAElF,uBAAS,mBAAmB,eAAe;AAC1C,oBAAI,cAAc,cAAc,eAAe;AAC/C,oBAAI,SAAS,YAAY,CAAC;AAC1B,oBAAI,CAAC;AAAQ;AAEb,oBAAI,mBAAmB,UAAU;AAChC,sBAAI,WAAW,WAAW;AAC1B,sBAAI,WAAW,WAAW;AAC1B,sBAAI,eAAe,WAAW,SAAS,SAAS,IAAI,IAAI,SAAS;AAEjE,sBAAI,WAAW,IAAI,eAAe,YAAY,QAAQ,YAAY,QAAQ,WAAW,UAAU;AAC/F,sBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,2BAAS,QAAQ,GAAG,SAAS,KAAK,SAAS;AAC1C,wBAAI;AACJ,wBAAI,gBAA+B,SAAS,QAAQ,YAAY,IAAI;AACpE,wBAAI,CAAC;AACJ,+BAAS,WAAW,MAAM,cAAc,YAAY,IAAI;yBACpD;AACJ,+BAAS,MAAM,cAAc,YAAY;AACzC,0BAAI,QAAgB,SAAS,QAAQ,UAAU,CAAC;AAChD,4BAAM,UAAU,eAAe,GAAG,QAAQ,OAAO,cAAc,MAAM;AACrE,0BAAI,SAAS,GAAG;AACf,iCAAS,IAAI,OAAO,IAAI,IAAI,cAAc,QAAQ,IAAI,GAAG;AACxD,iCAAO,CAAC,KAAK;;AAEf,0BAAI,CAAC,UAAU;AACd,iCAAS,IAAI,GAAG,IAAI,cAAc;AACjC,iCAAO,CAAC,KAAK,SAAS,CAAC;;;AAI1B,6BAAS,SAAS,OAAO,MAAM,MAAM;AACrC,wBAAI,UAAU,YAAY,QAAQ,CAAC;AACnC,wBAAI,CAAC,SAAS;AACb,+BAAS,OAAO,MAAM;AACtB;;AAED,wBAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,wBAAI,QAAQ,OAAO;AACnB,wBAAI;AAAO,+BAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,GAAG,GAAG,CAAC;AACrF,2BAAO;AACP,6BAAS;;AAEV,4BAAU,KAAK,QAAQ;2BACb,mBAAmB,YAAY;AACzC,sBAAI,WAAW,IAAI,iBAAiB,YAAY,QAAQ,WAAW,UAAyC;AAC5G,sBAAI,YAAY;AAChB,2BAAS,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS;AACxD,wBAAI,QAAQ,SAAS,QAAQ,SAAS,SAAS;AAC/C,wBAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,wBAAI,OAAO,aAAa,SAAS,QAAQ,QAAQ,MAAM,CAAC;AACxD,wBAAI,QAAQ,SAAS,QAAQ,SAAS,CAAC;AACvC,6BAAS,SAAS,OAAO,MAAM,MAAM,OAAO,KAAK;AACjD,gCAAY;AACZ,6BAAS,YAAY,QAAQ,CAAC;;AAE/B,4BAAU,KAAK,QAAQ;;;;;;;AAS7B,UAAI,IAAI,WAAW;AAClB,YAAI,WAAW,IAAI,kBAAkB,IAAI,UAAU,MAAM;AACzD,YAAI,YAAY,aAAa,MAAM;AACnC,YAAI,QAAQ;AACZ,iBAAS,IAAI,GAAG,IAAI,IAAI,UAAU,QAAQ,KAAK,SAAS;AACvD,cAAI,eAAe,IAAI,UAAU,CAAC;AAClC,cAAI,YAAkC;AACtC,cAAI,UAAU,SAAS,cAAc,WAAW,IAAI;AACpD,cAAI,SAAS;AACZ,wBAAY,MAAM,SAAiB,WAAW,EAAE;AAChD,gBAAI,YAAY,MAAM,SAAiB,YAAY,QAAQ,QAAQ,CAAC;AACpE,gBAAI,gBAAgB,GAAG,iBAAiB;AACxC,qBAAS,KAAK,GAAG,KAAK,QAAQ,QAAQ,MAAM;AAC3C,kBAAI,YAAY,QAAQ,EAAE;AAC1B,kBAAI,OAAO,aAAa,SAAS,UAAU,IAAI;AAC/C,kBAAI,CAAC;AAAM,sBAAM,IAAI,MAAM,qBAAqB,IAAI;AACpD,kBAAI,YAAY,KAAK;AAErB,qBAAO,iBAAiB;AACvB,0BAAU,gBAAgB,IAAI;AAE/B,wBAAU,gBAAgB,UAAU,MAAM,IAAI;;AAG/C,mBAAO,gBAAgB;AACtB,wBAAU,gBAAgB,IAAI;AAE/B,qBAAS,KAAK,YAAY,GAAG,MAAM,GAAG;AACrC,kBAAI,UAAU,EAAE,KAAK;AAAI,0BAAU,EAAE,IAAI,UAAU,EAAE,cAAc;;AAErE,mBAAS,SAAS,OAAO,SAAS,cAAc,QAAQ,CAAC,GAAG,SAAS;;AAEtE,kBAAU,KAAK,QAAQ;;AAIxB,UAAI,IAAI,QAAQ;AACf,YAAI,WAAW,IAAI,cAAc,IAAI,OAAO,MAAM;AAClD,YAAI,QAAQ;AACZ,iBAAS,IAAI,GAAG,IAAI,IAAI,OAAO,QAAQ,KAAK,SAAS;AACpD,cAAI,WAAW,IAAI,OAAO,CAAC;AAC3B,cAAI,YAAY,aAAa,UAAU,SAAS,IAAI;AACpD,cAAI,CAAC;AAAW,kBAAM,IAAI,MAAM,sBAAsB,SAAS,IAAI;AACnE,cAAI,QAAQ,IAAI,MAAM,MAAM,kBAAkB,SAAS,UAAU,QAAQ,CAAC,CAAC,GAAG,SAAS;AACvF,gBAAM,WAAW,SAAS,UAAU,OAAO,UAAU,QAAQ;AAC7D,gBAAM,aAAa,SAAS,UAAU,SAAS,UAAU,UAAU;AACnE,gBAAM,cAAc,SAAS,UAAU,UAAU,UAAU,WAAW;AACtE,cAAI,MAAM,KAAK,WAAW;AACzB,kBAAM,SAAS,SAAS,UAAU,UAAU,CAAC;AAC7C,kBAAM,UAAU,SAAS,UAAU,WAAW,CAAC;;AAEhD,mBAAS,SAAS,OAAO,KAAK;;AAE/B,kBAAU,KAAK,QAAQ;;AAGxB,UAAI,WAAW;AACf,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG;AAC5C,mBAAW,KAAK,IAAI,UAAU,UAAU,CAAC,EAAE,YAAW,CAAE;AACzD,mBAAa,WAAW,KAAK,IAAI,UAAU,MAAM,WAAW,QAAQ,CAAC;IACtE;;AAGD,MAAMD,cAAN,MAAgB;IACf;IAAgB;IAChB;IACA;IACA;IAEA,YAAa,MAAsB,MAAc,WAAmB,QAAgB,eAAsB;AACzG,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,WAAK,YAAY;AACjB,WAAK,SAAS;AACd,WAAK,kBAAkB;IACxB;;AAGD,WAASC,eAAe,MAAa,UAA0B,cAAsB,OAAa;AACjG,QAAI,SAAS,KAAK,CAAC;AACnB,QAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,QAAI,QAAQ,SAAS,QAAQ,SAAS,YAAY,IAAI;AACtD,QAAI,SAAS;AACb,aAAS,QAAQ,KAAK,SAAS;AAC9B,eAAS,SAAS,OAAO,MAAM,KAAK;AACpC,UAAI,UAAU,KAAK,QAAQ,CAAC;AAC5B,UAAI,CAAC,SAAS;AACb,iBAAS,OAAO,MAAM;AACtB,eAAO;;AAER,UAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,UAAI,SAAS,SAAS,SAAS,SAAS,YAAY,IAAI;AACxD,UAAI,OAAO;AAAO,iBAAS,UAAU,OAAO,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,OAAO,QAAQ,KAAK;AAChH,aAAO;AACP,cAAQ;AACR,eAAS;;EAEX;AAEA,WAASC,eAAe,MAAa,UAA0B,OAAe,OAAe,cAAsB,OAAa;AAC/H,QAAI,SAAS,KAAK,CAAC;AACnB,QAAI,OAAO,SAAS,QAAQ,QAAQ,CAAC;AACrC,QAAI,SAAS,SAAS,QAAQ,OAAO,YAAY,IAAI;AACrD,QAAI,SAAS,SAAS,QAAQ,OAAO,YAAY,IAAI;AACrD,QAAI,SAAS;AACb,aAAS,QAAQ,KAAK,SAAS;AAC9B,eAAS,SAAS,OAAO,MAAM,QAAQ,MAAM;AAC7C,UAAI,UAAU,KAAK,QAAQ,CAAC;AAC5B,UAAI,CAAC,SAAS;AACb,iBAAS,OAAO,MAAM;AACtB,eAAO;;AAER,UAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC;AACvC,UAAI,UAAU,SAAS,SAAS,OAAO,YAAY,IAAI;AACvD,UAAI,UAAU,SAAS,SAAS,OAAO,YAAY,IAAI;AACvD,UAAI,QAAQ,OAAO;AACnB,UAAI,OAAO;AACV,iBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,QAAQ,SAAS,KAAK;AACzF,iBAAS,UAAU,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM,OAAO,QAAQ,SAAS,KAAK;;AAE1F,aAAO;AACP,eAAS;AACT,eAAS;AACT,eAAS;;EAEX;AAEA,WAAS,UAAW,OAAY,UAAyB,QAAgB,OAAe,OAAe,OAAe,OACrH,QAAgB,QAAgB,OAAa;AAC7C,QAAI,SAAS,WAAW;AACvB,eAAS,WAAW,KAAK;AACzB,aAAO;;AAER,QAAI,IAAI,SAAS;AACjB,QAAI,MAAM,MAAM,CAAC;AACjB,QAAI,MAAM,MAAM,IAAI,CAAC,IAAI;AACzB,QAAI,MAAM,MAAM,IAAI,CAAC;AACrB,QAAI,MAAM,MAAM,IAAI,CAAC,IAAI;AACzB,aAAS,UAAU,QAAQ,OAAO,OAAO,OAAO,QAAQ,KAAK,KAAK,KAAK,KAAK,OAAO,MAAM;AACzF,WAAO,SAAS;EACjB;AAEA,WAAS,SAAU,KAAU,UAAkB,cAAiB;AAC/D,WAAO,IAAI,QAAQ,MAAM,SAAY,IAAI,QAAQ,IAAI;EACtD;;;ACtnCA,GAAC,MAAK;AACL,QAAI,OAAO,KAAK,WAAW,aAAa;AACvC,WAAK,SAAU,yBAAU,OAAK;AAC7B,eAAO,SAAU,GAAS;AACzB,iBAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;QAC7B;MACD,EAAG,IAAI,aAAa,CAAC,CAAC;;EAExB,GAAE;;;AxCHK,MAAM,eAAN,MAAM,sBAAqB,QAClC;AAAA,IACI,OAAwB,aAA+C,oBAAI,IAAiC;AAAA,IAE5G,OAAc,KAAK,SACnB;AACI,UAAI,cAAa,WAAW,IAAI,OAAO,GACvC;AACI,eAAO,cAAa,WAAW,IAAI,OAAO;AAAA,MAC9C;AAEA,aAAO,IAAI,cAAa,OAAO;AAAA,IACnC;AAAA,IAEgB;AAAA,IAER,YAAY,OACpB;AAEI,YAAM,MAAM,QAAQ;AACpB,WAAK,UAAU,YAAAE,QAAY,KAAK,KAAK;AAAA,IACzC;AAAA,IAEO,WAAW,WAA0B,WAC5C;AACI,YAAM,QAAQ,KAAK,QAAQ,OAAO;AAElC,YAAM,YAAY,cAAa,oBAAoB,SAAS;AAC5D,YAAM,YAAY,cAAa,oBAAoB,SAAS;AAC5D,WAAK,QAAQ,OAAO,sBAAsB,cAAa,aAAa,SAAS;AAC7E,WAAK,QAAQ,OAAO,cAAc;AAAA,IACtC;AAAA,IAEO,SAAS,OAAoB,OACpC;AACI,YAAM,QAAQ,KAAK,QAAQ,OAAO;AAElC,YAAM,eAAe,cAAa,kBAAkB,KAAK;AACzD,YAAM,eAAe,cAAa,kBAAkB,KAAK;AAAA,IAC7D;AAAA,IAEO,UACP;AAEI,WAAK,QAAQ,QAAQ;AAAA,IACzB;AAAA,IAEA,OAAe,aAAa,QAC5B;AACI,cAAQ,QACR;AAAA,QACI,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AACf,iBAAO;AAAA,QAEX,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AACf,iBAAO;AAAA,QAEX;AACI,gBAAM,IAAI,MAAM,2BAA2B,OAAO,MAAM,CAAC,EAAE;AAAA,MACnE;AAAA,IACJ;AAAA,IAEA,OAAe,oBAAoB,QACnC;AACI,cAAQ,QACR;AAAA,QACI,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AACf,iBAAO;AAAA,QAEX,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AAAA,QACnB,KAAK,cAAc;AACf,iBAAO;AAAA,QAEX;AACI,gBAAM,IAAI,MAAM,2BAA2B,OAAO,MAAM,CAAC,EAAE;AAAA,MACnE;AAAA,IACJ;AAAA,IAEA,OAAe,kBAAkB,MACjC;AACI,cAAQ,MACR;AAAA,QACI,KAAK,YAAY;AACb,iBAAO;AAAA,QAEX,KAAK,YAAY;AACb,iBAAO;AAAA,QAEX,KAAK,YAAY;AACb,iBAAO;AAAA,QAEX;AACI,gBAAM,IAAI,MAAM,yBAAyB,OAAO,IAAI,CAAC,EAAE;AAAA,MAC/D;AAAA,IACJ;AAAA,IAEA,OAAc,eAAe,OAC7B;AACI,cAAQ,OACR;AAAA,QACI,KAAK,UAAU;AACX,iBAAO;AAAA,QAEX,KAAK,UAAU;AACX,iBAAO;AAAA,QAEX,KAAK,UAAU;AACX,iBAAO;AAAA,QAEX,KAAK,UAAU;AACX,iBAAO;AAAA,QAEX;AACI,gBAAM,IAAI,MAAM,sBAAsB,OAAO,KAAK,CAAC,EAAE;AAAA,MAC7D;AAAA,IACJ;AAAA,EACJ;;;ADhHA,MAAM,0BAAwF;AAAA,IAC1F,WAAW,2BAAc;AAAA,IAEzB,QAAQ;AAAA,MACJ,WAAW;AAAA,QACP,MAAM,2BAAc;AAAA,QACpB,UAAU,kCAAqB;AAAA,QAC/B,MAAM;AAAA,MACV;AAAA,MAEA,KAAK,KACL;AACI,mBAAO,6BAAe,KAAK,QAAQ;AAAA,MACvC;AAAA,MAEA,MAAM,KAAK,KACX;AACI,cAAM,WAAW,MAAM,wBAAW,IAAI,EAAE,MAAM,GAAG;AAEjD,cAAM,MAAM,MAAM,SAAS,KAAK;AAEhC,eAAO;AAAA,MACX;AAAA,MAEA,UAAU,OAAgB,SAC1B;AACI,cAAM,uBAAmB,6BAAe,QAAQ,KAAe,QAAQ;AACvE,cAAM,WAAW,OAAO,UAAU;AAElC,eAAO,QAAQ,QAAQ,oBAAoB,QAAQ;AAAA,MACvD;AAAA,MAEA,OAAO,OACP;AACI,cAAM,QAAQ;AAAA,MAClB;AAAA,MAEA,MAAM,MAAM,OAAiB,SAAwB,QACrD;AACI,cAAM,WAAgC,QAAQ,QAAQ,CAAC;AACvD,YAAI,WAAW,kBAAK,QAAQ,QAAQ,GAAa;AAEjD,YAAI,YAAY,SAAS,YAAY,GAAG,MAAM,SAAS,SAAS,GAChE;AACI,sBAAY;AAAA,QAChB;AAGA,cAAM,SAAS,IAAI,aAAa,KAAK;AAGrC,YAAI,SAAS,kBAAkB,8BAAiB,OAAO,SAAS,WAAW,UAC3E;AACI,gBAAM,cAAc,SAAS;AAE7B,mBAAS,SAAS,CAAC;AACnB,mBAAS,OAAO,OAAO,MAAM,CAAC,EAAE,IAAI,IAAI;AAAA,QAC5C;AAGA,cAAM,yBAAwC,CAAC;AAG/C,mBAAW,QAAQ,OAAO,OAC1B;AACI,gBAAM,WAAW,KAAK;AACtB,gBAAM,eAAe,UAAU,SAAS,SAAS,OAAO,QAAQ,IAAI;AAEpE,cAAI,wBAAwB,4BAC5B;AACI,iBAAK,WAAW,aAAa,KAAK,YAAY,CAAC;AAAA,UACnD,OAEA;AAEI,kBAAM,MAAc,gBAAgB,kBAAK,UAAU,CAAC,GAAG,SAAS,MAAM,kBAAK,GAAG,GAAG,QAAQ,EAAE,KAAK,kBAAK,GAAG,CAAC;AAEzG,kBAAM,iBAAiB;AAAA,cACnB,KAAK;AAAA,cACL,MAAM;AAAA,gBACF,GAAG,SAAS;AAAA,gBACZ,WAAW,KAAK,MAAM,wBAAwB;AAAA,cAClD;AAAA,YACJ;AAEA,kBAAM,cAAc,OAAO,KAAc,cAAc,EAAE,KAAK,CAAC,YAC/D;AACI,mBAAK,WAAW,aAAa,KAAK,QAAQ,MAAM,CAAC;AAAA,YACrD,CAAC;AAED,mCAAuB,KAAK,WAAW;AAAA,UAC3C;AAAA,QACJ;AAEA,cAAM,QAAQ,IAAI,sBAAsB;AAExC,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAEA,0BAAW,IAAI,uBAAuB;;;A0CrHtC,MAAAC,eAQO;AAKP,WAAS,OAAO,UAChB;AACI,WAAO,OAAO,UAAU,eAAe,KAAK,UAAU,OAAO;AAAA,EACjE;AAEA,WAAS,SAAS,UAClB;AACI,WAAO,oBAAoB;AAAA,EAC/B;AAEA,MAAM,uBAAgF;AAAA,IAClF,WAAW,2BAAc;AAAA,IAEzB,QAAQ;AAAA,MACJ,WAAW;AAAA,QACP,MAAM,2BAAc;AAAA,QACpB,UAAU,kCAAqB;AAAA,QAC/B,MAAM;AAAA,MACV;AAAA,MAEA,KAAK,KACL;AACI,mBAAO,6BAAe,KAAK,OAAO;AAAA,MACtC;AAAA,MAEA,MAAM,KAAK,KACX;AACI,cAAM,WAAW,MAAM,wBAAW,IAAI,EAAE,MAAM,GAAG;AAEjD,cAAM,SAAS,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AAE1D,eAAO;AAAA,MACX;AAAA,MACA,UAAU,OAAgB,SAC1B;AACI,cAAM,uBAAmB,6BAAe,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK;AAC7E,cAAM,yBAAqB,6BAAe,QAAQ,KAAK,OAAO,KAAK,SAAS,KAAK;AAEjF,eAAO,QAAQ,QAAQ,oBAAoB,kBAAkB;AAAA,MACjE;AAAA,IACJ;AAAA,EACJ;AAEA,0BAAW,IAAI,oBAAoB;;;ACrFnC,MAAAC,eAOO;;;ACPP,MAAAC,eAA8C;AAE9C,MAAM,wBAAwB,IAAI,aAAa,CAAC;AAChD,MAAM,uBAAuB,IAAI,YAAY,CAAC;AAEvC,MAAM,wBAAN,cAAoC,sBAC3C;AAAA,IACI,cACA;AACI,YAAM,aAAa;AAEnB,YAAM,kBAAkB,IAAI,oBAAO;AAAA,QAC/B,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO,yBAAY,SAAS,yBAAY;AAAA,QACxC,aAAa;AAAA,MACjB,CAAC;AAED,YAAM,cAAc,IAAI,oBAAO;AAAA,QAC3B,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO,yBAAY,QAAQ,yBAAY;AAAA;AAAA,QACvC,aAAa;AAAA,MACjB,CAAC;AAED,YAAM,SAAS,aAAa;AAE5B,YAAM;AAAA,QACF,YAAY;AAAA,UACR,WAAW;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ;AAAA,UACZ;AAAA,UACA,KAAK;AAAA,YACD,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ,IAAI;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACJ,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ,IAAI;AAAA,UAChB;AAAA,UACA,YAAY;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ,IAAI;AAAA,UAChB;AAAA,UACA,oBAAoB;AAAA,YAChB,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ,IAAI;AAAA,UAChB;AAAA,QACJ;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;;;AC/DA,MAAAC,eAWO;;;ACVA,MAAM,cAAc;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,MACJ;AAAA;AAAA,QAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAIlB;AAAA;AAAA,QAAgB;AAAA;AAAA;AAAA;AAAA,IAGpB;AAAA,IACA,UAAU;AAAA,MACN;AAAA;AAAA,QAAkB;AAAA;AAAA;AAAA;AAAA,MAGlB;AAAA;AAAA,QAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQnB;AAAA,EACJ;AAEO,MAAM,gBAAgB;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,MACJ;AAAA;AAAA,QAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAIlB;AAAA;AAAA,QAAgB;AAAA;AAAA;AAAA;AAAA,IAGpB;AAAA,IACA,UAAU;AAAA,MACN;AAAA;AAAA,QAAkB;AAAA;AAAA;AAAA;AAAA,MAGlB;AAAA;AAAA,QAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnB;AAAA,EACJ;;;ADlCO,MAAM,iBAAN,cAA6B,oBACpC;AAAA,IACI,YAAY,aACZ;AACI,YAAM,gBAAY,yCAA2B;AAAA,QACzC,MAAM;AAAA,QACN,MAAM;AAAA,UACF;AAAA,UACA;AAAA,cACA,wCAA0B,WAAW;AAAA,UACrC;AAAA,QACJ;AAAA,MACJ,CAAC;AAED,YAAM,iBAAa,0CAA4B;AAAA,QAC3C,MAAM;AAAA,QACN,MAAM;AAAA,UACF;AAAA,UACA;AAAA,cACA,sCAAwB,WAAW;AAAA,UACnC;AAAA,QACJ;AAAA,MACJ,CAAC;AAED,YAAM;AAAA,QACF;AAAA,QACA;AAAA,QACA,WAAW;AAAA,UACP,mBAAe,2CAA6B,WAAW;AAAA,QAC3D;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;;;AFnCA,MAAI,gBAAwB;AAGrB,MAAM,kBAAN,MAAM,yBAAwB,qBACrC;AAAA;AAAA,IAEI,OAAc,YAAY;AAAA,MACtB,MAAM;AAAA,QACF,2BAAc;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IAEO,WAAW,IAAI,sBAAsB;AAAA,IACrC,SAAS,kBAAkB,gBAAgB,IAAI,eAAe,KAAK,WAAW;AAAA,IAC9E,OAAO,iBAAgB,UAAU;AAAA;AAAA,IAGjC,aAAa;AAAA,IAEb,eACH,SACA,aACA,YACA,OACA,WAEJ;AACI,YAAM,oBAAqB,aAAa,KAAO,QAAQ,cAAc;AAErE,YAAM,KAAK,QAAQ;AAEnB,YAAM,IAAI,GAAG;AACb,YAAM,IAAI,GAAG;AACb,YAAM,IAAI,GAAG;AACb,YAAM,IAAI,GAAG;AACb,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AAEd,YAAM,EAAE,WAAW,IAAI,IAAI;AAE3B,YAAM,OAAO,QAAQ;AACrB,YAAMC,aAAY,QAAQ;AAE1B,YAAM,SAAS,QAAQ;AACvB,YAAM,MAAM,SAAS,QAAQ;AAE7B,eAAS,IAAI,QAAQ,IAAI,KAAK,KAC9B;AACI,cAAM,KAAK,IAAI;AAEf,cAAM,IAAI,UAAU,EAAE;AACtB,cAAM,IAAI,UAAW,KAAM,CAAC;AAE5B,oBAAY,OAAO,IAAK,IAAI,IAAM,IAAI,IAAK;AAC3C,oBAAY,OAAO,IAAK,IAAI,IAAM,IAAI,IAAK;AAE3C,oBAAY,OAAO,IAAI,IAAI,EAAE;AAC7B,oBAAY,OAAO,IAAI,IAAK,KAAM,CAAC;AAEnC,mBAAW,OAAO,IAAI;AACtB,mBAAW,OAAO,IAAIA;AAEtB,mBAAW,OAAO,IAAI;AAAA,MAC1B;AAAA,IACJ;AAAA,IAEO,mBACH,SACA,aACA,YACA,OACA,WAEJ;AACI,YAAM,UAAU,QAAQ;AAExB,YAAM,KAAK,QAAQ;AAEnB,YAAM,IAAI,GAAG;AACb,YAAM,IAAI,GAAG;AACb,YAAM,IAAI,GAAG;AACb,YAAM,IAAI,GAAG;AACb,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AAEd,YAAM,SAAS,QAAQ;AAEvB,YAAM,KAAK,OAAO;AAClB,YAAM,KAAK,OAAO;AAClB,YAAM,KAAK,OAAO;AAClB,YAAM,KAAK,OAAO;AAElB,YAAM,MAAM,QAAQ;AAIpB,YAAM,OAAO,QAAQ;AACrB,YAAMA,aAAY,QAAQ;AAE1B,YAAM,oBAAqB,aAAa,KAAO,QAAQ,cAAc;AAErE,kBAAY,QAAQ,CAAC,IAAK,IAAI,KAAO,IAAI,KAAM;AAC/C,kBAAY,QAAQ,CAAC,IAAK,IAAI,KAAO,IAAI,KAAM;AAE/C,kBAAY,QAAQ,CAAC,IAAI,IAAI;AAC7B,kBAAY,QAAQ,CAAC,IAAI,IAAI;AAE7B,iBAAW,QAAQ,CAAC,IAAI;AACxB,iBAAW,QAAQ,CAAC,IAAIA;AACxB,iBAAW,QAAQ,CAAC,IAAI;AAGxB,kBAAY,QAAQ,CAAC,IAAK,IAAI,KAAO,IAAI,KAAM;AAC/C,kBAAY,QAAQ,CAAC,IAAK,IAAI,KAAO,IAAI,KAAM;AAE/C,kBAAY,QAAQ,CAAC,IAAI,IAAI;AAC7B,kBAAY,QAAQ,EAAE,IAAI,IAAI;AAE9B,iBAAW,QAAQ,EAAE,IAAI;AACzB,iBAAW,QAAQ,EAAE,IAAIA;AACzB,iBAAW,QAAQ,EAAE,IAAI;AAGzB,kBAAY,QAAQ,EAAE,IAAK,IAAI,KAAO,IAAI,KAAM;AAChD,kBAAY,QAAQ,EAAE,IAAK,IAAI,KAAO,IAAI,KAAM;AAEhD,kBAAY,QAAQ,EAAE,IAAI,IAAI;AAC9B,kBAAY,QAAQ,EAAE,IAAI,IAAI;AAE9B,iBAAW,QAAQ,EAAE,IAAI;AACzB,iBAAW,QAAQ,EAAE,IAAIA;AACzB,iBAAW,QAAQ,EAAE,IAAI;AAGzB,kBAAY,QAAQ,EAAE,IAAK,IAAI,KAAO,IAAI,KAAM;AAChD,kBAAY,QAAQ,EAAE,IAAK,IAAI,KAAO,IAAI,KAAM;AAEhD,kBAAY,QAAQ,EAAE,IAAI,IAAI;AAC9B,kBAAY,QAAQ,EAAE,IAAI,IAAI;AAE9B,iBAAW,QAAQ,EAAE,IAAI;AACzB,iBAAW,QAAQ,EAAE,IAAIA;AACzB,iBAAW,QAAQ,EAAE,IAAI;AAAA,IAC7B;AAAA,EACJ;AAEA,0BAAW,IAAI,eAAe;;;AIjI9B,MAAAC,eAOO;;;ACHA,MAAM,qBAAN,MACP;AAAA,IACI,cAAc;AAAA,IACd,kBAAkB;AAAA,IAElB;AAAA,IACA;AAAA,IAEA,cAAc;AAAA,IAEL,aAAa;AAAA,IAEtB;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IAEA;AAAA,IAEA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,IAAI,QACJ;AACI,YAAM,YAAY,KAAK,KAAK;AAE5B,YAAM,cAAqB,KAAK,WAAW;AAC3C,YAAM,cAAqB,KAAK,WAAW;AAC3C,UAAI;AAEJ,YAAM,SAAU,UAAU,IAAI,cAAe;AAE7C,UAAI,gBAAgB,UACpB;AACI,cAAM,UAAW,eAAe,KAAM;AACtC,cAAM,UAAW,eAAe,IAAK;AACrC,cAAM,UAAU,cAAc;AAE9B,cAAM,SAAU,UAAU,IAAI;AAC9B,cAAM,SAAU,UAAU,IAAI;AAC9B,cAAM,SAAU,UAAU,IAAI;AAE9B,eAAS,UAAW,KAAO,UAAU,KAAO,UAAU,IAAK;AAAA,MAC/D,OAEA;AACI,eAAS,UAAW,KAAQ,UAAU,IAAI,OAAQ,KAAQ,UAAU,IAAI,OAAQ,IAAM,UAAU,IAAI;AAAA,MACxG;AAEA,aAAO;AAAA,IACX;AAAA,IAEA,IAAI,YACJ;AACI,YAAMC,aAAY,KAAK,KAAK;AAE5B,aAASA,WAAU,KAAM,KAAQA,WAAU,IAAI,OAAQ,KAAQA,WAAU,IAAI,OAAQ,IAAMA,WAAU,IAAI;AAAA,IAC7G;AAAA,IAEA,IAAI,iBAAiB;AAAE,aAAO,KAAK,WAAW;AAAA,IAAgB;AAAA,IAE9D,QACI,YACA,MACA,SACA,WACA,aACJ;AACI,WAAK,aAAa;AAClB,WAAK,YAAY,WAAW;AAC5B,WAAK,OAAO;AAEZ,UAAI,KAAK,SACT;AACI,cAAM,cAAc,KAAK;AAEzB,aAAK,YAAY,YAAY;AAC7B,aAAK,gBAAgB,YAAY;AACjC,aAAK,YAAY,YAAY;AAC7B,aAAK,UAAU,YAAY;AAC3B,aAAK,MAAM,YAAY;AAAA,MAC3B,OAEA;AACI,aAAK,YAAY,KAAK,QAAQ;AAC9B,aAAK,gBAAgB,KAAK,SAAS,SAAS;AAC5C,aAAK,YAAY,KAAK;AACtB,aAAK,UAAU,KAAK;AACpB,aAAK,MAAM,KAAK;AAAA,MACpB;AAEA,WAAK,UAAU;AACf,WAAK,cAAc;AAEnB,WAAK,YAAY;AAEjB,WAAK,cAAc,KAAK,WAAW,aAAa;AAAA,IACpD;AAAA,EACJ;;;ADxGA,MAAM,UAAU,IAAI,iBAAiB;AAErC,MAAM,oBAAoB;AAAA,IACtB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACP;AAGO,MAAM,YAAN,MACP;AAAA;AAAA,IAEI,OAAO,YAAY;AAAA,MACf,MAAM;AAAA,QACF,2BAAc;AAAA,QACd,2BAAc;AAAA,QACd,2BAAc;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,IACV;AAAA,IAEA;AAAA,IAEQ,eAAmC,CAAC;AAAA,IAE5C,YAAY,UACZ;AACI,WAAK,WAAW;AAAA,IACpB;AAAA,IAEA,mBAAmB,OACnB;AACI,YAAM,YAAY;AAGlB,aAAO,MAAM;AAAA,IACjB;AAAA,IAEA,cAAc,OAAc,gBAC5B;AACI,YAAM,WAAW,KAAK,aAAa,MAAM,GAAG,MAAM,EAAE,aAAa,CAAC,EAAE;AAEpE,YAAM,UAAU,KAAK,SAAS,YAAY;AAE1C,YAAM,YAAY,MAAM,SAAS;AAEjC,YAAM,cAAe,KAAK,SAAS,eAAe,MAAM;AAExD,YAAM,YAAY;AAElB,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAC7C;AACI,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,aAAa,KAAK,cAAc;AACtC,cAAM,YAAY,kBAAkB,KAAK,KAAK,SAAS;AAEvD,YAAI,sBAAsB,oBAAoB,sBAAsB,gBACpE;AACI,gBAAM,YAAY,MAAM,eAAe,MAAM,UAAU;AACvD,gBAAM,qBAAqB,SAAS,YAAY,UAAU,EAAE,MAAM,IAAI,mBAAmB;AAEzF,6BAAmB;AAAA,YACf;AAAA,YACA;AAAA,YACC,WAAW,QAAQ,QAAQ,WAAY,qBAAQ;AAAA,YAChD;AAAA,YACA;AAAA,UACJ;AAEA,cAAI,CAAC,UAAU,YACf;AACI,oBAAQ,WAAW,oBAAoB,cAAc;AAAA,UACzD;AAAA,QACJ;AAEA,cAAM,sBAAsB,MAAM,aAAa,KAAK,KAAK,IAAI;AAE7D,YAAI,qBACJ;AACI,gBAAM,YAAY,oBAAoB;AAEtC,oBAAU,iBAAiB;AAC3B,kDAAsB,WAAW,gBAAgB,KAAK,QAAQ;AAC9D,oBAAU,iBAAiB;AAAA,QAC/B;AAAA,MACJ;AAEA,cAAQ,QAAQ;AAAA,IACpB;AAAA,IAEA,iBAAiB,OACjB;AAEI,YAAM,WAAW,KAAK,aAAa,MAAM,GAAG;AAE5C,YAAM,YAAY;AAElB,YAAM,YAAY,MAAM,SAAS;AAEjC,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAC7C;AACI,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,aAAa,KAAK,cAAc;AAEtC,YAAI,sBAAsB,oBAAoB,sBAAsB,gBACpE;AACI,gBAAM,YAAY,MAAM,eAAe,MAAM,UAAU;AAEvD,cAAI,CAAC,UAAU,YACf;AACI,kBAAM,qBAAqB,SAAS,YAAY,MAAM,eAAe,MAAM,UAAU,EAAE,EAAE;AAEzF,+BAAmB,UAAU,cAAc,kBAAkB;AAAA,UACjE;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IAEA,kBAAkB,OAClB;AAEI,WAAK,aAAa,MAAM,GAAG,IAAI;AAAA,IACnC;AAAA,IAEA,UACA;AACI,WAAK,eAAe;AACpB,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAEA,0BAAW,IAAI,SAAS;;;AEhJxB,MAAAC,eAWO;AA+BP,MAAM,YAAY,IAAI,QAAQ;AAC9B,MAAM,aAAa,IAAI,MAAM;AAC7B,MAAM,YAAY,IAAI,MAAM;AAE5B,WAAS,QAAQ;AAEjB,MAAMC,WAAU,IAAI,iBAAiB;AAsC9B,MAAM,QAAN,MAAM,eAAc,2BAC3B;AAAA;AAAA,IAEW,UAAU;AAAA,IACV,UAAU;AAAA,IACQ,eAAe;AAAA,IACjC,kBAAkB;AAAA,IAElB,8BAAuD,MAAM;AAAA,IAAS;AAAA,IACtE,6BAAsD,MAAM;AAAA,IAAS;AAAA;AAAA,IAGrE;AAAA,IACA;AAAA,IACA;AAAA,IACC,SAA2C;AAAA,IAE1C,eAAiE,uBAAO,OAAO,IAAI;AAAA,IAEpF,eAAe,SACvB;AACI,UAAI;AAEJ,UAAI,OAAO,YAAY;AAAU,eAAO,KAAK,SAAS,MAAM,OAAO;AAAA,eAC1D,OAAO,YAAY;AAAU,eAAO,KAAK,SAAS,SAAS,OAAO;AAAA;AACtE,eAAO;AAEZ,UAAI,CAAC;AAAM,cAAM,IAAI,MAAM,gDAAgD,OAAO,EAAE;AAEpF,aAAO;AAAA,IACX;AAAA,IAEO;AAAA,IACC;AAAA,IAEA;AAAA,IACA,sBAA6D,CAAC;AAAA,IAEtE,IAAW,QACX;AACI,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAW,MAAM,OACjB;AACI,UAAI,KAAK,QACT;AACI,aAAK,OAAO,gBAAgB,IAAI;AAAA,MACpC;AACA,UAAI,OACJ;AACI,cAAM,cAAc,IAAI;AAAA,MAC5B;AACA,WAAK,SAAS;AAAA,IAClB;AAAA,IAEQ,mBAAmB;AAAA,IACnB,cAAc;AAAA,IAEtB,IAAW,aACX;AACI,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAW,WAAW,OACtB;AACI,UAAI,OACJ;AACI,4BAAO,OAAO,IAAI,KAAK,gBAAgB,IAAI;AAC3C,aAAK,mBAAmB;AAAA,MAC5B,OAEA;AACI,4BAAO,OAAO,OAAO,KAAK,gBAAgB,IAAI;AAAA,MAClD;AAEA,WAAK,cAAc;AAAA,IACvB;AAAA,IAEA,YAAY,SACZ;AACI,UAAI,mBAAmB,cACvB;AACI,kBAAU;AAAA,UACN,cAAc;AAAA,QAClB;AAAA,MACJ;AAEA,YAAM;AAEN,YAAM,eAAe,mBAAmB,eAAe,UAAU,QAAQ;AAEzE,WAAK,WAAW,IAAI,SAAS,YAAY;AACzC,WAAK,QAAQ,IAAI,eAAe,IAAI,mBAAmB,YAAY,CAAC;AACpE,WAAK,aAAa,SAAS,cAAc;AAEzC,YAAM,QAAQ,KAAK,SAAS;AAE5B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAClC;AACI,aAAK,oBAAoB,CAAC,IAAI,uBAAO,OAAO,IAAI;AAAA,MACpD;AAEA,WAAK,aAAa,CAAC;AAAA,IACvB;AAAA,IAEO,OAAO,IACd;AACI,UAAI,KAAK,cAAc,CAAC,KAAK,kBAC7B;AACI,gBAAQ;AAAA;AAAA,UAEJ;AAAA,QACJ;AACA,aAAK,mBAAmB;AAAA,MAC5B;AAEA,WAAK,eAAe,GAAG,EAAE;AAAA,IAC7B;AAAA,IAEU,eAAe,aAAkB,cAC3C;AAGI,WAAK,aAAa,gBAAgB,oBAAO,OAAO,UAAU,GAAI;AAAA,IAClE;AAAA,IAEA,IAAI,SACJ;AACI,UAAI,KAAK,cACT;AACI,aAAK,aAAa;AAAA,MACtB;AAEA,aAAO,KAAK;AAAA,IAChB;AAAA,IAEO,gBAAgB,MAAqB,UAC5C;AACI,YAAM,UAAU;AAEhB,UAAI,OAAO,SAAS,UACpB;AACI,eAAO,KAAK,SAAS,SAAS,IAAI;AAAA,MACtC;AAEA,UAAI,CAAC;AAAM,cAAM,MAAM,gCAAgC,OAAO,OAAO,CAAC,YAAY;AAClF,gBAAU,IAAI,SAAS,GAAG,SAAS,CAAC;AAEpC,UAAI,KAAK,QACT;AACI,cAAM,MAAM,KAAK,OAAO,aAAa,SAAS;AAE9C,aAAK,IAAI,IAAI;AACb,aAAK,IAAI,CAAC,IAAI;AAAA,MAClB,OAEA;AACI,aAAK,IAAI,UAAU;AACnB,aAAK,IAAI,UAAU;AAAA,MACvB;AAAA,IACJ;AAAA,IAEO,gBAAgB,MAAqB,QAC5C;AACI,YAAM,UAAU;AAEhB,UAAI,OAAO,SAAS,UACpB;AACI,eAAO,KAAK,SAAS,SAAS,IAAI;AAAA,MACtC;AAEA,UAAI,CAAC,MACL;AACI,gBAAQ,MAAM,gCAAgC,OAAO,OAAO,CAAC,YAAY;AAEzE,eAAO;AAAA,MACX;AAEA,UAAI,CAAC,QACL;AACI,iBAAS,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,MAC1B;AAEA,aAAO,IAAI,KAAK;AAChB,aAAO,IAAI,KAAK;AAEhB,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,aAAa,MACb;AACI,WAAK,MAAM,OAAO,IAAI;AACtB,WAAK,SAAS,OAAO,IAAI;AAEzB,WAAK,gBAAgB;AAErB,WAAK,eAAe;AAEpB,WAAK,aAAa;AAAA,IACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,cACA;AACI,UAAI,CAAC,KAAK;AAAe;AACzB,WAAK,gBAAgB;AAErB,YAAM,EAAE,SAAS,IAAI;AAErB,WAAK,MAAM,MAAM,QAAQ;AAEzB,WAAK,4BAA4B,IAAI;AACrC,eAAS,qBAAqB,QAAQ,MAAM;AAC5C,WAAK,2BAA2B,IAAI;AAEpC,WAAK,oBAAoB;AAEzB,WAAK,qBAAqB;AAE1B,WAAK,kBAAkB;AAAA,IAC3B;AAAA,IAEQ,sBACR;AACI,YAAM,mBAAmB,KAAK,SAAS;AAEvC,YAAM,kBAAmB,KAAK,qBAAqB,CAAC;AAEpD,UAAI,QAAQ;AAEZ,UAAI,wBAAwB;AAE5B,eAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAC7C;AACI,cAAM,OAAO,iBAAiB,CAAC;AAC/B,cAAM,aAAa,KAAK,cAAc;AAEtC,YAAI,YACJ;AACI,cAAI,eAAe,gBAAgB,KAAK,GACxC;AACI,oCAAwB;AACxB,4BAAgB,KAAK,IAAI;AAAA,UAC7B;AAEA;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,UAAU,gBAAgB,QAC9B;AACI,gCAAwB;AACxB,wBAAgB,SAAS;AAAA,MAC7B;AAEA,WAAK,wBAAwB;AAAA,IACjC;AAAA,IAEQ,uBACR;AACI,YAAM,mBAAmB,KAAK,SAAS;AAEvC,eAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAC7C;AACI,cAAM,OAAO,iBAAiB,CAAC;AAE/B,cAAM,aAAa,KAAK,cAAc;AAEtC,YAAI,YACJ;AACI,cAAI,sBAAsB,kBAAkB,sBAAsB,kBAClE;AACI,kBAAM,YAAY,KAAK,eAAe,MAAM,UAAU;AAEtD,gBAAI,sBAAsB,kBAC1B;AACI,yBAAW,qBAAqB,MAAM,UAAU,UAAU,GAAG,CAAC;AAAA,YAClE,OAEA;AACI,yBAAW;AAAA,gBACP;AAAA,gBACA;AAAA,gBACA,WAAW;AAAA,gBACX,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,cACJ;AAAA,YACJ;AAEA,sBAAU,MAAM,WAAW;AAE3B,kBAAM,WAAW,KAAK,KAAK;AAC3B,kBAAM,gBAAgB,SAAS;AAC/B,kBAAM,YAAY,KAAK;AAEvB,kBAAM,kBAAkB,WAAW;AAEnC,sBAAU,MAAM;AAAA,cACZ,cAAc,IAAI,UAAU,IAAI,gBAAgB;AAAA,cAChD,cAAc,IAAI,UAAU,IAAI,gBAAgB;AAAA,cAChD,cAAc,IAAI,UAAU,IAAI,gBAAgB;AAAA,cAChD,cAAc,IAAI,UAAU,IAAI,gBAAgB;AAAA,YACpD;AAEA,sBAAU,WAAW,CAAC,CAAC,KAAK;AAE5B,gBAAI,KAAK,WACT;AACI,wBAAU,UAAU,aAAa,KAAK,SAAS;AAAA,YACnD;AAEA,sBAAU,aAAa,UAAU,UAAU;AAE3C,gBAAIA,SAAQ,WAAW,GACvB;AACI,mBAAK,mBAAmB,SAAS;AAAA,YACrC;AAAA,UACJ,WACS,sBAAsB,oBAC/B;AACI,YAAAA,SAAQ,UAAU,MAAM,UAAU;AAClC;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,SAAQ,gBAAgB,IAAI;AAAA,MAChC;AACA,MAAAA,SAAQ,QAAQ;AAAA,IACpB;AAAA,IAEQ,mBAAmB,WAC3B;AACI,gBAAU,UAAU;AAEpB,MAAAA,SAAQ;AAAA,QACJ,UAAU;AAAA,QACV,UAAU,SAAS;AAAA,QACnB,UAAU;AAAA,QACV,UAAU,QAAQ;AAAA,QAClB,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAEA,YAAM,EAAE,iBAAiB,iBAAiB,IAAIA;AAE9C,YAAM,gBAAgB,gBAAgB,SAAS;AAC/C,YAAM,eAAe,iBAAiB;AAEtC,UAAI,CAAC,UAAU,aACf;AACI,kBAAU,cAAc;AAAA,UACpB,UAAU,IAAI,aAAa,gBAAgB,CAAC;AAAA,UAC5C,KAAK,IAAI,aAAa,gBAAgB,CAAC;AAAA,UACvC,aAAa;AAAA,UACb,SAAS,IAAI,YAAY,YAAY;AAAA,UACrC;AAAA,QACJ;AAEA,aAAK,wBAAwB;AAAA,MACjC;AAEA,YAAM,cAAc,UAAU;AAE9B,YAAM,aAAa,YAAY,gBAAgB,iBAAiB,iBAAiB,YAAY;AAE7F,gBAAU,aAAa,kBAAkB;AAEzC,UAAI,YACJ;AACI,aAAK,wBAAwB;AAE7B,YAAI,YAAY,cAAc,eAC9B;AAEI,sBAAY,WAAW,IAAI,aAAa,gBAAgB,CAAC;AACzD,sBAAY,MAAM,IAAI,aAAa,gBAAgB,CAAC;AAAA,QACxD;AAEA,YAAI,YAAY,QAAQ,SAAS,cACjC;AACI,sBAAY,UAAU,IAAI,YAAY,YAAY;AAAA,QACtD;AAAA,MACJ;AAEA,YAAM,EAAE,UAAU,KAAK,QAAQ,IAAI;AAEnC,eAAS,IAAI,GAAG,IAAI,eAAe,KACnC;AACI,iBAAS,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC;AACvC,iBAAU,IAAI,IAAK,CAAC,IAAI,gBAAiB,IAAI,IAAK,CAAC;AAEnD,YAAI,IAAI,CAAC,IAAI,gBAAiB,IAAI,IAAK,CAAC;AACxC,YAAK,IAAI,IAAK,CAAC,IAAI,gBAAiB,IAAI,IAAK,CAAC;AAAA,MAClD;AAEA,kBAAY,cAAc;AAE1B,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KACpC;AACI,gBAAQ,CAAC,IAAI,iBAAiB,CAAC;AAAA,MACnC;AAEA,kBAAY,eAAe;AAAA,IAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,IAMQ,oBACR;AACI,iBAAW,KAAK,KAAK,cACrB;AACI,cAAM,iBAAiB,KAAK,aAAa,CAAC;AAE1C,YAAI,CAAC;AAAgB;AAErB,aAAK,iBAAiB,cAAc;AAAA,MACxC;AAAA,IACJ;AAAA,IAEQ,iBAAiB,gBACzB;AACI,YAAM,EAAE,MAAM,UAAU,IAAI;AAE5B,gBAAU,UAAU,KAAK,SAAS,UAAU,SAAS,IAAI;AAEzD,UAAI,UAAU,SACd;AACI,cAAM,OAAO,KAAK;AAElB,kBAAU,SAAS,IAAI,KAAK,QAAQ,KAAK,MAAM;AAE/C,kBAAU,MAAM,IAAI,KAAK,eAAe;AACxC,kBAAU,MAAM,IAAI,KAAK,eAAe;AAExC,kBAAU,WAAW,KAAK,kBAAkB,IAAI;AAAA,MACpD;AAAA,IACJ;AAAA;AAAA,IAGA,eAAe,MAAY,YAC3B;AACI,aAAO,KAAK,oBAAoB,KAAK,KAAK,KAAK,EAAE,WAAW,IAAI,KAAK,KAAK,eAAe,MAAM,UAAU;AAAA,IAC7G;AAAA,IAEQ,eAAe,MAAY,YACnC;AACI,UAAI;AAEJ,UAAI,sBAAsB,kBAC1B;AACI,mBAAW,IAAI,aAAa,CAAC;AAE7B,aAAK,oBAAoB,KAAK,KAAK,KAAK,EAAE,WAAW,IAAI,IAAI;AAAA,UACzD,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,WAAW,IAAI;AAAA,UACzC;AAAA,UACA,SAAS;AAAA,UACT,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,UAC1B,KAAK,WAAW;AAAA,UAChB,OAAO,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;AAAA,UAC3B,WAAW,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;AAAA,UAC/B,UAAU;AAAA,UACV,YAAY;AAAA,QAChB;AAAA,MACJ,OAEA;AACI,mBAAW,IAAI,aAAa,WAAW,mBAAmB;AAE1D,aAAK,oBAAoB,KAAK,KAAK,KAAK,EAAE,WAAW,IAAI,IAAI;AAAA,UACzD,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,WAAW,IAAI;AAAA,UACzC;AAAA,UACA,SAAS;AAAA,UACT,SAAS,WAAW;AAAA,UACpB,KAAK,WAAW;AAAA,UAChB,OAAO,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;AAAA,UAC3B,WAAW,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;AAAA,UAC/B,UAAU;AAAA,UACV,YAAY;AAAA,QAChB;AAAA,MACJ;AAEA,aAAO,KAAK,oBAAoB,KAAK,KAAK,KAAK,EAAE,WAAW,IAAI;AAAA,IACpE;AAAA,IAEU,eACV;AAEI,WAAK,gBAAgB,KAAK;AAE1B,WAAK,eAAe;AAEpB,UAAI,KAAK;AAAe;AACxB,WAAK,gBAAgB;AAErB,YAAM,cAAc,KAAK,eAAe,KAAK;AAE7C,UAAI,aACJ;AACI,oBAAY,kBAAkB,IAAI;AAAA,MACtC;AAEA,WAAK,OAAO,YAAY,IAAI;AAAA,IAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASO,cAAc,MAA8B,WACnD;AACI,aAAO,KAAK,eAAe,IAAI;AAG/B,iBAAW,KAAK,KAAK,cACrB;AACI,YAAI,KAAK,aAAa,CAAC,GAAG,cAAc,WACxC;AACI,eAAK,iBAAiB,KAAK,aAAa,CAAC,EAAE,IAAI;AAAA,QACnD;AAAA,MACJ;AAEA,WAAK,iBAAiB,IAAI;AAE1B,gBAAU,iBAAiB;AAG3B,WAAK,SAAS,SAAS;AAEvB,WAAK,aAAa,KAAK,KAAK,IAAI,IAAI;AAAA,QAChC;AAAA,QACA;AAAA,MACJ;AAEA,WAAK,iBAAiB,KAAK,aAAa,KAAK,KAAK,IAAI,CAAC;AAAA,IAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQO,iBAAiB,iBACxB;AACI,UAAI;AAEJ,UAAI,2BAA2B,wBAC/B;AACI,mBAAW,KAAK,KAAK,cACrB;AACI,cAAI,KAAK,aAAa,CAAC,GAAG,cAAc,iBACxC;AACI,iBAAK,aAAa,CAAC,IAAI;AAEvB,gCAAoB;AACpB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,OAEA;AACI,cAAM,OAAO,KAAK,eAAe,eAAe;AAEhD,4BAAoB,KAAK,aAAa,KAAK,KAAK,IAAI,GAAG;AACvD,aAAK,aAAa,KAAK,KAAK,IAAI,IAAI;AAAA,MACxC;AAEA,UAAI,mBACJ;AACI,aAAK,YAAY,iBAAiB;AAElC,0BAAkB,iBAAiB;AAAA,MACvC;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQO,cAAc,MACrB;AACI,aAAO,KAAK,eAAe,IAAI;AAE/B,aAAO,KAAK,aAAa,KAAK,KAAK,IAAI,EAAE;AAAA,IAC7C;AAAA,IAEQ,eACR;AACI,WAAK,eAAe;AAEpB,WAAK,mBAAmB,IAAI,eAAe;AAE3C,YAAM,iBAAiB,KAAK;AAE5B,qBAAe,OAAO,KAAK,UAAU,IAAI;AAEzC,UAAI,eAAe,SAAS,UAC5B;AACI,aAAK,YAAY;AAEjB,cAAM,YAAY,KAAK,SAAS;AAChC,cAAM,SAAS,KAAK;AAEpB,eAAO,MAAM;AAEb,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KACtC;AACI,gBAAM,OAAO,UAAU,CAAC;AAExB,gBAAM,aAAa,KAAK,cAAc;AAEtC,cAAI,eAAe,sBAAsB,oBAAoB,sBAAsB,iBACnF;AACI,kBAAM,YAAY,KAAK,eAAe,MAAM,UAAU;AAEtD,mBAAO,cAAc,UAAU,UAAU,GAAG,UAAU,SAAS,MAAM;AAAA,UACzE;AAAA,QACJ;AAAA,MACJ,OAEA;AACI,aAAK,QAAQ,OAAO,eAAe;AACnC,aAAK,QAAQ,OAAO,eAAe;AACnC,aAAK,QAAQ,OAAO,eAAe;AACnC,aAAK,QAAQ,OAAO,eAAe;AAAA,MACvC;AAAA,IACJ;AAAA;AAAA,IAGA,UAAU,QACV;AACI,aAAO,UAAU,KAAK,MAAM;AAAA,IAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASgB,QAAQ,UAA0B,OAClD;AACI,YAAM,QAAQ,OAAO;AAErB,0BAAO,OAAO,OAAO,KAAK,gBAAgB,IAAI;AAC9C,WAAK,MAAM,eAAe;AAC1B,WAAK,QAAQ;AACb,WAAK,WAAW;AAChB,WAAK,QAAQ;AACb,MAAC,KAAK,eAAuB;AAC7B,WAAK,mBAAmB;AACxB,WAAK,sBAAsB;AAAA,IAC/B;AAAA;AAAA,IAGO,+BAA+B,OACtC;AACI,WAAK,eAAe,MAAM,OAAO,KAAK;AAAA,IAC1C;AAAA;AAAA,IAGO,+BAA+B,OACtC;AACI,WAAK,eAAe,aAAa,OAAO,KAAK;AAAA,IACjD;AAAA;AAAA,IAGO,2BAA2B,OAAiC,MACnE;AACI,WAAK,+BAA+B,KAAK;AACzC,UAAI,KAAK,QACT;AACI,aAAK,OAAO,aAAa,KAAgB;AAAA,MAC7C,OAEA;AACI,aAAK,aAAa,KAAgB;AAAA,MACtC;AAAA,IACJ;AAAA,IAEA,OAAO,KAAK,EAAE,UAAU,OAAO,QAAQ,EAAE,GACzC;AACI,YAAM,WAAW,GAAG,QAAQ,IAAI,KAAK,IAAI,KAAK;AAE9C,UAAI,mBAAM,IAAI,QAAQ,GACtB;AACI,eAAO,IAAI,OAAM,mBAAM,IAAkB,QAAQ,CAAC;AAAA,MACtD;AAEA,YAAM,gBAAgB,oBAAO,IAAsB,QAAQ;AAE3D,YAAM,aAAa,oBAAO,IAAkB,KAAK;AACjD,YAAM,mBAAmB,IAAI,sBAAsB,UAAU;AAE7D,YAAM,SACA,yBAAyB,aACrB,IAAI,eAAe,gBAAgB,IACnC,IAAI,aAAa,gBAAgB;AAG3C,aAAO,QAAQ;AACf,YAAM,eAAe,OAAO,iBAAiB,aAAa;AAE1D,yBAAM,IAAI,UAAU,YAAY;AAEhC,aAAO,IAAI,OAAM;AAAA,QACb;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;;;ACrzBA,MAAAC,eAA0C;AAuDnC,MAAM,qBAAN,MACP;AAAA,IACqB,mBAAoD,oBAAI,IAAI;AAAA,IAEtE,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,wBAAwB;AAAA,IACxB,aAAa;AAAA,IAEb,YAAY;AAAA,IACZ,yBAAyB;AAAA,IACzB,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,IAC3B,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,IAMjB,cAAc,OACrB;AACI,UAAI,KAAK,iBAAiB,IAAI,KAAK,GACnC;AACI,gBAAQ,KAAK,0EAA0E,KAAK;AAE5F;AAAA,MACJ;AACA,YAAM,sBAA2C;AAAA,QAC7C,sBAAsB,IAAI,uBAAU;AAAA,QACpC,OAAO,IAAI,uBAAU;AAAA,QACrB,YAAY,IAAI,sBAAS;AAAA,QACzB,wBAAwB,IAAI,sBAAS;AAAA,QACrC,mBAAmB,IAAI,sBAAS;AAAA,QAChC,cAAc,IAAI,sBAAS;AAAA,QAC3B,iBAAiB,IAAI,sBAAS;AAAA,QAC9B,mBAAmB,IAAI,sBAAS;AAAA,QAChC,qBAAqB,IAAI,sBAAS;AAAA,QAClC,sBAAsB,IAAI,sBAAS;AAAA,QACnC,YAAY,IAAI,sBAAS;AAAA,QACzB,WAAW,IAAI,sBAAS;AAAA,QACxB,WAAW,IAAI,uBAAU;AAAA,QACzB,eAAe;AAAA,UACX,OAAO,CAAC,GAAG,UACX;AACI,gBAAI,KAAK,YACT;AACI,oBAAM,QAAQ,KAAK,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM,KAAK,CAAC;AAC1D,oBAAM,OAAO,IAAI,kBAAK;AAAA,gBAClB,MAAM,MAAM,KAAK;AAAA,gBACjB,OAAO;AAAA,kBACH,UAAU,KAAK,gBAAgB;AAAA,kBAC/B,MAAM,KAAK;AAAA,kBACX,YAAY;AAAA,gBAChB;AAAA,cACJ,CAAC;AAED,mBAAK,MAAM,IAAI,KAAK,KAAK,MAAM,MAAM,CAAC;AACtC,mBAAK,OAAO,IAAI,GAAG;AACnB,kCAAoB,UAAU,SAAS,IAAI;AAC3C,yBAAW,MACX;AACI,oBAAI,CAAC,KAAK,WACV;AACI,uBAAK,QAAQ;AAAA,gBACjB;AAAA,cACJ,GAAG,GAAG;AAAA,YACV;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,0BAAoB,qBAAqB,SAAS,oBAAoB,KAAK;AAC3E,0BAAoB,qBAAqB,SAAS,oBAAoB,UAAU;AAChF,0BAAoB,qBAAqB,SAAS,oBAAoB,sBAAsB;AAC5F,0BAAoB,qBAAqB,SAAS,oBAAoB,iBAAiB;AACvF,0BAAoB,qBAAqB,SAAS,oBAAoB,YAAY;AAClF,0BAAoB,qBAAqB,SAAS,oBAAoB,eAAe;AACrF,0BAAoB,qBAAqB,SAAS,oBAAoB,iBAAiB;AACvF,0BAAoB,qBAAqB,SAAS,oBAAoB,mBAAmB;AACzF,0BAAoB,qBAAqB,SAAS,oBAAoB,oBAAoB;AAC1F,0BAAoB,qBAAqB,SAAS,oBAAoB,UAAU;AAChF,0BAAoB,qBAAqB,SAAS,oBAAoB,SAAS;AAC/E,0BAAoB,qBAAqB,SAAS,oBAAoB,SAAS;AAE/E,MAAC,oBAAoB,qBAA6B,SAAS;AAG3D,MAAC,oBAAoB,qBAA6B,qBAAqB;AACvE,MAAC,oBAAoB,qBAA6B,YAAY;AAC9D,MAAC,oBAAoB,qBAA6B,sBAAsB;AAExE,YAAM,SAAS,oBAAoB,oBAAoB;AAEvD,YAAM,MAAM,YAAY,oBAAoB,aAAa;AAEzD,WAAK,iBAAiB,IAAI,OAAO,mBAAmB;AAAA,IACxD;AAAA,IAEO,YAAY,OACnB;AACI,UAAI,CAAC,KAAK,iBAAiB,IAAI,KAAK,GACpC;AAEI,aAAK,cAAc,KAAK;AAAA,MAC5B;AAEA,YAAM,sBAAsB,KAAK,iBAAiB,IAAI,KAAK;AAE3D,UAAI,CAAC,qBACL;AACI;AAAA,MACJ;AACA,YAAM,SAAS,oBAAoB,oBAAoB;AAEvD,0BAAoB,WAAW,MAAM;AACrC,0BAAoB,uBAAuB,MAAM;AACjD,0BAAoB,kBAAkB,MAAM;AAC5C,0BAAoB,aAAa,MAAM;AACvC,0BAAoB,gBAAgB,MAAM;AAC1C,0BAAoB,kBAAkB,MAAM;AAC5C,0BAAoB,oBAAoB,MAAM;AAC9C,0BAAoB,qBAAqB,MAAM;AAC/C,0BAAoB,WAAW,MAAM;AACrC,0BAAoB,UAAU,MAAM;AAEpC,eAAS,MAAM,oBAAoB,MAAM,SAAS,QAAQ,MAAM,GAAG,OACnE;AACI,4BAAoB,MAAM,SAAS,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,MAAM,SAAS,MAAM,eAAe,KAAK,CAAC;AAAA,MAC9G;AAEA,YAAM,QAAQ,KAAK,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM,KAAK,CAAC;AAC1D,YAAM,YAAY,KAAK,YAAY;AAEnC,UAAI,KAAK,WACT;AACI,aAAK,cAAc,OAAO,qBAAqB,WAAW,KAAK;AAAA,MACnE;AAEA,UAAI,KAAK,WACT;AACI,aAAK,cAAc,OAAO,qBAAqB,SAAS;AAAA,MAC5D;AAEA,UAAI,KAAK,mBACT;AACI,aAAK,sBAAsB,OAAO,qBAAqB,SAAS;AAAA,MACpE;AAEA,UAAI,KAAK,cACT;AACI,aAAK,iBAAiB,OAAO,qBAAqB,SAAS;AAAA,MAC/D;AAEA,UAAI,KAAK,gBAAgB,KAAK,mBAC9B;AACI,aAAK,6BAA6B,OAAO,qBAAqB,SAAS;AAAA,MAC3E;AAEA,UAAI,KAAK,uBACT;AACI,aAAK,0BAA0B,OAAO,qBAAqB,SAAS;AAAA,MACxE;AAEA,UAAI,KAAK,YACT;AACI,mBAAW,SAAS,oBAAoB,UAAU,UAClD;AACI,gBAAM,SAAS;AACf,gBAAM,KAAK;AAAA,QACf;AAAA,MACJ;AAAA,IACJ;AAAA,IAEQ,cAAc,OAAc,qBAA0C,WAAmB,OACjG;AACI,YAAM,WAAW,MAAM;AACvB,YAAM,YAAY,SAAS;AAC3B,YAAM,YAAY,SAAS;AAC3B,YAAM,QAAQ,SAAS;AAEvB,0BAAoB,WAAW,cAAc,EAAE,OAAO,WAAW,OAAO,KAAK,gBAAgB;AAE7F,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAC7C;AACI,cAAM,OAAO,MAAM,CAAC;AACpB,cAAM,UAAU,KAAK,KAAK;AAC1B,cAAM,QAAQ,YAAY,KAAK;AAC/B,cAAM,QAAQ,YAAY,KAAK;AAC/B,cAAM,OAAO,YAAa,UAAU,KAAK,IAAK,KAAK;AACnD,cAAM,OAAO,YAAa,UAAU,KAAK,IAAK,KAAK;AAEnD,YAAI,KAAK,KAAK,SAAS,UAAU,KAAK,KAAK,WAAW,MACtD;AACI;AAAA,QACJ;AAEA,cAAM,IAAI,KAAK,IAAI,QAAQ,IAAI;AAC/B,cAAM,IAAI,KAAK,IAAI,QAAQ,IAAI;AAE/B,cAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,cAAM,IAAI;AACV,cAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,cAAM,IAAI,KAAK,KAAK,KAAK,EAAE;AAC3B,cAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,cAAM,MAAM,KAAK,KAAK;AAGtB,cAAM,IAAI,KAAK,MAAM,KAAK,KAAK,OAAO,IAAI,IAAI,EAAE,KAAK;AAErD,YAAI,MAAM,GACV;AACI;AAAA,QACJ;AAEA,cAAM,KAAK,IAAI,sBAAS;AAExB,4BAAoB,MAAM,SAAS,EAAE;AAGrC,cAAM,YAAY,IAAI,KAAK;AAE3B,WAAG,QACE,KAAK,CAAC,GAAG,GAAG,IAAI,WAAW,IAAK,YAAY,GAAI,GAAG,IAAI,WAAW,IAAI,WAAW,IAAK,YAAY,CAAE,CAAC,EACrG,KAAK,KAAK,UAAU;AACzB,WAAG,IAAI;AACP,WAAG,IAAI;AACP,WAAG,MAAM,IAAI;AAGb,YAAI,WAAW;AAEf,YAAI,QAAQ,QAAQ,QAAQ,MAC5B;AAEI,qBAAW,CAAC,IAAK,MAAM;AAAA,QAC3B,WACS,QAAQ,QAAQ,QAAQ,MACjC;AAEI,qBAAW,OAAO,MAAM;AAAA,QAC5B,WACS,QAAQ,QAAQ,QAAQ,MACjC;AAEI,qBAAW,CAAC;AAAA,QAChB,WACS,QAAQ,QAAQ,QAAQ,MACjC;AAEI,qBAAW;AAAA,QACf,WACS,UAAU,QAAQ,QAAQ,MACnC;AAEI,qBAAW,KAAK;AAAA,QACpB,WACS,UAAU,QAAQ,QAAQ,MACnC;AAEI,qBAAW,MAAM;AAAA,QACrB,WACS,UAAU,QAAQ,QAAQ,MACnC;AAEI,qBAAW,MAAM;AAAA,QACrB,WACS,UAAU,QAAQ,QAAQ,MACnC;AAEI,qBAAW;AAAA,QACf;AACA,WAAG,WAAW;AAGd,WAAG,OAAO,GAAG,GAAG,YAAY,GAAG,EAC1B,KAAK,EAAE,OAAO,GAAU,OAAO,IAAI,CAAC,EACpC,OAAO,EAAE,OAAO,WAAW,OAAO,KAAK,gBAAgB,CAAC;AAAA,MACjE;AAGA,YAAM,eAAe,YAAY;AAEjC,0BAAoB,WAAW,QAC1B,OAAO,YAAY,cAAc,YAAY,YAAY,EACzD,OAAO,YAAY,cAAc,YAAY,YAAY,EACzD,OAAO,YAAY,cAAc,YAAY,YAAY,EACzD,OAAO,YAAY,cAAc,YAAY,YAAY,EACzD,OAAO;AAAA,IAChB;AAAA,IAEQ,0BAA0B,OAAc,qBAA0C,WAC1F;AACI,YAAM,WAAW,MAAM;AACvB,YAAM,QAAQ,SAAS;AAEvB,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAC7C;AACI,cAAM,OAAO,MAAM,CAAC;AACpB,cAAM,aAAa,KAAK,cAAc;AAEtC,YAAI,eAAe,QAAQ,EAAE,sBAAsB,mBACnD;AACI;AAAA,QACJ;AAEA,cAAM,mBAAmB;AAEzB,cAAM,WAAW,IAAI,aAAa,CAAC;AAEnC,yBAAiB,qBAAqB,MAAM,UAAU,GAAG,CAAC;AAE1D,4BAAoB,uBAAuB,KAAK,MAAM,KAAK,SAAS,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,MACpF;AAEA,0BAAoB,uBAAuB,OAAO;AAAA,QAC9C,OAAO,KAAK;AAAA,QACZ,OAAO;AAAA,MACX,CAAC;AAAA,IACL;AAAA,IAEQ,6BAA6B,OAAc,qBAA0C,WAC7F;AACI,YAAM,WAAW,MAAM;AACvB,YAAM,QAAQ,SAAS;AAEvB,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAC7C;AACI,cAAM,OAAO,MAAM,CAAC;AAEpB,YAAI,CAAC,KAAK,KAAK,QACf;AACI;AAAA,QACJ;AACA,cAAM,aAAa,KAAK,cAAc;AAEtC,YAAI,eAAe,QAAQ,EAAE,sBAAsB,iBACnD;AACI;AAAA,QACJ;AAEA,cAAM,iBAAiB;AAEvB,cAAM,WAAW,IAAI,aAAa,eAAe,mBAAmB;AACpE,cAAM,YAAY,eAAe;AACjC,YAAI,aAAa,eAAe;AAEhC,uBAAe,qBAAqB,MAAM,GAAG,eAAe,qBAAqB,UAAU,GAAG,CAAC;AAE/F,YAAI,KAAK,mBACT;AACI,mBAASC,KAAI,GAAGC,OAAM,UAAU,QAAQD,KAAIC,MAAKD,MAAK,GACtD;AACI,kBAAM,KAAK,UAAUA,EAAC,IAAI;AAC1B,kBAAM,KAAK,UAAUA,KAAI,CAAC,IAAI;AAC9B,kBAAM,KAAK,UAAUA,KAAI,CAAC,IAAI;AAE9B,gCAAoB,kBAAkB,QACjC,OAAO,SAAS,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC,EACrC,OAAO,SAAS,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC,EACrC,OAAO,SAAS,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,UAC9C;AAAA,QACJ;AAGA,YAAI,KAAK,gBAAgB,aAAa,GACtC;AACI,wBAAc,cAAc,KAAK;AACjC,cAAI,QAAQ,SAAS,aAAa,CAAC;AACnC,cAAI,QAAQ,SAAS,aAAa,CAAC;AAEnC,mBAASA,KAAI,GAAGC,OAAM,YAAYD,KAAIC,MAAKD,MAAK,GAChD;AACI,kBAAM,IAAI,SAASA,EAAC;AACpB,kBAAM,IAAI,SAASA,KAAI,CAAC;AAExB,gCAAoB,aAAa,QAC5B,OAAO,GAAG,CAAC,EACX,OAAO,OAAO,KAAK;AACxB,oBAAQ;AACR,oBAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAEA,0BAAoB,aAAa,OAAO,EAAE,OAAO,WAAW,OAAO,KAAK,cAAc,CAAC;AACvF,0BAAoB,kBAAkB,OAAO,EAAE,OAAO,WAAW,OAAO,KAAK,mBAAmB,CAAC;AAAA,IACrG;AAAA,IAEA,iBAAiB,OAAc,qBAA0C,WACzE;AACI,YAAM,WAAW,MAAM;AACvB,YAAM,QAAQ,SAAS;AAEvB,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAC7C;AACI,cAAM,OAAO,MAAM,CAAC;AAEpB,YAAI,CAAC,KAAK,KAAK,QACf;AACI;AAAA,QACJ;AACA,cAAM,aAAa,KAAK,cAAc;AAEtC,YAAI,eAAe,QAAQ,EAAE,sBAAsB,qBACnD;AACI;AAAA,QACJ;AAEA,cAAM,qBAAqB;AAE3B,cAAM,KAAK,mBAAmB;AAC9B,cAAM,QAAQ,IAAI,aAAa,EAAE;AAEjC,2BAAmB,qBAAqB,MAAM,GAAG,IAAI,OAAO,GAAG,CAAC;AAChE,4BAAoB,gBAAgB,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,MAC9D;AAEA,0BAAoB,gBAAgB,OAAO;AAAA,QACvC,OAAO;AAAA,QAAW,OAAO,KAAK;AAAA,QAAsB,OAAO;AAAA,MAC/D,CAAC;AAAA,IACL;AAAA,IAEA,sBAAsB,OAAc,qBAA0C,WAC9E;AAEI,0BAAoB,kBAAkB,UAAU,WAAW,KAAK,wBAAwB,CAAC;AAEzF,YAAM,SAAS,IAAI,eAAe;AAElC,aAAO,OAAO,MAAM,UAAU,IAAI;AAElC,0BAAoB,kBACf,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,SAAS,GAAG,OAAO,UAAU,CAAC,EACpE,OAAO,EAAE,OAAO,WAAW,OAAO,KAAK,uBAAuB,CAAC;AAEpE,YAAM,WAAW,OAAO;AACxB,YAAM,cAAc,CAAC,iBAAoC,SAAkB,UAC3E;AACI,YAAI,QAAQ,GACZ;AACI,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC9D;AACA,cAAM,QAAiB,CAAC;AACxB,cAAM,UAAU,YAAY;AAE5B,iBAAS,IAAI,GAAG,MAAM,gBAAgB,QAAQ,IAAI,KAAK,KAAK,GAC5D;AACI,gBAAM,KAAK,gBAAgB,CAAC;AAC5B,gBAAM,KAAK,gBAAgB,IAAI,CAAC;AAGhC,8BAAoB,oBAAoB,UAAU,KAAK,wBAAwB;AAC/E,8BAAoB,oBAAoB,WAAW,IAAI,IAAI,OAAO;AAClE,8BAAoB,oBAAoB,KAAK,CAAC;AAE9C,gBAAM,KAAK,IAAI,EAAE;AAAA,QACrB;AAGA,4BAAoB,qBACf,KAAK,KAAK,EACV,KAAK;AAAA,UACF,OAAO,KAAK;AAAA,UACZ,OAAO;AAAA,QACX,CAAC,EACA,OAAO;AAAA,UACJ,OAAO;AAAA,UACP,OAAO,KAAK;AAAA,QAChB,CAAC;AAAA,MACT;AAEA,eAAS,IAAI,GAAG,MAAM,SAAS,QAAQ,IAAI,KAAK,KAChD;AACI,cAAM,UAAU,SAAS,CAAC;AAE1B,oBAAY,SAAS,GAAG,QAAQ,MAAM;AAAA,MAC1C;AAAA,IACJ;AAAA,IAEQ,cAAc,OAAc,qBAA0C,WAC9E;AACI,YAAM,WAAW,MAAM;AACvB,YAAM,QAAQ,SAAS;AAEvB,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAC7C;AACI,cAAM,OAAO,MAAM,CAAC;AAEpB,YAAI,CAAC,KAAK,KAAK,QACf;AACI;AAAA,QACJ;AACA,cAAM,aAAa,KAAK,cAAc;AAEtC,YAAI,eAAe,QAAQ,EAAE,sBAAsB,iBACnD;AACI;AAAA,QACJ;AAEA,cAAM,iBAAiB;AACvB,YAAI,KAAK,eAAe;AACxB,cAAM,QAAQ,IAAI,aAAa,EAAE;AAEjC,uBAAe,qBAAqB,MAAM,GAAG,IAAI,OAAO,GAAG,CAAC;AAC5D,YAAI,KAAK,MAAM,CAAC;AAChB,YAAI,KAAK,MAAM,CAAC;AAChB,YAAI,KAAK;AACT,YAAI,KAAK;AAET,YAAI,eAAe,QACnB;AACI,gBAAM,MAAM,MAAM,CAAC;AACnB,gBAAM,MAAM,MAAM,CAAC;AACnB,gBAAM,MAAM,MAAM,KAAK,CAAC;AACxB,gBAAM,MAAM,MAAM,KAAK,CAAC;AAExB,eAAK,MAAM,KAAK,CAAC;AACjB,eAAK,MAAM,KAAK,CAAC;AAGjB,8BAAoB,WAAW,OAAO,IAAI,EAAE;AAC5C,8BAAoB,WAAW,cAAc,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE;AAGvE,8BAAoB,UAAU,OAAO,IAAI,EAAE;AAC3C,8BAAoB,UAAU,OAAO,KAAK,GAAG;AAC7C,8BAAoB,UAAU,OAAO,IAAI,EAAE;AAC3C,8BAAoB,UAAU,OAAO,KAAK,GAAG;AAAA,QACjD;AACA,cAAM;AACN,iBAAS,KAAK,GAAG,KAAK,IAAI,MAAM,GAChC;AACI,gBAAM,MAAM,MAAM,EAAE;AACpB,gBAAM,MAAM,MAAM,KAAK,CAAC;AACxB,gBAAM,MAAM,MAAM,KAAK,CAAC;AACxB,gBAAM,MAAM,MAAM,KAAK,CAAC;AAExB,eAAK,MAAM,KAAK,CAAC;AACjB,eAAK,MAAM,KAAK,CAAC;AAEjB,8BAAoB,WAAW,OAAO,IAAI,EAAE;AAC5C,8BAAoB,WAAW,cAAc,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE;AAGvE,8BAAoB,UAAU,OAAO,IAAI,EAAE;AAC3C,8BAAoB,UAAU,OAAO,KAAK,GAAG;AAC7C,8BAAoB,UAAU,OAAO,IAAI,EAAE;AAC3C,8BAAoB,UAAU,OAAO,KAAK,GAAG;AAC7C,eAAK;AACL,eAAK;AAAA,QACT;AAAA,MACJ;AAEA,0BAAoB,WAAW,OAAO,EAAE,OAAO,WAAW,OAAO,KAAK,gBAAgB,CAAC;AACvF,0BAAoB,UAAU,OAAO,EAAE,OAAO,WAAW,OAAO,KAAK,eAAe,CAAC;AAAA,IACzF;AAAA,IAEO,gBAAgB,OACvB;AACI,UAAI,CAAC,KAAK,iBAAiB,IAAI,KAAK,GACpC;AACI,gBAAQ,KAAK,qFAAsF,KAAK;AAAA,MAC5G;AACA,YAAM,sBAAsB,KAAK,iBAAiB,IAAI,KAAK;AAE3D,UAAI,CAAC,qBACL;AACI;AAAA,MACJ;AAEA,YAAM,MAAM,eAAe,oBAAoB,aAAa;AAE5D,0BAAoB,qBAAqB,QAAQ,EAAE,eAAe,MAAM,UAAU,MAAM,SAAS,KAAK,CAAC;AACvG,WAAK,iBAAiB,OAAO,KAAK;AAAA,IACtC;AAAA,EACJ;", + "names": ["import_pixi", "v", "SequenceMode", "MixBlend", "MixDirection", "x", "y", "i", "vertexAttachment", "constraint", "i", "n", "timeline", "EventType", "TextureFilter", "TextureWrap", "page", "path", "path", "path", "Inherit", "s", "path", "PositionMode", "SpacingMode", "RotateMode", "path", "closed", "pathLength", "multiplier", "clipper", "Physics", "BlendMode", "darkColor", "path", "closed", "AttachmentType", "n", "path", "LinkedMesh", "readTimeline1", "readTimeline2", "timeline", "PixiTexture", "import_pixi", "import_pixi", "import_pixi", "import_pixi", "darkColor", "import_pixi", "darkColor", "import_pixi", "clipper", "import_pixi", "i", "len"] +} diff --git a/docs/BatchableSpineSlot.html b/docs/BatchableSpineSlot.html new file mode 100644 index 0000000..ddb61ac --- /dev/null +++ b/docs/BatchableSpineSlot.html @@ -0,0 +1,414 @@ + + + + + PixiJS Spine + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + +
+

Class: BatchableSpineSlot

+ + + +
+ +
+
+

+ BatchableSpineSlot + + +

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

+ + + + new BatchableSpineSlot + + + () + + + + +

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

Implements

+ +
    + + +
  • DefaultBatchableMeshElement
  • + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ +
+
+
+ + + + + + + + diff --git a/docs/DarkTintBatcher.html b/docs/DarkTintBatcher.html new file mode 100644 index 0000000..07d3200 --- /dev/null +++ b/docs/DarkTintBatcher.html @@ -0,0 +1,475 @@ + + + + + PixiJS Spine + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Class: DarkTintBatcher

+ + + +
+ +
+
+

+ DarkTintBatcher + + +

+ + +

The default batcher is used to batch quads and meshes.

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

+ + + + new DarkTintBatcher + + + () + + + + +

+ + +
+
+
+ +

The default batcher is used to batch quads and meshes.

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

Extends

+ +
    + + +
  • Batcher
  • + +
+ + + + + + + + + + + + + + + + + +

Members

+ + + +
+
+

+ + vertexSize + number + + + + +

+
+
+
+ +

The size of one attribute. 1 = 32 bit. x, y, u, v, color, darkColor, textureIdAndRound -> total = 7

+ + + + +
+ + + + + + + + + + + + + + + +
Default Value:
+
  • 7
+ + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ +
+
+
+ + + + + + + + diff --git a/docs/ISpineDebugRenderer.html b/docs/ISpineDebugRenderer.html new file mode 100644 index 0000000..5e12527 --- /dev/null +++ b/docs/ISpineDebugRenderer.html @@ -0,0 +1,601 @@ + + + + + PixiJS Spine + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Interface: ISpineDebugRenderer

+ + + +
+ +
+
+

+ ISpineDebugRenderer + + +

+ + + +

Make a class that extends from this interface to create your own debug renderer.

+ +
+
+ +
+
+ + + +
+ + +
Properties:
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
registerSpine + + (spine: Spine) => void + + +

This is called when the spine.debug object is set to a new instance of a debug renderer.

+ + +
renderDebug + + (spine: Spine) => void + + +

This will be called every frame, after the spine has been updated.

+ + +
unregisterSpine + + (spine: Spine) => void + + +

This is called when the spine.debug object is set to null or when the spine is destroyed.

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

Members

+ + + +
+
+

+ + registerSpine + (spine: Spine) => void + + + + +

+
+
+
+ +

This is called when the spine.debug object is set to a new instance of a debug renderer.

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

+ + renderDebug + (spine: Spine) => void + + + + +

+
+
+
+ +

This will be called every frame, after the spine has been updated.

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

+ + unregisterSpine + (spine: Spine) => void + + + + +

+
+
+
+ +

This is called when the spine.debug object is set to null or when the spine is destroyed.

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+ +
+
+
+ + + + + + + + diff --git a/docs/Spine.html b/docs/Spine.html new file mode 100644 index 0000000..6ff2267 --- /dev/null +++ b/docs/Spine.html @@ -0,0 +1,1845 @@ + + + + + PixiJS Spine + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Class: Spine

+ + + +
+ +
+
+

+ Spine + + +

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

Extends

+ +
    + + +
  • ViewContainer
  • + +
+ + + + + + + + + + + + + + + + + + + + + + + +

Methods

+ + + +
+
+

+ + + + _applyState + + + () + + + + +

+ + +
+
+
+ + +
+

Applies the state to this spine instance.

+
    +
  • updates the state to the skeleton
  • +
  • updates its world transform (spine world transform)
  • +
  • validates the attachments - to flag if the attachments have changed this state
  • +
  • transforms the attachments - to update the vertices of the attachments based on the new positions
  • +
  • update the slot attachments - to update the position, rotation, scale, and visibility of the attached containers
  • +
+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + +
+
+

+ + + + _getCachedData + + + (slot, attachment) AttachmentCacheData + + + + +

+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
slot + + Slot + + + + +
attachment + + RegionAttachment | MeshAttachment + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
Returns:
+ + + + + + + + + + + + + + + + + + + + +
TypeDescription
+ + AttachmentCacheData + +
+ + + + + +
+ + + +
+
+

+ + + + _updateState + + + (time) + + + + +

+ + +
+
+
+ + +
+

Will update the state based on the specified time, this will not apply the state to the skeleton +as this is differed until the applyState method is called.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
time + + number + + +

the time at which to set the state

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

+ + + + addBounds + + + (bounds) + + + + +

+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
bounds + + Bounds + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + +
+
+

+ + + + addSlotObject + + + (container, slotRef) + + + + +

+ + +
+
+
+ + +
+

Attaches a PixiJS container to a specified slot. This will map the world transform of the slots bone +to the attached container. A container can only be attached to one slot at a time.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
container + + number | string | Slot + + +

The container to attach to the slot

+ +
slotRef + + Container + + +

The slot id or slot to attach to

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

+ + + + destroy + + + (options) + + + + +

+ + +
+
+
+ + +
+

Destroys this sprite renderable and optionally its texture.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
options + + DestroyOptions + + + + + + + + + + false + + +

Options parameter. A boolean will act as if all options +have been set to that value

+ +
options.texture + + boolean + + + + <optional>
+ + + + + +
+ + false + + +

Should it destroy the current texture of the renderable as well

+ +
options.textureSource + + boolean + + + + <optional>
+ + + + + +
+ + false + + +

Should it destroy the textureSource of the renderable as well

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

+ + + + getSlotObject + + + (slotRef) + + + + +

+ + +
+
+
+ +

Returns a container attached to a slot, or undefined if no container is attached.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
slotRef + + number | string | Slot + + +

The slot id or slot to get the attachment from

+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
Returns:
+ + + + +
    +
  • The container attached to the slot
  • +
+ + + + + + +
+ + + +
+
+

+ + + + pixiWorldCoordinatesToBone + + + (point, bone) + + + + +

+ + +
+
+
+ +

Converts a point from the Pixi world coordinate system to the bone's local coordinate system.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
point + + { x : number, y : number } + + + + +
bone + + Bone + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + +
+
+

+ + + + pixiWorldCoordinatesToSkeleton + + + (point) + + + + +

+ + +
+
+
+ +

Converts a point from the Pixi world coordinate system to the skeleton coordinate system.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
point + + { x : number, y : number } + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + +
+
+

+ + + + removeSlotObject + + + (container, slotOrContainer) + + + + +

+ + +
+
+
+ +

Removes a PixiJS container from the slot it is attached to.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
container + + number | string | Slot | Container + + +

The container to detach from the slot

+ +
slotOrContainer + + +

The container, slot id or slot to detach from

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

+ + + + skeletonToPixiWorldCoordinates + + + (point) + + + + +

+ + +
+
+
+ +

Converts a point from the skeleton coordinate system to the Pixi world coordinate system.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
point + + { x : number, y : number } + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + +
+ +
+
+
+ + + + + + + + diff --git a/docs/SpineDebugRenderer.html b/docs/SpineDebugRenderer.html new file mode 100644 index 0000000..162da65 --- /dev/null +++ b/docs/SpineDebugRenderer.html @@ -0,0 +1,542 @@ + + + + + PixiJS Spine + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Class: SpineDebugRenderer

+ + + +
+ +
+
+

+ SpineDebugRenderer + + +

+ + + +

This is a debug renderer that uses PixiJS Graphics under the hood.

+ +
+
+ +
+
+ + +
+
+

+ + + + new SpineDebugRenderer + + + () + + + + +

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

Implements

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

Methods

+ + + +
+
+

+ + + + registerSpine + + + (spine) void + + + + +

+ + +
+
+
+ + +
+

The debug is attached by force to each spine object. +So we need to create it inside the spine when we get the first update

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
spine + + Spine + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ +
+ + + + + + + +
+ +
+
+
+ + + + + + + + diff --git a/docs/fonts/OpenSans-Bold.svg b/docs/fonts/OpenSans-Bold.svg new file mode 100644 index 0000000..464e984 --- /dev/null +++ b/docs/fonts/OpenSans-Bold.svg @@ -0,0 +1,958 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Bold.ttf b/docs/fonts/OpenSans-Bold.ttf new file mode 100644 index 0000000..cf53e6e Binary files /dev/null and b/docs/fonts/OpenSans-Bold.ttf differ diff --git a/docs/fonts/OpenSans-Bold.woff b/docs/fonts/OpenSans-Bold.woff new file mode 100644 index 0000000..c668e45 Binary files /dev/null and b/docs/fonts/OpenSans-Bold.woff differ diff --git a/docs/fonts/OpenSans-Bold.woff2 b/docs/fonts/OpenSans-Bold.woff2 new file mode 100644 index 0000000..c80b2d2 Binary files /dev/null and b/docs/fonts/OpenSans-Bold.woff2 differ diff --git a/docs/fonts/OpenSans-BoldItalic.svg b/docs/fonts/OpenSans-BoldItalic.svg new file mode 100644 index 0000000..cc73325 --- /dev/null +++ b/docs/fonts/OpenSans-BoldItalic.svg @@ -0,0 +1,958 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-BoldItalic.ttf b/docs/fonts/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000..11d107b Binary files /dev/null and b/docs/fonts/OpenSans-BoldItalic.ttf differ diff --git a/docs/fonts/OpenSans-BoldItalic.woff b/docs/fonts/OpenSans-BoldItalic.woff new file mode 100644 index 0000000..ced8f69 Binary files /dev/null and b/docs/fonts/OpenSans-BoldItalic.woff differ diff --git a/docs/fonts/OpenSans-BoldItalic.woff2 b/docs/fonts/OpenSans-BoldItalic.woff2 new file mode 100644 index 0000000..60d8de4 Binary files /dev/null and b/docs/fonts/OpenSans-BoldItalic.woff2 differ diff --git a/docs/fonts/OpenSans-Italic.svg b/docs/fonts/OpenSans-Italic.svg new file mode 100644 index 0000000..f773016 --- /dev/null +++ b/docs/fonts/OpenSans-Italic.svg @@ -0,0 +1,958 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Italic.ttf b/docs/fonts/OpenSans-Italic.ttf new file mode 100644 index 0000000..a309327 Binary files /dev/null and b/docs/fonts/OpenSans-Italic.ttf differ diff --git a/docs/fonts/OpenSans-Italic.woff b/docs/fonts/OpenSans-Italic.woff new file mode 100644 index 0000000..1ed8ab9 Binary files /dev/null and b/docs/fonts/OpenSans-Italic.woff differ diff --git a/docs/fonts/OpenSans-Italic.woff2 b/docs/fonts/OpenSans-Italic.woff2 new file mode 100644 index 0000000..440b74c Binary files /dev/null and b/docs/fonts/OpenSans-Italic.woff2 differ diff --git a/docs/fonts/OpenSans-Light.svg b/docs/fonts/OpenSans-Light.svg new file mode 100644 index 0000000..e481f2c --- /dev/null +++ b/docs/fonts/OpenSans-Light.svg @@ -0,0 +1,958 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Light.ttf b/docs/fonts/OpenSans-Light.ttf new file mode 100644 index 0000000..dddcc62 Binary files /dev/null and b/docs/fonts/OpenSans-Light.ttf differ diff --git a/docs/fonts/OpenSans-Light.woff b/docs/fonts/OpenSans-Light.woff new file mode 100644 index 0000000..937323d Binary files /dev/null and b/docs/fonts/OpenSans-Light.woff differ diff --git a/docs/fonts/OpenSans-Light.woff2 b/docs/fonts/OpenSans-Light.woff2 new file mode 100644 index 0000000..d0b43e0 Binary files /dev/null and b/docs/fonts/OpenSans-Light.woff2 differ diff --git a/docs/fonts/OpenSans-LightItalic.svg b/docs/fonts/OpenSans-LightItalic.svg new file mode 100644 index 0000000..162f95c --- /dev/null +++ b/docs/fonts/OpenSans-LightItalic.svg @@ -0,0 +1,958 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-LightItalic.ttf b/docs/fonts/OpenSans-LightItalic.ttf new file mode 100644 index 0000000..9338bd9 Binary files /dev/null and b/docs/fonts/OpenSans-LightItalic.ttf differ diff --git a/docs/fonts/OpenSans-LightItalic.woff b/docs/fonts/OpenSans-LightItalic.woff new file mode 100644 index 0000000..bc83d1d Binary files /dev/null and b/docs/fonts/OpenSans-LightItalic.woff differ diff --git a/docs/fonts/OpenSans-LightItalic.woff2 b/docs/fonts/OpenSans-LightItalic.woff2 new file mode 100644 index 0000000..21a92a7 Binary files /dev/null and b/docs/fonts/OpenSans-LightItalic.woff2 differ diff --git a/docs/fonts/OpenSans-Regular.svg b/docs/fonts/OpenSans-Regular.svg new file mode 100644 index 0000000..067c09c --- /dev/null +++ b/docs/fonts/OpenSans-Regular.svg @@ -0,0 +1,958 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Regular.ttf b/docs/fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000..a135120 Binary files /dev/null and b/docs/fonts/OpenSans-Regular.ttf differ diff --git a/docs/fonts/OpenSans-Regular.woff b/docs/fonts/OpenSans-Regular.woff new file mode 100644 index 0000000..bd0f824 Binary files /dev/null and b/docs/fonts/OpenSans-Regular.woff differ diff --git a/docs/fonts/OpenSans-Regular.woff2 b/docs/fonts/OpenSans-Regular.woff2 new file mode 100644 index 0000000..f778f9c Binary files /dev/null and b/docs/fonts/OpenSans-Regular.woff2 differ diff --git a/docs/fonts/glyphicons-halflings-regular.eot b/docs/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.eot differ diff --git a/docs/fonts/glyphicons-halflings-regular.svg b/docs/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/docs/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/glyphicons-halflings-regular.ttf b/docs/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.ttf differ diff --git a/docs/fonts/glyphicons-halflings-regular.woff b/docs/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.woff differ diff --git a/docs/fonts/glyphicons-halflings-regular.woff2 b/docs/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/docs/icons/chevron-down.svg b/docs/icons/chevron-down.svg new file mode 100644 index 0000000..0ba78a5 --- /dev/null +++ b/docs/icons/chevron-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..77bdedc --- /dev/null +++ b/docs/index.html @@ -0,0 +1,270 @@ + + + + + PixiJS Spine + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Home

+ + + + + + + +
+

@pixi/spine-pixi

+

This repo is a port of the @esotericsoftware/spine-pixi runtime to PixiJS v8.

+

Once all features are ported we will look to add this into the esotericsoftware repo.

+

🚨 WARNING: Missing Features 🚨

+
    +
  • Ability to set dark tint
  • +
  • Debug renderer has not been fully tested so YMMV
  • +
  • iife bundle not tested
  • +
+
+
+ + + + + + + + + +
+ +
+
+
+ + + + + + + + diff --git a/docs/scripts/Apache-License-2.0.txt b/docs/scripts/Apache-License-2.0.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/docs/scripts/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/scripts/bootstrap.min.js b/docs/scripts/bootstrap.min.js new file mode 100644 index 0000000..1a6258e --- /dev/null +++ b/docs/scripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.0.3 (http://getbootstrap.com) + * Copyright 2013 Twitter, Inc. + * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + */ + +if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); \ No newline at end of file diff --git a/docs/scripts/jquery.min.js b/docs/scripts/jquery.min.js new file mode 100644 index 0000000..9a85bd3 --- /dev/null +++ b/docs/scripts/jquery.min.js @@ -0,0 +1,6 @@ +/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/ +(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t) +};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("