diff --git a/includes/demos/P5L_snippets-v2.json b/includes/demos/P5L_snippets-v2.json index 9ab474f..22d784e 100644 --- a/includes/demos/P5L_snippets-v2.json +++ b/includes/demos/P5L_snippets-v2.json @@ -1,66 +1,72 @@ { - "new" : { - "gt": "", - "s": "", - "dt": "", - "db": "", - "gb": "", - "demo": "true" - } - ,"audio": { + "new": { "gt": "", - "s": "setupAudio(true) // global vars\n// a5.ease = .075 // set easing", - "dt": "/* audio vars: amp, ampEase, fft, fftEase, waveform, waveformEase */\nupdateAudio()", - "db": "", - "gb": "", + "s": "", + "dt": "", + "db": "", + "gb": "", "demo": "true" - } - ,"font": { + }, + "audio": { + "gt": "", + "s": "setupAudio(true) // global vars\n// a5.ease = .075 // set easing", + "dt": "/* audio vars: amp, ampEase, fft, fftEase, waveform, waveformEase */\nupdateAudio()", + "db": "", + "gb": "", + "demo": "true" + }, + "font": { "gt": "let font\n\nfunction preload() {\n\tfont = loadFont(\"includes/demos-data/fonts/RobotoMono-Regular.otf\")\n}", "s": "textFont(font)", "dt": "", "db": "", "gb": "", "demo": "true" - } - ,"osc": { + }, + "osc": { "gt": "let libs = [\"includes/js/socket.io.js\"];\nlet socket;", "s": "setupOsc('127.0.0.1', 12000, 12001); // oscHost, oscPortIn, oscPortOut", "dt": "", "db": "", "gb": "\n// OSC LOGIC \nfunction receiveOsc(address, value) {\n\t// print('in: ' + address + ', ' +value)\n}\n\nfunction sendOsc(address, value) {\n\tif(socket != undefined) {\n\t\tsocket.emit('message', [address].concat(value));\n\t}\n}\n\nfunction setupOsc(oscHost, oscPortIn, oscPortOut) {\n\tsocket = io.connect('http://127.0.0.1:8082');\n\tsocket.on('connect', function() {\n\t\tsocket.emit('config', {\n\t\t\tserver: {\n\t\t\t\thost: oscHost,\n\t\t\t\tport: oscPortIn\n\t\t\t},\n\t\t\tclient: {\n\t\t\t\thost: oscHost,\n\t\t\t\tport: oscPortOut\n\t\t\t}\n\t\t});\n\t\tprint('OSC Ready!\\n' + oscHost + ', listen: ' + oscPortIn + ', send: ' + oscPortOut);\n\t});\n\tsocket.on('message', function(msg) {\n\t\treceiveOsc(msg[0], msg.splice(1));\n\t});\n}", "demo": "true" - } - ,"midi":{ + }, + "midi": { "gt": "", - "s": "// setup MIDI in/out by ID # or \"name\" (see console.log)\nsetupMidi(0, 0, true) // in, out, globalvars (if false use: midi5. )\n// midi5.debug = ['note', 'controlchange'] // send to console", - "dt": "/* vars: note, cc, notes[], ccs[], channels[], */\nupdateMidi()\n", - "db": "", - "gb": "" - } - ,"hydra-overlay": { + "s": "// setup MIDI in/out by ID # or \"name\" (see console.log)\nsetupMidi(0, 0, true) // in, out, globalvars (if false use: midi5. )\n// midi5.debug = ['note', 'controlchange'] // send to console", + "dt": "/* vars: note, cc, notes[], ccs[], channels[], */\nupdateMidi()\n", + "db": "", + "gb": "" + }, + "hydra-overlay": { "gt": "let libs = ['https://unpkg.com/hydra-synth', 'includes/libs/hydra-synth.js']\n\nlet pg, hc = document.createElement('canvas')\nhc.width = window.innerWidth\nhc.height = window.innerHeight\ndocument.body.appendChild(hc)\n\nlet hydra = new Hydra({\n\tdetectAudio: false,\n\tcanvas: hc\n})\n\n// sandbox - start\nsrc(s0)\n\t.modulate(osc(10))\n\t.out()\n// sandbox - stop\n", "s": "\t// var cnv = createCanvas(windowWidth, windowHeight)\n\t// cnv.hide() // hide p5 canvas to fix mouseY issue\n\n\ts0.init({src: drawingContext.canvas})\n\tpg = createGraphics(hc.width, hc.height)", "dt": "\n\tpg.drawingContext.drawImage(hc, 0, 0, pg.width, pg.height) // hydra as image", "db": "", "gb": "function keyPressed() {\n\tif(key == 'S') {\n\t\tpg.save('P5LIVE_hydra.png') // save hydra texture\n\t}\n}", "demo": "true" - } - ,"HY5_p5_hydra": { + }, + "HY5_p5_hydra": { "gt": "let libs = ['https://unpkg.com/hydra-synth', 'includes/libs/hydra-synth.js', 'https://cdn.jsdelivr.net/gh/ffd8/hy5@main/hy5.js', 'includes/libs/hy5.js']\n\n// sandbox - start\nH.pixelDensity(1) // 2 = retina, set <= 1 if laggy\n\ns0.initP5() // send p5 to hydra\n// P5.toggle(0) // optionally hide p5\n\nsrc(s0)\n\t// .modulate(noize())\n\t.out()\n// sandbox - end\n", "s": "", "dt": "", "db": "", "gb": "", "demo": "true" - } - ,"HY5_hydra_p5": { + }, + "HY5_hydra_p5": { "gt": "let libs = ['https://unpkg.com/hydra-synth', 'includes/libs/hydra-synth.js', 'https://cdn.jsdelivr.net/gh/ffd8/hy5@main/hy5.js', 'includes/libs/hy5.js']\n\n// sandbox - start\n// H.pixelDensity(2) // 2 = retina, set <= 1 if laggy\n// H.toggle(0) // hide hydra\nP5.zIndex(1) // set p5 above hydra\ns0.initP5() // bring p5 into hydra\n\nosc()\n\t.out()\n// sandbox - end\n", "s": "// createCanvas(windowWidth, windowHeight, WEBGL) // for 3D texture/shapes", "dt": "let tex = H.get()\n// texture(tex)\n// sphere(height/3) // use WEBGL in setup\n", "db": "", "gb": "", "demo": "true" - } -} - + }, + "p5.asciify-no_hooks": { + "gt": "/*\n\tp5.asciify live coding guide: https://p5.textmode.art/docs/guides/livecoding\n\tp5.asciify API docs: https://p5.textmode.art/docs/api/\n */\n\nlet libs = [\n\t'https://cdn.jsdelivr.net/npm/p5.asciify/dist/p5.asciify.umd.min.js',\n\t//...\n]\n\n// Set the error level for `p5.asciify`\n// https://p5.textmode.art/docs/api/p5.asciify/namespaces/errors/enumerations/P5AsciifyErrorLevel\np5asciify.setErrorLevel(P5AsciifyErrorLevel.WARNING);\n\n// Disable p5.asciify hooks attached to the p5.js lifecycle\n// We handle this manually, otherwise there would be usage-restricting quirks, \n// like not being able to update potential drawings on top of the asciified canvas without hard compiles.\np5asciify.deactivateHook(\"afterSetup\");\np5asciify.deactivateHook(\"pre\");\np5asciify.deactivateHook(\"post\");\n\n// Define variables that'll contain p5.asciify objects for easy access\nlet asciifier;\nlet brightnessRenderer;\nlet edgeRenderer;", + "s": "// Make sure to create a WEBGL canvas for 'p5.asciify' to work\ncreateCanvas(windowWidth, windowHeight, WEBGL);\n\n// Set up p5.asciify manually\np5asciify.setup();\n\n// `setupAsciify` area\n// From here, and throughout the draw loop, \n// you can access and modify everything p5.asciify has to offer\nasciifier = p5asciify.asciifier();\nbrightnessRenderer = asciifier.renderers().get(\"brightness\");\nedgeRenderer = asciifier.renderers().get(\"edge\");", + "dt": "// Update properties of the p5.asciify renderers during run-time\nbrightnessRenderer.update({\n\tenabled: true,\n\tcharacters: \" .:-=+*#%@\",\n\tcharacterColor: \"#ffffff\",\n\tcharacterColorMode: 'sampled', // or 'fixed'\n\tbackgroundColor: \"#000000\",\n\tbackgroundColorMode: 'fixed', // or 'sampled'\n\tinvertMode: false,\n\trotationAngle: 0, // in degrees\n\tflipHorizontally: false,\n\tflipVertically: false,\n\tbrightnessRange: [0, 255],\n});\n \nedgeRenderer.update({\n enabled: false,\n characters: \"-/|\\\\-/|\\\\\", // should be 8 characters ideally\n characterColor: \"#FFFFFF\",\n characterColorMode:\"sampled\", // or 'fixed'\n backgroundColor: \"#000000\",\n backgroundColorMode: \"fixed\", // or 'sampled'\n invertMode: false,\n sobelThreshold: 0.5,\n sampleThreshold: 16,\n rotationAngle: 0, // in degrees\n flipHorizontally: false,\n flipVertically: false,\n});\n\n// Update properties of the asciifier itself.\nasciifier.fontSize(16);\n\n// Capture the content to asciify inside p5.asciify's `sketchFramebuffer`\np5asciify.sketchFramebuffer.begin();\n\nclear();\nfill(255);\nrotateX(radians(frameCount * 3));\nrotateZ(radians(frameCount));\ndirectionalLight(255, 255, 255, 0, 0, -1);\nbox(800, 100, 100);", + "db": "// End capturing the content to asciify.\np5asciify.sketchFramebuffer.end();\n\n// Call `asciify()` manually to generate the asciified textures\np5asciify.asciify();\n\n// `drawAsciify` area\n// With the asciified textures drawn to the canvas, we can draw on top here", + "gb": "" + } +} \ No newline at end of file diff --git a/includes/libs/p5.asciify.js b/includes/libs/p5.asciify.js new file mode 100644 index 0000000..4f8e38b --- /dev/null +++ b/includes/libs/p5.asciify.js @@ -0,0 +1,413 @@ +(function(f,h){typeof exports=="object"&&typeof module<"u"?h(exports,require("p5")):typeof define=="function"&&define.amd?define(["exports","p5"],h):(f=typeof globalThis<"u"?globalThis:f||self,h((f.p5=f.p5||{},f.p5.asciify={}),f.p5))})(this,function(f,h){"use strict";var LA=Object.defineProperty;var WA=(f,h,T)=>h in f?LA(f,h,{enumerable:!0,configurable:!0,writable:!0,value:T}):f[h]=T;var o=(f,h,T)=>WA(f,typeof h!="symbol"?h+"":h,T);class T{constructor(A,e,r){o(this,"_cols");o(this,"_rows");o(this,"_width");o(this,"_height");o(this,"_offsetX");o(this,"_offsetY");o(this,"_fixedDimensions",!1);this._texture=A,this._cellWidth=e,this._cellHeight=r,this.reset()}reset(){this._fixedDimensions||([this._cols,this._rows]=[Math.floor(this._texture.width/this._cellWidth),Math.floor(this._texture.height/this._cellHeight)]),this._resizeGrid()}_resizeGrid(){this._width=this._cols*this._cellWidth,this._height=this._rows*this._cellHeight,this._offsetX=Math.floor((this._texture.width-this._width)/2),this._offsetY=Math.floor((this._texture.height-this._height)/2)}resizeCellPixelDimensions(A,e){[this._cellWidth,this._cellHeight]=[A,e],this.reset()}resizeGridDimensions(A,e){this._fixedDimensions=!0,[this._cols,this._rows]=[A,e],this._resizeGrid()}resetGridDimensions(){this._fixedDimensions=!1,this.reset()}updateTexture(A){this._texture=A,this._fixedDimensions?this._resizeGrid():this.reset()}get cellWidth(){return this._cellWidth}get cellHeight(){return this._cellHeight}get cols(){return this._cols}get rows(){return this._rows}get width(){return this._width}get height(){return this._height}get offsetX(){return this._offsetX}get offsetY(){return this._offsetY}get fixedDimensions(){return this._fixedDimensions}set fixedDimensions(A){this._fixedDimensions=A}}const $=g=>{const A=[()=>g==null?void 0:g.VERSION,()=>typeof h<"u"&&h.VERSION?h.VERSION:void 0,()=>{var e;return typeof window<"u"&&((e=window.p5)!=null&&e.VERSION)?window.p5.VERSION:void 0},()=>{var e;return(e=g==null?void 0:g.constructor)==null?void 0:e.VERSION},()=>{var e,r;return(r=(e=Object.getPrototypeOf(g))==null?void 0:e.constructor)==null?void 0:r.VERSION}];for(const e of A)try{const r=e();if(r&&typeof r=="string"&&/^\d+\.\d+/.test(r))return r}catch{continue}return"1.0.0"},R=g=>J(g,"2.0.0")>=0,O=(g,A)=>{var e;return A?!!((e=g==null?void 0:g.constructor)!=null&&e.Color&&A instanceof g.constructor.Color||typeof h<"u"&&h.Color&&A instanceof h.Color):!1},mA=(g,A)=>{var e;return A?!!((e=g==null?void 0:g.constructor)!=null&&e.Font&&A instanceof g.constructor.Font||typeof h<"u"&&h.Font&&A instanceof h.Font):!1},J=(g,A)=>{const[e,r]=[g,A].map(t=>t.split(".").map(Number));for(let t=0;ts?1:-1}return 0};class tA{constructor(A){o(this,"_p");this._p=A}generateSVG(A,e,r,t,i={}){const s={includeBackgroundRectangles:!0,drawMode:"fill",strokeWidth:1,...i},n=A.characterFramebuffer,E=A.primaryColorFramebuffer,Q=A.secondaryColorFramebuffer,c=A.transformFramebuffer,d=A.rotationFramebuffer;n.loadPixels(),E.loadPixels(),Q.loadPixels(),c.loadPixels(),d.loadPixels();const I=n.pixels,u=E.pixels,l=Q.pixels,P=c.pixels,B=d.pixels,_=e.cols,C=e.rows,w=e.cellWidth,m=e.cellHeight,b=e.width,H=e.height,S=r.characters;let M=this.generateSVGHeader(b,H);if(s.includeBackgroundRectangles){const V=t,x=this._p.color(V),p=`rgba(${x._array[0]*255},${x._array[1]*255},${x._array[2]*255},${x._array[3]})`;M+=` +`}M+=` +`;let D=0;for(let V=0;V=S.length&&(y=S.length-1);let L={r:u[p],g:u[p+1],b:u[p+2],a:u[p+3]},W={r:l[p],g:l[p+1],b:l[p+2],a:l[p+3]};const EA=P[p],rA=P[p+1],lA=P[p+2],hA=EA===255,cA=rA===255,dA=lA===255;if(hA){const jA=L;L=W,W=jA}const fA=B[p],uA=B[p+1],CA=fA+uA/255,DA=Math.round(CA*360/255*100)/100,_A=x*w,JA=V*m;M+=this.generateSVGCellContent(y,L,W,_A,JA,w,m,DA,cA,dA,r,S[y],s),D++}return M+=` + +`,M}saveSVG(A,e,r,t,i){if(!i.filename){const n=new Date,E=n.toISOString().split("T")[0],Q=n.toTimeString().split(" ")[0].replace(/:/g,"-");i.filename=`asciify_output_${E}_${Q}`}const s=this.generateSVG(A,e,r,t,i);this.downloadSVG(s,i.filename)}generateSVGHeader(A,e){return` + + +ascii art generated via p5.asciify +ascii art visualization of a p5.js sketch`}generateSVGCellContent(A,e,r,t,i,s,n,E,Q,c,d,I,u){let l="";if(u.includeBackgroundRectangles&&r.a>0){const m=`rgba(${r.r},${r.g},${r.b},${r.a/255})`;u.drawMode==="stroke"?l+=` + `:l+=` + `}const P=t+s/2,B=i+n/2,_=`rgba(${e.r},${e.g},${e.b},${e.a/255})`,C=[];if(Q||c){const m=Q?-1:1,b=c?-1:1;C.push(`translate(${P} ${B})`),C.push(`scale(${m} ${b})`),C.push(`translate(${-P} ${-B})`)}E&&C.push(`rotate(${E} ${P} ${B})`);const w=C.length?` transform="${C.join(" ")}"`:"";if(u.drawMode==="text"){const m=Math.min(s,n)*.8;l+=` + ${this.escapeXml(I.character)}`}else{let m=1;R($(this._p))?m=d.fontSize/d.font.data.head.unitsPerEm:m=d.fontSize/d.font.font.unitsPerEm;const b=t+(s-I.advanceWidth*m)/2,H=i+(n+d.fontSize*.7)/2,D=I.getPath(b,H,d.fontSize).toSVG().match(/d="([^"]+)"/);if(D&&D[1]){if(w&&(l+=` + `),u.drawMode==="stroke"){const V=u.strokeWidth||1,x=`path-${A}-${t}-${i}`.replace(/\./g,"-");l+=` + `}else l+=` + `;w&&(l+=` + `)}}return l}escapeXml(A){return A.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}downloadSVG(A,e){const r=new Blob([A],{type:"image/svg+xml"}),t=URL.createObjectURL(r),i=document.createElement("a");i.href=t,i.download=`${e}.svg`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}}class iA{constructor(A){o(this,"p");this.p=A}generateJSON(A,e,r,t={}){const i={includeEmptyCells:!0,prettyPrint:!0,...t},s=A.characterFramebuffer,n=A.primaryColorFramebuffer,E=A.secondaryColorFramebuffer,Q=A.transformFramebuffer,c=A.rotationFramebuffer;s.loadPixels(),n.loadPixels(),E.loadPixels(),Q.loadPixels(),c.loadPixels();const d=s.pixels,I=n.pixels,u=E.pixels,l=Q.pixels,P=c.pixels,B=e.cols,_=e.rows,C=r.characters,w={version:"1.0",created:new Date().toISOString(),gridSize:{cols:B,rows:_,cellWidth:e.cellWidth,cellHeight:e.cellHeight,width:e.width,height:e.height}},m=[];let b=0;for(let S=0;S<_;S++)for(let M=0;M=C.length&&(p=C.length-1);const U=C[p];if(!i.includeEmptyCells&&(U.character===" "||U.character==="")){b++;continue}let k={r:I[D],g:I[D+1],b:I[D+2],a:I[D+3]},y={r:u[D],g:u[D+1],b:u[D+2],a:u[D+3]};const L=l[D],W=l[D+1],EA=l[D+2],rA=L===255,lA=W===255,hA=EA===255;if(rA){const _A=k;k=y,y=_A}const cA=P[D],dA=P[D+1],fA=cA+dA/255,uA=Math.round(fA*360/255*100)/100,CA=this.rgbaToHex(k.r,k.g,k.b,k.a),DA=this.rgbaToHex(y.r,y.g,y.b,y.a);m.push({x:M,y:S,character:U.character,unicode:U.unicode,color:CA,backgroundColor:DA,rotation:uA,inverted:rA,flipHorizontal:lA,flipVertical:hA}),b++}return JSON.stringify({metadata:w,cells:m},null,i.prettyPrint?2:0)}saveJSON(A,e,r,t={}){if(!t.filename){const s=new Date,n=s.toISOString().split("T")[0],E=s.toTimeString().split(" ")[0].replace(/:/g,"-");t.filename=`asciify_output_${n}_${E}`}const i=this.generateJSON(A,e,r,t);this.downloadJSON(i,t.filename)}rgbaToHex(A,e,r,t){const i=s=>{const n=Math.round(s).toString(16);return n.length===1?"0"+n:n};return`#${i(A)}${i(e)}${i(r)}${i(t)}`}downloadJSON(A,e){const r=new Blob([A],{type:"application/json"}),t=URL.createObjectURL(r),i=document.createElement("a");i.href=t,i.download=`${e}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}}function PA(g,A){const e=g.data.cmap;if(!e||!e.tables)return 0;for(const r of e.tables)if(r.format===4){for(let t=0;t=r.startCount[t]&&A<=r.endCount[t]){if(r.idRangeOffset[t]===0)return A+r.idDelta[t]&65535;{const i=r.idRangeOffset[t]/2+(A-r.startCount[t])-(r.startCount.length-t);if(i>=0&&i({x1:0,y1:0,x2:0,y2:0}),toSVG:()=>""}}function pA(g,A,e,r,t){if(!A||!A.xs||A.xs.length===0)return K();const i=t/g.data.head.unitsPerEm;return{getBoundingBox:()=>({x1:e+A.xMin*i,y1:r+-A.yMax*i,x2:e+A.xMax*i,y2:r+-A.yMin*i}),toSVG:()=>IA(A,e,r,i)}}function IA(g,A,e,r){if(!g||!g.xs)return"";const{xs:t,ys:i,endPts:s,flags:n}=g;if(!t||!i||!s||!n)return"";let E="",Q=0;for(let c=0;c=Q){const I=A+t[Q]*r,u=e-i[Q]*r;E+=`M${I.toFixed(2)},${u.toFixed(2)}`;let l=Q+1;for(;l<=d;)if((n[l]&1)!==0){const B=A+t[l]*r,_=e-i[l]*r;E+=`L${B.toFixed(2)},${_.toFixed(2)}`,l++}else{const B=A+t[l]*r,_=e-i[l]*r;let C=l+1>d?Q:l+1;if((n[C]&1)!==0){const m=A+t[C]*r,b=e-i[C]*r;E+=`Q${B.toFixed(2)},${_.toFixed(2)} ${m.toFixed(2)},${b.toFixed(2)}`,l=C+1}else{const m=A+t[C]*r,b=e-i[C]*r,H=(B+m)/2,S=(_+b)/2;E+=`Q${B.toFixed(2)},${_.toFixed(2)} ${H.toFixed(2)},${S.toFixed(2)}`,l=C}}E+="Z"}Q=d+1}}return``}const VA=Object.freeze(Object.defineProperty({__proto__:null,P5AsciifyJSONExporter:iA,P5AsciifySVGExporter:tA,compareVersions:J,createEmptyPath:K,createGlyphPath:pA,detectP5Version:$,getGlyphIndex:PA,glyphToSVGPath:IA,isP5AsyncCapable:R,isValidP5Color:O,isValidP5Font:mA},Symbol.toStringTag,{value:"Module"}));class Y extends Error{constructor(e,r){super(e);o(this,"originalError");this.name="P5AsciifyError",this.originalError=r}}var sA=(g=>(g[g.SILENT=0]="SILENT",g[g.WARNING=1]="WARNING",g[g.ERROR=2]="ERROR",g[g.THROW=3]="THROW",g))(sA||{});const z=class z{constructor(){o(this,"_options",{globalLevel:3,consolePrefix:"[p5.asciify]"})}static getInstance(){return z._instance||(z._instance=new z),z._instance}_handle(A,e,r){switch(this._options.globalLevel,this._options.globalLevel){case 0:return!1;case 1:return console.warn(`${this._options.consolePrefix} ${A}`,e),!1;case 2:return console.error(`${this._options.consolePrefix} ${A}`,e),!1;case 3:default:throw new Y(A,r)}}validate(A,e,r){return A?!0:(this._handle(e,r),!1)}setGlobalLevel(A){this._options.globalLevel=A}};o(z,"_instance",null);let X=z;const a=X.getInstance(),GA=Object.freeze(Object.defineProperty({__proto__:null,P5AsciifyError:Y,P5AsciifyErrorHandler:X,P5AsciifyErrorLevel:sA,errorHandler:a},Symbol.toStringTag,{value:"Module"}));class bA{constructor(A,e){o(this,"_characters",[]);o(this,"_maxGlyphDimensions");o(this,"_texture");o(this,"_textureColumns");o(this,"_textureRows");o(this,"_fontSize",16);this._p=A,this._font=e,this._initializeGlyphsAndCharacters()}async setup(A){return this._fontSize=A,this.reset()}_initializeGlyphsAndCharacters(){if(R($(this._p))){const A=[],e=new Map;this._font.data.cmap.tables.forEach(t=>{if(t.format===4)for(let i=0;i0&&(A.push(Q),e.set(Q,c))}}});const r=[...new Set(A)];this._characters=r.map((t,i)=>{const s=t.codePointAt(0),n=e.get(t);let E=0;n!==void 0&&this._font.data.hmtx&&this._font.data.hmtx.aWidth&&(E=this._font.data.hmtx.aWidth[n]);const Q=i%256,c=Math.floor(i/256)%256,d=Math.floor(i/65536);return{character:t,unicode:s,getPath:(I,u,l)=>{if(n===void 0)return K();const P=this._font.data.glyf[n];return P?pA(this._font,P,I,u,l):K()},advanceWidth:E,color:this._p.color(Q,c,d)}})}else{const A=Object.values(this._font.font.glyphs.glyphs);this._characters=[],A.forEach((e,r)=>{if(!e.unicode&&(!e.unicodes||!e.unicodes.length))return;const t=this._characters.length,i=t%256,s=Math.floor(t/256)%256,n=Math.floor(t/65536),E=e.unicode??e.unicodes[0];this._characters.push({character:String.fromCodePoint(E),unicode:E,getPath:(Q,c,d)=>e.getPath(Q,c,d),advanceWidth:e.advanceWidth,color:this._p.color(i,s,n)})})}}loadFont(A){a.validate(mA(this._p,A),"Invalid font parameter. Expected a p5.Font object.",{providedValue:A,method:"loadFont"})&&(this._font=A,this._initializeGlyphsAndCharacters())}glyphColor(A){if(!a.validate(typeof A=="string"&&A.length>0,"Character must be a non-empty string.",{providedValue:A,method:"glyphColor"}))return this._p.color(0);const r=this._characters.find(i=>i.character===A);return a.validate(r!==void 0,(()=>{const i=A.codePointAt(0),s=i?i.toString(16).padStart(4,"0"):"unknown";return`Could not find character in character set: ${A} (U+${s})`})(),{providedValue:A,method:"glyphColor"})?r.color:this._p.color(0)}glyphColors(A=""){if(!a.validate(typeof A=="string"||Array.isArray(A),"Characters must be a string or array of strings.",{providedValue:A,method:"glyphColors"}))return[this._p.color(0)];const r=[];for(const t of Array.from(A)){const i=this.glyphColor(t);r.push(i)}return r}_getMaxGlyphDimensions(A){this._p.textFont(this._font),this._p.textSize(A);let e=0,r=0;for(const t of this._characters){const i=this._font.textBounds(t.character,0,0,A),s=i.h,n=i.w;e=Math.max(e,n),r=Math.max(r,s)}return{width:Math.ceil(e),height:Math.ceil(r)}}async reset(){return this._maxGlyphDimensions=this._getMaxGlyphDimensions(this._fontSize),this._createTexture(this._fontSize)}async setFontSize(A){return this._fontSize=A,this._maxGlyphDimensions=this._getMaxGlyphDimensions(this._fontSize),this._createTexture(this._fontSize)}async _createTexture(A){this._textureColumns=Math.ceil(Math.sqrt(this.characters.length)),this._textureRows=Math.ceil(this.characters.length/this._textureColumns),this._texture?this._texture.resize(this._maxGlyphDimensions.width*this._textureColumns,this._maxGlyphDimensions.height*this._textureRows):this._texture=this._p.createFramebuffer({width:this._maxGlyphDimensions.width*this._textureColumns,height:this._maxGlyphDimensions.height*this._textureRows,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),this._texture.begin(),this._p.clear(),this._p.textFont(this._font),this._p.fill(255),this._p.textSize(A),this._p.textAlign(this._p.LEFT,this._p.TOP),this._p.noStroke();for(let e=0;eA.character).join("")}}class oA{constructor(A,e,r,t,i){o(this,"_primaryColorFramebuffer");o(this,"_secondaryColorFramebuffer");o(this,"_characterFramebuffer");o(this,"_transformFramebuffer");o(this,"_rotationFramebuffer");o(this,"_framebufferOptions");this._p=A,this._captureFramebuffer=e,this._grid=r,this._fontManager=t,this._options=i,this._framebufferOptions={antialias:!1,textureFiltering:this._p.NEAREST,depthFormat:this._p.UNSIGNED_INT,density:1,width:this._grid.cols,height:this._grid.rows},this._recreateFramebuffers()}_recreateFramebuffers(){const A={...this._framebufferOptions,density:1,width:this._grid.cols,height:this._grid.rows};this._primaryColorFramebuffer=this._p.createFramebuffer(A),this._secondaryColorFramebuffer=this._p.createFramebuffer(A),this._transformFramebuffer=this._p.createFramebuffer(A),this._characterFramebuffer=this._p.createFramebuffer(A),this._rotationFramebuffer=this._p.createFramebuffer(A)}setFramebufferOptions(A){this._framebufferOptions={...this._framebufferOptions,...A,density:1,width:this._grid.cols,height:this._grid.rows},this._recreateFramebuffers()}update(A){(A==null?void 0:A.enabled)!==void 0&&this.enabled(A.enabled)}setCaptureTexture(A){this._captureFramebuffer=A,this.resizeFramebuffers(),this.resetShaders()}enabled(A){if(A===void 0)return this._options.enabled;if(!a.validate(typeof A=="boolean","Enabled must be a boolean.",{providedValue:A,method:"enabled"}))return this._options.enabled;if(this._options.enabled=A,!A){const r=[this._primaryColorFramebuffer,this._secondaryColorFramebuffer,this._transformFramebuffer,this._rotationFramebuffer,this._characterFramebuffer];for(const t of r)t.draw(()=>{this._p.clear()})}return this._options.enabled}enable(){return this.enabled(!0)}disable(){return this.enabled(!1)}get options(){return this._options}get primaryColorFramebuffer(){return this._primaryColorFramebuffer}get secondaryColorFramebuffer(){return this._secondaryColorFramebuffer}get transformFramebuffer(){return this._transformFramebuffer}get rotationFramebuffer(){return this._rotationFramebuffer}get framebufferOptions(){return this._framebufferOptions}get characterFramebuffer(){return this._characterFramebuffer}}const nA={enabled:!1};class j extends oA{constructor(A,e,r,t,i=nA){super(A,e,r,t,{...nA,...i})}resetShaders(){}resizeFramebuffers(){this._primaryColorFramebuffer.resize(this._grid.cols,this._grid.rows),this._secondaryColorFramebuffer.resize(this._grid.cols,this._grid.rows),this._transformFramebuffer.resize(this._grid.cols,this._grid.rows),this._rotationFramebuffer.resize(this._grid.cols,this._grid.rows),this._characterFramebuffer.resize(this._grid.cols,this._grid.rows)}}class wA{constructor(A,e){o(this,"_framebuffer");this._p=A,this._colors=e;const r=Math.max(this._colors.length,1);this._framebuffer=this._p.createFramebuffer({density:1,width:r,height:1,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),this._updateFramebuffer()}_updateFramebuffer(){if(!this._framebuffer||!this._p)return;const A=Math.max(this._colors.length,1);this._framebuffer.resize(A,1),this._framebuffer.loadPixels();for(let r=0;r float(u_brightnessRange.y)) {\r + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r + return;\r + }\r + \r + + float normalizedBrightness = (brightness255 - float(u_brightnessRange.x)) / \r + (float(u_brightnessRange.y) - float(u_brightnessRange.x));\r + \r + + float index = clamp(floor(normalizedBrightness * u_charPaletteSize.x), 0.0, u_charPaletteSize.x - 1.0);\r + \r + + vec3 charColor = texture2D(u_charPaletteTexture, vec2((index + 0.5) / u_charPaletteSize.x, 0.0)).rgb;\r + gl_FragColor = vec4(charColor, inputColor.a);\r +}`;const aA={enabled:!0,characters:" .:-=+*%@#",characterColor:"#FFFFFF",characterColorMode:"sampled",backgroundColor:"#000000",backgroundColorMode:"fixed",invertMode:!1,rotationAngle:0,flipHorizontally:!1,flipVertically:!1,brightnessRange:[0,255]};class gA extends N{constructor(e,r,t,i,s=aA){super(e,r,t,i,{...aA,...s});o(this,"colorSampleShader");o(this,"asciiCharacterShader");o(this,"colorSampleFramebuffer");this.colorSampleShader=this._p.createShader(F,kA),this.asciiCharacterShader=this._p.createShader(F,TA),this.colorSampleFramebuffer=this._p.createFramebuffer({density:1,width:this._grid.cols,height:this._grid.rows,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST})}resetShaders(){}resizeFramebuffers(){super.resizeFramebuffers(),this.colorSampleFramebuffer.resize(this._grid.cols,this._grid.rows)}update(e){super.update(e),e.brightnessRange!==void 0&&this.brightnessRange(e.brightnessRange)}brightnessRange(e){if(!a.validate(Array.isArray(e)&&e.length===2&&typeof e[0]=="number"&&typeof e[1]=="number"&&!isNaN(e[0])&&!isNaN(e[1]),"Brightness range must be an array with exactly two numbers.",{providedValue:e,method:"brightnessRange"}))return;const[t,i]=e,s=a.validate(t>=0&&t<=255&&i>=0&&i<=255,"Brightness values must be between 0 and 255.",{providedValue:e,method:"brightnessRange"}),n=a.validate(t<=i,"Start value must be less than or equal to the end value.",{providedValue:e,method:"brightnessRange"});!s||!n||(this._options.brightnessRange=[t,i])}render(){this.colorSampleFramebuffer.begin(),this._p.clear(),this._p.shader(this.colorSampleShader),this.colorSampleShader.setUniform("u_sketchTexture",this._captureFramebuffer),this.colorSampleShader.setUniform("u_gridCellDimensions",[this._grid.cols,this._grid.rows]),this._p.rect(0,0,this.colorSampleFramebuffer.width,this.colorSampleFramebuffer.height),this.colorSampleFramebuffer.end(),this._primaryColorFramebuffer.begin(),this._options.characterColorMode===1?this._p.background(this._options.characterColor):(this._p.clear(),this._p.image(this.colorSampleFramebuffer,-this._grid.cols/2,-this._grid.rows/2,this._grid.cols,this._grid.rows)),this._primaryColorFramebuffer.end(),this._secondaryColorFramebuffer.begin(),this._options.backgroundColorMode===1?this._p.background(this._options.backgroundColor):(this._p.clear(),this._p.image(this.colorSampleFramebuffer,-this._grid.cols/2,-this._grid.rows/2,this._grid.cols,this._grid.rows)),this._secondaryColorFramebuffer.end(),this._transformFramebuffer.begin(),this._p.background(this._options.invertMode?255:0,this._options.flipHorizontally?255:0,this._options.flipVertically?255:0),this._transformFramebuffer.end(),this._rotationFramebuffer.begin(),this._p.background(this._options.rotationAngle),this._rotationFramebuffer.end(),this._characterFramebuffer.begin(),this._p.clear(),this._p.shader(this.asciiCharacterShader),this.asciiCharacterShader.setUniform("u_textureSize",[this._grid.cols,this._grid.rows]),this.asciiCharacterShader.setUniform("u_colorSampleFramebuffer",this.colorSampleFramebuffer),this.asciiCharacterShader.setUniform("u_charPaletteTexture",this._characterColorPalette.framebuffer),this.asciiCharacterShader.setUniform("u_charPaletteSize",[this._characterColorPalette.colors.length,1]),this.asciiCharacterShader.setUniform("u_brightnessRange",this._options.brightnessRange),this._p.rect(0,0,this._characterFramebuffer.width,this._characterFramebuffer.height),this._characterFramebuffer.end()}}var RA=`precision mediump float; + +uniform sampler2D u_sketchTexture;\r +uniform sampler2D u_sampleTexture; +uniform vec2 u_gridCellDimensions; +uniform int u_sampleMode; +uniform vec4 u_staticColor; + +void main() {\r + + vec2 cellCoord = floor(gl_FragCoord.xy); + + + vec2 cellSizeInTexCoords = 1.0 / u_gridCellDimensions; + + + vec2 cellCenterTexCoord = (cellCoord + vec2(0.5)) * cellSizeInTexCoords; + + + vec4 finalColor; + + vec4 sampleColor = texture2D(u_sampleTexture, cellCenterTexCoord); + + if(sampleColor != vec4(0.0, 0.0, 0.0, 0.0)) {\r + if(u_sampleMode == 0) {\r + + finalColor = texture2D(u_sketchTexture, cellCenterTexCoord);\r + } else {\r + + finalColor = u_staticColor;\r + }\r + } + + + gl_FragColor = finalColor;\r +}`,YA=`precision mediump float; + +uniform sampler2D u_sampleTexture;\r +uniform vec2 u_gridCellDimensions;\r +uniform bool u_invert;\r +uniform bool u_flipH;\r +uniform bool u_flipV;\r +uniform vec3 u_compareColor; + +void main() {\r + + vec2 cellCoord = floor(gl_FragCoord.xy); + + + vec2 cellSizeInTexCoords = vec2(1.0) / u_gridCellDimensions; + + + vec2 cellCenterTexCoord = (cellCoord + vec2(0.5)) * cellSizeInTexCoords; + + bool shouldInvert; + + + shouldInvert = texture2D(u_sampleTexture, cellCenterTexCoord).rgb != u_compareColor; + + if(shouldInvert) {\r + + + + + float r = u_invert ? 1.0 : 0.0;\r + float g = u_flipH ? 1.0 : 0.0;\r + float b = u_flipV ? 1.0 : 0.0;\r + \r + gl_FragColor = vec4(r, g, b, 1.0);\r + } else {\r + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r + }\r +}`,NA=`precision mediump float; + +uniform sampler2D u_sampleTexture;\r +uniform vec2 u_gridCellDimensions;\r +uniform vec3 u_rotationColor;\r +uniform vec3 u_compareColor; + +void main() {\r + + vec2 cellCoord = floor(gl_FragCoord.xy); + + + vec2 cellSizeInTexCoords = vec2(1.0) / u_gridCellDimensions; + + + vec2 cellCenterTexCoord = (cellCoord + vec2(0.5)) * cellSizeInTexCoords; + + bool shouldRotate; + + + shouldRotate = texture2D(u_sampleTexture, cellCenterTexCoord).rgb != u_compareColor; + + if(shouldRotate) {\r + gl_FragColor = vec4(u_rotationColor, 1.0);\r + } else {\r + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r + }\r +}`,zA=`precision mediump float; + +uniform sampler2D u_sketchTexture;\r +uniform vec2 u_gridCellDimensions; + +void main() {\r + + vec2 cellCoord = floor(gl_FragCoord.xy);\r + \r + + vec2 cellSizeInTexCoords = vec2(1.0) / u_gridCellDimensions;\r + \r + + vec2 cellCenterTexCoord = (cellCoord + vec2(0.5)) * cellSizeInTexCoords;\r + \r + + gl_FragColor = texture2D(u_sketchTexture, cellCenterTexCoord);\r +}`,HA=`precision mediump float; + +varying vec2 v_texCoord; + +uniform sampler2D u_texture;\r +uniform vec2 u_textureSize;\r +uniform float u_threshold; + +uniform sampler2D u_colorPaletteTexture; + +void main() {\r + vec2 texelSize = 1.0 / u_textureSize; + + float kernelX[9];\r + float kernelY[9]; + + kernelX[0] = -1.0; kernelX[1] = 0.0; kernelX[2] = 1.0;\r + kernelX[3] = -2.0; kernelX[4] = 0.0; kernelX[5] = 2.0;\r + kernelX[6] = -1.0; kernelX[7] = 0.0; kernelX[8] = 1.0; + + kernelY[0] = -1.0; kernelY[1] = -2.0; kernelY[2] = -1.0;\r + kernelY[3] = 0.0; kernelY[4] = 0.0; kernelY[5] = 0.0;\r + kernelY[6] = 1.0; kernelY[7] = 2.0; kernelY[8] = 1.0; + + + vec3 texColor[9];\r + for(int i = 0; i < 3; i++) {\r + for(int j = 0; j < 3; j++) {\r + texColor[i * 3 + j] = texture2D(u_texture, v_texCoord + vec2(float(i - 1), float(j - 1)) * texelSize).rgb;\r + }\r + } + + vec3 sobelX = vec3(0.0);\r + vec3 sobelY = vec3(0.0);\r + for(int i = 0; i < 9; i++) {\r + sobelX += kernelX[i] * texColor[i];\r + sobelY += kernelY[i] * texColor[i];\r + } + + vec3 sobel = sqrt(sobelX * sobelX + sobelY * sobelY);\r + float intensity = length(sobel) / sqrt(3.0);\r + \r + vec4 edgeColor = vec4(0.0);\r + \r + if(intensity > u_threshold) {\r + float angleDeg = degrees(atan(sobelY.r, sobelX.r));\r + \r + + int charIndex = 0;\r + \r + if(angleDeg >= -22.5 && angleDeg < 22.5) charIndex = 0;\r + else if(angleDeg >= 22.5 && angleDeg < 67.5) charIndex = 1;\r + else if(angleDeg >= 67.5 && angleDeg < 112.5) charIndex = 2;\r + else if(angleDeg >= 112.5 && angleDeg < 157.5) charIndex = 3;\r + else if(angleDeg >= 157.5 || angleDeg < -157.5) charIndex = 4;\r + else if(angleDeg >= -157.5 && angleDeg < -112.5) charIndex = 5;\r + else if(angleDeg >= -112.5 && angleDeg < -67.5) charIndex = 6;\r + else if(angleDeg >= -67.5 && angleDeg < -22.5) charIndex = 7;\r + \r + + float paletteCoord = (float(charIndex) + 0.5) / 8.0;\r + edgeColor = texture2D(u_colorPaletteTexture, vec2(paletteCoord, 0.5));\r + } + + gl_FragColor = edgeColor;\r +}`;const xA=(g,A,e)=>` +precision mediump float;uniform sampler2D u_image;uniform vec2 u_imageSize,u_gridCellDimensions;uniform int u_threshold;const vec3 i=vec3(0);vec3 f[${g}];int u[${g}];float r(float i){return floor(i+.5);}void main(){vec2 v=floor(gl_FragCoord.xy);ivec2 b=ivec2(v);v=u_imageSize/u_gridCellDimensions;b=ivec2(r(float(b.x)*v.x),r(float(b.y)*v.y));int m=0;for(int b=0;b<${g};b++)f[b]=i,u[b]=0;for(int v=0;v<${e};v++)for(int r=0;r<${A};r++){ivec2 y=b+ivec2(r,v);if(y.x<0||y.y<0||y.x>=int(u_imageSize.x)||y.y>=int(u_imageSize.y))continue;vec3 e=texture2D(u_image,(vec2(y)+.5)/u_imageSize).xyz;if(length(e-i)<.001)continue;m++;bool x=false;for(int b=0;b<${g};b++)if(length(e-f[b])<.001){u[b]++;x=true;break;}if(!x)for(int b=0;b<${g};b++)if(u[b]==0){f[b]=e;u[b]=1;break;}}vec3 e=i;int x=0;for(int b=0;b<${g};b++)if(u[b]>x)e=f[b],x=u[b];gl_FragColor=m=0&&e<=1,"Sobel threshold must be between 0 and 1",{providedValue:e,method:"sobelThreshold"});!r||!t||(this._options.sobelThreshold=e)}sampleThreshold(e){const r=a.validate(typeof e=="number"&&!Number.isNaN(e)&&Number.isFinite(e),"Sample threshold must be a valid number",{providedValue:e,method:"sampleThreshold"}),t=a.validate(e>=0,"Sample threshold must be greater than or equal to 0",{providedValue:e,method:"sampleThreshold"});!r||!t||(this._options.sampleThreshold=e)}update(e){super.update(e),e.sobelThreshold!==void 0&&this.sobelThreshold(e.sobelThreshold),e.sampleThreshold!==void 0&&this.sampleThreshold(e.sampleThreshold)}render(){this.sobelFramebuffer.begin(),this._p.clear(),this._p.shader(this.sobelShader),this.sobelShader.setUniform("u_texture",this._captureFramebuffer),this.sobelShader.setUniform("u_textureSize",[this._captureFramebuffer.width,this._captureFramebuffer.height]),this.sobelShader.setUniform("u_threshold",this._options.sobelThreshold),this.sobelShader.setUniform("u_colorPaletteTexture",this._characterColorPalette.framebuffer),this.sobelShader.setUniform("u_totalChars",this._options.characters.length),this._p.rect(0,0,this.sobelFramebuffer.width,this.sobelFramebuffer.height),this.sobelFramebuffer.end(),this.sampleFramebuffer.begin(),this._p.clear(),this._p.shader(this.sampleShader),this.sampleShader.setUniform("u_imageSize",[this._captureFramebuffer.width,this._captureFramebuffer.height]),this.sampleShader.setUniform("u_image",this.sobelFramebuffer),this.sampleShader.setUniform("u_gridCellDimensions",[this._grid.cols,this._grid.rows]),this.sampleShader.setUniform("u_threshold",this._options.sampleThreshold),this._p.rect(0,0,this.sampleFramebuffer.width,this.sampleFramebuffer.height),this.sampleFramebuffer.end(),this._primaryColorFramebuffer.begin(),this._p.clear(),this._p.shader(this.colorSampleShader),this.colorSampleShader.setUniform("u_sketchTexture",this._captureFramebuffer),this.colorSampleShader.setUniform("u_sampleTexture",this.sampleFramebuffer),this.colorSampleShader.setUniform("u_gridCellDimensions",[this._grid.cols,this._grid.rows]),this.colorSampleShader.setUniform("u_sampleMode",this._options.characterColorMode),this.colorSampleShader.setUniform("u_staticColor",this._options.characterColor._array),this._p.rect(0,0,this._primaryColorFramebuffer.width,this._primaryColorFramebuffer.height),this._primaryColorFramebuffer.end(),this._secondaryColorFramebuffer.begin(),this._p.clear(),this._p.shader(this.colorSampleShader),this.colorSampleShader.setUniform("u_sketchTexture",this._captureFramebuffer),this.colorSampleShader.setUniform("u_sampleTexture",this.sampleFramebuffer),this.colorSampleShader.setUniform("u_gridCellDimensions",[this._grid.cols,this._grid.rows]),this.colorSampleShader.setUniform("u_sampleMode",this._options.backgroundColorMode),this.colorSampleShader.setUniform("u_staticColor",this._options.backgroundColor._array),this._p.rect(0,0,this._secondaryColorFramebuffer.width,this._secondaryColorFramebuffer.height),this._secondaryColorFramebuffer.end(),this._transformFramebuffer.begin(),this._p.clear(),this._p.shader(this.transformShader),this.transformShader.setUniform("u_invert",this._options.invertMode),this.transformShader.setUniform("u_flipH",this._options.flipHorizontally),this.transformShader.setUniform("u_flipV",this._options.flipVertically),this.transformShader.setUniform("u_sampleTexture",this.sampleFramebuffer),this.transformShader.setUniform("u_compareColor",[0,0,0]),this.transformShader.setUniform("u_gridCellDimensions",[this._grid.cols,this._grid.rows]),this._p.rect(0,0,this._transformFramebuffer.width,this._transformFramebuffer.height),this._transformFramebuffer.end(),this._rotationFramebuffer.begin(),this._p.clear(),this._p.shader(this.rotationShader),this.rotationShader.setUniform("u_rotationColor",this._options.rotationAngle._array),this.rotationShader.setUniform("u_sampleTexture",this.sampleFramebuffer),this.rotationShader.setUniform("u_compareColor",[0,0,0]),this.rotationShader.setUniform("u_gridCellDimensions",[this._grid.cols,this._grid.rows]),this._p.rect(0,0,this._rotationFramebuffer.width,this._rotationFramebuffer.height),this._rotationFramebuffer.end(),this._characterFramebuffer.begin(),this._p.clear(),this._p.shader(this.asciiCharacterShader),this.asciiCharacterShader.setUniform("u_sketchTexture",this.sampleFramebuffer),this.asciiCharacterShader.setUniform("u_gridCellDimensions",[this._grid.cols,this._grid.rows]),this._p.rect(0,0,this._characterFramebuffer.width,this._characterFramebuffer.height),this._characterFramebuffer.end()}}var UA=`precision mediump float; + +uniform sampler2D u_characterTexture;\r +uniform vec2 u_charsetDimensions; + +uniform sampler2D u_primaryColorTexture;\r +uniform sampler2D u_secondaryColorTexture;\r +uniform sampler2D u_transformTexture;\r +uniform sampler2D u_asciiCharacterTexture;\r +uniform sampler2D u_rotationTexture; + +uniform sampler2D u_captureTexture;\r +uniform vec2 u_captureDimensions;\r +uniform int u_backgroundMode; + +uniform vec2 u_gridCellDimensions;\r +uniform vec2 u_gridPixelDimensions; + +uniform float u_pixelRatio; + +mat2 rotate2D(float angle) {\r + float s = sin(angle);\r + float c = cos(angle);\r + return mat2(c, -s, s, c);\r +} + +void main() {\r + + vec2 logicalFragCoord = gl_FragCoord.xy / u_pixelRatio; + + + vec2 adjustedCoord = (logicalFragCoord) / u_gridPixelDimensions; + + + vec2 gridCoord = adjustedCoord * u_gridCellDimensions;\r + vec2 cellCoord = floor(gridCoord); + + + vec2 charIndexTexCoord = (cellCoord + vec2(0.5)) / u_gridCellDimensions; + + + vec4 primaryColor = texture2D(u_primaryColorTexture, charIndexTexCoord); + + + vec4 secondaryColor = texture2D(u_secondaryColorTexture, charIndexTexCoord); + + + vec4 transformColor = texture2D(u_transformTexture, charIndexTexCoord);\r + bool isInverted = transformColor.r > 0.5; + bool flipHorizontal = transformColor.g > 0.5; + bool flipVertical = transformColor.b > 0.5; + + + vec4 encodedIndexVec = texture2D(u_asciiCharacterTexture, charIndexTexCoord); + + if(encodedIndexVec.a < 0.01) {\r + if(u_backgroundMode == 0) {\r + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r + } else if(u_backgroundMode == 1) {\r + vec2 captureTexCoord = logicalFragCoord / u_captureDimensions;\r + gl_FragColor = texture2D(u_captureTexture, captureTexCoord);\r + }\r + return;\r + } + + + int charIndex = int(encodedIndexVec.r * 255.0 + 0.5) + int(encodedIndexVec.g * 255.0 + 0.5) * 256; + + + int charCol = charIndex - (charIndex / int(u_charsetDimensions.x)) * int(u_charsetDimensions.x);\r + int charRow = charIndex / int(u_charsetDimensions.x); + + + vec2 charCoord = vec2(float(charCol) / u_charsetDimensions.x, float(charRow) / u_charsetDimensions.y); + + + vec4 rotationColor = texture2D(u_rotationTexture, charIndexTexCoord);\r + \r + + + + float redValue = rotationColor.r * 255.0;\r + float greenValue = rotationColor.g * 255.0;\r + \r + + float scaledAngle = redValue + (greenValue / 255.0);\r + \r + + float angleDegrees = (scaledAngle * 360.0) / 255.0;\r + \r + + float rotationAngle = angleDegrees * 3.14159265359 / 180.0; + + + vec2 fractionalPart = fract(gridCoord) - 0.5; + + + if(flipHorizontal) {\r + fractionalPart.x = -fractionalPart.x;\r + }\r + if(flipVertical) {\r + fractionalPart.y = -fractionalPart.y;\r + } + + + fractionalPart = rotate2D(rotationAngle) * fractionalPart;\r + fractionalPart += 0.5; + + + vec2 cellMin = charCoord;\r + vec2 cellMax = charCoord + vec2(1.0 / u_charsetDimensions.x, 1.0 / u_charsetDimensions.y);\r + vec2 texCoord = charCoord + fractionalPart * vec2(1.0 / u_charsetDimensions.x, 1.0 / u_charsetDimensions.y); + + + bool outsideBounds = any(lessThan(texCoord, cellMin)) || any(greaterThan(texCoord, cellMax)); + + if(outsideBounds) {\r + + gl_FragColor = isInverted ? primaryColor : secondaryColor;\r + return;\r + } + + + vec4 charTexel = texture2D(u_characterTexture, texCoord); + + + float inv = isInverted ? 1.0 : 0.0;\r + charTexel.rgb = mix(charTexel.rgb, 1.0 - charTexel.rgb, inv); + + + gl_FragColor = mix(secondaryColor, primaryColor, charTexel);\r +}`;class vA{constructor(A,e,r){o(this,"_resultFramebuffer");o(this,"_shader");o(this,"_backgroundMode",0);this._p=A,this._grid=e,this._fontManager=r,this._shader=this._p.createShader(F,UA),this._resultFramebuffer=this._p.createFramebuffer({width:this._grid.width,height:this._grid.height,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST})}render(A,e,r,t,i,s,n="#000000"){this._resultFramebuffer.begin(),this._p.background(n),this._p.shader(this._shader);const E={u_pixelRatio:this._p.pixelDensity(),u_characterTexture:this._fontManager.texture,u_charsetDimensions:[this._fontManager.textureColumns,this._fontManager.textureRows],u_primaryColorTexture:e,u_secondaryColorTexture:r,u_transformTexture:t,u_rotationTexture:i,u_captureTexture:s,u_captureDimensions:[s.width,s.height],u_asciiCharacterTexture:A,u_gridPixelDimensions:[this._grid.width,this._grid.height],u_gridCellDimensions:[this._grid.cols,this._grid.rows],u_backgroundMode:this._backgroundMode||0};for(const[Q,c]of Object.entries(E))this._shader.setUniform(Q,c);this._p.rect(0,0,this._resultFramebuffer.width,this._resultFramebuffer.height),this._resultFramebuffer.end()}resizeFramebuffers(){this._resultFramebuffer.resize(this._grid.width,this._grid.height)}backgroundMode(A){this._backgroundMode=A}get resultFramebuffer(){return this._resultFramebuffer}}const Z={brightness:gA,edge:QA,custom2D:j};class yA{constructor(A,e,r,t,i){o(this,"_currentCanvasDimensions");o(this,"_renderers");o(this,"_primaryColorFramebuffer");o(this,"_secondaryColorFramebuffer");o(this,"_characterFramebuffer");o(this,"_transformFramebuffer");o(this,"_rotationFramebuffer");o(this,"_asciiDisplayRenderer2D");o(this,"_hasEnabledRenderers",!1);this._p=A,this._captureFramebuffer=e,this._grid=r,this._fontManager=t,this._pluginRegistry=i,this._currentCanvasDimensions={width:this._captureFramebuffer.width,height:this._captureFramebuffer.height},this._renderers=[{name:"custom2D",renderer:new j(this._p,this._captureFramebuffer,this._grid,this._fontManager)},{name:"edge",renderer:new QA(this._p,this._captureFramebuffer,this._grid,this._fontManager)},{name:"brightness",renderer:new gA(this._p,this._captureFramebuffer,this._grid,this._fontManager)}],this._primaryColorFramebuffer=this._p.createFramebuffer({density:1,antialias:!1,width:this._grid.cols,height:this._grid.rows,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),this._secondaryColorFramebuffer=this._p.createFramebuffer({density:1,antialias:!1,width:this._grid.cols,height:this._grid.rows,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),this._transformFramebuffer=this._p.createFramebuffer({density:1,antialias:!1,width:this._grid.cols,height:this._grid.rows,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),this._characterFramebuffer=this._p.createFramebuffer({density:1,antialias:!1,width:this._grid.cols,height:this._grid.rows,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),this._rotationFramebuffer=this._p.createFramebuffer({density:1,antialias:!1,width:this._grid.cols,height:this._grid.rows,depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),this._asciiDisplayRenderer2D=new vA(this._p,this._grid,this._fontManager)}render(A="#000000"){this._characterFramebuffer.draw(()=>this._p.clear()),this._primaryColorFramebuffer.draw(()=>this._p.clear()),this._secondaryColorFramebuffer.draw(()=>this._p.clear()),this._transformFramebuffer.draw(()=>this._p.clear()),this._rotationFramebuffer.draw(()=>this._p.clear()),this._hasEnabledRenderers=!1;for(let e=this._renderers.length-1;e>=0;e--){const r=this._renderers[e];if(r.renderer.options.enabled){r.renderer instanceof N&&r.renderer.render();const t=-this._grid.cols/2,i=-this._grid.rows/2;this._characterFramebuffer.draw(()=>this._p.image(r.renderer.characterFramebuffer,t,i)),this._primaryColorFramebuffer.draw(()=>this._p.image(r.renderer.primaryColorFramebuffer,t,i)),this._secondaryColorFramebuffer.draw(()=>this._p.image(r.renderer.secondaryColorFramebuffer,t,i)),this._transformFramebuffer.draw(()=>this._p.image(r.renderer.transformFramebuffer,t,i)),this._rotationFramebuffer.draw(()=>this._p.image(r.renderer.rotationFramebuffer,t,i)),this._hasEnabledRenderers=!0}}this._asciiDisplayRenderer2D.render(this._characterFramebuffer,this._primaryColorFramebuffer,this._secondaryColorFramebuffer,this._transformFramebuffer,this._rotationFramebuffer,this._captureFramebuffer,A),this.checkCanvasDimensions()}checkCanvasDimensions(){(this._currentCanvasDimensions.width!==this._captureFramebuffer.width||this._currentCanvasDimensions.height!==this._captureFramebuffer.height)&&(this._currentCanvasDimensions.width=this._captureFramebuffer.width,this._currentCanvasDimensions.height=this._captureFramebuffer.height,this._grid.reset(),this.resetRendererDimensions())}setCaptureTexture(A){this._captureFramebuffer=A,this.resetRendererDimensions(),this._renderers.forEach(e=>{e.renderer.setCaptureTexture(A)})}resetRendererDimensions(){this._primaryColorFramebuffer.resize(this._grid.cols,this._grid.rows),this._secondaryColorFramebuffer.resize(this._grid.cols,this._grid.rows),this._characterFramebuffer.resize(this._grid.cols,this._grid.rows),this._transformFramebuffer.resize(this._grid.cols,this._grid.rows),this._rotationFramebuffer.resize(this._grid.cols,this._grid.rows),this._renderers.forEach(A=>{A.renderer.resizeFramebuffers(),A.renderer instanceof N&&A.renderer.resetShaders()}),this._asciiDisplayRenderer2D.resizeFramebuffers()}add(A,e,r){const t=a.validate(typeof A=="string"&&A.trim()!=="","Renderer name must be a non-empty string.",{providedValue:A,method:"add"}),i=a.validate(typeof e=="string"&&e.trim()!=="","Renderer type must be a non-empty string.",{providedValue:e,method:"add"});if(!t||!i)return null;let s;const n=Z[e];if(n)s=new n(this._p,this._captureFramebuffer,this._grid,this._fontManager,r);else{const Q=this._pluginRegistry.get(e);Q&&(s=Q.create(this._p,this._captureFramebuffer,this._grid,this._fontManager,r))}return a.validate(s!==void 0,(()=>{const Q=[...Object.keys(Z),...this._pluginRegistry.getIds()].join(", ");return`Invalid renderer type: ${e}. Valid types are: ${Q}`})(),{providedValue:e,method:"add"})?(this._renderers.unshift({name:A,renderer:s}),s):null}get(A){var i;if(!a.validate(typeof A=="string"&&A.trim()!=="","Renderer name must be a non-empty string.",{providedValue:A,method:"get"}))return null;const r=(i=this._renderers.find(s=>s.name===A))==null?void 0:i.renderer;return a.validate(r!==void 0,`Renderer '${A}' not found. Available renderers: ${this._renderers.map(s=>s.name).join(", ")}`,{providedValue:A,method:"get"})?r:null}getAvailableRendererTypes(){return[...Object.keys(Z),...this._pluginRegistry.getIds()]}moveDown(A){const e=this._getRendererIndex(A),r=a.validate(e>=0&&e=0&&e0,"Renderer is already at the top of the list.",{providedValue:A,method:"moveUp"});!r||!t||this.swap(A,this._renderers[e-1].renderer)}remove(A){const e=this._getRendererIndex(A);a.validate(e>=0&&e=0&&r=0&&tA.renderer.enabled(!0))}disable(){this._renderers.forEach(A=>A.renderer.enabled(!1))}enabled(A){A?this.enable():this.disable()}_getRendererIndex(A){return typeof A=="string"?this._renderers.findIndex(e=>e.name===A):this._renderers.findIndex(e=>e.renderer===A)}get renderers(){return this._renderers}get asciiDisplayRenderer(){return this._asciiDisplayRenderer2D}get characterFramebuffer(){return this._characterFramebuffer}get primaryColorFramebuffer(){return this._primaryColorFramebuffer}get secondaryColorFramebuffer(){return this._secondaryColorFramebuffer}get transformFramebuffer(){return this._transformFramebuffer}get rotationFramebuffer(){return this._rotationFramebuffer}get hasEnabledRenderers(){return this._hasEnabledRenderers}}class q{constructor(A){o(this,"_fontManager");o(this,"_grid");o(this,"_captureFramebuffer");o(this,"_rendererManager");o(this,"_fontSize",16);o(this,"_backgroundColor","#000000");o(this,"_p");o(this,"_renderToCanvas",!0);o(this,"_pluginRegistry");o(this,"_setupDone",!1);this._pluginRegistry=A}async init(A){this._p=A}async setup(A,e){this._captureFramebuffer=A,this._fontManager=new bA(this._p,e),R($(this._p))?await this._fontManager.setup(this._fontSize):this._fontManager.setup(this._fontSize),this._grid=new T(this._captureFramebuffer,this._fontManager.maxGlyphDimensions.width,this._fontManager.maxGlyphDimensions.height),this._rendererManager=new yA(this._p,this._captureFramebuffer,this._grid,this._fontManager,this._pluginRegistry),this._setupDone=!0}asciify(){this._rendererManager.render(this._backgroundColor),this._renderToCanvas&&(this._rendererManager.hasEnabledRenderers?this._p.image(this._rendererManager.asciiDisplayRenderer.resultFramebuffer,-(this._p.width/2)+this._grid.offsetX,-(this._p.height/2)+this._grid.offsetY):(this._p.clear(),this._p.image(this._captureFramebuffer,-(this._captureFramebuffer.width/2),-(this._captureFramebuffer.height/2))))}fontSize(A){!a.validate(typeof A=="number"&&A>0,`Invalid font size: ${A}. Expected a positive number.`,{providedValue:A,method:"fontSize"})||this._fontSize===A||this._setupDone&&(this._fontSize=A,this._fontManager.setFontSize(A),this._grid.resizeCellPixelDimensions(this._fontManager.maxGlyphDimensions.width,this._fontManager.maxGlyphDimensions.height),this._rendererManager.resetRendererDimensions())}renderers(){return this._rendererManager}setCaptureTexture(A){this._captureFramebuffer!==A&&(this._captureFramebuffer=A,this._grid.updateTexture(A),this._rendererManager.setCaptureTexture(A))}font(A,e={updateCharacters:!0}){this._fontManager.font!==A&&(this._fontManager.loadFont(A),this._setupDone&&(this._fontManager.reset(),this._grid.resizeCellPixelDimensions(this._fontManager.maxGlyphDimensions.width,this._fontManager.maxGlyphDimensions.height),e.updateCharacters&&this._rendererManager.renderers.forEach(r=>{r.renderer instanceof N&&r.renderer.characters(r.renderer.options.characters)}),this._rendererManager.resetRendererDimensions()))}background(A){a.validate(typeof A=="string"||Array.isArray(A)||O(this._p,A),`Invalid color type: ${typeof A}. Expected string, array or p5.Color.`,{providedValue:A,method:"background"})&&(this._backgroundColor=A)}gridDimensions(A,e){this._grid.cols===A&&this._grid.rows===e||(this._grid.resizeGridDimensions(A,e),this._rendererManager.resetRendererDimensions())}gridResponsive(A=!0){A?this._grid.resetGridDimensions():this._grid.fixedDimensions=!0}saveSVG(A={}){new tA(this._p).saveSVG(this._rendererManager,this._grid,this._fontManager,this._backgroundColor,A)}toSVG(A={}){return new tA(this._p).generateSVG(this._rendererManager,this._grid,this._fontManager,this._backgroundColor,A)}saveJSON(A={}){new iA(this._p).saveJSON(this._rendererManager,this._grid,this._fontManager,A)}toJSON(A={}){return new iA(this._p).generateJSON(this._rendererManager,this._grid,this._fontManager,A)}_generateAsciiTextOutput(){const A=this._rendererManager.characterFramebuffer;A.loadPixels();const e=A.pixels,r=this._grid.cols,t=this._grid.rows,i=this._fontManager.characters,s=[];let n=0;for(let E=0;E=i.length&&(l=i.length-1),Q+=i[l].character,n++}s.push(Q)}return s}toString(){return this._generateAsciiTextOutput().join(` +`)}saveStrings(A){if(!A){const e=new Date,r=e.toISOString().split("T")[0],t=e.toTimeString().split(" ")[0].replace(/:/g,"-");A=`asciify_output_${r}_${t}`}this._p.saveStrings(this._generateAsciiTextOutput(),`${A}.txt`)}renderToCanvas(A){a.validate(typeof A=="boolean",`Invalid type for renderToCanvas: ${typeof A}. Expected boolean.`,{providedValue:A,method:"renderToCanvas"})&&(this._renderToCanvas=A)}backgroundMode(A="fixed"){a.validate(A==="fixed"||A==="sampled",`Invalid background mode: ${A}. Expected "fixed" or "sampled".`,{providedValue:A,method:"backgroundMode"})&&this._rendererManager.asciiDisplayRenderer.backgroundMode(A==="fixed"?0:1)}loadJSON(A){let e;if(!a.validate(A!=null,"JSON input cannot be null or undefined.",{providedValue:A,method:"loadJSON"}))return{characterFramebuffer:null,primaryColorFramebuffer:null,secondaryColorFramebuffer:null,transformFramebuffer:null,rotationFramebuffer:null};try{e=typeof A=="string"?JSON.parse(A):A}catch(B){return a.validate(!1,`Invalid JSON format: ${B.message}`,{providedValue:A,method:"loadJSON"}),{characterFramebuffer:null,primaryColorFramebuffer:null,secondaryColorFramebuffer:null,transformFramebuffer:null,rotationFramebuffer:null}}const t=a.validate(e&&typeof e=="object"&&e.metadata&&e.cells,"Invalid JSON format: missing metadata or cells",{providedValue:e,method:"loadJSON"});if(!a.validate(e.metadata.version==="1.0",`Unsupported JSON version: ${e.metadata.version}`,{providedValue:e.metadata.version,method:"loadJSON"})||!t)return{characterFramebuffer:null,primaryColorFramebuffer:null,secondaryColorFramebuffer:null,transformFramebuffer:null,rotationFramebuffer:null};const s=e.metadata.gridSize,n=s.cols,E=s.rows,Q={width:n,height:E,antialias:!1,textureFiltering:this._p.NEAREST,depthFormat:this._p.UNSIGNED_INT},c=this._p.createFramebuffer(Q),d=this._p.createFramebuffer(Q),I=this._p.createFramebuffer(Q),u=this._p.createFramebuffer(Q),l=this._p.createFramebuffer(Q),P=(B,_,C,w)=>{B.begin(),this._p.push(),this._p.noStroke(),this._p.fill(w);const m=_-n/2+.5,b=C-E/2+.5;this._p.rect(m,b,1,1),this._p.pop(),B.end()};for(const B of e.cells)if(!(B.x<0||B.y<0||B.x>=n||B.y>=E)){if(B.character){const _=this._fontManager.glyphColor(B.character);P(c,B.x,B.y,_)}if(B.color&&P(d,B.x,B.y,B.color),B.backgroundColor&&P(I,B.x,B.y,B.backgroundColor),B.rotation!==void 0){const _=Math.round(B.rotation%360*.7083333333333334);P(l,B.x,B.y,_)}if(B.flipHorizontal!==void 0||B.flipVertical!==void 0||B.inverted!==void 0){const _=B.inverted===!0,C=B.flipHorizontal===!0,w=B.flipVertical===!0;P(u,B.x,B.y,[_?255:0,C?255:0,w?255:0,255])}}return{characterFramebuffer:c,primaryColorFramebuffer:d,secondaryColorFramebuffer:I,transformFramebuffer:u,rotationFramebuffer:l}}fill(A){this._p.fill(this._fontManager.glyphColor(A))}get grid(){return this._grid}get fontManager(){return this._fontManager}get captureFramebuffer(){return this._captureFramebuffer}get texture(){return this._rendererManager.asciiDisplayRenderer.resultFramebuffer}}const v=class v{constructor(){o(this,"registeredHooks",new Map);o(this,"p5AddonRegistered",!1);o(this,"hookHandlers");o(this,"_cachedSetupAsciifyFn",null);o(this,"_cachedDrawAsciifyFn",null);if(v._instance)throw new Y("P5AsciifyHookManager is a singleton and cannot be instantiated multiple times.")}static getInstance(){return v._instance||(v._instance=new v),v._instance}initialize(A){this.hookHandlers=A,this._registerCoreHooks(),this._integrateWithP5()}_registerCoreHooks(){const A=this.hookHandlers,e=function(){return A.handleInit(this)};this._registerHook("init",e,!1);const r=function(){if(!(this._renderer.drawingContext instanceof WebGLRenderingContext||this._renderer.drawingContext instanceof WebGL2RenderingContext))throw new Y("WebGL renderer is required for p5.asciify to run.");if(J(this.VERSION,"1.8.0")<0)throw new Y("p5.asciify requires p5.js v1.8.0 or higher to run.");if(J(this.VERSION,"2.0.0")>=0)return(async()=>{await A.handleSetup(this);const s=v.getInstance();s._cachedSetupAsciifyFn=this.setupAsciify||(this._isGlobal&&typeof window<"u"&&typeof window.setupAsciify=="function"?window.setupAsciify:null),s._cachedDrawAsciifyFn=this.drawAsciify||(this._isGlobal&&typeof window<"u"&&typeof window.drawAsciify=="function"?window.drawAsciify:null),typeof s._cachedSetupAsciifyFn=="function"&&await s._cachedSetupAsciifyFn.call(this)})();{A.handleSetup(this);const s=v.getInstance();s._cachedSetupAsciifyFn=this.setupAsciify||(this._isGlobal&&typeof window<"u"&&typeof window.setupAsciify=="function"?window.setupAsciify:null),s._cachedDrawAsciifyFn=this.drawAsciify||(this._isGlobal&&typeof window<"u"&&typeof window.drawAsciify=="function"?window.drawAsciify:null),typeof s._cachedSetupAsciifyFn=="function"&&s._cachedSetupAsciifyFn.call(this)}};this._registerHook("afterSetup",r,!1);const t=function(){A.handlePreDraw(this)};this._registerHook("pre",t,!1);const i=function(){A.handlePostDraw(this);const s=v.getInstance();typeof s._cachedDrawAsciifyFn=="function"&&s._cachedDrawAsciifyFn.call(this)};this._registerHook("post",i,!1)}_integrateWithP5(){if(typeof h>"u"||!h||!h.VERSION){console.log("p5.asciify loading without automatic hooks!");return}J(h.VERSION,"2.0.0")>=0&&typeof h.registerAddon=="function"?this.p5AddonRegistered||(h.registerAddon(this._createP5Addon()),this.p5AddonRegistered=!0):this._registerLegacyHooks()}_createP5Addon(){const A=this;return function(r,t,i){i.presetup=async function(){const s=A.getHooks("init");for(const n of s)await n.fn.call(this)},i.postsetup=async function(){const s=A.getHooks("afterSetup");for(const n of s)await n.fn.call(this)},i.predraw=function(){const s=A.getHooks("pre");for(const n of s)n.fn.call(this)},i.postdraw=function(){const s=A.getHooks("post");for(const n of s)n.fn.call(this)}}}_registerLegacyHooks(){this.registeredHooks.forEach((A,e)=>{A.registered||(h.prototype.registerMethod(e,A.proxyFn),A.registered=!0)})}_registerHook(A,e,r=!1){const t=this,s={originalFn:e,proxyFn:function(){const n=t.registeredHooks.get(A);if(n&&n.active)return n.originalFn.call(this)},active:!0,isCore:r,registered:!1};this.registeredHooks.set(A,s)}activateHook(A){if(!a.validate(A&&typeof A=="string"&&A.trim()!=="","Hook type must be a non-empty string.",{providedValue:A,method:"activateHook"}))return;const r=this.registeredHooks.get(A);a.validate(r!==void 0,`Hook '${A}' not found.`,{providedValue:A,method:"activateHook"})&&(r.active=!0)}deactivateHook(A){if(!a.validate(A&&typeof A=="string"&&A.trim()!=="","Hook type must be a non-empty string.",{providedValue:A,method:"deactivateHook"}))return;const r=this.registeredHooks.get(A);!a.validate(r!==void 0,`Hook '${A}' not found.`,{providedValue:A,method:"deactivateHook"})||!a.validate(!r.isCore,`Core hook '${A}' cannot be deactivated.`,{providedValue:A,method:"deactivateHook"})||(r.active=!1)}isHookActive(A){const e=this.registeredHooks.get(A);return e?e.active:!1}getHooks(A){const e=this.registeredHooks.get(A);return e&&e.active?[{fn:e.originalFn}]:[]}};o(v,"_instance",null);let AA=v;const FA=`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAABAAAgAQAAIAEAACABAAAAAQAAIAEAAAABAAAAAQAAIAEAAGABAAAAAQAAAAEAAAABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAEABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAACAAQAAIAEAAAABAAAAAQAAAAEAACABAABAAQAAQAEAAEABAABAAQAAIAEAACABAAAAAQAAAAEAAAABAABAAQAAAAEAACABAAAAAQAAAAEAAIABAAAgAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAYAEAAAABAAAAAQAAQAEAACABAAAAAQAAAAEAAAABAAAgAQAAIAEAACABAAAgAQAAIAEAAAABAABAAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAAAAAIAAAADAAAAFAADAAEAAASaAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAABwAAABIAAAAegAAALwAAADuAAAA9wAAARQAAAExAAABWgAAAW0AAAF7AAABhAAAAY0AAAGvAAAB0gAAAecAAAIOAAACNQAAAk8AAAJsAAACjgAAAqYAAALOAAAC5gAAAvQAAAMHAAADLgAAAzwAAANjAAADhQAAA6UAAAPCAAAD4AAAA/0AAAQaAAAEPAAABEwAAARrAAAEfgAABJEAAASpAAAE0AAABNsAAAT4AAAFFQAABS0AAAVDAAAFZQAABYcAAAWuAAAFvAAABc8AAAXnAAAGBAAABisAAAZDAAAGZQAABnMAAAaVAAAGowAABsUAAAbOAAAG3gAABvYAAAcMAAAHKQAABz8AAAdaAAAHbQAAB4oAAAedAAAHqwAAB8MAAAfgAAAH7gAACAsAAAgjAAAIOwAACFEAAAhsAAAIfAAACJkAAAi2AAAIzgAACOYAAAkDAAAJKgAACUIAAAlfAAAJfAAACYUAAAmiAAAJugAACdcAAAngAAAKBwAACi4AAApgAAAKeQAACokAAAq4AAAKwQAACs8AAArYAAAK8QAACw4AAAshAAALSAAAC1gAAAt1AAALjQAAC5sAAAu0AAALzQAAC9YAAAvhAAAL6gAAC/4AAAwRAAAMJAAADDQAAAxHAAAMUgAADGoAAAyCAAAMlwAADKUAAAy/AAAM0gAADN0AAAz8AAANDwAADSkAAA0yAAANTAAADVUAAA1jAAANfAAADYcAAA2VAAANqQAADcIAAA3mAAAN7wAADg4AAA4XAAAOQQAADloAAA5qAAAOcwAADoYAAA6PAAAOogAADrIAAA7FAAAPCwAADxsAAA8uAAAPRwAAD1AAAA+HAAAPoAAAD6kAAA/CAAAP3wAAD/wAABAZAAAQNgAAEE4AABBfAAAQlQAAEJ4AABCxAAAQugAAEOEAABEnAAARUwAAEWYAABF+AAARlgAAEbgAABJrAAASfgAAEpEAABKpAAASwQAAEswAABLcAAATCAAAExMAABMrAAATQwAAE1sAABNzAAATmgAAE8YAABPeAAAT5wAAE/AAABQSAAAUKgAAFEIAABRaAAAUYwAAFGwAABSOAAAUngAAFLsAABTYAAAU/wAAFSEAABVNAAAVZQAAFX0AABWVAAAVngAAFacAABXTAAAWBAAAFg0AABYvAAAWOgAAFkUAABZxAAAWhAAAFpIAABagAAAWrgAAFrwAABbVAAAW7QAAFxkAABd0AAAXzwAAF/wAABgUAAAYJQAAGC4AABhBAAAYXgAAGHEAABiYAAAYvAAAGOAAABkYAAAZPwAAGWYAABmNAAAZtAAAGdYAABn9AAAaEAAAGi0AAIBgACAAoAEAAADAAcAAAEBAQEBAQEBAYABAAAA/wAAAAEAAAD/AAQAAAD+AAAA/4AAAP8AAAAAAgEAAoADgAQAAAMABwAAAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8ABAAAAP6AAAABgAAA/oAAAAACAIAAgAQAA4AAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAABAAAAAIAAAP+AAAAAgAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAA/4AAAACAAQAAAACAAAADgAAA/4AAAACAAAD/gAAA/4AAAP8AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAABAAAAAIAAAP+A/wAAAAEAAAMAgACABAAEAAAbAB8AIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAABAAAAAIAAAP+AAAD/AAAA/4AAAP8AAAABAAAA/wAAAP+AAAAAgAAAAQD/gAAAAIAAAACAAAAAgAAABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAABQCAAIAEAAOAAAUAHQAjACkALwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAA/4AAAP+AAgABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r +`;class SA{constructor(){o(this,"_plugins",new Map)}register(A){return!a.validate(A&&typeof A=="object","Plugin must be a valid P5AsciifyRendererPlugin object.",{providedValue:A,method:"register"})||!a.validate(typeof A.id=="string"&&A.id.trim()!=="","Plugin must have a valid non-empty ID.",{providedValue:A.id,method:"register"})||!a.validate(!this._plugins.has(A.id),`A plugin with ID '${A.id}' is already registered.`,{providedValue:A.id,method:"register"})?!1:(this._plugins.set(A.id,A),!0)}has(A){return this._plugins.has(A)}get(A){return this._plugins.get(A)}unregister(A){return this._plugins.delete(A)}getIds(){return Array.from(this._plugins.keys())}getAll(){return Array.from(this._plugins.values())}}const G=class G{constructor(){o(this,"_p");o(this,"_asciifiers");o(this,"_baseFont");o(this,"_sketchFramebuffer");o(this,"_pluginRegistry");o(this,"_hookManager");o(this,"_setupDone",!1);o(this,"_p5Version");o(this,"_backgroundColor","#000000");if(G._instance)throw new Y("P5AsciifierManager is a singleton and cannot be instantiated directly. Use P5AsciifierManager.getInstance() instead.");this._pluginRegistry=new SA,this._asciifiers=[new q(this._pluginRegistry)],this._hookManager=AA.getInstance(),this._hookManager.initialize(this)}static getInstance(){return G._instance||(G._instance=new G),G._instance}async handleInit(A){return await this.init(A)}async handleSetup(A){return await this.setup()}handlePreDraw(A){this._sketchFramebuffer&&(this._sketchFramebuffer.begin(),A.clear())}handlePostDraw(A){this._sketchFramebuffer&&(this._sketchFramebuffer.end(),this.asciify())}async init(A){if(this._p=A,this._p5Version=$(A),!this._p5Version)throw new Y("Could not determine p5.js version. Ensure p5.js is properly loaded.");this._applyShaderPrecisionFix(),R(this._p5Version)?(this._baseFont=await this._p.loadFont(FA),await Promise.all(this._asciifiers.map(e=>e.init(A)))):(!this._p.preload&&typeof globalThis.preload!="function"&&(this._p.preload=()=>{}),this._p._incrementPreload(),await new Promise(e=>{this._baseFont=A.loadFont(FA,r=>{this._asciifiers.forEach(t=>{t.init(A)}),e()})}))}async setup(){if(this._sketchFramebuffer=this._p.createFramebuffer({depthFormat:this._p.UNSIGNED_INT,textureFiltering:this._p.NEAREST}),R(this._p5Version))for(const A of this._asciifiers)await A.setup(this._sketchFramebuffer,this._baseFont);else for(const A of this._asciifiers)A.setup(this._sketchFramebuffer,this._baseFont);this._setupDone=!0}background(A){a.validate(typeof A=="string"||Array.isArray(A)||O(this._p,A),`Invalid color type: ${typeof A}. Expected string, array or p5.Color.`,{providedValue:A,method:"background"})&&(this._backgroundColor=A)}fontSize(A){this._asciifiers.forEach(e=>{e.fontSize(A)})}font(A){this._asciifiers.forEach(e=>{e.font(A)})}gridDimensions(A,e){this._asciifiers.forEach(r=>{r.gridDimensions(A,e)})}gridResponsive(A=!0){this._asciifiers.forEach(e=>{e.gridResponsive(A)})}backgroundMode(A="fixed"){this._asciifiers.forEach(e=>{e.backgroundMode(A)})}asciify(){this._p.background(this._backgroundColor),this._asciifiers.forEach(A=>{A.asciify()})}asciifier(A=0){return!a.validate(typeof A=="number"&&!isNaN(A)&&Number.isInteger(A),"Index must be a valid integer.",{providedValue:A,method:"asciifier"})||!a.validate(A>=0&&A{try{return await r.init(this._p),this._setupDone&&this._sketchFramebuffer&&await r.setup(A||this._sketchFramebuffer,this._baseFont),this._asciifiers.push(r),r}catch(t){return a.validate(!1,`Failed to initialize asciifier: ${t instanceof Error?t.message:"Unknown error"}`,{providedValue:t,method:"add"}),null}})():(r.init(this._p),this._setupDone&&r.setup(A||this._sketchFramebuffer,this._baseFont),this._asciifiers.push(r),r)}remove(A){if(typeof A=="number"){const e=A;if(!a.validate(typeof e=="number"&&!isNaN(e)&&Number.isInteger(e),"Index must be a valid integer.",{providedValue:e,method:"remove"})||!a.validate(e>=0&&e{var t,i;return(i=(t=this._p)==null?void 0:t.constructor)==null?void 0:i.RendererGL},()=>typeof h<"u"&&h.RendererGL?h.RendererGL:void 0];for(const t of r)try{const i=t();if(i&&i.prototype){e=i;break}}catch{continue}if(!e||!e.prototype){console.warn("p5.asciify: Could not find RendererGL class, skipping shader precision fix for Android devices running below p5.js v1.11.3.");return}for(const[t,i]of A)if(typeof e.prototype[t]=="function"){const s=e.prototype[t];e.prototype[t]=function(){return this[i]||(this[i]=s.call(this),this[i]&&this[i]._vertSrc&&(this[i]._vertSrc=this[i]._vertSrc.replace(/mediump/g,"highp")),this[i]&&this[i]._fragSrc&&(this[i]._fragSrc=this[i]._fragSrc.replace(/mediump/g,"highp"))),this[i]}}}get pluginRegistry(){return this._pluginRegistry}get asciifiers(){return this._asciifiers}get sketchFramebuffer(){return this._sketchFramebuffer}};o(G,"_instance",null);let eA=G;const $A=Object.freeze(Object.defineProperty({__proto__:null,P5AsciifyDisplayRenderer:vA,P5AsciifyRenderer:oA,P5AsciifyRendererManager:yA,RENDERER_TYPES:Z,renderer2d:Object.freeze(Object.defineProperty({__proto__:null,CUSTOM_DEFAULT_OPTIONS_2D:nA,P5AsciifyRenderer2D:j,feature:Object.freeze(Object.defineProperty({__proto__:null,BRIGHTNESS_DEFAULT_OPTIONS:aA,EDGE_DEFAULT_OPTIONS:BA,P5AsciifyAbstractFeatureRenderer2D:N,P5AsciifyBrightnessRenderer:gA,P5AsciifyEdgeRenderer:QA},Symbol.toStringTag,{value:"Module"}))},Symbol.toStringTag,{value:"Module"}))},Symbol.toStringTag,{value:"Module"})),OA=Object.freeze(Object.defineProperty({__proto__:null,P5AsciifyPluginRegistry:SA},Symbol.toStringTag,{value:"Module"})),MA=eA.getInstance();typeof window<"u"&&(window.p5asciify=MA,window.P5AsciifyAbstractFeatureRenderer2D=N,window.P5AsciifyRenderer2D=j,window.P5AsciifyRenderer=oA,window.P5AsciifyErrorLevel=sA),f.P5Asciifier=q,f.P5AsciifierManager=eA,f.P5AsciifyColorPalette=wA,f.P5AsciifyFontManager=bA,f.P5AsciifyGrid=T,f.P5AsciifyHookManager=AA,f.errors=GA,f.p5asciify=MA,f.plugins=OA,f.renderers=$A,f.utils=VA,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});