@kecan0406/ttheme 1.2.13 → 1.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -12
- package/bin/package.json +1 -0
- package/bin/ttheme.js +244 -244
- package/bin/ttheme.js.map +1 -1
- package/dist/manifest.json +1 -1
- package/package.json +2 -2
- package/shell/adapters/_bg.zsh +2 -26
- package/shell/adapters/_osc.zsh +30 -0
- package/shell/adapters/terminal-app.zsh +0 -2
- package/shell/adapters/warp.zsh +0 -2
- package/shell/adapters/wezterm.zsh +3 -6
- package/shell/preview.zsh +103 -177
- package/shell/ttheme.zsh +3 -11
package/bin/ttheme.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as BM}from"node:module";var HM=Object.create;var{getPrototypeOf:FM,defineProperty:Hp,getOwnPropertyNames:CM}=Object;var LM=Object.prototype.hasOwnProperty;function jM(t){return this[t]}var _M,GM,Ll=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?_M??=new WeakMap:GM??=new WeakMap,s=i.get(t);if(s)return s}n=t!=null?HM(FM(t)):{};let o=e||!t||!t.__esModule?Hp(n,"default",{value:t,enumerable:!0}):n;for(let a of CM(t))if(!LM.call(o,a))Hp(o,a,{get:jM.bind(t,a),enumerable:!0});if(r)i.set(t,o);return o};var $t=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var zt=BM(import.meta.url);var ql=$t((v3,ig)=>{var aO=zt("util"),rg=zt("stream"),We=ig.exports=function(){rg.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};aO.inherits(We,rg);We.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){if(this._process(),this._paused&&this._reads&&this._reads.length>0)this._paused=!1,this.emit("drain")}.bind(this))};We.prototype.write=function(t,e){if(!this.writable)return this.emit("error",Error("Stream not writable")),!1;let n;if(Buffer.isBuffer(t))n=t;else n=Buffer.from(t,e||this._encoding);if(this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0)this._paused=!0;return this.writable&&!this._paused};We.prototype.end=function(t,e){if(t)this.write(t,e);if(this.writable=!1,!this._buffers)return;if(this._buffers.length===0)this._end();else this._buffers.push(null),this._process()};We.prototype.destroySoon=We.prototype.end;We.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};We.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};We.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];if(e.length>t.length)this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length));else this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e)};We.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);while(e<t.length){let i=this._buffers[n++],s=Math.min(i.length,t.length-e);if(i.copy(r,e,0,s),e+=s,s!==i.length)this._buffers[--n]=i.slice(s)}if(n>0)this._buffers.splice(0,n);this._buffered-=t.length,t.func.call(this,r)};We.prototype._process=function(){try{while(this._buffered>0&&this._reads&&this._reads.length>0){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}if(this._buffers&&!this.writable)this._end()}catch(t){this.emit("error",t)}}});var Yl=$t((cO)=>{var rr=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];cO.getImagePasses=function(t,e){let n=[],r=t%8,i=e%8,s=(t-r)/8,o=(e-i)/8;for(let a=0;a<rr.length;a++){let c=rr[a],u=s*c.x.length,l=o*c.y.length;for(let f=0;f<c.x.length;f++)if(c.x[f]<r)u++;else break;for(let f=0;f<c.y.length;f++)if(c.y[f]<i)l++;else break;if(u>0&&l>0)n.push({width:u,height:l,index:a})}return n};cO.getInterlaceIterator=function(t){return function(e,n,r){let i=e%rr[r].x.length,s=(e-i)/rr[r].x.length*8+rr[r].x[i],o=n%rr[r].y.length,a=(n-o)/rr[r].y.length*8+rr[r].y[o];return s*4+a*t*4}}});var Jl=$t((S3,sg)=>{sg.exports=function(e,n,r){let i=e+n-r,s=Math.abs(i-e),o=Math.abs(i-n),a=Math.abs(i-r);if(s<=o&&s<=a)return e;if(o<=a)return n;return r}});var Vl=$t((M3,ag)=>{var fO=Yl(),dO=Jl();function og(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var ns=ag.exports=function(t,e){let{width:n,height:r,interlace:i,bpp:s,depth:o}=t;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],i){let a=fO.getImagePasses(n,r);for(let c=0;c<a.length;c++)this._images.push({byteWidth:og(a[c].width,s,o),height:a[c].height,lineIndex:0})}else this._images.push({byteWidth:og(n,s,o),height:r,lineIndex:0});if(o===8)this._xComparison=s;else if(o===16)this._xComparison=s*2;else this._xComparison=1};ns.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};ns.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,i=r-1;for(let s=0;s<n;s++){let o=t[1+s],a=s>i?e[s-r]:0;e[s]=o+a}};ns.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let i=0;i<n;i++){let s=t[1+i],o=r?r[i]:0;e[i]=s+o}};ns.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],c=s?s[o]:0,u=o>i?e[o-r]:0,l=Math.floor((u+c)/2);e[o]=a+l}};ns.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],c=s?s[o]:0,u=o>i?e[o-r]:0,l=o>i&&s?s[o-r]:0,f=dO(u,c,l);e[o]=a+f}};ns.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],i=r.byteWidth;if(e===0)n=t.slice(1,i+1);else switch(n=Buffer.alloc(i),e){case 1:this._unFilterType1(t,n,i);break;case 2:this._unFilterType2(t,n,i);break;case 3:this._unFilterType3(t,n,i);break;case 4:this._unFilterType4(t,n,i);break;default:throw Error("Unrecognised filter type - "+e)}if(this.write(n),r.lineIndex++,r.lineIndex>=r.height)this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex];else this._lastLine=n;if(r)this.read(r.byteWidth+1,this._reverseFilterLine.bind(this));else this._lastLine=null,this.complete()}});var lg=$t((O3,ug)=>{var hO=zt("util"),cg=ql(),mO=Vl(),pO=ug.exports=function(t){cg.call(this);let e=[],n=this;this._filter=new mO(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};hO.inherits(pO,cg)});var rs=$t((x3,fg)=>{fg.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var Xl=$t((I3,dg)=>{var Zl=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)if(e&1)e=3988292384^e>>>1;else e=e>>>1;Zl[t]=e}})();var Ql=dg.exports=function(){this._crc=-1};Ql.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Zl[(this._crc^t[e])&255]^this._crc>>>8;return!0};Ql.prototype.crc32=function(){return this._crc^-1};Ql.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Zl[(e^t[n])&255]^e>>>8;return e^-1}});var tf=$t((R3,hg)=>{var Nt=rs(),gO=Xl(),Pt=hg.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[Nt.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Nt.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Nt.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Nt.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Nt.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Nt.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};Pt.prototype.start=function(){this.read(Nt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Pt.prototype._parseSignature=function(t){let e=Nt.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};Pt.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let s=4;s<8;s++)r+=String.fromCharCode(t[s]);let i=Boolean(t[4]&32);if(!this._hasIHDR&&n!==Nt.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new gO,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!i){this.error(Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};Pt.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Pt.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Pt.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(Error("Crc error - "+e+" - "+n));return}if(!this._hasIEND)this.read(8,this._parseChunkBegin.bind(this))};Pt.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};Pt.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],i=t[9],s=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(Error("Unsupported bit depth "+r));return}if(!(i in Nt.COLORTYPE_TO_BPP_MAP)){this.error(Error("Unsupported color type"));return}if(s!==0){this.error(Error("Unsupported compression method"));return}if(o!==0){this.error(Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let c=Nt.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:Boolean(a),palette:Boolean(i&Nt.COLORTYPE_PALETTE),color:Boolean(i&Nt.COLORTYPE_COLOR),alpha:Boolean(i&Nt.COLORTYPE_ALPHA),bpp:c,colorType:i}),this._handleChunkEnd()};Pt.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};Pt.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};Pt.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};Pt.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===Nt.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}if(this._colorType===Nt.COLORTYPE_GRAYSCALE)this.transColor([t.readUInt16BE(0)]);if(this._colorType===Nt.COLORTYPE_COLOR)this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]);this._handleChunkEnd()};Pt.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};Pt.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/Nt.GAMMA_DIVISION),this._handleChunkEnd()};Pt.prototype._handleIDAT=function(t){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-t,this._parseIDAT.bind(this,t))};Pt.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===Nt.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(e);let n=t-e.length;if(n>0)this._handleIDAT(n);else this._handleChunkEnd()};Pt.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};Pt.prototype._parseIEND=function(t){if(this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var ef=$t((vO)=>{var mg=Yl(),bO=[function(){},function(t,e,n,r){if(r===e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],wO=[function(){},function(t,e,n,r){let i=e[0];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function $O(t,e){let n=[],r=0;function i(){if(r===t.length)throw Error("Ran out of data");let s=t[r];r++;let o,a,c,u,l,f,d,h;switch(e){default:throw Error("unrecognised depth");case 16:d=t[r],r++,n.push((s<<8)+d);break;case 4:d=s&15,h=s>>4,n.push(h,d);break;case 2:l=s&3,f=s>>2&3,d=s>>4&3,h=s>>6&3,n.push(h,d,f,l);break;case 1:o=s&1,a=s>>1&1,c=s>>2&1,u=s>>3&1,l=s>>4&1,f=s>>5&1,d=s>>6&1,h=s>>7&1,n.push(h,d,f,l,u,c,a,o);break}}return{get:function(s){while(n.length<s)i();let o=n.slice(0,s);return n=n.slice(s),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw Error("extra data found")}}}function kO(t,e,n,r,i,s){let{width:o,height:a,index:c}=t;for(let u=0;u<a;u++)for(let l=0;l<o;l++){let f=n(l,u,c);bO[r](e,i,f,s),s+=r}return s}function yO(t,e,n,r,i,s){let{width:o,height:a,index:c}=t;for(let u=0;u<a;u++){for(let l=0;l<o;l++){let f=i.get(r),d=n(l,u,c);wO[r](e,f,d,s)}i.resetAfterLine()}}vO.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:s,interlace:o}=e,a;if(i!==8)a=$O(t,i);let c;if(i<=8)c=Buffer.alloc(n*r*4);else c=new Uint16Array(n*r*4);let u=Math.pow(2,i)-1,l=0,f,d;if(o)f=mg.getImagePasses(n,r),d=mg.getInterlaceIterator(n,r);else{let h=0;d=function(){let m=h;return h+=4,m},f=[{width:n,height:r}]}for(let h=0;h<f.length;h++)if(i===8)l=kO(f[h],c,d,s,t,l);else yO(f[h],c,d,s,a,u);if(i===8){if(l!==t.length)throw Error("extra data found")}else a.end();return c}});var nf=$t((T3,pg)=>{function SO(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let c=i[t[s]];if(!c)throw Error("index "+t[s]+" not in palette");for(let u=0;u<4;u++)e[s+u]=c[u];s+=4}}function MO(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let c=!1;if(i.length===1){if(i[0]===t[s])c=!0}else if(i[0]===t[s]&&i[1]===t[s+1]&&i[2]===t[s+2])c=!0;if(c)for(let u=0;u<4;u++)e[s+u]=0;s+=4}}function OO(t,e,n,r,i){let s=255,o=Math.pow(2,i)-1,a=0;for(let c=0;c<r;c++)for(let u=0;u<n;u++){for(let l=0;l<4;l++)e[a+l]=Math.floor(t[a+l]*s/o+0.5);a+=4}}pg.exports=function(t,e,n=!1){let{depth:r,width:i,height:s,colorType:o,transColor:a,palette:c}=e,u=t;if(o===3)SO(t,u,i,s,c);else{if(a)MO(t,u,i,s,a);if(r!==8&&!n){if(r===16)u=Buffer.alloc(i*s*4);OO(t,u,i,s,r)}}return u}});var wg=$t((A3,bg)=>{var xO=zt("util"),rf=zt("zlib"),gg=ql(),IO=lg(),RO=tf(),NO=ef(),TO=nf(),cn=bg.exports=function(t){gg.call(this),this._parser=new RO(t,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=t,this.writable=!0,this._parser.start()};xO.inherits(cn,gg);cn.prototype._handleError=function(t){if(this.emit("error",t),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy)this._inflate.destroy();if(this._filter)this._filter.destroy(),this._filter.on("error",function(){});this.errord=!0};cn.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=rf.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,rf.Z_MIN_CHUNK);this._inflate=rf.createInflate({chunkSize:r});let i=n,s=this.emit.bind(this,"error");this._inflate.on("error",function(a){if(!i)return;s(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){if(!i)return;if(a.length>i)a=a.slice(0,i);i-=a.length,o(a)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};cn.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new IO(this._bitmapInfo)};cn.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};cn.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};cn.prototype._simpleTransparency=function(){this._metaData.alpha=!0};cn.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};cn.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};cn.prototype._complete=function(t){if(this.errord)return;let e;try{let n=NO.dataToBitMap(t,this._bitmapInfo);e=TO(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var kg=$t((P3,$g)=>{var Pe=rs();$g.exports=function(t,e,n,r){let i=[Pe.COLORTYPE_COLOR_ALPHA,Pe.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let m=function(){let $=new ArrayBuffer(2);return new DataView($).setInt16(0,256,!0),new Int16Array($)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&m)return t}let s=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=Pe.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(a===4&&!r.inputHasAlpha)a=3;let c=Pe.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)o=65535,c*=2;let u=Buffer.alloc(e*n*c),l=0,f=0,d=r.bgColor||{};if(d.red===void 0)d.red=o;if(d.green===void 0)d.green=o;if(d.blue===void 0)d.blue=o;function h(){let m,$,g,b=o;switch(r.inputColorType){case Pe.COLORTYPE_COLOR_ALPHA:b=s[l+3],m=s[l],$=s[l+1],g=s[l+2];break;case Pe.COLORTYPE_COLOR:m=s[l],$=s[l+1],g=s[l+2];break;case Pe.COLORTYPE_ALPHA:b=s[l+1],m=s[l],$=m,g=m;break;case Pe.COLORTYPE_GRAYSCALE:m=s[l],$=m,g=m;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)b/=o,m=Math.min(Math.max(Math.round((1-b)*d.red+b*m),0),o),$=Math.min(Math.max(Math.round((1-b)*d.green+b*$),0),o),g=Math.min(Math.max(Math.round((1-b)*d.blue+b*g),0),o)}return{red:m,green:$,blue:g,alpha:b}}for(let m=0;m<n;m++)for(let $=0;$<e;$++){let g=h(s,l);switch(r.colorType){case Pe.COLORTYPE_COLOR_ALPHA:case Pe.COLORTYPE_COLOR:if(r.bitDepth===8){if(u[f]=g.red,u[f+1]=g.green,u[f+2]=g.blue,i)u[f+3]=g.alpha}else if(u.writeUInt16BE(g.red,f),u.writeUInt16BE(g.green,f+2),u.writeUInt16BE(g.blue,f+4),i)u.writeUInt16BE(g.alpha,f+6);break;case Pe.COLORTYPE_ALPHA:case Pe.COLORTYPE_GRAYSCALE:{let b=(g.red+g.green+g.blue)/3;if(r.bitDepth===8){if(u[f]=b,i)u[f+1]=g.alpha}else if(u.writeUInt16BE(b,f),i)u.writeUInt16BE(g.alpha,f+2);break}default:throw Error("unrecognised color Type "+r.colorType)}l+=a,f+=c}return u}});var Eg=$t((H3,vg)=>{var yg=Jl();function AO(t,e,n,r,i){for(let s=0;s<n;s++)r[i+s]=t[e+s]}function PO(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++)r+=Math.abs(t[s]);return r}function HO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=t[e+o]-a;r[i+o]=c}}function FO(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=t[e+s]-o;i+=Math.abs(a)}return i}function CO(t,e,n,r,i){for(let s=0;s<n;s++){let o=e>0?t[e+s-n]:0,a=t[e+s]-o;r[i+s]=a}}function LO(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++){let o=e>0?t[s-n]:0,a=t[s]-o;r+=Math.abs(a)}return r}function jO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=e>0?t[e+o-n]:0,u=t[e+o]-(a+c>>1);r[i+o]=u}}function _O(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,c=t[e+s]-(o+a>>1);i+=Math.abs(c)}return i}function GO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=e>0?t[e+o-n]:0,u=e>0&&o>=s?t[e+o-(n+s)]:0,l=t[e+o]-yg(a,c,u);r[i+o]=l}}function BO(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,c=e>0&&s>=r?t[e+s-(n+r)]:0,u=t[e+s]-yg(o,a,c);i+=Math.abs(u)}return i}var UO={0:AO,1:HO,2:CO,3:jO,4:GO},WO={0:PO,1:FO,2:LO,3:_O,4:BO};vg.exports=function(t,e,n,r,i){let s;if(!("filterType"in r)||r.filterType===-1)s=[0,1,2,3,4];else if(typeof r.filterType==="number")s=[r.filterType];else throw Error("unrecognised filter types");if(r.bitDepth===16)i*=2;let o=e*i,a=0,c=0,u=Buffer.alloc((o+1)*n),l=s[0];for(let f=0;f<n;f++){if(s.length>1){let d=1/0;for(let h=0;h<s.length;h++){let m=WO[s[h]](t,c,o,i);if(m<d)l=s[h],d=m}}u[a]=l,a++,UO[l](t,c,o,u,a,i),a+=o,c+=o}return u}});var sf=$t((F3,Sg)=>{var Dt=rs(),KO=Xl(),zO=kg(),DO=Eg(),qO=zt("zlib"),ir=Sg.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32768,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||qO.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType==="number"?t.colorType:Dt.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType==="number"?t.inputColorType:Dt.COLORTYPE_COLOR_ALPHA,[Dt.COLORTYPE_GRAYSCALE,Dt.COLORTYPE_COLOR,Dt.COLORTYPE_COLOR_ALPHA,Dt.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw Error("option color type:"+t.colorType+" is not supported at present");if([Dt.COLORTYPE_GRAYSCALE,Dt.COLORTYPE_COLOR,Dt.COLORTYPE_COLOR_ALPHA,Dt.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw Error("option bit depth:"+t.bitDepth+" is not supported at present")};ir.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};ir.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};ir.prototype.filterData=function(t,e,n){let r=zO(t,e,n,this._options),i=Dt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return DO(r,e,n,this._options,i)};ir.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);if(r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e)e.copy(r,8);return r.writeInt32BE(KO.crc32(r.slice(4,r.length-4)),r.length-4),r};ir.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*Dt.GAMMA_DIVISION),0),this._packChunk(Dt.TYPE_gAMA,e)};ir.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(Dt.TYPE_IHDR,n)};ir.prototype.packIDAT=function(t){return this._packChunk(Dt.TYPE_IDAT,t)};ir.prototype.packIEND=function(){return this._packChunk(Dt.TYPE_IEND,null)}});var Ig=$t((C3,xg)=>{var YO=zt("util"),Mg=zt("stream"),JO=rs(),VO=sf(),Og=xg.exports=function(t){Mg.call(this);let e=t||{};this._packer=new VO(e),this._deflate=this._packer.createDeflate(),this.readable=!0};YO.inherits(Og,Mg);Og.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(JO.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r)this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(s){this.emit("data",this._packer.packIDAT(s))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(i)}});var Hg=$t((ho,Pg)=>{var Rg=zt("assert").ok,is=zt("zlib"),ZO=zt("util"),Ng=zt("buffer").kMaxLength;function ti(t){if(!(this instanceof ti))return new ti(t);if(t&&t.chunkSize<is.Z_MIN_CHUNK)t.chunkSize=is.Z_MIN_CHUNK;if(is.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null)this._maxLength=t.maxLength}function QO(t){return new ti(t)}function Tg(t,e){if(e)process.nextTick(e);if(!t._handle)return;t._handle.close(),t._handle=null}ti.prototype._processChunk=function(t,e,n){if(typeof n==="function")return is.Inflate._processChunk.call(this,t,e,n);let r=this,i=t&&t.length,s=this._chunkSize-this._offset,o=this._maxLength,a=0,c=[],u=0,l;this.on("error",function(m){l=m});function f(m,$){if(r._hadError)return;let g=s-$;if(Rg(g>=0,"have should not go down"),g>0){let b=r._buffer.slice(r._offset,r._offset+g);if(r._offset+=g,b.length>o)b=b.slice(0,o);if(c.push(b),u+=b.length,o-=b.length,o===0)return!1}if($===0||r._offset>=r._chunkSize)s=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if($===0)return a+=i-m,i=m,!0;return!1}Rg(this._handle,"zlib binding closed");let d;do d=this._handle.writeSync(e,t,a,i,this._buffer,this._offset,s),d=d||this._writeState;while(!this._hadError&&f(d[0],d[1]));if(this._hadError)throw l;if(u>=Ng)throw Tg(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+Ng.toString(16)+" bytes");let h=Buffer.concat(c,u);return Tg(this),h};ZO.inherits(ti,is.Inflate);function XO(t,e){if(typeof e==="string")e=Buffer.from(e);if(!(e instanceof Buffer))throw TypeError("Not a string or buffer");let n=t._finishFlushFlag;if(n==null)n=is.Z_FINISH;return t._processChunk(e,n)}function Ag(t,e){return XO(new ti(e),t)}Pg.exports=ho=Ag;ho.Inflate=ti;ho.createInflate=QO;ho.inflateSync=Ag});var of=$t((L3,Cg)=>{var Fg=Cg.exports=function(t){this._buffer=t,this._reads=[]};Fg.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Fg.prototype.process=function(){while(this._reads.length>0&&this._buffer.length){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.length))}else break}if(this._reads.length>0)throw Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)throw Error("unrecognised content at end of stream")}});var Lg=$t((nx)=>{var tx=of(),ex=Vl();nx.process=function(t,e){let n=[],r=new tx(t);return new ex(e,{read:r.read.bind(r),write:function(s){n.push(s)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Bg=$t((_3,Gg)=>{var jg=!0,_g=zt("zlib"),ix=Hg();if(!_g.deflateSync)jg=!1;var sx=of(),ox=Lg(),ax=tf(),cx=ef(),ux=nf();Gg.exports=function(t,e){if(!jg)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(S){n=S}let i;function s(S){i=S}function o(S){i.transColor=S}function a(S){i.palette=S}function c(){i.alpha=!0}let u;function l(S){u=S}let f=[];function d(S){f.push(S)}let h=new sx(t);if(new ax(e,{read:h.read.bind(h),error:r,metadata:s,gamma:l,palette:a,transColor:o,inflateData:d,simpleTransparency:c}).start(),h.process(),n)throw n;let $=Buffer.concat(f);f.length=0;let g;if(i.interlace)g=_g.inflateSync($);else{let x=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;g=ix($,{chunkSize:x,maxLength:x})}if($=null,!g||!g.length)throw Error("bad png - invalid inflate data response");let b=ox.process(g,i);$=null;let y=cx.dataToBitMap(b,i);b=null;let E=ux(y,i,e.skipRescale);return i.data=E,i.gamma=u||0,i}});var zg=$t((G3,Kg)=>{var Ug=!0,Wg=zt("zlib");if(!Wg.deflateSync)Ug=!1;var lx=rs(),fx=sf();Kg.exports=function(t,e){if(!Ug)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new fx(e||{}),i=[];if(i.push(Buffer.from(lx.PNG_SIGNATURE)),i.push(r.packIHDR(t.width,t.height)),t.gamma)i.push(r.packGAMA(t.gamma));let s=r.filterData(t.data,t.width,t.height),o=Wg.deflateSync(s,r.getDeflateOptions());if(s=null,!o||!o.length)throw Error("bad png - invalid compressed data response");return i.push(r.packIDAT(o)),i.push(r.packIEND()),Buffer.concat(i)}});var Dg=$t((mx)=>{var dx=Bg(),hx=zg();mx.read=function(t,e){return dx(t,e||{})};mx.write=function(t,e){return hx(t,e)}});var Yg=$t((yx)=>{var bx=zt("util"),qg=zt("stream"),wx=wg(),$x=Ig(),kx=Dg(),Zt=yx.PNG=function(t){if(qg.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data)this.data.fill(0);this.gamma=0,this.readable=this.writable=!0,this._parser=new wx(t),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new $x(t),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};bx.inherits(Zt,qg);Zt.sync=kx;Zt.prototype.pack=function(){if(!this.data||!this.data.length)return this.emit("error","No data provided"),this;return process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this};Zt.prototype.parse=function(t,e){if(e){let n,r;n=function(i){this.removeListener("error",r),this.data=i,e(null,this)}.bind(this),r=function(i){this.removeListener("parsed",n),e(i,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};Zt.prototype.write=function(t){return this._parser.write(t),!0};Zt.prototype.end=function(t){this._parser.end(t)};Zt.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};Zt.prototype._gamma=function(t){this.gamma=t};Zt.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};Zt.bitblt=function(t,e,n,r,i,s,o,a){if(n|=0,r|=0,i|=0,s|=0,o|=0,a|=0,n>t.width||r>t.height||n+i>t.width||r+s>t.height)throw Error("bitblt reading outside image");if(o>e.width||a>e.height||o+i>e.width||a+s>e.height)throw Error("bitblt writing outside image");for(let c=0;c<s;c++)t.data.copy(e.data,(a+c)*e.width+o<<2,(r+c)*t.width+n<<2,(r+c)*t.width+n+i<<2)};Zt.prototype.bitblt=function(t,e,n,r,i,s,o){return Zt.bitblt(this,t,e,n,r,i,s,o),this};Zt.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let i=0;i<3;i++){let s=t.data[r+i]/255;s=Math.pow(s,0.45454545454545453/t.gamma),t.data[r+i]=Math.round(s*255)}}t.gamma=0}};Zt.prototype.adjustGamma=function(){Zt.adjustGamma(this)}});var yd=$t((t5,j0)=>{var kd={to(t,e){if(!e)return`\x1B[${t+1}G`;return`\x1B[${e+1};${t+1}H`},move(t,e){let n="";if(t<0)n+=`\x1B[${-t}D`;else if(t>0)n+=`\x1B[${t}C`;if(e<0)n+=`\x1B[${-e}A`;else if(e>0)n+=`\x1B[${e}B`;return n},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},wR={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},$R={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let n=0;n<t;n++)e+=this.line+(n<t-1?kd.up():"");if(t)e+=kd.left;return e}};j0.exports={cursor:kd,scroll:wR,erase:$R,beep:"\x07"}});import{spawnSync as i3}from"node:child_process";import{isMainThread as s3}from"node:worker_threads";import{parseArgs as VL}from"node:util";var It={name:"@kecan0406/ttheme",version:"1.2.13",type:"module",bin:{ttheme:"bin/ttheme.js"},files:["bin","dist/manifest.json","shell","!shell/check.zsh"],description:"Character terminal palettes for Ghostty, kitty, Alacritty, WezTerm, iTerm2, Windows Terminal, Warp and Konsole",license:"MIT",author:"kecan0406",repository:{type:"git",url:"git+https://github.com/kecan0406/ttheme.git"},homepage:"https://github.com/kecan0406/ttheme#readme",bugs:"https://github.com/kecan0406/ttheme/issues",keywords:["terminal","theme","ghostty","kitty","alacritty","wezterm","iterm2","konsole"],devDependencies:{"@biomejs/biome":"^2.3.0","@clack/prompts":"^1.7.0","@jsquash/jpeg":"^1.6.0","@material/material-color-utilities":"^0.4.0","@types/bun":"^1.3.0","@types/pngjs":"6.0.5","@xterm/headless":"6.0.0","fast-string-width":"^3.0.2",pngjs:"7.0.0","smol-toml":"^1.9.0",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=20.11"}};import{existsSync as _C,readFileSync as GC}from"node:fs";var Fp=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(e)=>{let n=0;t.lastIndex=0;while(t.test(e))n+=1;return e.length-n}})(),Cp=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Lp=(t)=>{return t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141};var WM=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,KM=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,jp=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,zM=/\t{1,1000}/y,_p=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,DM=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,qM=/\p{M}+/gu,YM={limit:1/0,ellipsis:""},Gp=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",s=e?.ellipsisWidth??(i?Gp(i,YM,n).width:0),o=0,a=n.controlWidth??0,c=n.tabWidth??8,u=n.emojiWidth??2,l=2,f=n.regularWidth??1,d=n.wideWidth??2,h=[[DM,f],[WM,0],[KM,a],[zM,c],[_p,u],[jp,d]],m=0,$=0,g=t.length,b=0,y=!1,E=g,S=Math.max(0,r-s),x=0,R=0,N=0,F=0;t:while(!0){if(R>x||$>=g&&$>m){let _=t.slice(x,R)||t.slice(m,$);b=0;for(let B of _.replaceAll(qM,"")){let tt=B.codePointAt(0)||0;if(Cp(tt))F=2;else if(Lp(tt))F=d;else F=f;if(N+F>S)E=Math.min(E,Math.max(x,m)+b);if(N+F>r){y=!0;break t}b+=B.length,N+=F}x=R=0}if($>=g)break t;for(let _=0,B=h.length;_<B;_++){let[tt,W]=h[_];if(tt.lastIndex=$,tt.test(t)){if(b=tt===jp?Fp(t.slice($,tt.lastIndex)):tt===_p?1:tt.lastIndex-$,F=b*W,N+F>S)E=Math.min(E,$+Math.floor((S-N)/W));if(N+F>r){y=!0;break t}N+=F,x=m,R=$,$=m=tt.lastIndex;continue t}}$+=1}return{width:y?S:N,index:y?E:g,truncated:y,ellipsed:y&&r>=s}},Bp=Gp;var JM={limit:1/0,ellipsis:"",ellipsisWidth:0},VM=(t,e={})=>{return Bp(t,JM,e).width},X=VM;function jl(t){let e=t.replace("#","");return[e.slice(0,2),e.slice(2,4),e.slice(4,6)].map((n)=>Number.parseInt(n,16)).join(";")}function Be(t){return`\x1B[38;2;${jl(t)}m`}function Ga(t,e){return`\x1B[48;2;${jl(t)};38;2;${jl(e)}m`}function Up(t,e="\x1B[39m"){return`${t.map((n)=>`${Be(n)}■`).join(" ")}${e}`}var At="\x1B[0m",at="\x1B[1m",A="\x1B[2m",ge="\x1B[22m",Zi="\x1B[32m",Vt="\x1B[33m",Ba="\x1B[36m",xn=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],uo="⧉";function Ua(t,e){return e?`\x1B]8;;${e}\x1B\\${t}\x1B]8;;\x1B\\`:t}function _l(t,e){if(t[e]!=="\x1B")return 0;if(t[e+1]==="]"){let r=t.indexOf("\x07",e+2),i=t.indexOf("\x1B\\",e+2),s=r!==-1&&(i===-1||r<i)?r+1:i!==-1?i+2:0;return s?s-e:0}if(t[e+1]!=="[")return 0;let n=e+2;while(n<t.length&&!/[@-~]/.test(t[n]))n++;return n<t.length?n-e+1:0}function Gl(t,e){let n="",r=0,i=0;while(i<t.length){let s=_l(t,i);if(s>0){n+=t.slice(i,i+s),i+=s;continue}let o=String.fromCodePoint(t.codePointAt(i)),a=X(o);if(r+a>e)break;n+=o,r+=a,i+=o.length}return{head:n,used:r}}function ot(t,e,n=!0){if(e<=0)return"";let r=X(t);if(r<=e)return n?t+" ".repeat(e-r):t;let{head:i,used:s}=Gl(t,e-1);return`${i}${t.includes("\x1B")?"\x1B[0m":""}…${n?" ".repeat(e-1-s):""}`}function Wp(t,e){let{head:n,used:r}=Gl(t,e);return`${n}${t.includes("\x1B")?At:""}${" ".repeat(e-r)}`}function Gt(t,e,n){let r=n-X(e)-1;return r<=0?ot(t,n):`${ot(t,r)} ${e}`}function bt(t,e){let n=[],r="";for(let i of t.split(/\s+/).filter(Boolean)){let s=r?`${r} ${i}`:i;if(X(s)<=e){r=s;continue}if(r)n.push(r);while(X(i)>e){let{head:o}=Gl(i,e),a=Math.max(o.lastIndexOf("/")+1,o.lastIndexOf("#")),c=a>0?a:o.length;n.push(i.slice(0,c)),i=i.slice(c)}r=i}if(r)n.push(r);return n}import{existsSync as g0,readFileSync as dd}from"node:fs";import{join as b0}from"node:path";var ZM=/^#[0-9a-f]{6}$/;function oe(t){return ZM.test(t)}function rt(t){let e=Number.parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function Bt(t,e,n){let r=rt(t),i=rt(e);return`#${r.map((s,o)=>Math.round(s+((i[o]??0)-s)*n).toString(16).padStart(2,"0")).join("")}`}function vt(t){let[e,n,r]=rt(t).map((i)=>{let s=i/255;return s<=0.03928?s/12.92:((s+0.055)/1.055)**2.4});return 0.2126*e+0.7152*n+0.0722*r}function wt(t,e){let n=vt(t),r=vt(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function Wa(t,e){return Math.round(wt(t,e)*100)/100}function QM(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function St(t){let[e,n,r]=rt(t).map(QM),i=Math.cbrt(0.4122214708*e+0.5363325363*n+0.0514459929*r),s=Math.cbrt(0.2119034982*e+0.6806995451*n+0.1073969566*r),o=Math.cbrt(0.0883024619*e+0.2817188376*n+0.6299787005*r),a=1.9779984951*i-2.428592205*s+0.4505937099*o,c=0.0259040371*i+0.7827717662*s-0.808675766*o;return{l:0.2104542553*i+0.793617785*s-0.0040720468*o,c:Math.hypot(a,c),h:(Math.atan2(c,a)*180/Math.PI+360)%360}}var tr=7,Kp=3,Bl=0.15,zp=1.6,Wl=[1,2,3,4,5,6,9,10,11,12,13,14],Dp=[7,15],er=[1,2,3,4,5,6],be={1:{name:"red",center:19,width:25},2:{name:"green",center:132,width:35},3:{name:"yellow",center:88,width:35},4:{name:"blue",center:250,width:60},5:{name:"magenta",center:329,width:40},6:{name:"cyan",center:197,width:60}},fo=0.03,Ue=25,Qi=15,Xi=0.08;function In(t,e){let n=t.ansi[e];if(n===void 0)throw Error(`${t.name}: missing ANSI ${e}`);return n}function Ul(t,e,n){let r=t.background;return e.flatMap((i)=>{let s=In(t,i);return wt(s,r)<n?[`ANSI ${i} ${s} on ${r} is ${Wa(s,r)}:1, needs ${n}:1`]:[]})}function qp(t,e){return Math.min(...e.map((n)=>wt(In(t,n),t.background)))}var Yp=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:tr,measure:({foreground:t,background:e})=>wt(t,e),check:({foreground:t,background:e})=>wt(t,e)<tr?[`foreground ${t} on ${e} is ${Wa(t,e)}:1, needs ${tr}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:Kp,measure:(t)=>qp(t,Wl),check:(t)=>Ul(t,Wl,Kp)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:Bl,measure:(t)=>vt(In(t,0)),check:(t)=>{let e=In(t,0);return vt(e)>Bl?[`ANSI 0 ${e} has luminance ${vt(e).toFixed(3)}, needs <= ${Bl}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:tr,measure:(t)=>qp(t,Dp),check:(t)=>Ul(t,Dp,tr)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:zp,measure:(t)=>wt(In(t,8),t.background),check:(t)=>Ul(t,[8],zp)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:tr,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:wt(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&wt(t,e)<tr?[`foreground ${t} on selection ${e} is ${Wa(t,e)}:1, needs ${tr}:1`]:[]}];function Ae(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var sn=(t)=>t>8?t-8:t;function ts(t){let e=t.signatureSlots.filter((n)=>n.startsWith("ansi")).map((n)=>Number(n.slice(4)));return new Set(e.flatMap((n)=>er.includes(sn(n))?[n,n>8?n-8:n+8]:[n]))}function lo(t,e){let n=St(In(t,e));return n.c<fo?void 0:n}function nr(t){let e=ts(t);return Wl.flatMap((n)=>{let r=lo(t,n),i=be[sn(n)];if(r===void 0||i===void 0||e.has(n))return[];let s=Ae(r.h,i.center)-i.width;return s>0?[{slot:n,hue:r.h,over:s}]:[]})}function Rn(t){let e=new Set(t.signatureSlots);return er.flatMap((n)=>{let r=lo(t,n),i=lo(t,n+8);if(r===void 0||i===void 0||e.has(`ansi${n}`)&&e.has(`ansi${n+8}`))return[];return[{normal:n,gap:Ae(r.h,i.h)}]})}function Nn(t){let e=ts(t);return[0,8].flatMap((n)=>er.flatMap((r)=>er.filter((i)=>i>r).flatMap((i)=>{let[s,o]=[n+r,n+i],a=lo(t,s),c=lo(t,o);if(a===void 0||c===void 0||e.has(s)&&e.has(o))return[];return Ae(a.h,c.h)<Qi&&Math.abs(a.l-c.l)<Xi?[[s,o]]:[]})))}var XM=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...nr(t).map((e)=>e.over)),check:(t)=>nr(t).map(({slot:e,hue:n,over:r})=>{let i=be[sn(e)];return`ANSI ${e} ${In(t,e)} has hue ${n.toFixed(0)}°, ${r.toFixed(0)}° outside ${i.name} (${i.center}±${i.width}°)`})},{rule:"bright-follows",label:"widest normal to bright hue gap",unit:"degrees",max:Ue,measure:(t)=>Math.max(0,...Rn(t).map((e)=>e.gap)),check:(t)=>Rn(t).filter((e)=>e.gap>Ue).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${Ue}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(t)=>Nn(t).length,check:(t)=>Nn(t).map(([e,n])=>`ANSI ${e} ${In(t,e)} and ANSI ${n} ${In(t,n)} are within ${Qi}° hue and ${Xi} lightness`)}],Ka=[...Yp,...XM],Kl=Ka.map((t)=>t.rule),we=Ka.map(({rule:t,label:e,unit:n,min:r,max:i})=>({rule:t,label:e,unit:n,...r===void 0?{}:{min:r},...i===void 0?{}:{max:i}}));function on(t){return Ka.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Jp(t,e){return t.filter((n)=>!e.waive.includes(n.rule)).flatMap((n)=>n.check(e).map((r)=>({theme:e.name,rule:n.rule,detail:r})))}function Qr(t){return Jp(Ka,t)}function Vp(t){return Jp(Yp,t)}function Zp(t){return t.flatMap(Qr)}import{chmodSync as tO,copyFileSync as eO,existsSync as es,mkdirSync as nO,readFileSync as zl,realpathSync as rO,renameSync as Xp,rmSync as Qp,statSync as iO,writeFileSync as tg}from"node:fs";import{dirname as sO}from"node:path";function eg(t){return`${t}.ttheme.bak`}var oO=/^(?:#|--) ttheme begin$|path = "ttheme-|^DefaultProfile=ttheme-/m;function Dl(t){let e=eg(t);if(es(t)&&!es(e)&&!oO.test(zl(t,"utf8")))eO(t,e)}function P(t,e){let n=es(t)?rO(t):t;nO(sO(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(tg(r,e),es(n))tO(r,iO(n).mode&4095);Xp(r,n)}function Xr(t,e,n){if(tg(t,n),t!==e)Xp(t,e)}function an(t,e){if((es(t)?zl(t,"utf8"):void 0)===e)return!1;return Dl(t),P(t,e),!0}function ng(t,e){let n=eg(t),r=es(n)?zl(n,"utf8"):void 0;if(e===""&&r===void 0)return Qp(t,{force:!0}),"removed";if(P(t,e),r===void 0||r===e)return Qp(n,{force:!0}),"restored";return"kept backup"}import{createHash as fw}from"node:crypto";import{copyFileSync as e2,existsSync as Hf,mkdirSync as n2,readdirSync as r2,readFileSync as ms,renameSync as dw,rmSync as hs,statSync as i2}from"node:fs";import{basename as hw,isAbsolute as s2,join as D}from"node:path";import{createHash as xI}from"node:crypto";import{existsSync as II,readdirSync as RI,readFileSync as NI,rmSync as TI,statSync as AI,utimesSync as PI}from"node:fs";import{join as fs}from"node:path";import{readdirSync as Hx,rmSync as Fx,statSync as Cx}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as Lx}from"node:net";import{homedir as jx}from"node:os";import{join as wo}from"node:path";import{setTimeout as _x}from"node:timers/promises";var Qg=Ll(Yg(),1);import{constants as Mx,deflateSync as Ox,inflateSync as xx}from"node:zlib";import{inflateRawSync as Ex}from"node:zlib";var vx=(()=>{var t=import.meta.url;return function(e={}){var n=e,r,i,s=new Promise((p,w)=>{r=p,i=w});let a=globalThis.ServiceWorkerGlobalScope!==void 0&&typeof self<"u"&&globalThis.caches&&globalThis.caches.default!==void 0,c=typeof process==="object"&&process.release&&process.release.name==="node";if(a||c){if(!globalThis.ImageData)globalThis.ImageData=class{constructor(w,k,v){this.data=w,this.width=k,this.height=v}};if(import.meta.url===void 0)import.meta.url="https://localhost";if(typeof self<"u"&&self.location===void 0)self.location={href:""}}var u=Object.assign({},n),l=[],f="./this.program",d=(p,w)=>{throw w},h=typeof window=="object",m=typeof importScripts=="function",$=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function b(p){if(n.locateFile)return n.locateFile(p,g);return g+p}var y,E,S;if(h||m){if(m)g=self.location.href;else if(typeof document<"u"&&document.currentScript)g=document.currentScript.src;if(t)g=t;if(g.startsWith("blob:"))g="";else g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1);{if(y=(p)=>{var w=new XMLHttpRequest;return w.open("GET",p,!1),w.send(null),w.responseText},m)S=(p)=>{var w=new XMLHttpRequest;return w.open("GET",p,!1),w.responseType="arraybuffer",w.send(null),new Uint8Array(w.response)};E=(p,w,k)=>{var v=new XMLHttpRequest;v.open("GET",p,!0),v.responseType="arraybuffer",v.onload=()=>{if(v.status==200||v.status==0&&v.response){w(v.response);return}k()},v.onerror=k,v.send(null)}}}var x=n.print||console.log.bind(console),R=n.printErr||console.error.bind(console);if(Object.assign(n,u),u=null,n.arguments)l=n.arguments;if(n.thisProgram)f=n.thisProgram;if(n.quit)d=n.quit;var N;if(n.wasmBinary)N=n.wasmBinary;var F,_=!1,B,tt,W,Q,U,yt,et,Xn,en;function nn(){var p=F.buffer;n.HEAP8=tt=new Int8Array(p),n.HEAP16=Q=new Int16Array(p),n.HEAPU8=W=new Uint8Array(p),n.HEAPU16=U=new Uint16Array(p),n.HEAP32=yt=new Int32Array(p),n.HEAPU32=et=new Uint32Array(p),n.HEAPF32=Xn=new Float32Array(p),n.HEAPF64=en=new Float64Array(p)}var rn=[],Ca=[],Dr=[],El=!1;function Sl(){if(n.preRun){if(typeof n.preRun=="function")n.preRun=[n.preRun];while(n.preRun.length)zE(n.preRun.shift())}xl(rn)}function Ml(){El=!0,xl(Ca)}function KE(){if(n.postRun){if(typeof n.postRun=="function")n.postRun=[n.postRun];while(n.postRun.length)qE(n.postRun.shift())}xl(Dr)}function zE(p){rn.unshift(p)}function DE(p){Ca.unshift(p)}function qE(p){Dr.unshift(p)}var qr=0,Ol=null,ao=null;function YE(p){qr++,n.monitorRunDependencies?.(qr)}function JE(p){if(qr--,n.monitorRunDependencies?.(qr),qr==0){if(Ol!==null)clearInterval(Ol),Ol=null;if(ao){var w=ao;ao=null,w()}}}function mp(p){n.onAbort?.(p),p="Aborted("+p+")",R(p),_=!0,B=1,p+=". Build with -sASSERTIONS for more info.";var w=new WebAssembly.RuntimeError(p);throw i(w),w}var VE="data:application/octet-stream;base64,",pp=(p)=>p.startsWith(VE),Yr;if(n.locateFile){if(Yr="mozjpeg_dec.wasm",!pp(Yr))Yr=b(Yr)}else Yr=new URL("mozjpeg_dec.wasm",import.meta.url).href;function gp(p){if(p==Yr&&N)return new Uint8Array(N);if(S)return S(p);throw"both async and sync fetching of the wasm failed"}function ZE(p){if(!N&&(h||m)){if(typeof fetch=="function")return fetch(p,{credentials:"same-origin"}).then((w)=>{if(!w.ok)throw`failed to load wasm binary file at '${p}'`;return w.arrayBuffer()}).catch(()=>gp(p))}return Promise.resolve().then(()=>gp(p))}function bp(p,w,k){return ZE(p).then((v)=>WebAssembly.instantiate(v,w)).then(k,(v)=>{R(`failed to asynchronously prepare wasm: ${v}`),mp(v)})}function QE(p,w,k,v){if(!p&&typeof WebAssembly.instantiateStreaming=="function"&&!pp(w)&&typeof fetch=="function")return fetch(w,{credentials:"same-origin"}).then((O)=>{var I=WebAssembly.instantiateStreaming(O,k);return I.then(v,function(C){return R(`wasm streaming compile failed: ${C}`),R("falling back to ArrayBuffer instantiation"),bp(w,k,v)})});return bp(w,k,v)}function XE(){var p={a:EM};function w(v,O){return Yt=v.exports,F=Yt.A,nn(),Mp=Yt.F,DE(Yt.B),JE("wasm-instantiate"),Yt}YE("wasm-instantiate");function k(v){w(v.instance)}if(n.instantiateWasm)try{return n.instantiateWasm(p,w)}catch(v){R(`Module.instantiateWasm callback failed with error: ${v}`),i(v)}return QE(N,Yr,p,k).catch(i),{}}function tS(p){this.name="ExitStatus",this.message=`Program terminated with exit(${p})`,this.status=p}var xl=(p)=>{while(p.length>0)p.shift()(n)},eS=n.noExitRuntime||!0;class wp{constructor(p){this.excPtr=p,this.ptr=p-24}set_type(p){et[this.ptr+4>>2]=p}get_type(){return et[this.ptr+4>>2]}set_destructor(p){et[this.ptr+8>>2]=p}get_destructor(){return et[this.ptr+8>>2]}set_caught(p){p=p?1:0,tt[this.ptr+12]=p}get_caught(){return tt[this.ptr+12]!=0}set_rethrown(p){p=p?1:0,tt[this.ptr+13]=p}get_rethrown(){return tt[this.ptr+13]!=0}init(p,w){this.set_adjusted_ptr(0),this.set_type(p),this.set_destructor(w)}set_adjusted_ptr(p){et[this.ptr+16>>2]=p}get_adjusted_ptr(){return et[this.ptr+16>>2]}get_exception_ptr(){var p=Ap(this.get_type());if(p)return et[this.excPtr>>2];var w=this.get_adjusted_ptr();if(w!==0)return w;return this.excPtr}}var $p=0,nS=0,rS=(p,w,k)=>{var v=new wp(p);throw v.init(w,k),$p=p,nS++,$p},iS=(p,w,k,v,O)=>{},sS=()=>{var p=Array(256);for(var w=0;w<256;++w)p[w]=String.fromCharCode(w);kp=p},kp,Ge=(p)=>{var w="",k=p;while(W[k])w+=kp[W[k++]];return w},qi={},Jr={},La={},yp,pe=(p)=>{throw new yp(p)},vp,Ep=(p)=>{throw new vp(p)},oS=(p,w,k)=>{p.forEach(function(T){La[T]=w});function v(T){var G=k(T);if(G.length!==p.length)Ep("Mismatched type converter count");for(var V=0;V<p.length;++V)Sn(p[V],G[V])}var O=Array(w.length),I=[],C=0;if(w.forEach((T,G)=>{if(Jr.hasOwnProperty(T))O[G]=Jr[T];else{if(I.push(T),!qi.hasOwnProperty(T))qi[T]=[];qi[T].push(()=>{if(O[G]=Jr[T],++C,C===I.length)v(O)})}}),I.length===0)v(O)};function aS(p,w,k={}){var v=w.name;if(!p)pe(`type "${v}" must have a positive integer typeid pointer`);if(Jr.hasOwnProperty(p))if(k.ignoreDuplicateRegistrations)return;else pe(`Cannot register type '${v}' twice`);if(Jr[p]=w,delete La[p],qi.hasOwnProperty(p)){var O=qi[p];delete qi[p],O.forEach((I)=>I())}}function Sn(p,w,k={}){if(!("argPackAdvance"in w))throw TypeError("registerType registeredInstance requires argPackAdvance");return aS(p,w,k)}var Vr=8,cS=(p,w,k,v)=>{w=Ge(w),Sn(p,{name:w,fromWireType:function(O){return!!O},toWireType:function(O,I){return I?k:v},argPackAdvance:Vr,readValueFromPointer:function(O){return this.fromWireType(W[O])},destructorFunction:null})},Il=[],Mn=[],Rl=(p)=>{if(p>9&&--Mn[p+1]===0)Mn[p]=void 0,Il.push(p)},uS=()=>Mn.length/2-5-Il.length,lS=()=>{Mn.push(0,1,void 0,1,null,1,!0,1,!1,1),n.count_emval_handles=uS},Zr={toValue:(p)=>{if(!p)pe("Cannot use deleted val. handle = "+p);return Mn[p]},toHandle:(p)=>{switch(p){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let w=Il.pop()||Mn.length;return Mn[w]=p,Mn[w+1]=1,w}}}};function Nl(p){return this.fromWireType(et[p>>2])}var fS={name:"emscripten::val",fromWireType:(p)=>{var w=Zr.toValue(p);return Rl(p),w},toWireType:(p,w)=>Zr.toHandle(w),argPackAdvance:Vr,readValueFromPointer:Nl,destructorFunction:null},dS=(p)=>Sn(p,fS),hS=(p,w)=>{switch(w){case 4:return function(k){return this.fromWireType(Xn[k>>2])};case 8:return function(k){return this.fromWireType(en[k>>3])};default:throw TypeError(`invalid float width (${w}): ${p}`)}},mS=(p,w,k)=>{w=Ge(w),Sn(p,{name:w,fromWireType:(v)=>v,toWireType:(v,O)=>O,argPackAdvance:Vr,readValueFromPointer:hS(w,k),destructorFunction:null})},Tl=(p,w)=>Object.defineProperty(w,"name",{value:p}),Sp=(p)=>{while(p.length){var w=p.pop(),k=p.pop();k(w)}};function pS(p){for(var w=1;w<p.length;++w)if(p[w]!==null&&p[w].destructorFunction===void 0)return!0;return!1}function gS(p,w,k,v,O,I){var C=w.length;if(C<2)pe("argTypes array size mismatch! Must at least get return value and 'this' types!");var T=w[1]!==null&&k!==null,G=pS(w),V=w[0].name!=="void",ht=C-2,xt=Array(ht),Jt=[],Te=[],Yi=function(...Fl){if(Fl.length!==ht)pe(`function ${p} called with ${Fl.length} arguments, expected ${ht}`);Te.length=0;var Cl;if(Jt.length=T?2:1,Jt[0]=O,T)Cl=w[1].toWireType(Te,this),Jt[1]=Cl;for(var Ji=0;Ji<ht;++Ji)xt[Ji]=w[Ji+2].toWireType(Te,Fl[Ji]),Jt.push(xt[Ji]);var NM=v(...Jt);function TM(AM){if(G)Sp(Te);else for(var Vi=T?1:2;Vi<w.length;Vi++){var PM=Vi===1?Cl:xt[Vi-2];if(w[Vi].destructorFunction!==null)w[Vi].destructorFunction(PM)}if(V)return w[0].fromWireType(AM)}return TM(NM)};return Tl(p,Yi)}var bS=(p,w,k)=>{if(p[w].overloadTable===void 0){var v=p[w];p[w]=function(...O){if(!p[w].overloadTable.hasOwnProperty(O.length))pe(`Function '${k}' called with an invalid number of arguments (${O.length}) - expects one of (${p[w].overloadTable})!`);return p[w].overloadTable[O.length].apply(this,O)},p[w].overloadTable=[],p[w].overloadTable[v.argCount]=v}},wS=(p,w,k)=>{if(n.hasOwnProperty(p)){if(k===void 0||n[p].overloadTable!==void 0&&n[p].overloadTable[k]!==void 0)pe(`Cannot register public name '${p}' twice`);if(bS(n,p,p),n.hasOwnProperty(k))pe(`Cannot register multiple overloads of a function with the same number of arguments (${k})!`);n[p].overloadTable[k]=w}else if(n[p]=w,k!==void 0)n[p].numArguments=k},$S=(p,w)=>{var k=[];for(var v=0;v<p;v++)k.push(et[w+v*4>>2]);return k},kS=(p,w,k)=>{if(!n.hasOwnProperty(p))Ep("Replacing nonexistent public symbol");if(n[p].overloadTable!==void 0&&k!==void 0)n[p].overloadTable[k]=w;else n[p]=w,n[p].argCount=k},yS=(p,w,k)=>{p=p.replace(/p/g,"i");var v=n["dynCall_"+p];return v(w,...k)},ja=[],Mp,Op=(p)=>{var w=ja[p];if(!w){if(p>=ja.length)ja.length=p+1;ja[p]=w=Mp.get(p)}return w},vS=(p,w,k=[])=>{if(p.includes("j"))return yS(p,w,k);var v=Op(w)(...k);return v},ES=(p,w)=>(...k)=>vS(p,w,k),SS=(p,w)=>{p=Ge(p);function k(){if(p.includes("j"))return ES(p,w);return Op(w)}var v=k();if(typeof v!="function")pe(`unknown function pointer with signature ${p}: ${w}`);return v},MS=(p,w)=>{var k=Tl(w,function(v){this.name=w,this.message=v;var O=Error(v).stack;if(O!==void 0)this.stack=this.toString()+`
|
|
3
|
-
`+O.replace(/^Error(:[^\n]*)?\n/,"")});return k.prototype=Object.create(p.prototype),k.prototype.constructor=k,k.prototype.toString=function(){if(this.message===void 0)return this.name;else return`${this.name}: ${this.message}`},k},xp,Ip=(p)=>{var w=Tp(p),k=Ge(w);return On(w),k},OS=(p,w)=>{var k=[],v={};function O(I){if(v[I])return;if(Jr[I])return;if(La[I]){La[I].forEach(O);return}k.push(I),v[I]=!0}throw w.forEach(O),new xp(`${p}: `+k.map(Ip).join([", "]))},xS=(p)=>{p=p.trim();let w=p.indexOf("(");if(w!==-1)return p.substr(0,w);else return p},IS=(p,w,k,v,O,I,C)=>{var T=$S(w,k);p=Ge(p),p=xS(p),O=SS(v,O),wS(p,function(){OS(`Cannot call ${p} due to unbound types`,T)},w-1),oS([],T,(G)=>{var V=[G[0],null].concat(G.slice(1));return kS(p,gS(p,V,null,O,I,C),w-1),[]})},RS=(p,w,k)=>{switch(w){case 1:return k?(v)=>tt[v]:(v)=>W[v];case 2:return k?(v)=>Q[v>>1]:(v)=>U[v>>1];case 4:return k?(v)=>yt[v>>2]:(v)=>et[v>>2];default:throw TypeError(`invalid integer width (${w}): ${p}`)}},NS=(p,w,k,v,O)=>{if(w=Ge(w),O===-1)O=4294967295;var I=(ht)=>ht;if(v===0){var C=32-8*k;I=(ht)=>ht<<C>>>C}var T=w.includes("unsigned"),G=(ht,xt)=>{},V;if(T)V=function(ht,xt){return G(xt,this.name),xt>>>0};else V=function(ht,xt){return G(xt,this.name),xt};Sn(p,{name:w,fromWireType:I,toWireType:V,argPackAdvance:Vr,readValueFromPointer:RS(w,k,v!==0),destructorFunction:null})},TS=(p,w,k)=>{var v=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],O=v[w];function I(C){var T=et[C>>2],G=et[C+4>>2];return new O(tt.buffer,G,T)}k=Ge(k),Sn(p,{name:k,fromWireType:I,argPackAdvance:Vr,readValueFromPointer:I},{ignoreDuplicateRegistrations:!0})},AS=(p,w,k,v)=>{if(!(v>0))return 0;var O=k,I=k+v-1;for(var C=0;C<p.length;++C){var T=p.charCodeAt(C);if(T>=55296&&T<=57343){var G=p.charCodeAt(++C);T=65536+((T&1023)<<10)|G&1023}if(T<=127){if(k>=I)break;w[k++]=T}else if(T<=2047){if(k+1>=I)break;w[k++]=192|T>>6,w[k++]=128|T&63}else if(T<=65535){if(k+2>=I)break;w[k++]=224|T>>12,w[k++]=128|T>>6&63,w[k++]=128|T&63}else{if(k+3>=I)break;w[k++]=240|T>>18,w[k++]=128|T>>12&63,w[k++]=128|T>>6&63,w[k++]=128|T&63}}return w[k]=0,k-O},PS=(p,w,k)=>AS(p,W,w,k),HS=(p)=>{var w=0;for(var k=0;k<p.length;++k){var v=p.charCodeAt(k);if(v<=127)w++;else if(v<=2047)w+=2;else if(v>=55296&&v<=57343)w+=4,++k;else w+=3}return w},Rp=(p,w,k)=>{var v=w+k,O="";while(!(w>=v)){var I=p[w++];if(!I)return O;if(!(I&128)){O+=String.fromCharCode(I);continue}var C=p[w++]&63;if((I&224)==192){O+=String.fromCharCode((I&31)<<6|C);continue}var T=p[w++]&63;if((I&240)==224)I=(I&15)<<12|C<<6|T;else I=(I&7)<<18|C<<12|T<<6|p[w++]&63;if(I<65536)O+=String.fromCharCode(I);else{var G=I-65536;O+=String.fromCharCode(55296|G>>10,56320|G&1023)}}return O},FS=(p,w)=>p?Rp(W,p,w):"",CS=(p,w)=>{w=Ge(w);var k=w==="std::string";Sn(p,{name:w,fromWireType(v){var O=et[v>>2],I=v+4,C;if(k){var T=I;for(var G=0;G<=O;++G){var V=I+G;if(G==O||W[V]==0){var ht=V-T,xt=FS(T,ht);if(C===void 0)C=xt;else C+=String.fromCharCode(0),C+=xt;T=V+1}}}else{var Jt=Array(O);for(var G=0;G<O;++G)Jt[G]=String.fromCharCode(W[I+G]);C=Jt.join("")}return On(v),C},toWireType(v,O){if(O instanceof ArrayBuffer)O=new Uint8Array(O);var I,C=typeof O=="string";if(!(C||O instanceof Uint8Array||O instanceof Uint8ClampedArray||O instanceof Int8Array))pe("Cannot pass non-string to std::string");if(k&&C)I=HS(O);else I=O.length;var T=Hl(4+I+1),G=T+4;if(et[T>>2]=I,k&&C)PS(O,G,I+1);else if(C)for(var V=0;V<I;++V){var ht=O.charCodeAt(V);if(ht>255)On(G),pe("String has UTF-16 code units that do not fit in 8 bits");W[G+V]=ht}else for(var V=0;V<I;++V)W[G+V]=O[V];if(v!==null)v.push(On,T);return T},argPackAdvance:Vr,readValueFromPointer:Nl,destructorFunction(v){On(v)}})},LS=(p,w)=>{var k="";for(var v=0;!(v>=w/2);++v){var O=Q[p+v*2>>1];if(O==0)break;k+=String.fromCharCode(O)}return k},jS=(p,w,k)=>{if(k??=2147483647,k<2)return 0;k-=2;var v=w,O=k<p.length*2?k/2:p.length;for(var I=0;I<O;++I){var C=p.charCodeAt(I);Q[w>>1]=C,w+=2}return Q[w>>1]=0,w-v},_S=(p)=>p.length*2,GS=(p,w)=>{var k=0,v="";while(!(k>=w/4)){var O=yt[p+k*4>>2];if(O==0)break;if(++k,O>=65536){var I=O-65536;v+=String.fromCharCode(55296|I>>10,56320|I&1023)}else v+=String.fromCharCode(O)}return v},BS=(p,w,k)=>{if(k??=2147483647,k<4)return 0;var v=w,O=v+k-4;for(var I=0;I<p.length;++I){var C=p.charCodeAt(I);if(C>=55296&&C<=57343){var T=p.charCodeAt(++I);C=65536+((C&1023)<<10)|T&1023}if(yt[w>>2]=C,w+=4,w+4>O)break}return yt[w>>2]=0,w-v},US=(p)=>{var w=0;for(var k=0;k<p.length;++k){var v=p.charCodeAt(k);if(v>=55296&&v<=57343)++k;w+=4}return w},WS=(p,w,k)=>{k=Ge(k);var v,O,I,C;if(w===2)v=LS,O=jS,C=_S,I=(T)=>U[T>>1];else if(w===4)v=GS,O=BS,C=US,I=(T)=>et[T>>2];Sn(p,{name:k,fromWireType:(T)=>{var G=et[T>>2],V,ht=T+4;for(var xt=0;xt<=G;++xt){var Jt=T+4+xt*w;if(xt==G||I(Jt)==0){var Te=Jt-ht,Yi=v(ht,Te);if(V===void 0)V=Yi;else V+=String.fromCharCode(0),V+=Yi;ht=Jt+w}}return On(T),V},toWireType:(T,G)=>{if(typeof G!="string")pe(`Cannot pass non-string to C++ string type ${k}`);var V=C(G),ht=Hl(4+V+w);if(et[ht>>2]=V/w,O(G,ht+4,V+w),T!==null)T.push(On,ht);return ht},argPackAdvance:Vr,readValueFromPointer:Nl,destructorFunction(T){On(T)}})},KS=(p,w)=>{w=Ge(w),Sn(p,{isVoid:!0,name:w,argPackAdvance:0,fromWireType:()=>{return},toWireType:(k,v)=>{return}})},zS=(p,w,k)=>W.copyWithin(p,w,w+k),Al=[],DS=(p,w,k,v)=>{return p=Al[p],w=Zr.toValue(w),p(null,w,k,v)},qS={},YS=(p)=>{var w=qS[p];if(w===void 0)return Ge(p);return w},Np=()=>{if(typeof globalThis=="object")return globalThis;function p(w){w.$$$embind_global$$$=w;var k=typeof $$$embind_global$$$=="object"&&w.$$$embind_global$$$==w;if(!k)delete w.$$$embind_global$$$;return k}if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;if(typeof global=="object"&&p(global))$$$embind_global$$$=global;else if(typeof self=="object"&&p(self))$$$embind_global$$$=self;if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;throw Error("unable to get global object.")},JS=(p)=>{if(p===0)return Zr.toHandle(Np());else return p=YS(p),Zr.toHandle(Np()[p])},VS=(p)=>{var w=Al.length;return Al.push(p),w},ZS=(p,w)=>{var k=Jr[p];if(k===void 0)pe(`${w} has unknown type ${Ip(p)}`);return k},QS=(p,w)=>{var k=Array(p);for(var v=0;v<p;++v)k[v]=ZS(et[w+v*4>>2],"parameter "+v);return k},XS=Reflect.construct,tM=(p,w,k)=>{var v=[],O=p.toWireType(v,k);if(v.length)et[w>>2]=Zr.toHandle(v);return O},eM=(p,w,k)=>{var v=QS(p,w),O=v.shift();p--;var I=Array(p),C=(G,V,ht,xt)=>{var Jt=0;for(var Te=0;Te<p;++Te)I[Te]=v[Te].readValueFromPointer(xt+Jt),Jt+=v[Te].argPackAdvance;var Yi=k===1?XS(V,I):V.apply(G,I);return tM(O,ht,Yi)},T=`methodCaller<(${v.map((G)=>G.name).join(", ")}) => ${O.name}>`;return VS(Tl(T,C))},nM=(p)=>{if(p>9)Mn[p+1]+=1},rM=(p)=>{var w=Zr.toValue(p);Sp(w),Rl(p)},iM=()=>{mp("")},sM=()=>2147483648,oM=(p)=>{var w=F.buffer,k=(p-w.byteLength+65535)/65536;try{return F.grow(k),nn(),1}catch(v){}},aM=(p)=>{var w=W.length;p>>>=0;var k=sM();if(p>k)return!1;var v=(G,V)=>G+(V-G%V)%V;for(var O=1;O<=4;O*=2){var I=w*(1+0.2/O);I=Math.min(I,p+100663296);var C=Math.min(k,v(Math.max(p,I),65536)),T=oM(C);if(T)return!0}return!1},Pl={},cM=()=>f||"./this.program",co=()=>{if(!co.strings){var p=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",w={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:p,_:cM()};for(var k in Pl)if(Pl[k]===void 0)delete w[k];else w[k]=Pl[k];var v=[];for(var k in w)v.push(`${k}=${w[k]}`);co.strings=v}return co.strings},uM=(p,w)=>{for(var k=0;k<p.length;++k)tt[w++]=p.charCodeAt(k);tt[w]=0},lM=(p,w)=>{var k=0;return co().forEach((v,O)=>{var I=w+k;et[p+O*4>>2]=I,uM(v,I),k+=v.length+1}),0},fM=(p,w)=>{var k=co();et[p>>2]=k.length;var v=0;return k.forEach((O)=>v+=O.length+1),et[w>>2]=v,0},dM=0,hM=()=>eS||dM>0,mM=(p)=>{if(B=p,!hM())n.onExit?.(p),_=!0;d(p,new tS(p))},pM=(p,w)=>{B=p,mM(p)},gM=pM,bM=(p)=>52,wM=(p,w)=>w+2097152>>>0<4194305-!!p?(p>>>0)+w*4294967296:NaN;function $M(p,w,k,v,O){var I=wM(w,k);return 70}var kM=[null,[],[]],yM=(p,w)=>{var k=kM[p];if(w===0||w===10)(p===1?x:R)(Rp(k,0)),k.length=0;else k.push(w)},vM=(p,w,k,v)=>{var O=0;for(var I=0;I<k;I++){var C=et[w>>2],T=et[w+4>>2];w+=8;for(var G=0;G<T;G++)yM(p,W[C+G]);O+=T}return et[v>>2]=O,0};sS(),yp=n.BindingError=class extends Error{constructor(w){super(w);this.name="BindingError"}},vp=n.InternalError=class extends Error{constructor(w){super(w);this.name="InternalError"}},lS(),xp=n.UnboundTypeError=MS(Error,"UnboundTypeError");var EM={o:rS,q:iS,m:cS,l:dS,j:mS,f:IS,b:NS,a:TS,e:CS,c:WS,n:KS,v:zS,i:DS,d:Rl,k:JS,h:eM,y:nM,g:rM,r:iM,s:aM,t:lM,u:fM,z:gM,w:bM,p:$M,x:vM},Yt=XE(),SM=()=>(SM=Yt.B)(),Tp=(p)=>(Tp=Yt.C)(p),Hl=(p)=>(Hl=Yt.D)(p),On=(p)=>(On=Yt.E)(p),MM=(p)=>(MM=Yt._emscripten_stack_restore)(p),OM=(p)=>(OM=Yt._emscripten_stack_alloc)(p),xM=()=>(xM=Yt.emscripten_stack_get_current)(),IM=(p)=>(IM=Yt.__cxa_increment_exception_refcount)(p),Ap=(p)=>(Ap=Yt.G)(p),RM=n.dynCall_jiji=(p,w,k,v,O)=>(RM=n.dynCall_jiji=Yt.H)(p,w,k,v,O),_a;ao=function p(){if(!_a)Pp();if(!_a)ao=p};function Pp(){if(qr>0)return;if(Sl(),qr>0)return;function p(){if(_a)return;if(_a=!0,n.calledRun=!0,_)return;if(Ml(),r(n),n.onRuntimeInitialized)n.onRuntimeInitialized();KE()}if(n.setStatus)n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),p()},1);else p()}if(n.preInit){if(typeof n.preInit=="function")n.preInit=[n.preInit];while(n.preInit.length>0)n.preInit.pop()()}return Pp(),s}})(),Jg=vx;function cf(t){if(t[0]!==255||t[1]!==216)return null;let e=2;while(e+9<t.length){if(t[e]!==255){e++;continue}let n=t[e+1];if(n===255){e++;continue}let r=t[e+2]<<8|t[e+3];if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204)return{height:t[e+5]<<8|t[e+6],width:t[e+7]<<8|t[e+8]};e+=2+r}return null}var af;function Sx(){if(af)return af;let t=new WebAssembly.Module(Ex(Buffer.from("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","base64"))),e={noInitialRun:!0,print:()=>{return},printErr:()=>{return},instantiateWasm:(n,r)=>{let i=new WebAssembly.Instance(t,n);return r(i),i.exports}};if(Jg(e),typeof e.decode!=="function")throw Error("the JPEG decoder did not start");return af=e,e}function Vg(t,e){let n=cf(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);let r=null;try{r=Sx().decode(t,!0)}catch{r=null}if(!r)throw Error("not a JPEG image this decoder can read");return{width:r.width,height:r.height,data:new Uint8Array(r.data.buffer,r.data.byteOffset,r.data.length)}}var ss=[137,80,78,71,13,10,26,10],Xg=13,tb=3;function ei(t){return t.length>=ss.length&&ss.every((e,n)=>t[n]===e)}var eb={0:1,2:3,4:2,6:4};function Ix(t){if(t.length<33||!ei(t))return;let e=Buffer.from(t.buffer,t.byteOffset,t.byteLength),n=e.readUInt32BE(16),r=e.readUInt32BE(20),i=e[25];if(e[24]!==8||e[28]!==0||eb[i]===void 0)return;let s=[];for(let o=8;o+12<=e.length;){let a=e.readUInt32BE(o),c=e.toString("latin1",o+4,o+8);if(c==="IDAT")s.push(e.subarray(o+8,o+8+a));else if(c==="tRNS"||c==="IEND"){if(c==="tRNS"&&i!==4&&i!==6)return;break}o+=12+a}return s.length>0?{width:n,height:r,type:i,idat:s}:void 0}function Rx(t,e,n,r){let i=new Uint8Array(e);for(let s=0;s<n;s++){let o=s*(e+1),a=t[o],c=o+1,u=s>0?t:i,l=s>0?c-e-1:0;if(a===1)for(let f=r;f<e;f++)t[c+f]=t[c+f]+t[c+f-r];else if(a===2)for(let f=0;f<e;f++)t[c+f]=t[c+f]+u[l+f];else if(a===3){for(let f=0;f<r;f++)t[c+f]=t[c+f]+(u[l+f]>>1);for(let f=r;f<e;f++)t[c+f]=t[c+f]+(t[c+f-r]+u[l+f]>>1)}else if(a===4){for(let f=0;f<r;f++)t[c+f]=t[c+f]+u[l+f];for(let f=r;f<e;f++){let d=t[c+f-r],h=u[l+f],m=u[l+f-r],$=Math.abs(h-m),g=Math.abs(d-m),b=Math.abs(d+h-2*m);t[c+f]=t[c+f]+($<=g&&$<=b?d:g<=b?h:m)}}else if(a!==0)throw Error(`bad PNG filter ${a}`)}}function Nx(t){let{width:e,height:n,type:r}=t,i=eb[r],s=e*i,o=xx(Buffer.concat(t.idat),{chunkSize:Math.min(268435456,Math.max(65536,n*(s+1)))});if(o.length<n*(s+1))throw Error("truncated PNG");Rx(o,s,n,i);let a=new Uint8Array(e*n*4);for(let c=0;c<n;c++){let u=c*(s+1)+1,l=c*e*4;if(r===6)a.set(o.subarray(u,u+s),l);else if(r===2)for(let f=0,d=u,h=l;f<e;f++,d+=3,h+=4)a[h]=o[d],a[h+1]=o[d+1],a[h+2]=o[d+2],a[h+3]=255;else if(r===0)for(let f=0,d=l;f<e;f++,d+=4){let h=o[u+f];a[d]=h,a[d+1]=h,a[d+2]=h,a[d+3]=255}else for(let f=0,d=u,h=l;f<e;f++,d+=2,h+=4){let m=o[d];a[h]=m,a[h+1]=m,a[h+2]=m,a[h+3]=o[d+1]}}return{width:e,height:n,data:a}}function Ht(t){let e=Ix(t);if(e)return Nx(e);let n=Qg.PNG.sync.read(Buffer.from(t));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function or(t,e){if(ei(t)){let n=un(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);return Ht(t)}if(t[0]===255&&t[1]===216)return Vg(t,e);throw Error("not a PNG or JPEG image")}function nb(t,e){let{width:n,height:r,at:i}=e,s=Math.max(0,i.x),o=Math.max(0,i.y),a=Math.min(n,i.x+i.w),c=Math.min(r,i.y+i.h);if(a<=s||c<=o)return;let u={x:s,y:o,w:a-s,h:c-o};if(i.w===t.width&&i.h===t.height)return{part:t,box:u,dx:s-i.x,dy:o-i.y};let l={x:(s-i.x)*t.width/i.w,y:(o-i.y)*t.height/i.h,w:u.w*t.width/i.w,h:u.h*t.height/i.h};return{part:mo(t,l,u.w,u.h),box:u,dx:0,dy:0}}function rb(t,e){let n=new Uint8Array(e.width*e.height*4),r=nb(t,e);if(r){let{part:i,box:s,dx:o,dy:a}=r;for(let c=0;c<s.h;c++){let u=((c+a)*i.width+o)*4;n.set(i.data.subarray(u,u+s.w*4),((s.y+c)*e.width+s.x)*4)}}return{width:e.width,height:e.height,data:n}}function ar(t,e,n,r={width:t.width,height:t.height,at:{x:0,y:0,w:t.width,h:t.height}}){let i=rt(e),{width:s,height:o}=r,a=new Uint8Array(s*o*3);for(let h=0;h<s*3;h+=3)a.set(i,h);for(let h=1;h<o;h++)a.copyWithin(h*s*3,0,s*3);let c=nb(t,r);if(!c)return{width:s,height:o,data:a};let{part:u,box:l,dx:f,dy:d}=c;for(let h=0;h<l.h;h++)for(let m=0;m<l.w;m++){let $=((h+d)*u.width+m+f)*4,g=((l.y+h)*s+l.x+m)*3,b=u.data[$+3]/255*n;for(let y=0;y<3;y++)a[g+y]=Math.round(i[y]*(1-b)+u.data[$+y]*b)}return{width:s,height:o,data:a}}function Zg(t,e){for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let i=0;i<e.length&&r;i++)r=t[n+i]===e.charCodeAt(i);if(r)return n}return-1}function un(t){if(t.length<33||!ei(t))return null;let e=new DataView(t.buffer,t.byteOffset,t.byteLength),n=e.getUint32(16),r=e.getUint32(20);if(t[25]===4||t[25]===6)return{width:n,height:r,alpha:!0};let i=Zg(t,"IDAT");return{width:n,height:r,alpha:Zg(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function ib(t,e=Xg){let{width:n,height:r,data:i}=t,s=(l)=>{for(let f=l*n*4+3,d=f+n*4;f<d;f+=4)if(i[f]>=e)return!0;return!1},o=0;while(o<r&&!s(o))o++;if(o===r)return null;let a=r-1;while(!s(a))a--;let c=n,u=-1;for(let l=o;l<=a;l++){let f=l*n*4+3;for(let d=0;d<c;d++)if(i[f+d*4]>=e){c=d;break}for(let d=n-1;d>u;d--)if(i[f+d*4]>=e){u=d;break}}return{x:c,y:o,w:u-c+1,h:a-o+1}}function Tn(t,e={x:0,y:0,w:t.width,h:t.height}){let n=0;for(let r=e.y;r<e.y+e.h;r++)for(let i=e.x;i<e.x+e.w;i++)if((t.data[(r*t.width+i)*4+3]??0)<Xg)n++;return Math.round(n*100/(e.w*e.h))}function sb(t,e,n){let r=Math.min(e/t.width,n/t.height),i=Math.max(1,Math.round(t.width*r)),s=Math.max(1,Math.round(t.height*r)),o=mo(t,{x:0,y:0,w:t.width,h:t.height},i,s),a=new Uint8Array(e*n*4),c=Math.floor((e-i)/2),u=Math.floor((n-s)/2);for(let l=0;l<s;l++)a.set(o.data.subarray(l*i*4,(l+1)*i*4),((u+l)*e+c)*4);return{width:e,height:n,data:a}}function Tx(t){let e=Math.abs(t);if(e<1)return(7*e*e*e-12*e*e+5.333333333333333)/6;if(e<2)return(-2.3333333333333335*e*e*e+12*e*e-20*e+10.666666666666666)/6;return 0}function uf(t,e,n,r){if(n===r&&Number.isInteger(e)&&e>=0&&e+r<=t)return{first:Int32Array.from({length:r},(l,f)=>e+f),size:1,weights:new Float32Array(r).fill(1)};let i=n/r,s=Math.max(1,i),o=2*s,a=Math.min(t,Math.ceil(2*o)+2),c=new Int32Array(r),u=new Float32Array(r*a);for(let l=0;l<r;l++){let f=e+(l+0.5)*i,d=Math.floor(f-o-0.5),h=Math.max(0,Math.min(t-a,d));c[l]=h;let m=0;for(let $=d;$<=Math.ceil(f+o-0.5);$++){let g=Tx(($+0.5-f)/s),b=l*a+Math.min(t-1,Math.max(0,$))-h;u[b]=(u[b]??0)+g,m+=g}for(let $=l*a;$<(l+1)*a;$++)u[$]=(u[$]??0)/m}return{first:c,size:a,weights:u}}function ob(t,e,n,r,i,s,o){let a=uf(t,e.y,e.h,r),c=n*i,u=a.size+1,l=Array.from({length:u},()=>new Float32Array(c)),f=new Int32Array(u).fill(-1),d=new Float32Array(c),h=[],m=[];for(let $=0;$<r;$++){h.length=0,m.length=0;let g=a.first[$];for(let y=0;y<a.size;y++){let E=a.weights[$*a.size+y];if(E===0)continue;let S=g+y,x=S%u,R=l[x];if(f[x]!==S)s(S,R),f[x]=S;h.push(R),m.push(E)}let b=0;while(b<h.length){let y=h[b],E=m[b];if(h.length-b>=4){let S=h[b+1],x=h[b+2],R=h[b+3],N=m[b+1],F=m[b+2],_=m[b+3];if(b===0)for(let B=0;B<c;B++)d[B]=y[B]*E+S[B]*N+x[B]*F+R[B]*_;else for(let B=0;B<c;B++)d[B]=d[B]+(y[B]*E+S[B]*N+x[B]*F+R[B]*_);b+=4}else{if(b===0)for(let S=0;S<c;S++)d[S]=y[S]*E;else for(let S=0;S<c;S++)d[S]=d[S]+y[S]*E;b+=1}}if(h.length===0)d.fill(0);o($,d)}}function ab(t,e,n,r,i){let s=0,o=n;while(s<o){let c=s+o>>1;if(t[c]+e-1<r)s=c+1;else o=c}let a=s;o=n;while(s<o){let c=s+o>>1;if(t[c]<=i)s=c+1;else o=c}return[a,s]}function mo(t,e,n,r){let i=uf(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(o*4),c=new Uint8Array(n*r*4);return ob(t.height,e,n,r,4,(u,l)=>{let f=u*o*4,d=o,h=-1;for(let g=0,b=0;g<o*4;g+=4,b++){let y=s[f+g+3];if(y===0){a[g]=0,a[g+1]=0,a[g+2]=0,a[g+3]=0;continue}if(b<d)d=b;h=b,a[g]=s[f+g]*y,a[g+1]=s[f+g+1]*y,a[g+2]=s[f+g+2]*y,a[g+3]=y}if(l.fill(0),h<0)return;let[m,$]=ab(i.first,i.size,n,d,h);for(let g=m;g<$;g++){let b=i.first[g]*4,y=g*i.size,E=0,S=0,x=0,R=0;for(let N=0;N<i.size;N++){let F=i.weights[y+N],_=b+N*4;E+=a[_]*F,S+=a[_+1]*F,x+=a[_+2]*F,R+=a[_+3]*F}l[g*4]=E,l[g*4+1]=S,l[g*4+2]=x,l[g*4+3]=R}},(u,l)=>{let f=u*n*4;for(let d=0;d<n;d++){let h=d*4,m=l[h+3];if(m<=0)continue;let $=l[h]/m;c[f+h]=($<0?0:$>255?255:$)+0.5,$=l[h+1]/m,c[f+h+1]=($<0?0:$>255?255:$)+0.5,$=l[h+2]/m,c[f+h+2]=($<0?0:$>255?255:$)+0.5,c[f+h+3]=(m>255?255:m)+0.5}}),{width:n,height:r,data:c}}function cb(t,e,n,r){let i=uf(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(n*r);return ob(t.height,e,n,r,1,(c,u)=>{let l=c*o,f=o,d=-1;for(let $=0;$<o;$++)if(s[l+$]!==0){if($<f)f=$;d=$}if(u.fill(0),d<0)return;let[h,m]=ab(i.first,i.size,n,f,d);for(let $=h;$<m;$++){let g=l+i.first[$],b=$*i.size,y=0;for(let E=0;E<i.size;E++)y+=s[g+E]*i.weights[b+E];u[$]=y}},(c,u)=>{a.set(u,c*n)}),{width:n,height:r,data:a}}function po(t,e){if(e<=0)return t;let n=Math.max(1,Math.ceil(e*3)),r=Array.from({length:2*n+1},(l,f)=>Math.exp(-((f-n)**2)/(2*e*e))),i=r.reduce((l,f)=>l+f,0),{width:s,height:o,data:a}=t,c=new Float32Array(s*o);for(let l=0;l<o;l++){let f=l*s;for(let d=0;d<s;d++){let h=0;for(let m=-n;m<=n;m++)h+=(a[f+Math.min(s-1,Math.max(0,d+m))]??0)*(r[m+n]??0);c[f+d]=h/i}}let u=new Float32Array(s*o);for(let l=0;l<o;l++){let f=l*s;for(let d=-n;d<=n;d++){let h=(r[d+n]??0)/i,m=Math.min(o-1,Math.max(0,l+d))*s;for(let $=0;$<s;$++)u[f+$]=(u[f+$]??0)+(c[m+$]??0)*h}}return{width:s,height:o,data:u}}function go(t){let e=new Uint8Array(t.data.length);for(let n=0;n<e.length;n++){let r=t.data[n];e[n]=(r<0?0:r>255?255:r)+0.5}return{width:t.width,height:t.height,data:e}}function ni(t){let e=new Uint8Array(t.width*t.height);for(let n=0;n<e.length;n++)e[n]=t.data[n*4+3]??0;return{width:t.width,height:t.height,data:e}}var Ax=Array.from({length:256},(t,e)=>{let n=e;for(let r=0;r<8;r++)n=n&1?3988292384^n>>>1:n>>>1;return n>>>0});function Px(t){let e=4294967295;for(let n of t)e=(Ax[(e^n)&255]??0)^e>>>8;return(e^4294967295)>>>0}function sr(t,e){let n=Buffer.alloc(12+e.length);return n.writeUInt32BE(e.length,0),n.write(t,4,"latin1"),n.set(e,8),n.writeUInt32BE(Px(n.subarray(4,8+e.length)),8+e.length),n}function ub(t,e,n){let r=new Uint8Array(n*(e+1));r.set(t.subarray(0,e),1);for(let i=1;i<n;i++){let s=i*(e+1),o=i*e,a=o-e;r[s]=2;for(let c=0;c<e;c++)r[s+1+c]=t[o+c]-t[a+c]}return r}function lb(t){return Ox(t,{level:1,strategy:Mx.Z_RLE})}function fb(t,e,n){let r=Buffer.alloc(13);return r.writeUInt32BE(t.width,0),r.writeUInt32BE(t.height,4),r[8]=8,r[9]=e,Buffer.concat([Buffer.from(ss),sr("IHDR",r),...n,sr("IDAT",lb(ub(t.data,t.width,t.height))),sr("IEND",new Uint8Array)])}function db(t){let[e,n,r]=rt(t),i=new Uint8Array(768);for(let s=0;s<256;s++)i.set([e,n,r],s*3);return sr("PLTE",i)}function hb(t,e,n,r,i){let s=Buffer.alloc(13);return s.writeUInt32BE(t,0),s.writeUInt32BE(e,4),s[8]=8,s[9]=n,Buffer.concat([Buffer.from(ss),sr("IHDR",s),sr("IDAT",lb(ub(i,t*r,e))),sr("IEND",new Uint8Array)])}function cr(t){return hb(t.width,t.height,2,3,t.data)}function ln(t){return hb(t.width,t.height,6,4,t.data)}function ri(t,e){return fb(t,tb,[db(e),sr("tRNS",Uint8Array.from({length:256},(n,r)=>r))])}function lf(t){return fb(t,0,[])}function za(t,e){if(!ei(t)||t[25]!==tb)return;let n=Buffer.from(t.buffer,t.byteOffset,t.byteLength),r=[Buffer.from(ss)],i=ss.length;while(i+8<=n.length){let s=i+12+n.readUInt32BE(i);r.push(n.toString("latin1",i+4,i+8)==="PLTE"?db(e):n.subarray(i,s)),i=s}return Buffer.concat(r)}var ur=100,$e=25000000,Gx=536870912,os=["safe","questionable","explicit"],ii=["nudity","underwear"],mf=["comic","monochrome","sketch","chibi"],vb=["off","5","10","25","50","100"],Eb=["off","720","1080","1440","1800","2560"],Sb={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},Bx={comic:new Set(["comic","4koma"]),monochrome:new Set(["monochrome","greyscale"]),sketch:new Set(["sketch","lineart","line_art"]),chibi:new Set(["chibi"])},Ux=/^(?:rating|score|width|height|filetype|dimension):/,bo={safe:"s",questionable:"q",explicit:"e"},Mb=8191,Wx=20000,Kx=5000,mb=3000,pb=8,zx=8,Dx=8000,qx=3000,Ob=60000,gb=3,Yx=3,Jx="https://static.zerochan.net",xb="https://s1.zerochan.net",pf=`ttheme/${It.version} (+${It.homepage})`,Vx=["orig","tile","thumb","cut"],Ib=new Map,Zx=mI(process.env.TTHEME_FIND_HOSTS),Qx=hI(process.env.TTHEME_FIND_CUTOUTS);Lx(qx);var Xx=["artist","character","copyright"];function bb(t){try{return Hx(t)}catch{return[]}}function as(t){return t.startsWith("//")?`https:${t}`:t}function fr(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function $o(t){let e=t.trim();if(!e)return[];let n=JSON.parse(e);if(Array.isArray(n))return n;let r=n.posts;return Array.isArray(r)?r:[]}function tI(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,s])=>[i,String(s)]))}function df(t,e,n){let r=as(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:fr(r)}}function An(t){return String(t??"").split(/\s+/).filter(Boolean)}function hf(t){let e=typeof t==="number"?new Date(t*1000):typeof t==="string"?new Date(t):void 0;return e&&!Number.isNaN(e.getTime())?e.toISOString().slice(0,10):void 0}function Rb(t,e){let n=as(String(e.preview??""));if(!e.file||!n||!Number(t.id))return[];let r=Number(t.width??t.image_width)||0,i=Number(t.height??t.image_height)||0;return[{id:Number(t.id),width:r,height:i,file:e.file,preview:n,ext:e.ext,owner:String(e.owner??""),score:Number(t.score)||0,rating:String(t.rating??""),md5:String(e.md5??""),source:String(t.source??""),tags:An(e.tags),named:e.named,...hf(t.created_at)?{posted:hf(t.created_at)}:{},solo:e.solo,family:Number(t.parent_id)||(t.has_children===!0?Number(t.id):0),smaller:e.versions.filter((s)=>s.file&&s.width>0&&s.height>0&&s.width*s.height<r*i)}]}function eI(t){let e=tI(t);return $o(t).flatMap((n)=>{let r=as(String(n.file_url??"")),i=String(n.tags??""),s=(o)=>An(i).filter((a)=>e.get(a)===o);return Rb(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||fr(r)).toLowerCase(),owner:n.author,md5:n.md5,tags:i,named:{artist:s("artist"),character:s("character"),copyright:s("copyright")},solo:void 0,versions:[df(n.jpeg_url,n.jpeg_width,n.jpeg_height),df(n.sample_url,n.sample_width,n.sample_height)]})})}function nI(t){return $o(t).flatMap((e)=>{let n=as(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return Rb(e,{preview:i.variants?.find((s)=>s.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||fr(n)).toLowerCase(),owner:"",md5:e.md5,tags:r,named:{artist:An(e.tag_string_artist),character:An(e.tag_string_character),copyright:An(e.tag_string_copyright)},solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((s)=>df(s.url,s.width,s.height)).filter((s)=>s.ext==="jpg"||s.ext==="png").sort((s,o)=>o.width*o.height-s.width*s.height)})})}function Nb(t){return t.toLowerCase().replace(/\s+/g,"_")}function rI(t){return(Array.isArray(t)?t:[]).map((e)=>Nb(String(e)))}function iI(t){return String(t??"").replace(/[^0-9a-z]+/gi,".").replace(/^\.+|\.+$/g,"")||"zerochan"}function sI(t){let e=t.trim(),n=e?JSON.parse(e):{};return(Array.isArray(n.items)?n.items:n.id?[n]:[]).flatMap((i)=>{let s=Number(i.id);if(!s)return[];let o=rI(i.tags),a=as(String(i.full??""));return[{id:s,width:Number(i.width)||0,height:Number(i.height)||0,file:a,ext:fr(a),preview:`${xb}/${iI(i.tag??i.primary)}.600.${s}.jpg`,owner:"",score:0,rating:o.some((c)=>Sb.nudity.has(c))?"q":"g",md5:String(i.md5??i.hash??""),source:String(i.source??""),tags:o,named:{artist:[],character:[],copyright:[]},solo:o.includes("solo"),family:0,smaller:[]}]})}var oI={mangaka:"artist",studio:"artist",character:"character",series:"copyright",game:"copyright"};function wb(t){return t.replace(/&(?:#(\d+)|amp|quot|apos|lt|gt);/g,(e,n)=>n?String.fromCharCode(Number(n)):{"&":"&",""":'"',"'":"'","<":"<",">":">"}[e]??e)}function aI(t){let e={artist:[],character:[],copyright:[]};for(let[,r,i]of t.matchAll(/<li class="([a-z]+)[^"]*"[^>]*\bdata-tag="([^"]*)"/g)){let s=oI[r],o=Nb(wb(i));if(s&&!e[s].includes(o))e[s].push(o)}let n=hf(/"datePublished":\s*"([^"]+)"/.exec(t)?.[1]);return{named:e,source:"",owner:wb(/\buploader = \{\s*name: '([^']*)'/.exec(t)?.[1]??""),...n?{posted:n}:{}}}function cI(t){return Number(/Zerochan has ([\d,]+) /.exec(t)?.[1]?.replace(/,/g,"")??0)}function uI(t){return $o(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function lI(t){return $o(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function fI(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function dI(t){let n=(t.trim()?JSON.parse(t):{}).counts?.posts;return n===null?Number.NaN:Number(n)||0}function hI(t){let e=new Map;for(let n of(t??"").split(/\s+/).filter(Boolean)){let r=n.indexOf("=");if(r>0)e.set(n.slice(0,r),n.slice(r+1).split(",").filter(Boolean))}return e}function mI(t){let e=new Map;for(let n of(t??"").split(/[\s,]+/).filter(Boolean)){let r=n.indexOf("="),i=n.slice(0,r);try{let s=new URL(n.slice(r+1));if(i&&s.protocol==="https:")e.set(i,s.origin)}catch{}}return e}function Da(t,e,n,r){let i=(t??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let s=e.filter((o)=>i.includes(o));return s.length>0?s:[...n]}function si(t){return Da(t,os,["safe"])}function cs(t){return Da(t,ii,ii,"none")}function qa(t){return Da(t,mf,[],"none")}function ko(t){let e=Y.map((n)=>n.name);return Da(t,e,e)}function gf(t,e,n){return{score:Number(t)||0,size:Number(e)||0,png:n==="on"}}function yo(t){return[...new Set((t??"").toLowerCase().split(/[\s,]+/).map((e)=>e.replace(/^-+/,"")).filter(Boolean))]}function bf(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function wf(t){let e=Zx.get(t.key),n=Qx.get(t.key);return{...t,origin:e??t.origin,moved:e!==void 0&&e!==t.origin,cutouts:n??t.cutouts,vouched:t.vouched&&n===void 0}}function Tb(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function Ab(t){return t>0?[`width:>=${t}`,`height:>=${t}`]:[]}function $b(t){let e=wf(t),n=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...e,scored:!0,narrow:({score:r,size:i})=>[...r>0?[`score:>=${r}`]:[],...Ab(i)],cutouts:Tb(e.cutouts),ratings:bf([bo.safe],[bo.questionable],[bo.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${bo[i]}`;let s=os.filter((a)=>!r.includes(a)),[o]=s;return s.length===1&&o?`-rating:${bo[o]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,ors:!0,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(ur),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/post.xml?${new URLSearchParams({limit:"1",tags:r})}`,postUrl:(r)=>`${e.origin}/post.json?${n({tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/post/show/${r}`,parse:eI,count:fI,uploadedBy:(r)=>`user:${r}`}}function pI(t){let e=wf(t),n=bf(["g"],["s","q"],["e"]);return{...e,scored:!0,narrow:({score:r,size:i,png:s})=>[...r>0?[`score:>=${r}`]:[],...Ab(i),...s?["filetype:png"]:[]],cutouts:Tb(e.cutouts),ratings:n,rate:(r)=>r.length===os.length?"":`rating:${r.flatMap((i)=>[...n[i]]).join(",")}`,best:"order:score",tagBudget:2,ors:!0,postsUrl:(r,i)=>`${e.origin}/posts.json?${new URLSearchParams({limit:String(ur),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/counts/posts.json?${new URLSearchParams({tags:r})}`,postUrl:(r)=>`${e.origin}/posts.json?${new URLSearchParams({limit:"1",tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/posts/${r}`,parse:nI,count:dI,uploadedBy:(r)=>`user:${r}`}}function ff(t){return t.split(/\s+/).filter((e)=>e&&!/^(?:order|dimension):/.test(e)).map((e)=>e.split("_").map(encodeURIComponent).join("+")).join(",")}function kb(t){let e=t.split(/\s+/),n=e.find((r)=>r.startsWith("dimension:"))?.slice(10);return{s:e.includes("order:fav")?"fav":"id",...n?{d:n}:{}}}function gI(t){let e=wf(t);return{...e,scored:!1,narrow:({size:n})=>n>=1800?["dimension:huge"]:n>0?["dimension:large"]:[],cutouts:e.cutouts[0]??"",ratings:bf(["g"],["q"],["e"]),rate:()=>"",best:"order:fav",tagBudget:3,ors:!1,missing:404,postsUrl:(n,r)=>`${e.origin}/${ff(n)}?${new URLSearchParams({json:"",l:String(ur),p:String(r+1),...kb(n)})}`,countUrl:(n)=>`${e.origin}/${ff(n)}?${new URLSearchParams({xml:"",l:"1"})}`,postUrl:(n)=>`${e.origin}/${n}?json=`,pageUrl:(n)=>`${e.origin}/${n}`,parse:sI,count:cI,credits:aI,counts:(n)=>ff(n).split(",").length===1&&!("d"in kb(n)),guesses:(n)=>(n.tags.includes("transparent_background")?["png","jpg"]:["jpg","png"]).map((r)=>n.preview.replace(xb,Jx).replace(/\.600\.(\d+)\.jpg$/,`.full.$1.${r}`))}}function bI(t){let e=yb(`https://${t}`);return Y.find((n)=>yb(n.origin)===e)}function $f(t){return t.split(/\s+/).filter((e)=>e&&!Ux.test(e)).length}function Ya(t,e){let n=t.trim();if(/^\d+$/.test(n))return{site:e,id:Number(n)};let r=/^([\w.]+):(\d+)$/.exec(n);if(r){let a=Y.find((c)=>c.key===r[1]||c.name===r[1]);return a&&{site:a,id:Number(r[2])}}let i;try{i=new URL(n)}catch{return}let s=bI(i.host),o=Number(i.searchParams.get("id")??i.pathname.split("/").filter(Boolean).at(-1));return s&&o>0?{site:s,id:o}:void 0}var Y=[pI({key:"danbooru",name:"danbooru",origin:"https://shima.donmai.us",cutouts:["transparent_background"],vouched:!1,ansi:2}),$b({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,ansi:6}),$b({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,ansi:5}),gI({key:"zerochan",name:"zerochan",origin:"https://www.zerochan.net",cutouts:["transparent_background"],vouched:!1,ansi:3})],Qt=Y.find((t)=>t.key==="danbooru"),dr=134217728;function ke(t,e){let n=Y.indexOf(t);return(n===-1?Y.length:n)*dr+e}function yb(t){let e;try{e=new URL(t).hostname}catch{return""}return e.split(".").slice(-2).join(".")}function oi(t,e,n=e){return e.mirror&&n===e?{site:Qt,url:e.mirror.file}:{site:t,url:n.file}}function Ja(t,e){return e.mirror?{site:Qt,url:e.mirror.preview}:{site:t,url:e.preview}}function Va(t,e=ii){return t.tags.filter((n)=>e.some((r)=>Sb[r].has(n)))}function Pb(t,e){return t.tags.filter((n)=>e.some((r)=>Bx[r].has(n)))}function Za(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function Hb(t,e){return t.rate(["safe"])===""?void 0:os.find((n)=>t.ratings[n].has(e.rating))}function fn(t){return[t,...t.smaller].find((e)=>e.width*e.height<=$e)}function Fb(t){let e=new Map;for(let[n,r]of[...t].sort(([i],[s])=>i<s?-1:1)){if(r==="")continue;e.set(r,[...e.get(r)??[],n])}return e}function hr(){return wo(process.env.XDG_CACHE_HOME??wo(jx(),".cache"),"ttheme")}function Ke(t){return wo(hr(),t.key)}function Cb(t=Gx,e=hr()){let n=[],r=0;for(let i of bb(e))for(let s of Vx){let o=wo(e,i,s);for(let a of bb(o)){let c=wo(o,a);try{let{size:u,mtimeMs:l}=Cx(c);n.push({path:c,size:u,at:l}),r+=u}catch{}}}n.sort((i,s)=>i.at-s.at);for(let i of n){if(r<=t)return;try{Fx(i.path,{force:!0}),r-=i.size}catch{}}}function wI(t,e){if(t!==null&&/^\s*\d+\s*$/.test(t))return Number(t)*1000;let n=t===null?Number.NaN:Date.parse(t);return Number.isNaN(n)?Ob:Math.max(0,n-e)}function Pn(t){return Ib.get(t.key)??0}function $I(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function kI(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}function yI(t,e){let n=new URL(e,t);if(!n.search)n.search=new URL(t).search;return n.href}async function lr(t,e,n,r={},i=Wx){let s=e;for(let o=1,a=0;;o++){let c=Pn(t)-Date.now();if(c>0)await _x(c,void 0,{signal:n});let u;try{u=await fetch(s,{headers:{"User-Agent":pf,Referer:`${t.origin}/`,...r},redirect:"manual",signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(f){if(o<gb&&!n.aborted&&$I(f))continue;throw f}let l=u.headers.get("location");if(l&&u.status>=300&&u.status<400&&a<Yx){await u.body?.cancel(),s=yI(s,l),a++,o--;continue}if(u.status===429&&o<gb){await u.body?.cancel();let f=wI(u.headers.get("retry-after"),Date.now());if(f>Ob)throw Error(`${t.name} asks to wait ${Math.ceil(f/1000)}s`);Ib.set(t.key,Math.max(Pn(t),Date.now()+f));continue}if(!u.ok)throw await u.body?.cancel(),Object.assign(Error(kI(u)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${u.status}`),{status:u.status});return u}}async function Qa(t,e,n){try{return await(await lr(t,e,n)).text()}catch(r){if(t.missing!==void 0&&r.status===t.missing)return"";throw r}}async function Lb(t,e,n,r){return t.parse(await Qa(t,t.postsUrl(e,n),r))}async function kf(t,e,n){return t.count(await Qa(t,t.countUrl(e),n))}async function us(t,e,n){let[r]=t.parse(await Qa(t,t.postUrl(e),n));return r}async function Xa(t,e,n){return t.credits?.(await Qa(t,t.pageUrl(e),n))}var vI=/^https?:\/\/(?:i\.pximg\.net|i\d*\.pixiv\.net|img\d*\.pixiv\.net)\/\S*\/(\d+)(?:_p\d+)?(?:_\w+)?\.\w+(?:[?#]\S*)?$/i,EI=/^https?:\/\/(?:www\.)?pixiv\.net\/member_illust\.php\?\S*\billust_id=(\d+)/i;function vo(t){let e=vI.exec(t)?.[1]??EI.exec(t)?.[1];return e?`https://www.pixiv.net/artworks/${e}`:t}function tc(t,e){return t.credits!==void 0&&e.named.artist.length===0}function Eo(t,e){for(let n of Xx){let r=e.named?.[n]??[];if(t.named[n].length===0&&r.length>0)t.named[n]=r}if(t.source||=e.source??"",t.owner||=e.owner??"",!t.posted&&e.posted)t.posted=e.posted}function SI(t){let e=new URLSearchParams({limit:String(2*ur),only:"md5,tag_string,tag_string_artist,tag_string_character,tag_string_copyright,source,file_url",tags:`md5:${t.join(",")}`});return`${Qt.origin}/posts.json?${e}`}function MI(t){return new Map($o(t).flatMap((e)=>{let n=String(e.md5??"");return n?[[n,{tags:An(e.tag_string),named:{artist:An(e.tag_string_artist),character:An(e.tag_string_character),copyright:An(e.tag_string_copyright)},source:String(e.source??""),file:as(String(e.file_url??""))}]]:[]}))}function ec(t,e){for(let n of t){let r=e.get(n.md5);if(!r)continue;if(n.tags=[...new Set([...n.tags,...r.tags])],Eo(n,r),n.solo=r.tags.includes("solo"),r.file.includes("/original/")){if(n.mirror={file:r.file,preview:r.file.replace("/original/","/360x360/").replace(/\.[a-z0-9]+$/i,".jpg")},!n.file)n.file=r.file,n.ext=fr(r.file)}}}async function nc(t,e){let n=new Map;if(Pn(Qt)>Date.now())return n;for(let r=0;r<t.length;r+=ur){let i=await(await lr(Qt,SI(t.slice(r,r+ur)),e,{},Kx)).text();for(let[s,o]of MI(i))n.set(s,o)}return n}async function So(t,e,n){if(e.file||!t.guesses)return;for(let r of t.guesses(e))try{let i=await lr(t,r,n,{Range:`bytes=0-${Mb}`}),s=un(new Uint8Array(await i.arrayBuffer()));return e.file=r,e.ext=fr(r),s}catch(i){if(n.aborted||i.status!==404)throw i}throw Error(`${t.name} keeps no png or jpg of ${e.id}`)}async function jb(t,e){if(Pn(Qt)<=Date.now())try{let i=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(pb)}),s=`${Qt.origin}/autocomplete.json?${i}`;return uI(await(await lr(Qt,s,e,{},mb)).text())}catch(i){if(e.aborted)throw i}let n=Y.find((i)=>i.key==="yande"),r=new URLSearchParams({name:t,order:"count",limit:String(pb)});return lI(await(await lr(n,`${n.origin}/tag.json?${r}`,e,{},mb)).text())}function OI(t){try{return(JSON.parse(t).related_tags??[]).flatMap(({tag:n})=>n?.name?[{value:n.name,count:Number(n.post_count)||0}]:[])}catch{return[]}}async function _b(t,e){if(Pn(Qt)>Date.now())return[];let n=new URLSearchParams({"search[query]":t,"search[category]":"character",limit:String(zx)});return OI(await(await lr(Qt,`${Qt.origin}/related_tag.json?${n}`,e,{},Dx)).text())}function Gb(t,e){return e.slice(0,t.ors?t.tagBudget:1)}async function Bb(t,e,n){let r=await lr(t,e,n,{Range:`bytes=0-${Mb}`});return un(new Uint8Array(await r.arrayBuffer()))}async function rc(t,e,n,r){let i=await lr(t,e,n,{},0),s=Number(i.headers.get("content-length"))||0,o=i.body?.getReader();if(!o)return new Uint8Array(await i.arrayBuffer());let a=[],c=0;for(;;){let{done:f,value:d}=await o.read();if(f)break;a.push(d),c+=d.length,r?.(c,s)}let u=new Uint8Array(c),l=0;for(let f of a)u.set(f,l),l+=f.length;return u}var HI=12,FI=/^[0-9a-f]{40}$/;function ls(){return fs(hr(),"drawn")}function Ub(t){return xI("sha1").update(JSON.stringify(t)).digest("hex")}function Wb(t){return II(fs(ls(),t))}function Kb(t){let e=fs(ls(),t);try{let n=NI(e),r=n.readUInt32BE(0),i=JSON.parse(n.toString("utf8",4,4+r)),s=n.subarray(4+r,4+r+i.figure),o=n.subarray(4+r+i.figure,4+r+i.figure+i.picture);if(s.length!==i.figure||o.length!==i.picture)return;let a=new Date;return PI(e,a,a),{stem:i.stem,fill:i.fill,...i.peak?{peak:i.peak}:{},figure:s,picture:o}}catch{return}}function yf(t,e){let n=Buffer.from(JSON.stringify({stem:e.stem,fill:e.fill,...e.peak?{peak:e.peak}:{},figure:e.figure.length,picture:e.picture.length})),r=Buffer.alloc(4);r.writeUInt32BE(n.length),P(fs(ls(),t),Buffer.concat([r,n,e.figure,e.picture])),CI()}function CI(){let t=RI(ls()).filter((e)=>FI.test(e)).flatMap((e)=>{try{return[{name:e,at:AI(fs(ls(),e)).mtimeMs}]}catch{return[]}}).sort((e,n)=>n.at-e.at);for(let{name:e}of t.slice(HI))TI(fs(ls(),e),{force:!0})}import{readdirSync as WI,readFileSync as Xb}from"node:fs";import{basename as KI,join as tw}from"node:path";/*!
|
|
2
|
+
import{createRequire as W2}from"node:module";var L2=Object.create;var{getPrototypeOf:F2,defineProperty:Hg,getOwnPropertyNames:j2}=Object;var _2=Object.prototype.hasOwnProperty;function B2(t){return this[t]}var G2,U2,yd=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?G2??=new WeakMap:U2??=new WeakMap,o=i.get(t);if(o)return o}n=t!=null?L2(F2(t)):{};let s=e||!t||!t.__esModule?Hg(n,"default",{value:t,enumerable:!0}):n;for(let a of j2(t))if(!_2.call(s,a))Hg(s,a,{get:B2.bind(t,a),enumerable:!0});if(r)i.set(t,s);return s};var Et=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Yt=W2(import.meta.url);var Ad=Et((z4,ib)=>{var uO=Yt("util"),rb=Yt("stream"),Je=ib.exports=function(){rb.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};uO.inherits(Je,rb);Je.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){if(this._process(),this._paused&&this._reads&&this._reads.length>0)this._paused=!1,this.emit("drain")}.bind(this))};Je.prototype.write=function(t,e){if(!this.writable)return this.emit("error",Error("Stream not writable")),!1;let n;if(Buffer.isBuffer(t))n=t;else n=Buffer.from(t,e||this._encoding);if(this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0)this._paused=!0;return this.writable&&!this._paused};Je.prototype.end=function(t,e){if(t)this.write(t,e);if(this.writable=!1,!this._buffers)return;if(this._buffers.length===0)this._end();else this._buffers.push(null),this._process()};Je.prototype.destroySoon=Je.prototype.end;Je.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};Je.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};Je.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];if(e.length>t.length)this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length));else this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e)};Je.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);while(e<t.length){let i=this._buffers[n++],o=Math.min(i.length,t.length-e);if(i.copy(r,e,0,o),e+=o,o!==i.length)this._buffers[--n]=i.slice(o)}if(n>0)this._buffers.splice(0,n);this._buffered-=t.length,t.func.call(this,r)};Je.prototype._process=function(){try{while(this._buffered>0&&this._reads&&this._reads.length>0){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}if(this._buffers&&!this.writable)this._end()}catch(t){this.emit("error",t)}}});var Td=Et((lO)=>{var pr=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];lO.getImagePasses=function(t,e){let n=[],r=t%8,i=e%8,o=(t-r)/8,s=(e-i)/8;for(let a=0;a<pr.length;a++){let c=pr[a],u=o*c.x.length,l=s*c.y.length;for(let d=0;d<c.x.length;d++)if(c.x[d]<r)u++;else break;for(let d=0;d<c.y.length;d++)if(c.y[d]<i)l++;else break;if(u>0&&l>0)n.push({width:u,height:l,index:a})}return n};lO.getInterlaceIterator=function(t){return function(e,n,r){let i=e%pr[r].x.length,o=(e-i)/pr[r].x.length*8+pr[r].x[i],s=n%pr[r].y.length,a=(n-s)/pr[r].y.length*8+pr[r].y[s];return o*4+a*t*4}}});var Hd=Et((q4,ob)=>{ob.exports=function(e,n,r){let i=e+n-r,o=Math.abs(i-e),s=Math.abs(i-n),a=Math.abs(i-r);if(o<=s&&o<=a)return e;if(s<=a)return n;return r}});var Cd=Et((Y4,ab)=>{var hO=Td(),mO=Hd();function sb(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var wo=ab.exports=function(t,e){let{width:n,height:r,interlace:i,bpp:o,depth:s}=t;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],i){let a=hO.getImagePasses(n,r);for(let c=0;c<a.length;c++)this._images.push({byteWidth:sb(a[c].width,o,s),height:a[c].height,lineIndex:0})}else this._images.push({byteWidth:sb(n,o,s),height:r,lineIndex:0});if(s===8)this._xComparison=o;else if(s===16)this._xComparison=o*2;else this._xComparison=1};wo.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};wo.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,i=r-1;for(let o=0;o<n;o++){let s=t[1+o],a=o>i?e[o-r]:0;e[o]=s+a}};wo.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let i=0;i<n;i++){let o=t[1+i],s=r?r[i]:0;e[i]=o+s}};wo.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<n;s++){let a=t[1+s],c=o?o[s]:0,u=s>i?e[s-r]:0,l=Math.floor((u+c)/2);e[s]=a+l}};wo.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,i=r-1,o=this._lastLine;for(let s=0;s<n;s++){let a=t[1+s],c=o?o[s]:0,u=s>i?e[s-r]:0,l=s>i&&o?o[s-r]:0,d=mO(u,c,l);e[s]=a+d}};wo.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],i=r.byteWidth;if(e===0)n=t.slice(1,i+1);else switch(n=Buffer.alloc(i),e){case 1:this._unFilterType1(t,n,i);break;case 2:this._unFilterType2(t,n,i);break;case 3:this._unFilterType3(t,n,i);break;case 4:this._unFilterType4(t,n,i);break;default:throw Error("Unrecognised filter type - "+e)}if(this.write(n),r.lineIndex++,r.lineIndex>=r.height)this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex];else this._lastLine=n;if(r)this.read(r.byteWidth+1,this._reverseFilterLine.bind(this));else this._lastLine=null,this.complete()}});var lb=Et((J4,ub)=>{var pO=Yt("util"),cb=Ad(),gO=Cd(),bO=ub.exports=function(t){cb.call(this);let e=[],n=this;this._filter=new gO(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};pO.inherits(bO,cb)});var $o=Et((V4,db)=>{db.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var jd=Et((Z4,fb)=>{var Ld=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)if(e&1)e=3988292384^e>>>1;else e=e>>>1;Ld[t]=e}})();var Fd=fb.exports=function(){this._crc=-1};Fd.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Ld[(this._crc^t[e])&255]^this._crc>>>8;return!0};Fd.prototype.crc32=function(){return this._crc^-1};Fd.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Ld[(e^t[n])&255]^e>>>8;return e^-1}});var _d=Et((Q4,hb)=>{var Ht=$o(),wO=jd(),jt=hb.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[Ht.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Ht.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Ht.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Ht.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Ht.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Ht.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};jt.prototype.start=function(){this.read(Ht.PNG_SIGNATURE.length,this._parseSignature.bind(this))};jt.prototype._parseSignature=function(t){let e=Ht.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};jt.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let o=4;o<8;o++)r+=String.fromCharCode(t[o]);let i=Boolean(t[4]&32);if(!this._hasIHDR&&n!==Ht.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new wO,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!i){this.error(Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};jt.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};jt.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};jt.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(Error("Crc error - "+e+" - "+n));return}if(!this._hasIEND)this.read(8,this._parseChunkBegin.bind(this))};jt.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};jt.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],i=t[9],o=t[10],s=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(Error("Unsupported bit depth "+r));return}if(!(i in Ht.COLORTYPE_TO_BPP_MAP)){this.error(Error("Unsupported color type"));return}if(o!==0){this.error(Error("Unsupported compression method"));return}if(s!==0){this.error(Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let c=Ht.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:Boolean(a),palette:Boolean(i&Ht.COLORTYPE_PALETTE),color:Boolean(i&Ht.COLORTYPE_COLOR),alpha:Boolean(i&Ht.COLORTYPE_ALPHA),bpp:c,colorType:i}),this._handleChunkEnd()};jt.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};jt.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};jt.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};jt.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===Ht.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}if(this._colorType===Ht.COLORTYPE_GRAYSCALE)this.transColor([t.readUInt16BE(0)]);if(this._colorType===Ht.COLORTYPE_COLOR)this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]);this._handleChunkEnd()};jt.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};jt.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/Ht.GAMMA_DIVISION),this._handleChunkEnd()};jt.prototype._handleIDAT=function(t){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-t,this._parseIDAT.bind(this,t))};jt.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===Ht.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(e);let n=t-e.length;if(n>0)this._handleIDAT(n);else this._handleChunkEnd()};jt.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};jt.prototype._parseIEND=function(t){if(this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var Bd=Et((EO)=>{var mb=Td(),$O=[function(){},function(t,e,n,r){if(r===e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],kO=[function(){},function(t,e,n,r){let i=e[0];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function yO(t,e){let n=[],r=0;function i(){if(r===t.length)throw Error("Ran out of data");let o=t[r];r++;let s,a,c,u,l,d,f,h;switch(e){default:throw Error("unrecognised depth");case 16:f=t[r],r++,n.push((o<<8)+f);break;case 4:f=o&15,h=o>>4,n.push(h,f);break;case 2:l=o&3,d=o>>2&3,f=o>>4&3,h=o>>6&3,n.push(h,f,d,l);break;case 1:s=o&1,a=o>>1&1,c=o>>2&1,u=o>>3&1,l=o>>4&1,d=o>>5&1,f=o>>6&1,h=o>>7&1,n.push(h,f,d,l,u,c,a,s);break}}return{get:function(o){while(n.length<o)i();let s=n.slice(0,o);return n=n.slice(o),s},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw Error("extra data found")}}}function vO(t,e,n,r,i,o){let{width:s,height:a,index:c}=t;for(let u=0;u<a;u++)for(let l=0;l<s;l++){let d=n(l,u,c);$O[r](e,i,d,o),o+=r}return o}function SO(t,e,n,r,i,o){let{width:s,height:a,index:c}=t;for(let u=0;u<a;u++){for(let l=0;l<s;l++){let d=i.get(r),f=n(l,u,c);kO[r](e,d,f,o)}i.resetAfterLine()}}EO.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:o,interlace:s}=e,a;if(i!==8)a=yO(t,i);let c;if(i<=8)c=Buffer.alloc(n*r*4);else c=new Uint16Array(n*r*4);let u=Math.pow(2,i)-1,l=0,d,f;if(s)d=mb.getImagePasses(n,r),f=mb.getInterlaceIterator(n,r);else{let h=0;f=function(){let m=h;return h+=4,m},d=[{width:n,height:r}]}for(let h=0;h<d.length;h++)if(i===8)l=vO(d[h],c,f,o,t,l);else SO(d[h],c,f,o,a,u);if(i===8){if(l!==t.length)throw Error("extra data found")}else a.end();return c}});var Gd=Et((tj,pb)=>{function xO(t,e,n,r,i){let o=0;for(let s=0;s<r;s++)for(let a=0;a<n;a++){let c=i[t[o]];if(!c)throw Error("index "+t[o]+" not in palette");for(let u=0;u<4;u++)e[o+u]=c[u];o+=4}}function OO(t,e,n,r,i){let o=0;for(let s=0;s<r;s++)for(let a=0;a<n;a++){let c=!1;if(i.length===1){if(i[0]===t[o])c=!0}else if(i[0]===t[o]&&i[1]===t[o+1]&&i[2]===t[o+2])c=!0;if(c)for(let u=0;u<4;u++)e[o+u]=0;o+=4}}function IO(t,e,n,r,i){let o=255,s=Math.pow(2,i)-1,a=0;for(let c=0;c<r;c++)for(let u=0;u<n;u++){for(let l=0;l<4;l++)e[a+l]=Math.floor(t[a+l]*o/s+0.5);a+=4}}pb.exports=function(t,e,n=!1){let{depth:r,width:i,height:o,colorType:s,transColor:a,palette:c}=e,u=t;if(s===3)xO(t,u,i,o,c);else{if(a)OO(t,u,i,o,a);if(r!==8&&!n){if(r===16)u=Buffer.alloc(i*o*4);IO(t,u,i,o,r)}}return u}});var wb=Et((ej,bb)=>{var RO=Yt("util"),Ud=Yt("zlib"),gb=Ad(),PO=lb(),NO=_d(),AO=Bd(),TO=Gd(),bn=bb.exports=function(t){gb.call(this),this._parser=new NO(t,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=t,this.writable=!0,this._parser.start()};RO.inherits(bn,gb);bn.prototype._handleError=function(t){if(this.emit("error",t),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy)this._inflate.destroy();if(this._filter)this._filter.destroy(),this._filter.on("error",function(){});this.errord=!0};bn.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=Ud.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,Ud.Z_MIN_CHUNK);this._inflate=Ud.createInflate({chunkSize:r});let i=n,o=this.emit.bind(this,"error");this._inflate.on("error",function(a){if(!i)return;o(a)}),this._filter.on("complete",this._complete.bind(this));let s=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){if(!i)return;if(a.length>i)a=a.slice(0,i);i-=a.length,s(a)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};bn.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new PO(this._bitmapInfo)};bn.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};bn.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};bn.prototype._simpleTransparency=function(){this._metaData.alpha=!0};bn.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};bn.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};bn.prototype._complete=function(t){if(this.errord)return;let e;try{let n=AO.dataToBitMap(t,this._bitmapInfo);e=TO(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var kb=Et((nj,$b)=>{var Le=$o();$b.exports=function(t,e,n,r){let i=[Le.COLORTYPE_COLOR_ALPHA,Le.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let m=function(){let p=new ArrayBuffer(2);return new DataView(p).setInt16(0,256,!0),new Int16Array(p)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&m)return t}let o=r.bitDepth!==16?t:new Uint16Array(t.buffer),s=255,a=Le.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(a===4&&!r.inputHasAlpha)a=3;let c=Le.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)s=65535,c*=2;let u=Buffer.alloc(e*n*c),l=0,d=0,f=r.bgColor||{};if(f.red===void 0)f.red=s;if(f.green===void 0)f.green=s;if(f.blue===void 0)f.blue=s;function h(){let m,p,b,$=s;switch(r.inputColorType){case Le.COLORTYPE_COLOR_ALPHA:$=o[l+3],m=o[l],p=o[l+1],b=o[l+2];break;case Le.COLORTYPE_COLOR:m=o[l],p=o[l+1],b=o[l+2];break;case Le.COLORTYPE_ALPHA:$=o[l+1],m=o[l],p=m,b=m;break;case Le.COLORTYPE_GRAYSCALE:m=o[l],p=m,b=m;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)$/=s,m=Math.min(Math.max(Math.round((1-$)*f.red+$*m),0),s),p=Math.min(Math.max(Math.round((1-$)*f.green+$*p),0),s),b=Math.min(Math.max(Math.round((1-$)*f.blue+$*b),0),s)}return{red:m,green:p,blue:b,alpha:$}}for(let m=0;m<n;m++)for(let p=0;p<e;p++){let b=h(o,l);switch(r.colorType){case Le.COLORTYPE_COLOR_ALPHA:case Le.COLORTYPE_COLOR:if(r.bitDepth===8){if(u[d]=b.red,u[d+1]=b.green,u[d+2]=b.blue,i)u[d+3]=b.alpha}else if(u.writeUInt16BE(b.red,d),u.writeUInt16BE(b.green,d+2),u.writeUInt16BE(b.blue,d+4),i)u.writeUInt16BE(b.alpha,d+6);break;case Le.COLORTYPE_ALPHA:case Le.COLORTYPE_GRAYSCALE:{let $=(b.red+b.green+b.blue)/3;if(r.bitDepth===8){if(u[d]=$,i)u[d+1]=b.alpha}else if(u.writeUInt16BE($,d),i)u.writeUInt16BE(b.alpha,d+2);break}default:throw Error("unrecognised color Type "+r.colorType)}l+=a,d+=c}return u}});var Sb=Et((rj,vb)=>{var yb=Hd();function HO(t,e,n,r,i){for(let o=0;o<n;o++)r[i+o]=t[e+o]}function CO(t,e,n){let r=0,i=e+n;for(let o=e;o<i;o++)r+=Math.abs(t[o]);return r}function LO(t,e,n,r,i,o){for(let s=0;s<n;s++){let a=s>=o?t[e+s-o]:0,c=t[e+s]-a;r[i+s]=c}}function FO(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,a=t[e+o]-s;i+=Math.abs(a)}return i}function jO(t,e,n,r,i){for(let o=0;o<n;o++){let s=e>0?t[e+o-n]:0,a=t[e+o]-s;r[i+o]=a}}function _O(t,e,n){let r=0,i=e+n;for(let o=e;o<i;o++){let s=e>0?t[o-n]:0,a=t[o]-s;r+=Math.abs(a)}return r}function BO(t,e,n,r,i,o){for(let s=0;s<n;s++){let a=s>=o?t[e+s-o]:0,c=e>0?t[e+s-n]:0,u=t[e+s]-(a+c>>1);r[i+s]=u}}function GO(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,a=e>0?t[e+o-n]:0,c=t[e+o]-(s+a>>1);i+=Math.abs(c)}return i}function UO(t,e,n,r,i,o){for(let s=0;s<n;s++){let a=s>=o?t[e+s-o]:0,c=e>0?t[e+s-n]:0,u=e>0&&s>=o?t[e+s-(n+o)]:0,l=t[e+s]-yb(a,c,u);r[i+s]=l}}function WO(t,e,n,r){let i=0;for(let o=0;o<n;o++){let s=o>=r?t[e+o-r]:0,a=e>0?t[e+o-n]:0,c=e>0&&o>=r?t[e+o-(n+r)]:0,u=t[e+o]-yb(s,a,c);i+=Math.abs(u)}return i}var KO={0:HO,1:LO,2:jO,3:BO,4:UO},zO={0:CO,1:FO,2:_O,3:GO,4:WO};vb.exports=function(t,e,n,r,i){let o;if(!("filterType"in r)||r.filterType===-1)o=[0,1,2,3,4];else if(typeof r.filterType==="number")o=[r.filterType];else throw Error("unrecognised filter types");if(r.bitDepth===16)i*=2;let s=e*i,a=0,c=0,u=Buffer.alloc((s+1)*n),l=o[0];for(let d=0;d<n;d++){if(o.length>1){let f=1/0;for(let h=0;h<o.length;h++){let m=zO[o[h]](t,c,s,i);if(m<f)l=o[h],f=m}}u[a]=l,a++,KO[l](t,c,s,u,a,i),a+=s,c+=s}return u}});var Wd=Et((ij,Eb)=>{var Jt=$o(),DO=jd(),qO=kb(),YO=Sb(),JO=Yt("zlib"),gr=Eb.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32768,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||JO.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType==="number"?t.colorType:Jt.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType==="number"?t.inputColorType:Jt.COLORTYPE_COLOR_ALPHA,[Jt.COLORTYPE_GRAYSCALE,Jt.COLORTYPE_COLOR,Jt.COLORTYPE_COLOR_ALPHA,Jt.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw Error("option color type:"+t.colorType+" is not supported at present");if([Jt.COLORTYPE_GRAYSCALE,Jt.COLORTYPE_COLOR,Jt.COLORTYPE_COLOR_ALPHA,Jt.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw Error("option bit depth:"+t.bitDepth+" is not supported at present")};gr.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};gr.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};gr.prototype.filterData=function(t,e,n){let r=qO(t,e,n,this._options),i=Jt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return YO(r,e,n,this._options,i)};gr.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);if(r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e)e.copy(r,8);return r.writeInt32BE(DO.crc32(r.slice(4,r.length-4)),r.length-4),r};gr.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*Jt.GAMMA_DIVISION),0),this._packChunk(Jt.TYPE_gAMA,e)};gr.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(Jt.TYPE_IHDR,n)};gr.prototype.packIDAT=function(t){return this._packChunk(Jt.TYPE_IDAT,t)};gr.prototype.packIEND=function(){return this._packChunk(Jt.TYPE_IEND,null)}});var Ib=Et((oj,Ob)=>{var VO=Yt("util"),Mb=Yt("stream"),ZO=$o(),QO=Wd(),xb=Ob.exports=function(t){Mb.call(this);let e=t||{};this._packer=new QO(e),this._deflate=this._packer.createDeflate(),this.readable=!0};VO.inherits(xb,Mb);xb.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(ZO.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r)this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(o){this.emit("data",this._packer.packIDAT(o))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(i)}});var Hb=Et((Ls,Tb)=>{var Rb=Yt("assert").ok,ko=Yt("zlib"),XO=Yt("util"),Pb=Yt("buffer").kMaxLength;function fi(t){if(!(this instanceof fi))return new fi(t);if(t&&t.chunkSize<ko.Z_MIN_CHUNK)t.chunkSize=ko.Z_MIN_CHUNK;if(ko.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null)this._maxLength=t.maxLength}function tI(t){return new fi(t)}function Nb(t,e){if(e)process.nextTick(e);if(!t._handle)return;t._handle.close(),t._handle=null}fi.prototype._processChunk=function(t,e,n){if(typeof n==="function")return ko.Inflate._processChunk.call(this,t,e,n);let r=this,i=t&&t.length,o=this._chunkSize-this._offset,s=this._maxLength,a=0,c=[],u=0,l;this.on("error",function(m){l=m});function d(m,p){if(r._hadError)return;let b=o-p;if(Rb(b>=0,"have should not go down"),b>0){let $=r._buffer.slice(r._offset,r._offset+b);if(r._offset+=b,$.length>s)$=$.slice(0,s);if(c.push($),u+=$.length,s-=$.length,s===0)return!1}if(p===0||r._offset>=r._chunkSize)o=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if(p===0)return a+=i-m,i=m,!0;return!1}Rb(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,i,this._buffer,this._offset,o),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw l;if(u>=Pb)throw Nb(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+Pb.toString(16)+" bytes");let h=Buffer.concat(c,u);return Nb(this),h};XO.inherits(fi,ko.Inflate);function eI(t,e){if(typeof e==="string")e=Buffer.from(e);if(!(e instanceof Buffer))throw TypeError("Not a string or buffer");let n=t._finishFlushFlag;if(n==null)n=ko.Z_FINISH;return t._processChunk(e,n)}function Ab(t,e){return eI(new fi(e),t)}Tb.exports=Ls=Ab;Ls.Inflate=fi;Ls.createInflate=tI;Ls.inflateSync=Ab});var Kd=Et((sj,Lb)=>{var Cb=Lb.exports=function(t){this._buffer=t,this._reads=[]};Cb.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Cb.prototype.process=function(){while(this._reads.length>0&&this._buffer.length){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.length))}else break}if(this._reads.length>0)throw Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)throw Error("unrecognised content at end of stream")}});var Fb=Et((iI)=>{var nI=Kd(),rI=Cd();iI.process=function(t,e){let n=[],r=new nI(t);return new rI(e,{read:r.read.bind(r),write:function(o){n.push(o)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Gb=Et((cj,Bb)=>{var jb=!0,_b=Yt("zlib"),sI=Hb();if(!_b.deflateSync)jb=!1;var aI=Kd(),cI=Fb(),uI=_d(),lI=Bd(),dI=Gd();Bb.exports=function(t,e){if(!jb)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(S){n=S}let i;function o(S){i=S}function s(S){i.transColor=S}function a(S){i.palette=S}function c(){i.alpha=!0}let u;function l(S){u=S}let d=[];function f(S){d.push(S)}let h=new aI(t);if(new uI(e,{read:h.read.bind(h),error:r,metadata:o,gamma:l,palette:a,transColor:s,inflateData:f,simpleTransparency:c}).start(),h.process(),n)throw n;let p=Buffer.concat(d);d.length=0;let b;if(i.interlace)b=_b.inflateSync(p);else{let M=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;b=sI(p,{chunkSize:M,maxLength:M})}if(p=null,!b||!b.length)throw Error("bad png - invalid inflate data response");let $=cI.process(b,i);p=null;let k=lI.dataToBitMap($,i);$=null;let v=dI(k,i,e.skipRescale);return i.data=v,i.gamma=u||0,i}});var zb=Et((uj,Kb)=>{var Ub=!0,Wb=Yt("zlib");if(!Wb.deflateSync)Ub=!1;var fI=$o(),hI=Wd();Kb.exports=function(t,e){if(!Ub)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new hI(e||{}),i=[];if(i.push(Buffer.from(fI.PNG_SIGNATURE)),i.push(r.packIHDR(t.width,t.height)),t.gamma)i.push(r.packGAMA(t.gamma));let o=r.filterData(t.data,t.width,t.height),s=Wb.deflateSync(o,r.getDeflateOptions());if(o=null,!s||!s.length)throw Error("bad png - invalid compressed data response");return i.push(r.packIDAT(s)),i.push(r.packIEND()),Buffer.concat(i)}});var Db=Et((gI)=>{var mI=Gb(),pI=zb();gI.read=function(t,e){return mI(t,e||{})};gI.write=function(t,e){return pI(t,e)}});var Yb=Et((SI)=>{var $I=Yt("util"),qb=Yt("stream"),kI=wb(),yI=Ib(),vI=Db(),re=SI.PNG=function(t){if(qb.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data)this.data.fill(0);this.gamma=0,this.readable=this.writable=!0,this._parser=new kI(t),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new yI(t),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};$I.inherits(re,qb);re.sync=vI;re.prototype.pack=function(){if(!this.data||!this.data.length)return this.emit("error","No data provided"),this;return process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this};re.prototype.parse=function(t,e){if(e){let n,r;n=function(i){this.removeListener("error",r),this.data=i,e(null,this)}.bind(this),r=function(i){this.removeListener("parsed",n),e(i,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};re.prototype.write=function(t){return this._parser.write(t),!0};re.prototype.end=function(t){this._parser.end(t)};re.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};re.prototype._gamma=function(t){this.gamma=t};re.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};re.bitblt=function(t,e,n,r,i,o,s,a){if(n|=0,r|=0,i|=0,o|=0,s|=0,a|=0,n>t.width||r>t.height||n+i>t.width||r+o>t.height)throw Error("bitblt reading outside image");if(s>e.width||a>e.height||s+i>e.width||a+o>e.height)throw Error("bitblt writing outside image");for(let c=0;c<o;c++)t.data.copy(e.data,(a+c)*e.width+s<<2,(r+c)*t.width+n<<2,(r+c)*t.width+n+i<<2)};re.prototype.bitblt=function(t,e,n,r,i,o,s){return re.bitblt(this,t,e,n,r,i,o,s),this};re.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let i=0;i<3;i++){let o=t.data[r+i]/255;o=Math.pow(o,0.45454545454545453/t.gamma),t.data[r+i]=Math.round(o*255)}}t.gamma=0}};re.prototype.adjustGamma=function(){re.adjustGamma(this)}});var oh=Et((S_,W$)=>{var ih={to(t,e){if(!e)return`\x1B[${t+1}G`;return`\x1B[${e+1};${t+1}H`},move(t,e){let n="";if(t<0)n+=`\x1B[${-t}D`;else if(t>0)n+=`\x1B[${t}C`;if(e<0)n+=`\x1B[${-e}A`;else if(e>0)n+=`\x1B[${e}B`;return n},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},kN={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},yN={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let n=0;n<t;n++)e+=this.line+(n<t-1?ih.up():"");if(t)e+=ih.left;return e}};W$.exports={cursor:ih,scroll:kN,erase:yN,beep:"\x07"}});import{spawnSync as O4}from"node:child_process";import{isMainThread as I4}from"node:worker_threads";import{parseArgs as $4}from"node:util";var lt={name:"@kecan0406/ttheme",version:"1.2.15",type:"module",bin:{ttheme:"bin/ttheme.js"},files:["bin","dist/manifest.json","shell","!shell/check.zsh"],description:"Character terminal palettes for Ghostty, kitty, Alacritty, WezTerm, iTerm2, Windows Terminal, Warp and Konsole",license:"MIT",author:"kecan0406",repository:{type:"git",url:"git+https://github.com/kecan0406/ttheme.git"},homepage:"https://github.com/kecan0406/ttheme#readme",bugs:"https://github.com/kecan0406/ttheme/issues",keywords:["terminal","theme","ghostty","kitty","alacritty","wezterm","iterm2","konsole"],devDependencies:{"@biomejs/biome":"^2.3.0","@clack/prompts":"^1.7.0","@jsquash/jpeg":"^1.6.0","@material/material-color-utilities":"^0.4.0","@types/bun":"^1.3.0","@types/pngjs":"6.0.5","@xterm/headless":"6.0.0","fast-string-width":"^3.0.2",pngjs:"7.0.0","smol-toml":"^1.9.0",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=22"}};import{existsSync as f5,readFileSync as h5}from"node:fs";var Cg=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(e)=>{let n=0;t.lastIndex=0;while(t.test(e))n+=1;return e.length-n}})(),Lg=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Fg=(t)=>{return t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141};var z2=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,D2=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,jg=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,q2=/\t{1,1000}/y,_g=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,Y2=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,J2=/\p{M}+/gu,V2={limit:1/0,ellipsis:""},Bg=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",o=e?.ellipsisWidth??(i?Bg(i,V2,n).width:0),s=0,a=n.controlWidth??0,c=n.tabWidth??8,u=n.emojiWidth??2,l=2,d=n.regularWidth??1,f=n.wideWidth??2,h=[[Y2,d],[z2,0],[D2,a],[q2,c],[_g,u],[jg,f]],m=0,p=0,b=t.length,$=0,k=!1,v=b,S=Math.max(0,r-o),M=0,I=0,x=0,H=0;t:while(!0){if(I>M||p>=b&&p>m){let N=t.slice(M,I)||t.slice(m,p);$=0;for(let F of N.replaceAll(J2,"")){let W=F.codePointAt(0)||0;if(Lg(W))H=2;else if(Fg(W))H=f;else H=d;if(x+H>S)v=Math.min(v,Math.max(M,m)+$);if(x+H>r){k=!0;break t}$+=F.length,x+=H}M=I=0}if(p>=b)break t;for(let N=0,F=h.length;N<F;N++){let[W,_]=h[N];if(W.lastIndex=p,W.test(t)){if($=W===jg?Cg(t.slice(p,W.lastIndex)):W===_g?1:W.lastIndex-p,H=$*_,x+H>S)v=Math.min(v,p+Math.floor((S-x)/_));if(x+H>r){k=!0;break t}x+=H,M=m,I=p,p=m=W.lastIndex;continue t}}p+=1}return{width:k?S:x,index:k?v:b,truncated:k,ellipsed:k&&r>=o}},Gg=Bg;var Z2={limit:1/0,ellipsis:"",ellipsisWidth:0},Q2=(t,e={})=>{return Gg(t,Z2,e).width},B=Q2;function vd(t){let e=t.replace("#","");return[e.slice(0,2),e.slice(2,4),e.slice(4,6)].map((n)=>Number.parseInt(n,16)).join(";")}function qe(t){return`\x1B[38;2;${vd(t)}m`}function $c(t,e){return`\x1B[48;2;${vd(t)};38;2;${vd(e)}m`}function Ug(t,e="\x1B[39m"){return`${t.map((n)=>`${qe(n)}■`).join(" ")}${e}`}var Ft="\x1B[0m",ut="\x1B[1m",C="\x1B[2m",$e="\x1B[22m",ho="\x1B[32m",ne="\x1B[33m",kc="\x1B[36m",_n=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],Hs="⧉";function yc(t,e){return e?`\x1B]8;;${e}\x1B\\${t}\x1B]8;;\x1B\\`:t}function Sd(t,e){if(t[e]!=="\x1B")return 0;if(t[e+1]==="]"){let r=t.indexOf("\x07",e+2),i=t.indexOf("\x1B\\",e+2),o=r!==-1&&(i===-1||r<i)?r+1:i!==-1?i+2:0;return o?o-e:0}if(t[e+1]!=="[")return 0;let n=e+2;while(n<t.length&&!/[@-~]/.test(t[n]))n++;return n<t.length?n-e+1:0}var Ed=new Intl.Segmenter(void 0,{granularity:"grapheme"});function vc(t){let e=[],n=0;while(n<t.length){let r=Sd(t,n);if(r>0){e.push({text:t.slice(n,n+r),start:n,end:n+r,width:0,sequence:!0}),n+=r;continue}let i=t.indexOf("\x1B",n+1),o=i===-1?t.length:i;for(let{segment:s,index:a}of Ed.segment(t.slice(n,o)))e.push({text:s,start:n+a,end:n+a+s.length,width:B(s),sequence:!1});n=o}return e}function Md(t,e){let n="",r=0;for(let i of vc(t)){if(!i.sequence){if(r+i.width>e)break;r+=i.width}n+=i.text}return{head:n,used:r}}function rt(t,e,n=!0){if(e<=0)return"";let r=B(t);if(r<=e)return n?t+" ".repeat(e-r):t;let{head:i,used:o}=Md(t,e-1);return`${i}${t.includes("\x1B")?"\x1B[0m":""}…${n?" ".repeat(e-1-o):""}`}function Wg(t,e){let{head:n,used:r}=Md(t,e);return`${n}${t.includes("\x1B")?Ft:""}${" ".repeat(e-r)}`}function vt(t,e,n){let r=n-B(e)-1;return r<=0?rt(t,n):`${rt(t,r)} ${e}`}function wt(t,e){let n=[],r="";for(let i of t.split(/\s+/).filter(Boolean)){let o=r?`${r} ${i}`:i;if(B(o)<=e){r=o;continue}if(r)n.push(r);while(B(i)>e){let{head:s}=Md(i,e),a=Math.max(s.lastIndexOf("/")+1,s.lastIndexOf("#")),c=a>0?a:s.length||vc(i)[0].end;n.push(i.slice(0,c)),i=i.slice(c)}r=i}if(r)n.push(r);return n}import{existsSync as g$,readFileSync as Jf}from"node:fs";import{join as b$}from"node:path";var X2=/^#[0-9a-f]{6}$/;function le(t){return X2.test(t)}function nt(t){let e=Number.parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function bt(t,e,n){let r=nt(t),i=nt(e);return`#${r.map((o,s)=>Math.round(o+((i[s]??0)-o)*n).toString(16).padStart(2,"0")).join("")}`}function St(t){let[e,n,r]=nt(t).map((i)=>{let o=i/255;return o<=0.03928?o/12.92:((o+0.055)/1.055)**2.4});return 0.2126*e+0.7152*n+0.0722*r}function $t(t,e){let n=St(t),r=St(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function Sc(t,e){return Math.round($t(t,e)*100)/100}function tO(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function Mt(t){let[e,n,r]=nt(t).map(tO),i=Math.cbrt(0.4122214708*e+0.5363325363*n+0.0514459929*r),o=Math.cbrt(0.2119034982*e+0.6806995451*n+0.1073969566*r),s=Math.cbrt(0.0883024619*e+0.2817188376*n+0.6299787005*r),a=1.9779984951*i-2.428592205*o+0.4505937099*s,c=0.0259040371*i+0.7827717662*o-0.808675766*s;return{l:0.2104542553*i+0.793617785*o-0.0040720468*s,c:Math.hypot(a,c),h:(Math.atan2(c,a)*180/Math.PI+360)%360}}var fr=7,Kg=3,xd=0.15,zg=1.6,Id=[1,2,3,4,5,6,9,10,11,12,13,14],Dg=[7,15],hr=[1,2,3,4,5,6],ke={1:{name:"red",center:19,width:25},2:{name:"green",center:132,width:35},3:{name:"yellow",center:88,width:35},4:{name:"blue",center:250,width:60},5:{name:"magenta",center:329,width:40},6:{name:"cyan",center:197,width:60}},li=0.03,Ye=25,mo=15,po=0.08;function Bn(t,e){let n=t.ansi[e];if(n===void 0)throw Error(`${t.name}: missing ANSI ${e}`);return n}function Od(t,e,n){let r=t.background;return e.flatMap((i)=>{let o=Bn(t,i);return $t(o,r)<n?[`ANSI ${i} ${o} on ${r} is ${Sc(o,r)}:1, needs ${n}:1`]:[]})}function qg(t,e){return Math.min(...e.map((n)=>$t(Bn(t,n),t.background)))}var Yg=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:fr,measure:({foreground:t,background:e})=>$t(t,e),check:({foreground:t,background:e})=>$t(t,e)<fr?[`foreground ${t} on ${e} is ${Sc(t,e)}:1, needs ${fr}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:Kg,measure:(t)=>qg(t,Id),check:(t)=>Od(t,Id,Kg)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:xd,measure:(t)=>St(Bn(t,0)),check:(t)=>{let e=Bn(t,0);return St(e)>xd?[`ANSI 0 ${e} has luminance ${St(e).toFixed(3)}, needs <= ${xd}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:fr,measure:(t)=>qg(t,Dg),check:(t)=>Od(t,Dg,fr)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:zg,measure:(t)=>$t(Bn(t,8),t.background),check:(t)=>Od(t,[8],zg)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:fr,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:$t(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&$t(t,e)<fr?[`foreground ${t} on selection ${e} is ${Sc(t,e)}:1, needs ${fr}:1`]:[]}];function ye(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var mn=(t)=>t>8?t-8:t;function go(t){let e=t.signatureSlots.filter((n)=>n.startsWith("ansi")).map((n)=>Number(n.slice(4)));return new Set(e.flatMap((n)=>hr.includes(mn(n))?[n,n>8?n-8:n+8]:[n]))}function Cs(t,e){let n=Mt(Bn(t,e));return n.c<li?void 0:n}function mr(t){let e=go(t);return Id.flatMap((n)=>{let r=Cs(t,n),i=ke[mn(n)];if(r===void 0||i===void 0||e.has(n))return[];let o=ye(r.h,i.center)-i.width;return o>0?[{slot:n,hue:r.h,over:o}]:[]})}function Gn(t){let e=new Set(t.signatureSlots);return hr.flatMap((n)=>{let r=Cs(t,n),i=Cs(t,n+8);if(r===void 0||i===void 0||e.has(`ansi${n}`)&&e.has(`ansi${n+8}`))return[];return[{normal:n,gap:ye(r.h,i.h)}]})}function Un(t){let e=go(t);return[0,8].flatMap((n)=>hr.flatMap((r)=>hr.filter((i)=>i>r).flatMap((i)=>{let[o,s]=[n+r,n+i],a=Cs(t,o),c=Cs(t,s);if(a===void 0||c===void 0||e.has(o)&&e.has(s))return[];return ye(a.h,c.h)<mo&&Math.abs(a.l-c.l)<po?[[o,s]]:[]})))}var eO=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...mr(t).map((e)=>e.over)),check:(t)=>mr(t).map(({slot:e,hue:n,over:r})=>{let i=ke[mn(e)];return`ANSI ${e} ${Bn(t,e)} has hue ${n.toFixed(0)}°, ${r.toFixed(0)}° outside ${i.name} (${i.center}±${i.width}°)`})},{rule:"bright-follows",label:"widest normal to bright hue gap",unit:"degrees",max:Ye,measure:(t)=>Math.max(0,...Gn(t).map((e)=>e.gap)),check:(t)=>Gn(t).filter((e)=>e.gap>Ye).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${Ye}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(t)=>Un(t).length,check:(t)=>Un(t).map(([e,n])=>`ANSI ${e} ${Bn(t,e)} and ANSI ${n} ${Bn(t,n)} are within ${mo}° hue and ${po} lightness`)}],Ec=[...Yg,...eO],Rd=Ec.map((t)=>t.rule),ve=Ec.map(({rule:t,label:e,unit:n,min:r,max:i})=>({rule:t,label:e,unit:n,...r===void 0?{}:{min:r},...i===void 0?{}:{max:i}}));function pn(t){return Ec.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Jg(t,e){return t.filter((n)=>!e.waive.includes(n.rule)).flatMap((n)=>n.check(e).map((r)=>({theme:e.name,rule:n.rule,detail:r})))}function Wn(t){return Jg(Ec,t)}function Vg(t){return Jg(Yg,t)}function Zg(t){return t.flatMap(Wn)}import{chmodSync as nO,copyFileSync as rO,existsSync as bo,mkdirSync as iO,readFileSync as Pd,realpathSync as oO,renameSync as Xg,rmSync as Qg,statSync as sO,writeFileSync as tb}from"node:fs";import{dirname as aO}from"node:path";function eb(t){return`${t}.ttheme.bak`}var cO=/^(?:#|--) ttheme begin$|path = "ttheme-|^DefaultProfile=ttheme-/m;function Nd(t){let e=eb(t);if(bo(t)&&!bo(e)&&!cO.test(Pd(t,"utf8")))rO(t,e)}function L(t,e){let n=bo(t)?oO(t):t;iO(aO(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(tb(r,e),bo(n))nO(r,sO(n).mode&4095);Xg(r,n)}function di(t,e,n){if(tb(t,n),t!==e)Xg(t,e)}function gn(t,e){if((bo(t)?Pd(t,"utf8"):void 0)===e)return!1;return Nd(t),L(t,e),!0}function nb(t,e){let n=eb(t),r=bo(n)?Pd(n,"utf8"):void 0;if(e===""&&r===void 0)return Qg(t,{force:!0}),"removed";if(L(t,e),r===void 0||r===e)return Qg(n,{force:!0}),"restored";return"kept backup"}import{createHash as f0}from"node:crypto";import{copyFileSync as rP,existsSync as $f,mkdirSync as iP,readdirSync as oP,readFileSync as Po,renameSync as h0,rmSync as Ro,statSync as sP}from"node:fs";import{basename as m0,isAbsolute as aP,join as Y}from"node:path";import{createHash as RR}from"node:crypto";import{existsSync as PR,readdirSync as NR,readFileSync as AR,rmSync as TR,statSync as HR,utimesSync as CR}from"node:fs";import{join as Oo}from"node:path";import{readdirSync as LI,rmSync as FI,statSync as jI}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as _I}from"node:net";import{homedir as BI}from"node:os";import{join as Gs}from"node:path";import{setTimeout as GI}from"node:timers/promises";var Qb=yd(Yb(),1);import{constants as OI,deflateSync as II,inflateSync as RI}from"node:zlib";import{inflateRawSync as MI}from"node:zlib";var EI=(()=>{var t=import.meta.url;return function(e={}){var n=e,r,i,o=new Promise((g,w)=>{r=g,i=w});let a=globalThis.ServiceWorkerGlobalScope!==void 0&&typeof self<"u"&&globalThis.caches&&globalThis.caches.default!==void 0,c=typeof process==="object"&&process.release&&process.release.name==="node";if(a||c){if(!globalThis.ImageData)globalThis.ImageData=class{constructor(w,y,E){this.data=w,this.width=y,this.height=E}};if(import.meta.url===void 0)import.meta.url="https://localhost";if(typeof self<"u"&&self.location===void 0)self.location={href:""}}var u=Object.assign({},n),l=[],d="./this.program",f=(g,w)=>{throw w},h=typeof window=="object",m=typeof importScripts=="function",p=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",b="";function $(g){if(n.locateFile)return n.locateFile(g,b);return b+g}var k,v,S;if(h||m){if(m)b=self.location.href;else if(typeof document<"u"&&document.currentScript)b=document.currentScript.src;if(t)b=t;if(b.startsWith("blob:"))b="";else b=b.substr(0,b.replace(/[?#].*/,"").lastIndexOf("/")+1);{if(k=(g)=>{var w=new XMLHttpRequest;return w.open("GET",g,!1),w.send(null),w.responseText},m)S=(g)=>{var w=new XMLHttpRequest;return w.open("GET",g,!1),w.responseType="arraybuffer",w.send(null),new Uint8Array(w.response)};v=(g,w,y)=>{var E=new XMLHttpRequest;E.open("GET",g,!0),E.responseType="arraybuffer",E.onload=()=>{if(E.status==200||E.status==0&&E.response){w(E.response);return}y()},E.onerror=y,E.send(null)}}}var M=n.print||console.log.bind(console),I=n.printErr||console.error.bind(console);if(Object.assign(n,u),u=null,n.arguments)l=n.arguments;if(n.thisProgram)d=n.thisProgram;if(n.quit)f=n.quit;var x;if(n.wasmBinary)x=n.wasmBinary;var H,N=!1,F,W,_,X,z,xt,et,dr,dn;function fn(){var g=H.buffer;n.HEAP8=W=new Int8Array(g),n.HEAP16=X=new Int16Array(g),n.HEAPU8=_=new Uint8Array(g),n.HEAPU16=z=new Uint16Array(g),n.HEAP32=xt=new Int32Array(g),n.HEAPU32=et=new Uint32Array(g),n.HEAPF32=dr=new Float32Array(g),n.HEAPF64=dn=new Float64Array(g)}var hn=[],pc=[],ii=[],ad=!1;function cd(){if(n.preRun){if(typeof n.preRun=="function")n.preRun=[n.preRun];while(n.preRun.length)qM(n.preRun.shift())}dd(hn)}function ud(){ad=!0,dd(pc)}function DM(){if(n.postRun){if(typeof n.postRun=="function")n.postRun=[n.postRun];while(n.postRun.length)JM(n.postRun.shift())}dd(ii)}function qM(g){hn.unshift(g)}function YM(g){pc.unshift(g)}function JM(g){ii.unshift(g)}var oi=0,ld=null,As=null;function VM(g){oi++,n.monitorRunDependencies?.(oi)}function ZM(g){if(oi--,n.monitorRunDependencies?.(oi),oi==0){if(ld!==null)clearInterval(ld),ld=null;if(As){var w=As;As=null,w()}}}function mg(g){n.onAbort?.(g),g="Aborted("+g+")",I(g),N=!0,F=1,g+=". Build with -sASSERTIONS for more info.";var w=new WebAssembly.RuntimeError(g);throw i(w),w}var QM="data:application/octet-stream;base64,",pg=(g)=>g.startsWith(QM),si;if(n.locateFile){if(si="mozjpeg_dec.wasm",!pg(si))si=$(si)}else si=new URL("mozjpeg_dec.wasm",import.meta.url).href;function gg(g){if(g==si&&x)return new Uint8Array(x);if(S)return S(g);throw"both async and sync fetching of the wasm failed"}function XM(g){if(!x&&(h||m)){if(typeof fetch=="function")return fetch(g,{credentials:"same-origin"}).then((w)=>{if(!w.ok)throw`failed to load wasm binary file at '${g}'`;return w.arrayBuffer()}).catch(()=>gg(g))}return Promise.resolve().then(()=>gg(g))}function bg(g,w,y){return XM(g).then((E)=>WebAssembly.instantiate(E,w)).then(y,(E)=>{I(`failed to asynchronously prepare wasm: ${E}`),mg(E)})}function tx(g,w,y,E){if(!g&&typeof WebAssembly.instantiateStreaming=="function"&&!pg(w)&&typeof fetch=="function")return fetch(w,{credentials:"same-origin"}).then((R)=>{var P=WebAssembly.instantiateStreaming(R,y);return P.then(E,function(G){return I(`wasm streaming compile failed: ${G}`),I("falling back to ArrayBuffer instantiation"),bg(w,y,E)})});return bg(w,y,E)}function ex(){var g={a:M2};function w(E,R){return te=E.exports,H=te.A,fn(),Mg=te.F,YM(te.B),ZM("wasm-instantiate"),te}VM("wasm-instantiate");function y(E){w(E.instance)}if(n.instantiateWasm)try{return n.instantiateWasm(g,w)}catch(E){I(`Module.instantiateWasm callback failed with error: ${E}`),i(E)}return tx(x,si,g,y).catch(i),{}}function nx(g){this.name="ExitStatus",this.message=`Program terminated with exit(${g})`,this.status=g}var dd=(g)=>{while(g.length>0)g.shift()(n)},rx=n.noExitRuntime||!0;class wg{constructor(g){this.excPtr=g,this.ptr=g-24}set_type(g){et[this.ptr+4>>2]=g}get_type(){return et[this.ptr+4>>2]}set_destructor(g){et[this.ptr+8>>2]=g}get_destructor(){return et[this.ptr+8>>2]}set_caught(g){g=g?1:0,W[this.ptr+12]=g}get_caught(){return W[this.ptr+12]!=0}set_rethrown(g){g=g?1:0,W[this.ptr+13]=g}get_rethrown(){return W[this.ptr+13]!=0}init(g,w){this.set_adjusted_ptr(0),this.set_type(g),this.set_destructor(w)}set_adjusted_ptr(g){et[this.ptr+16>>2]=g}get_adjusted_ptr(){return et[this.ptr+16>>2]}get_exception_ptr(){var g=Ag(this.get_type());if(g)return et[this.excPtr>>2];var w=this.get_adjusted_ptr();if(w!==0)return w;return this.excPtr}}var $g=0,ix=0,ox=(g,w,y)=>{var E=new wg(g);throw E.init(w,y),$g=g,ix++,$g},sx=(g,w,y,E,R)=>{},ax=()=>{var g=Array(256);for(var w=0;w<256;++w)g[w]=String.fromCharCode(w);kg=g},kg,De=(g)=>{var w="",y=g;while(_[y])w+=kg[_[y++]];return w},co={},ai={},gc={},yg,we=(g)=>{throw new yg(g)},vg,Sg=(g)=>{throw new vg(g)},cx=(g,w,y)=>{g.forEach(function(T){gc[T]=w});function E(T){var U=y(T);if(U.length!==g.length)Sg("Mismatched type converter count");for(var Q=0;Q<g.length;++Q)Ln(g[Q],U[Q])}var R=Array(w.length),P=[],G=0;if(w.forEach((T,U)=>{if(ai.hasOwnProperty(T))R[U]=ai[T];else{if(P.push(T),!co.hasOwnProperty(T))co[T]=[];co[T].push(()=>{if(R[U]=ai[T],++G,G===P.length)E(R)})}}),P.length===0)E(R)};function ux(g,w,y={}){var E=w.name;if(!g)we(`type "${E}" must have a positive integer typeid pointer`);if(ai.hasOwnProperty(g))if(y.ignoreDuplicateRegistrations)return;else we(`Cannot register type '${E}' twice`);if(ai[g]=w,delete gc[g],co.hasOwnProperty(g)){var R=co[g];delete co[g],R.forEach((P)=>P())}}function Ln(g,w,y={}){if(!("argPackAdvance"in w))throw TypeError("registerType registeredInstance requires argPackAdvance");return ux(g,w,y)}var ci=8,lx=(g,w,y,E)=>{w=De(w),Ln(g,{name:w,fromWireType:function(R){return!!R},toWireType:function(R,P){return P?y:E},argPackAdvance:ci,readValueFromPointer:function(R){return this.fromWireType(_[R])},destructorFunction:null})},fd=[],Fn=[],hd=(g)=>{if(g>9&&--Fn[g+1]===0)Fn[g]=void 0,fd.push(g)},dx=()=>Fn.length/2-5-fd.length,fx=()=>{Fn.push(0,1,void 0,1,null,1,!0,1,!1,1),n.count_emval_handles=dx},ui={toValue:(g)=>{if(!g)we("Cannot use deleted val. handle = "+g);return Fn[g]},toHandle:(g)=>{switch(g){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let w=fd.pop()||Fn.length;return Fn[w]=g,Fn[w+1]=1,w}}}};function md(g){return this.fromWireType(et[g>>2])}var hx={name:"emscripten::val",fromWireType:(g)=>{var w=ui.toValue(g);return hd(g),w},toWireType:(g,w)=>ui.toHandle(w),argPackAdvance:ci,readValueFromPointer:md,destructorFunction:null},mx=(g)=>Ln(g,hx),px=(g,w)=>{switch(w){case 4:return function(y){return this.fromWireType(dr[y>>2])};case 8:return function(y){return this.fromWireType(dn[y>>3])};default:throw TypeError(`invalid float width (${w}): ${g}`)}},gx=(g,w,y)=>{w=De(w),Ln(g,{name:w,fromWireType:(E)=>E,toWireType:(E,R)=>R,argPackAdvance:ci,readValueFromPointer:px(w,y),destructorFunction:null})},pd=(g,w)=>Object.defineProperty(w,"name",{value:g}),Eg=(g)=>{while(g.length){var w=g.pop(),y=g.pop();y(w)}};function bx(g){for(var w=1;w<g.length;++w)if(g[w]!==null&&g[w].destructorFunction===void 0)return!0;return!1}function wx(g,w,y,E,R,P){var G=w.length;if(G<2)we("argTypes array size mismatch! Must at least get return value and 'this' types!");var T=w[1]!==null&&y!==null,U=bx(w),Q=w[0].name!=="void",pt=G-2,At=Array(pt),ee=[],Ce=[],uo=function(...$d){if($d.length!==pt)we(`function ${g} called with ${$d.length} arguments, expected ${pt}`);Ce.length=0;var kd;if(ee.length=T?2:1,ee[0]=R,T)kd=w[1].toWireType(Ce,this),ee[1]=kd;for(var lo=0;lo<pt;++lo)At[lo]=w[lo+2].toWireType(Ce,$d[lo]),ee.push(At[lo]);var A2=E(...ee);function T2(H2){if(U)Eg(Ce);else for(var fo=T?1:2;fo<w.length;fo++){var C2=fo===1?kd:At[fo-2];if(w[fo].destructorFunction!==null)w[fo].destructorFunction(C2)}if(Q)return w[0].fromWireType(H2)}return T2(A2)};return pd(g,uo)}var $x=(g,w,y)=>{if(g[w].overloadTable===void 0){var E=g[w];g[w]=function(...R){if(!g[w].overloadTable.hasOwnProperty(R.length))we(`Function '${y}' called with an invalid number of arguments (${R.length}) - expects one of (${g[w].overloadTable})!`);return g[w].overloadTable[R.length].apply(this,R)},g[w].overloadTable=[],g[w].overloadTable[E.argCount]=E}},kx=(g,w,y)=>{if(n.hasOwnProperty(g)){if(y===void 0||n[g].overloadTable!==void 0&&n[g].overloadTable[y]!==void 0)we(`Cannot register public name '${g}' twice`);if($x(n,g,g),n.hasOwnProperty(y))we(`Cannot register multiple overloads of a function with the same number of arguments (${y})!`);n[g].overloadTable[y]=w}else if(n[g]=w,y!==void 0)n[g].numArguments=y},yx=(g,w)=>{var y=[];for(var E=0;E<g;E++)y.push(et[w+E*4>>2]);return y},vx=(g,w,y)=>{if(!n.hasOwnProperty(g))Sg("Replacing nonexistent public symbol");if(n[g].overloadTable!==void 0&&y!==void 0)n[g].overloadTable[y]=w;else n[g]=w,n[g].argCount=y},Sx=(g,w,y)=>{g=g.replace(/p/g,"i");var E=n["dynCall_"+g];return E(w,...y)},bc=[],Mg,xg=(g)=>{var w=bc[g];if(!w){if(g>=bc.length)bc.length=g+1;bc[g]=w=Mg.get(g)}return w},Ex=(g,w,y=[])=>{if(g.includes("j"))return Sx(g,w,y);var E=xg(w)(...y);return E},Mx=(g,w)=>(...y)=>Ex(g,w,y),xx=(g,w)=>{g=De(g);function y(){if(g.includes("j"))return Mx(g,w);return xg(w)}var E=y();if(typeof E!="function")we(`unknown function pointer with signature ${g}: ${w}`);return E},Ox=(g,w)=>{var y=pd(w,function(E){this.name=w,this.message=E;var R=Error(E).stack;if(R!==void 0)this.stack=this.toString()+`
|
|
3
|
+
`+R.replace(/^Error(:[^\n]*)?\n/,"")});return y.prototype=Object.create(g.prototype),y.prototype.constructor=y,y.prototype.toString=function(){if(this.message===void 0)return this.name;else return`${this.name}: ${this.message}`},y},Og,Ig=(g)=>{var w=Ng(g),y=De(w);return jn(w),y},Ix=(g,w)=>{var y=[],E={};function R(P){if(E[P])return;if(ai[P])return;if(gc[P]){gc[P].forEach(R);return}y.push(P),E[P]=!0}throw w.forEach(R),new Og(`${g}: `+y.map(Ig).join([", "]))},Rx=(g)=>{g=g.trim();let w=g.indexOf("(");if(w!==-1)return g.substr(0,w);else return g},Px=(g,w,y,E,R,P,G)=>{var T=yx(w,y);g=De(g),g=Rx(g),R=xx(E,R),kx(g,function(){Ix(`Cannot call ${g} due to unbound types`,T)},w-1),cx([],T,(U)=>{var Q=[U[0],null].concat(U.slice(1));return vx(g,wx(g,Q,null,R,P,G),w-1),[]})},Nx=(g,w,y)=>{switch(w){case 1:return y?(E)=>W[E]:(E)=>_[E];case 2:return y?(E)=>X[E>>1]:(E)=>z[E>>1];case 4:return y?(E)=>xt[E>>2]:(E)=>et[E>>2];default:throw TypeError(`invalid integer width (${w}): ${g}`)}},Ax=(g,w,y,E,R)=>{if(w=De(w),R===-1)R=4294967295;var P=(pt)=>pt;if(E===0){var G=32-8*y;P=(pt)=>pt<<G>>>G}var T=w.includes("unsigned"),U=(pt,At)=>{},Q;if(T)Q=function(pt,At){return U(At,this.name),At>>>0};else Q=function(pt,At){return U(At,this.name),At};Ln(g,{name:w,fromWireType:P,toWireType:Q,argPackAdvance:ci,readValueFromPointer:Nx(w,y,E!==0),destructorFunction:null})},Tx=(g,w,y)=>{var E=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],R=E[w];function P(G){var T=et[G>>2],U=et[G+4>>2];return new R(W.buffer,U,T)}y=De(y),Ln(g,{name:y,fromWireType:P,argPackAdvance:ci,readValueFromPointer:P},{ignoreDuplicateRegistrations:!0})},Hx=(g,w,y,E)=>{if(!(E>0))return 0;var R=y,P=y+E-1;for(var G=0;G<g.length;++G){var T=g.charCodeAt(G);if(T>=55296&&T<=57343){var U=g.charCodeAt(++G);T=65536+((T&1023)<<10)|U&1023}if(T<=127){if(y>=P)break;w[y++]=T}else if(T<=2047){if(y+1>=P)break;w[y++]=192|T>>6,w[y++]=128|T&63}else if(T<=65535){if(y+2>=P)break;w[y++]=224|T>>12,w[y++]=128|T>>6&63,w[y++]=128|T&63}else{if(y+3>=P)break;w[y++]=240|T>>18,w[y++]=128|T>>12&63,w[y++]=128|T>>6&63,w[y++]=128|T&63}}return w[y]=0,y-R},Cx=(g,w,y)=>Hx(g,_,w,y),Lx=(g)=>{var w=0;for(var y=0;y<g.length;++y){var E=g.charCodeAt(y);if(E<=127)w++;else if(E<=2047)w+=2;else if(E>=55296&&E<=57343)w+=4,++y;else w+=3}return w},Rg=(g,w,y)=>{var E=w+y,R="";while(!(w>=E)){var P=g[w++];if(!P)return R;if(!(P&128)){R+=String.fromCharCode(P);continue}var G=g[w++]&63;if((P&224)==192){R+=String.fromCharCode((P&31)<<6|G);continue}var T=g[w++]&63;if((P&240)==224)P=(P&15)<<12|G<<6|T;else P=(P&7)<<18|G<<12|T<<6|g[w++]&63;if(P<65536)R+=String.fromCharCode(P);else{var U=P-65536;R+=String.fromCharCode(55296|U>>10,56320|U&1023)}}return R},Fx=(g,w)=>g?Rg(_,g,w):"",jx=(g,w)=>{w=De(w);var y=w==="std::string";Ln(g,{name:w,fromWireType(E){var R=et[E>>2],P=E+4,G;if(y){var T=P;for(var U=0;U<=R;++U){var Q=P+U;if(U==R||_[Q]==0){var pt=Q-T,At=Fx(T,pt);if(G===void 0)G=At;else G+=String.fromCharCode(0),G+=At;T=Q+1}}}else{var ee=Array(R);for(var U=0;U<R;++U)ee[U]=String.fromCharCode(_[P+U]);G=ee.join("")}return jn(E),G},toWireType(E,R){if(R instanceof ArrayBuffer)R=new Uint8Array(R);var P,G=typeof R=="string";if(!(G||R instanceof Uint8Array||R instanceof Uint8ClampedArray||R instanceof Int8Array))we("Cannot pass non-string to std::string");if(y&&G)P=Lx(R);else P=R.length;var T=wd(4+P+1),U=T+4;if(et[T>>2]=P,y&&G)Cx(R,U,P+1);else if(G)for(var Q=0;Q<P;++Q){var pt=R.charCodeAt(Q);if(pt>255)jn(U),we("String has UTF-16 code units that do not fit in 8 bits");_[U+Q]=pt}else for(var Q=0;Q<P;++Q)_[U+Q]=R[Q];if(E!==null)E.push(jn,T);return T},argPackAdvance:ci,readValueFromPointer:md,destructorFunction(E){jn(E)}})},_x=(g,w)=>{var y="";for(var E=0;!(E>=w/2);++E){var R=X[g+E*2>>1];if(R==0)break;y+=String.fromCharCode(R)}return y},Bx=(g,w,y)=>{if(y??=2147483647,y<2)return 0;y-=2;var E=w,R=y<g.length*2?y/2:g.length;for(var P=0;P<R;++P){var G=g.charCodeAt(P);X[w>>1]=G,w+=2}return X[w>>1]=0,w-E},Gx=(g)=>g.length*2,Ux=(g,w)=>{var y=0,E="";while(!(y>=w/4)){var R=xt[g+y*4>>2];if(R==0)break;if(++y,R>=65536){var P=R-65536;E+=String.fromCharCode(55296|P>>10,56320|P&1023)}else E+=String.fromCharCode(R)}return E},Wx=(g,w,y)=>{if(y??=2147483647,y<4)return 0;var E=w,R=E+y-4;for(var P=0;P<g.length;++P){var G=g.charCodeAt(P);if(G>=55296&&G<=57343){var T=g.charCodeAt(++P);G=65536+((G&1023)<<10)|T&1023}if(xt[w>>2]=G,w+=4,w+4>R)break}return xt[w>>2]=0,w-E},Kx=(g)=>{var w=0;for(var y=0;y<g.length;++y){var E=g.charCodeAt(y);if(E>=55296&&E<=57343)++y;w+=4}return w},zx=(g,w,y)=>{y=De(y);var E,R,P,G;if(w===2)E=_x,R=Bx,G=Gx,P=(T)=>z[T>>1];else if(w===4)E=Ux,R=Wx,G=Kx,P=(T)=>et[T>>2];Ln(g,{name:y,fromWireType:(T)=>{var U=et[T>>2],Q,pt=T+4;for(var At=0;At<=U;++At){var ee=T+4+At*w;if(At==U||P(ee)==0){var Ce=ee-pt,uo=E(pt,Ce);if(Q===void 0)Q=uo;else Q+=String.fromCharCode(0),Q+=uo;pt=ee+w}}return jn(T),Q},toWireType:(T,U)=>{if(typeof U!="string")we(`Cannot pass non-string to C++ string type ${y}`);var Q=G(U),pt=wd(4+Q+w);if(et[pt>>2]=Q/w,R(U,pt+4,Q+w),T!==null)T.push(jn,pt);return pt},argPackAdvance:ci,readValueFromPointer:md,destructorFunction(T){jn(T)}})},Dx=(g,w)=>{w=De(w),Ln(g,{isVoid:!0,name:w,argPackAdvance:0,fromWireType:()=>{return},toWireType:(y,E)=>{return}})},qx=(g,w,y)=>_.copyWithin(g,w,w+y),gd=[],Yx=(g,w,y,E)=>{return g=gd[g],w=ui.toValue(w),g(null,w,y,E)},Jx={},Vx=(g)=>{var w=Jx[g];if(w===void 0)return De(g);return w},Pg=()=>{if(typeof globalThis=="object")return globalThis;function g(w){w.$$$embind_global$$$=w;var y=typeof $$$embind_global$$$=="object"&&w.$$$embind_global$$$==w;if(!y)delete w.$$$embind_global$$$;return y}if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;if(typeof global=="object"&&g(global))$$$embind_global$$$=global;else if(typeof self=="object"&&g(self))$$$embind_global$$$=self;if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;throw Error("unable to get global object.")},Zx=(g)=>{if(g===0)return ui.toHandle(Pg());else return g=Vx(g),ui.toHandle(Pg()[g])},Qx=(g)=>{var w=gd.length;return gd.push(g),w},Xx=(g,w)=>{var y=ai[g];if(y===void 0)we(`${w} has unknown type ${Ig(g)}`);return y},t2=(g,w)=>{var y=Array(g);for(var E=0;E<g;++E)y[E]=Xx(et[w+E*4>>2],"parameter "+E);return y},e2=Reflect.construct,n2=(g,w,y)=>{var E=[],R=g.toWireType(E,y);if(E.length)et[w>>2]=ui.toHandle(E);return R},r2=(g,w,y)=>{var E=t2(g,w),R=E.shift();g--;var P=Array(g),G=(U,Q,pt,At)=>{var ee=0;for(var Ce=0;Ce<g;++Ce)P[Ce]=E[Ce].readValueFromPointer(At+ee),ee+=E[Ce].argPackAdvance;var uo=y===1?e2(Q,P):Q.apply(U,P);return n2(R,pt,uo)},T=`methodCaller<(${E.map((U)=>U.name).join(", ")}) => ${R.name}>`;return Qx(pd(T,G))},i2=(g)=>{if(g>9)Fn[g+1]+=1},o2=(g)=>{var w=ui.toValue(g);Eg(w),hd(g)},s2=()=>{mg("")},a2=()=>2147483648,c2=(g)=>{var w=H.buffer,y=(g-w.byteLength+65535)/65536;try{return H.grow(y),fn(),1}catch(E){}},u2=(g)=>{var w=_.length;g>>>=0;var y=a2();if(g>y)return!1;var E=(U,Q)=>U+(Q-U%Q)%Q;for(var R=1;R<=4;R*=2){var P=w*(1+0.2/R);P=Math.min(P,g+100663296);var G=Math.min(y,E(Math.max(g,P),65536)),T=c2(G);if(T)return!0}return!1},bd={},l2=()=>d||"./this.program",Ts=()=>{if(!Ts.strings){var g=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",w={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:g,_:l2()};for(var y in bd)if(bd[y]===void 0)delete w[y];else w[y]=bd[y];var E=[];for(var y in w)E.push(`${y}=${w[y]}`);Ts.strings=E}return Ts.strings},d2=(g,w)=>{for(var y=0;y<g.length;++y)W[w++]=g.charCodeAt(y);W[w]=0},f2=(g,w)=>{var y=0;return Ts().forEach((E,R)=>{var P=w+y;et[g+R*4>>2]=P,d2(E,P),y+=E.length+1}),0},h2=(g,w)=>{var y=Ts();et[g>>2]=y.length;var E=0;return y.forEach((R)=>E+=R.length+1),et[w>>2]=E,0},m2=0,p2=()=>rx||m2>0,g2=(g)=>{if(F=g,!p2())n.onExit?.(g),N=!0;f(g,new nx(g))},b2=(g,w)=>{F=g,g2(g)},w2=b2,$2=(g)=>52,k2=(g,w)=>w+2097152>>>0<4194305-!!g?(g>>>0)+w*4294967296:NaN;function y2(g,w,y,E,R){var P=k2(w,y);return 70}var v2=[null,[],[]],S2=(g,w)=>{var y=v2[g];if(w===0||w===10)(g===1?M:I)(Rg(y,0)),y.length=0;else y.push(w)},E2=(g,w,y,E)=>{var R=0;for(var P=0;P<y;P++){var G=et[w>>2],T=et[w+4>>2];w+=8;for(var U=0;U<T;U++)S2(g,_[G+U]);R+=T}return et[E>>2]=R,0};ax(),yg=n.BindingError=class extends Error{constructor(w){super(w);this.name="BindingError"}},vg=n.InternalError=class extends Error{constructor(w){super(w);this.name="InternalError"}},fx(),Og=n.UnboundTypeError=Ox(Error,"UnboundTypeError");var M2={o:ox,q:sx,m:lx,l:mx,j:gx,f:Px,b:Ax,a:Tx,e:jx,c:zx,n:Dx,v:qx,i:Yx,d:hd,k:Zx,h:r2,y:i2,g:o2,r:s2,s:u2,t:f2,u:h2,z:w2,w:$2,p:y2,x:E2},te=ex(),x2=()=>(x2=te.B)(),Ng=(g)=>(Ng=te.C)(g),wd=(g)=>(wd=te.D)(g),jn=(g)=>(jn=te.E)(g),O2=(g)=>(O2=te._emscripten_stack_restore)(g),I2=(g)=>(I2=te._emscripten_stack_alloc)(g),R2=()=>(R2=te.emscripten_stack_get_current)(),P2=(g)=>(P2=te.__cxa_increment_exception_refcount)(g),Ag=(g)=>(Ag=te.G)(g),N2=n.dynCall_jiji=(g,w,y,E,R)=>(N2=n.dynCall_jiji=te.H)(g,w,y,E,R),wc;As=function g(){if(!wc)Tg();if(!wc)As=g};function Tg(){if(oi>0)return;if(cd(),oi>0)return;function g(){if(wc)return;if(wc=!0,n.calledRun=!0,N)return;if(ud(),r(n),n.onRuntimeInitialized)n.onRuntimeInitialized();DM()}if(n.setStatus)n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),g()},1);else g()}if(n.preInit){if(typeof n.preInit=="function")n.preInit=[n.preInit];while(n.preInit.length>0)n.preInit.pop()()}return Tg(),o}})(),Jb=EI;function Dd(t){if(t[0]!==255||t[1]!==216)return null;let e=2;while(e+9<t.length){if(t[e]!==255){e++;continue}let n=t[e+1];if(n===255){e++;continue}let r=t[e+2]<<8|t[e+3];if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204)return{height:t[e+5]<<8|t[e+6],width:t[e+7]<<8|t[e+8]};e+=2+r}return null}var zd;function xI(){if(zd)return zd;let t=new WebAssembly.Module(MI(Buffer.from("7L0NnFzHVSd6q+5H3+7bPdMjjeyRZmTf7ohFITZWgpFN4mBdEX3Y8leI15jfy+6a3UC8Mwp4ZEWYRdaMY9kICESA2TWsCXrBb+2wNugtejwvmBcFDBFgFgXMRkkMEYtJzBLA720A78PY+/+fU3X73u4eSVYMC1mUePre+rqnTp06derUqXOCb7rzPSYIAvN/m9nbzFKA/8zSbeHSEn/sEhLiJf4Lbov0x0pOY2nJJWu2q+NK4S1gzgH8C25LfFH3gNwIWUgIlw4smQOuzn40vZ/to0rEmihnmIxsNsM6BwS+A/wWHkMpZH/MrDPfZL4paOLvPw8i/P0X8vwu9OqbzDcHIf5+S9DA33dLyu2Bxd9/GUzh77yUXAgM/u6W3PcEMf5+q9T6Nsm9I0jxd1Fa2BNk+HunlN8bJPj7Xvm7T0p+u6TfFbTw9zuktX8VBOFvm48ba2y7ZdqTQTu0q1bbaHI6MGEzNUFs19h2aLKgzUEwYXBB0IyTLJu8cGZtkjRNapoma6+L4ybygixLYvkXNKLqvzhuxPwvCPE/aSfBoBo8mFZrYiJIU8lp2ixFUgflo47FP9O1BhUT/otG/jUaaDF2HwRCEpOgcfwXon7D3GEewv/ihjHvs8vLNunYJVMc/1yU4SfIGhtSU9jAbA3ebL4uOGbM24KLzbagb7YDrB3BvzNmZ/ATpvk91gSFyf6t+ZD5380R8+Pmg+bH0OrX/Vuz9UfNj5gHzb8x/9r8sHnAbN74Q+YHzQ+Yw+YD5vvN1d9n3m8uueR7zfeY7zaHzHeZ+8195pKD5l7zPnOPWTZLB+7e/53/6jsuuevb97137517Fu/4tm99z+6F+X95+7u/5Zvf9V/NH5nnzefMZ80fmufMH5j/Yn7fnDafMb9nftd8ynzSnDKfMP/Z/I55xlzy2+a3MHonzW+a/2R+wzxtft38mvlVc8J8zPyK+WXzlPkl84vmo+a4edL8vPk58x/NE5hHP2v+L/Os+bT5J9/w0+b/ND9j/oM5aq695U2XXPJTZtvDZtubHjePmEfNh82bHjP/3vykueVN/4f5iPl/zC+Y1i8+2fy4+f8wLqBxuyW32zpBHuTmzQF/7Hw/LMyCvtoivMZnWv0xeViELjssbFmwURYMkR6V6U1JL/DfQhEu9iM0n5viFbNY3PO+g+nuvtls0VBu82ih2C/5VmozOdLaId9S/YnQZOqybdEuC64tC87oz7T+dPWnjcLdstp0+TRTPs35pgj9YjGzpx8tAJSc7ZrHt96zvLzcPdCL0Vw03zPhltzk8RXhjP509SfVH1QochRCqznbuHhXB1MqD7LvtTZcssR58Prwjn60Nfh6fA/Pd+XBRhv1DX8u6duFx/b3429Y3BZteV0AsPt2Q1As9QzrdW8WNNticr6Q4vmUBWXvQKq9NJjsmYw9nd8AGDCOwQ0dKRT1tOmeBRhbl64I7+BQbba34ycG7g2+eEV4V7E0meXxVrMf/RzUSnu2hPimDjEU392PtNY3Ejt59Mi8tJxb36T0I/Dt8mM3RkAZCSsEXWR5mC1HJlwCsMsRs9iM7a7Jg0lpZ74XWkm8E0QDPPBFn/KgZ9vsZeUZPxgQAHRpEJDq8B1FvyE1oRqwYHOScpahpVAIrTgecGxBeMWW+X6MMdI2NtpAKIJPkRAcn1JSoDy1hZr41CV5ydM06U2eZkiA8jS32c7pU77Z5vq0YbPdoE8bN9uN+nTJZnuJPm3abDfp0+Wb7eX6dOVme6U+XbXZXoWebVmQnm0BVeTx9UJY6MKNHVOD3hSRYoDzKY/YcyIKpH1NBW0yUfvRrpUxKU8y6+XJkg3IU8h5PvQVD02Ib6w8Hnm4w02HX2rZeGnqAGj8dLDQj0Gz0dZX5N/V9/aI4+i+rcv+39K9vVZuy/x+Z2t+qDeBGpsOPVK8An7Sa1iSiS0T+k3+LBTvWz5ACmvo2z3LB3Z10FNzU9ka/gX39jP3reN4uzmvvr19lrRmXUp+sNdqg9rDm0pwtQFba8CONBBVGsjDnmEjpvah+w7exA/lIX9d+mmk91pbA5QPs7xVKX3QJROW2ue0GTR9sLeWJfK1w82NacpBI192rXpA3GvmkX8rWo+Lk8E8KnTkv85N/WT2O/KkSPY+vv+RflJMLnR7RTdPFnpJHr8+vNUPF55vEh7l27oFUzAGNaMLbfmvfVM/RVOpayqVpvIkTxfA1rS1nSAO/GzpoRfh1sn7ZehefmUSQ5AbfKcfHeh3AS6eViOB30GeObC/P7k1v78/RVaDlyyfuvlxdLLjS3QO9NeAu61G3lTeZsOr0P4bDx30BUDxyJvOJ/PuzY+jqRztHTqIZtHKBGCIDvbbB/oXACFsYyJfhWzBcnqQoCGNy1GEX+Tcv79/4X4MTiNvzufJPKgzALZIwSjRnwEq2EiUzwDIiMtS3uH7LY/vR4n2gf2SOJWvQfZUPo1klwkkHuhzQWVxDKFCagVS1LDyZXzjZmnI5t181S2P5xP5BTfzb5cNscIq7Zq9xRWbzKdRYDK/UL7E5L4n6OPBvVjJQBQJ53lCPpJtvfpQbx1I3vDTVx862OOX8WLkxaKAub+X5euQYO4/SJJIOD9vQCvjaNxk9gBKBNdFW7DsJQt9zObgeqHDTfM5KRfVg/l+AlqJsfgSibm+dDW/0f0KWeoifXp9uIl/rjwIyB/nU84/3YMHARQeNvLPDODiL5gif1JMAj8XBowqTx7fuun+g5hPnNbZTehQ8I34M2BcOvvJvMz+vrnp8f2YbERRrdB9BxWFVjrL0ix/Lyrk9mZWIbs2lC2CvEVJIwbTxDKf/f/WNJZ0tW7wJyANcbnE+tSPN9ojIQemF8maWcxcK99IJcVm4NINAhfnKDmDtW3KBHgvuAozpR9pu5G0m+kAA4NYx8lu8wQMHlP0FbNdOP65txVlrpE8QhM9DJ4BUJE2z7ftWCPyhIwaQlWR7t0j68fUTuA4AheAEDjfh2CStzrki/hCnmxGX4Vp3aB9ZI/x4SdDrN4CGD4MmejPAy7WcbGUIyOaAkalUEEZMyvW9vi9tbld2NuTJTLlch+oBBrkDQoEWKc2U+jKntto2ksqorU2BET78P8gtXzBgE6LY89ybCB1dJGUzRcvhot8uGYWzDLc1w/29Q0EFRF0TLF0Z2GQLcLLXmQ8+yyeuYw+hwc2Q4GkH2/XdoG2A7n99kXAJF3OAwU5ZoeIvPmeSFdsC3/2sAuGcr4REacwTGlnHN0nFcr0eghMhsAUkPpZC5LAwh7UCvYu3k5I9/YDhQr5JVTBCFTm2yFolXBZlZwUrgCfU1jwNN9v5NKqzO1YQSLW51kag4DhS4u7FuWbPVOcEDghly6RZpAV7tvbF/FQPg0eu0ekIH6XuMp6IbusuwgHhu4K8lChESyxXQ5xQETIl4GW4glFSkYpMru9sHuL535PO2yJvrsWucyFnLmhDB8nHilfBEM8kYiDsiS6SFjCa/pmFrVExJoFISuXA/1iqvSanP6YQv1gB7r0lACwjikp9wgDimy3pMJ030QUpafnY752+2ZbJ5R9QNaLMS9jzDODEZueV8Ee5WVT1nXvXb5zRlJ2bDczbDYSZH9kaZcUy0B8AB6z1KGigR0jSILddoS+xNdi2ULQXFdcLLz8lQZqr8PjPyJ29727HyzsE7IuzN6F4mvnMzCOCi6N8IoeSYU/qLcW42r2LaDltLh4x+xeiqaKX49KLIo3cgOCXkT9kDBxnNFGKNySHeUiSdpfvw+7unnp6vZZzuDZHndRBq3mRuXRPN6jMMSg+pQUzk3rnryxyEHEUFXHvgd8ydCGW6qDS+G3J5uN3A1vzAePZYyS0RHI+oF8NebmO3QTDy2wP+SWYEPCSIdIIB4lgVS4nJJALCQQlyQQCwmISA++6kjADpGArZBApCTQqDCDmOzLTTjwOHJaEHHR1V1bQhZgygkbz+suupzdus+Iy6ke19kOsA3mAk4rM45VZQ5aaUPmJMgRbR1XWCx2FnwGggkEiz/9rPwn/EegcZu3EqSSzfjmHHldBk0E6Pb9p1kXzT4gDyS/B09zj4y2D+Nh+QjX54ivKJq3ivZ8ccdiceonf+cn4zsJwJHTgSCteOEz7mE5z/rY6aBz2AD3QT7gatd30uLzn1GE4mPP6SPWmvl+Mwe/bQKvUHY0sT9lQ1gUQa+y8dX/+T6y8hc+gx5wWufaCEciFSoEu9zVCYXdpEpgRdC9FPx7aXuHMyNilwRVWHz7YBaLslGAFgdseV7ofXGei3NEiEMPcTCAGDONzBo7T+IWSh8WxieA8x1YimNWRXPoNFOFtAIFbTs34TJtCA0FNkhu0fVu7xllbgA4haALmpclZ7Fvu5dqcUu9SyRlucoXSzs6NhOcvyCQFcLywe67l5Kk8JfzG1Vj/WBMVnu9/pBzJMXGebxm7JjrHLsmA/i8vgakNjxzugXZYAzCyhhoD1VzE/Vj9NIOsM9ePeVosxC1zfWUBZkmJC6kWLz4GSdQoE1JLp4BTS/x4dSzgSNQoStHaaEoQygYcOXNnXwQ677/eSbFOn8MGXfO7bZMmqjYuEBODgQUpMoFqcNeOXlAWsgHy6+dLzZykp4EGA95MNAp8rfr0VEsY7u0v+0iXeQTlUPzrMJGQ3wqlE8F2jihcFM5F5UBtv2qriCwe1TZEo79aCi4aif6U+I1t7uq+FQqMTo6doto6VhsR7TFjwrFd9DgpQFBBo/M/FBSMeQGU3RVSrUg+HCXW8FTWZ1WwmVjHC4bZ8ZlThb95XnMNuaLy9CiKGW685ALTTErklrx0meC19vgCuiapGPynDJVZDt+dZSCPKmgyMx8TymmUXJBrB3U3ATYY8ZUDXEgt4smTzjzgUWWFCmF6kvjJUa0ZylmvEKJFr9eHkOql2/BdiloQhqzpTSGFJHGRAoMRBoz7CalMcOfdtHGlKW8Xlwss5bCg37iH1HSH5UdyEZCTss5bNAFNYFfm6kmxVR1kkpMJenevrBSppE+VTTkhwPdFK1luyJoBCpoiOwQqOjU9/KGlakNQYKrOQUHnSuQKrizwV5L1k82282cJrrgDiXsQyIp2l4U7UvP2wpAqr1IhQ/MAAltVHVLKGeCch6/+gVkyjKBuKyd5/qHqXMUVTaxbuBFJV1vheIxgVTL7kgb26yyCYNEo4kRVTJYQWUf6ADII8r+MvOHJntDGSt767YbGOsTlUonfCWIAV4YGqlEolGUEJncTvapFC64+8xFQm0yta36akemkUpM1m1LHKFib4Kq+3TTJJqvwa4gda3PeG1MVQCLdAhd6UBLW/kMZP2I+xGKYJFuArBuRSKCyYEBCadPKV316tNcI0RKp8QoFUhCceF6SNkIsg8ERG1/rl8SOYlSMefmZW47hvTt6J7dK/uWFN1iOk/wAdSYnXflZVtiuWuecdCK6jGgTlv6N5O5Tm0TLbnsmn0GdVbcu+NHt/VC+kHJOTzbw9O8bKiofZXhaKzENRqvmmvo3Gm74yHlHlbUvMo9GuAejbHcQzWmFe5hS+4RVLmHcLO9/bjkHsZxj6DkHg3qChz3sG6bomoYGfK+3xs0yD24DVE9uJSi/hxTKS6l77jkHoGeY7luho4oA6XlUKV/5R+FK1pBBXQmOtctKTNVAopJQKYkIEsC4l5dhxZdUgJCh3Tb3nDUkwr1pKSemNSjhXVTS+XIjNtu6BkOqUe2JzN+V+IOF0k9LkNOYCZFeQeAE8oold2BcqGSS3C74bJjluXxnKctiLuhMAhHW+FKtBWeG21FSlsRMRkpQqMKbcmHHG2FoK1wpZUp0pUpGrsycW6ITqUkKtCsW5IiPYDk0qGnNSutTEpbXv0QliuT8SuTdbTVGGzu2XqX0rlObd/NyNGWVcYWKWMTVERKW5FyO+kVN5tKW8L1mkpbtk5bsQhm22WAa7SVKW05ymoKZTVJWXaEsppyjrYCZdmzUpYdpiw7Slm2pCzLsnGFsmJHWXW9U+C3wQbk5bVOwGtJV5EbyQpdRV53GKnCye3dZaxTWQNFWJftb6girOAXKmA9xg2y9xpzQM5HowPsFzT/IY82yrMOvg8OKAbHHf0Y+e68gTX2y7lHWRiqZSZSlwwYXCLbvP8g1MzZTUaMA0Ick+omMcQx6eP396zTx+ehrgvh4/0Ian0Ug7T4uOj2Aen9qjx1CmuLj2QvZVBUc2GWccMhfp8Le7Sgk/QubhJ6sag/zSJl0cLKuW1INW1AATt0i/A1PNPGxtnxaidGhJTxQ1n9xb7gejlvDjknqADmgfWICOBoUTetA8LnDieU9Z/9c+2KEFGREUIpo2qXUNb80KldrEjwGHpM0kg0b7LmR45s/ZofOfKuaN6sMM1IVMEFjkmtkIXMC6iRytXVi0M6uybrgkJYn4uR4IZzMVpBUDDjBIVwvKAQ+glp/YRUbhKWE9L6Ceky8thptNgrsygwOtW4jHBUCo/xSsJjMCIHhm7Qd3RES6ValxPuYbKULOOVJMtgZclykhrzu6h87wnYY8gpPg9yij05xWO0eUNktYI2zzpt3vmR1RjyGUjTYZ2E4jEkFL9qEorHk1C8AgnFK5PQCMAVAgjKKULDETdQweCoYCAI8KAgEJYdlAw7GD0oCPzOLPDSlyllzXRSZcyglAOCUrttVA4w5yBjNuySqMzrUmZUkTIFKm4I8wZ0dir7jRM0G3KWRoIot6lBKWhGpX4bKzmEAVAH5QFgggohNk6FoHQZe9RyfxrpljwVwsdS1EBRzCycJECGCMudaaQTyDhZVHVOorl6RsnCUD+Ck8lZrmrZ000bLcW09XgBSp+kYushxhO9prKEm6iUrFlVVE+D7/bPODC9OW/dJAerIa2omtVSA1MOlLslr769fbYjMmWrZqvROpOxBxbuXugMPpq1as0zmXhEuq1sDdtlVOwwctGg3Tds6IJi/Xi2B/GR+41Z9/Ha11CEJ3Q4c6alB/J4eqwKuXt7Ykx3rwLgs3hIwiMqEXyo2UFJdCBv3cI/b5+FzQVPVlEzne23B1Y4TTkxR1pWsbOBbURpYxNvk3N/nEXjzLop/zUJ/neAW6kFR+wsOF4f3o7m8HNbD6INdF69WBRPaB2gZYNvYi8IScdQ8KeNieihCPFN/QaabbhmG97GpMFT5IR2JSF/bs22hveDKN4Ksw2H0Yjn+E0mt5jc6wjGe5EIQ+H9NKTi/owMGa2JacEuNXvZKtMioX0KZ8MyQJO+UHVtnVEBvnkl2k9oUYA/W/hnp5gVHMzQ4U4FChrdhPf3WtzPbw3eId8A+YLEgLn7aH7DgbXE4t20kcjN3TJGj8Pezk+K8BbRnTsTB/4X1RADm8h+g4YPRExMYDbySB0GDmrhhfZo/tGEMQe+t39gxbGc3kvrviasDgDd1bTbMIcOUp6LeSwf05jjEM8G2jWjLGowneFGWDPciNg5VWPQVABqDdoe4ChSUdrVDsQ02xADHytHufGCojTgny7/zCguAQdeUjmc2PpWQhce4rhG+B0YYzTEGAN2SxhdsQZ7hNpZaOl2yPJlVGW3C8YrISxYdDposhFri0FqzEVLbORUho0oKCfgXjS6OCC2s3ryH1JIBynxAHNrUM6v4uL39u2dPGuwj2Mm23djuf64dDVEN0rLmfuKDy7zAIZw7yeJ4d9dizTZIedB0SCrfD+UPUG215glZwBJjR1Z/3axm6QmrDCTwsmjvqVphVFbEJyP0lYjcJumHWrtCNs+ysf4UWUVLfSosuRPKO25o1GzPfsDY6MD1pk7kIGbX+jHniob93JZBBbirZdjOLgVUXsW7DYmxa5la3SIHdq6/GKwn6xo61X3i42ZpKMZ4xMpKtzkp4bQCtIhgDzybiF67Fkeebfjz92bZzFb3wikFu9/EaqLhceVB1TQq7TvkRhXSRfAkFaigzqygtkdEBh033KH6kMvcchbeOwKtdJVa1hzk25+Fh7LzTeo5XHVBjZ7JCytcrCgFfc88MfPhjfqeAVbfxaffwEywbR+gv+fCmTn15jnRigqVsOSaUyl7mgdiGm+SN+q+bMtJjYPl6PEIUKg3QshoLhczRdAQW05wQYj6cseh8cpuuGy7qQkFMlCpAMKME9eWRy7Mg9n9cy++JMfAow5LaUpr10z68xHsZ1OuxfLmT7A+YNgFxcSCC8gkqZaJGuH8uEOiQmEyLzX5TzbuC7Xk7++2G4YSlKyyWHDDXb3cjfh9DRNxTfakqsqJ3DabG4n21QHpDwHwVZTVCqz8/PZAqYSSHrZigGq6HvD62jkXCwfj7gPjaXBkNvPZc4M2DjAcqO7bp1MeB6sgKMs2+5lksdir5hd3qAgD7uXZZJP4hraUlvdUh/CMuOsb3VL7bbS93Pdw+ZauBy6dEjJq7ql/jQufMCevDDkdjDshiBkasJTXOHIt+RxTV7hp1gjrNVIajWS4Rqoc5CKuIMUPMS0iyIHLN7wtiTKDnszk97BPxS2mHKfiDlk45OZL3UL0/6xKxXUSwmPzzCgX0/x/dCn/Qmrmx5Wdv65lRNVIyeqeXA12NJemi0F3VVg3IMzDpi0swndN5jsW6wpObcd4dyWpv4UUXMDib64+E6u9naUXxvl12RZA+YSko+o8X32UUPjdjnGz539ujOzCKkvwM69W+hE6GZ6FhAt7PJm8EzYALP+daJkU/59UxHs7AR6V8P2QjnZDOd5vrXAj7RES0GZO/QnnCI2uZZo+26FjJ31h65xpid7VXCo7tw6nYcwY8eMmc6y7AUjq0we7SzhiroXcY/CWwKBbo2FIQLdOPfYC7M1N/n6dt9iX65KkN9g9K5Vg3Cx39S2CrNSW5rLNrifQgf37nFtiU2Fa9DNMFuxzouKqRsiZ/joNlZ/oacWAM+orZ+QLPjbYTOAbifUffOXBlNg/phN1OzJ2fn1s+5UOCAnE8ud4tHPacMdXj0SAX+KV6qyIBOLr+61NG/IEtTv9jPowNaQtxxp6XoJM/mSVTdkcwuZ7U0jrBrfPmaKp0Bk3D+7/qqcfdaqwrkj2RWxC8UDTVmDmM0M0S9G3KkdplgQc923avNkVSo7nPJaiQV742RAAdtv8ELQPYNVplmk+uGmX1uc4acVcU8b4XE3tqfSTsh2QraDhdDecNZ2wgowtAYIXTsCT+ThueFVwxNV4YnPH564Ck9y/vAkVXga5w9PowpPev7wpFV4mucPT7MKT+v84WlV4cnOH56sCk/7/OFpV+HpnD88nSo8E+cPz0QVnkksixDsztKOVXgaNXgm3XxvsJ0u22lW2wl9O6FrR6wsrWz72QIW5a60kDd7jWyQKDd/YCB+OO23aP9+vEczB8qHreN5qgbjCa8Q7vVqQt18pLL9wOGAtDR/CXYtLdmG8Mhlb26v84BlHrDMs7+ULaRe7dXiLUOpuASAIwj2ZHiO3RVLsvWj2SpqL1DSVHYIeHgbQ84lMsqOkbBBnuxTsC05Mqrc5FjkfL0WTMszPfEh3xtX8WatGI6t2NaK0biKtzomOLZiVyvG4yq+UyvGYytOa8VkXMXbHJsbW3FGKzbGVXyXVmyMrTinFdNxFW93jGxsxVwrNsdV3K0Vm2MrbtCKrXEV73CsamzFjVoxG1dxr1bMxla8RCu2x1W8yzGjsRU3acXOuIr7tWJnbMXLteLEuIpUMkjm2JpXYoo4gp0cV/ugqz05tvZVwjj0fKBe75Cr152v1uqlykPkfPn9hgrGzVSJQY909Wb7Njw8gHncAX/oKH/g1bofhPh9xF5BPjF4Sasv3erLDI/n52XTtkOtaqbme/pZznOqSYQXQfMoV070Q9RbN/aCUS2bXku+n8r323JNBW3JaUH1Laq9pbW3NmpHZEgt6J9w+Q0/C9CyThAep2IR7JhrepOe+02qVTg5zsogJgTxeDAWxKgGYlQDMaqBGI2A2PUgdodBtNf0pjyIUx7EUEBMBYgaAuWWJ6Du64eSPXpqMHiLam9p7a1de+vW3qZrbzO1t7naW15721B721h7u6T2tqn2dnnt7cra21VyCzdfqYtvq73trL1dV3u7qfZ2c+3t1trbO2tvt9Xe3lV7u732trv2dkftbW/t7a7a235PA6kM9zW9VX6JXeVpIBpPA8kwDaQ1BKU1GkhrNJDWaCCt0UBao4G0RgNpjQbSGg2kNRpIazSQ1mggrdFAWqOBtEYDqdBAFUHRNb3VHkGrPYLi8QiKhxHUqiGoVUNQq4agVg1BrRqCWjUEtWoIagmCqgDH1/SmPcDTHuBkPMDRMMDtGsDtGsDtGsBtAbj64eSa3hr/4TX+w42S49U+HO6lCWrlwxPy4TQfvEU1XtW4pneB51UX+MbT8Y1T+GTT0lR3j54tD5pKr+ld6Ju60HkPkDNqnKxfJ/eNUpgxGSpf8LPYm8HPgcVS0LUEmnp3d1tGtu9eam2Um3asAJUCI/I2F1TiPpWFbGabXopUmLviXUOVHa6a8dUSaB6oi/pw6nTRM9TxUiEdyrGxqk9OG9WfPCsaAdEyiBkNb292jC+qFTO9rdmkVgYKGrF2NfPxSI2IZwiUn/sxy6fisAI1IjFqGF8jqtTYbJ8R3e2rqYM7olQS52epR48ZCl29uqi98vP86NzZPzq34kfLyskZPpq4WpFgZ0Pl0smRkHNcv8HGtIvSF+j+5BD/uaC0p9hAtZBXhrHEEzTp8aRnijcP0RA2kXvzdA+stXjsoarIfJvS3Jz73YB6UMipyRsbyWuNKBxyfhBiIdox+Fg2vlyk8y3h/eCIqadMP3Y35xT84plgd1WxBYXWKen3hkxOGQu1kIzVYUw0RNRhdSB6YhxjBa1U2JcjYYdHIhwdCQjDk4vkbTzjifaR58UCt7QQnaUF/WhXsRHJ9WS3pRJ3I3P61OZQ0miG9tbFHwa6XWv4oYzcUNoa0mJgiEe2dLyhZLJhp2pMOeKF84sTqT2QXBgxNCPLPgyd7/63BfLvhav17BArHXQBLvH0ktiYvjIpbkSKV3DGTLsfXwW5xV9fKMP01xfeOFu8PLnQU2PI4p67oLN15W4LpZUn7hCVd/GrDTUodbk8tCxeuF1aeeH262eLH5wUg0j5cGP+8a2X3/+RD2XfZUXDToSGY0/Yls3KJ2wxT9iiMZU2nfcJG5TjF/f9maw2dnzMGZ/QwHVyLHUdz61Edg+Kq+ROKTXfga6csfM8o9bmVsXNcUdY2dv0BKurHlTccVVpiSIGJd3XqRsDMlU6MlCbTzlJivW84qWWeZ0oyadxOcgotdHXDWwlaBTE68Ab7dNiFDlp/S1cXl8U2uWBWZJ3ruXCmLflhyoYXtVvYh5Ogo3oegsLiESu1WRiHgKbES61Dd3mXGYCMTRtOiM6LNK6ELd31Dcf6GRnB2RRZ5dAWRQLYnMHpK8mk5pO+sLX9fwEmSuAiK2n7KImsfNZAcRoDIgtmhAPgTjtQZwuQVzjQaSMQ8uLnZBMWpyiLSeZ4OsKImC7gdYXeWsYRHAUkcboEQXANcXea7I8WoEggPOLURDpsGgYxJosAy7S2gGJxTldmFEsAuq1XjJbKyDi6x6LK4EY5R29LEUQE4CYCYiZBzEZj0XQeHsYxHUexHWEBw41dvRm0RCSsnxWEZte25sTCQSomRMQ8XUFEUBVQERRnpkJ4jq0pONJN+ElFhMBMfEgdua5y4Z4WgeRNvMK4pYFFQp39NZ7ENeLjwpi8SLn+iS/SBGLjlzsEXuxgIivK4jRGUBsC1SJB7EhIDbOAiKsKqeHQcw9iLma/gPEHoeKl3Z6CmKys9fX5SLJ+wJimx4+1E8YPglOc/QtTkYuTr5ZIAC0C7uZh7NELMDF6TcPFYDhEgqEWgBebXgWyMuGy1fVC0oZsK/d87wlF4izrzpGgCaAS49xnXlBBCCm5rfCS7rABAkNrn50ogJvNNIP6BYKfe+IihkHYcBUEewQixZSWpBPcFmcAK0LdigCtAuuA7XifLD+IfIPSdmSuNXAXcd5fI4esLj65hPq2yom3b7O0+3rJK3JUdjgOdQGSRNT07nsu8NSQjcqPRtv2KkrivDiij8Vzc61sJOYQpGxe27T9Qo3Jeqb4ImQXhDQOEqprGj1Qqcac1LWiVf4RCifyLRdbmRAP25/xAtd0lkC+eraiFXDH6ntmLp68eebAFaWyJnC1oF1bkQyL7TO8Bq2rspJLjJwUnxBj3uFVEWwLpbc4jsQdwu9QiIljoT19uHS5c95cK/LaSD2ILi6OS+j3QVfL549Heh1Z5ByNM+DYTErcJKw2Lyg78/6m+yu6HzhXcp1V3P7xgKSlIkHBnj3O4YEuc75hPcm8OLFBZSXlxfvv7wAkeFCeyx5J8vb4HhiNbG6xePL8nTKVe9+gzzWSz+jpV/8w6D4CrGx/2xQHPycwPHfjEkEVydCsbSAIVpakbCdNc1ocnt8cndccj+UbQiFi0iFi9gJF5TXi+UluaeciEyEUyg08Ee/Ee+GRRzOurrvVQTGTP7Q9zaGkiMm/9QP3r17cHG2+OxvHtBS/i58L3DysNMJZ7+SwP9cRGOQZePMf6xeA4ft4tag+waawy9VndJl8loav4rLKhr0R3RVtI4DRW3CwZtm1fYWTxltQMUnHf0ksZL4oeNt66aYItMQ0ols3fU0fYLZY1/8Tc30xete91aR2dQHVeAMN4Z91wnMNbPp7hvU2gJGnsjEK5/VKDimFaO0wV6uZ7t3afN3OIvIgbFv4o1xxd+U+KsLvDHMzx93tW935sEvBrTFRcJtvPiUbCv9xAGAMdVuhXG3r5aoazjxS+fRXRrdHIRQmo1L5vLb2ElGBzMecPG7iQeay7bEJCmnSXMI41kxkxa/YLVeb9Re5z0R5lr0TxbRP5l6MPNvWS8TR2bO8RUMMJJrZeXHcafdMvxZWPXmmXr4Kr+uFtjiqqz2/Sv1+5sU662Kfz0ueHSh1indZCkAHYHy4MAqPrhZ5UhSuoyWjrq41IsquETGixiIZI8YyA4G45euVlB2KihbhkC5lwjWOmp+Fg3Mz2jXZrh5+NnEbcWeVquTlyarsz4oXmqIP4SNsFCTW2ZX2BfhqkxcqsIAkDxi671uu3SIL3+NQt92hX2Bhe6jrTwyDjPjr5Bx4xX2eWZ8l9viPciM/46Mn4bLltPM+W4eASHnCHP+EjkfQM4p5nwvv4KcR5nz58j5swNX2JPM+T5+BjlHmfPfkPObyDnBnA/wOzhQeoI5/y+/g5zjyCnu2Gyf5C/cgB5n5g+g4GGUfIovf8bvouQxlli12T7NxD9l9+++wj7GhnlSdRTFTzLnTwgMch5mzufx8hm8PMSXHyLMKHaKxR7Ay0m8nObLHxNMFHuAxX6YHUDO88z5r8j5CHLez5x/TWtT5LzAnD9iB5BzkDn/hl0LMRrMeR45P46cl+j5CV5Ml5u8coKjP/7evtm+mOj7Ib6/e7P9At/X4fzOvb/g3g/z/Vs228/zHXc/HnDvz7v3B/n+zZvtc3yHxuoh937avR/h+7ugj+T7+s32Yfd+yr0/yvd/AQ0h3y/abB9z7yfd+1G+/3MgnO8Xb7bH3PsJ9/4E379ps30q0d/jMOYXgdrIwSVuIVJ/JS5JForbvHOSaE8/LDPCSka6UkZ7z5im1FOqX38eiOA+TudNX3z53Mq7QNtVoyhOJoqXaTua21nm3uVmVTrVogyjyri7RBEtvA2bSl6i6nEFdQ75WrJ7wGKq2gXeQhMHz6KBgug1ry5CXjZUsfPqEhw695vvkdNG8x4yZa0hcpys0l6xHTmTPnHPJ4vqyyEk/uZ7+tG13g0suV2yW91Am0G/c5q7UAbm4SzlY5rMcqckwiGKivIupO8kHHOI/1gu8KJwS8XttLjIm/d52ABLcpveqF1a06VB5zhY8GUH1BcviXdhj4GlMMiGkNRXZIQlMtLxyGiOR0ZYQ0ZaQUZzJWTUYYLd5RcS01ziWYXXt56wfeN8XAix2L56F37WqsSdU7A6LS4/xEWw+qq+AgdXkvI2deuygUfscpOGTsXMHX25VzPLo8lgKzjfc1ZtvOGL5juvH9F3rfOCdRGpxnqg01IQ5b4vRc/nrOYeU3+Doiiep99n+x4HMsXwQWZeZkoXQM2cPc9bcU1XPI1fUX6URzZ9q1fVIz2ZEy95iTuXA4L7ggO5GoM+794shre8n55Hd/Cudt6Y1bNZpOV5ckdfLBYUDRsJPDadWWn7ZIuOc3sxsKEyOuOMqNaxP03kZuhLvASxKM7MotCN1HMwnpQ913Nyw0gPm9RduREPKrpZxE39a+Q6hq9kBpXMoNLfXK7FoIuBfsQtGk6wxFG2N8NSCrQkTrHgFUV/8bB4dNYBohe3ULbo5SDRgF/NnuW+J4b7+sizWBYoTwsStWZNistHNarKAg+aijRRaQIZ3TlqUZX+bAmwdapuZjwZeiLl22PhgGSPhT5FzGLvhgijE05uX3NDR+/VbicbbvETW52JM0tdaqsjBvGDXSzDob1QCq6L5OGeYhke7nERVX64ySWLkCHoWd+CKFwWsm+kqbWAtbMvTtLNHkeRcrC3qDqAIt/jLNpp63+F3GsQR+tG56Rx5ylM3IRx7kKj/1vWbewiUbKcmzJbOYE4lQd+3oaTPmFv8Fou9zkCkeXwwFtwcFGOvbX4ZIDnekc4AedYyN6cT9WdWakZN6Vu3Cp7uSovWwx4oZr7R5nrctGm2y8V7NgqLuAuHAkkcY3TsbrM2kB4x6CdhrZjtJ2o2g6XHt9OQ9vJrixHi3t+R0+Rd1SBrjozbmd8HtDtl+muDbI5ubEADb59RC8y5eEj4szhkW43S2k1/k9gN75Pmue5WqjKH5khzgWGqAk26NfhG356srwhIPz5yh2qiejKFS9RKRV0zOdakTvScOe+mZowbTUUlrAhy37UBJr51e7GGD36uaTLvUNhVUd5GMIKYCHpRTj6JixWHefdXLyAiGIL01aXMKkUym5Cyu6Q+8q+ih4DOpgcsFn206GJlwbX7ZyfNlxeFu8R1l3QluNUcQyjdmbiH0cow27xTiAw+N0v46TO5Ri8PSvGuWgaMQDkPkge3+Avp7sL/JFz9CR3O4qg2EBbV+uIURZbtxWh/R1ZAXfxYFyBuDrGwEy5CBhchmapZKXhEL4ldDn4tC0e+51g4FdKYYjEW6X78huqXyZq3lJ+sfK9manIazI47yYQHcWqX1mFAdjdPquP+eDxEj7qYR3hVKMGpneMK7lDnzbIkzph6QVlZwLlwOKzxGZx0J0K+PeaIPuI1ROqk7j4HYlODYLfstwYjQZbcodGKC+wIY10bx5xb27E7Y65Ri64iJN0uRAdOcXJUNXir1+hGBbylweQcPlPS0NoU7S9rnNegjgAS9fKPS9slGvNfI1+f6eW3yLf/wKCBsj3vw+3VdUMOxrs5gcVi+fvuVu+jl8cXP7oy6IqjXSnH3Gn7+6b8kaj9Gaee2t8MWC2O5jDU8BtdkTdCfbXVwWVe1+DnXnV5f+9VKTwQiPUKdQE6Jadd8Q+EkI7y3tndDlQCTNy+w63qBiZNFyP5KC2OwvnpcUbFiZCBvbhOnDp9l545oqKU1TtGZWQ3rxQvHdXtMXtqlq754tN9CT49I/8zGeDna8CDNRCDJjrF0X2eEzmcVS0bhRpycBt+9bWAcQqeXUNIiTN9ai56W7cjvupD9z3iY/94h//hHmHfsK1fa4NormipcISw6Oozsm7GcKSEWW8uHo3WQ18AKNW5VCW4q3UeUcnqNWplKHn9OzrAuc0p+o4ZX4iway2URjJLairAhc35a3GPXytdQ/05ZM9KXe5wCJ26LbCh1PpqO6asieFnY5sIujdlwW9A1En8uhGBo/Wlw5K0VVFH5UqIMzXRR9ZFtTfpGG8EQhRekHSeP/JKmhp7JdSUbsgPkxolfAD4hdKJTG5yGro/J8IoQpbpRbxtw0dMr75EfrDUhHmFXEGxeauRobZw0AmfEv2Fcf5hlWQHldQcQvyj4c7+Hg0vHFx21A19dbW3leclmq+kbLVInTtLCOMEWbn8GflMnWxal/xwtj6ZfODBiO6tZdrjGtF6FNHygyqhFOK7KfseHfzpmguTEwFjbTZSI0No2baxFPMNUclU4Zs0R2BCxUzOS7rTYYMaGzWV62ctSlYMeuN9SxnhuH8l7LAG8Lga0CpYytfblds96vtWdpVVprd6aRgiOa4UEI2AEzt8sK9XEp17Inerpcc2+rTnbX4N8Dm7s5ds70ocxKTettFWwZCKA/sYt4813aFI2AN/MXV9sKl8IAu8I0NgV5YvgobwS+fh7VAAw6I1ZiCjmoLcTfKEeypRBdDn6Hf1VPRNty2+kEW4zFuPENNYMCERb1tHSsvNsWXcbmO9UCZBoZftkPiQBg9ABCrBKRb2AQkNC9kPy4svmy7P76kd2gPQH/NtR1oy4SkkSlXmuGw2nVHNjS4CNDrEDRghFhIgF3dQtliw46OKmJQyuDUNul15LIRKqPXTfZVLvkwWBbu3O6SXkgUEfzQ3Iuejr/749GicqqGgM89/1VU9OyhOSK+6uvnN9I/Bj81qOgsN1vFV0AEFQ6SODiNwpl4OMn5t6mrCDm3a4mbVHfHnKaotNzCgW/C7qDnzOkCOYlGOArKe+nsWpdH0eKtWuk2cXTLG0e9Cd5W73okTkioLkhiEwtovQleFKBj6mDyqvnu1/cneP+3QaPRq3riU4MYT8XvPlek4it30H8JgzUNOonBsPXBCP1gROIayfc1Gelr4vvqO8g1hxovWYnWjetRBosR1xvYv94gsLtV8yrXC5aQDoCF9VZLYIKpYo4Ky/4FJIG4+CtoSrfDDboPGRXnU8WbIT789K8HtHeV+85Feo1aNfBb4llklrQNhx2tvIMvk061Xx3RcUgchwlWQAgd9kt4wibZbWzr4BYdJTluHt9OmNlCh+q9mLmtzF/i7tAY8pVXvnOxLz5uOEKLs6IH7BTfl8EaaVJiJuT5BHC/VGPLS0NM2vX1HYuyUZiEqzeEJEBPZ5F4KliY6EVr3L8L1jSTCy64YE3CFxuHa9a01pg1ayJRRMXFR1G4ccGabA3KyB2X34b3p6w9jb5S1lwPwHCwxb4MQTBFhjGRBlwi1sfJ+ozjsilvE1Nz1ZdZ/wL3F0F7nX97iwnaa/0LlqT2TLXShbVKF+CeHvR3cEmKG9U0l05B2TiMojnxJIcYyIXqmhD31/fnxG2I6lsYK2PuESLo+G/K8OctWTzntk7eAsOlOboOmRPDJV5lz/L1N8HEsqluvenmZR/6P99bVdheh7OQH1v5K43FYpNrvXELbKDm4FcGra8tW9eGqfCezEVGMlwc0p3oFElJW9bzvwbEvvV399eDysDxSB/ieQcW5otiht4pvp8pxQcyZInleL8zqzTEgV3fv8i5N0Fb63tzqmaiBQUOei/a2loG/H8Bn5AXwduPwnyR7Ap+3NwC+6k5WCOtE6jnHmG4gEHVuGh9Ky/Fm9109q81Y/AGWFjRN/GsKDdyXmEIdi52Oo7eQe2rZ4VNr9dzzBT/TcpdqrTdoc3Y+pto7LUgkR0cQtqeBBmhhMSA7374q3ClvQ/LZ11WhCbk6UYEwene2KfzH6ra4fqchk6JsBEe4oLD40ICI9S4R4k7BEJvObRzODv0orGe0TDotJOflAnOCQmu1ey+vhAHdeISDzd587mvteRXDd4Sw1qySW7AJZn0C+sfF06uE+RyLbX4xza71b0J6ww4MS5z8SbDgiwe5KYJnYrRiSiYE33Ev5UpLNlUGBjegTBA4cmQH+uk9azWOo5gpH16T0kYyIECDNMuwwBGPCjBkr1LvBLFGUoID7qz+3o0ntD0aCf3GE257WDk61yXxTkBHLDiTtc2sDUjdno0EHaK2kB8BcRki9wtdN+OIm1dYUEuDOnAEDiahs1Rq1a7YyolA44HuTn9HTby9VcFX857JPl0T8aNhJJQriDiWtdykDtOvqBKmQhr6w/6gzyiI2WngNM114oGJadxGNEISFflHeAFkpymUfAmKpgA80woeV4vwkpLCuW+kOJL1yAaE4mATQu6gJeE2+qtirSrOo12tl/9AY1RzIq6bU72hoUEd3A+O5zib05UtGHX63CjMTrc0r/QJuffJnDGSMXsXriPyh6wcDtBxYnxai9kP019xBE5QQqKjVQIiabyaSyGJ7A1K+QcsjgB5hSK6YXtvkNdh+A71+GJq1TufOP/M7pt9PtBgKHKvZMBr0CN9OIScVkN7d0lzje5aARFkU9fJs7jSOXLAmb3HbzpPoIlbX6T9viS+sccZuRQc1Gu5CR6anhSrA0i+sS9P0IUhU8AVggnxaN4+LlZasC67eIYXn5vhrZHS9gldk3xNBI+UU04joTfYQJPQPF+Cu8fmILxzvLyAWqakPQcku5nEj09hkh4AQkfnCoi9c+ldIvkl5D8w0zGiOL10Kmg+K65kVIPIPnl2bLUEbz+/KrKNr9iuNN9W/EYsn9uFdRKS3h5Ai/HVhVRt1k8xceLihSPh385KP7dXDcqTuHhT9+IhyO/gh128f65ri0+j0db/Ac+PvExpn6Uj898LOhmxUsf4zB8+I1dHOCc4OMH3oTHp0/wnOVjTP3CCVb+i0vx+NCvYutf/PBX4vGpX2U7v8DHz+MxLj7Fxwd+janH2MKTv8bU33pT2e7xy8p2f/yyst33bSrbPX1Z2e6hN5btfpYFnkNjafHLfHz/rwdFs/gJPh7DIyJMsdqzeGwU/x1fyz48CROuSe6xTtqREKLVeKG9bDSeaLtq6JSeOXpoepbooZ2aZ8jOmRxKtr/Y6KHtQfTQzkjYzzGhQMWTYSX8Z5vSULvmrK99hkiiPgtfG3Zg2dYYobOD+i5m6ErNd+oxRI9bMSmT/7KzxBDFGZ+EZjxuxwQQPWrFyEz+a41zFEk7JtgLuraesDSWeH141NLiLC6OoPrApOogwnNO3q+hP/tewXv0s0++78/BruiKMehiRSkO2/mtcp/iUXv3VhKeJsOmgYkPSrhLPByW+JesRa2vFHkBPFJMDJl/iLUl+bSRmi8aV/MFM1LzZLXm88bXPK41T/maJ0drHq3WPFHWBItW93pAiq99VGpvNXf3feXDZOrASbUPwbyasgkGJE7mEdPvSNcN45Z2GGAUZmvwqOg/BnOxrThQu7tsBkIMTMohPdE5BwNMrwYIfQkTe8ggWqvCsyzwIHjq1s99Ht5dp9X7eVYZrzWsdoEL/TolMUUl4iyEjS5jo2pgUzF0ZJur2R6Ct159aD+CnaKfq1m2KzFbpyQM6gTKOEfqqyVmaf9CsQgsQ8FmLMzYqFHelVisq/nhjC8IBztVDQ8rzU1K2FWpwddp3850nrEivJX4ipClJyGEd7a+rCWmmCFBV13tKJ9mfNhuPiXxYYEJCWbbknixXfp8z6S3PnRs5kK6HmTpCRmVnBFrpw706Wp0GrVarGXpaVTLwQ+BhMbtEmoJQOpDxg4ckQacwhfkFx6Uay4iakiU2lUYV7P1jTJyt94tZp3wNA8XnnczlitcmtJqEwczwbyoeMSsdOBvlJ/Bb3/Q0iZp6XZp6TaMatlShy1hMyXRBgPEEywjyI5jPj6C7LUSYRZEkEkkWjMaypVhXFFAfeR8YOm6AQeM1RFsJCFoGUWWmoNOvkb9gvrQswBcTCnVincnTHEltuyVYnHqSDrvC01LpzbxWFIo9mb0jO4wOndncomvK41tDXX6yHMszxIelgedEiS2H8Fxqbjd0yEyiOiLt1Vvn33cR+qV8lFtiQnF1JgFxdY44lP09tnFap0xNQJXI4WvVHXft/i4j1Kbtw9Sei4Pq9pqJXpSvB8ed84KlzS0+6izwqjmejAadVZ4bp4Nv35RNk7AX9VJoVUnhXz6ev7BgY9RT3TOMaGDKLd0SmidU0KfLZGmsx/5MnOROIvM5CCTYUX29qeK02L6AxNBubwES7KGT7J7uLVmqbhSam5wl+4iFbwPmv5asdslza2DdmZuT3/1PP1ltvNZLGQX7eln8jqR8+YTcrvyemF5WSceuWIDlyLxyA2eHgPfDt/awZ00NAN+y3unuN1EZ/1UqjJrSoXY3owcis2BYU+JHq6xSyZ/I+8uQEuex7vBBPg6515V+9f1pebqpbqDUmi1kV94/VBrrF6tl/XWUF3aQulZLhoDGKBHz2ddKd4mbElKVgMj8wWzkYKztYIT1w8VZHK1WJavEfftGKQkXy9QdHbJraROvq7WOFNWV1rBmy+4eqTgukrBdt65caggk6vFMrlctgz7SlHc8jZikF/MeFlxDgf7+Qw0ATOikoaWYK2E/wvkksVkvlbP9dfSWUGOn5fVbI0XrGaqbWLs9XweS3Y+iUTqiiapUcBMGZQ0cM04rnhcLS7nCxC/xNwxF/cF9S/lM3oSP+5byp3/Umb9FSGMkOsJLwwnPD+ccHo44dRwwsnhhBPDCceHE54YTjg6nPDocMKR4YQHhxMODyccGk5YHk54MR7Gx3DC88MJp4cTTg0nnBxOODGccHw44YnhhKPDCY8OJxwZTnhwOOHwcMKh4YTl4YQXo2F8DCc8P5xwejjh1HDCyeGEE8MJx4cTnhhOODqc8OhwwpHhhAeHEw4PJxwaTlgeTngxHMbHcMLzwwmnhxNODSecHE44MZxwfDjhieGEo8MJjw4nHBlOeHA44fBwwqHhhOUQfEQkPjAXaFB1veyv4do3sjR2xRoJhyYBV7t8ja7ktWW1L+rgNnj0OseuZmQNSN0COoEFlAng083d8JjDa6V7hWXDnRlWrgla1WmJvLsbYv/Ubqzuw+tx/wIstBPki74x7BhoW583d89jRwMrr+VwpxxwiY17xAVgmVv6vL0b3rcAYIfa4haVqA0WPzgobtR5xEEU74rgwFW5xyXPlT00KGu17CGU7XG7wVu787iKz8I4j+5LmMP3D8qH6lv2/bzEBTlB2zs8yI+0vcMh19qOq//AID/W+g+EcgLt8h8c5Cea/6DLL0F4aFCkoUUekk90gWQ4WsIei8Aw0HJEfyllYXq8a/IWKC/nengeHuQ3tbGHa/A8Oshvaf6jw/A8Niji3O0+JvBMEyVNB8fRQaG2wnG0BsexQX5HGzlWg+OJQf6E5j8xDMeTgyKTWuTJUTiODwp1FY7jNTieGuRPaSNP1eA4MchfpfknhuF4elBktRZ5ehSOk4NC0wrHyRoczwzy12gjz9TgODXIv0DzTw3D8eygyIVa5NlROE4PCs0oHKdrcDw3yF+rjTxXg+P5Qf46zX9+GI7PD4rMapHPOzgIhRR5YVBkTou8IK14KL4wyF+v+V+oQfHiIP8izX9xGIqXBkUu1iIvIQ5Ug3Yh6ma6IcyEPcdx6BSMpOG0gvwMh0278QT2Bq6EjUm/i5PL9RBlL1RrE3KuVWS6Sb5qszgFIJuiNQcsG9B8J181D60Kyolr8SRfzUOPlnKnNo+FV+drXYm0LJFqCau5jBQpgLa1AF1JaAF0c0J9QzTwHUDW4tlZSwI88H4ksIyu0Aej9JX96mKvcYF0tksEAkETvVVn7klT1oeRTZewUzbEkYI7EulqVulqVumq27ut2Agxgd66BtKygQEmmHtGTDTPiImVF0MdffioA3aaFNvb+cR83uVhekNOED1qluqokSZxXpeN7ZcnqS6RM6HIaVaQ0zwX5LhGel1OygnO3AFyGlXkNBRkLdAuCwyQE/cbip6pceg5A3LcuoJVhYuhOGXjXmsmn/QXevYvihwBRkVvT3ilS4+2hMzuX4hdE919NGFvZeVpCk+hPGErDA0Bn2I8xfIU4imRJxqlNeSJdlAXQe+0fo8/x51gqb0yu60cjwMiWGnkVq2/+GL1xcpLpC+hvCSCyrJuVK0bV+sm1boNVxc600HdtFq3Wa3bqtbNXN1G9bvtat1Ote5Ete6kqxtX63ardaeqdVdV6652dcNq3elq3TXVuhdU617o6ppq3Zlq3bXVuuuqdWdd3aBad65ad3217kXVuhe7ugz6BHIigCDMSLbTkEIzKtf+fYwLEnLnkto1b/1fTEgke1LDrwU0wxX7sF/xj7b41WCH3mYKJVUeI7mAh+PkB8Uqla7ycanyIfeS9KM3Bz/mXuC0/s3BB+XlMniej+ksDn/2QSvwFnPEpbegl0V6IunJW8yHrJgFWNVEOOdnchklKv5y4MADZlc/Zsc58bgUsNCl4KX4MiYMfLJ8yHK+XoYv0miL9cRQU+84NdTXJ3XD4aJ6AY3dc673O+g0NNWbUJ9wV3b0JhA/Z+jqXbDV7kd7BvcCPxWoo01myC0YwszCCrKpgswyPbEc7+gliQnaHNHiFOeMEKp3b+9EQ1eyTrF5MR0skmvchTMZQzMYQx5DchBPBTu8dV/5GDm3kN7c2woZQKO8MBEFJrRilBjqtz4v34oqKX9Sft2n/Kmk8Hyv+OSg53HZc7qxaZceALWWKX6DRbMhdGTZQwMfK+qyjBd48H7Y2zkUJ3+Tb925voRdvESjL05r/OVXGKGaV0nEYbSaD0W0JQgl3E9fRjTUaMfi36X7jxmZ3IVxne4H6pKvu31BXNRzPA7TsMC7QnuTmHwUD35S4xHTLr/N8aKrEnF7qVeBAq4oBte1YI1wLBPzYsakjb0xBcJvaSBb6wLZ+gF2caCt3OxijEQXylJpqy1+fDSMpWW8UY2LwvMQxoOtxRu1ZbzRQMOLahTcMryoVLQ+jKV1oUg12kzEPjK8qFzrimgxF0h4UbnRTIcTfUa1Va+V0wwZKZd79L0rISR9eNHQRa21LmptKCE5jfpTtC7sqJj0u6i1Rs3OIw+ZBEm14py7jEFK45q+rccgDTQGqcb8Ho5BasfFIA0Yg1TLi94x1BikepVND8vVe26oToHYVQmxIxnTPqOcQ66f4+PWBkNxa81837nv810PXmXc2mAobu2YFnNaITozfob/VKvZsXTk4taGI3FrbSVubXVIBnFrwzFxa+uE5ePWRvW4tdEgbu2rJyx1zTlCQGWfNW5tWI9ba8fGrX0VNBOPp5l4BZqJV6CZcQBXCCAoJ4lEHPYBhn3cWjuIWxuKx1PGrTWVAPahel/2kdsziRHm/TRpUKRKbCSJW0sLdh+31iBurZG4tVbj1loftzbM1MpLrbHkYqePWytriY9ay0NQbAYbZdRaH/zcukDusqbrXYS1vDMhkWtDjVwb6r1bIQmOk0SuNdsldPb6fRqBkKXkdiPD2INCNCidGH6r21QSqeDZ9VcD9HJry6DKwSBmvZqXzeQuur2iJMs+Zxhe7LHPuetHdknsgU/jPFpcs2rsOqNeJICC078fqB+v4ujndOTUotT7lBJvaEWSIQwULj2yXakM5lE87r8B80ja6B39nJMiEGhUVgh+VGT2HbpguK8dFedcdDWBz4B4H/dtFm2Jriem/IH6L9P4ZsWxz6nHr5RPGhYvezeWW4gG3Yt5Sg9QP/8pV9ivcd0t9HQw331jP1T/o6EaIqpvWDHra8+rE+d53rmnieKJT7pGnv8knL0G3YkguwiogZuxX39DV64SPIbn038oPXgp6P4zZj+KpJ9MNfvhQfZfMft7U5O5Gwmme7HMii0QXweR3OT2FwyC4Dh4XuilyBBwMNZY8iQimGzdJYZc2PeGQpcamw+xz9bRHhweOUj7kQSZgZ+LB05roGLEjePqI7dKoXOFNQqv30hZlgNSupTBIrHUzrEr08APvGJOLliE8prITtZNeSR3/yntJN0ikZDpunUhpWlrjG+ObzHUj1ptiZXUQ68Pjc5WT1RafbJsFVwaXRUHZtKA+BQf+w0Rv/e4y9LiM0GjOfO2tPJbDYwqVUNfVcrKzQ/XTQmkI+E8uFqlbrWSxsR6QiJnYrWkF2uOWEr1dUxcthj/ty07c4kOGzoOmOjK0hhZo4DlfSW3trqRb+jSo1+aEdN5HjNWFirfXK20mnVPi//yRJaqRK+2S2BdLlXicYRMCoxnWiIKSXmx0+7O6y2WrjKjUJcqDXMLjYyuRAlXopJx9q0fLIUczQyvRGHZt0xWoowrUcKVSMvLStTIJeZO4leihl+JGsIIk3IlaviVSDPahVyDdMPZGlBCqz6clTEfJsm2I/KROiCKdvef0tcuxyUTuCxs6jl/waMi7wqSws/+4i5eBNU7+5ihsyKyzEvsUCxfu2YlCiF8L0TZPamZXHKeYuQAR3x1rxInO13xDNFxDdF7Ph2jieKMz1B24dTHqUUScSqUi692uOTpM1YKoMPdEIlOxUVL0jHv+cv7g8wycmgtlx7ozwFGHpDUJyTUNQMh4xv0OgE/t2rBAH2D3BgVR7ZtpIdSBkfjYuMU8p6dRNey4rGOoQrD3f3WvIeEPmhaHF6BpVGCEaLlkBfCQl43a8tNg34mrad0YUu7fZBrS9SqKLpdLsi1eSMbA+VcbeJz7GO/OV/tuJxtKEoqn2srMlt6gwBOPgUtuAY5gDSkk3TeDxuCtK19b/GnpZig6ssBTLQRZROCSNGSZR75A7DUSc6gzY6LWzxugM2e13iMO2ce487f2Bh3zn2MO196Y0zFHc5eJ2kkMqkzXv1g/UcLP1i6E3wCQqLzusSRSrapYxqGgIPKFmpDcT/EUGtW3QP3W+p5lr6ZWi7oFAwhNVQSX2KyawkRQLdiQkACJrw/WQXTxTxXH86lz1vx1aVAyCVE/Y4sKRpYTu6tttSNTPs1/556v7V0SRbTICr07oRTog80p6g7aBivVBFnKvwzVofAd1DMu1Yv/ogfcbiwE70Nh5M6ROmUhpgVQytOFtydE99rCpmRO8O5IkFhcpEbaMyoUPxYiAEc4eFtUq8gxn018p/UW82hHmlzpnNKAEdWcWQI6ry/2BT6adsktbXEQl5cpWe6wjfddE002KE2SDqX+F9BiXm1WZUofv5DRGpIF+2x+iWPlMBxjkC1Iqm86adhw48kmZCG4q2MqcTswmcrLTc02otWqMPR0NJVOJxj9AZ/Ir0jRjjY0ZZ0200y92kdrXCIsPKQTVEvr3YKfn413Y41kCd1R3yxcz30VKi+L56wDDolj3sRcCr7Ge9NCgUwmu9Ux3WgstS5TNvgRhr7BeEQzwXq4O9y8g0J5dFrUGIUb2cNXhckITTFCqyJwzf+WnEQTsM2uMzmnzaTp2JKXwxr0ah0RsJaOAJMnTT2ThXFAt21NDSMBu9gsUkwSqoOAfxt6g7umtm+OPgTFV8e7ZrVnp+gKAxHOhqMnDv4UkK+LTcSGFFe3umUMu9UIHJzXbTFOyOQOll23EKWEc8lwsJkAjadx+inrB41we2yhGVuiW6q52IitzUmckdiJ9M3pTjvk+k5IfrIPHCmnnSx7V664tnBvUzppAvUvQA6051XL95cH2I15oTofSewCdN9WN/xHV9aJQH8+KbeKrigZfkq5+Rd/CU2+EIXzK6YccUaOl4u1UoY9Al9Cb0fEL01iJANKkJHzns5tUDgIdfi5DTSQCYSyCH72ch0GE9FaKuCtffTHxtXkyNvld6m6k+6rY7RO+p/fEIwLlEe2orGWAoHcpzuHGMCQmGQuqxgyVrUi/yXykKaFnohyOybFwSF2J9PLoohKg4whZ9oMKBi+YVwcQ9INvBp4b49POJxQR9kJjfKy+3K89XlScYpfaOsV7DsnaRnhHAEhGwUhIznw6MgZDUQpIF0n7aBA3vhhtUKcqrA1oY+sAeH44Evi4YQZF2UPORFMhG7386zGHWrrz4ClG3GsjIBO+5MFL0ag1Iz3B/Dy69mTH/MMErH0s2UpxuJUZh9f2jSIbppjqObWCmlpZSSiE9Q72aw50QNozShcORN8Vy/OK+GyB76huC6UULNkXchFhxu/FgnOtYJxzpzssG4plPfdCpNpwOEcFSkrA6rL+7HMy0HMK2Om3p+oEb224XyZNycmJHpSCU6UuOgKYdJiSqodnTseLT9eLRlPB5NzOpx8xjcTzzXTmigo0lVYHdFz4wxHTNiLZ3pq3WmT+v4rdHx42X51cMzfbqc6WvGznSRPSB9w9A6cDxQV6UJPXvzPJEMb35eYwsD3SDfOkMAS2Up8EC13hsMWIKptGoo03EHCY6QnZk7ZEoxnKCwwlA5yoGd1sDuDIF9wQjYzRGwOx7sdF6N6+tgXzCUycFveX6SauDkJu8GCFWWQMzP11gMPzM5AK5SjsCJy946YHukSlc/3qzgbIgLtUjNrfFciDYFGNdVStuZ50KCt7iGt8YQ3swI3oIRvDU83hiXYBhvxoNeZp6Bc13oZ4qEGczuFdnZzRQh9aaSektJPVNSJ9toVkndiBsCT/RZldQTJfVEO+y6ENeZbIUmnd/5RGXu8TTZUJpsyE0VJ9adS/sqjHu6EJrxIy6EURli51yhZJ9WxQcZWycGtnVsGzq259i/sYPQ8YPQkUFQaXcwCBLJkGiPxSNxuUJolETxlKaX/MU7U0klugDXFgUXvchhVXvF62WCzpjopGOZJCxbW3GJEYT1y/e8UWKyUUVj6X9N0OiuhjRdsBpFnPvSq+bxLY802Y1kH43N1Jl4fFt5fEd5/ITy+Eml8Sml8VWK7NWKbIpBU8PsfFVJ7atXZuct4R9+fqcyv9vl/O4O5ndtTqfKpBibbGhCT/gJ3aoyb7Gxa56ZeTd1ZMl4xStUq868B0BmQ0BOrwBk5oFMR4Gcrub42TZYJEz5nWH2nKk8rJ+vFBP2nA4x5kxF5pW58lh2TCMwXspVymuOsOMBJoIhTJgVMBF4TMSj/HeimnOGeb/Gk7DEos1e6ormachnklgkJgsTrSCJo9Am+E9UHtjUJbqpazD2qzIiWZ7BrRmTbJs709Ptm5Chi93kNmlpdcfWrOzY2JQL40T/MYPtWKxY101XpB3UvZbEZoWdVbnhIkXrSyRlXQ5pM/G8tB+r8Je3t6kjj3P52DAmW44LFPYG+oJJHG7if8DNCG5ih5tIcQMPQMwTBLU8goax0jgnrIiXu1G8mCqo4oxe1AB0WPaKcTt8xUgdR3EVR4n4UKjWi7Rew0dDOzO+VgAirgARi2GuQ5pD4ejKTMMUwV/4t0lbYR18N9jDODQjOGzUceiobBiH8bnhcAUgogoQsM80Z6G/0OHP/m3iz9anyzD+QsVDMIK/pIq/eAR/Da0XnRv+VgAiqgAROaPAM+DPOvyZ/4n4q7Cb4MzztsbbwnPjbWf42Flw49fE4H8i31+BtkbXgOicaCs5N9oKzom2zrI2ZNmHGi4q0B00RBkIHxso3S5MWBPYcvomNK9LiOK26G3GqoobVVVxWkVys4rkVn0ZSapoblV7OJ6dB56ha09biudsgOdmng2IM/UviZwDZCWrrCFadnZ5p0T0qwRj7Eoy4VeSifpMTtT8Q6g1+aIX4eRchJMS0gphtgYoTH1/I8FR64sTTgYfG4uWSY+WyfokbuiPHLkmvNdC7ISL6C8Vm0V4DfHk9qpmcKO/3BtXqQpQOpwk8+ouMS1hxfVMSUaKGUmxIymhTxFERCUixCtl3qx/xn3E78m0llMeNEul58BHwRj0dD16ujJHf3EVDiTOY4eQEoM8/QQGxZWiEEu6TU+2K2hrDNAmzhtQJbrR94qIkGhYTSdvOApy679o49yc09nWdNwHmGROQ5NS/Uk0J+TFjpbyqEx/mhL8tKdKGGDHKVpazmO8FwdZ0Tjm5tZPHw45oE2D6Dd5StHa4WK8VNlf7CPWj902/APCzoawob1EwL1EQKw1xcW/nM6UE3UIaa1hpA0mqDgzdYf/BLKhGBFTgIq8Lsonx8UVTw1lUV605ck6S7Q0K9OfpiuRagmohniLWeT/Sf3puBJtuZYwQKmbr2kFTtEdON7vJOQqlCVmowpm03GYPftOI9B7Eq8pdh1a7crYdWhNVsauQ2trZew6tE6cL3YdWu0Xid366ju0D5EAFFXsts6A3cYK2JXJTtzK2HjBK1XQ9WqpXlUVW7K0IumliuLUSSjEsJhz+TKZprb0p6k/cvoRlpvYETTzZwUst0p4q9vgEUSrM52xeG6tiOf6cj60XwnkOtLfCI8w+lOl3liTogET8VSb1rhGUqHWTLvd0p9htnpWHjCKtfCcqLO2yg/vZCTgyWuMNVPO/XLsx2OvuiNp1Od+s5z7JZU26nO/UxJllUbPfe6bkiSrFPqq5/7Q4fxPds3Eq5eh/HHCHXqSf1a7mWY0KsVPVKX4yaoU3x02l5kszWWc6YzT1zuTFjY8VarSdeTEzbWeC46YyswP5PFUjg/blcrW02nVOmYEkzyFXJBN5RiB6R+wM4SdIeko3aZP52F29Rogp3km5Kji8KzIsVKoippesyIyNEeNrNKVjKxW+fm4akTS+btNR+G50ZEdoaJyKQ9KWWDUHu2sNFWTWv5uY8qe64xbEVOhF5fOB1M1ueNLBFPjeFNwXrypJl98iXDus9GRPR86yrJnjGkMm9AmzoT2hHhSjc9HW9dicE2RdlrUFAUqikswpGU56pfEdJCYlolNnyg9Lbr7lAqMqKhW4riZ57iZ9OpTRoIOV3vlTBFVkOwFkskY02rfbpVmKrGmJVL6RusDJvAClftuafFhxFBf8Rz5UNPDdQRP/ONfxdIlLV+F8tr+A139gEiPEjy64YNHN1zw6OxjIaQ7HRE7GJFER8QOhifIbcWGpud5auiMzHGtc64nLu9menK1lwYkEaeE13e4gMa0rOhI2PhM3d+UFh+g1apBn5BrX828+qqhn0QtZ2Uu9ryS2BX3yqkmpi6RjrrVeK0fV80Q4mE7jHhgKadOXSZ90alBoa43IZH40bZqnUP/TPxp8N7RQr+jdz/UXMI6Q51aX81QX+1Yc4lQ4hmLUcSQuRoI1WGgbquWPRSZ7uhARtWBbNYHcoy5ptXR9bJF7EaX1yT1FugM3XirCSivNzpeWBvdSZnhtMNrkE3lTdfTlg5RV7GSzruBop+xqGZV03IdFAJo0Zqx4Qz6IArFYkotLWWSJemrJaCAmljN817jvrF2n+IQcYgC4FasZuXJW1WrfIXVg3JTnghKfgFjxpIW3H0gd8tnkrQwWaWF0NNCtbuhM53xGIoqlox2YHddo1/clfKjn5thWo68JU2Z6anjKuclmx/UexZyy0KGFwyDlzb0AoVehqjfjDixFiddZ9gBMjpZbPCfhEyuE2BcJcCkSoCO1rzM0RhcV5nrSTzoGQbQIK11xOWEuyDA67o34tYUPRXI5adOObciR+VtNSf0NNfLPIPgYssTGocmEJcVNa9fPMXppthsCe1lfrXUdF4i8EIIb0ZbklvkRV2WKU/R5BK6PwcyPAeiTzDr1MIS01GZB28E9UN3N+YODC8tX7d1kkqvdCUMK72KHTID1yv6krBKXg1/RWJ+0KdAriyltfWfqbiw5IWqyS/RgasOG3mhE3GMqvSHBzGqDmLsh7Cs19B6NHJNX+2Axn/TAzoYThEmfD///g+uPedZGYwMaLzirAzPZ1ZGr9Ug2nOalcGX6sCdaVaODmJyTrMyOp9ZGf5ND+jKs/Lv+eCGKwyuHT+4gQ6SGRncRnVwk5HBjbRefD6Da1+rwQ3HDq4dN7iBDq75+z245rwGNzwz+11xcBvnM7jmtRpc86oHN5z8Byn3tZFyg79lKReb5LjcJCcj+qekqn+y9KEvDoF66mRURzLyJ4Y19ftTcmdmTm/JzOi9yGm9F9nVe5F39FfpFnkVB3S1nCdPlkqAyF1pS6td19Fxt3105mRyGVwvt/Sd6oI+TsR5ypTTi0hiR7xsmnLs/AYyGr42GFVvXXDvm/minUGhtt/7BhVSEoKLHQh+bnfylhZ6ld9tnfm7zuWzIy63A3dbb6d/oZ0YBm81SU1uoxPVuvWuojocQvVANQrlke7R6/dWQo9YM3pzsOHHIszrt8h562ykrWB4ww7irG3SPybXboU6owF1OkvQqKbCGUOdos7pR3WFjvr6qKe1lZA7dUKOqoTcVUKeUkJepYSs97z600rI0yTkNRK0mpoKxlhYVWoylIA98SbKRxn+YKqO+JKaZQBiGgK2vK5nMm8JQ1rtuZhr5gJxhyKkjeJt1TSN3PhsOdVQFduJTyuJvdT2XTAoNzG47evUSImn+4bvCI005VK4g5RWn84muSHaeVuC59qIx0EYj4GwNi06AwgbYyDscCJ08BGootp+dmR8y4YmiZsdTj+1hpNE7lBxGHWSVMdGJ0m3HM50MEZNP0ncuA9rqOilZfVgUgyTPJYod7m6Hw1rqdDbpp82blyHW+eMGZ1F0bC2615bOi5u0GGwrfhC2SAe1rwGTHwib4S2a0n1WV3nfnijc5J8B7wOZqpMh8eSDYURH1IMspwOPJaoK6NI/TnmDDvG45XmAiMw5Ck8lcB5yjVwJcIvb1T3bSEdd2+QT2fO16Uq5xjnPPcqOdTLm7NZX78z8GxySR4tiLtldGfbsB8T8X0H/8j3bRB3JueutWuOrIjN0RXRqFBjNPacMBJTZyStKiPpKCOZUEYyqYykq4wkVhFHrtHyWGiypL/E8a6Jkm23nZeUxLkCWSUK37bnv8mQiENybkm8ACHathcIND2rSLRcHeoiDsu0vYgTVreedLzRHBGl2lX5KRuITlJ2SHRqj1U0OdGpKW7OQBqJ6pdlNtdXN9qU9uOBIBV7deEAd/4UbYC7hhNRA4e7RHBXrl2NylKluJNbAeBFgjs7wJ2auvfDQR8bio+gKobZmvQ1pGD8X4DGqhQmLsJ01x+qznGY3qIqvcWeKsp6Da2XnI32BvVGdJx1Ooyq9QbfSyralKSi4yxpMn21NBn/bdCko8jU7dMGuD4X+nQnxivqS79kaNWeMz8MRugzXpEfhiM0aVfkh8EIHcYr8sPwi+eH0WtHe/ac+WEwQm92RX4Y/C9EY2fih6P0lpwTP4zORnsr8MNROkzOiR9GXzw/DP82aPJM/PCs9LkCP/zSo9VwBVq142k1UJozI7TaqNJqMkKrkdYblRtrsqAdodWKsrxOq41qvWSEViOl1fiLp1X72tFquAKt2vG0GiitmhFaDau0akdodVjx/iVDq+a8aDU88zq+Iq02RmjVnBOthmde31ek1cYXT6vmtaNVc160Go7QqjknWg0n/2Hf/fd83x38nd93Z9lsxVWw6LBKN8GXZMdj53/6aVGNzZRRyCTxVgnxgWBWz0qUCPRps71V4pv8bsA4NmHxey4IiWGMCcOQKax30IgX8GipuJJuq+9BXA+EXYHj6eJrsp4LoBZrALWYkV6m88CFHQumAkXxrYXd4W4bFsluXioTV8B5PxbX7hKpTA1h6f2X7W2m4lM8jSGYSNRdt67YoHU20qq9+1ZVun1GAS5OBw5iBHqJMgmYoTFYWGOOGjXq04JiOUdLGkWh8pJWX9rVl271Zbr6MlN9mau+5NWXDdWXjdWXS6ovm6ovl1dfrqy+XFV92VJ9eVv1ZWf15brqy03Vl5urL7dWX95Zfbmt+vKu6svt1Zfd1Zc7qi97qy93VV/2ly+ijp3LMjXHflrUqXPZHzToR9YlkWV2ERWb0wGP0wimbeqK0FsnQmpBheLuKhhvCyyBoQUjiWpzyj0xVyw9A0avMwish6iCZMvbZyXEDsaTVBl0vzbjy+VKuHf1B5dPCAxda3O5Q2xICVvCi+HO1FktxDVwmV5BTyWUkdPD2x0CmNiHxwgniOsamRxrirdI+pOwRRPacBh2A0Yxx8d8S930CKasen3AIszIo4xmRHvVCM0Xn7lSwxkhpNQrZndu3rPZXiWmp5zco3lX+rzfHc273Oc9O5q3yed9ejTvEp/3qdG8jT7vk6N5G3zeqdG83Od9YjRvzuf959G8GZ/3O6N50z7vmdG8rs/77dG8ts/7rdG81Od9fDQv8nknR/MC58G/EP98SqBRJof3DIJW3tqQMAMa+wq0ezN+Pq1RqIqnNEwY6fVt6v/xrl7ozjzuGlz1xld5jBS5Gwxi7kyz4SH2qx6LhUCF8sOd7rZIeZfZNRTWGxImiwhMmNCV6jvdpRuNUcmYUtM6hWV5yNa5BY15X1nPuy/UixqBLmAPCw9IZfb4+GI6HVmeMUoL6eZR915YjUmApJvdpZVDxkc5fKdL2S2//ORexkcn4C64ETLfpf450WHmlZ2wHlBbrnHMOB7qq749xtscUxqb+W0diWO5W/iKvzxTqflUWROg+m+m1b5xvQa2JX221kklmEd9Oe1dqgGJRMC8vS8BA3nObguNpzkrvvNFftzi8HCMRivqHUrDhu6eFef73Sy7zI3Qw6Havdzse/G062KWS7O3y4nV7dkHG3Qbz9iYFF4jCGGxCMPWhxUJ+020ZiRKEaL9SXN0SzplAh+3qFYxExlMw9PB8AQyDsW5+Iy1sr5RkY91emqvz5sEe/cwVOEC7yCxrxKjjPSPQC8QI8SE/kgo0Qwx+4qHkgWUetlsn9UoorBswPkfo1dVpZWo8DFLj4S8c4TpPO0wHHEC056iRYIFE6DU2mT5R+lGHOLSw3IGCYQ8SmehvGMjFxB47yyRiDa75GZ4zCBkjOIpgamajPqFFs4FeRKeK72+I4EVA/EX1PAyqsONOk+tyMi8lnYjw4eplx4AwQcdvqMIbqKfBfRHOcfYplgv9I348WFGoBEB82RB7xF1MxHNA3a4umgD2Wlx2ixMTAa2+s9YCeXIg/Xu/waeJ86d2tdomN2g+KiPuGsQ68I92uLPBiF5/0sZkrf4Q/+Y9MSvacwQBQiZrbGBG9zEIkx2T47Cm+prGCFu+JYx6uwGSKJPSxxchj6nq/c9XJIyCdUjL3M5I7V39GVGyCnzYZM54o9ajez8sCXzdgFpaTGgS9R/KqMfD6L1DniNj5H86UGMZq06HO84G6KRlvMFnMtOcgZDwEKFyb6qwnFfdN9ekq2oQMx5K5sDSh5PXcnocia7mdF5XUwbo2WsRIm61vktsEqC6xi8hjE9XK7QD7eHjN0RuZPt3EXo+Lhl9GyNtuknHjsbFv990FkzJhg1d3pFY7E4afYo+S74t0gsJPybunr2b1ipXHzu4wyVw3DPqHiXxHnO7fYOQ3nG+hNtF+7JcDM+trLV2Mq/X0JWOMiiWphsUvgRzKtJN36JVkyqFe24it2vibZ4FtK2MSeyCzw0/uvhaCMYp5cS01ryc+tY2G8IV3dhj4X3sqjh0GPOWcSkzhhVbyZyVfLi2VfC6xSSueJ3X8HS7yhx64eXl5eP/9XVV4zb4D1j0GBaBhYv42lPjt0OboComt3gC5dhq9eVfWtJ3yrVpJbESN16D8DoXmGPScBF7kt5Tw1z5ElZ+/Me94HWTZ9T3BLiFf/F4RaVjxCLF1cni/03qnPxNrg5Xr9zV2ewuq+qre7u21JY7QMR9EaNRXX7eww368isOKfx37WzpOIn1CeeRPLbOcsN7TFKSQykYzyLDTWKTg16lbICL+8UV1GXYRgOUabxnPIn6Zjz/sbq1AIg5Bj2ACo5pAxFtJCHIiAb0TmpfSuWIs2yIle3xHUclBO6gllKnNwAFZyugc70Y7Yfa1xojfOi9WOR5z0yHOwil12nMtSmXCaSfHTwyUtKHDjXb0oOKmAGEng25K1KlqdofJxjp2CI6hmik71OlRzP4ms7IBlnXGcldPGMTDsGidxWElfxurpMiYl2tRYjkNOO+P3U6JYRw03xllpFR1GHjUq1D5obVG7cjEfEiJBQsdlWx1mPceRkChgN5gvFhAbnVZLullLiE6XkJ4zDZF4akwrZvTFEKbV8QoR2naIzGnTVujW4svT3ZH2JxH5QfjW2F6OLSQR11RKK4LRSNanFpdqoxS8rYv5MuPgxIj8ZxsBKClmdb4SUWEwyepOsA+OBihQYxllzsDHCFm3u4rqPQP1aGX/N+QjMGRHh3GUGaRvSjBcbjIoNjPHlxIaQAsJz/jFyYgMeYyc24DFxYkNIQUEihDVo4K2CQkhBocWfdk9iEGbqI0CY2aVBp9+RKenEBkPxwIsNlPpaXmwwGiBoIDaUi3DeGSs2GA2Kbc4sMxiVGbgtHOW/kcYYBluSlV3QrRwnb1QFBblvDms7m2121HnK+OVNfw8bJ80HKtaV8Z5J8+3s5y41PdLuMqhlcgPbOAhV7Fr8fgGDTan7OfxiM1Mcwy/Xsqfwux6/D+P3IrcWukWb49gpZ0zbzW8nhDhx1FapzpDqxJRWQ3UH4onQSQv9JFqSPXe8crVEarltRKTxhGI5KtiuNpPQKJntiyWnSXQZS4qvHhJd6qsfE4/w1nes8lDkgvZi/fcQ6GCz79mwvd+4/0mPJl42ncm/1/+6XROlEf7BjrGBn477B4dUzYnW5GQ29K9euz1Zrt6fLaeGHYi0T4juoF0KKMVbR9b4J4jwfBbEi3f5SfN1W+9538FDh48cXzYjr0G+dut93/PAoyePfPR9MXNrr27OPGb1d6POigfkVac2JJnoivCIS/kgf++xbzEPWV0/2+1VqgGn+i/oXt6Zand9ApKQ0JVOI5cvk0I6E9mQAHbVMANwRdzW3Ogm0Q7WP4+hsPharVpqKszoXlO/WGspk2MQP88ixgYds1evVIz8dl23+JGvZs6pWs/42afxWnQKfm4Md3STpUHVFeyycTS5N7d7yOLFKzaiZzAmvIzS0+JVbzNEDX1/xupyqND1TEURlA2R0blUd2GlEVqcB1VejBuL3e547EaK3fbK2PUV2w5NHS815h020Bp4t3YytBF9oXUO9SLiBTqJgBtnlQ9EbmP8aNXCpHQOe+MsEnfzmE1cw0aCh+1KQiehgbIM/Wq2S5YpHjV6x8EVeMYXsCxgipdctn6c4NptA6GcjJIEHQ8TdB4SLU31gawB1ence3JRyvOqyT7PkCEdSyuhHOeI7pinZNTKPi8UI0dfuRBO6KlGfDCLe2N1Li3OqvstfV/s5aUKtKlK0H426GIAhyfyxYlRuLktppagLJpp0WxcURf3VRxP5rmgpVlGucWJgt+mroymjB5NSINtpcGq5+Vzn9t6cQJLv1xHOo8Zvtk+IB5+/SJ8lln+P9h7F2hJzqs8tF7dXd3Vz3POnDkz50iqbo/s0TyksRHSIAt7aqx5aDyyBAhicknQTViJV/ex0QxjLa9cW3NsCyOwkgySkgiukwzgxMrFCgILLO41eDDCSCDsAWQigi4ZggGROEQOBkQiW/f7vv1XdfXjSCNDHjcr0ppT1VV//c/9773//ay6TxVFONCifojfB1rVB8J81OTMQ1tw3N6vs7FuHwilPuDth0LTMvwhl9pOFdM0IhvzS2d8STPPMNdRNTPpheUJtrxO4oOazQIRfG6W6jhRAM4GzcQh3bDEuYeTQ24mZgYQJC7xoUUnDabx4SafSTlKgRU/y5GiExpVjZ8Qbya+hOkLc0a+MitJShV9e2Rp5gM3ZISWubFlsc7HXOLkwPzJgbVywwY3osBGJLDxS2AzU94NJTKA9Q1glcDZ+h1RgAt3jWzRQk1Pt5tMGFTkvHNkCnox0FF2fg6JmIXo6SrzWfYtxlaUH6v8TcoH5fL18THsosq3XmH55iss33iF5ZNXWL79Cst3X2H53issv/AKyy++wvJLr7D8lldYfvkVlt+6OfJozcMaK/npsUv1L9J4mRAnkdSGCoyduDRN2NRyZ1k7xbrj5m+4PRWUhcmscMUq3GoVLluFW6zCJatw0SpcsAp7m1UYlBkpMTEr0K5DatVSek844SEkVHvIIFC9IeyW4LyGxGxIPopkmunWIbSoOI/eRBF51oM32U3j81tEOdqSCS9ygU+FlDYjCYCA4qbV/mXUx89BOK1phAOL9aHQzXVe0eccj1my9stcEkC6bfOMnFZG1JvCFZrCjtOgOV2lVYToR6fPpZvHB83IuNxLZ2n8JcorP2TfqwrEn6M+h/XmfLJmnFPCqGCeqeR4wHggKBkcmIbrfgo4nWonXbnOo3ZrK+MaR+kywxwjjxuDHkfpEqMcI4n0dSq5wCDJcEdkyGSEeGaMZAS2orEgbLfMmLBhttpNKsciij5oL1Y3A8XYUtBrJtnFDOvawYTRiw+ucaZhqI1XMZlYxcSZM7mc681G6fQzmM/1NHKuJzF3wNDcQP1874XzWZb8s6CsfjTJmyma5AyYqx9pKhAa9Yrm9qJprRsHFNEcoOqCzhq/8avaGuA6wRSZ1kSkvS7GaIagByVgCFOnZLlsFhgutQiIpswLc1i4yy/DgrikDQp3Q8GCCwpgIRbN8oW9uuklBteZGZw8W09lZz4luzuc0YYar8vkPK7fGRZk5yicw7HESzZtpD1/BmvjI2b14o6YwbzeBcWCWiTBzfqo1Cg1N8lvQ2BN05cZ2xrqOIqyV/meca+4C4x5xV1kvCvuqmJdeRfLjIZ3DRnb8K4pvHqV31bAhv/XQYZPpEvcmTOktWz/jf2+XFLRo7769snT2Yt3Yrm6N67CrBViVe9YHo58/hE3MSM/MsM0TWnWX56zrX91nG19Do0yBjCLjozl+8mUfD/ajId7iWoNLb/yzyo5n/1rjs+WsT4561ygW9bwcUXuD+Yx1804ydUBdojMLlRHHJDvtWpqvpqM9QVrfFzV48q0vOeZeXLhysuvUeWrW6PKf9PTRzR9+oimhz8r8EbY6EJoRikaVYN8kIiIUMANZVBeQmc6D0jl+30/OF1SN/C44lckpDUF0VkzM+RyLGEk5/3h4Rnl5791axHOURA3nXmDDWapV/XIaXidJBep87pkymsdV5N/5TMrstbRL62jP2n64btF9AvKFdkiVkqUa943FgDXrWD40ivIBeIKhlzBaM4KKhGvVtAvVjAUvZOOb9Ic4b8g04AGFunE8N77//0zYU6sDv4UtL1n/Bmdc/al+1CKCuZhdjsiOrxDPNKf3Ff6FJjr094U6morngG6Dx0t+n2LlgCjONXdSeUOvoxpnEyhFHAk8x8xIAN1WJYSWp8Taqk+uXGVfNV695p+nfGCD7WKsME1CxtcsbDByFxRcbmHXfJqss204qgP7Uzo0tExKEZtKmCwfYGQQPZNg3wuPxyYiQd5XmVecT+T8k8X3pYP+kxzFpnNu+wxbjQsn/x6gFigxWzW0NI7DKtFDNgxNaNxMaNxPqMdxTCFrdGcGa1pRmuc0aZRnZYlKW6rKWWYtvhwnNbqSPZVEXSJESc1mJrUik1qXExqzCQfSuhcEv05ZoGKbMXOUG6MytSk2heIamLfMPiQvhi4n63Jn83yT1ezy48ec1Jjs45Mq282XjT5s9yuBd0FGjltOhoiCMzbfrGd2P+ymqrRIAHmvf6NnCozofKBsyjy2zBhMRnzqNAA1gy71LL2jCDU0zfdnSib3f2abOPLIPmrEk762X2YiHr3Moto7We/672ZKe3pMoL5dzpvbbZ0eq9hvgEo7PlxDJ3q/araGdKgrUr5tqfMkhwdWYL9XKCamAMgtISJTthlhtDw7DNlfwRUQG9IG87aiYE3oiXn6nCYmFMDz4WBHQgrNJ+TiQgDRkVm7moWquzTDWSCYjZwA/Tv/2vi/5tN/NFi4o9i4v+vFrLPG7WMKAC/QQdJMw3kucHFSsGMyzZgvS9/MhRep8Y8O/1dby4j/LOzCJ89kTsPAuo444Y9g0j7Dc0dBY9yYJOmiGnM8CD1+WNegw+/kgZpQUaVwAYJFaMvucPRnoHM/o6PeFrm8GAbAXYOphFoK5ON2Tv458bVflO9vgFEWaad1mvUK21NxPBHIx1KBsE7gMGIf2XT15VMghHD1531LqncaydVUBUqD3eah1gtsc2g+E+wCf6qiGv8DuC7eIoURAUpKA7aEN8B/PDvqAygbhFTUDNSUNcJvU5SgKhAJAVtHlWH/Y6TqHhmssoaIpoPYp5ACNDuOriQ2V5vzFmwarYICjqn8L7Zsg3sSP9QudA5b7aUgvMcl7Hlcd4e0Nb1bEdUjb1pWBQfzPkBBxg0OOHxj04f2GI+t5i/CliS6SEoWUMxfkyNGJCS5aZcdZPe6FyNOmOXBtOZH1Bd4zKPBTklsy8YmSo0lgJiJ344cD/bkz9b5Z+RXAHydnxSMt/oZFq70QmnxHQAVG9RDEC5m1WIeejqhTVe0kl5j2MrtBGdx8t/TZh28EmQ5n4WfAp+ehcDpr3//mB68n8iMHXw6aDovwKYFvtA0PoXB9Pkz6rwKrNpAIo3o0bp/mUeGd7ocpwWqucwW560hNCXvg7UN4v40jMNVd3ET3C/s2RE8QvezLe+i/LFr3RGsGddiKZlhwUXGRp7ylRV9a2smyPxUp+H/lC+XxVaWTNQZB1grNiXayrKESFSGZI7pM38TcTYZUVZ58STNkzTH+ZKZIbbTNYHOgde3Yssc7FrmMZNQ7MtRTfNWNO8T3l0DmXpCQ84swrEv2Or1hnQOtO3zR1adTyu8ZgqFCzhMFGZHFOVI6hoBC44a5Xx2FCWTzYfU6UY076XH1NuT0VbV6QWubnlFTZWgCtyDFFhHzoNFdgpFaWokoQhlUkwKko3K0/ZhRQnGmMqU4iKQZUHY09MJy61mw0YYyZOxvxqW0ZF3ufyWMnHmSelP7sRMRhYPL/ZUtDo6KOPy9+pMsZ5jGaexDNPmuPWIs5hfmqVYYKsl3YkzttdQxpJw7BR+//NxiNd+Z9379no/tf2u+jtxzPE/ww78CHm8yLD0z1oRzU6lUtp4NFT2Gy4/SLodezyDfG01h2Y885xhfodZc2RTqSOFtNtPa/n6nI9tYurp+bqYadQQkLSKPnfckclc9c+Kn6Svua0NjcPdOefIjd+gQHeyuI3Nfuddco3VfR4biMsj8XkmyDghXHyBdqi7LAjfHdolkRMuWVSTEp8zPre2+EE+M3szG952R9/DUbyzcrFRQkyqmGIzu8PoB8M78QX+5y9PmMvBLk8klDv5bbWdIw/1tL19tTLlbaBHM0F5XKQ585w9xv+sZbcdAmFXEzxt3IXT015hJqUIwpg0FfbZFiVbssSD/uWAO5yczKmF90fm4k71m1laKd++p+kw+63qTNXwDiuykvKTGNXBBKS8mbftSGt6OJrQ6brql0b8nn12tCJSLvfRuvxfZySLc4GwHOmVbysJ89+xg9fczq+03837cMrmiyDl1el/h7ILhBKlfzbKYI392hIgzbqLKsy08t4cKAJJ2UUKomwAOHBF3GzweP9w1dfE7zbggqkuDzgU8f+eOh2J/0s7OX9DMcRgg+WoZcePRvRryiYiLQKI0cw4hUeWbK6DiL0UAKPSeVTikuTfaxkLUO3EhBV6PuEc3fWZR8rWY/seIWuRcwhvyjJIjt+NS48KWyc+4lfef21kKlU0Bq3hN5eb5cbKGFld7Mv7e5X0aGN990V414gMEqjk9kGDJPfdcIuR4hlVARc88/85y/9Yfhdc8r41KZHOlpGpru0L0aTBQ9zX5I+mA1enH09dW+RiVnjli+56pd2H0Z4EK8iWe2XdoNY4C/d3CEmeeaC6RJ45HAmBuwfd4ZlaU7rgzYebc9+iSZAJrkj6HYVi2WwyK4uEoLb1GO0eefCuCTZn+x2SeNM0psJDdJUrNZfzGTCAUPYxVEioRBluMrV9fWHuW2mhu8CMWhkkM80YRBB72R4SF7nfV5qg+zZKI/Zm32et5Hhhj6At8+TDZByfxHPzlBptoNnI953t+Pwe1pYjqexPThsvijA1M9bYb+6THKC7x6GamEJ30EceXy7WSujj+x7rXvrdvtBNdE/2Q3h9+X95hhCnWejRVmOsvQw2q6PssqNJ4WK40HTZqypUDrl95yv2kGv+5qQYWLYBLQauLyNy1xzBo+RrO8kX+wyfvFMBZK4prUrwtsPet+qD2MZCROLg27i/Z7RR/n+Xem+d7+7v4/Ml7GCUXa55LPWsV10v4yIogLXreCAheRhqVfQxeZsJw1oVOKlqug3XSWEAjadNlWoNDZ+b/otOvZ4b4H9z2qrRZMNvpkdbRqjUukhuzTaHRrrGZFKoIPkgGM6J+0A8BpENWkj1YToZNmO2jj06tanciSLJAGOLMEorLBFOZbt5zKheVljhU8SWmxnSi5he3ffKKubXUY9a6wzu8K+kb31CRwC/VTFGk5BlP0H7wg0h01qsBaROdE7ApGIlbf86mxoINNiRPfHdmr3J5xWUANAEn5Xo/Z1URP/R1ET/4VN/Re5P5H7RfePyIvAm1vBKNBLOBPBehleXU1ar/sw1j48iLA+2Z1wC8ZNRG6uXOALeYGQkS1YgCkq+hTmwxw3MhUwDI2wxAp9oemJsqtOIAjMIF7tX6LlSRXffHXQgRr0sBRRneyPPAJDB3J8oKWMzlyIwX58tV+nnqAL+6t93bc0g/8eW0rxQj462K0ts1mjrj3wUi1YFGwC01kXOHieo1EHMXRG7X61Xg/q/M+vB5Hv+/WKfoV6HtXrVeoFueQYFXRiMaf4VPZFDxG2Yk58j3j/oNffjX+7cE8F6wLu9+IfwiJJ2LYF/7bi95X4dxX+vdaYqhVjqtJLsoDb5hLlVsheeMqidV2KYT7n7re/gsmPOfnxePIBKnUHvLtHDCrkAWBOZ6Q7ew+vUkr4kggkzhFInExshG8nav6MJ0QGggW3h/Biuyhi9/vbh/3LRemgob58j8eA8unJw84OCt89AaAMRDsJUDXg0rz+uFR/7OqPJ+uPrF4E+IqHpbr5pCYPDsbw8h3MfBM9ZsowY3grBvGq/8SbPG/j9P2fABOAhLnhiX6EXtSzrXcMLMVAC71o4U58xEMHt32gv9uSD2QbL3pDuaLaU3zua6tKD7wdQI8X+PG3Mbhf9YbdfhpfEcbGPUEw+t2oBw8IU9/7IoqNGJ1sJd11bZjigk/3fQDduOyOhw6+8QN3pbvvujbciUGKgV+5ItyJr3FJ+7toa5O0Iz+Afi252AXKdmLqX9F+d0gWr7FTsu12+288m+rfcY8SN7oLL76I/YIXVxxuRUY+gKZBLy66f99+ApsXoEc2IxR7cvGwQV4ttBYjA+Urj7Si8teHBQ8TX4dJZbJ+bCCl1iiXqtgztSJ9p93iac8NEO3uOei/p7/nYrtLMnfYNnEnn75zL76xvyvnkjgAgCKwScNWgMMZLAjg8ZxTX3nzCYxvAe96rUCd2d3fwwYSxBMbMR9M9nXHVjkx6e6Dtb8iWRSSdyB1dIuldh9ce6uY5H1IRdvdQVIyTK9Kdx308v58+Y1dmurCSjm6ItzHP/v5Jx1cxcvOwS6+5m2Xf1bSvemV3VfxNu5fyQuQJRuS19UWQcx5b7KJjRetiQMjlr+Ff946ruZo/0oMawtvD/T3ssf+u7HhOGVTiza9YKXFyq4khrsz7Rx6Cf5IhBD9QGydGzz3X1r/+D/vvpqN39bfy8vbbNY0k7v7u5gfC7MJHcwu9Guw62D8jU7xSiSKoR4WS3wT3mzk/53+xpZPGmINHiROJHnZDF+lLR0Jsufmdut269a72K096e60t3ow+EC6690H0/cMdgMfXTp66JshBHr4GU8WZ5z/sz5MdLTWZ3ytKs6Y+Pugf/D0wRf13yexh7UkG1bgjAo8MFvginDDtw7cLeXLpdm/9UHqd/8VIU7PLEjRInKnYEHHQPXiJ09jdfloDALfKsx+xoqqWyHuwLu9BXyOOhjiebyKD3dzm+1Wn0KDsjMhugHe7lQanxywZa3CnZiQSz/6noMpVuYjtBhldZA6bk93pdsf+iamR/kiO8mRhm5SMJSwv0dDC0nPzYjnAuJOYBbiUfdrOe/Z+aAofj7oX8XlCTRVFwL+fVZ/nw4Ge7rHefd80H8tr88FCRY6ys6hcIv9PXHITYzXxWod4c4+egKK7JNdDAunLO4Udeacanw80LKcsbYe1jOE79iVvpabJTtr5UF5MHHwC7b50kLaF2f1xYP6e0Z/Hwj05XO20Bt6drfVeK167A92aQT+YI9181AZnDQ3+HYXge8j3TdrChxIPCuSWIa88wXknbP2zguwnvbHkGFw97C9PqfXj0+/xshdE4/6CYlhupcCnZV0N8U7+Dp0lDI2SonNRfPPzfZXDLxeF6tX54n40+AGGzs87R3InreP+gNHVTo5VemUqEpUoioT5KygKlEJQZVLOATVIQ83pigdYbtOTlEM1C+aWHcKigIr4IZCH1RZGcz4gztneOQrD9NOhPwkYm7JBEanCeVl2kKss0uYdgs5nfohO7wQzwGGW9kLHcopt6a7PsIGwGxuRYNnoDhtWVKidAEj7ujwhxMcz2+QLCcWyQGuxEySxlI4SegEtEB3CkeVbBQgXg0IEw9nPoJO4PLM3/f7W5NXMhV0XiiN0p0UdwNat6xiUnG2VCRdYupfkHyRmHrPBKYOCTkcO4p5kuBuBkYUeAjaGQ6FM7Y73QNKlXAQZ6rmrtIYY/CeMHiDQLqLF89CgOw6WP9mVL0r3Q1Ckm7PLj1OpjLdfscqJ4RkuocN1CCZjoAjGiTMDRLmBgkz/qT8sxPbBJcVq7rL3gAm7ngo3f1NE8SgoUByViPJMgrfxj9vm8b0DVLnBqkz/rx15i3JtJqi0VpBBb55qi2SG2uLdKUhutIQXZnY3w2SOr7Y0Ou7p1+D2lljt7OxBaU2jAmLE+CneNI6vTTW+4lB20JWN6kbPcVyP2M4mO3+SH8Bc781qzNUzkK6lTG3FrLeMV3qh1X3uaL3xE5aVC3AWRvLOXX2cf19WH8f9a23D/rW3bM02iv1NShmIyjX95ybm0Bzo78b+nt3oMm5QBFxukDJen6EtPWz755T28/r7wX9fdbvvpXXp10/zqsf29GT92BbrjKap6DM4BQI1MHahaKDpHaxOkfC1RCVa4jKsTr9fdo6R4q1wJ49WOrZWfvonAo+rr8P6++jgZuhwM1QYDaPbiEH8nRoOaXVIeI1HLUDrnf9O5XVLLMjrHze6xl86+p45x1ddXbOKiAZiizgKMAtT9ug9Xad3jvOPFfNDtZ44AUEbQPy2sZS29LWOwaXDQcdQjE5zOxFJIQDZjmEP8nhE4MO+Gv2aQTQ6RCTbUnxTXrZ+mgdpMVZ9kaCvM4hO5+eStfgGza2SkmYwhAir2F/YTwB8ppHuJmFbMfR/jY7FKTbBJM7GKR6jaj1/B/+eQTsjaDTCzqQonNmCE6b5QiQX3+o2Bjo92CLbY+vhZXOJR9492D3QZn33CqhOKiNJmqD7OoX7v+Rd4OBAgoDik/69Ijb/RFaTsN+Rf+DJ4cnTrrl8CpuE0a2Y/2dIxBiKc8fmGK81bC3ZpeMQB94zCXKlYTTigPcDudbl7OUfaWj+XU0hNsYmBfzlXDFTrL1jqZLc1WeKJnWkI4GxnTaOjEvqMpErkXNKbJHZpCGoZa9OBx1NKH9NX0YK85F4ma7jnaLfmpXFO3JzFywkp1z8LRNZ7R025tbuUE3/H+keFhTYIZClBRKxl/UfTgad3gg6GgozNk9VRLxDeWmLLdreAJG4buLY9Tv/eDH/57DnhcqhggqQgT6u1EVAqmC1+O+rdh2u1CRPCPvJ624svOVfNOfs/q1xVXJ0xXbrY/jcw5Ee7oCRmwruGhsD/FLGbNXGo8NHHN0sEAm+zmG9aXIjMS0A+dWwALgCQPnnhbIpZ07+muQkXZOweK1v42TBaYsLnblZanlOmQ0y5RzneILdHxqTybck3XsyaS0JxPuyW1peiJdIymo5zNdd5sykaImbZm6CLN/2VAEAlJXimMB3VvkS3fSARjn6UxlmP1OcSAA4rNJP6OZeqCS7gLjTwxXweGA+K7S55pt4KsveuOvzlZ42tEcb+jLuyvd67m2UfH8bGWgmX6wgsPEtVxevLsyVa3PRVriyC1r5JY1wjlZno2RjbMl2A0mCKTQX/biEz/5R/5NPKwdkjVhxeYRxQMO8jkcinofdzzL+Tf+sPp8ISRc7FH7odoPXfs8N7H9sL+bXFgr2/glVH9E2/t8VKrqWVfVuaio6ryG8rQbyuORVXUusqp6H++/jjvGddBhDHz9OlfjBVfjxrjGM6rxAVfj3a7GDVcjVqz0ed6hs+PPH9bnj7rPH3Sfn43I0cWIw3ZM2OC8TUbpZPtGLiDGo6l5OrQzk8qem1PWRusm7lwodpHnF60+CrOAjs/skap8lKfgqwgJPBE7uonTL5Z3ACcnIEsyZrUTbxEDvcsxavjPe/+1OC7jGQ5LCIrS0JF374wchjOnhh4I8+ePArF8a1/zcXeY8vyKM3l91dre4CkdP/a6sWG0wLkD7O+tw8FWaCGGPGAvcG8e4ZdHTzLRsnfkhPSDpYNkQ0dojnsrzpENHZrVwnOyk3HCEqIeO/PtomZfZ74ugeHTnjv0rdihr4tDX7i54iBn1K1eNDApvsyZfH/iMxbzuEZLbD3GRa2vyIBACo6DXlmx9p5vbFWoa+tk3ZOwYDis5MXpEAL69wbU8C/RVxyITNYNVfuZ2eVKXq7xJeLlN7k+9LehL4onP29KnQSkhsN+P1dWNhUcG+GzqS9qZnu5C5twuDWt5W9DOdZLE07Qkv0cwOn9LZzn0u87dWqgdk600KmeVBUOOzjaqT4xYHv7kfUwIYOT6IVnaroWPk0Uy0eaPWKbREyZ5LSKLsoBDul2T+rZUjN2VKPai176etl3aj+5PWYxOD/oyBoFA6ilId9juvp+ywT9PQWjjOVbMz6e6az71Wq8nDa4rHAhH0eFS+tlFC65WgsszITCRaKf7pET4g5fibQcncvl5VKGXfxnP/5rliO8eyMyxL2kTJQwCPsJN+U8SFPXSEmLq4MKrpesYTzxkb4/YuOk9QW1vM5kPaKml5YP2Q987Pef9G+8WDl6XtEJne0e4gatU1kdgJ9t3AkkUn+ov+cVajxUIcVaZJF/EN1hl7bdyiAchDk2cBOEA1GiNgZsA5KD09/9VnI0BpT0iMIsnBBX4WYKLG58o2nVyKiswwwz+8Xf/eL+G1/5wqkqDbmuIQPB3kQ+5iGxl6Aedw72pMlDB1/03z/Yi559C+ZjT7qX/Hz81bR2E77vkVxgxAiokfYgurjFJUyIs63rWeUOhq/+cfDCexSyZ/xtPR80WN60cYq6C53mv5pR1/NRJ27UlF0dPJ02Hhrsuhsj3n2r2fFr4GRgP3DXVzniOqcTRO2tZl8wHs9N5u960Qqt8S4pEbyDp4WtWpuSKDTd+uhg13enu97DgfZM/7fbFAXThOYbWjVJ9J6TGKtLJNxNd70hoBhSyv5dpuxX1OAlUsfdvMTUNZmaWhlpIlkbOEloalrS3Y6FeOP7odmiQHLf3XhCoPrIoJ2990Uoob4sHnLPwW13f6RPo7Rdt9hXnfebNC2+NbXrN6weyk2yhAl3uefffddB7xuFE3xwnzwPS+oVSS37ZvIaUPa+9zTsvKCfXYUThiSmbCndcxeAMN3LLrEGdYLQFSDCOlS1Kgh7rK9syLfNPaD+ll1P994yaMFsIm3z6PKcmDoqWiXP3lNIne5KUWgPpFZpMqIuV6+T7i5pdXFWzsdNnS48tztHeNflnxUO7MRDdw323GK8GKZkl5uSXXOnZI97PjslFONvbETfNTUx3H0pQaOLSU9t8BvvOkE99imYhejQEpI47rU1jabX9M7Sml5JNcl7n+eadmxNI2iTDl5/911gUeNsA28e6l8pOWXOV2pE73WsYvxX9RFExFJCjrVesS0OtiSEonvQHU2wq6L2LTRlgc7iofTKd08u7JXjhc17ktcZ3QU7jBc7ZMpeRDa07Cvf42OLbT/osZscRHrlLYP2KvEk0blWd7upMqeXt+2Wt87ljfS63pXeI2azVGMCkjkLu7jMYmVzjaet8HgwmBAs9+SMmNBcyzs5I7s4I7vwrjRXMbb8eH7Hc2Oqo2Kpx1Jq1HDwahgK7IWhgGfWPbuoEOlKIUJwv0yHXjMGGjRWBayXmLtxF5Kdtjv4wnQU4hm4Yi7RlPNBJofiCbxOQ84x/ayX8F3d4bt6GYXWwbDt9fpCNYyNtIovl7I1uvYvZQ8GFDd8+A/AJa4OWpLSOtPjJcoiF7kbEjAbYhUWiYd752DPJbvIRakU0zr/MfAWqAAeHYFUITv3+87P7JA8WDGMcDsKLWYvfjI8IaUDZQ+97FM+YeF1iKEvgUJ24bwZ4YgXXsyeh21HeMdgEZwjuNjt70RQrpNZjfxNj77WeFYV+YIqIOAxRjWzNZ+tmXaDNblXxPbbeHNaZLJlJe7EFGV3kkGuZ6cPi/1Z5DGBVpxVJ8xagmtBLtsAb5u2LWppfMS0O4mM3KqUoTBKrK9Ig6e6f3NQbzGEo3sNptwmvA5VDGOkHmIQ+kNi2bnokptGtupVW+ivYpmNf0Nri1wyDGDIRfdy5j7KuzzZXfWVToY0f+1XEbVGvemWbSerpS5UXReq5S5UrQuyasC2rubNkv+qqFfdAfsVJp7iL11sxVatCZzpTcMuRs7SrT5BsOsUUdeN06WBW91RZGicbwGINMiIfcNJJrblJuuaz3tgdnkyoJG5r9Y8s3Pw4iEHEeIgF4eKJ0ZD+eqmRpurMndEhPIkLVvPNgELcaJPiQQc1Gi2gSRg/uguCCUNydvqKr+XLGwRjg3V7oAfnebDJcr1ecKlCocmxMaLrFqSlQo9VZ7FpGbP1tZTBaD/POyDsJN+xTu8yofM+MhC9/t0dpEVPLJI6PqYuz7prk+56zOBGbmfC+36oDN6f8C3948EMm4+o2RkXvZRC/zKoF+Y4ccjizpwG6PR0eC9mm1ReAG61tCOeqsF4EB9b7MiO+yy075bt1977LLPHp6yX1fbZb89fLf9ut4qu8u3nwfs5d3u5w12OW6Xo/byjHt5q11usacPuKffZhWe5c8VWmDr8lZn+O/m5uHIrmcVS/FxroBFt69adHvV2FQMHJy+bAHGk/SYXLWLcgBNoiq4hDG7Cedq1eZqzULiPO6raqvseW+6tkdYlC8omIBrRLqDehjLvaCABnsYaE6+MQgzIJ4nVI6KSraLTggWwcy5v4VKMeUybmqRZwZQIUg0LfBdnF3CrWT1RVzcJfsqd6W2Cgl7FcYVpOfDZeb5kJrnQ988Hy6R54NF4bOgYcXEDrKlvP192RI8cVYNaMCGMaUYr29ZJTiFyhdWQeRlTNmRYpiKUsFAkUvj3vnj3n2YvZvQzlfw+aideH4l1H9BqGQUZ5SsDl88ppReysCq0TmvojB7QgvlyuYlGZ8LnfKpNsKjR9DDvl9qC01FIXLsyOoYEaz62tQPhq44ouPgeUWFsb0R9SlqBxWKPlCSWN8GWcR7/E9eMUpglqrL+ROa4xuxRcCIJViSiC9vpX+AeVzE7CIFR4GJCJDWKDRrql/z7MUvevbmU7xmQVFl3nxKn0bteYv1WYWsdtwZP+8MZUcuDOYjjB6YMQiSnk2OMgwl4ano7cUNsyKPTaDZikXvMrzFPbsBL63niMDep8xA0Mzi3r+WeloTtuLZ04bgaBpTCGCff+O11CyHLqMQdc1ykP+Eb942jzrk+IJDjl/i718SHIxn5yUgsBnMARfbLloHV0H2NcWX5jKaQ+/9eCmnGcsLskOh0RCHy5dbSo7FDYNYOtzPC1GRJi3mTv4h0xJanBGCJLOd/I6AQaEY4qx6I6ViGZia7M++xvIFK8zCAAuCJyfh76hzeVWuhPhDG+A8sFTuOBTR0jt8swRFFECzvCSkFnFZqn4X5qoUzHGQu9w0cULQ2iY6KDbVJXMFZR6WJ2BzXvGxWb1QSdlqoIDccf5VHkOaMIx/Ft9xksjiRLZLb3Z6DbxZ4ZuNr+ApgpWpkH7R2+2Ok+TtYmT/Mz5hRLkWZLhYgqxm/azSo0ETqzaf0MjZJtvwrQ1V4RdV+FZFwCoYjBlVBIzEY2m1JepV3LS66auX6G/IzHqcle+CX0XEiBMUFDSVpS+irrY9tK+YbY63J7N7AxM7A16aGnRav7lFH+AA/UFIh+DmwpUJISzSqqTVrDurux/qxCJwgAU4rbgolYuEoSY3gFELYNwAAE+BbKVm+/QR8pqAsu9IYwswETO/Ese/4xqFIyK8+UrhJKgH5aAk0mcGHZLFJ0OLVvFRH1KO2jCLkeJpI7BnD/tg4N2zuwKXxUufRjRB9G8WulQay6mKwPzOq2v8+C5VpdyMWbiuqhiPbqqacH1uNePHqsaUmeqN4i3TQXGimmB+b4Kp3lTUm0rRm8pUNZX5valM9gY7l9VUi2qqU9VU51dTnaqmpmpqRTW16bWaX01tshqL1eZmJ9bsxNOTjGk4OWeSi8fWn7r6Uy/6U5+qpj6/P/WpYTVUTaOopjFVTWN+NY2pahJVkxTVJFPVJPOrSaaqaaqaZlFNc6qa5vxqmlPVtFRNq6imNVVNa341ralq2qqmXVTTnqqmPb+a9lQ1HQs6/lFfCKxTVNdx1bXxbG5FnamKuoKXbvFZNB9SohKk6CRpx2Djv5TKilF1aycsJil4oiaZD8YfvFFpXiC26mYx+9iFUIJWC18xN5WWy+ShkDFnGnb9RN2uz8Z2vd9dz9Xs+oWqXR9w18cqdn0usuuH3PXx0K5fCux61l2f9O36LrvQp/hcY6gsCcr40TK/fvSYWqy/aNWwjCADEln01nysO+RzPHTZMhk3zSVe41FhdvaqNnvVydnr/o84e103kL/c2YMU7OWnz7GIj8Fffl2TAwZa+jieffSwpTB1oFIwlQosP2VAYQZCwq9/J6e+xSPEqTyO3XcqtEPF4jEhmOfR/quRmqeSvtp8sMm50gacPYmcAGZQPeIShocHr7lWrvDgMrtv8sbca7Ap90qPSepO5N5YsW4DTRt3/5huIxcGA56qzCTU5SVO2+vrYF0Y7itSjshmqhfg8vBinNlxD1gYdraZR8pwUTpFUO9WrudMW/jzPBXeExhz8Yya/0R4UtAYOj76Ub+4xYZXxA6x2Lj7Njv7+MQexS1OQsfs7rbi2SPj1zvS/Ot3FXeAh5xrh2WJ4n2CCpwpBCbo7UYycZgOaILKSNBPEVwYS5lx/rvbFUwW0IXsh9d5LlbuScbGquY/g8mf4eTPaPJnZfJndfJnbfwTUZct/YHMswJa9UBzA4MVCBdcBzdqSkagQAn41dDRBd1HcEtE2xfL97Z8HWwuPhHOrMAjdmsHPpTgGadqzm6Kxxkgb6Mflv/zbK/cHfBk6rsj4d2WVD47f/3Qjh3JX9ryDkSxngznLvJh7vGYB77bGfEF4SpsHJ9XILapE2HTenV+3ju9ecofCyuyq2Z2mZPLcORH8hoeCEo1+aVWHghUBBD1fP7oC37+6AV3BsSta/pL/ljSA2BEusJJ+RJKPuNieiJ2ana54n1mr1bYuOw1FnRb4Vysg5W3jEdy8ONFKLpgHHkdL58j4/DeoFz0pzfy4KYz8pnnwDO4tWYcTUAVTWtDgxq69gI6tfpC24xReOE6+/kFdvzh1w/7rzGrnLfYiWhkdL8JqxJ8K/qEkT/v6DujDp9AJBOUR8EbgXZ9RsTv8YyhCBd1ISIRvA5PZQiRROma/QF30lNEvDQoP10uSMGyoppyk+VkW2HFaxYQEWRlfUwiauP3kUvvXl2fIcAITHzcbAGAituMf3F8VZ0kiL5GDv9K4IlHN83KxPbPQhs0LemQuVQZtuC4JD+YGFpqV/UsulGcgQJXw7PdDbFl72D1M1GglwUFA4B5Xabv1Xq/4UQ0keIsV2Re6luAPl0iu8R2adqla5clu6zkiWWIsYiX0sa6eNWAB+Jlmxv05YS8RV6+iQrlFKwG3QNu6WjC3Yf2WZ5+FkN2MgrQo44LYoiioN85UEL2zvZ0cPbf7hYM0R/T9jGzzTrs1tOXNHxw0Z8fH+ezyD+2xNUyoGY1hkwxDYcVyx3RSGwMqAt8k9nXV8sVawHbDBtUddOj+Ih4g6DWogKqkkqYvJvRy3QxyfdrdYqFID/IfikGbmpZfHC3w8IK4W4n+BPYwFXg45yUJF6lpLe8Dxzqd4gq7jXgSWDPGGfsmMAPiZDcjkVccYS8IKbIXQ8IyC0D7qoLfIZokzibtChyajDw8gLevGBAu8RunzA3Ncqzbuxv1WRXBfzHZL77or/OREKNt/e74QFnyVFJtx7SOrctnT2peZdEdvK3P/U7mPodCjaxGksOqOfW6aDTJQ7quYx9KaN3poEFhBPmqhvacQsEFLHMp8upCxqXKBQmLh0LnkRW8A1Gf571C5EkML1mDbcbAUUo0dBYvmcimNhIoEVelfjMgoA6CbCfL1nUC7x8Tw0qVuVRZ+yjaq4JblcfX9Anz/snJacs0ak9s2Qqs8RxFqHawjr52U6jWFc4jUJBRE2cbNQ2kOQyD+icM2p+uQWAr4KyuXdpeSB9G6YJZldcvPhNiypaXnVoCZYrRFfQhWhJFJFtzSb7Bd+EI9l+WQwY1cQR5S06VL03gEQx+7o+vUv7hXC8YrtMqVdypF4p6G4uhM/CiX0TWPjXJQtkpkC7mruucVLGOvB05udzw6RFbuUhIGoOJ9cUc979+tIynnLcy1OOF9SEKv0P4oOvl9RMCD2Y+mKJwQwrRZBFimNyg10WVL/Y9Rugruj0zsCdlIjtKD3ezcUOsj1KCyJc2rUXe7MrbTg4JTRLkzGxNi6I7VVWyb5SJQR7xBvOXleuJLA8oBxbNCjBTTwJN91083dLL/FuZdN3g8BFJFyxkHlL4IsUrlJpYrON09p7lux0QBjI/vBXIBGEYdYw677TKGCTj3/4g7Wpx6IW//Le96zbz4A/f/+zd1qpEhE06ueOCeIpi76u2Spibp4m//U1EvmWtGt2DoDAGEoshM8InVSGjHfo9Fl2OAiaxTu68jiOH79gTeTnMB9QWpcDe1Dwy+XWPsFS47MFE520u54fhdH4PxoRiC2+O5juJg2Nldn2agcQj7A+YCtL20VdANhJpQrV0UNCffKOJv94lyX2CHQC9pUJ15TF+0qKa8ubXnW5oHXdCO36lLs+GNn1hUjso3ZHTN1ApQjqWHVYN2/HWlGKMT/HtCZ2qHI8X6vx2I6WuMEnpK2I0o4BbaVIXStmO5L+KfvgD/jrpsjfgM2Jn336o0H+u8vfP3bdGGQUZREnTFGCavEpebW74pN8lH+tR109Kldgcpoc2CqFXIJq8mmBhLKEBeMj4XhFJ9bUD6Qnyq5xa/r0S+3g+CV2aTP9anb+QERWe1Y7uGk7OP7vtoMFENfSz4K68Oyxfkq2/QQzGDwGe7Hxj6C4t8MDP8Dd1/EuesmV4WamNsUw+KO+SYSf9RUAPo/gOrE41xUA2n299fD1RYPXX0yDm9T79eV6VdsbXG1+9kbehS9Zb1CInybAKhq1A4cpznn/C6xy8aaDkuAlp9TQ+aMUrBhHQCx7jUl39ruIZJt/LtQ9Zg4mRIGPAJV9x6EJNuPsBGNHC7Kn6N+mFakjzpKs7WDkYM4qRt/7ltntE2FJULNtXkeMQB2Xz6lxxD49TCRJyvxjEIGPMwf8Q8wY4l9k9+Daw/XqoY7pn/cYnM9oScWyJMQm+XgsxBHFZIs44hpCrorH2zGQmhZaI7U0aLzdsjtBb77OQ4kMPVliHw0ufl5pgBWqKG3TCvIxPWCwfIjWtpuXTUJ9avsITNlo/ViTsM7M21HNzkyRuEGrhgqirV2hX5/O562rypW7ECmrosMnTkgugiK/KNa/TnIbmz7Q2mhs3sbj5U/ypp5wTeEbyD3S5O046SXrslFhj9+OvOo1/VTpX3JpaZAZtGmCT+QXQIZRbwxcEQVbUwZMSQFFrWLb2VoMImNFKaweMA5j9J0jJ7gvM9iINpiQ32/KxHBKCyB4OZqfmF/w+zuLQ05TvNTUIecc9jUFh5S+/bLnzjSflwWIb20TB3QnOOW+43IBMzsZ2JzyB0YB59O7gM/Vf2WpQP8Djrvba3u2NmNUk1btHcdkPHSxoZ6aERmeJ5PyZN4/sWxKbLRn6LB+YBY6EmMUuCyYtmy7RYZtG/K4C1zOw9OGbDaZRXdUCkrb1N8M3XwhmBJ9npsZx5NuupGJGPYkgh8Lx6ucg25sMLuYMo97OBgjAj8fp8ToGAoF/nO63sztxoA9H2P0SjPjQXwWcG/ZIxLMwum/amlXD4m3VALeiTlzGXgDs6CrZufeoPTCtDB89A0wpb9W5oUP263Z6uCj33nDFZ53rdfDqz98w07Pu8bbplfZJZT0f8nX/CsIOWu3kOEmyzb7wKleBK4XFhqbOoI3ul5AzJr3Isiey3vhW8Le7Mwbsx+WDkEPPqaqf7uIaJ43nq8XSO4znBJxr+pOcBFdufCGoitPj7tyvtwVfFRMSDCeEH9qQub16XFGFX3FfTp/zis69fg5r+jVOXc/nqEL57yLmqJiTz3rbwbSFJF8xrOEXZ8dg/Y+u+zH0wMjpQ9Lcsu0riGS834/KrUwZY9KfW7p8E7jqvPuEM9kxErUl1ZP2v7MEUMAXGE2TdUS3Ytcyr68Jd/yU+myViBd/ztdxiA9Tyee+7Ljsb2+mndzSchtjEOcILeEiQNlauUx7tc1QdY9kw6MsVWjLDsgtkIWXkXl5oefsw95HmJWthvsNh5eozQFVerQaLqs2+qQNs26rQypStEt4/fus9twaEl8yVYNLbNv1XK17XBSiG7esYE/R3J1tCyB0Snv/OSigTQ9SoXIb+QY+8mw7/inp4jypeHXcfd4gVgDE535RfolMnCRLSA/p89BiVzySH9qGhb3M/mcO1IrhDHnJMphIjI5ol8CibxCcjxlfuftoMUQCdWn2gC3JB6pRvne/iEze1pwEyFHZDVApgnFNlDT88nKICrIMzg4oO7AkY9HfHMMcyoSHMmrU72tGsma6PVA1tZr62Z1XfQfvS8zDS9J48qmyPxgpTBFfizKTZFlhCc5XtNtgFC+jV23g4P84PKAsx8NTDqnfU4/BO2ZvtsWllnBnWnOh32nEGwqkH9A27eA2S+rq+umF8Q8GTuzyhaVnfBtcvVgCMfss4CZVrSd4/hlM5i2rri2PeuWsb45kZkwUZ+xrvbbYdVzmIpfogvvOWGa3IqYSWUX0zya4scS3R3VKw0p5caK5d5ux4+zQGQP2qHlw2BlfFm55w0/Uhi3443Z5nM+PhQUzGKsjn8ocPzOhxz4kuGiEcObo2LyxZFV7TRYKQ6mZQXohySmd7SWaNW2GhFPxQ3gQ9B7UEQWTQDHIxN26nmnJSV3/S26K0XjZ8Dk+IYpVhNnya4eO0Z30F2n5OsUdYMyHZaeJTGpKSO0wYHntYpDUwNFok9XZdS/Qhjf9fEmZWcVJo3EFcE+wkYAPtV24ecjZ1VaRWfKRvzVlzLi5xxZZ/uWsSetlJSd2X+ZsBbPVUnuu1xx7g/MC8ylwywtRnV8zlTyhxwSGODfdGyG5IpFCa1u884ZkiX8UOAGiun0LcLCFdQkVfONiBE3MeJRRk9K26Vi6nNY0Th+3pt7+C2BZWRg+Wu5wbeLSPFZehlQ3iou89fG5uBucpubTS7PcSDEjNQU0YdqlYpeKRu1AcnnLBWsoH2EvONmWlwCxQdzPGUm61WiGN9cAi7eZL1s7160t3O8MB8uEnYEdFgMnLzXwJRxD+lhtkYzlnYBs4Fgtu5e6Uc7B2D5igm9t/IjfcB6R/1FCUShKe4JAZ7+roGC4sOWbKiQ98Jd5IFsfSfk34vtWrUCjw/fqzEAJlYYTmFVGmdVUJESZljO9PED5tej+tUVhlSlaY5kXVfE1wO/9ECbgAPkYbhqGs7uW0zfyYdtQCMYSim3AexdGV1RTUxmV+dUiYtbzgyI3G2u62aGbE0W3era3UFisRzruMuevEBWljOOu8zH6br7N7r/u7OD+gL5xprbQB63OkSN5/SFAl9mn1AWEPPhCLL7r0YKohoOiudcVXzPbekxEmUle/CC5Rkf78JuPMjDCj2X/c0ixJDn/S3KHl73o+Y/YCj585Hh3m51814HWZ1C/KC7whFAI/o8R9ByhibB1EgeL43kMRuJwrAiOKyNxGcRGwneS33PkcBG5asdSdVGwrz0lsMRuYp+z5h5N7bxGAA1CR18uWAhWc0dSOuePb+1e5uXfMpHSmTzUc+T7IAho0lM7UYTz9Ky+Wb5KsOulgxz97XEuGRE6fN+UojD0gGH1D92TSkUXedtVe4cqqbNNpHZGRlBc227QNycLFFmZaiCTFTUqwsjrDE5OKcXYpA93lblduLzpg1B7tg1jOEH1jiGLXCBuwysx8bV2T1XA3zwZbcCxzf/TjKpD6XhQwdTeGpjjnpdnNLpr78D++kjSU3Zh6Kk4mX/97ZkGb/ynPeAuN/wukchwEu2K7MTLRcr3ctFs2nUF3WPJMlH/OJdxHeWnSwq7MXWMnEPypK8lnS4M22KWdxyl0sr3D1iaeeW+KWZaR0xNImzhWWochpDM5cg8hNXtdOlrSts11ac5Rth7RqKYCO6gSYreT8xM8UYuoeT5LXzX3SUaiseeG605ua9BgKXfDD4C4zZMnRtOuSgPGSO1SrfkykMIJDa6/2ryx0LlJ3DOrfUY5G93teah71PhcMePrj6kBJ353MxnszxLBZz6Bdz6Ls5nJ6JvLkV5KtLkms3g43ZzyqlfiYf9i292IGh8oAxd4TG172ciY5we8hds2c+BzAU4WNuqpin/v0uT9V13uuZqlqsferZ/vONdfGVZk3J30x8o4G5JdQGQ8YtzZMw4pIElHzCYJEhzv/MTpQ0vLxXyTcwVYRy5d1qAkMZr4bdm8EhwmAXA1wdMO8tqmPCW9IIwYCStN7KvHpkrUx/oPNx8qDvcrHfOgiF+tkRxnXhHPHP2qDGHIKgYcxUaPmA4SCNmsVjeRSIVVy+JZdxMLKYwOpHxFw4+soXysm/iia/iizsS8VwkfDBHp4V1iydG8Azqevp9d3l5Fs4C7zvR+O0b5iAj0B0AqSCWUGaCsxjPOx2Bsj1xlAEEvVkpytGfjyGf/FdYriDnNJgNflMgMSXYxwc2ugjl+94SdhWiv/QcszTJJ1pbt0pHBg204ENlcK84nSRxoA9TWXqAOza3YrpsB5FRY8O5Z7kzQHl/xDZI4i7tO9gJpRkac6MeAYI+4aSPmhrpcrjB+evN+skTjskRo0Ca7A6GlguIqfPhaEgHpI3FE6IRzrwprUR5TFw9KM7l4hnYsng0CodM7supzFyMFyjlIhV5kfxthsyYS6PRk4XGskOt0zRwOse0NkP0RawHCQwII1rHHmy5rEB/j/GcQ8TJHo1Lxn6eV6+B0NGNd6nzKFywOPDj3LGelXvkOK6YVL2JfnbCLocFvlEwBSO0xVzJpDRTck8JHNLkntrfntuWyx7wOz39s9v1MocFw47nqfHxJMbcoXndC3qHB4c3axnfCenR7P6DcSb3NxSiFvZ+kZubA3JFI5ae8f58JwIgCeFlEtiqBHJ+F89AMuMRwiIzCC5CIyxh3928E8TSUBvt3yhq31eoLdC3HL5l1BKBznf2zXKo4kcp8WS++b+4FwQ4LRTow1vj+PMQ7aaGBFsfTQSinFhh6t0VHmLPHyeNzu/Ls3qXOmaGM20ZsdAXWK7NO3StcuSXVbswnAHMaWJzqekZWa9rlKr0jm3dgiSndx1py5hTz0P3JE4mw4u8A1f9Qp6tkwS5RmIFItTt8UJKNBqmttty5YKPJetD88xCrbF5YklqwrejhSpks550iAzHoasLPqKtw+h8dDSgoZQO1JVySNSxylAJOpjDOgBPAaqUr/xR2JWGtz+eF5Ji98s0h6Oy79k4VxIdsQlJONsxspmCeJbz2dT9jARrdlu0LmNVOio7vyhwbVm2f8uiGmT5FOJf9VpA2qGVF617TdA6OejjGBvid5xeo55hfSgfszyyD4SkpYtKbCtvJo9Hlv590P6eyY8NHyzYdXQnZcZ7cSYhR02v2sSOV/ilqIhv+wGsYLCE65aZYMeZQMN4m06vzL/ueKrQgzunt4+INMRgion/WV82BNSuYTG7bY1YCmKsa2TdFO45Mn0J+3FCknezBOOlj+h+GmiZILwVMu5FBRrtFVTFjJFLWInLXPqrmS87FN4vbJOjTeqPj6Ir/IjQFN8Cgm5QqbOvSzFowV7lNqjPh958mdFLF/cp/Z6YK9fxVCA60gDijdde3O5vXk1HwX26DX2aCcK71jvXwGo2iooXWE/PxxKasudvweIgDu/LpTBEKpcRQSur+FhC9DcTXsnZetreKTNs1svXb1ZTljd9EqpzonIokSu9SEJ78KNtkQ7+vnarHFG9qHRbenilRjddgBqizdLDAfFmy1KIY2epbhDZKBdKV8xPy7L7mZ0X9AvRtZP97F6VINcMNtZC65LrATXLZJfkP7VFBgUE8ILOn0FIuMsjSjLU0ynIN05TF/zDlAqOUYinFKFTl2nqBOlQrhybNUSbEHxMFLB6depPj22Okpe7weu2bhotls0i2Sw5WZfPUwvv4hmX81mL3+ZZruu2WbRbOqaRZZYGg6cGiE6UqnxVw3TwUU0/io2PniZxlPXeHcQuMYXXONXMfJSumU4Srej8cgaj9L+ME3fMaBGxRqXUfspBd0nq5s3joBoIxWcfp3qU2t8wTW+VDQeFSPf5Ua+VG4cIbYvvYjGL2Pjl75M41GijN4JogFvS/cye/ciNVOIgNXWtS1gJXFpmPJj2xBwbxkhbP8NqtqP198kHL1iGhpszi7LdHNHjoYwesMFNBCiNF2IZ6jQyfY/RN1DZJzpOeQ2T75c8Xuni1TLKhuiGtLFkCnnjOW6XzMHfLbT6CPCj0hlsCJjCLgRD0nhRT/o/iDrlBh4W7HHUP7xwLB2BCHGtO17VrZzV9mjY2q0ZKzU/QGPn7g5GyrmAxWmiYwtzHLJ4yFWZH5F2v9BbOeAQAG1KA2QerYiH1AKTXizww4J0RXBmmVgxt0SQyejms8XHd7DdH5e9qT4AC97NuBa6YgZnVRa0Fh+iOSlBoHwZo9GRZR+ihrgcXdoR1pHIMBunBZ/VjtOMQoqQ74FOtJ43Utho7rd4jwQI8pZZSe2VnzUMlSzVDy6Q2n+VNn99OWO30nD92OK2YY3tLbHMc+ANK+c2qfuvoFEutH2cvUJXXbE9VeOTfQHIjH0pzJRGIoW6AdoVZVJ2VKFMNXKIun9HSdsL2AjnDpKSwx3mgNlIMtnwU+GAyn1e/RHOvV6vwjFpkk/6hwvUpuBtb6er/TNoMk0xrEyUxiHGVFa2jT1yYo8d9MQsQ+vxeLrLobDXGJcy06x4vibwHPF0mqnC8k9Vb9VOlOWwP/+ECTl5beBsrBvug2Cl9gGudFzRda4bhs4QfJXsw2MhwWSszAxI6e3SU08ON4bJgHhztAMcl8Ebl8wl7QxYFiQukJSyhlBbVwP9cv9xFShhUQMxvDbJLwEBr+1An6XDGZWGF1G8NtSqQn4hWqyBL6+wJcs+xh8rW4ecAC+EtgbROa1J9K9RnfIZcnPkFKgIvJVOTrROUie1LnypwQrCwo4kI/smU8p3iIIAuVHkKALzE/mQI46RoOAQK6gVHcQwg2GOdHVrKMMzFnHLCGouzklTWv3Zu2u6lSHqvM7xKrtvRqD/Fdeaf6oKctZRdCDR95RscTcu1pYcco0oDOeuas4v/JXcXsksS0zZze0c4lAO/nx0K+73VApdkO+C4LJXRCUd4GkRCt8VuyCYLwLwvm7IOAuECPn0jN7ec4ZE2/lOyCwHRDM7oDA7YCKAbmbi3CnmZs0UycsU5r7wIx+AwJ6GcUzRCYUttiMoRB5mGPpqkwXtGYVrplyu3LNELyzwjWLRQEV5NZFYrrD0pMB1YErT2snARoS2YJTLuE3BobCgtO6AY0Iv9GemstErUnVGfqb0UoscxnN9njJGowOZ0KcJxpGv88GFj3X1qziMFji1q6WC7ps7Wpz1q5WWrua1m5i5coLV+PC1d2M1W3GbPHGY80Xr2aLV5tdvJotnqVZJgLTjkP8EJ8XInXTwEfjVaXVsiH7SEEDhKq4x7heDQ0B2KCmiXWxr2pEiXXZMSTHbOjXQwhCRNazc3cJmWEZ7wmGxr5xpZlBVWK5+yk4jOg7XiCznopNIbOQyCw2ZBYKmVHaG48s4JGrG0ehGLgsVProydoTC4V0xzhzNEPAnGgHASHJsyb+VDNKBBWanl5bZLL7AtSprhO7wNY2dW45clNYlaaXCl9irsOSF+FIyEVV7H10/mi5YvScWGu2YsYatQKGtuoMg00BqewXkmOrA/K0zH1lR/W0MgincO6ggl1jFoFzBtOYbbM8EIIoNjxPh50TLUYdgegIT5gZb3XocHRMhj5Q5HvGrQ3NIj9MF6TErXMbUmXbSMtd48kGoqk2eZXIGSxVcpGKxdBz1SSGlBmqzxu4yLsa/fHoZUZ9yJDZnGFXX27YXj5sF5wl1rDjfNjl7uWSNB9yYD+nG6j2nsAIB27PBCbN823TBibGq4qAKAJ8gYXMzMt3KNL9wujCEwPPnjA/Uio1y2iQY1WjrZzKnNPJXfhFxW+UNNDmnyoIz0QJ468aVBtMP2IbSMbszbRhr6J5zXsyIxF/dVbxY4Pkn9SDzntqRKYbQKZbDZk+FvTlMHILZmxrH4336eYaXOXv628xzEHRyjZe0sHySdlALDOZMLOv2+sDXNyr/Fvscptdbm9Jl7Ur8JDn23vD/WmANfyJ+wfV/Yj8RmX1fgZY1XXDXW+zywG7pHaBPttsSeZVVuOzDX/88AAexvci6RKeH3CPl38OD+t8cq5U8jY8bNw7qN4LTTJe3ebebGHhJp+cLRW+BQ/b90JYi+epe7yNJbt8cqFU8nY87N07WLh3ULlvP96ktDmp3Ltf8AddyH3ocz1t3PemP45+8o33p9X72F1IfdLmffCRgIDpvkFy75v++vu/8EZ2o/Gmd379a87df29auU/1aebqqi8d14fEd3l9rpxmtqZynM0W20FgoTR501Mf/L5Puvru5YyD1buPjkGU8Q013yYSFrQOpaLCBbl9AE4QMK0Qs6yk25VXzowzxd/4hTiR4tYliB4CLdaG96Z70UP86Nq64C7GeHFZKaYfP5YYBHIXZDeaZdxFmFpc1vLJvHew+EHO8s1/jeKuB5VGgGYHyAhfOzGU8TRnmC0nHF0yLp3MLV1zpTdfk2baftk1uXfQGDfUmNuQ7xqq84P6uHR9bunqZLemlvbeQTyuIJ5bQVBUgA9q49K1uaUrrvQmEPLyFYSuAsLRoDouXZ1bmoL21IBLlsqxS1C4QQyV/ELsL+bYqV1gp605dmoLO1Vz7FQz7HQlsFNs2KliwT1bZuBYG/+ovTye0tEdSGWdWmFts8o1to1w3XDX2+xywC6pXcoIilEthVzWATg+rTIqP7cOncVALNyG3h1YJ3oat4ecOx3KufDoggrcvj7o8VeaxuuDmGIyn7ZxwkPrg0XFK0prqBeBQbdATwVydcH2e3dodA7SslH272BPGb+TR7oGYK81Yjda6SLkvpCo/O7f0csaRKJpj6rZ+jD7zZDP2B9Wec6qbA1toKwSFSG9ZlEz1PIs6HBNY2gTQ33vP7AC9RG1aB12gWbtG75T8CLvrbBN5ZrNsE2V2GZZKj8wBssOSOTF3BbWqQnr1MZYp+/ZyadqUMFTUVPSCUCFA4iqrlV73bUT3pJdVuyyZrBgphLIqOPgdlC1fVm1/VIlHOsS2iWwi28XL6vl4KA6geCanPmq2nPLHatVrHpliFllf7DmEuwtIA3DEEtbat9QG/M5xKOJxzU9rvMkXc2XNB5xF9MDolosqRSSlbRbLF2DybUXuPLoTmWyLZsCCtgmHlf1uJV2ikrQaoV5F9D4ZA1SrxMjTNZQcRU3c/iIR9wYi+zNVA3R7PcgUqHRKE6HQyM1opGaQyNth0Z+ve4v5WhkoUAjKzkaWXiFaOQiMQg3s7Y1rZj/gkhkPqJAWtLWKXg0lrFMZ4xlsIy/OlinF2j2lX3rhCK6mwyWClRSmUAxkO9+7PA6ITD74AWECkgrE2gGcNEbY5oKRUgI+vZDv4x+bIHG8K6/jRZ6iBozypJ3OvyzlC4P9cuTRqA1YndbDCST/ZvvPY3yDetRBzk9a9n/8z4+omQVqOfLv3Wn9fypx/z1IaDCqrUppJqYv1JxMsBsrITHrnr2sfejOKxYB3X7wOaaNfIXp7idLuYf4FSa/b1FlK9pLCxxmzASboGUHAv0Mkhpa46UthLkVhxSWujn6VrCsdHBXKRUMaRUM6RUe6VIqTv8y8JLXXJhRDjNoa2TEBJkDAZGMPA1MMLkb3D+EkNmNdprEnAWC8CpckKX0orhNyC0rgOUHlQ4ApQuCVW2MIPQElKThRmExkDf7BPZ4oaDnabrRgNyiSUHPLRgrhbAU82BpzrZlM1eg/hsYQafgcsbWcVV8o0OoLpCigvzUdrCDEoTUnSVLGLeBGTtmTrC2RqA1KIZpGb6AofUFhxS+0TTXxVSw2FvW4HULsuR2jYZaniGDbCDU8eAFIiizbBsv/u0R5TRzt7/YQzTGIsC18At59c9rmsJk7VOYe+cxOSL1zB8gNf71i3SUSq8KVzymd/wiEzi7Df+w53rwwlUUiPy2J794WdRYnk4gYSIV7IXfgEvoGxfcbiE0LslXRnjkl72VI/Q1Mh+5evW2Y/EYTr0a2U4WBUYDNayH/3m9cElAsfsOeC7S+mtkP1KBJgACDqMwsq76eoYo8AYIfvUtxI7Gd3sENQrrOMn/sVpDulSrOh//jjgDeitQHhnQ/FEy2NE08O0PvztgsomcA7nrAejiUr2wGPcJFsFVYl9vWFf93IkRBFHmyRb2OhHtnP7xYSUn/o6jnst+0cPnzb8+N1P+BqOQ5AXAuG7plUkCtMhOa2k27PP7VpX3DPA/ff+a5IPjuMt+JqgWXPTYd87bCjsuYI9ySXjd+wJ3SN/8CscAuxtwEJW3QQIueRfnjP8vzASnxFnn/o+zldTqDl2Y7YP4mFBMAyrOhzrMK4FKHOwf5mwqwfg9l2w+7BktyLhimJcGDBGBRi2ymC4ZPDXM/jr6NlaCfAWuN403bUNs8Kdsmg7ZanYKVvMuZbbgdu8LstlSFm1Y7YDKpBtdxrBsXfIuj6JMDqpzTjzrQtet47hdYWnsBxewakL6hdzqF8FruoK7gFHa8PBJdNYLpCRTmuyvXZarLDAuZWuFODcGZIWL43hHw2MuNG707gv0KbpTFbdciPMIRyx71p2wig2Qj3dPjKGdwoRBgLUqb42874a4LXGW6CDHa8tsFDeAqi+zeonKolUSX0aUSd63NOmqJQ2Rb3YFC0yI0s65QyncHwgfqY2WWNDj4ttUiu2SZ1TAZBcS1dneld1vZuiRXU9rhUbp8LFQRXL3IvxcIpEFu2WH9PpMpUbkCV8kPlhuo1exKAe/yLxt5N6XAjL1OPSSeohnE1dObA2dXDUUneF4ft1w9rgV4i3+9opt8EOgLQA2mZvDs3oTJCfJPvZf3Y630g5hWpO8ro8xJxjqTFLmWT/+AlvnZNBA8o/hYPvdkr4AWbZZz4ncoKNx8MnFiD7kX+MCIy9dAGoLvtTAntvRGQEqMl+/DMoHBPAtfwM7f6+f804XPWC7IgybC2TnSS76zvUdgdtn18mAm5lT76OtApfCSJIe4bZD37t+oBRSL+YosZLSgRiJb1kTGi2oJazezUHXWBK61O3RBC6sBIqyEk1++m/RSrbyt73Ks4NkXbXNvKzO7gRYoYxqWU/dpQsT62ElCkGGKPzZnbfMx7Bc5kGSBwNJFjZ7x8jPahkP30poA0nxoUCTV8w6GqOSVM73Toi4k8I0dkzX7qT3FiJfCQT5KdFmULVwS+b+INHT2tT5CRrI0eABeGYRweWCMVLjg5cOkEHlkQHlmbpwBrgRzAgmtAxGEAqQRGBus13YpSCp1uQBIMBnrgn8XvTUQJB39BOYY4+4JQI8ihQ3IJ5apBTEyhuJ3MwjwYs8wQyDyd32IllA5+tOfisAHsS7JrsVE1gtwq8QLBbG26K9VfmoeYe2WiNGohS+4+1giUwMGzPw/JtfjMPKVcN7pBfVcDTyYEnGZEcNgzKGsD3AGLkzcPZcA7K703XnjgasuzgCnKqdG0E9mz6+2j+94aEE6Uf1FbgNqFZNzcP1WHcPO2RMMY8rN6aj4k7BdwukM7gFMIdwGFV5+HzmWNBrMec6XP/DCnt16cxuEPVDsg7DlVfCCUEbfjLRNXngKqXC1S9PUfVyzmqPuew8W2Gqg8AKROr0pphDjZuTbH6P+vwrB3yC368Xebqm2V+HzK8STlkdSTL7M7IoYEO8JEhjJrklpSoS2bxbz8tCIyzF76fFADGY9m9S+tckg5xoUDrP75zHSCKIx9QatsY2o9zU3Fb/NF3EMMtlhDlYo4oiVbj7Hc+AshuZD/ymnUZzmdPHFHtW7iD2kxIRsv/X3vSI4dVzb732TtZ37YSuluETWKBeDuUioGKZP/pknVi+AVb3ud/0zOo/4HdJQGFQ2a9EsJNsk//qqcOkEFpZD/TIwahvK2d3b+Pe6SZffATDrbqJfEJJGnDstRDNWxF6efEra1IbtEsUZeC7/dEXWKy/SRVv3/faePWa5PceoF0NzZBumZw6ZDudod0l4V0W0K6rXlId4nrlhjSrRh6zZevXvReOFhL0bOlaA/d+XNlEDv06kClk0/aFNNdy5luzi/5bUq4ZtHtImnrLDIswCzhktYLuKqnnQI0OwpuDeCUCHZlHqpdmY8f2zlgaVFnYLIrmKxRAnaRaNcQ4xJV32AiU242zPISahIeNwnWLIIFBzsPQfYEebUSJDM0m4OUoVHqeIbTjOZzmoYi69oflP3K49ztCsx+h4qGOag2mY8ka8V2qBq8bxldJJIt0GiLYNvK2gLbZSBOotEvN/ytMhuaQKOrM2gUTG3DmNquMbUVY2qrjh3uGTu8aOxwbOxwMhfHNmdFt2XxS6fM+oJh+zkyH+MN38l+oCoCvRVUqc0B/fkTnsnhvvivPM7ukqL/8+iKGHdcrPNPeUblfusrBL1eukiOES9+9pcofQMOIL/b4PEX/O7164TqLSU8upTjUU/t/4PL1D7MIrILP08Ulp1dApczIlNCb5vsUz8JhmqbbaUfHZIXp0jil79WMJSUEGqSs9FSUmf3pMDuI/pT0LYDFT3/zRwY7c5//P88LQEu8MIES9krIeTsfTcUnMs972S//tMq0MSIjNk2bLL7/y5ldoui/b0SvmuVBSzY29kvH5dQAhV1s89tWTeQwrxw58fZx5Z48sr+4d9Yn0bvZf6Wous/+jF2esmUW9XsMytEt9knz5wef3nBnxaszEO4ZgXvEO7qBMJ9CWlHpZB2CADqBQA4JJsDQNfJOhom/3AAkBjSXTBsOga0rYaFHbRNol6IDCnbWSCIEoNRPTWLeZemhR0575iDTjIGnSWhYAc6dUwEgU/8wATwrWCRt83Dw9vmI8wCupAeu4CuLsV/Dgy36iC1CQ7uzmcuSxBWt84SIDuu0gIgW6MZihQ6ilSfh0F7UzBYn4ZBnqUMZiHx2QQ3z8Wp9RmglNTHwHbLDBNb2Qy/8vFC6lBV2pnGypMCh5ZDv2eFfv9h3d8icTXQ75YC/W7L0e+WHP1u+IZTD8A+b0J6PSk+MH1AYw7STdxpLWdaqxP8LE/6ZS62N8HCkqc1bcciMIK0Hd0SFmrmB+mS/hvcRa6QKG30xgSKYGorO3e1eW6GXM2UGZ3sp7i18OVArqOkeGj/715LbrmX/dhfYz+q2TO3UkWV3fPe00L6JU1YFzhnzGiyUe5t9Oi3uqwWdUgeySCOf9aTJqSEk7U1xsj+p7auAyyl9WjLNKBj6OqDP3Oa/a5kD/8Q+IzFoRBmZYKL7Ixxc8IjLG1gP/17gJAeHaxK0uUNI/BJgYXn4UBHveNcXiUcuEU4MLHwUPNwYMeGumyo0MZr+E/T2jLMV7PZ7aERTVHbiW6h5+KSWGhkHOBtXbqTSE91dG0hC6X8PKy3CSaqjcRcVihSFZBtBSAIyOoUHDiIbl0so9lwSKq8Sh0BTcetlglFYy1tkzYdLSLtunRns+iuOb3fnRDSlhLSop7psIBNZlnD8KXQz1YcbG2PVKSvnT56R+7oPRffdKZ2ADUINWy77mgztFUbzcdLCQELyTQFWFsYQxF46fccXroQvDReuuAEobf3E2MLq8YWxo4tbBtb2DG2sG5sYXdztrDAZK0JLnBoZLdgGhsksp8sZKDa5wvZF6DUML5FWvWv/LBPiARQ/+T3UDmxSLUKMZ/Em3Uye/9uv0hs9qc3UCSCRIFm4fOlXTx40WDX2EhQxuzcNiPMeP3oVpOIdkpIsAMcUKCNJqxwvvun7KjUyn7+JsnGzMEke+InT2sP0c76X39MuKtdQgPkaQu00TRx+hOrqqCWff8/FUYlT0AG4U/uOU0KXsl+8QN+qR6h2mZeD5m6RvbTL2BqatmX/7kpNKjryT54Ds+q2d/94dNGTO/nNSkknM6wKZ4QWjayRz7ozuQNsQ5P3+WbLL87rfJqFERhHjrrEep6c9HZpmfopokWI+rOa1o78tVaO8fSVWztlh1HF0tpZGvXS6XL0tq1h0Y3x0isa+iuZpiu7uCtK9InuBrmWkdB1SL3nUHVJsiuM/d8adNiINCRWNQWcUnsk+aSRwTsY7ZWd0tPEwJN+6Y4MJmHomgXJghLpasdAyUPCALK2jyEV5uuLXZDig3ORLjIrDlwTOahvGQa3RjWqhrQNRzQxQ7oekOTshNI6w5ImzP8V5SzrqM5x16iA4oQ0+409ps8/SYOzV2QtcCXa/6ChIgTaG55Bs2dc+zXbabhKYSIvbmYbNKIsToWIiZlDqw2wWNNCBFbE8wZiFN7qHAQi7kJIyDEmRHGzKwFQEp7RGmSkZORkoyc/K30QhXZIAEEjJq3s99dFFi1uI9b2X+8noqSWvax3/RKrNRZW8elMVqrSuJeIb0CP+VE0VVSUGgAjgv18hh+zxVk9T97OdF0cd49ZxzfmMeRkBqf1rL7kTN5YUSpcdk6Kc6tk8wezMQetezXzxN+AIOjCe6pOEJugm4shohDN8sFuqE1UkfoplNCN745bK6ZERLU5iQVnKTYbJPcTDk7ReNPqrLetIntOSugldy0smoLQ7W1FmbBjJRy5FM1O6NcjTKPg/LnnRvreuzmpKsZp4yJS9GgDI0sJ3xAcl2U05iQ7ZtpwZ/fQpw6A3kshhixSq4hqc5sz0Bl54mfTLgBqICSqWHcTnOGTQnnf151nxNI4lHO5SyMpo2G5MpuGHqK+TFjIQcADbf9z2n7/2TNLCDPbmoBadv/NtvvY7amamxN27FAHWOB6hO64MW5uCGZ4HJ6Tt27NMHtTKAPgNWWAoO43dDLfmjvuukaBfjf8zkdZyrZM+BglkdDWUu012XLR1nXMPtH15mtDDKxf/bHT3NngokQu4OX//lSGnzku2/DjsZbx/se8i82KIQiKurUZdUSv1HNt6uJsn70F6RMhYBq5BSctMn9fopUKxItlJmMwtrlgKMcsBeSxWNDpKsyYbNYu/hT0tjq0NuErZDzEy1fPGMr3Dx5jOiieUpGFlxMrEU+TxZZa8w6yIFq0aZILuNdc2OPeaJwaxNrbZZGcyz82I0t08eYWI8rYmDcdENqbHuvO5TXBY8b1mh3livwKW6eJcG0JZRVh5aiNrKjS9PWi+vE9ZpzDvJnz0FVPeax1RhKWg5S2FeZ5Qf8uRtTZoUxhjSr+mN4zpSr69az7mz85KGV/FzVXF3Pw5+sV2zbLbZtsTvka+Npo8a2UbVkKVPWcmd2+KvY0wupb/vUK+9T+eOOFYEKk5HvWjnVFsYZEoaMhdS3cupNt0W6YfL8j+83Q9D3/x8moBbVJh7sSEAN9QeIQ4MmGXXuhf/4+nWxh4CJP4ZykPbfDdsED/qy0SyIsi9jPOpipDD74u/caWKwpp1UqF6RsriS/fafeSWF3O1mYW7V7CdYZP/g+4TWuekk/oyZ9aVecPX3+DLLdAR8bcrm120/Z2dey8+SIrM9kdlZIYUjs02jfxG5UQ68bQDKgcOcw2xlues5SZ3CC6DmCKzN7QLGzrmdpKtx6ugvz/ZOHdadow7zJXxszCM8OmdpFqs6mpm1Vs1mnEcyzVo8tBPRPJoKXmUa8n2nOteSiJKmTHJULF5lHmGtTOuXIkebm07uOCt6QPgOrIk739ua9LBpuIX+ILJwF2ewhVrFFurlW6iVb6EDpjzn0X3eLmlM7pIxp6stlnO62i9jg1ivzPYaY9sdEaMj0Jlcc1aEV+pOOAgMI3LX0Jm7YWAL2U0uJm+dKqD6XYLqxnhzcKlkAt/k7LGkg+ajhlyt5L75wOzsi6tu4gyYW/Mt2HNgXjKeMSLNZR/bBuHNvKO1SQitGzA3DI2LaYxt1J0ZrG5w2p1FpI5vSpvGogGLG5mozxzwfAcycyFJ9gQ2SZyxzugiGbzQ4jdMzVeLUccBaL/UZmi4IpKoARrnciDG6BaGRV8nMFyzbjLHPfxBIzLjmYFxjGdO+FxS62YBfuKUjvPFq50d9z0CrMOktCAbsArihhW+pGVQQ3wvwFN83Hew6Ovc0WsHfwD/brFmYVFozW7hcwuaWTQr2cANfDFwAvi71OxBKmIG26zZ7QDmFWu2o3M7mu1a5asgEKp8Vuaeb5k1K3kJbJpVcm0OK/maMtM4aaN+6Wiw07oBXjm91LoBDHUpbVGyjQMnDPxkFv82fnP1+iBVgF/+AGrrW/tXpH1rv8/nypQXF+3v4s+jfAGDpwF/3K32b1gfvGo02G3t70kHCCCm9gfDwas0DTtY9nYWBereyx/7+GNlfXC5NXtlerk1ezmfa7G6RbNXCW74Yuf64NX8cUbNHkWGaTjDW7PY0giapmZfPRy8Vs3i7evs7dfg7Q57C0DcMb3P6K2wY1rLpYjE6Wpx7o1T1IKgstM7zFwd4uk9wsevc2ZOiCs2tbEstK5hEXDSrgmzqBqIsZaVa36Ug/0Y92fbYNnmjK7+mrMYdm49V3DZzkqdyWXfjgBzqSvRRTS/AewznZHTlele9+KSdF/6ail+8AJ2+pfZ1KVUn9vU9TYlpfE8/MLIpE5kkKZyppyHnGbMKOxceFk+ddvnTF2cT11LdrF2REAr2+ynTjJEhXYGr9k01dKdqhN5j14zOT0IHGgf7tKHDPqpn1fpJyMC2FRsYzQim4pghmn23Jhr86aiVZqKbYyYFcybimD+VGzNpyKeMxXNfCpk2c3uCoZ45wxw67kFJY2glkcTI68CvqXZk0e1LHQpai8QKb1XNd7aDLPjOWanMm+8IHNuvOxObebw7jsOJ5g33lY+3uqc8Xbz8Up0ofHSMYN3oY2XgR803hAeKmuT460gaGFfhevpa9PLdUdTHRtvzUzNON76jJjTxpswTuvseKPSeGsUc4XzxhvOH281H+80G5j8U8Yom2LVqDsGGkKQbOesCU8phoqXz2Zl7LNZN5/NWslnkzHkxg6c5rg567E5wfaZx+YBS8CT2gVKIk8Oc3Y8spPSeva+m9ftmAS/yOyH/tTThJaqajNGLXMgW5DCgiNs0cuCT8bGlnKTMB5SDpxy9DAGs85UVuZ7Aol7853GRjape206HlCiaLYDJ+3sT2B+SxHWSak8/pxrBHT75z/P7lXsm5TyLtbFfBrMNW++jsl8JlHOjt3c2bE7ZhVBA4oAh6EFONzU2bFmx5TYnB3jSWfHV+LlOO3JGJY9GVe0JrFbjNiqaJ+Su+lG1zGjcMPmdANLalaNp23K84VON/SwgZpyccZFkZ7zE49D504Yj6x2Wpxi2lGxZhu0jGvBSv/cMOFkrQQ80YLFshNgMOMEaOEiMyXrTj4b+Z3NmE3ugoLjTNdzV4dZtqo6IYtzgq9JCiHJgWR2O9dze/lZ/qhZ5o9aVpGR7I4T24jnFPfpqunN4TYXytxmYF9K12if+PO4F4x0NIUsKzJnMGFLOnNSLTMgNZUKhXAnsWUrt44XfbWuMJKfni6M+xTMw5W1aXTnzhN5nypz+hSPyVk8ibpJSAzjh9aPCHyHrNqcsGxeF6Jp8mRdCPMuTJPh5DfrxLjEixZc7Ja+P0apNSFZ7NoxFo0nUKqh0GmX95YyKo0fdTCq1IEdsCAwXPbxa3Qkut3Ey+vZH32DqThvS2O8/fS/pH5MZx/A8Qt/4Js5XeudkG/ZifidjAyHxr/RKIB1eMHw7+vyDitGIevqxxb5a7bzJ5WHpgSS5b5+eKKvJ/no83lf7XyV93LHZC/jvJfNycoxN3HSF6H6lnLHlwcSt1+TEy8FnlPHa9bx2kzH78g7nh8YXcclff/oRMfv4KMv5B1Xf9flrM2z6GTHa4qjPu54XjnzJiYwgEDDf7Xc8e3kHa/0rxtUi45XreNV63h1puN/J++4TrNLRcelaXhkouN/h4++lHdcfTlFvMqbqyc7TulAu9TxvHKGb036zYKlQAf+enkAlw6k2XjDwCsG4NkAPBuANzOAO/MBqMdrxQCEez8xMYA7+eiFfADaDu+mspo31+cD8DQA4bTSAPLKyY8kFDE6kutQv0vayGh/CeOiMcRhywTtjSmiWXdpre0dO7uRSorPXoE1UC9ArNDnIX0WuPcG3jBbmkIu+GJUesgs6PDSLaHWvqc+xQw9yORilnHRN+rcKlomRWPLsWu5ai3XXMvhdMsuG8do4rHfyaudHKzvviBq2+fls2XLL/SmIBoIQ7cOHicL8w83+F3ytO9Z6MiHw4GMJQLLSNTsh5b+2mX2UZIimYTlse/XEPueeW3MXaxv8fwt2K0l9/QsLpu+0nGIOVhGSpATIpmN4jueUsVTD58Mi9yOFQsqbDyfryCkWCgKEz0z5fBuVpojz+SL6iWTrCwlya/7LgEKRqaIvLGF0F1RGh2LiKvAjRYaT9EUlyzSr18eooUg5hCrSb4wtKBRUc1ynnqiatWHNyIgrOpsWt4LhoWlqaA/b3C+BscPEcRPkXjdoCIbVGT9coP6+74fnbasOzUT8GJ0MQNj1lUdw2RaatK8p8xcgWfNoWwsGLeQfN2NqxM996yYLZsWjVE253WXz9XjmpL3JP+UHVIcyzzbye3Mbujl364oWJFfsMqMJKLYgdDOKVvcHdkL3gkx0fgNZvxUdu6yE0P+ACjdkb3hBJmAiGkQojx4LG+In46sWqi/0Dh3yola49R9lgsj+dXEv+R06vozWFTw3LvJ7/vpIrngJKuccsuttLytgwzb9Vx4LRbX3deYjnr8nNPV6u5HjESEu6Tu4yjDGhYRPRWC8RRDzXeU/JzHhZCydwWOVCja4hF4t/Bm5VR4wVKwMBlDxAnD8WuoHNSydNFa2vZMw2ODijw59pPR5SkE2+bYINSzt8qyLWDKi+LZuwaxAoQzDQa/pVBXn/UZuc5QbATUgJmt5jEkEeYR6eqC8MC45Wqaf10dfy0jHNMPpeLWmwoW+hUbTVQeaxG3ypxVj0bjuhF3drLmxIpd74pxBlRy/5ySnCR1Iig6oSVQ8Ey2lYbH87Rw3jHRMWYSCxKpZyqnpDF2geQja6Y5qFhcXhmgxRaeWEkBmxa9V/ZkbaX1NjTUcGmq9gyYRAOIb+N6Fx4+O3+doJtGr+vICqXUYg+/fuotKPloXall8fbCdVNv4Tpm34ZGxfH/6eyxftp1EYmVV5L/jq0ea+nHcZd+EI/x79ighheIUsgkDquMNt0OfB1+5SCYMa+NBq8g1MZW2DOKyeKhUQIZttljzAe2vwUfNWsCv7ufwi38pU0GlLEWy8KikqZgABkxu86nx1f7W8zFg7BOfimzpETEzzRs4ZJostu2LsvHbPniQWiLs9U96JqqYGnQPVZGOCsCyD59XsJTDOO/zbzCEa53O5MRuae9lN7GDishO7p0mavYz1WiP4YSlZoNqxCc7C+AlGynAIaQZslTAxkoEDEpJHu6jbI7qqah8MWxh4wTzLfAE9OuhKwCYt10GAEYnTnCiLGpz48bikibf9IYf2LdhG2HVRth9lmFchUt8dtg02+XNvl2yuExXcoTmm490l+TShH87pqiiSHxBNLvtDPlsLjEUk1QFUBwFC0BLobwHaT+7WI/7F3Edz4jOEw8ju1xnD92WSy2CDZwDLyGqhaFP/b5Y0Xoz6Ig+y5hoBIWLzIf1Fry72v+qxzNOWbphZ50aZtuh6YqXAfvG7uY1mCAu9YLJhWLMUrmCMbIiO4RAoIhbwEJNcLNZRY5OEX3wlG/rxQWC9zNkQsYDjSpuzoDTOIApFjgKSe8jowmCJn9nj7SJ/S3Zi4fFGtiRNoqN1AGAAPJAHFCFC2+ZJJBJc3aQTMWzT6TGA0Ic7p7FeM2u2RdK8yXg39M3rvIMACQQ60yBq0SS12W1kFLGasTGyhiVdhCO3AYHSqRxTsdlA/FLrbAAkI36SRX+NDXh8gNnw6Gm3yDfXLHYFk7Ax8E+oAJkV+12QcdNnK5+vFqQnkFLFGlIlnycnp596+mfJqIipNuV0zEcamY7GXcXaI7BvilZ8Yaf9EQD+KLLQh7TBZASpQGnyzhCeOGtyD4BqcX0nGDjAETq2htEmYWQz6OdeZe4qXNNK7rPFgjsxKUD7AyafBuG3dWxLsVpnCJgEoawB4VOKAjfxF81NDVVcIsUtpYL5as6UW257K6GN8BXp2LbPHKdzDZGoCG6T2FK4ICMpjYe7VvzBpuFKCeFkDgiyQCC0FFAZdVcgmV7N0nivTKygNqiejFBOmXZ7/+a7yrZBK+xS6XmGJAv1w/HCfmaDLw/BFyERbOe3tSmgUNfjD5cfUQUibvSH7W95NpBrM+wWA2tFOrOjZqf9aEgniHLIvqJACJzCZgcmyqQm4TUN0UVEdkN/G6JZBtE2Rjy0CooOoA2DYBkuk4yG5aYkd/RLAVsakpscOgQuCoKj9wzn++UEXwmSLYezEGSw3wpIvl/y4lpFP+b8v5TmJ1CS6OkQpdLrrAUikoRxfTszAHqhjzWw/RRom5t+Y8jojvOa88O1m/0kvEAbn6yrXxI8iOlPzyMY9ZcapjXLrAZJZI/y3JOH0s1omBhL8CEVMcogfLpep4vun/f9V9DXxcxXXv7N7d1e7elbSSZeOvwJWwggwykWzHNsKA15Zsy99YJjh5SZ3V7spaebUr765smSR8hRBCKYWEgElJYz7amJS2JJDETehDwSEhKaF8pc0HL4FAEofSAAkQGuhz/+ecuXfvXX3Yzev79b21R/femTPfZ86cOXNmziko+SnU5rXUULO4Y8iCNbJi24a1FUOFhA7+IR74TdLMMxEHRBUnMWjarQA3w/gisRkm65ORbTy2vKBNm7HxIraOx2QzTFxJmakn+odNA5DJM5hjsmqIctKFMth+xT1TFXomhCzMf+cz/gxRd9OZs9k2RWL6E2dqw4QlLHQEBIcMc9Rzq2PjErWOIuN5qBeZm2sh47d0PJniiS6c2OhzdxpNveCAHGriLBH8zJ43sxGmHcgR9th6aY+IxBA8KmmFAVa+h3mMmMYYPhehztViOect7LzF5E0vBPwyZMk0RCURJwlah1HnCN/Pd7xrmd10WSsna+VkrZys1cSs1YSs1WRZQ6kNGKs1omwTiEEyrbHDvDqIowB/wNibOfXYq6keex00c9fvJY2jmuoB6AqbbBTOnHoU6pgwm0c2AdhELTx59RAW8QAF4ksb7/TpYsL+aomzCbMyjrQGLADu5UWPA6QTt01E+uy1WxCmNZvpQodL9zbTaTSfmAWFNSc9uhuqR3cjFwyasrCH06QXeXV8OXELW0GggQwtTxYeDGmrKhaHgLY0MDGgUhER8ZMo1SfMcYCHnBWmP9CGtJSbv+CRyBBsZBL7UBUwrlkVsM/d+lRxOYlAlgepO6Cxyd0RZ9HdCXM2bfSzB+2MSi9HKSRaGbZBsvTSYd5tiH3bChZCGKE7lKc0UzoYJhuITWXRS0BMkoIJ5B4LoT0JZCUtbYJsDpfITJDsnSoyK6vnQKXnQKWtkcoOhsn2Zlno4mNzjWGxLGrXi6UxxFRBGd+pK0th+Lxavbfp9ZynRS9hjU1hNj5B5li43uJLFpw7PHMiL03JTq2PGyTcy9ZUwmThwWCuhwMhCUys2MrjkTDcqAxEjdqGbdWU8ZgM31SPANkhFDAfk8apcd/pKfNFA9uNVQxHUDMcEKU4tGKPiG4Mmy67aYSQPBilmjtXEz3nPex6j9nvmvQpe7QaPFp9XsrjSlNTQc/g9ZkVlojUhnSx6DpINB4dTMQ80cDJRSp4EnXwBC1Ap2ZoauRNDJPHZQ3vBzQIRa+xtESTsFTJnCh4wtJwoJbzGWaWyvmM0afBn8Abqi7NE1TrkJgAhoRIsXkWQ4zrgqwEeHeYK9lcIfwkscCuJKGjTk1bSqzTlhKtGp6mCTzKZ5Oa6Q5m4GU9W4ERsYRmzg75YRFrir7mlpThGJLhWCPDMcy8XjMLGvfyVRWeFg1URp4Vw7IH9eRxxKNMBiC/hnnIcSWEnNl9ymPKJLNgbAnKoYcnmYzABStwgQqcYcO5CGKIsovSqiNqi85cLXSqStz7LC/NVSJC+K7iBvmwQSgOPjwh+LATfC2dxLPtKmsm2FdnKL+YSdUi6DDv/b2pSATF1pnrnYU9jGyDQu8BnSNCTSt1DP7mRm0XmNq+0eY7qcXFIrOeXQyxySwfpHYRI4XQGFtyrh3GugSH68JiRVuxvSuiZIGtvIOqB0+UBZZKjD+ylXmqakCEgFi28BttegSKkBLYAoIWU2wYAsC0AcInAogVp8mCtFMw0KO2eWfQh7DwRycsnR4+uldl+eaYD6dr8XNsUBKGqtngNZl/FpPiWlgH7ojZIpKoNs+oyHYjkjntrouJatbz85q0NugYCXbRKt8oDemX+zWcI1XUU5EAcWJOIpphkrl2Bs/QlXz97nyVE8UynPZgJZ8Q44NmM6h+AVlP2yy1Ns8d3MN7H4Y2v03GAau9/BO9DK8XCdmwqtfzDq3g2TDtJFmIhamqiSrGll5jNv9fv65iZ22TVbNaLfevIlIPhRsaL6Z4dZC4IfF78qnXhsRQDJagsdy6AUxLAHU3bw3hbJxYhxXOAwa9a+QashoSy/vFHBjIG5upf4YtTca0gVQ6TWoROSWra7yuhm75ZqZOpkxOYnevpizMoTZPR8K7kCIO1rEYD958Nln8JkTUZnBJe6qXMZKU5zcKDX6EDLLpERqS015+GvK1jkU2sgke0LamSfbJzAXtjQQEwY3EUixjqaC98zhGndAWo62SN3LekwNuU0kZqVwWvOttPGIzqTSCcmygFwdA7JFAFyXTkkEWlUi2QSyeb5Zs1vNVA7A0bPLiaAabo6+zyToPEiYFFePbdKy8nmwJUyCt6clkFiuz014Fh+jCsByXKDmYhyZ7ReEzq1L1pMnWXiPSSCQTjvLcRRUyiJNk+bGeUQNsz5C7QQyAhQQGdzTTXqheuWpLgFrWEyM7xoxLzbzdFbRNBGo7sH47TUJAt/niZWwdXlqObYctI6PxqF2vzAT3GMwvip1C/xbeFiJpsM33+IVHwNmijbyzpNhg5ny9iY1uIMmx5aPRAvF4vc76fup8jA5cRP9WUI6NYms1IluryDLgtetKRukNPRqCbB3Rp6kQE3GROhEq2wybHBQR25a4m9XvbC2T5XibBrT4XCYVIRgJyKUFAdeAtKiDJN86GZi0aUfDMMR7dKGNhE0k3uA2l6Ej0yijZB3vZLQYYpOVxkdcxgeplehZkJCNy8yGZZrpdCPxj7RXw3dskBV5CErAsDfPMAjLnfu5GomMBZnA4rAm47UYeRsiS3NiN9K12ahtw9U6K3XavZjR445He3J6q40i6Z05sgagN93oRhO9R0e3PIs1TbySqZ0meQ2JoVJ6rRmSw23QMWMRa5gUh4M2weXNiLjeCxEpgia7bJHOS8MCZC6vScyugobFgo7Aj7ulxdfLAmJnAIRsE796zeh32e0WTA8ypvOQACYENzr4bnjx3ZiA7z7Cd45guPHdqOC7ofGdY1UhfDPdkUKb+FaT+VNa9EgZiOLX6hL4/avkxNgNPrH7edDXEuSyUOtptJYhvLHW78pCwawoW0uU6WiBbRKWBlCd5t60Hq3ow3Yw103HlRw8tY8RcvJ0p4lyjZ3merbbJVkHOIkY78vxaRuOOEIb2lZgngmlRpu9x0SDRhlqsXU9VuqJBvdfC72Pk43YIVsqEebiERvTIpZGmb/U+S1o5hzrKyfGIhgiQ7xkijJp9/P2KwR9RHhrGPtZKXgBXWZDI1pzZZWCOYbgAzK6WPjPhFNvzfuZPfC7DKqfnCH4D7AyDGGidNiJyanfRod1slPvpqd+Lz01v03rKM1O0MYsxbDtCW/T66lnfPrlkE/vzINw9gitFrK4IDE751bFwBRQttFH9x/Qhk0K44AYr5B5D1U//foZ109LPxv1M6Dl2KSOmQg7q3SYe7UmaACESe0nbGsDhB1tAKjca1JD6EBmNFF0audI0eJ7aYrF4jwWyz3NU4U+RFfVW4nfYa6iLZDEk8pk45vcM7f5zCcNfRjgAe4facEbDKn8TUbignXyelB73WbIfM/TDjOAYjrWb5uOdU1fvkSTUOEVNMf7Em0iwqE5JawNeoZZf6slIoZR2fwxd05Qn9cVNZ74EiovrzQD+pumjqlMnFeMMSPTcR4DvsRBsXSdeEXR5hyXiS51eUTRsOCymbpsxH0ew7NWq8ZErYCec2k7ANOIVpaw+UH7bnSZPiJDYiZ6dsXXz8rkHbwRh4UDzTMolhg1X5DwbRDFwRqpDwpKnKfZzPZrsFGlefeKHesXdDV9YlWZR0RYRh5ZRF5g3jhPjNd0ODpb6Nz6irntlhiNh3pk7hhtDoqUtN5ltLm+YnA7OLnB7XrqX+HKpzW4Xe8UzTHWXG8ba3a0mPj2gzgNikapJG46jpR79Qg2pMBhKJvEtRSJa4ULDDArRMQWd4RU7AhpIgv985cblrw1LTdmQ0GBNHGwKWLQRhOnZFSlRL0QYXQ5RSMALoVjtMHtl4w2c/EkfJnHHEqUCANbOvYxTZlh7xPV4TZn/pJ1KW21W7wUEIXABCuPEEEg+SRt9jQUyZ4u5CvMqTfAzrPeFhhinUiar3jJQQIJPbH6+VJqPzFKzWAIKBlSiETiRMF14n5K11+dHOfUcqIUA3TdHEk23Qapb/JhZgvT4TUSgCYi6yFtClFwkChAmczaIw5btJeBTbVmjlDEs9qkOW+7FTUQDV4bUoQNfBLTib+e1hTIAoKkBhOaL5dVtWG4ug1DU7RhqLrGIa5xiGSXThuGvG0ICkvphiZvwxOkyG2CBpNWIYVUapoweaMpMFxOG2VObi+IQpBGvN9R6JtDzaEto/P1vprioM1CoqDawjaW62iGweFwNswMrRqCo7FdRzS6lpGVbmMk6+QzyfY4cxeTYKDpwUDz/xEMnDkRA9VJI2DtySBg7WQIWMsI2ODE9yIgWVOvYwvv2Gowea0U38SynUpzzvI056z/m81J2jdoDKJq1a3qCpqkcTnIR9fkY+lh0D0d0MHjk/fjar0W7wsGzdQYNOv/Pwya9d+JQTOnwaCQjUENrNMV5rMG07dreIp2DVe3QphbIexp17C3XdHdlG74P03XTEqxjivmNjqPtmtwkbqGCqlrcJO6IpE60CoW7RDe0W0PUFrway1DIvoXCM9AO5y4dUBkTDFmpIllOGTQxUN4acOjkdbY0HQgbmVyFiDusADUek3CtsgkX6sn+bie5Ov0JN+oJ/kZjspoWE/wtvSBGrORv0SG3EwyrRn85vfL9FSzySbehDQqfmpPLenhGaKixbp6CyAwDK9n7eCpJ1oIDgghGEFJ8IbjDCKLlZRJxzreQRLL9bWetEnVD1MlSbM2uEoCdVmUJCAaYgEdQc9TRtU8FfLMUwbPUyHvPEX359nzVJivv3fmKUNOhdjzFGtHhvU8FRUOmuapMNXfZOoSTvBKa+oGJIDQpA0YnmyU+6n9QtJ+fqf9Qt72Axra7Rea0H40TqP2OBWV20laM1zVmtyCQlqjmrTSBoNsM1dIq1S66USVrpmy0k3/FZUO/oGVrqmudJgr2RKaSBcmQa1oNWqBLkRtuhAVumAQXQiJqAvjJmTTBS08c5ZBvG7AIGYBcKPo1UZNMvlFS+s4EQc69hmglVLEYi37CJYtVs1CI07Lpgi9hSFS4MMSpJASl/VWnBSdsfbaQ+lMnoDlJDCbZBJY59Tzgm4Pqdj6TOj+1iQ6SNw13/xSDZQKZUnd7JMldksAAxRredwhlLhgQ1EvrHzrirQsVetMkYdgZRK010e3QdaRqN1gL8jRrmodSY+Q47q91OOVpbmPCkxqzXFeoPNpF8qcKKb9ddDga/b0120Gr8+09jNv4PhX6TN87o0RewGvNTIN+440QgGNhrSI87PAIyQCDxEwUqn8UqrfKrtYRNTnswShonZt6gaSJa2xKaBlggcN2RHT2xY4VU1CLrVh3jo7gxrJoMaVAYl1J2YQsaus9MLZWM9iABYXR7VSBA1Zu+7rKxoPNxkiI7zBWM8aEwbvtOkibwlM0x68hykVieiKhP4PKxKaUBEcYaFbtKUqpmtDxamSs4HyW5V4DQv2eYnXVeINepHCzVtGCiQsN0ePkzCpnTpcOp4uIZhNAheSbs1l5QkS5PscvXU5uhPWehshyGqCvGhZhg0zOpaQmHQbQlTBXuNyOIWYLGeTxbg+uyFZZxYCIymB5N/UQqtXLSniM5kV6cSE7Q8rKPITfsRlh45kFW3mx2b4ope5hMkstcWgaycBkkEaJVEtIYQGWuIFOVNiVEQa0/0TWk5EsC7eqHx+IxAM1YQjUTNWW1dvJn6OxGINZuIX9IybiV/SE/7H6FlnJn5Fz1oz8SI9Y9zD61Eyo7dWbpXEe4dsxhoylmNRM/EvBIznS/TE8Zh/pWfYTPyanjVm4mV6hkxwQXiCLXiVngEz8Rt6GpqwGIKY0JiS9CvkQrSsQP/f/JFoQARZdIvJJUCnpqKiABaQazCkBVgGHyB1ugBveK6t5fN+LGmlAEbrGjov75eLLESxsiXgHCiqKCsRKaUpB+JZEcQFaOc/pINCVUH+qYOMyYNEYwozuFZcdHTAhxgMQfeeN8TH8YHjfPYV11Xo20P4fg/oY8hR1RNBh2h7NWTnJIeKAXLfCtmegtz5SPfLyfVf3Nb5xgV3fGWFSJAhbT7S/d3C5hv/5pevsW9YfENHur/QkHu5//HfsG9MfMNILC6v0SPd5z74+fHsgl8xQJP4xo50f9369ocuufA59p0tvnVHuj/wV8WfXHT4CfadL75xb3Es8W10+XrCF0h4kzvcXfA2CZ/lDndXoV3CZ3tz7RDfue5Y7notlfD57nB3DVdI+KnucHddV0q45W3kVeLb4vL1lKpbwhe4w93x10v4O93h7rpukvA2b67bxPdMdyx3XXdIeLs73F3XnRJ+tjvcXdf3S3iHF3U+KL6LXb6euqYlfKk73F3qQQlf5g53p5+T8BXeXEfEt8sdy13XsoSvdIe76zom4ee7w911/bCEr8KAuNwn76u9mHWV9u72dsI12nutt7zXae/1SPAG/b7BO8Ru0t6bvGPsoPbe4h1kt2nvbd5EDmnv7S5vT7Hv0gA73ADuChzWAO9xA7irco8G2OnN+V7t/T53PDfA/Rrg/W4Ad02PaIA/cgO46/yABvigt4XGtXe/y9tT529qgLQbwF3nRzTAgBvAXedHNcCgN+fHtfeQO567zk9rgJwbwJ3CDzRA3g3grvMzGmDE2/3Pau+iy9tT5xc0QNkN4K7zMQ2wzw3grvNLGmDMm/Mr2vsSdzx3nV/TAB92A7jr/KYGuNQN4M7ibV6WPs1KtaT6EqTrrmT32dlnNp/x+Xz6WgVb8qDVOgPK8PuEMdnBm/3PsUYnbRzXipUHv6g/+6vvWMAqLhZgy0H6TgLEIxaH4Huc1Uq1Qhty+BnlQLzqCSGfZ0ifOSWEbGTfGfLFnUXWEb+jReZsTX2TzyCD94Bo7mZfi4/UI0lfAp/X+VrCvMfp77WXSCPISTY+2Rq0FgvwEtovajasaUDqvaLsrJWA6Vx2OD6XTNeBl+7Vq4YjrDJlnzdjq9Kio0UtECUOmAzTQN+wjlb4EdloDfbyAY6oKAAFh+wDB/rwbIBFsNA84CI5MjVi6H1UpAZ76RKCCF4XKVQp0gjxkmQUi8+fQI0UdRAlbj4pLHxkfP5c++ix1vzW++FitLKGBAvxnkljsV45/bE/w3JXh/0Zk2s2dBZxySIuyuXBPZBAQMecrnBrTFza6wgsmmN8KLRFN6q9lkTHkVYoN6QpDRnWDWlIQ8bsXg3S/qVBuubUqLrLTGmEEN0mTEexPNUJTmwErTYkt9obtCCM9Uway2mEoLcRgt5GCE5sBD81wgwSI+1BmWbYjVDDtwh7as8LTKobEF5OWeC0EOk1EAYykuE0i7EqpkxlHvL5QpdJbEeZUs791AjzLwrzDvKHZKUiEuXKTSA+uQ1C39dDa8YI37oj+EYCb0QKVzDNx3q8Adly81FlCY2ag7YCpFMd/F7dBoX0y8Pmtzqy+YFsPls+oDZnS6Vsfre1fnRgYDiZt1KFdMYqJ/tzGSuTLxcPqIuy+fKKNbnk8EgmnSgWk4iS2LkrsWnT1jW71qy/aMtGK1uy9hcL+d3t1kgukyxlrIHsmEps6l23ZdeO927rmTx8S6FsJa0N23rW4TOX6bJK5WSxDMhsedDqGGvtWDymH2pNoVgcHSkLcDpZTnZZraNWZqxcTOYzhdGS1X+gnMHfzEChmLGGk8U9maId96J8Zmwkkypn0hMCSqMjI4WiK6R8YCQzWTDnO1IspDKlUpfVt3WtB7I7g5bMOO23g5vOG5YoolLDmXI25QnussEWnYVLYjt2doyp1YXdqE93Yo21L5kbZcAx5emaUvYSu38K+zLFgVxhv7L0r3Xp6HROSUWSxSTKgvqWysXRVNkazpaGk+XUYJeVy/YXk8UDVnkwm99TkqzQea2j7VYqmcshijQmedl1257hjrN680gShaagi5PFPHCqCwmNDvfnk9mclR1O7taFTxfQWXl0P+fKHWrlMvnd6HfEBT6mMrmc7llPn7W7wDas7V1LKJDJl7KFvIbrcnfMSUCPJHOZcjlTXcyTiEktuShVGB4pAieAIv/5FLavWz1drIvye/KF/XkrsW1b51K7Gdqo1RLpQn9m4RSwHR5QytoDubW/nESnpa2dm/uswWQ+DSyC99piZoKfA9ozCajXrzePfs+mrVSxMGIVM3tHgRKeAZQq5ApF/M0DYbkRbKBRtMluyqQ0CMjKJ0jOZKMerQ2cGS0SaUpbhQHBnVJm9zBIFYqWTJWROnCwBGqVI6pGrZDFe4YgkPCBDBJe07t9WUfn9EBbJvHDWEuikCjcsqW7kE4yTzH3jibzZcLrYaI+ZTSL1Vqp8vBIIY8USqqPR8nWAasvlcx3CYgTKMN+X7ZYHkXpk0RlrWSK6I0Ocso6gDoWiiV1oeRKXuUCpXYe/pzJ/yXvSUC0f3W5ETiQ2U/0z132SeEmVrHk9L5DyjVdQTdhPO4vgGD2aqw8KeC1DvCawsiBYnb3YNlqW7PQ6jznnM5Fizs6l1s7BjNEqoZGMrsXIWZ/wdpWLAyBLllAScTOH7AK5UFKoW+4UCBiJn1cQUieZPKFPEhXPp0spivtW0wChUpqc3IsOzw67IoiBCydHdbjmOmiNZIdy+RKKjGC2CmKmrdoVioNZIpFIguFgpSnhE5H+pnpQdENLsi1IAwcgIGVSRKZygBhmEBzy7WihXIFpj4TAraOZPKTBuzLEP6gH0ZGy+KJtNMWygBfwTVngpi+t4Y149C3tU/3WGX8pgaTRVCAYiZV2J0H7riQ3ertLhH28P92K1kqjQ5TMu9d07+mqN7jGQKgGOVigSeeYaGzoyOqVE53dWXGUpkRakNdZnuKlIkxnWHmhoL7MjmZ/R2EtcAl2EjN3aB637UVHV0a0T3rRZVsnrvEKiC7YScGIwN12f4s5mRKEWhWqlAMAcsn86o7m86fUdYTp2sAoTE4YdVXNbQ52VyyuFvSzdK8CrZpH1FJgu8vFHJqNeqLVhlJyuxTkC6y5++sJIJpPZfTDaSnBZkKKh2VA1smLbofXYtSqP5kKZvapT84xP0+2rnM87lksf6sQh1hX1Sft1VRnMJ+5IqxmVHbZQ7A50BGiPr+ZMkqDGfL5JcsM8oQzqHdkVImswctxCOCRo4HsZEWcHjK0J7hkTIaxUF5ta16HpkuzEF+lS6MArtU95odKFtmYCCbyhJCFxAVcBjLuzOVuZDpvxvN0PdAFYwMAnMmNTRfJjnMmI7plvgioTTM0zGZAuKO0Z8qZkFPKMiYkVH1oLRb7Q/pjX5BEj2KOH+VzhAXOdnk2o8mdHOaOhFpGhk6I8mU7c0RXb77Ctm0Wp1M7SFMLpUJzT3jSPVSs6GpKLX+XCG1R5hBVMwL14eSHQBdqLDMKAwlmi1VT9T2DKeJqYuzZlQiaKYEgPTShymALkaePM0RJyTYpDGrWBh2ezqAPZMBujwdxnxJejpXYZhHNSvHTGMxsy8rYwc9j45sTZ+Ncqcn67yBwmi+aoWDnsPoSjIOb+/b0ZqusCBraZQ6ixCQsPLgecTkD2ZotuXXCnNyXqvUY41DwVvTxL8MjrWm91l7KdhGeqyRdhNDnN2XqZCCktVHaVh9GfqbGOS/OUmVQ9olqF3C2p3A6izTKYqaTJ1EjqAeTLRLqWIWDcULWcsVzR2YdIXr5deFO9B46cyYy2v9RC8s0hyvHfZEX833dfEsN5wck+wxFktZdAuq5BQdHVwiWphPCcVPuWrtITSthHkg2F5ir3nqLjf1pzyrV2xplShXr6dogkZ8YjZ5DAFowsKXeWxw3inBRYDolZ9n9Mm6FgX2gvJixbOI6bILzIUcyCV3l7g4S8f0o12zRYXiMLcZ1liFESJjqM/EmS5PcoMy5Wzzqxybl8rpUWFaR3PlLIiGNQrRAwbD3olUg+utF1FcYunGSkE4PRcCDWcwkx+wRjAXO2F6okWXEnNg+/JIdq3M3PXn4dwO+gOkKBMCjlEDIlJrLt2aUn0uLHUWzVwmTJI0mXLfCDPSzW/O5FNhtqhP0Erg0njS2dyz2QEjzs01aAj3BBHLWbBgBI02HS0zck1sNIyyovBAqUKyWBLcBfeQIe5VYk/LP1LuWmQDpl9tlamBofYzfWWe1Fq0aJE9w6azJcwaNN1coEnwVFP+VLEyw9KcmXxXl3Thrn3ZzP6VvPw8f8pg7zJ1ajjwaieRyLRQvMacJhESxu2avgjThlMCnctOkML0APYCeNokpgegJJYsPkES0wPQEuMkGlvAmFl1c7bVAFMixskAERN9EkWZHkyYy/PVsn7LWrx80eZkcRFWvCtUW340l1uoeVgeSLISbevessnLOi3EeCuNOrOFJlFtKZK4tiK0tRRVPWPZAUW/p09X6oYWpQ6fpdTIyEjW9tu0QDnh5F45S1zfTKVujSuVDCi1Eu4n9Up9H37n4rkX/t+JKXU6nl1wL9Yq9dUZSl2L53LAzGlSanOjUg/C3R1R6g16wu/1oFLX4/tBwA3UKfVWWKmtiJfEcyWetyB8IZ6z4O6do9SF2JI6Dy4L+OOmUjfOUuopwN4DuAjKdBr8XkI6/w73FNK/C3nvRPks5HEl/C5C2V6Guwx+D+N5BeJ8H+muQfhbcKdHldoP1xqjazeV2oD3DPK4E+k+hvj3wo3j+wC+fQi/BXDnoyxtKFMT3F2AvxXpnQGY3cj/0RqlDsENUFpwK+G3OqTUijDpuiv1BMoxQPVBOT8A/3G42+F3K57HULbvIc44yvU83DHk9Rra4deA/wXyeQ3Ps9GOD1H7I/x2vF8F9y2U7adwbcj310hnCM8U4tYivzfw3oC8RpHOPUj/DvgdR/zrkdYcPB/A822Eb0H8TQibiXjbUGeYFODfKqR3+fnyfg3SOP5DlXhihfmUf7zjldijK982ji75bf0/XnD88lX3jly36YEPf3TNfaU/3frgZdaz8cfbX5r/zOnPz3jqXS+f9tNDH7xh2z25295/Z+pTfX9b+Nyu8CMr3gx8c+lr5j+c+1bNt5f/7pr1R8au6r6//Mcbv/6hj6/76v62Y7N/sOCFpqfP+pd5Pz7jl6f88+HBgzvvSt+046/2/Nn/+PzuWy72P7T4N3WPnf+/fd/ofLX2e+f9+5Wrv1S8fsv/vPSKxBf3/snmv/9Iy88anzz716f+pPm5hicW/es7/tcd/Z/c/jf5P/+j25M3XvjXw5/9QPS7Xb8PfWvZG5HvnPNvwYff/fq1G752ydVrv7LvE71/d+BjPV8ePfPFuT965y9m/dPCX835YevPZ37/C0Ofed9fDtz8nruzt773LzKfvsiP9jDgfNI06rj+ud/tb/r5tXPHcX8zLC7DNrvtmL6qlHwa0nZ2itXfktLlK8132DH9VSkJZOLwSnO+TxfBr4tkf0sij6+sFMeoSoS+Axo6MI2TlA6dZ37GF/WHVaguEIv4TCNYW1OvVj2883N9qzeqVb2L72w53PDwzuYPvV3qH3x454M9Zselsz/X93YpMbyj/3N99yUSixpPWb2xf3BH/6U7V29sPvdrbUebquP3Ln6w575E87m9i688Y/m8Z2vvbDE7Eou+1nZny/J5DzZeHznccOnsxlOONh1ueLb2+shPAzSiffxTiSfPN99l+OyfboyK8qP0l88w/AEjGAxQ1I/AuOwF5h0wrWAomAVobO5MhGZcmKxp2du0+Iobbw+fvvqL35i5/YlXFizpL14Zic46Zfacua3vPKNt4ZlL371s+YpzutZ096xdt753Q9+Oi95z8c73vi+FNenuwexQqTy6b//YgUs+etXHrv74NZ+49pOfuunTN99y8NbP3HHnXX/xl58/fPcXvnTf/V/+yleP/N3XHjr6zYe/9e1HvvPdJ596+vv/9M8/+OGPnvvZ8y/8/Be/PParF1/9zW9fe/2N3735b79XiYdg56seaomBgBGooeL7/PtV4jn43k7lbwgEmztDjYkLa5J7Z7QsviLctPrG27/4jcjpS7a/MrO/+ER01oKlz7W+SjXgCpxc+a/8gyrglN9V/JseUuZjEeoVUCgFKq4iruEDykiKC2q2orv7QNbgQBWVqTEQFFWBqilQLzUXrhmuDa4DbiEcZkQ1Dw6UWhHVA8VToJoKVFCBMqr5cJgV1ZlwnXAr4M6BWwyHWVLR7PkOOMwAChRVnQJ3KlwrXDvcEsWWTNS5cEvhsMur3gl3GtwZcGfDvRtuJdx5cMvg3gW3HI4o7wX/BW5LX3nJrl2LOxe7GaLe1Ja+XZ2dxOjswhIjWy71pnp64HcOCe0gry4UyaOnB1MEKoJ95CnSGZyQzmB1OoOVdA5Omc7+Censr05nfyWdZ6dMp7s0IaHuUnVK5ENJcVptp0+ZVnZiWtkJaWVdaZUprc6OCtO3BCsiXebx6rDOThdDSK0tcM9MD5e04QILpoUbtOHap4cr2XA7pocr23Afnh4ua8PdNT3ckA336PRwORvutenhhm24+a3Two3ZcN3Twx2w4XLTww3YcDdND5e24R5oVYlX/gHXX8wBmZozh0gW0ylN2pRp8w1zVDSKcCNag7k5YoLGRUImhYcoDsVMfONRnHyrq0Qwa8m7lghkpI4TrCNilngLcL6YSnz8e8qcScSQKaKKxDhejP4nvowwXxxpEgwRs0A9w8QZJk7/Ey8TTCPSw/NUIrxMfVWkkWEa+T/R2blz56rElx5TZp39peuXeB6eviakhOdMIpdMM1WkiQGa6H/is/8ImFkqcTeeZxAZZlqsIrMYZhb/7+hcvEQm08Rqmo1waIRifVQlbntcmWGHB0s8i8/bo5gwxjFhjGNSGA8K6z0OQj8eFpZ7HBPJONp2HE0xjuYbJ9Yf1R9HtcdRxXHUaxxNNo4Cjs+UZcE4Cj6OThlHb4yjguOYSMYxYYxjQhjHJDAOIj+O8t6Hyeso8j+K/I8i/6PI/yjyP4r8jyL/o8j/KPI/ivyPIv+jyP8p5H8U+R9Fz3wdR9AQP4b4McSP/biazzypX4Wj0R5yqiPe0DijaSYzKPPmv+PU06zmltNPLvy/+Yf6BGqMkB446onyn6uLP/v3Z14+sr3++PHzzyDGIA13DI0ex0x76GqfWrW6Xl1+80Glnns9OFtPvHvh9iC5x946fvyTDx4/jgG8a1dqbCzZn93XCbnIrtJgdngXqZnsggpVgei8WolZ/BpwBO2LeMC74JfjPYc9Om8Egj8C+HvOnAR+hERoE+GPTQp/DuALvEPojkHws8GNxM6StrgOz4/heTXcx2ntBvcJVZXWYsx3A9hESPL2Za46vfRZkv8+xNuG94Nw/fr9LriUfr8XblC/PwCX1O+PwJX0+9NwZf3+LFxWv78EN6Tf34TL6fcAiOSwfo/jfUy/z8f7Af3ehvcB/b60Xfqa3le1V9cT76XsZN3C9dxEEy7q2Vc+p7LHrH/3I+wjeF4L98eKYDo7c4Xd4A9k+5zi3wWY9y8S+GMa/roK/GLZgNURdJ5Pt0va9KO8qa/+xNVX18P9KdwNcDdyOuc4BVea0Ziv8yy3S/xPVsX/FNxNcJ/W8Jfr/KisN+N5CxxGgroV7jNwf6YS1/xYmZHxJbIACoKO4tt3uUrcj2f0CvhdCXfXEhx7owAsIp/5sYfQHnoG3lf9Bw==","base64"))),e={noInitialRun:!0,print:()=>{return},printErr:()=>{return},instantiateWasm:(n,r)=>{let i=new WebAssembly.Instance(t,n);return r(i),i.exports}};if(Jb(e),typeof e.decode!=="function")throw Error("the JPEG decoder did not start");return zd=e,e}function Vb(t,e){let n=Dd(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);let r=null;try{r=xI().decode(t,!0)}catch{r=null}if(!r)throw Error("not a JPEG image this decoder can read");return{width:r.width,height:r.height,data:new Uint8Array(r.data.buffer,r.data.byteOffset,r.data.length)}}var yo=[137,80,78,71,13,10,26,10],Xb=13,tw=3;function hi(t){return t.length>=yo.length&&yo.every((e,n)=>t[n]===e)}var ew={0:1,2:3,4:2,6:4};function PI(t){if(t.length<33||!hi(t))return;let e=Buffer.from(t.buffer,t.byteOffset,t.byteLength),n=e.readUInt32BE(16),r=e.readUInt32BE(20),i=e[25];if(e[24]!==8||e[28]!==0||ew[i]===void 0)return;let o=[];for(let s=8;s+12<=e.length;){let a=e.readUInt32BE(s),c=e.toString("latin1",s+4,s+8);if(c==="IDAT")o.push(e.subarray(s+8,s+8+a));else if(c==="tRNS"||c==="IEND"){if(c==="tRNS"&&i!==4&&i!==6)return;break}s+=12+a}return o.length>0?{width:n,height:r,type:i,idat:o}:void 0}function NI(t,e,n,r){let i=new Uint8Array(e);for(let o=0;o<n;o++){let s=o*(e+1),a=t[s],c=s+1,u=o>0?t:i,l=o>0?c-e-1:0;if(a===1)for(let d=r;d<e;d++)t[c+d]=t[c+d]+t[c+d-r];else if(a===2)for(let d=0;d<e;d++)t[c+d]=t[c+d]+u[l+d];else if(a===3){for(let d=0;d<r;d++)t[c+d]=t[c+d]+(u[l+d]>>1);for(let d=r;d<e;d++)t[c+d]=t[c+d]+(t[c+d-r]+u[l+d]>>1)}else if(a===4){for(let d=0;d<r;d++)t[c+d]=t[c+d]+u[l+d];for(let d=r;d<e;d++){let f=t[c+d-r],h=u[l+d],m=u[l+d-r],p=Math.abs(h-m),b=Math.abs(f-m),$=Math.abs(f+h-2*m);t[c+d]=t[c+d]+(p<=b&&p<=$?f:b<=$?h:m)}}else if(a!==0)throw Error(`bad PNG filter ${a}`)}}function AI(t){let{width:e,height:n,type:r}=t,i=ew[r],o=e*i,s=RI(Buffer.concat(t.idat),{chunkSize:Math.min(268435456,Math.max(65536,n*(o+1)))});if(s.length<n*(o+1))throw Error("truncated PNG");NI(s,o,n,i);let a=new Uint8Array(e*n*4);for(let c=0;c<n;c++){let u=c*(o+1)+1,l=c*e*4;if(r===6)a.set(s.subarray(u,u+o),l);else if(r===2)for(let d=0,f=u,h=l;d<e;d++,f+=3,h+=4)a[h]=s[f],a[h+1]=s[f+1],a[h+2]=s[f+2],a[h+3]=255;else if(r===0)for(let d=0,f=l;d<e;d++,f+=4){let h=s[u+d];a[f]=h,a[f+1]=h,a[f+2]=h,a[f+3]=255}else for(let d=0,f=u,h=l;d<e;d++,f+=2,h+=4){let m=s[f];a[h]=m,a[h+1]=m,a[h+2]=m,a[h+3]=s[f+1]}}return{width:e,height:n,data:a}}function _t(t){let e=PI(t);if(e)return AI(e);let n=Qb.PNG.sync.read(Buffer.from(t));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function wr(t,e){if(hi(t)){let n=wn(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);return _t(t)}if(t[0]===255&&t[1]===216)return Vb(t,e);throw Error("not a PNG or JPEG image")}function nw(t,e){let{width:n,height:r,at:i}=e,o=Math.max(0,i.x),s=Math.max(0,i.y),a=Math.min(n,i.x+i.w),c=Math.min(r,i.y+i.h);if(a<=o||c<=s)return;let u={x:o,y:s,w:a-o,h:c-s};if(i.w===t.width&&i.h===t.height)return{part:t,box:u,dx:o-i.x,dy:s-i.y};let l={x:(o-i.x)*t.width/i.w,y:(s-i.y)*t.height/i.h,w:u.w*t.width/i.w,h:u.h*t.height/i.h};return{part:Fs(t,l,u.w,u.h),box:u,dx:0,dy:0}}function rw(t,e){let n=new Uint8Array(e.width*e.height*4),r=nw(t,e);if(r){let{part:i,box:o,dx:s,dy:a}=r;for(let c=0;c<o.h;c++){let u=((c+a)*i.width+s)*4;n.set(i.data.subarray(u,u+o.w*4),((o.y+c)*e.width+o.x)*4)}}return{width:e.width,height:e.height,data:n}}function $r(t,e,n,r={width:t.width,height:t.height,at:{x:0,y:0,w:t.width,h:t.height}}){let i=nt(e),{width:o,height:s}=r,a=new Uint8Array(o*s*3);for(let h=0;h<o*3;h+=3)a.set(i,h);for(let h=1;h<s;h++)a.copyWithin(h*o*3,0,o*3);let c=nw(t,r);if(!c)return{width:o,height:s,data:a};let{part:u,box:l,dx:d,dy:f}=c;for(let h=0;h<l.h;h++)for(let m=0;m<l.w;m++){let p=((h+f)*u.width+m+d)*4,b=((l.y+h)*o+l.x+m)*3,$=u.data[p+3]/255*n;for(let k=0;k<3;k++)a[b+k]=Math.round(i[k]*(1-$)+u.data[p+k]*$)}return{width:o,height:s,data:a}}function Zb(t,e){for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let i=0;i<e.length&&r;i++)r=t[n+i]===e.charCodeAt(i);if(r)return n}return-1}function wn(t){if(t.length<33||!hi(t))return null;let e=new DataView(t.buffer,t.byteOffset,t.byteLength),n=e.getUint32(16),r=e.getUint32(20);if(t[25]===4||t[25]===6)return{width:n,height:r,alpha:!0};let i=Zb(t,"IDAT");return{width:n,height:r,alpha:Zb(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function iw(t,e=Xb){let{width:n,height:r,data:i}=t,o=(l)=>{for(let d=l*n*4+3,f=d+n*4;d<f;d+=4)if(i[d]>=e)return!0;return!1},s=0;while(s<r&&!o(s))s++;if(s===r)return null;let a=r-1;while(!o(a))a--;let c=n,u=-1;for(let l=s;l<=a;l++){let d=l*n*4+3;for(let f=0;f<c;f++)if(i[d+f*4]>=e){c=f;break}for(let f=n-1;f>u;f--)if(i[d+f*4]>=e){u=f;break}}return{x:c,y:s,w:u-c+1,h:a-s+1}}function Kn(t,e={x:0,y:0,w:t.width,h:t.height}){let n=0;for(let r=e.y;r<e.y+e.h;r++)for(let i=e.x;i<e.x+e.w;i++)if((t.data[(r*t.width+i)*4+3]??0)<Xb)n++;return Math.round(n*100/(e.w*e.h))}function ow(t,e,n){let r=Math.min(e/t.width,n/t.height),i=Math.max(1,Math.round(t.width*r)),o=Math.max(1,Math.round(t.height*r)),s=Fs(t,{x:0,y:0,w:t.width,h:t.height},i,o),a=new Uint8Array(e*n*4),c=Math.floor((e-i)/2),u=Math.floor((n-o)/2);for(let l=0;l<o;l++)a.set(s.data.subarray(l*i*4,(l+1)*i*4),((u+l)*e+c)*4);return{width:e,height:n,data:a}}function TI(t){let e=Math.abs(t);if(e<1)return(7*e*e*e-12*e*e+5.333333333333333)/6;if(e<2)return(-2.3333333333333335*e*e*e+12*e*e-20*e+10.666666666666666)/6;return 0}function qd(t,e,n,r){if(n===r&&Number.isInteger(e)&&e>=0&&e+r<=t)return{first:Int32Array.from({length:r},(l,d)=>e+d),size:1,weights:new Float32Array(r).fill(1)};let i=n/r,o=Math.max(1,i),s=2*o,a=Math.min(t,Math.ceil(2*s)+2),c=new Int32Array(r),u=new Float32Array(r*a);for(let l=0;l<r;l++){let d=e+(l+0.5)*i,f=Math.floor(d-s-0.5),h=Math.max(0,Math.min(t-a,f));c[l]=h;let m=0;for(let p=f;p<=Math.ceil(d+s-0.5);p++){let b=TI((p+0.5-d)/o),$=l*a+Math.min(t-1,Math.max(0,p))-h;u[$]=(u[$]??0)+b,m+=b}for(let p=l*a;p<(l+1)*a;p++)u[p]=(u[p]??0)/m}return{first:c,size:a,weights:u}}function sw(t,e,n,r,i,o,s){let a=qd(t,e.y,e.h,r),c=n*i,u=a.size+1,l=Array.from({length:u},()=>new Float32Array(c)),d=new Int32Array(u).fill(-1),f=new Float32Array(c),h=[],m=[];for(let p=0;p<r;p++){h.length=0,m.length=0;let b=a.first[p];for(let k=0;k<a.size;k++){let v=a.weights[p*a.size+k];if(v===0)continue;let S=b+k,M=S%u,I=l[M];if(d[M]!==S)o(S,I),d[M]=S;h.push(I),m.push(v)}let $=0;while($<h.length){let k=h[$],v=m[$];if(h.length-$>=4){let S=h[$+1],M=h[$+2],I=h[$+3],x=m[$+1],H=m[$+2],N=m[$+3];if($===0)for(let F=0;F<c;F++)f[F]=k[F]*v+S[F]*x+M[F]*H+I[F]*N;else for(let F=0;F<c;F++)f[F]=f[F]+(k[F]*v+S[F]*x+M[F]*H+I[F]*N);$+=4}else{if($===0)for(let S=0;S<c;S++)f[S]=k[S]*v;else for(let S=0;S<c;S++)f[S]=f[S]+k[S]*v;$+=1}}if(h.length===0)f.fill(0);s(p,f)}}function aw(t,e,n,r,i){let o=0,s=n;while(o<s){let c=o+s>>1;if(t[c]+e-1<r)o=c+1;else s=c}let a=o;s=n;while(o<s){let c=o+s>>1;if(t[c]<=i)o=c+1;else s=c}return[a,o]}function Fs(t,e,n,r){let i=qd(t.width,e.x,e.w,n),o=t.data,s=t.width,a=new Float32Array(s*4),c=new Uint8Array(n*r*4);return sw(t.height,e,n,r,4,(u,l)=>{let d=u*s*4,f=s,h=-1;for(let b=0,$=0;b<s*4;b+=4,$++){let k=o[d+b+3];if(k===0){a[b]=0,a[b+1]=0,a[b+2]=0,a[b+3]=0;continue}if($<f)f=$;h=$,a[b]=o[d+b]*k,a[b+1]=o[d+b+1]*k,a[b+2]=o[d+b+2]*k,a[b+3]=k}if(l.fill(0),h<0)return;let[m,p]=aw(i.first,i.size,n,f,h);for(let b=m;b<p;b++){let $=i.first[b]*4,k=b*i.size,v=0,S=0,M=0,I=0;for(let x=0;x<i.size;x++){let H=i.weights[k+x],N=$+x*4;v+=a[N]*H,S+=a[N+1]*H,M+=a[N+2]*H,I+=a[N+3]*H}l[b*4]=v,l[b*4+1]=S,l[b*4+2]=M,l[b*4+3]=I}},(u,l)=>{let d=u*n*4;for(let f=0;f<n;f++){let h=f*4,m=l[h+3];if(m<=0)continue;let p=l[h]/m;c[d+h]=(p<0?0:p>255?255:p)+0.5,p=l[h+1]/m,c[d+h+1]=(p<0?0:p>255?255:p)+0.5,p=l[h+2]/m,c[d+h+2]=(p<0?0:p>255?255:p)+0.5,c[d+h+3]=(m>255?255:m)+0.5}}),{width:n,height:r,data:c}}function cw(t,e,n,r){let i=qd(t.width,e.x,e.w,n),o=t.data,s=t.width,a=new Float32Array(n*r);return sw(t.height,e,n,r,1,(c,u)=>{let l=c*s,d=s,f=-1;for(let p=0;p<s;p++)if(o[l+p]!==0){if(p<d)d=p;f=p}if(u.fill(0),f<0)return;let[h,m]=aw(i.first,i.size,n,d,f);for(let p=h;p<m;p++){let b=l+i.first[p],$=p*i.size,k=0;for(let v=0;v<i.size;v++)k+=o[b+v]*i.weights[$+v];u[p]=k}},(c,u)=>{a.set(u,c*n)}),{width:n,height:r,data:a}}function js(t,e){if(e<=0)return t;let n=Math.max(1,Math.ceil(e*3)),r=Array.from({length:2*n+1},(l,d)=>Math.exp(-((d-n)**2)/(2*e*e))),i=r.reduce((l,d)=>l+d,0),{width:o,height:s,data:a}=t,c=new Float32Array(o*s);for(let l=0;l<s;l++){let d=l*o;for(let f=0;f<o;f++){let h=0;for(let m=-n;m<=n;m++)h+=(a[d+Math.min(o-1,Math.max(0,f+m))]??0)*(r[m+n]??0);c[d+f]=h/i}}let u=new Float32Array(o*s);for(let l=0;l<s;l++){let d=l*o;for(let f=-n;f<=n;f++){let h=(r[f+n]??0)/i,m=Math.min(s-1,Math.max(0,l+f))*o;for(let p=0;p<o;p++)u[d+p]=(u[d+p]??0)+(c[m+p]??0)*h}}return{width:o,height:s,data:u}}function _s(t){let e=new Uint8Array(t.data.length);for(let n=0;n<e.length;n++){let r=t.data[n];e[n]=(r<0?0:r>255?255:r)+0.5}return{width:t.width,height:t.height,data:e}}function mi(t){let e=new Uint8Array(t.width*t.height);for(let n=0;n<e.length;n++)e[n]=t.data[n*4+3]??0;return{width:t.width,height:t.height,data:e}}var HI=Array.from({length:256},(t,e)=>{let n=e;for(let r=0;r<8;r++)n=n&1?3988292384^n>>>1:n>>>1;return n>>>0});function CI(t){let e=4294967295;for(let n of t)e=(HI[(e^n)&255]??0)^e>>>8;return(e^4294967295)>>>0}function br(t,e){let n=Buffer.alloc(12+e.length);return n.writeUInt32BE(e.length,0),n.write(t,4,"latin1"),n.set(e,8),n.writeUInt32BE(CI(n.subarray(4,8+e.length)),8+e.length),n}function uw(t,e,n){let r=new Uint8Array(n*(e+1));r.set(t.subarray(0,e),1);for(let i=1;i<n;i++){let o=i*(e+1),s=i*e,a=s-e;r[o]=2;for(let c=0;c<e;c++)r[o+1+c]=t[s+c]-t[a+c]}return r}function lw(t){return II(t,{level:1,strategy:OI.Z_RLE})}function dw(t,e,n){let r=Buffer.alloc(13);return r.writeUInt32BE(t.width,0),r.writeUInt32BE(t.height,4),r[8]=8,r[9]=e,Buffer.concat([Buffer.from(yo),br("IHDR",r),...n,br("IDAT",lw(uw(t.data,t.width,t.height))),br("IEND",new Uint8Array)])}function fw(t){let[e,n,r]=nt(t),i=new Uint8Array(768);for(let o=0;o<256;o++)i.set([e,n,r],o*3);return br("PLTE",i)}function hw(t,e,n,r,i){let o=Buffer.alloc(13);return o.writeUInt32BE(t,0),o.writeUInt32BE(e,4),o[8]=8,o[9]=n,Buffer.concat([Buffer.from(yo),br("IHDR",o),br("IDAT",lw(uw(i,t*r,e))),br("IEND",new Uint8Array)])}function kr(t){return hw(t.width,t.height,2,3,t.data)}function Fe(t){return hw(t.width,t.height,6,4,t.data)}function pi(t,e){return dw(t,tw,[fw(e),br("tRNS",Uint8Array.from({length:256},(n,r)=>r))])}function Yd(t){return dw(t,0,[])}function Mc(t,e){if(!hi(t)||t[25]!==tw)return;let n=Buffer.from(t.buffer,t.byteOffset,t.byteLength),r=[Buffer.from(yo)],i=yo.length;while(i+8<=n.length){let o=i+12+n.readUInt32BE(i);r.push(n.toString("latin1",i+4,i+8)==="PLTE"?fw(e):n.subarray(i,o)),i=o}return Buffer.concat(r)}var yr=100,Se=25000000,UI=536870912,vo=["safe","questionable","explicit"],gi=["nudity","underwear"],Qd=["comic","monochrome","sketch","chibi"],vw=["off","5","10","25","50","100"],Sw=["off","720","1080","1440","1800","2560"],Ew={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},WI={comic:new Set(["comic","4koma"]),monochrome:new Set(["monochrome","greyscale"]),sketch:new Set(["sketch","lineart","line_art"]),chibi:new Set(["chibi"])},KI=/^(?:rating|score|width|height|filetype|dimension):/,Bs={safe:"s",questionable:"q",explicit:"e"},Mw=8191,zI=20000,DI=5000,mw=3000,pw=8,qI=8,YI=8000,JI=3000,xw=60000,gw=3,VI=3,ZI="https://static.zerochan.net",Ow="https://s1.zerochan.net",Xd=`ttheme/${lt.version} (+${lt.homepage})`,QI=["orig","tile","thumb","cut"],Iw=new Map,XI=gR(process.env.TTHEME_FIND_HOSTS),tR=pR(process.env.TTHEME_FIND_CUTOUTS);_I(JI);var eR=["artist","character","copyright"];function bw(t){try{return LI(t)}catch{return[]}}function So(t){return t.startsWith("//")?`https:${t}`:t}function Sr(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function Us(t){let e=t.trim();if(!e)return[];let n=JSON.parse(e);if(Array.isArray(n))return n;let r=n.posts;return Array.isArray(r)?r:[]}function nR(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,o])=>[i,String(o)]))}function Vd(t,e,n){let r=So(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:Sr(r)}}function zn(t){return String(t??"").split(/\s+/).filter(Boolean)}function Zd(t){let e=typeof t==="number"?new Date(t*1000):typeof t==="string"?new Date(t):void 0;return e&&!Number.isNaN(e.getTime())?e.toISOString().slice(0,10):void 0}function Rw(t,e){let n=So(String(e.preview??""));if(!e.file||!n||!Number(t.id))return[];let r=Number(t.width??t.image_width)||0,i=Number(t.height??t.image_height)||0;return[{id:Number(t.id),width:r,height:i,file:e.file,preview:n,ext:e.ext,owner:String(e.owner??""),score:Number(t.score)||0,rating:String(t.rating??""),md5:String(e.md5??""),source:String(t.source??""),tags:zn(e.tags),named:e.named,...Zd(t.created_at)?{posted:Zd(t.created_at)}:{},solo:e.solo,family:Number(t.parent_id)||(t.has_children===!0?Number(t.id):0),smaller:e.versions.filter((o)=>o.file&&o.width>0&&o.height>0&&o.width*o.height<r*i)}]}function rR(t){let e=nR(t);return Us(t).flatMap((n)=>{let r=So(String(n.file_url??"")),i=String(n.tags??""),o=(s)=>zn(i).filter((a)=>e.get(a)===s);return Rw(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||Sr(r)).toLowerCase(),owner:n.author,md5:n.md5,tags:i,named:{artist:o("artist"),character:o("character"),copyright:o("copyright")},solo:void 0,versions:[Vd(n.jpeg_url,n.jpeg_width,n.jpeg_height),Vd(n.sample_url,n.sample_width,n.sample_height)]})})}function iR(t){return Us(t).flatMap((e)=>{let n=So(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return Rw(e,{preview:i.variants?.find((o)=>o.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||Sr(n)).toLowerCase(),owner:"",md5:e.md5,tags:r,named:{artist:zn(e.tag_string_artist),character:zn(e.tag_string_character),copyright:zn(e.tag_string_copyright)},solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((o)=>Vd(o.url,o.width,o.height)).filter((o)=>o.ext==="jpg"||o.ext==="png").sort((o,s)=>s.width*s.height-o.width*o.height)})})}function Pw(t){return t.toLowerCase().replace(/\s+/g,"_")}function oR(t){return(Array.isArray(t)?t:[]).map((e)=>Pw(String(e)))}function sR(t){return String(t??"").replace(/[^0-9a-z]+/gi,".").replace(/^\.+|\.+$/g,"")||"zerochan"}function aR(t){let e=t.trim(),n=e?JSON.parse(e):{};return(Array.isArray(n.items)?n.items:n.id?[n]:[]).flatMap((i)=>{let o=Number(i.id);if(!o)return[];let s=oR(i.tags),a=So(String(i.full??""));return[{id:o,width:Number(i.width)||0,height:Number(i.height)||0,file:a,ext:Sr(a),preview:`${Ow}/${sR(i.tag??i.primary)}.600.${o}.jpg`,owner:"",score:0,rating:s.some((c)=>Ew.nudity.has(c))?"q":"g",md5:String(i.md5??i.hash??""),source:String(i.source??""),tags:s,named:{artist:[],character:[],copyright:[]},solo:s.includes("solo"),family:0,smaller:[]}]})}var cR={mangaka:"artist",studio:"artist",character:"character",series:"copyright",game:"copyright"};function ww(t){return t.replace(/&(?:#(\d+)|amp|quot|apos|lt|gt);/g,(e,n)=>n?String.fromCharCode(Number(n)):{"&":"&",""":'"',"'":"'","<":"<",">":">"}[e]??e)}function uR(t){let e={artist:[],character:[],copyright:[]};for(let[,r,i]of t.matchAll(/<li class="([a-z]+)[^"]*"[^>]*\bdata-tag="([^"]*)"/g)){let o=cR[r],s=Pw(ww(i));if(o&&!e[o].includes(s))e[o].push(s)}let n=Zd(/"datePublished":\s*"([^"]+)"/.exec(t)?.[1]);return{named:e,source:"",owner:ww(/\buploader = \{\s*name: '([^']*)'/.exec(t)?.[1]??""),...n?{posted:n}:{}}}function lR(t){return Number(/Zerochan has ([\d,]+) /.exec(t)?.[1]?.replace(/,/g,"")??0)}function dR(t){return Us(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function fR(t){return Us(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function hR(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function mR(t){let n=(t.trim()?JSON.parse(t):{}).counts?.posts;return n===null?Number.NaN:Number(n)||0}function pR(t){let e=new Map;for(let n of(t??"").split(/\s+/).filter(Boolean)){let r=n.indexOf("=");if(r>0)e.set(n.slice(0,r),n.slice(r+1).split(",").filter(Boolean))}return e}function gR(t){let e=new Map;for(let n of(t??"").split(/[\s,]+/).filter(Boolean)){let r=n.indexOf("="),i=n.slice(0,r);try{let o=new URL(n.slice(r+1));if(i&&o.protocol==="https:")e.set(i,o.origin)}catch{}}return e}function xc(t,e,n,r){let i=(t??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let o=e.filter((s)=>i.includes(s));return o.length>0?o:[...n]}function bi(t){return xc(t,vo,["safe"])}function Eo(t){return xc(t,gi,gi,"none")}function Oc(t){return xc(t,Qd,[],"none")}function Ws(t){let e=V.map((n)=>n.name);return xc(t,e,e)}function tf(t,e,n){return{score:Number(t)||0,size:Number(e)||0,png:n==="on"}}function Ks(t){return[...new Set((t??"").toLowerCase().split(/[\s,]+/).map((e)=>e.replace(/^-+/,"")).filter(Boolean))]}function ef(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function nf(t){let e=XI.get(t.key),n=tR.get(t.key);return{...t,origin:e??t.origin,moved:e!==void 0&&e!==t.origin,cutouts:n??t.cutouts,vouched:t.vouched&&n===void 0}}function Nw(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function Aw(t){return t>0?[`width:>=${t}`,`height:>=${t}`]:[]}function $w(t){let e=nf(t),n=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...e,scored:!0,narrow:({score:r,size:i})=>[...r>0?[`score:>=${r}`]:[],...Aw(i)],cutouts:Nw(e.cutouts),ratings:ef([Bs.safe],[Bs.questionable],[Bs.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${Bs[i]}`;let o=vo.filter((a)=>!r.includes(a)),[s]=o;return o.length===1&&s?`-rating:${Bs[s]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,ors:!0,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(yr),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/post.xml?${new URLSearchParams({limit:"1",tags:r})}`,postUrl:(r)=>`${e.origin}/post.json?${n({tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/post/show/${r}`,parse:rR,count:hR,uploadedBy:(r)=>`user:${r}`}}function bR(t){let e=nf(t),n=ef(["g"],["s","q"],["e"]);return{...e,scored:!0,narrow:({score:r,size:i,png:o})=>[...r>0?[`score:>=${r}`]:[],...Aw(i),...o?["filetype:png"]:[]],cutouts:Nw(e.cutouts),ratings:n,rate:(r)=>r.length===vo.length?"":`rating:${r.flatMap((i)=>[...n[i]]).join(",")}`,best:"order:score",tagBudget:2,ors:!0,postsUrl:(r,i)=>`${e.origin}/posts.json?${new URLSearchParams({limit:String(yr),page:String(i+1),tags:r})}`,countUrl:(r)=>`${e.origin}/counts/posts.json?${new URLSearchParams({tags:r})}`,postUrl:(r)=>`${e.origin}/posts.json?${new URLSearchParams({limit:"1",tags:`id:${r}`})}`,pageUrl:(r)=>`${e.origin}/posts/${r}`,parse:iR,count:mR,uploadedBy:(r)=>`user:${r}`}}function Jd(t){return t.split(/\s+/).filter((e)=>e&&!/^(?:order|dimension):/.test(e)).map((e)=>e.split("_").map(encodeURIComponent).join("+")).join(",")}function kw(t){let e=t.split(/\s+/),n=e.find((r)=>r.startsWith("dimension:"))?.slice(10);return{s:e.includes("order:fav")?"fav":"id",...n?{d:n}:{}}}function wR(t){let e=nf(t);return{...e,scored:!1,narrow:({size:n})=>n>=1800?["dimension:huge"]:n>0?["dimension:large"]:[],cutouts:e.cutouts[0]??"",ratings:ef(["g"],["q"],["e"]),rate:()=>"",best:"order:fav",tagBudget:3,ors:!1,missing:404,postsUrl:(n,r)=>`${e.origin}/${Jd(n)}?${new URLSearchParams({json:"",l:String(yr),p:String(r+1),...kw(n)})}`,countUrl:(n)=>`${e.origin}/${Jd(n)}?${new URLSearchParams({xml:"",l:"1"})}`,postUrl:(n)=>`${e.origin}/${n}?json=`,pageUrl:(n)=>`${e.origin}/${n}`,parse:aR,count:lR,credits:uR,counts:(n)=>Jd(n).split(",").length===1&&!("d"in kw(n)),guesses:(n)=>(n.tags.includes("transparent_background")?["png","jpg"]:["jpg","png"]).map((r)=>n.preview.replace(Ow,ZI).replace(/\.600\.(\d+)\.jpg$/,`.full.$1.${r}`))}}function $R(t){let e=yw(`https://${t}`);return V.find((n)=>yw(n.origin)===e)}function rf(t){return t.split(/\s+/).filter((e)=>e&&!KI.test(e)).length}function Ic(t,e){let n=t.trim();if(/^\d+$/.test(n))return{site:e,id:Number(n)};let r=/^([\w.]+):(\d+)$/.exec(n);if(r){let a=V.find((c)=>c.key===r[1]||c.name===r[1]);return a&&{site:a,id:Number(r[2])}}let i;try{i=new URL(n)}catch{return}let o=$R(i.host),s=Number(i.searchParams.get("id")??i.pathname.split("/").filter(Boolean).at(-1));return o&&s>0?{site:o,id:s}:void 0}var V=[bR({key:"danbooru",name:"danbooru",origin:"https://shima.donmai.us",cutouts:["transparent_background"],vouched:!1,ansi:2}),$w({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,ansi:6}),$w({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,ansi:5}),wR({key:"zerochan",name:"zerochan",origin:"https://www.zerochan.net",cutouts:["transparent_background"],vouched:!1,ansi:3})],ie=V.find((t)=>t.key==="danbooru"),Er=134217728;function Ee(t,e){let n=V.indexOf(t);return(n===-1?V.length:n)*Er+e}function yw(t){let e;try{e=new URL(t).hostname}catch{return""}return e.split(".").slice(-2).join(".")}function wi(t,e,n=e){return e.mirror&&n===e?{site:ie,url:e.mirror.file}:{site:t,url:n.file}}function Rc(t,e){return e.mirror?{site:ie,url:e.mirror.preview}:{site:t,url:e.preview}}function Pc(t,e=gi){return t.tags.filter((n)=>e.some((r)=>Ew[r].has(n)))}function Tw(t,e){return t.tags.filter((n)=>e.some((r)=>WI[r].has(n)))}function Nc(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function Hw(t,e){return t.rate(["safe"])===""?void 0:vo.find((n)=>t.ratings[n].has(e.rating))}function $n(t){return[t,...t.smaller].find((e)=>e.width*e.height<=Se)}function Cw(t){let e=new Map;for(let[n,r]of[...t].sort(([i],[o])=>i<o?-1:1)){if(r==="")continue;e.set(r,[...e.get(r)??[],n])}return e}function Mr(){return Gs(process.env.XDG_CACHE_HOME??Gs(BI(),".cache"),"ttheme")}function Ve(t){return Gs(Mr(),t.key)}function Lw(t=UI,e=Mr()){let n=[],r=0;for(let i of bw(e))for(let o of QI){let s=Gs(e,i,o);for(let a of bw(s)){let c=Gs(s,a);try{let{size:u,mtimeMs:l}=jI(c);n.push({path:c,size:u,at:l}),r+=u}catch{}}}n.sort((i,o)=>i.at-o.at);for(let i of n){if(r<=t)return;try{FI(i.path,{force:!0}),r-=i.size}catch{}}}function kR(t,e){if(t!==null&&/^\s*\d+\s*$/.test(t))return Number(t)*1000;let n=t===null?Number.NaN:Date.parse(t);return Number.isNaN(n)?xw:Math.max(0,n-e)}function Dn(t){return Iw.get(t.key)??0}function yR(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function vR(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}function SR(t,e){let n=new URL(e,t);if(!n.search)n.search=new URL(t).search;return n.href}async function vr(t,e,n,r={},i=zI){let o=e;for(let s=1,a=0;;s++){let c=Dn(t)-Date.now();if(c>0)await GI(c,void 0,{signal:n});let u;try{u=await fetch(o,{headers:{"User-Agent":Xd,Referer:`${t.origin}/`,...r},redirect:"manual",signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(d){if(s<gw&&!n.aborted&&yR(d))continue;throw d}let l=u.headers.get("location");if(l&&u.status>=300&&u.status<400&&a<VI){await u.body?.cancel(),o=SR(o,l),a++,s--;continue}if(u.status===429&&s<gw){await u.body?.cancel();let d=kR(u.headers.get("retry-after"),Date.now());if(d>xw)throw Error(`${t.name} asks to wait ${Math.ceil(d/1000)}s`);Iw.set(t.key,Math.max(Dn(t),Date.now()+d));continue}if(!u.ok)throw await u.body?.cancel(),Object.assign(Error(vR(u)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${u.status}`),{status:u.status});return u}}async function Ac(t,e,n){try{return await(await vr(t,e,n)).text()}catch(r){if(t.missing!==void 0&&r.status===t.missing)return"";throw r}}async function Fw(t,e,n,r){return t.parse(await Ac(t,t.postsUrl(e,n),r))}async function of(t,e,n){return t.count(await Ac(t,t.countUrl(e),n))}async function Mo(t,e,n){let[r]=t.parse(await Ac(t,t.postUrl(e),n));return r}async function Tc(t,e,n){return t.credits?.(await Ac(t,t.pageUrl(e),n))}var ER=/^https?:\/\/(?:i\.pximg\.net|i\d*\.pixiv\.net|img\d*\.pixiv\.net)\/\S*\/(\d+)(?:_p\d+)?(?:_\w+)?\.\w+(?:[?#]\S*)?$/i,MR=/^https?:\/\/(?:www\.)?pixiv\.net\/member_illust\.php\?\S*\billust_id=(\d+)/i;function zs(t){let e=ER.exec(t)?.[1]??MR.exec(t)?.[1];return e?`https://www.pixiv.net/artworks/${e}`:t}function Hc(t,e){return t.credits!==void 0&&e.named.artist.length===0}function Ds(t,e){for(let n of eR){let r=e.named?.[n]??[];if(t.named[n].length===0&&r.length>0)t.named[n]=r}if(t.source||=e.source??"",t.owner||=e.owner??"",!t.posted&&e.posted)t.posted=e.posted}function xR(t){let e=new URLSearchParams({limit:String(2*yr),only:"md5,tag_string,tag_string_artist,tag_string_character,tag_string_copyright,source,file_url",tags:`md5:${t.join(",")}`});return`${ie.origin}/posts.json?${e}`}function OR(t){return new Map(Us(t).flatMap((e)=>{let n=String(e.md5??"");return n?[[n,{tags:zn(e.tag_string),named:{artist:zn(e.tag_string_artist),character:zn(e.tag_string_character),copyright:zn(e.tag_string_copyright)},source:String(e.source??""),file:So(String(e.file_url??""))}]]:[]}))}function Cc(t,e){for(let n of t){let r=e.get(n.md5);if(!r)continue;if(n.tags=[...new Set([...n.tags,...r.tags])],Ds(n,r),n.solo=r.tags.includes("solo"),r.file.includes("/original/")){if(n.mirror={file:r.file,preview:r.file.replace("/original/","/360x360/").replace(/\.[a-z0-9]+$/i,".jpg")},!n.file)n.file=r.file,n.ext=Sr(r.file)}}}async function Lc(t,e){let n=new Map;if(Dn(ie)>Date.now())return n;for(let r=0;r<t.length;r+=yr){let i=await(await vr(ie,xR(t.slice(r,r+yr)),e,{},DI)).text();for(let[o,s]of OR(i))n.set(o,s)}return n}async function qs(t,e,n){if(e.file||!t.guesses)return;for(let r of t.guesses(e))try{let i=await vr(t,r,n,{Range:`bytes=0-${Mw}`}),o=wn(new Uint8Array(await i.arrayBuffer()));return e.file=r,e.ext=Sr(r),o}catch(i){if(n.aborted||i.status!==404)throw i}throw Error(`${t.name} keeps no png or jpg of ${e.id}`)}async function jw(t,e){if(Dn(ie)<=Date.now())try{let i=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(pw)}),o=`${ie.origin}/autocomplete.json?${i}`;return dR(await(await vr(ie,o,e,{},mw)).text())}catch(i){if(e.aborted)throw i}let n=V.find((i)=>i.key==="yande"),r=new URLSearchParams({name:t,order:"count",limit:String(pw)});return fR(await(await vr(n,`${n.origin}/tag.json?${r}`,e,{},mw)).text())}function IR(t){try{return(JSON.parse(t).related_tags??[]).flatMap(({tag:n})=>n?.name?[{value:n.name,count:Number(n.post_count)||0}]:[])}catch{return[]}}async function _w(t,e){if(Dn(ie)>Date.now())return[];let n=new URLSearchParams({"search[query]":t,"search[category]":"character",limit:String(qI)});return IR(await(await vr(ie,`${ie.origin}/related_tag.json?${n}`,e,{},YI)).text())}function Bw(t,e){return e.slice(0,t.ors?t.tagBudget:1)}async function Gw(t,e,n){let r=await vr(t,e,n,{Range:`bytes=0-${Mw}`});return wn(new Uint8Array(await r.arrayBuffer()))}async function Fc(t,e,n,r){let i=await vr(t,e,n,{},0),o=Number(i.headers.get("content-length"))||0,s=i.body?.getReader();if(!s)return new Uint8Array(await i.arrayBuffer());let a=[],c=0;for(;;){let{done:d,value:f}=await s.read();if(d)break;a.push(f),c+=f.length,r?.(c,o)}let u=new Uint8Array(c),l=0;for(let d of a)u.set(d,l),l+=d.length;return u}var LR=12,FR=/^[0-9a-f]{40}$/;function xo(){return Oo(Mr(),"drawn")}function Uw(t){return RR("sha1").update(JSON.stringify(t)).digest("hex")}function Ww(t){return PR(Oo(xo(),t))}function Kw(t){let e=Oo(xo(),t);try{let n=AR(e),r=n.readUInt32BE(0),i=JSON.parse(n.toString("utf8",4,4+r)),o=n.subarray(4+r,4+r+i.figure),s=n.subarray(4+r+i.figure,4+r+i.figure+i.picture);if(o.length!==i.figure||s.length!==i.picture)return;let a=new Date;return CR(e,a,a),{stem:i.stem,fill:i.fill,...i.peak?{peak:i.peak}:{},figure:o,picture:s}}catch{return}}function sf(t,e){let n=Buffer.from(JSON.stringify({stem:e.stem,fill:e.fill,...e.peak?{peak:e.peak}:{},figure:e.figure.length,picture:e.picture.length})),r=Buffer.alloc(4);r.writeUInt32BE(n.length),L(Oo(xo(),t),Buffer.concat([r,n,e.figure,e.picture])),jR()}function jR(){let t=NR(xo()).filter((e)=>FR.test(e)).flatMap((e)=>{try{return[{name:e,at:HR(Oo(xo(),e)).mtimeMs}]}catch{return[]}}).sort((e,n)=>n.at-e.at);for(let{name:e}of t.slice(LR))TR(Oo(xo(),e),{force:!0})}import{readdirSync as zR,readFileSync as Xw}from"node:fs";import{basename as DR,join as t0}from"node:path";/*!
|
|
4
4
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
5
5
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
6
6
|
*
|
|
@@ -26,11 +26,11 @@ import{createRequire as BM}from"node:module";var HM=Object.create;var{getPrototy
|
|
|
26
26
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
27
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
28
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
*/function
|
|
30
|
-
`,
|
|
31
|
-
`}return i}class
|
|
29
|
+
*/function _R(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function BR(t,e,n){let r=t.split(/\r?\n/),i="",o=(Math.log10(e+1)|0)+1;for(let s=e-1;s<=e+1;s++){let a=r[s-1];if(!a)continue;if(i+=s.toString().padEnd(o," "),i+=": ",i+=a,i+=`
|
|
30
|
+
`,s===e)i+=" ".repeat(o+n+2),i+=`^
|
|
31
|
+
`}return i}class D extends Error{line;column;codeblock;constructor(t,e){let[n,r]=_R(e.toml,e.ptr),i=BR(e.toml,n,r);super(`Invalid TOML document: ${t}
|
|
32
32
|
|
|
33
|
-
${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new
|
|
33
|
+
${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new D(t,{toml:e.s,ptr:n??e.p})}}/*!
|
|
34
34
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
35
35
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
36
36
|
*
|
|
@@ -56,8 +56,8 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
56
56
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
57
57
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
58
58
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
59
|
-
*/function
|
|
60
|
-
`;else if(n===102)
|
|
59
|
+
*/function jc(t){let e=t.p,n=t.s.charCodeAt(t.p++),r=n,i=n===39,o=n===t.s.charCodeAt(t.p)&&n===t.s.charCodeAt(t.p+1);if(o){if((n=t.s.charCodeAt(t.p+=2))===10)t.p++;else if(n===13&&t.s.charCodeAt(t.p+1)===10)t.p+=2}let s="",a=t.p,c=0;for(;t.p<t.s.length;t.p++)if(n=t.s.charCodeAt(t.p),o&&(n===10||n===13&&t.s.charCodeAt(t.p+1)===10))c=c&&3;else if(n<32&&n!==9||n===127)D.x("control characters are not allowed in strings",t);else if((!c||c===3)&&n===r&&(!o||t.s.charCodeAt(t.p+1)===r&&t.s.charCodeAt(t.p+2)===r)){if(o){if(t.s.charCodeAt(t.p+3)===r)t.p++;if(t.s.charCodeAt(t.p+3)===r)t.p++}if(!c){let u=t.s.slice(a,t.p);s=s?s+u:u}return t.p+=o?3:1,s}else if(!c){if(!i&&n===92)s+=t.s.slice(a,a=t.p),c=1}else if(c===1)if(n===120||n===117||n===85){let u=t.p++-1,l=0,d=n===120?2:n===117?4:8;for(let f=0;f<d;f++,t.p++){let h=t.s.charCodeAt(t.p),m=h>=48&&h<=57?h-48:h>=65&&h<=70?h-65+10:h>=97&&h<=102?h-97+10:-1;if(m<0)D.x("invalid non-hex character in unicode escape",t);l=l<<4|m}if(l<0||l>1114111||l>=55296&&l<=57343)D.x("invalid unicode escape",t,u);s+=String.fromCodePoint(l),a=t.p--,c=0}else if(o&&(n===32||n===9))c=2;else{if(n===98)s+="\b";else if(n===116)s+="\t";else if(n===110)s+=`
|
|
60
|
+
`;else if(n===102)s+="\f";else if(n===114)s+="\r";else if(n===101)s+="\x1B";else if(n===34)s+='"';else if(n===92)s+="\\";else D.x("unrecognised escape sequence",t);a=t.p+1,c=0}else if(n!==32&&n!==9){if(c===2)D.x("invalid escape: only line-ending whitespace may be escaped",t,a);c=!i&&n===92?1:0,a=t.p}D.x("unfinished string",t,e)}/*!
|
|
61
61
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
62
62
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
63
63
|
*
|
|
@@ -83,7 +83,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
83
83
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
84
84
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
85
85
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
86
|
-
*/var
|
|
86
|
+
*/var GR=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;class xr extends Date{#e=!1;#n=!1;#t=null;constructor(t,e,n){let r=!0,i=!0,o="Z",s;if(typeof t==="string")if(e)t:{if(e<3){if(+t.slice(11,13)>23){t="";break t}if(e===2)o=null,t+="Z";else if((s=t.charCodeAt(t.length-1))!==90&&s!==122)o=t.slice(t.length-6);if(n)t=t.slice(0,10)+"T"+t.slice(11)}else if(e===4)t=+t.slice(0,2)>23?"":`0000-01-01T${t}Z`;r=e!==4,i=e!==3}else{let a=t.match(GR);if(a){if(!a[1])r=!1,t=`0000-01-01T${t}`;if(i=!!a[2],i&&t[10]===" "&&(t=t.replace(" ","T")),a[2]&&+a[2]>23)t="";else if(o=a[3]||null,!o&&i)t+="Z"}else t=""}super(t);if(!isNaN(this.getTime()))this.#e=r,this.#n=i,this.#t=o}isDateTime(){return this.#e&&this.#n}isLocal(){return!this.#e||!this.#n||!this.#t}isDate(){return this.#e&&!this.#n}isTime(){return this.#n&&!this.#e}isValid(){return this.#e||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#t===null)return t.slice(0,-1);if(this.#t==="Z"||this.#t==="z")return t;let e=+this.#t.slice(1,3)*60+ +this.#t.slice(4,6);return e=this.#t[0]==="-"?e:-e,new Date(this.getTime()-e*60000).toISOString().slice(0,-1)+this.#t}static wrapAsOffsetDateTime(t,e="Z"){let n=new xr(t);return n.#t=e,n}static wrapAsLocalDateTime(t){let e=new xr(t);return e.#t=null,e}static wrapAsLocalDate(t){let e=new xr(t);return e.#n=!1,e.#t=null,e}static wrapAsLocalTime(t){let e=new xr(t);return e.#e=!1,e.#t=null,e}}/*!
|
|
87
87
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
88
88
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
89
89
|
*
|
|
@@ -109,7 +109,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
109
109
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
110
110
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
111
111
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
112
|
-
*/function
|
|
112
|
+
*/function Me(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function cf(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function Js(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||D.x("document contains excessively nested structures. aborting.",t);let i=r===91?qw(t):Dw(t);return t.d++,i}if(r===34||r===39)return jc(t);if(r===116){if(t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)D.x("invalid value",t,n);return t.p++,!0}if(r===102){if(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)D.x("invalid value",t,n);return t.p++,!1}if(r===43||r===45)return _c(t,t.p,t.s.charCodeAt(++t.p),44-r,e);if(t.s.charCodeAt(t.p+4)===45&&t.s.charCodeAt(t.p+7)===45)return UR(t,r,e);if(t.s.charCodeAt(t.p+2)===58)return WR(t,r,e);return _c(t,t.p,r,0,e)}function _c(t,e,n,r,i){let o=n,s=0,a=!1;if(o===105){if(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)D.x("invalid value",t,e);return t.p++,(r||1)/0}if(o===110){if(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)D.x("invalid value",t,e);return t.p++,NaN}if(o===48){if(++t.p>=t.s.length||cf(o=t.s.charCodeAt(t.p),i))return t.bi===!0?0n:0;if(!r){if(o===120)return af(t,e,16,i);else if(o===98)return af(t,e,2,i);else if(o===111)return af(t,e,8,i)}if(o===46)s=2;else if(o===101||o===69)s=4;else D.x("illegal leading zero",t,e)}else if(!Me(o))D.x("invalid value",t,e);while(++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!cf(o,i))){if(!s)s=1;if(o===95){if(!(s&1))D.x("illegal underscore",t);s+=11,a=!0}else if(s===1&&o===46)s=2;else if((s===1||s===3)&&(o===101||o===69))s=4;else if(s===4&&(o===43||o===45));else if(!Me(o))D.x("illegal character in numeric literal",t);else if(s>9)s-=11;else if(!(s&1))s++}if(!s){let u=(n-48)*(r||1);return t.bi===!0?BigInt(u):u}if(!(s&1))D.x("unfinished numeric value",t,e);let c=t.s.slice(e,t.p);if(a)c=c.replaceAll("_","");return s>1?parseFloat(c):zw(t,c,10,e)}function af(t,e,n,r){let i,o=1;while(++t.p<t.s.length&&(i=t.s.charCodeAt(t.p),!cf(i,r)))if(i===95){if(o&1)D.x("illegal underscore",t);o=3}else if(!Me(i,n))D.x("illegal character in numeric literal",t);else if(o&1)o--;if(o&1)D.x("unfinished numeric value",t);let s=t.s.slice(e+2,t.p);if(o)s=s.replaceAll("_","");return zw(t,s,n,e)}function zw(t,e,n,r){if(t.bi!==!0)t:{let i=parseInt(e,n);if(!Number.isSafeInteger(i)){if(t.bi)break t;D.x("integer value cannot be represented losslessly",t,r)}return i}return n===10?BigInt(e):BigInt((n===2?"0b":n===8?"0o":"0x")+e)}function UR(t,e,n){let r=t.p++,i;if(!Me(e)||!Me(t.s.charCodeAt(t.p++))||!Me(t.s.charCodeAt(t.p++))||!Me(t.s.charCodeAt(t.p++)))return _c(t,t.p=r,e,0,n);if(t.p+=5,!Me(t.s.charCodeAt(t.p++)))D.x("invalid date-time: date part is malformed",t,r);if(t.p>=t.s.length||((e=t.s.charCodeAt(t.p))!==32||(i=!0,!Me(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let s=t.s.slice(r,t.p);return Ys(t,s,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58)D.x("invalid date-time: time part is malformed",t,r);if(t.s.charCodeAt(t.p+=3)===58)t.p+=3;if(t.s.charCodeAt(t.p)===46)while(Me(t.s.charCodeAt(++t.p)));if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let s=t.s.slice(r,++t.p);return Ys(t,s,1,i,r,"[+00:00]")}if(e===43||e===45){let s=t.s.slice(r,t.p+=6);return Ys(t,s,1,i,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return Ys(t,o,2,i,r)}function WR(t,e,n){let r=t.p;if(!Me(e)||!Me(t.s.charCodeAt(++t.p)))return _c(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58)t.p+=3;if(t.s.charCodeAt(t.p)===46)while(Me(t.s.charCodeAt(++t.p)));let i=t.s.slice(r,t.p);return Ys(t,i,4,!1,r)}function Ys(t,e,n,r,i,o){if(t.ld){let s=new xr(e,n,r);if(!s.isValid())D.x("invalid date",t,i);return s}try{if(o)e+=o;switch(n){case 1:return Temporal.ZonedDateTime.from(e);case 2:return Temporal.PlainDateTime.from(e);case 3:return Temporal.PlainDate.from(e);case 4:return Temporal.PlainTime.from(e)}}catch(s){D.x(s instanceof Error?s.message:""+s,t,i)}}/*!
|
|
113
113
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
114
114
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
115
115
|
*
|
|
@@ -135,7 +135,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
135
135
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
136
136
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
137
137
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
138
|
-
*/function
|
|
138
|
+
*/function KR(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}if(e<32&&e!==9||e===127)D.x("control characters are not allowed in comments",t)}}function Ze(t,e,n){let r;while(t.p<t.s.length){while(t.p<t.s.length&&((r=t.s.charCodeAt(t.p))===32||r===9||!e&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10)))t.p++;if(n||r!==35)break;KR(t)}}/*!
|
|
139
139
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
140
140
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
141
141
|
*
|
|
@@ -161,7 +161,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
161
161
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
162
162
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
163
163
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
164
|
-
*/function
|
|
164
|
+
*/function Bc(t,e=61){let n,r=0,i=[],o,s=t.s.charCodeAt(n=t.p);do if(s===e){if(!r)D.x("unexpected end of key",t);if(r===1)i.push(t.s.slice(o,t.p));return t.p++,i}else if(s===46){if(!r)D.x("illegal empty bare key",t);if(r===1)i.push(t.s.slice(o,t.p));r=0}else if(!r&&(s===34||s===39)){if(s===t.s.charCodeAt(t.p+1)&&s===t.s.charCodeAt(t.p+2))D.x("illegal quoted key: multiline strings are not allowed",t);i.push(jc(t)),r=2,t.p--}else if(s===32||s===9){if(r===1)i.push(t.s.slice(o,t.p)),r=2}else if(r===2||s<48&&s!==45||s>57&&s<65||s>90&&s<97&&s!==95||s>122)D.x("illegal character in key",t);else if(!r)r=1,o=t.p;while(s=t.s.charCodeAt(++t.p));D.x("incomplete key-value: cannot find end of key",t,n)}function Dw(t){let e=t.p++,n=Object.create(null),r=new Set,i;while(t.p<t.s.length){if(Ze(t),(i=t.s.charCodeAt(t.p))===125)return t.p++,n;let o,s=n,a=!1,c=t.p,u=Bc(t);for(let d=0;d<u.length;d++){if(d)s=a?s[o]:s[o]=Object.create(null);if(o=u[d],(a=Object.hasOwn(s,o))&&(typeof s[o]!=="object"||r.has(s[o])))D.x("trying to redefine an already defined value",t,c);let f=o==="__proto__";if(t.uk&&(f||o==="constructor")){s=t.uk!==1&&D.x("document contains an unsafe property",t,c);break}if(!a&&f)Object.defineProperty(s,o,{enumerable:!0,configurable:!0,writable:!0})}if(a)D.x("trying to redefine an already defined value",t,c);Ze(t,!0,!0);let l=Js(t,125);if(s&&typeof(s[o]=l)==="object")r.add(l);if(Ze(t),(i=t.s.charCodeAt(t.p++))===125)return n;if(i!==44)D.x("expected comma or end of structure",t,t.p-1)}D.x("unfinished table",t,e)}function qw(t){let e=t.p++,n=[],r;while(t.p<t.s.length){if(Ze(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(Js(t,93)),Ze(t),(r=t.s.charCodeAt(t.p++))===93)return n;if(r!==44)D.x("expected comma or end of structure",t,t.p-1)}D.x("unfinished array",t,e)}/*!
|
|
165
165
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
166
166
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
167
167
|
*
|
|
@@ -187,7 +187,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
187
187
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
188
188
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
189
189
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
190
|
-
*/function
|
|
190
|
+
*/function Yw(t,e,n,r,i){let o=n,s=r,a,c=!1,u;for(let l=0;l<e.length;l++){if(l){if(o=c?o[a]:o[a]=Object.create(null),s=(u=s[a]).c,i===0&&(u.t===1||u.t===2))return null;if(u.t===2){let d=o.length-1;o=o[d],s=s[d].c}}if(a=e[l],(c=Object.hasOwn(o,a))&&s[a]?.t===0&&s[a]?.d)return null;if(!c){let d=a==="__proto__";if(t.uk&&(d||a==="constructor"))return!1;if(d)Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(s,a,{enumerable:!0,configurable:!0,writable:!0});s[a]={t:l<e.length-1&&i===2?3:i,d:!1,i:0,c:Object.create(null)}}}if(u=s[a],u.t!==i&&!(i===1&&u.t===3))return null;if(i===2){if(!u.d)u.d=!0,o[a]=[];o[a].push(o=Object.create(null)),u.c[u.i++]=u={t:1,d:!1,i:0,c:Object.create(null)}}if(u.d)return null;if(u.d=!0,i===1)o=c?o[a]:o[a]=Object.create(null);else if(i===0&&c)return null;return[a,o,u.c]}function Jw(t,e,n){if(e===null||t.uk===2)D.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function $i(t,e={}){let n={s:t,p:0,d:e.maxDepth??1000,bi:e.integersAsBigInt??!1,ld:e.useLegacyDate??!0,uk:e.unsafeKeyBehaviour==="throw"?2:e.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),i=Object.create(null),o,s=!1,a=r,c=i;if(t.charCodeAt(0)===65279)n.p++;Ze(n);while(n.p<t.length){if(t.charCodeAt(n.p)===91){let u=t.charCodeAt(++n.p)===91;o=n.p+=+u,s=!1;let l=Bc(n,93);if(u){if(t.charCodeAt(n.p)!==93)D.x("expected end of table array declaration",n);n.p++}let d=Yw(n,l,r,i,u?2:1);if(!d)Jw(n,d,o),s=!0;else c=d[2],a=d[1]}else{o=n.p;let u=Bc(n),l=Yw(n,u,a,c,0);if(!l&&!s)Jw(n,l,o);Ze(n,!0,!0);let d=Js(n,void 0);if(l&&!s)l[1][l[0]]=d}if(Ze(n,!0),n.p<t.length&&(o=t.charCodeAt(n.p))!==10&&(o!==13||t.charCodeAt(n.p+1)!==10))D.x("each key-value declaration must be followed by an end-of-line",n);Ze(n)}return r}/*!
|
|
191
191
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
192
192
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
193
193
|
*
|
|
@@ -213,7 +213,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
213
213
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
214
214
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
215
215
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
216
|
-
*/var
|
|
216
|
+
*/var n6=!!"".isWellFormed;/*!
|
|
217
217
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
218
218
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
219
219
|
*
|
|
@@ -239,168 +239,169 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
|
|
|
239
239
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
240
240
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
241
241
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
242
|
-
*/var
|
|
243
|
-
`)[0]}`)}}function XI(t){let n=Of(dn,Xb(tw(t,dn),"utf8")).group;if(!Array.isArray(n)||n.length===0)it(dn,"needs at least one [[group]] table");return n.map((r)=>{let i=ds(r);return{name:Io(dn,"group.name",i.name),native:i.native===void 0?void 0:Io(dn,"group.native",i.native),lead:Ro(dn,"group.lead",i.lead)}})}function t2(t,e){if(!Array.isArray(e)||e.length===0)it(t,'meta.native_names must be a list of names, like ["後藤ひとり"]');return e.map((n,r)=>{let i=Io(t,`meta.native_names[${r}]`,n);if(i.includes("|"))it(t,`meta.native_names[${r}] ${JSON.stringify(i)} contains |`);return i})}var Mf={"":["$schema","meta","colors","contrast","ghostty","picture"],meta:["name","base","group","ansi_source","booru","booru_sites","native_names","signature","order","role"],colors:["background","foreground","cursor","selection_background","ansi"],contrast:["waive","reason"],ghostty:["icon_ghost","icon_screen"],picture:["site","id","size","position","opacity"]};function nw(t,e){let n=Of(t,e),r=(i,s,o=[])=>s&&typeof s==="object"&&!Array.isArray(s)?Object.keys(s).filter((a)=>!o.includes(a)).map((a)=>i?`${i}.${a}`:a):[];return[...r("",n,Mf[""]),...["meta","colors","contrast","ghostty"].flatMap((i)=>r(i,n[i],Mf[i])),...(Array.isArray(n.picture)?n.picture:[]).flatMap((i,s)=>r(`picture[${s}]`,i,Mf.picture))]}function xf(t,e,n){let r=Of(t,e),i=ds(r.meta),s=ds(r.colors),o=ds(r.contrast),a=s.ansi;if(!Array.isArray(a)||a.length!==16)it(t,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(a)?a.length:typeof a}`);let c=Qb(t,"meta.name",i.name);if(c!==n.name)it(t,`meta.name "${c}" does not match its file — it lives at ${n.name}`);let u=n.open===!0;for(let B of["order","role"])if(u&&i[B]!==void 0)it(t,`meta.${B} is for the official palettes — a market palette follows its base`);let l=i.role;if(l!==void 0&&l!=="default")it(t,`meta.role must be "default", got ${JSON.stringify(l)}`);let f=i.base===void 0?void 0:Qb(t,"meta.base",i.base);if(f!==void 0&&!u)it(t,"meta.base is for market palettes");let d=f===void 0?void 0:n.bases?.get(f),h=u&&i.group===void 0?d?.group??xo:Io(t,"meta.group",i.group),m=n.groups.get(h);if(!m&&!(u&&(h===xo||n.open)))it(t,`meta.group "${h}" has no [[group]] table in ${dn}`);let $=ci(t,"colors.background",s.background),g=ci(t,"colors.foreground",s.foreground),b=ci(t,"colors.cursor",s.cursor),y=ci(t,"colors.selection_background",s.selection_background),E=a.map((B,tt)=>ci(t,`colors.ansi[${tt}]`,B)),S=VI(t,i.signature,{background:$,foreground:g,cursor:b,selection:y,ansi:E}),x=i.booru===void 0?void 0:Ro(t,"meta.booru",i.booru);if(x!==void 0&&/[\s\p{Cc}]/u.test(x))it(t,`meta.booru must be a single booru tag, got ${JSON.stringify(x)}`);let R=ZI(t,i.booru_sites,x,n.foreign===!0),N=i.native_names===void 0?void 0:t2(t,i.native_names),F=Array.isArray(o.waive)?o.waive.map(String):[];if(F.length>0&&typeof o.reason!=="string")it(t,"contrast.waive needs a contrast.reason explaining why");let _=QI(t,r.picture,n.foreign===!0);return{name:c,...f?{base:f}:{},group:h,native:m?.native,...N?{nativeNames:N}:{},lead:!u&&m?.lead===c,order:u?d?.order??zI:Number(i.order),role:l,ansiSource:u&&i.ansi_source===void 0?f??"original":Io(t,"meta.ansi_source",i.ansi_source),...x?{booru:x}:{},...R?{booruSites:R}:{},background:$,foreground:g,cursor:b,selectionBackground:y,ansi:E,signature:S.colors,signatureSlots:S.names,ghostty:YI(t,r.ghostty,{background:$,cursor:b,selectionBackground:y}),waive:F,waiveReason:typeof o.reason==="string"?o.reason:void 0,..._?{pictures:_}:{}}}function rw(t){let e=XI(t),n=new Map(e.map((s)=>[s.name,s]));if(n.size!==e.length)it(dn,"group.name must be unique");let r=WI(t).filter((s)=>s.endsWith(".toml")&&!s.startsWith("_")).map((s)=>xf(s,Xb(tw(t,s),"utf8"),{name:KI(s,".toml"),groups:n})).sort((s,o)=>s.order-o.order);if(new Set(r.map((s)=>s.order)).size!==r.length)throw Error("themes: meta.order must be unique across all themes");for(let s of e){let o=r.filter((a)=>a.group===s.name);if(o.length===0)it(dn,`group "${s.name}" has no themes`);if(!o.some((a)=>a.name===s.lead))it(dn,`group "${s.name}" lead "${s.lead}" is not one of its themes`)}return r}function iw(t){return t.filter((e)=>e.role===void 0)}function ui(t){let e=(r,i)=>r<i?-1:r>i?1:0,n=(r)=>lt(r.name)?r.name:r.base??r.name;return[...t].sort((r,i)=>Number(lt(r.name)!==void 0)-Number(lt(i.name)!==void 0)||e(r.group.toLowerCase(),i.group.toLowerCase())||Number(r.catalog===void 0)-Number(i.catalog===void 0)||e((r.catalog??"").toLowerCase(),(i.catalog??"").toLowerCase())||e(n(r),n(i))||Number(r.base!==void 0)-Number(i.base!==void 0)||e(r.name,i.name))}var To={width:2560,height:1550},o2=1,a2=2560,c2=0.1,mw=0.99,u2=2,li={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},l2=vt(Bt("#19161e","#9b86c8",0.2)),f2="shelf",uc="originals",d2="images.json",Rf=1;function h2(t,e){if(e==="background"||e==="foreground"||e==="cursor")return t[e];if(e==="selection"&&t.selection)return t.selection;let n=/^ansi(\d|1[0-5])$/.exec(e),r=n?t.ansi[Number(n[1])]:void 0;if(!r)throw Error(`${t.name} has no slot ${e}`);return r}function sw(t){if(t(1))return 1;let e=0,n=1;for(let r=0;r<40;r++){let i=(e+n)/2;if(t(i))e=i;else n=i}return e}function pw(t,e){let r=sw((s)=>Vp({name:t.name,background:Bt(t.background,e,s),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),i=sw((s)=>vt(Bt(t.background,e,s))<=l2);return{cap:r,matched:i,opacity:Math.floor(Math.min(r,i)*100)/100}}function ow(t,e){let n=h2(t,e),{cap:r,matched:i,opacity:s}=pw(t,n),o=rt(t.background),a=Math.hypot(...rt(n).map((c,u)=>(c-(o[u]??0))*s));return{slot:e,color:n,cap:r,matched:i,opacity:s,reach:a}}function ps(t,e){return pw(t,e).opacity}function hn(t,e){let n=ow(t,"cursor");if(n.opacity>=c2)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>ow(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function m2(t){return ib(t)??{x:0,y:0,w:t.width,h:t.height}}function Ff(t,e){if(t<=0||e<=0)return To;let n=Math.min(1,To.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function gw(t,e,n,r){if(r<li.stands){let c=t.w*n>t.h*e?{x:t.x+(t.w-t.h*e/n)/2,y:t.y,w:t.h*e/n,h:t.h}:{x:t.x,y:t.y,w:t.w,h:t.w*n/e};return{crop:c,at:{x:0,y:0,w:e,h:n},focus:(c.y-t.y+c.h/2)/t.h}}let i=Math.max(li.tall*n,li.reach*e*t.h/t.w),s=i*t.w/t.h;if(s>li.widest*e)s=li.widest*e,i=s*t.h/t.w;let o=li.headroom*n,a=Math.min(1,(n-o)/i);return{crop:{x:t.x,y:t.y,w:t.w,h:t.h*a},at:{x:e*(1-li.margin)-s,y:o,w:s,h:i*a},focus:Math.min(1,(n/2-o)/i)}}function p2(t,e){return 0.299*(t[e]??0)+0.587*(t[e+1]??0)+0.114*(t[e+2]??0)}function g2(t,e){let n=new Uint32Array(256),r=Math.max(1,Math.floor(e.w*e.h/400000)),i=0;for(let o=0;o<e.w*e.h;o+=r){let a=((e.y+Math.floor(o/e.w))*t.width+e.x+o%e.w)*4;if((t.data[a+3]??0)>=128){let c=Math.round(p2(t.data,a));n[c]=(n[c]??0)+1,i++}}let s=0;for(let o=0;o<256&&i>0;o++)if(s+=n[o]??0,s>=i*mw)return Math.min(u2,Math.max(1,255/Math.max(1,o)));return 1}var If=Float64Array.from({length:256},(t,e)=>{let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4});function b2(t,e,n){return`#${[t,e,n].map((r)=>Math.round(r).toString(16).padStart(2,"0")).join("")}`}function w2(t,e){let n=new Uint32Array(256),r=new Float64Array(768),i=Math.max(1,Math.floor(e.w*e.h/400000)),s=0;for(let a=0;a<e.w*e.h;a+=i){let c=((e.y+Math.floor(a/e.w))*t.width+e.x+a%e.w)*4;if((t.data[c+3]??0)>=128){let u=t.data[c]??0,l=t.data[c+1]??0,f=t.data[c+2]??0,d=Math.round(255*Math.sqrt(0.2126*(If[u]??0)+0.7152*(If[l]??0)+0.0722*(If[f]??0)));n[d]=(n[d]??0)+1,r[d*3]=(r[d*3]??0)+u,r[d*3+1]=(r[d*3+1]??0)+l,r[d*3+2]=(r[d*3+2]??0)+f,s++}}let o=0;for(let a=0;a<256&&s>0;a++)if(o+=n[a]??0,o>=s*mw){let c=Math.max(1,n[a]??1);return b2((r[a*3]??0)/c,(r[a*3+1]??0)/c,(r[a*3+2]??0)/c)}return"#ffffff"}function $2(t,e){let n=t.data,r=new Uint8Array(t.width*t.height);for(let i=0,s=0;i<r.length;i++,s+=4){let o=n[s+3];if(o===0)continue;let a=(0.299*n[s]+0.587*n[s+1]+0.114*n[s+2])*e;r[i]=(a>255?255:a)*o/255+0.5}return{width:t.width,height:t.height,data:r}}function bw(t,e,n){let r=Math.max(0,Math.round(t.at.x)),i=Math.max(0,Math.round(t.at.y)),s=Math.min(e,Math.round(t.at.x+t.at.w)),o=Math.min(n,Math.round(t.at.y+t.at.h));if(s<=r||o<=i)return;let a=t.crop.w/t.at.w,c=t.crop.h/t.at.h;return{x0:r,y0:i,x1:s,y1:o,box:{x:t.crop.x+(r-t.at.x)*a,y:t.crop.y+(i-t.at.y)*c,w:(s-r)*a,h:(o-i)*c}}}function ac(t,e,n,r){let i=new Float32Array(n*r),s=bw(e,n,r);if(s){let o=cb(t,s.box,s.x1-s.x0,s.y1-s.y0);for(let a=s.y0;a<s.y1;a++)i.set(o.data.subarray((a-s.y0)*(s.x1-s.x0),(a-s.y0+1)*(s.x1-s.x0)),a*n+s.x0)}return{width:n,height:r,data:i}}function Cf(t,e,n,r){let i=new Uint8Array(n*r*4),s=bw(e,n,r);if(s){let o=s.x1-s.x0,a=mo(t,s.box,o,s.y1-s.y0);for(let c=s.y0;c<s.y1;c++)i.set(a.data.subarray((c-s.y0)*o*4,(c-s.y0+1)*o*4),(c*n+s.x0)*4)}return{width:n,height:r,data:i}}function Nf(t,e){if(e<=0)return t;let{width:n,height:r}=t,i=[0,1,2,3].map(()=>({width:n,height:r,data:new Float32Array(n*r)}));for(let a=0;a<n*r;a++){let c=t.data[a*4+3]??0;for(let u=0;u<3;u++)i[u].data[a]=(t.data[a*4+u]??0)*c/255;i[3].data[a]=c}let s=i.map((a)=>po(a,e).data),o=new Uint8Array(n*r*4);for(let a=0;a<n*r;a++){let c=s[3]?.[a]??0;if(c<=0)continue;for(let u=0;u<3;u++)o[a*4+u]=Math.min(255,Math.max(0,Math.round((s[u]?.[a]??0)*255/c)));o[a*4+3]=Math.min(255,Math.round(c))}return{width:n,height:r,data:o}}function Lf(t){let e=m2(t),n,r;return{box:e,clear:Tn(t,e),get ink(){return n??=$2(t,g2(t,e)),n},image:t,get peak(){return r??=w2(t,e),r}}}function ww(t,e,n,r,i){let s=Lf(t),{box:o,clear:a,ink:c}=s,u=gw(o,e,n,a),l=Math.min(1,a2/Math.max(o.w,o.h)),f={x:0,y:0,w:Math.round(o.w*l),h:Math.round(o.h*l)},d=r*f.w*u.crop.w/(o.w*u.at.w);if(i==="original")return{coloring:i,figure:Nf(mo(t,o,f.w,f.h),d),fill:Nf(Cf(t,u,e,n),r),focus:u.focus,peak:s.peak};let h=ac(c,{crop:o,at:f,focus:u.focus},f.w,f.h),m=ac(c,u,e,n);return{coloring:i,figure:go(po(h,d)),fill:go(po(m,r)),focus:u.focus}}function k2(t,e,n,r){let i=rt(e),s=rt(n),o=new Uint8Array(t.width*t.height*4);for(let a=0;a<t.data.length;a++){let c=(t.data[a]??0)/255*r;for(let u=0;u<3;u++)o[a*4+u]=Math.round((i[u]??0)+((s[u]??0)-(i[u]??0))*c);o[a*4+3]=255}return{width:t.width,height:t.height,data:o}}function y2(t,e,n){let r=rt(e),i=new Uint8Array(t.width*t.height*4);for(let s=0;s<t.width*t.height;s++){let o=(t.data[s*4+3]??0)/255*n;for(let a=0;a<3;a++)i[s*4+a]=Math.round((r[a]??0)+((t.data[s*4+a]??0)-(r[a]??0))*o);i[s*4+3]=255}return{width:t.width,height:t.height,data:i}}function $w(t,e,n,r,i,s,o,a="tone"){let{box:c,clear:u,ink:l}=t,f=gw(c,r,i,u),d=Math.round(100*f.at.w/f.crop.w/Math.min(r/c.w,i/c.h)),h=o?.size??"fill",m=h==="fill"?f:{crop:c,at:ws(c.w,c.h,r,i,h,o?.at??5,!1,h>100?Math.round(f.focus*100):-1),focus:f.focus},$=a==="original"?ps(e,t.peak):n.opacity,g=o?.opacity??$;return{image:a==="original"?y2(Nf(Cf(t.image,m,r,i),s),e.background,g):k2(go(po(ac(l,m,r,i),s)),e.background,n.color,g),fill:d,opacity:$}}function q(t){return D(t,"ttheme","backgrounds")}function Tf(t){return D(t,d2)}function gr(t){try{return ms(t,"utf8")}catch{return}}function pr(t){try{return r2(t)}catch{return[]}}function kt(t){let e=gr(Tf(t));if(e===void 0)return v2(t);let n=JSON.parse(e);if(n.version!==Rf)throw Error(`${Tf(t)} is version ${n.version} — this ttheme reads version ${Rf}`);return n}function Ee(t){return t.coloring??"tone"}function jf(t){return{name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,...t.selection?{selection:t.selection}:{},ansi:t.ansi,...t.waived?{waived:t.waived}:{}}}function br(t){return{hue:{color:t.backdrop.color,opacity:t.backdrop.opacity},colors:jf(t)}}function gs(t){return t.tone===void 0&&Ee(t)==="tone"}function aw(t){return(t.artist??[]).map((e)=>e.replace(/[\s,]+/g,"_")).join(",")}function kw(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.artist?.length?[`# by ${aw(r)}`]:[],...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${n+1}/${e.pictures.length}`,...e.pictures.map((i)=>[`# picture ${i.key} ${i.stem} ${i.fill} ${i.opacity} ${i.artist?.length?aw(i):"-"}`,...i.from?[i.from]:[]].join(" ")),...e.pictures.filter((i)=>Ee(i)==="original").map((i)=>`# colors ${i.key} original`),`background-image = ${D(t,r.fill)}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${r.opacity}`,`config-file = ?${r.stem}.tune.conf`,`config-file = ?${r.stem}.off.conf`,""].join(`
|
|
244
|
-
`)}function
|
|
245
|
-
`);for(let r of n){let i=e.palettes[r],
|
|
246
|
-
`)){let
|
|
247
|
-
`)),h}function xw(t){let e=new Map;for(let[n,r]of Object.entries(kt(q(t)).palettes)){let[,i,s]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&s)e.set(n,{site:i,id:Number(s)})}return e}function Iw(t){try{let e=un(new Uint8Array(ms(t)));return e?{width:e.width,height:e.height}:void 0}catch{return}}function Rw(t,e,n,r,i,s,o){let a=[n.original,n.cut].map((c)=>{if(!c)return"";try{let{size:u,mtimeMs:l}=i2(D(t,c));return`${c}:${u}:${l}`}catch{return}});if(!n.original||a.includes(void 0))return;return Ub([o2,Xt(e),n.key,...a,r.width,r.height,i,s,s==="tone"?o:""])}function E2(t,e,n){if(!n.window||n.blur===void 0)return;let r=Rw(t,e,n,n.window,n.blur,Ee(n),n.tone??"");if(!r||Wb(r))return;try{yf(r,{stem:n.stem,fill:n.fill,...n.peak?{peak:n.peak}:{},figure:ms(D(t,`${n.stem}.png`)),picture:ms(D(t,n.fill))})}catch{}}function Nw(t,e,n,r,i,s,o,a,c){let u=c?void 0:Rw(t,e,n,r,o,a,s.hue.color),l=u?Kb(u):void 0;if(l)return{made:{stem:l.stem,fill:l.fill,files:[[`${l.stem}.png`,l.figure],[l.fill,l.picture]]},peak:l.peak,image:void 0};let f=i();if(!f)return null;let d=ww(f,r.width,r.height,o,a),h=Mw(e,n.key,d,s.hue.color),m=d.coloring==="original"?d.peak:void 0;if(u)yf(u,{stem:h.stem,fill:h.fill,...m?{peak:m}:{},figure:h.files[0]?.[1],picture:h.files[1]?.[1]});return{made:h,peak:m,image:f}}function Po(t,e,n,r,i,s,o,a,c,u=Ee(n)){let l=q(t),f=n.window??Iw(D(l,n.fill))??To,d=Nw(l,e,n,f,r,i,s,u,c);if(!d)return null;let{made:h,peak:m,image:$}=d,g={...n,stem:h.stem,fill:h.fill,...Ow(i.colors,i.hue,u,m),blur:s,window:f,...c?{cut:`${Af(e,n.key)}.cut.png`}:{}};if(u==="original")delete g.tone;else delete g.peak;if(c&&$)P(D(l,`${Af(e,n.key)}.cut.png`),lf(ni($)));if(h.stem===n.stem)return g;if(Ee(n)!==u)E2(l,e,n);Gf(l,h.files);let b=Bf(l,n);Ao(l,g,Ee(n)===u?b:{...b,opacity:void 0},o,a);let y=D(l,`${n.stem}.off.conf`);if(Hf(y))e2(y,D(l,`${g.stem}.off.conf`));return g}function Tw(t,e,n,r,i,s,o){let a=q(t),c=n.window??Iw(D(a,n.fill))??To;return Nw(a,e,n,c,r,i,s,o,!1)!==null}function Uf(t,e){let n=q(t),r=kt(n),i=new Set,s=[];for(let{name:o,picture:a}of e){let c=r.palettes[o],u=c?.pictures.findIndex((f)=>f.key===a.key)??-1,l=c?.pictures[u];if(!c||!l)continue;if(c.pictures[u]=a,i.add(o),l.stem!==a.stem)s.push(l.stem)}if(i.size===0)return;fi(n,r,[...i]);for(let o of s)_f(n,o)}function Aw(t,e,n){return t.replace(/^background-image-opacity = (\S+)$/m,(r,i)=>Number(i)===e?`background-image-opacity = ${n}`:r)}function Pw(t,e,n){let r=D(t,`${e.stem}.tune.conf`),i=gr(r);if(i!==void 0)P(r,Aw(i,e.opacity,n));return{...e,opacity:n}}function S2(t,e,n,r){if(n.tone===r.color)return Pw(t,n,r.opacity);let i=Ew(t,n.stem).filter((a)=>a.endsWith(".png")).map((a)=>{let c=new Uint8Array(ms(D(t,a)));return[a,za(c,r.color)??ri(ni(Ht(c)),r.color)]}),s=(a)=>i.find(([c])=>c===a)?.[1]??new Uint8Array,o=`${Xt(e)}.${fw("sha1").update(n.key).update(s(`${n.stem}.png`)).update(s(n.fill)).digest("hex").slice(0,8)}`;Gf(t,i.map(([a,c])=>[o+a.slice(n.stem.length),c]));for(let a of["tune","off"]){let c=gr(D(t,`${n.stem}.${a}.conf`));if(c!==void 0)P(D(t,`${o}.${a}.conf`),Aw(c.split(n.stem).join(o),n.opacity,r.opacity))}return{...n,stem:o,fill:o+n.fill.slice(n.stem.length),opacity:r.opacity,tone:r.color}}function cc(t,e){if(Ee(t)==="original")return t.peak!==void 0&&ps(e.colors,t.peak)!==t.opacity;return t.tone!==void 0&&(t.tone!==e.hue.color||t.opacity!==e.hue.opacity)}function Hw(t,e){let n=q(t),r=kt(n),i=[],s=[];for(let[o,a]of Object.entries(r.palettes)){let c=e.get(o);if(!c||!a.pictures.some((u)=>cc(u,c)))continue;a.pictures=a.pictures.map((u)=>{if(!cc(u,c))return u;let l=Ee(u)==="original"?Pw(n,u,ps(c.colors,u.peak)):S2(n,o,u,c.hue);if(l.stem!==u.stem)s.push(u.stem);return l}),i.push(o)}if(i.length>0){fi(n,r,i);for(let o of s)_f(n,o)}return i}var Wf=1,Kf="npx @kecan0406/ttheme@latest init";class dc extends Error{}function Fw(t,e,n){if(typeof t!=="number"||!Number.isInteger(t)||t<1)throw Error(`${e} schema is not a whole number from 1`);if(t>n)throw new dc(`${e} is schema ${t}, newer than the schema ${n} this ttheme reads — \`${Kf}\` updates it`)}function mn(t){let{slot:e,color:n,opacity:r}=hn({name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi,waived:t.waive},t.signatureSlots);return{name:t.name,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},...t.lead?{lead:!0}:{},order:t.order,ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},...t.role==="default"?{default:!0}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,signature:t.signature,signatureSlots:t.signatureSlots,ansi:t.ansi,gate:on(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r},...t.pictures?{pictures:t.pictures}:{}}}function De(t){return{name:t.name,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},lead:t.lead===!0,order:t.order,...t.default?{role:"default"}:{},ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selectionBackground:t.selection,ansi:t.ansi,signature:t.signature,signatureSlots:t.signatureSlots,ghostty:{iconGhost:t.cursor,iconScreen:[t.cursor,t.selection,t.background]},waive:t.waived??[],...t.pictures?{pictures:t.pictures}:{}}}var M2=6,O2=["ansi1","ansi2","ansi4","ansi3","ansi5","ansi6"];function hc(t){let e=(s)=>s.startsWith("ansi")?t.ansi[Number(s.slice(4))]:s==="foreground"?t.foreground:s==="cursor"?t.cursor:s==="selection"?t.selection:void 0,n=(s)=>s.startsWith("ansi")?`ansi${Number(s.slice(4))%8}`:s,r=new Set,i=[];for(let s of["foreground",...t.signatureSlots,...O2]){let o=e(s);if(i.length===M2||!o||r.has(n(s))||i.includes(o))continue;r.add(n(s)),i.push(o)}return i}function Mt(t){return t.filter((e)=>e.default!==!0)}function mc(){return{schema:Wf,version:It.version,gate:we,palettes:[]}}import{existsSync as x2,readFileSync as gc,statSync as Cw}from"node:fs";import{homedir as vs}from"node:os";import{join as ks}from"node:path";var I2=["core","kowiki","unlicensed"],R2=["ko","ja","en","zh","other"],_w=["keys","keyAt","ownAt","owners","cards","cardAt","ranks","tags","tagAt","tagCard"],Gw="TTNI";function wr(t=vs()){return ks(process.env.XDG_CACHE_HOME??ks(t,".cache"),"ttheme","aninames")}var N2=/[ァ-ヶ]/g,T2=/[\s\p{P}\p{S}]+/gu;function ys(t){return t.normalize("NFKC").toLowerCase().replace(N2,(e)=>String.fromCharCode(e.charCodeAt(0)-96)).replace(T2,"")}function di(t,e){let n=ys(e);if(n===""){let r=e.toLowerCase();return t.some((i)=>i.toLowerCase().includes(r))}return t.some((r)=>ys(r).includes(n))}function Yf(t){return t.length>=2||/[\p{Script=Han}\p{Script=Hangul}\p{Script=Hiragana}]/u.test(t)}function Bw(t){let e=wr(t);return I2.map((n)=>ks(e,`ttheme-${n}.json`)).filter((n)=>x2(n))}var A2=6;function Uw(t){return[`format ${A2}`,...t.map((e)=>`${e}:${Cw(e).size}:${Cw(e).mtimeMs}`)].join("|")}function P2(t){try{return JSON.parse(gc(t,"utf8"))}catch{return{}}}function H2(t){let e=new Map;for(let i of t)for(let[s,o]of Object.entries(P2(i))){let a=e.get(s)??{tags:new Set,names:[],japanese:[],generated:[],rank:0,weight:0,posts:0};a.posts=Math.max(a.posts,o.posts??0),a.generated.push(...o.generated??[]),a.japanese.push(...o.names?.ja??[]),a.tag??=o.tag;for(let c of o.danbooru??[])a.tags.add(c);for(let c of R2)a.names.push(...o.names?.[c]??[]);if(o.rank!==void 0){let c=o.weight??1;a.rank=(a.rank*a.weight+o.rank*c)/(a.weight+c),a.weight+=c}e.set(s,a)}let n=[],r=Math.log1p([...e.values()].reduce((i,s)=>Math.max(i,s.posts),1));for(let i of e.values()){if(i.tags.size===0)continue;let s=[...i.tags];n.push({tag:i.tag&&i.tags.has(i.tag)?i.tag:s[0],tags:s,names:[...new Set(i.names)],japanese:[...new Set(i.japanese)],generated:[...new Set(i.generated)],rank:i.posts>0?Math.log1p(i.posts)/r:i.rank})}return n}function Ho(t,e){let n=new t(e.length);return n.set(e),n}function zf(t){let e=[0];for(let n of t)e.push(e.at(-1)+n.length);return{bytes:Buffer.concat(t),at:Ho(Uint32Array,e)}}function F2(t,e){let n=H2(t),r=new Map,i=(E,S,x)=>{let R=r.get(E),N=S*4+x;if(!R)r.set(E,[N]);else if(R.at(-1)>>>2!==S)R.push(N);else if(R.at(-1)<N)R[R.length-1]=N};n.forEach((E,S)=>{let x=[...E.names,...E.tags.map((R)=>R.replaceAll("_"," "))];for(let[R,N]of[[x,1],[E.generated,0]])for(let F of R){let _=ys(F);if(_&&Yf(_))i(_,S,2|N);let B=F.split(/[\s・·_]+/);if(B.length<2)continue;for(let tt of B){let W=ys(tt);if(W&&Yf(W))i(W,S,N)}}});let s=[...r.keys()].sort(),o=[0],a=[];for(let E of s){for(let S of r.get(E)??[])a.push(S);o.push(a.length)}let c=n.flatMap((E,S)=>E.tags.map((x)=>[x,S])).sort(([E],[S])=>E<S?-1:E>S?1:0),u=zf(s.map((E)=>Buffer.from(E))),l=zf(n.map((E)=>Buffer.from(JSON.stringify([E.tag,E.tags,E.names,E.japanese,E.generated])))),f=zf(c.map(([E])=>Buffer.from(E))),d={keys:u.bytes,keyAt:u.at,ownAt:Ho(Uint32Array,o),owners:Ho(Uint32Array,a),cards:l.bytes,cardAt:l.at,ranks:Ho(Float32Array,n.map((E)=>E.rank)),tags:f.bytes,tagAt:f.at,tagCard:Ho(Uint32Array,c.map(([,E])=>E))},h=_w.map((E)=>{let S=d[E];return Buffer.from(S.buffer,S.byteOffset,S.byteLength)}),m=0,$=h.map((E)=>{let S=[m,E.length];return m+=Math.ceil(E.length/4)*4,S}),g=Buffer.from(JSON.stringify({stamp:e,sections:$})),b=Math.ceil((8+g.length)/4)*4,y=Buffer.alloc(b+m);y.write(Gw,0,"latin1"),y.writeUInt32LE(g.length,4),g.copy(y,8);for(let[E,S]of h.entries())S.copy(y,b+($[E]?.[0]??0));return y}function Lw(t,e,n,r){let i=e.byteOffset+n;if(i%4===0)return new t(e.buffer,i,r/4);return new t(e.buffer.slice(i,i+r),0,r/4)}function jw(t,e){if(t.toString("latin1",0,4)!==Gw)return;let n=t.readUInt32LE(4),r=JSON.parse(t.toString("utf8",8,8+n));if(r.stamp!==e)return;let i=Math.ceil((8+n)/4)*4,s=(c)=>{let[u,l]=r.sections[_w.indexOf(c)];return[i+u,l]},o=(c)=>{let[u,l]=s(c);return t.subarray(u,u+l)},a=(c)=>Lw(Uint32Array,t,...s(c));return{keys:o("keys"),keyAt:a("keyAt"),ownAt:a("ownAt"),owners:a("owners"),cards:o("cards"),cardAt:a("cardAt"),ranks:Lw(Float32Array,t,...s("ranks")),tags:o("tags"),tagAt:a("tagAt"),tagCard:a("tagCard")}}var Df;function Jf(t){try{let e=Bw(t);if(e.length===0)return;let n=Uw(e);if(Df?.stamp===n)return Df.index;let r=ks(wr(t),"index.bin"),i;try{i=jw(gc(r),n)}catch{}if(!i){let s=F2(e,n);try{P(r,s)}catch{}i=jw(s,n)}if(i)Df={stamp:n,index:i};return i}catch{return}}function Ww(t,e){let[n,r,i,s,o]=JSON.parse(t.cards.toString("utf8",t.cardAt[e],t.cardAt[e+1]));return{tag:n,tags:r,names:i,japanese:s,generated:o,rank:t.ranks[e]??0}}function Kw(t,e,n,r){let i=0,s=n;while(i<s){let o=i+s>>1;if(t.toString("utf8",e[o],e[o+1])<r)i=o+1;else s=o}return i}function zw(t,e){let n=Buffer.from(e),r=t.tagCard.length,i=Kw(t.tags,t.tagAt,r,e);if(i>=r||t.tags.compare(n,0,n.length,t.tagAt[i],t.tagAt[i+1])!==0)return;return t.tagCard[i]}var qf=/\s*[((][^()()]*[))]$/u,pc={ko:4,en:4,ja:5,zh:3};function C2(t){if(!t)return[];let e=/\p{Script=Hangul}/u,n=/^[\p{Script=Latin}\p{N}\s.'’-]+$/u,r=new Set([...t.names,...t.generated].filter((f)=>!qf.test(f))),i=(f)=>!qf.test(f)||!r.has(f.replace(qf,"")),s=t.names.filter(i),o=s.filter((f)=>e.test(f)),a=[...o,...t.generated.slice(0,o.length>0?0:2)],c=s.filter((f)=>n.test(f)),u=t.japanese.filter(i),l=s.filter((f)=>!e.test(f)&&!n.test(f)&&!u.includes(f));return[...new Set([...a.slice(0,pc.ko),...c.slice(0,pc.en),...u.slice(0,pc.ja),...l.slice(0,pc.zh)])]}var $s;function bc(t,e=vs()){if(!t)return[];if(!$s)try{$s=JSON.parse(gc(ks(wr(e),"aliases.json"),"utf8")).tags}catch{$s={}}return $s[t]??[]}function Vf(t,e=vs()){try{return L2(t,e)}catch{return new Map}}function L2(t,e){let n=new Map,r=Bw(e);if(r.length===0||t.length===0)return n;let i=Uw(r),s=ks(wr(e),"aliases.json"),o;try{o=JSON.parse(gc(s,"utf8"))}catch{}if(o?.stamp===i&&t.every((l)=>(l in o.tags))){$s=o.tags;for(let l of t)n.set(l,o.tags[l]??[]);return n}let a=Jf(e);if(!a)return n;let c=new Set([...t,...o?.stamp===i?Object.keys(o.tags):[]]),u={};for(let l of c){let f=zw(a,l);u[l]=f===void 0?[]:C2(Ww(a,f))}try{P(s,`${JSON.stringify({stamp:i,tags:u})}
|
|
248
|
-
`)}catch{}
|
|
242
|
+
*/var Wt=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right"],Vs="Original",qR=1e6,kn="_groups.toml",Vw=3,Zw=8,uf="[a-z0-9]+(?:-[a-z0-9]+)*",YR=new RegExp(`^(?:(${uf})@(${uf})/)?(${uf})$`),e0=["background","foreground","cursor","selection"];function ot(t,e){throw Error(`${t}: ${e}`)}function ki(t,e,n){if(typeof n!=="string"||!le(n))ot(t,`${e} must be "#rrggbb" (lowercase), got ${JSON.stringify(n)}`);return n}function Qs(t,e,n){if(typeof n!=="string"||n.length===0)ot(t,`${e} must be a non-empty string`);return n}function oe(t){return t.replace("@","--").replace("/","--")}function j(t){return`ttheme-${oe(t)}`}function ct(t){let e=t.indexOf("/");return e<0?void 0:t.slice(0,e)}function de(t){return t.slice(t.indexOf("/")+1)}function xe(t){let e=YR.exec(t);if(!e)return"takes lowercase letters, digits and single hyphens, as <palette> or <owner>@<market>/<palette>";if((e[1]?.length??0)>39)return"has an owner longer than a GitHub handle can be";return(e[2]?.length??0)>40||(e[3]?.length??0)>40?"is longer than 40 characters":void 0}function Xs(t){if(/[\p{Cc}"$`\\]/u.test(t))return"holds a control character, a quote, $, ` or \\";return t.length>80?"is longer than 80 characters":void 0}function Zs(t,e,n){let r=Qs(t,e,n),i=Xs(r);if(i)ot(t,`${e} ${JSON.stringify(r)} ${i}`);return r}function Qw(t,e,n){let r=Qs(t,e,n),i=xe(r);if(i)ot(t,`${e} "${r}" ${i}`);return r}function Io(t){return t&&typeof t==="object"?t:{}}function JR(t,e,n){if(e===void 0)return[n.cursor,n.selectionBackground,n.background];let r=Array.isArray(e)?e:[e];if(r.length===0)ot(t,"ghostty.icon_screen must not be empty");return r.map((i,o)=>ki(t,`ghostty.icon_screen[${o}]`,i))}function VR(t,e,n){let r=Io(e);return{iconGhost:r.icon_ghost===void 0?n.cursor:ki(t,"ghostty.icon_ghost",r.icon_ghost),iconScreen:JR(t,r.icon_screen,n)}}function ZR(t){return new Map([...e0.map((e)=>[e,t[e]]),...t.ansi.map((e,n)=>[`ansi${n}`,e])])}function QR(t,e,n){if(!Array.isArray(e)||e.length!==Vw)ot(t,`meta.signature must name exactly ${Vw} palette slots`);let r=ZR(n),i=[],o=[];for(let[s,a]of e.entries()){let c=`meta.signature[${s}]`,u=Qs(t,c,a),l=r.get(u);if(l===void 0)ot(t,`${c} ${JSON.stringify(a)} is not a palette slot — use ${e0.join(", ")} or ansi0-ansi15`);i.push(u),o.push(l)}if(new Set(o).size!==o.length)ot(t,"meta.signature slots must resolve to three different colors");return{names:i,colors:o}}function XR(t,e,n,r=!1){if(e===void 0)return;if(!n)ot(t,"meta.booru_sites renames meta.booru per site, so it needs meta.booru");if(!e||typeof e!=="object"||Array.isArray(e))ot(t,'meta.booru_sites must be a table of site = "tag" or site = ["tag", ...]');let i={};for(let[o,s]of Object.entries(e)){let a=V.find((u)=>u.key===o);if(!a){if(r)continue;ot(t,`meta.booru_sites.${o} is not a find site — use ${V.map((u)=>u.key).join(", ")}`)}let c=typeof s==="string"?[s]:Array.isArray(s)?s:void 0;if(!c||c.some((u)=>typeof u!=="string"||u===""||/\s/.test(u)))ot(t,`meta.booru_sites.${o} must be one tag or a list of tags, got ${JSON.stringify(s)}`);if(c.length>1&&!a.ors)ot(t,`meta.booru_sites.${o} takes one tag — ${a.name} does not OR tags`);if(c.length>a.tagBudget)ot(t,`meta.booru_sites.${o} takes ${a.tagBudget} tags at most — ${a.name} searches that many at a time`);i[o]=c}return i}function tP(t,e,n){if(e===void 0)return;if(!Array.isArray(e)||e.length===0||e.length>Zw)ot(t,`[[picture]] holds 1 to ${Zw} pictures`);let r=e.flatMap((i,o)=>{let s=Io(i),a=`picture[${o}]`,c=V.find((h)=>h.key===s.site);if(!c){if(n)return[];ot(t,`${a}.site must be one of ${V.map((h)=>h.key).join(", ")}`)}if(typeof s.id!=="number"||!Number.isSafeInteger(s.id)||s.id<=0)ot(t,`${a}.id must be the post's number on ${c.name}`);let{size:u,position:l,opacity:d}=s;if(u!==void 0&&u!=="fill"&&!(Number.isInteger(u)&&Number(u)>=20&&Number(u)<=999))ot(t,`${a}.size must be "fill" or a percentage from 20 to 999`);let f=l===void 0||Wt.includes(l);if(!f&&!n)ot(t,`${a}.position must be one of ${Wt.join(", ")}`);if(d!==void 0&&!(typeof d==="number"&&d>=0&&d<=1))ot(t,`${a}.opacity must be a number from 0 to 1`);return[{site:c.key,id:s.id,...u!==void 0?{size:u}:{},...l!==void 0&&f?{position:l}:{},...d!==void 0?{opacity:d}:{}}]});return r.length>0?r:void 0}function df(t,e){try{return $i(e)}catch(n){ot(t,`is not valid TOML — ${(n instanceof Error?n.message:String(n)).split(`
|
|
243
|
+
`)[0]}`)}}function eP(t){let n=df(kn,Xw(t0(t,kn),"utf8")).group;if(!Array.isArray(n)||n.length===0)ot(kn,"needs at least one [[group]] table");return n.map((r)=>{let i=Io(r);return{name:Zs(kn,"group.name",i.name),native:i.native===void 0?void 0:Zs(kn,"group.native",i.native),lead:Qs(kn,"group.lead",i.lead)}})}function nP(t,e){if(!Array.isArray(e)||e.length===0)ot(t,'meta.native_names must be a list of names, like ["後藤ひとり"]');return e.map((n,r)=>{let i=Zs(t,`meta.native_names[${r}]`,n);if(i.includes("|"))ot(t,`meta.native_names[${r}] ${JSON.stringify(i)} contains |`);return i})}var lf={"":["$schema","meta","colors","contrast","ghostty","picture"],meta:["name","base","group","ansi_source","booru","booru_sites","native_names","signature","order","role"],colors:["background","foreground","cursor","selection_background","ansi"],contrast:["waive","reason"],ghostty:["icon_ghost","icon_screen"],picture:["site","id","size","position","opacity"]};function n0(t,e){let n=df(t,e),r=(i,o,s=[])=>o&&typeof o==="object"&&!Array.isArray(o)?Object.keys(o).filter((a)=>!s.includes(a)).map((a)=>i?`${i}.${a}`:a):[];return[...r("",n,lf[""]),...["meta","colors","contrast","ghostty"].flatMap((i)=>r(i,n[i],lf[i])),...(Array.isArray(n.picture)?n.picture:[]).flatMap((i,o)=>r(`picture[${o}]`,i,lf.picture))]}function ff(t,e,n){let r=df(t,e),i=Io(r.meta),o=Io(r.colors),s=Io(r.contrast),a=o.ansi;if(!Array.isArray(a)||a.length!==16)ot(t,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(a)?a.length:typeof a}`);let c=Qw(t,"meta.name",i.name);if(c!==n.name)ot(t,`meta.name "${c}" does not match its file — it lives at ${n.name}`);let u=n.open===!0;for(let F of["order","role"])if(u&&i[F]!==void 0)ot(t,`meta.${F} is for the official palettes — a market palette follows its base`);let l=i.role;if(l!==void 0&&l!=="default")ot(t,`meta.role must be "default", got ${JSON.stringify(l)}`);let d=i.base===void 0?void 0:Qw(t,"meta.base",i.base);if(d!==void 0&&!u)ot(t,"meta.base is for market palettes");let f=d===void 0?void 0:n.bases?.get(d),h=u&&i.group===void 0?f?.group??Vs:Zs(t,"meta.group",i.group),m=n.groups.get(h);if(!m&&!(u&&(h===Vs||n.open)))ot(t,`meta.group "${h}" has no [[group]] table in ${kn}`);let p=ki(t,"colors.background",o.background),b=ki(t,"colors.foreground",o.foreground),$=ki(t,"colors.cursor",o.cursor),k=ki(t,"colors.selection_background",o.selection_background),v=a.map((F,W)=>ki(t,`colors.ansi[${W}]`,F)),S=QR(t,i.signature,{background:p,foreground:b,cursor:$,selection:k,ansi:v}),M=i.booru===void 0?void 0:Qs(t,"meta.booru",i.booru);if(M!==void 0&&/[\s\p{Cc}]/u.test(M))ot(t,`meta.booru must be a single booru tag, got ${JSON.stringify(M)}`);let I=XR(t,i.booru_sites,M,n.foreign===!0),x=i.native_names===void 0?void 0:nP(t,i.native_names),H=Array.isArray(s.waive)?s.waive.map(String):[];if(H.length>0&&typeof s.reason!=="string")ot(t,"contrast.waive needs a contrast.reason explaining why");let N=tP(t,r.picture,n.foreign===!0);return{name:c,...d?{base:d}:{},group:h,native:m?.native,...x?{nativeNames:x}:{},lead:!u&&m?.lead===c,order:u?f?.order??qR:Number(i.order),role:l,ansiSource:u&&i.ansi_source===void 0?d??"original":Zs(t,"meta.ansi_source",i.ansi_source),...M?{booru:M}:{},...I?{booruSites:I}:{},background:p,foreground:b,cursor:$,selectionBackground:k,ansi:v,signature:S.colors,signatureSlots:S.names,ghostty:VR(t,r.ghostty,{background:p,cursor:$,selectionBackground:k}),waive:H,waiveReason:typeof s.reason==="string"?s.reason:void 0,...N?{pictures:N}:{}}}function r0(t){let e=eP(t),n=new Map(e.map((o)=>[o.name,o]));if(n.size!==e.length)ot(kn,"group.name must be unique");let r=zR(t).filter((o)=>o.endsWith(".toml")&&!o.startsWith("_")).map((o)=>ff(o,Xw(t0(t,o),"utf8"),{name:DR(o,".toml"),groups:n})).sort((o,s)=>o.order-s.order);if(new Set(r.map((o)=>o.order)).size!==r.length)throw Error("themes: meta.order must be unique across all themes");for(let o of e){let s=r.filter((a)=>a.group===o.name);if(s.length===0)ot(kn,`group "${o.name}" has no themes`);if(!s.some((a)=>a.name===o.lead))ot(kn,`group "${o.name}" lead "${o.lead}" is not one of its themes`)}return r}function i0(t){return t.filter((e)=>e.role===void 0)}function yi(t){let e=(r,i)=>r<i?-1:r>i?1:0,n=(r)=>ct(r.name)?r.name:r.base??r.name;return[...t].sort((r,i)=>Number(ct(r.name)!==void 0)-Number(ct(i.name)!==void 0)||e(r.group.toLowerCase(),i.group.toLowerCase())||Number(r.catalog===void 0)-Number(i.catalog===void 0)||e((r.catalog??"").toLowerCase(),(i.catalog??"").toLowerCase())||e(n(r),n(i))||Number(r.base!==void 0)-Number(i.base!==void 0)||e(r.name,i.name))}var ta={width:2560,height:1550},cP=1,uP=2560,lP=0.1,p0=0.99,dP=2,vi={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},fP=St(bt("#19161e","#9b86c8",0.2)),hP="shelf",Uc="originals",mP="images.json",mf=1;function pP(t,e){if(e==="background"||e==="foreground"||e==="cursor")return t[e];if(e==="selection"&&t.selection)return t.selection;let n=/^ansi(\d|1[0-5])$/.exec(e),r=n?t.ansi[Number(n[1])]:void 0;if(!r)throw Error(`${t.name} has no slot ${e}`);return r}function o0(t){if(t(1))return 1;let e=0,n=1;for(let r=0;r<40;r++){let i=(e+n)/2;if(t(i))e=i;else n=i}return e}function g0(t,e){let n=(s)=>Vg({name:t.name,background:bt(t.background,e,s),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).map((a)=>a.rule),r=new Set(n(0)),i=o0((s)=>n(s).every((a)=>r.has(a))),o=o0((s)=>St(bt(t.background,e,s))<=fP);return{cap:i,matched:o,opacity:Math.floor(Math.min(i,o)*100)/100}}function s0(t,e){let n=pP(t,e),{cap:r,matched:i,opacity:o}=g0(t,n),s=nt(t.background),a=Math.hypot(...nt(n).map((c,u)=>(c-(s[u]??0))*o));return{slot:e,color:n,cap:r,matched:i,opacity:o,reach:a}}function b0(t,e){return g0(t,e).opacity}function yn(t,e){let n=s0(t,"cursor");if(n.opacity>=lP)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>s0(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function gP(t){return iw(t)??{x:0,y:0,w:t.width,h:t.height}}function kf(t,e){if(t<=0||e<=0)return ta;let n=Math.min(1,ta.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function w0(t,e,n,r){if(r<vi.stands){let c=t.w*n>t.h*e?{x:t.x+(t.w-t.h*e/n)/2,y:t.y,w:t.h*e/n,h:t.h}:{x:t.x,y:t.y,w:t.w,h:t.w*n/e};return{crop:c,at:{x:0,y:0,w:e,h:n},focus:(c.y-t.y+c.h/2)/t.h}}let i=Math.max(vi.tall*n,vi.reach*e*t.h/t.w),o=i*t.w/t.h;if(o>vi.widest*e)o=vi.widest*e,i=o*t.h/t.w;let s=vi.headroom*n,a=Math.min(1,(n-s)/i);return{crop:{x:t.x,y:t.y,w:t.w,h:t.h*a},at:{x:e*(1-vi.margin)-o,y:s,w:o,h:i*a},focus:Math.min(1,(n/2-s)/i)}}function bP(t,e){return 0.299*(t[e]??0)+0.587*(t[e+1]??0)+0.114*(t[e+2]??0)}function wP(t,e){let n=new Uint32Array(256),r=Math.max(1,Math.floor(e.w*e.h/400000)),i=0;for(let s=0;s<e.w*e.h;s+=r){let a=((e.y+Math.floor(s/e.w))*t.width+e.x+s%e.w)*4;if((t.data[a+3]??0)>=128){let c=Math.round(bP(t.data,a));n[c]=(n[c]??0)+1,i++}}let o=0;for(let s=0;s<256&&i>0;s++)if(o+=n[s]??0,o>=i*p0)return Math.min(dP,Math.max(1,255/Math.max(1,s)));return 1}var hf=Float64Array.from({length:256},(t,e)=>{let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4});function $P(t,e,n){return`#${[t,e,n].map((r)=>Math.round(r).toString(16).padStart(2,"0")).join("")}`}function kP(t,e){let n=new Uint32Array(256),r=new Float64Array(768),i=Math.max(1,Math.floor(e.w*e.h/400000)),o=0;for(let a=0;a<e.w*e.h;a+=i){let c=((e.y+Math.floor(a/e.w))*t.width+e.x+a%e.w)*4;if((t.data[c+3]??0)>=128){let u=t.data[c]??0,l=t.data[c+1]??0,d=t.data[c+2]??0,f=Math.round(255*Math.sqrt(0.2126*(hf[u]??0)+0.7152*(hf[l]??0)+0.0722*(hf[d]??0)));n[f]=(n[f]??0)+1,r[f*3]=(r[f*3]??0)+u,r[f*3+1]=(r[f*3+1]??0)+l,r[f*3+2]=(r[f*3+2]??0)+d,o++}}let s=0;for(let a=0;a<256&&o>0;a++)if(s+=n[a]??0,s>=o*p0){let c=Math.max(1,n[a]??1);return $P((r[a*3]??0)/c,(r[a*3+1]??0)/c,(r[a*3+2]??0)/c)}return"#ffffff"}function yP(t,e){let n=t.data,r=new Uint8Array(t.width*t.height);for(let i=0,o=0;i<r.length;i++,o+=4){let s=n[o+3];if(s===0)continue;let a=(0.299*n[o]+0.587*n[o+1]+0.114*n[o+2])*e;r[i]=(a>255?255:a)*s/255+0.5}return{width:t.width,height:t.height,data:r}}function $0(t,e,n){let r=Math.max(0,Math.round(t.at.x)),i=Math.max(0,Math.round(t.at.y)),o=Math.min(e,Math.round(t.at.x+t.at.w)),s=Math.min(n,Math.round(t.at.y+t.at.h));if(o<=r||s<=i)return;let a=t.crop.w/t.at.w,c=t.crop.h/t.at.h;return{x0:r,y0:i,x1:o,y1:s,box:{x:t.crop.x+(r-t.at.x)*a,y:t.crop.y+(i-t.at.y)*c,w:(o-r)*a,h:(s-i)*c}}}function Gc(t,e,n,r){let i=new Float32Array(n*r),o=$0(e,n,r);if(o){let s=cw(t,o.box,o.x1-o.x0,o.y1-o.y0);for(let a=o.y0;a<o.y1;a++)i.set(s.data.subarray((a-o.y0)*(o.x1-o.x0),(a-o.y0+1)*(o.x1-o.x0)),a*n+o.x0)}return{width:n,height:r,data:i}}function yf(t,e,n,r){let i=new Uint8Array(n*r*4),o=$0(e,n,r);if(o){let s=o.x1-o.x0,a=Fs(t,o.box,s,o.y1-o.y0);for(let c=o.y0;c<o.y1;c++)i.set(a.data.subarray((c-o.y0)*s*4,(c-o.y0+1)*s*4),(c*n+o.x0)*4)}return{width:n,height:r,data:i}}function pf(t,e){if(e<=0)return t;let{width:n,height:r}=t,i=[0,1,2,3].map(()=>({width:n,height:r,data:new Float32Array(n*r)}));for(let a=0;a<n*r;a++){let c=t.data[a*4+3]??0;for(let u=0;u<3;u++)i[u].data[a]=(t.data[a*4+u]??0)*c/255;i[3].data[a]=c}let o=i.map((a)=>js(a,e).data),s=new Uint8Array(n*r*4);for(let a=0;a<n*r;a++){let c=o[3]?.[a]??0;if(c<=0)continue;for(let u=0;u<3;u++)s[a*4+u]=Math.min(255,Math.max(0,Math.round((o[u]?.[a]??0)*255/c)));s[a*4+3]=Math.min(255,Math.round(c))}return{width:n,height:r,data:s}}function vf(t){let e=gP(t),n,r;return{box:e,clear:Kn(t,e),get ink(){return n??=yP(t,wP(t,e)),n},image:t,get peak(){return r??=kP(t,e),r}}}function k0(t,e,n,r,i){let o=vf(t),{box:s,clear:a,ink:c}=o,u=w0(s,e,n,a),l=Math.min(1,uP/Math.max(s.w,s.h)),d={x:0,y:0,w:Math.round(s.w*l),h:Math.round(s.h*l)},f=r*d.w*u.crop.w/(s.w*u.at.w);if(i==="original")return{coloring:i,figure:pf(Fs(t,s,d.w,d.h),f),fill:pf(yf(t,u,e,n),r),focus:u.focus,peak:o.peak};let h=Gc(c,{crop:s,at:d,focus:u.focus},d.w,d.h),m=Gc(c,u,e,n);return{coloring:i,figure:_s(js(h,f)),fill:_s(js(m,r)),focus:u.focus}}function vP(t,e,n,r){let i=nt(e),o=nt(n),s=new Uint8Array(t.width*t.height*4);for(let a=0;a<t.data.length;a++){let c=(t.data[a]??0)/255*r;for(let u=0;u<3;u++)s[a*4+u]=Math.round((i[u]??0)+((o[u]??0)-(i[u]??0))*c);s[a*4+3]=255}return{width:t.width,height:t.height,data:s}}function SP(t,e,n){let r=nt(e),i=new Uint8Array(t.width*t.height*4);for(let o=0;o<t.width*t.height;o++){let s=(t.data[o*4+3]??0)/255*n;for(let a=0;a<3;a++)i[o*4+a]=Math.round((r[a]??0)+((t.data[o*4+a]??0)-(r[a]??0))*s);i[o*4+3]=255}return{width:t.width,height:t.height,data:i}}function y0(t,e,n,r,i,o,s,a="tone"){let{box:c,clear:u,ink:l}=t,d=w0(c,r,i,u),f=Math.round(100*d.at.w/d.crop.w/Math.min(r/c.w,i/c.h)),h=s?.size??"fill",m=h==="fill"?d:{crop:c,at:Ho(c.w,c.h,r,i,h,s?.at??5,!1,h>100?Math.round(d.focus*100):-1),focus:d.focus},p=a==="original"?b0(e,t.peak):n.opacity,b=s?.opacity??p;return{image:a==="original"?SP(pf(yf(t.image,m,r,i),o),e.background,b):vP(_s(js(Gc(l,m,r,i),o)),e.background,n.color,b),fill:f,opacity:p}}function Z(t){return Y(t,"ttheme","backgrounds")}function gf(t){return Y(t,mP)}function Si(t){try{return Po(t,"utf8")}catch{return}}function Or(t){try{return oP(t)}catch{return[]}}function Rt(t){let e=Si(gf(t));if(e===void 0)return EP(t);let n=JSON.parse(e);if(n.version!==mf)throw Error(`${gf(t)} is version ${n.version} — this ttheme reads version ${mf}`);return n}function je(t){return t.coloring??"tone"}function Sf(t){return{name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,...t.selection?{selection:t.selection}:{},ansi:t.ansi,...t.waived?{waived:t.waived}:{}}}function No(t){return{hue:{color:t.backdrop.color,opacity:t.backdrop.opacity},colors:Sf(t)}}function Ao(t){return t.tone===void 0&&je(t)==="tone"}function a0(t){return(t.artist??[]).map((e)=>e.replace(/[\s,]+/g,"_")).join(",")}function v0(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.artist?.length?[`# by ${a0(r)}`]:[],...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${n+1}/${e.pictures.length}`,...e.pictures.map((i)=>[`# picture ${i.key} ${i.stem} ${i.fill} ${i.opacity} ${i.artist?.length?a0(i):"-"}`,...i.from?[i.from]:[]].join(" ")),...e.pictures.filter((i)=>je(i)==="original").map((i)=>`# colors ${i.key} original`),`background-image = ${Y(t,r.fill)}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${r.opacity}`,`config-file = ?${r.stem}.tune.conf`,`config-file = ?${r.stem}.off.conf`,""].join(`
|
|
244
|
+
`)}function S0(t){let e=Z(t);for(let[n,r]of Object.entries(Rt(e).palettes)){let i=Y(e,`${oe(n)}.conf`),o=v0(e,r);if(Si(i)!==o)L(i,o)}}function Ei(t,e,n){L(gf(t),`${JSON.stringify(e,null,2)}
|
|
245
|
+
`);for(let r of n){let i=e.palettes[r],o=Y(t,`${oe(r)}.conf`);if(i)L(o,v0(t,i));else Ro(o,{force:!0})}}function E0(t,e){let n=Z(t),r=Rt(n),i=[];for(let[o,s]of e){let a=r.palettes[o];if(a&&!r.palettes[s])r.palettes[s]=a,delete r.palettes[o],i.push(o,s)}if(i.length>0)Ei(n,r,i)}function M0(t,e){return Or(t).filter((n)=>n.startsWith(`${e}.`)||n.startsWith(`${e}@`))}function Ef(t,e){for(let n of M0(t,e))Ro(Y(t,n),{force:!0})}function x0(t,e){Ef(t,e.stem);for(let n of[e.original,e.cut])if(n)Ro(Y(t,n),{force:!0})}function c0(t,e,n,r){let i=m0(/^background-image\s*=\s*(.*?)\s*$/m.exec(e??"")?.[1]??"");if(!i.startsWith(`${t}.`)||!/^\.[0-9a-f]{8}@fill-\d+\.png$/.test(i.slice(t.length)))return;let o=i.slice(0,i.indexOf("@")),s=r??/^# image (\S+)$/m.exec(e??"")?.[1]??`picture_${o.slice(t.length+1)}`,a=/^# from (.+)$/m.exec(e??"")?.[1],c=Number(/^background-image-opacity\s*=\s*(\S+)/m.exec(e??"")?.[1]??1),u=n.find((l)=>l.startsWith(`${t}-${s}.`));return{key:s,stem:o,fill:i,opacity:Number.isFinite(c)?c:1,...a?{from:a}:{},...u?{original:Y(Uc,u)}:{}}}function u0(t,e){if($f(t))h0(t,e)}function EP(t){let e={version:mf,palettes:{}};if(!$f(t))return e;let n=Or(Y(t,Uc)),r=Or(t).filter((o)=>o.endsWith(".conf")&&o!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(o)).map((o)=>o.slice(0,-5)),i=Y(t,hP);for(let o of new Set([...r,...Or(i)])){let s=[],a=c0(o,Si(Y(t,`${o}.conf`)),n);if(a)u0(Y(t,`${o}.tune.conf`),Y(t,`${a.stem}.tune.conf`)),u0(Y(t,`${o}.off.conf`),Y(t,`${a.stem}.off.conf`)),s.push(a);for(let c of Or(Y(i,o))){let u=Y(i,o,c),l=c0(o,Si(Y(u,".conf")),n,c);if(!l)continue;for(let d of Or(u)){let f=d===".tune.conf"||d===".off.conf"?`${l.stem}${d}`:`${o}${d}`;if(d!==".conf")h0(Y(u,d),Y(t,f))}Ro(u,{recursive:!0}),s.push(l)}if(Or(Y(i,o)).length===0)Ro(Y(i,o),{recursive:!0,force:!0});if(s.length>0)s.sort((c,u)=>c.key<u.key?-1:c.key>u.key?1:0),e.palettes[o]={active:(a??s[0]).key,pictures:s}}if(Or(i).length===0)Ro(i,{recursive:!0,force:!0});return Ei(t,e,Object.keys(e.palettes)),e}function l0(t,e,n){return e.startsWith("~/")?Y(n,e.slice(2)):aP(e)?e:Y(t,e)}function Oe(t,e,n){let r=new Map,i=(a,c)=>{let u=Si(a);if(u===void 0)return!1;for(let l of u.split(`
|
|
246
|
+
`)){let d=/^([a-z-]+)\s*=\s*(.*?)\s*$/.exec(l);if(d?.[1]==="config-file"&&c<4)i(l0(t,d[2].replace(/^\?/,""),n),c+1);else if(d&&/^background-image(?:-fit|-opacity|-position)?$/.test(d[1]))r.set(d[1],d[2])}return!0};if(!i(Y(t,`${oe(e)}.conf`),0))return;let o=r.get("background-image")??"";if(o==="")return;let s=Number(r.get("background-image-opacity")??1);return{image:l0(t,o,n),opacity:Number.isFinite(s)?s:1,cover:r.get("background-image-fit")==="cover",position:r.get("background-image-position")??"center"}}function se(t){return`${t.site}_${t.id}`}function Wc(t,e,n){let r=Z(t),i=Rt(r),o=i.palettes[e];if(!o)throw Error(`${e} has no image`);let s=o.pictures.findIndex((u)=>u.key===(n??o.active));if(s===-1)throw Error(`${e} has no picture ${n}`);let[a]=o.pictures.splice(s,1);x0(r,a);let c=o.pictures[s%Math.max(o.pictures.length,1)];if(!c)delete i.palettes[e];else if(a.key===o.active)o.active=c.key;return Ei(r,i,[e]),{key:a.key,left:o.pictures.length}}function O0(t,e,n,r){let i=n.coloring==="original"?Fe(n.figure):pi(n.figure,r),o=n.coloring==="original"?Fe(n.fill):pi(n.fill,r),s=`${oe(t)}.${f0("sha1").update(e).update(i).update(o).digest("hex").slice(0,8)}`,a=`${s}@fill-${Math.round(n.focus*100)}.png`;return{stem:s,fill:a,files:[[`${s}.png`,i],[a,o]]}}function I0(t,e,n,r){return n==="original"&&r?{coloring:"original",opacity:b0(t,r),peak:r}:{coloring:"tone",opacity:e.opacity,tone:e.color}}function bf(t,e){return Y(Uc,`${oe(t)}-${e}`)}function Mf(t,e){return e.map(([n,r])=>{let i=Y(t,n);return L(i,r),i})}function Kc(t,e,n,r,i,o,s,a="tone"){let c=Z(t),u=e.name,l=se(i),d=Rt(c),f=d.palettes[u]??{active:l,pictures:[]},h=kf(o.width,o.height),m=k0(r,h.width,h.height,s,a),p=O0(u,l,m,n.color),b=bf(u,l),$={key:l,stem:p.stem,fill:p.fill,...I0(e,n,m.coloring,m.coloring==="original"?m.peak:void 0),blur:s,window:h,...i.from?{from:i.from}:{},...i.artist?.length?{artist:i.artist}:{},...i.source?{source:i.source}:{},original:`${b}.${i.ext}`,...i.cut?{cut:`${b}.cut.png`}:{}},k=f.pictures.find((S)=>S.key===l);if(k)x0(c,k);iP(Y(c,Uc),{recursive:!0});let v=Mf(c,[...p.files,[$.original,i.bytes],...$.cut?[[$.cut,Yd(mi(r))]]:[]]);return f.pictures=k?f.pictures.map((S)=>S===k?$:S):[...f.pictures,$],f.active=l,d.palettes[u]=f,Ei(c,d,[u]),[...v,Y(c,`${oe(u)}.conf`)]}function To(t,e,n){let r=Z(t),i=Rt(r),o=i.palettes[e],s=o?o.pictures.findIndex((a)=>a.key===n):-1;if(!o||s===-1)throw Error(`${e} has no picture ${n}`);if(o.active!==n)o.active=n,Ei(r,i,[e]);return{at:s+1,of:o.pictures.length}}function fe(t,e){let n=Rt(Z(t)).palettes[e];if(!n)return[];return[...n.pictures.filter((i)=>i.key===n.active),...n.pictures.filter((i)=>i.key!==n.active)]}var wf="top-right";function Ho(t,e,n,r,i,o,s,a=-1){let c=Math.trunc,u=(o-1)%3,l=c((o-1)/3),d=n*e>=r*t!==!s,f=d?c(i*n/100):c(i*r*t/(100*e)),h=d?c(i*n*e/(100*t)):c(i*r/100),m=c(u*(n-f)/2),p=c(l*(r-h)/2);if(a>=0){if(f>n)m=c((n-f)/2);if(h>r)p=Math.max(r-h,Math.min(0,c(r/2)-c(a*h/100)))}return{x:m,y:p,w:f,h}}function xf(t,e){let n=Si(Y(t,`${e.stem}.tune.conf`));if(n===void 0)return{};let r=(u)=>new RegExp(`^${u}\\s*=\\s*(.*?)\\s*$`,"m").exec(n)?.[1]??"",i=m0(r("background-image")),o=/@(\d+)-/.exec(i)?.[1],s=/@fill-\d+\.png$/.test(i)?"fill":o?Number(o):r("background-image-fit")==="cover"?"fill":100,a=r("background-image-position").replace("center-center","center")||"center",c=Number(r("background-image-opacity")||1);return{...s!=="fill"?{size:s}:{},...a!==wf?{position:a}:{},...Number.isFinite(c)&&c!==e.opacity?{opacity:c}:{}}}function ea(t,e,n,r,i){let o=n.size??"fill",s=n.position??wf,a=n.opacity??e.opacity;if(o==="fill"&&s===wf&&a===e.opacity)return;let c=Wt.indexOf(s)+1,u=Y(t,`${e.stem}.png`),l=Y(t,e.fill),d=!0,f=typeof o==="number"&&(o>100||!r&&s!=="center");if(o===100&&!f)l=u,d=!1;else if(typeof o==="number"){if(Ao(e))throw Error(`${e.stem} was drawn before pictures kept their tone — init draws it again`);let m=_t(new Uint8Array(Po(u))),{width:p,height:b}=f?ta:m,$=f?Number(/@fill-(\d+)\.png$/.exec(e.fill)?.[1]??50):-1,k=Ho(m.width,m.height,p,b,o,c,!1,$);l=Y(t,`${e.stem}@${o}-${s}${f?`-${p}x${b}`:""}.png`);let S={crop:{x:0,y:0,w:m.width,h:m.height},at:k,focus:$};L(l,e.tone?pi(_s(Gc(mi(m),S,p,b)),e.tone):Fe(yf(m,S,p,b))),d=f}let h=Y(t,`${e.stem}.tune.conf`);return L(h,[`background-image = ${l.startsWith(`${i}/`)?`~${l.slice(i.length)}`:l}`,`background-image-fit = ${d?"cover":"contain"}`,`background-image-position = ${s}`,`background-image-opacity = ${a}`,""].join(`
|
|
247
|
+
`)),h}function R0(t){let e=new Map;for(let[n,r]of Object.entries(Rt(Z(t)).palettes)){let[,i,o]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&o)e.set(n,{site:i,id:Number(o)})}return e}function P0(t){try{let e=wn(new Uint8Array(Po(t)));return e?{width:e.width,height:e.height}:void 0}catch{return}}function N0(t,e,n,r,i,o,s){let a=[n.original,n.cut].map((c)=>{if(!c)return"";try{let{size:u,mtimeMs:l}=sP(Y(t,c));return`${c}:${u}:${l}`}catch{return}});if(!n.original||a.includes(void 0))return;return Uw([cP,oe(e),n.key,...a,r.width,r.height,i,o,o==="tone"?s:""])}function MP(t,e,n){if(!n.window||n.blur===void 0)return;let r=N0(t,e,n,n.window,n.blur,je(n),n.tone??"");if(!r||Ww(r))return;try{sf(r,{stem:n.stem,fill:n.fill,...n.peak?{peak:n.peak}:{},figure:Po(Y(t,`${n.stem}.png`)),picture:Po(Y(t,n.fill))})}catch{}}function A0(t,e,n,r,i,o,s,a,c){let u=c?void 0:N0(t,e,n,r,s,a,o.hue.color),l=u?Kw(u):void 0;if(l)return{made:{stem:l.stem,fill:l.fill,files:[[`${l.stem}.png`,l.figure],[l.fill,l.picture]]},peak:l.peak,image:void 0};let d=i();if(!d)return null;let f=k0(d,r.width,r.height,s,a),h=O0(e,n.key,f,o.hue.color),m=f.coloring==="original"?f.peak:void 0;if(u)sf(u,{stem:h.stem,fill:h.fill,...m?{peak:m}:{},figure:h.files[0]?.[1],picture:h.files[1]?.[1]});return{made:h,peak:m,image:d}}function na(t,e,n,r,i,o,s,a,c,u=je(n)){let l=Z(t),d=n.window??P0(Y(l,n.fill))??ta,f=A0(l,e,n,d,r,i,o,u,c);if(!f)return null;let{made:h,peak:m,image:p}=f,b={...n,stem:h.stem,fill:h.fill,...I0(i.colors,i.hue,u,m),blur:o,window:d,...c?{cut:`${bf(e,n.key)}.cut.png`}:{}};if(u==="original")delete b.tone;else delete b.peak;if(c&&p)L(Y(l,`${bf(e,n.key)}.cut.png`),Yd(mi(p)));if(h.stem===n.stem)return b;if(je(n)!==u)MP(l,e,n);Mf(l,h.files);let $=xf(l,n);ea(l,b,je(n)===u?$:{...$,opacity:void 0},s,a);let k=Y(l,`${n.stem}.off.conf`);if($f(k))rP(k,Y(l,`${b.stem}.off.conf`));return b}function T0(t,e,n,r,i,o,s){let a=Z(t),c=n.window??P0(Y(a,n.fill))??ta;return A0(a,e,n,c,r,i,o,s,!1)!==null}function Of(t,e){let n=Z(t),r=Rt(n),i=new Set,o=[];for(let{name:s,picture:a}of e){let c=r.palettes[s],u=c?.pictures.findIndex((d)=>d.key===a.key)??-1,l=c?.pictures[u];if(!c||!l)continue;if(c.pictures[u]=a,i.add(s),l.stem!==a.stem)o.push(l.stem)}if(i.size===0)return;Ei(n,r,[...i]);for(let s of o)Ef(n,s)}function xP(t,e,n,r){let i=M0(t,n.stem).filter((a)=>a.endsWith(".png")).map((a)=>{let c=new Uint8Array(Po(Y(t,a)));return[a,Mc(c,r.color)??pi(mi(_t(c)),r.color)]}),o=(a)=>i.find(([c])=>c===a)?.[1]??new Uint8Array,s=`${oe(e)}.${f0("sha1").update(n.key).update(o(`${n.stem}.png`)).update(o(n.fill)).digest("hex").slice(0,8)}`;Mf(t,i.map(([a,c])=>[s+a.slice(n.stem.length),c]));for(let a of["tune","off"]){let c=Si(Y(t,`${n.stem}.${a}.conf`));if(c!==void 0)L(Y(t,`${s}.${a}.conf`),c.split(n.stem).join(s))}return{...n,stem:s,fill:s+n.fill.slice(n.stem.length),tone:r.color}}function d0(t,e){return je(t)!=="original"&&t.tone!==void 0&&t.tone!==e.hue.color}function H0(t,e){let n=Z(t),r=Rt(n),i=[],o=[];for(let[s,a]of Object.entries(r.palettes)){let c=e.get(s);if(!c||!a.pictures.some((u)=>d0(u,c)))continue;a.pictures=a.pictures.map((u)=>{if(!d0(u,c))return u;let l=xP(n,s,u,c.hue);if(l.stem!==u.stem)o.push(u.stem);return l}),i.push(s)}if(i.length>0){Ei(n,r,i);for(let s of o)Ef(n,s)}return i}var OP=1;function Qe(t){let{slot:e,color:n,opacity:r}=yn({name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi,waived:t.waive},t.signatureSlots);return{name:t.name,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},...t.lead?{lead:!0}:{},order:t.order,ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},...t.role==="default"?{default:!0}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,signature:t.signature,signatureSlots:t.signatureSlots,ansi:t.ansi,gate:pn(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r},...t.pictures?{pictures:t.pictures}:{}}}function Ie(t){return{name:t.name,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},lead:t.lead===!0,order:t.order,...t.default?{role:"default"}:{},ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},background:t.background,foreground:t.foreground,cursor:t.cursor,selectionBackground:t.selection,ansi:t.ansi,signature:t.signature,signatureSlots:t.signatureSlots,ghostty:{iconGhost:t.cursor,iconScreen:[t.cursor,t.selection,t.background]},waive:t.waived??[],...t.pictures?{pictures:t.pictures}:{}}}var IP=6,RP=["ansi1","ansi2","ansi4","ansi3","ansi5","ansi6"];function zc(t){let e=(o)=>o.startsWith("ansi")?t.ansi[Number(o.slice(4))]:o==="foreground"?t.foreground:o==="cursor"?t.cursor:o==="selection"?t.selection:void 0,n=(o)=>o.startsWith("ansi")?`ansi${Number(o.slice(4))%8}`:o,r=new Set,i=[];for(let o of["foreground",...t.signatureSlots,...RP]){let s=e(o);if(i.length===IP||!s||r.has(n(o))||i.includes(s))continue;r.add(n(o)),i.push(s)}return i}function Pt(t){return t.filter((e)=>e.default!==!0)}function Dc(){return{schema:OP,version:lt.version,gate:ve,palettes:[]}}import{existsSync as PP,readFileSync as Yc,statSync as C0}from"node:fs";import{homedir as jo}from"node:os";import{join as Lo}from"node:path";var NP=["core","kowiki","unlicensed"],AP=["ko","ja","en","zh","other"],j0=["keys","keyAt","ownAt","owners","cards","cardAt","ranks","tags","tagAt","tagCard"],_0="TTNI";function Ir(t=jo()){return Lo(process.env.XDG_CACHE_HOME??Lo(t,".cache"),"ttheme","aninames")}var TP=/[ァ-ヶ]/g,HP=/[\s\p{P}\p{S}]+/gu;function Fo(t){return t.normalize("NFKC").toLowerCase().replace(TP,(e)=>String.fromCharCode(e.charCodeAt(0)-96)).replace(HP,"")}function Mi(t,e){let n=Fo(e);if(n===""){let r=e.toLowerCase();return t.some((i)=>i.toLowerCase().includes(r))}return t.some((r)=>Fo(r).includes(n))}function Nf(t){return t.length>=2||/[\p{Script=Han}\p{Script=Hangul}\p{Script=Hiragana}]/u.test(t)}function B0(t){let e=Ir(t);return NP.map((n)=>Lo(e,`ttheme-${n}.json`)).filter((n)=>PP(n))}var CP=6;function G0(t){return[`format ${CP}`,...t.map((e)=>`${e}:${C0(e).size}:${C0(e).mtimeMs}`)].join("|")}function LP(t){try{return JSON.parse(Yc(t,"utf8"))}catch{return{}}}function FP(t){let e=new Map;for(let i of t)for(let[o,s]of Object.entries(LP(i))){let a=e.get(o)??{tags:new Set,names:[],japanese:[],generated:[],rank:0,weight:0,posts:0};a.posts=Math.max(a.posts,s.posts??0),a.generated.push(...s.generated??[]),a.japanese.push(...s.names?.ja??[]),a.tag??=s.tag;for(let c of s.danbooru??[])a.tags.add(c);for(let c of AP)a.names.push(...s.names?.[c]??[]);if(s.rank!==void 0){let c=s.weight??1;a.rank=(a.rank*a.weight+s.rank*c)/(a.weight+c),a.weight+=c}e.set(o,a)}let n=[],r=Math.log1p([...e.values()].reduce((i,o)=>Math.max(i,o.posts),1));for(let i of e.values()){if(i.tags.size===0)continue;let o=[...i.tags];n.push({tag:i.tag&&i.tags.has(i.tag)?i.tag:o[0],tags:o,names:[...new Set(i.names)],japanese:[...new Set(i.japanese)],generated:[...new Set(i.generated)],rank:i.posts>0?Math.log1p(i.posts)/r:i.rank})}return n}function ra(t,e){let n=new t(e.length);return n.set(e),n}function If(t){let e=[0];for(let n of t)e.push(e.at(-1)+n.length);return{bytes:Buffer.concat(t),at:ra(Uint32Array,e)}}function jP(t,e){let n=FP(t),r=new Map,i=(v,S,M)=>{let I=r.get(v),x=S*4+M;if(!I)r.set(v,[x]);else if(I.at(-1)>>>2!==S)I.push(x);else if(I.at(-1)<x)I[I.length-1]=x};n.forEach((v,S)=>{let M=[...v.names,...v.tags.map((I)=>I.replaceAll("_"," "))];for(let[I,x]of[[M,1],[v.generated,0]])for(let H of I){let N=Fo(H);if(N&&Nf(N))i(N,S,2|x);let F=H.split(/[\s・·_]+/);if(F.length<2)continue;for(let W of F){let _=Fo(W);if(_&&Nf(_))i(_,S,x)}}});let o=[...r.keys()].sort(),s=[0],a=[];for(let v of o){for(let S of r.get(v)??[])a.push(S);s.push(a.length)}let c=n.flatMap((v,S)=>v.tags.map((M)=>[M,S])).sort(([v],[S])=>v<S?-1:v>S?1:0),u=If(o.map((v)=>Buffer.from(v))),l=If(n.map((v)=>Buffer.from(JSON.stringify([v.tag,v.tags,v.names,v.japanese,v.generated])))),d=If(c.map(([v])=>Buffer.from(v))),f={keys:u.bytes,keyAt:u.at,ownAt:ra(Uint32Array,s),owners:ra(Uint32Array,a),cards:l.bytes,cardAt:l.at,ranks:ra(Float32Array,n.map((v)=>v.rank)),tags:d.bytes,tagAt:d.at,tagCard:ra(Uint32Array,c.map(([,v])=>v))},h=j0.map((v)=>{let S=f[v];return Buffer.from(S.buffer,S.byteOffset,S.byteLength)}),m=0,p=h.map((v)=>{let S=[m,v.length];return m+=Math.ceil(v.length/4)*4,S}),b=Buffer.from(JSON.stringify({stamp:e,sections:p})),$=Math.ceil((8+b.length)/4)*4,k=Buffer.alloc($+m);k.write(_0,0,"latin1"),k.writeUInt32LE(b.length,4),b.copy(k,8);for(let[v,S]of h.entries())S.copy(k,$+(p[v]?.[0]??0));return k}function L0(t,e,n,r){let i=e.byteOffset+n;if(i%4===0)return new t(e.buffer,i,r/4);return new t(e.buffer.slice(i,i+r),0,r/4)}function F0(t,e){if(t.toString("latin1",0,4)!==_0)return;let n=t.readUInt32LE(4),r=JSON.parse(t.toString("utf8",8,8+n));if(r.stamp!==e)return;let i=Math.ceil((8+n)/4)*4,o=(c)=>{let[u,l]=r.sections[j0.indexOf(c)];return[i+u,l]},s=(c)=>{let[u,l]=o(c);return t.subarray(u,u+l)},a=(c)=>L0(Uint32Array,t,...o(c));return{keys:s("keys"),keyAt:a("keyAt"),ownAt:a("ownAt"),owners:a("owners"),cards:s("cards"),cardAt:a("cardAt"),ranks:L0(Float32Array,t,...o("ranks")),tags:s("tags"),tagAt:a("tagAt"),tagCard:a("tagCard")}}var Rf;function Af(t){try{let e=B0(t);if(e.length===0)return;let n=G0(e);if(Rf?.stamp===n)return Rf.index;let r=Lo(Ir(t),"index.bin"),i;try{i=F0(Yc(r),n)}catch{}if(!i){let o=jP(e,n);try{L(r,o)}catch{}i=F0(o,n)}if(i)Rf={stamp:n,index:i};return i}catch{return}}function U0(t,e){let[n,r,i,o,s]=JSON.parse(t.cards.toString("utf8",t.cardAt[e],t.cardAt[e+1]));return{tag:n,tags:r,names:i,japanese:o,generated:s,rank:t.ranks[e]??0}}function W0(t,e,n,r){let i=0,o=n;while(i<o){let s=i+o>>1;if(t.toString("utf8",e[s],e[s+1])<r)i=s+1;else o=s}return i}function K0(t,e){let n=Buffer.from(e),r=t.tagCard.length,i=W0(t.tags,t.tagAt,r,e);if(i>=r||t.tags.compare(n,0,n.length,t.tagAt[i],t.tagAt[i+1])!==0)return;return t.tagCard[i]}var Pf=/\s*[((][^()()]*[))]$/u,qc={ko:4,en:4,ja:5,zh:3};function _P(t){if(!t)return[];let e=/\p{Script=Hangul}/u,n=/^[\p{Script=Latin}\p{N}\s.'’-]+$/u,r=new Set([...t.names,...t.generated].filter((d)=>!Pf.test(d))),i=(d)=>!Pf.test(d)||!r.has(d.replace(Pf,"")),o=t.names.filter(i),s=o.filter((d)=>e.test(d)),a=[...s,...t.generated.slice(0,s.length>0?0:2)],c=o.filter((d)=>n.test(d)),u=t.japanese.filter(i),l=o.filter((d)=>!e.test(d)&&!n.test(d)&&!u.includes(d));return[...new Set([...a.slice(0,qc.ko),...c.slice(0,qc.en),...u.slice(0,qc.ja),...l.slice(0,qc.zh)])]}var Co;function Jc(t,e=jo()){if(!t)return[];if(!Co)try{Co=JSON.parse(Yc(Lo(Ir(e),"aliases.json"),"utf8")).tags}catch{Co={}}return Co[t]??[]}function Tf(t,e=jo()){try{return BP(t,e)}catch{return new Map}}function BP(t,e){let n=new Map,r=B0(e);if(r.length===0||t.length===0)return n;let i=G0(r),o=Lo(Ir(e),"aliases.json"),s;try{s=JSON.parse(Yc(o,"utf8"))}catch{}if(s?.stamp===i&&t.every((l)=>(l in s.tags))){Co=s.tags;for(let l of t)n.set(l,s.tags[l]??[]);return n}let a=Af(e);if(!a)return n;let c=new Set([...t,...s?.stamp===i?Object.keys(s.tags):[]]),u={};for(let l of c){let d=K0(a,l);u[l]=d===void 0?[]:_P(U0(a,d))}try{L(o,`${JSON.stringify({stamp:i,tags:u})}
|
|
248
|
+
`)}catch{}Co=u;for(let l of t)n.set(l,u[l]??[]);return n}function xi(t,e=jo()){Tf(t.flatMap((n)=>n.booru?[n.booru]:[]),e)}var GP=0.25,UP=0.1;function z0(t,e,n=new Set,r=jo()){let i=Fo(t);if(!i||!Nf(i))return[];let o=Af(r);if(!o)return[];let s=Buffer.from(i),a=o.ownAt.length-1,c=new Set([...n].flatMap((l)=>K0(o,l)??[])),u=new Map;for(let l=W0(o.keys,o.keyAt,a,i);l<a;l++){let d=o.keyAt[l],f=o.keyAt[l+1]-d;if(f<s.length||o.keys.compare(s,0,s.length,d,d+s.length)!==0)break;let h=f===s.length;for(let m=o.ownAt[l];m<o.ownAt[l+1];m++){let p=o.owners[m],b=p>>>2,$=h?Math.max(0,(p&2?2:1)-(p&1?0:1)):0,k=(o.ranks[b]??0)+GP*$+(c.has(b)?UP:0);if((u.get(b)?.score??-1)<k)u.set(b,{score:k,key:l})}}return[...u].sort(([,l],[,d])=>d.score-l.score).slice(0,e).map(([l,{key:d}])=>{let f=U0(o,l),h=o.keys.toString("utf8",o.keyAt[d],o.keyAt[d+1]);return{tag:f.tags.find((m)=>n.has(m))??f.tag,name:[...f.names,...f.generated].find((m)=>Fo(m).includes(h))??f.tag.replaceAll("_"," ")}})}function Vc(t=jo()){Af(t)}import{existsSync as QP,readdirSync as e$,readFileSync as XP}from"node:fs";import{basename as n$,join as Qc}from"node:path";import{existsSync as WP,readFileSync as D0}from"node:fs";import{homedir as q0}from"node:os";import{isAbsolute as Y0,join as Oi,resolve as KP}from"node:path";var q="official",Bt="ttheme-market.toml",zP="https://www.schemastore.org/ttheme-market.json",J0="https://www.schemastore.org/ttheme-palette.json",V0=["$schema","name","description","owner","renames","force_remove_deleted_palettes","metadata"],Z0=["name","email","url"],_o="ttheme-market",DP=/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i,qP=/^[\w.-]{1,100}$/,YP=/^\w[\w.+/-]{0,199}$/;function qn(t){return Oi(t,"ttheme","installed.json")}function Gt(t){return t??[q]}function Bo(t){try{let{markets:e}=JSON.parse(D0(qn(t),"utf8"));return Gt(Array.isArray(e)?e.filter((n)=>typeof n==="string"):void 0)}catch{return[q]}}function Ot(t){return Y0(t)}function gt(t){return t!==q&&!Ot(t)}function Rr(t){let e=t.indexOf("#");return gt(t)&&e>=0?t.slice(0,e):t}function ia(t){let e=t.indexOf("#");return gt(t)&&e>=0?t.slice(e+1):void 0}function Go(t,e){return Rr(t)===Rr(e)}function Pr(t,e){return gt(t)&&(e?.[t]??!1)}function JP(t){return!YP.test(t)||t.includes("..")||t.includes("//")||/(?:[./]|\.lock)$/.test(t)}function Nr(t,e=process.cwd()){if(t===q)return q;if(t==="~"||t.startsWith("~/"))return Oi(q0(),t.slice(1));if(t.startsWith(".")||Y0(t))return KP(e,t);let[n="",r,...i]=t.split("#"),[o,s,...a]=n.replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,"").split("/");if(!o||!DP.test(o)||!s||!qP.test(s)||a.length>0||i.length>0||r!==void 0&&JP(r))throw Error(`${t} is not a market — give a repository (alice/ttheme-dust, #v1 pins a tag or branch) or a path (./my-market)`);return`${o.toLowerCase()}/${s}${r===void 0?"":`#${r}`}`}function Q0(t){let e=ia(t)?.split("/").map(encodeURIComponent).join("/")??"HEAD";return`https://codeload.github.com/${Rr(t)}/tar.gz/${e}`}function X0(t){return t.slice(0,t.indexOf("/"))}function Lf(t){return Oi(t,"ttheme","markets")}function _e(t,e){return Oi(Lf(t),`${Rr(e).replace("/","--")}.json`)}function Zc(t){return Oi(t,"ttheme","market")}function Ff(t,e){return Oi(Zc(t),e)}function VP(t,e){if(typeof t!=="string"||typeof e!=="string")return'needs a "name" and an [owner] table whose name is the GitHub handle';return xe(`${t}@${e}/x`)}function ae({owner:t,name:e}){return`${t}@${e}`}function t$({owner:t,name:e}){return`"$schema" = ${JSON.stringify(zP)}
|
|
249
249
|
name = ${JSON.stringify(e)}
|
|
250
250
|
|
|
251
251
|
[owner]
|
|
252
252
|
name = ${JSON.stringify(t)}
|
|
253
|
-
`}function
|
|
254
|
-
`)[0]}`)}let r=
|
|
255
|
-
`);return[]}})}function
|
|
256
|
-
`):()=>{}}function
|
|
253
|
+
`}function Cf(t,e,n,r){if(typeof n!=="string"||n===""||/\p{Cc}/u.test(n)||n.length>200)throw Error(`${t}: ${e} must be ${r}`);return n}function Hf(t,e,n){return n===void 0?void 0:Cf(t,e,n,"one line of text, 200 characters at most")}function ZP(t,e){if(e===void 0)return{};if(!e||typeof e!=="object"||Array.isArray(e))throw Error(`${t}: [renames] maps an old palette name to its new name, or to false once it is gone`);let n={};for(let[r,i]of Object.entries(e)){if(xe(r)||i!==!1&&(typeof i!=="string"||xe(i)))throw Error(`${t}: renames.${r} must map a palette name to a palette name, or to false`);n[r]=i}return n}function jf(t,e){let n;try{n=$i(t)}catch(f){throw Error(`${e} is not valid TOML — ${f.message.split(`
|
|
254
|
+
`)[0]}`)}let r=Cf(e,"name",n.name,"the market name"),i=n.owner;if(!i||typeof i!=="object"||Array.isArray(i))throw Error(`${e}: owner is a table — [owner] with name = "<GitHub handle>"`);let o=i,s={name:Cf(e,"owner.name",o.name,"the GitHub handle")},a=Hf(e,"owner.email",o.email),c=Hf(e,"owner.url",o.url),u=Hf(e,"description",n.description),l=n.force_remove_deleted_palettes;if(l!==void 0&&typeof l!=="boolean")throw Error(`${e}: force_remove_deleted_palettes must be true or false`);let d=VP(s.name,r);if(d)throw Error(`${e} ${d}`);return{owner:s.name,name:r,about:{...s,...a?{email:a}:{},...c?{url:c}:{}},...u?{description:u}:{},renames:ZP(e,n.renames),forceRemove:l===!0}}function Be(t){let e=Oi(t,Bt);if(!WP(e))throw Error(`${t} has no ${Bt} — \`ttheme market init ${t}\` makes one`);return jf(D0(e,"utf8"),e)}function tt(t){if(t===q)return"the ttheme catalog";if(!Ot(t))return`github.com/${t}`;let e=q0();return t===e||t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}var vn="tt1:",r$=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)];function Ii(t,e=!0){return Bo(t).filter(Ot).flatMap((n)=>{try{let r=Be(n);return[{dir:n,...r,id:ae(r)}]}catch(r){if(e)process.stderr.write(`ttheme: skipping the market at ${n} — ${r.message}
|
|
255
|
+
`);return[]}})}function Xc(t){return Qc(t,"palettes")}function _f(t,e){return t<e?-1:t>e?1:0}function Bf(t,e){let n=[],r=[];for(let i of t){let[o,s,a,...c]=i.split("/");if(o!=="palettes"||!s||s.startsWith(".")||c.length>0)continue;if(a===void 0){if(s.endsWith(".toml"))r.push({file:{path:e(i),slug:n$(s,".toml")},name:s})}else if(a.endsWith(".toml"))n.push({file:{path:e(i),slug:n$(a,".toml"),catalog:s},name:a})}return n.sort((i,o)=>_f(i.file.catalog??"",o.file.catalog??"")||_f(i.name,o.name)),r.sort((i,o)=>_f(i.name,o.name)),[...n,...r].map(({file:i})=>i)}function Uo(t){let e=Xc(t);if(!QP(e))return[];let n=e$(e,{withFileTypes:!0}).flatMap((r)=>r.isDirectory()?e$(Qc(e,r.name)).map((i)=>`palettes/${r.name}/${i}`):[`palettes/${r.name}`]);return Bf(n,(r)=>Qc(t,r))}function tN(t,e){let n=e.get(t.slug);if(n)return`${t.slug} is also ${n.catalog?`in ${n.catalog}`:"outside a catalog"} — a palette name is used once in a market`;let r=t.catalog===void 0?void 0:Xs(t.catalog);return r?`the catalog folder ${JSON.stringify(t.catalog)} ${r}`:void 0}function Gf(t,e){let n=ct(e);if(!n)throw Error(`${e} is an official palette — yours are named <you>@<market>/<palette>`);let r=Ii(t,!1).find((o)=>o.id===n);if(!r)throw Error(`${n} is not a local market — \`ttheme market add <dir>\` adds the folder that holds it`);let i=de(e);return Uo(r.dir).find((o)=>o.slug===i)?.path??Qc(Xc(r.dir),`${i}.toml`)}function eN(t,e,n=!1){let r=new Map;for(let o of e)if(o.group!==Vs&&!r.has(o.group)){let s=e.find((a)=>a.group===o.group&&a.lead)?.name??"";r.set(o.group,{name:o.group,...o.native?{native:o.native}:{},lead:s})}let i=new Map(e.filter((o)=>!o.default&&!ct(o.name)).map((o)=>[o.name,{group:o.group,order:o.order}]));return{name:t,groups:r,bases:i,open:!0,...n?{foreign:!0}:{}}}function Sn(t,e,n,r=!1){let i=de(t),{native:o,...s}=ff(`${i}.toml`,e,eN(i,n,r)),a=ct(t);return{...s,name:t,...a?{group:a,lead:!1}:{}}}function ce(t){return t?(e,n)=>process.stderr.write(`ttheme: skipping ${e} — ${n}
|
|
256
|
+
`):()=>{}}function Uf(t,e,n,r,i,o=!1){let s=new Map;return t.flatMap((a)=>{try{let c=tN(a,s);if(c)throw Error(c);s.set(a.slug,a);let u=Qe(Sn(`${n}/${a.slug}`,e(a),r,o));return[a.catalog?{...u,catalog:a.catalog}:u]}catch(c){return i(a.path,c.message),[]}})}function Xe(t,e,n,r=ce(!0)){return Uf(Uo(t),(i)=>XP(i.path,"utf8"),e,n,r)}function tu(t,e,n=!0){return Ii(t,n).flatMap(({dir:r,id:i})=>Xe(r,i,e,ce(n)))}function Wf(t,e=t.name,n){return{name:e,...t.base?{base:t.base}:{},...t.group!==Vs?{group:t.group}:{},ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},signature:t.signatureSlots,background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selection,ansi:t.ansi,...t.waived&&t.waived.length>0?{waive:t.waived,reason:n??"kept from the palette"}:{},...t.pictures?{pictures:t.pictures}:{}}}var It=(t)=>JSON.stringify(t);function i$(t){return["[[picture]]",`site = ${It(t.site)}`,`id = ${t.id}`,...t.size===void 0?[]:[`size = ${typeof t.size==="number"?t.size:It(t.size)}`],...t.position===void 0?[]:[`position = ${It(t.position)}`],...t.opacity===void 0?[]:[`opacity = ${t.opacity}`]]}function o$(t,e){return e.length===0?t:`${t.replace(/\n*$/,`
|
|
257
257
|
`)}${e.map((n)=>`
|
|
258
|
-
${
|
|
258
|
+
${i$(n).join(`
|
|
259
259
|
`)}
|
|
260
|
-
`).join("")}`}function
|
|
260
|
+
`).join("")}`}function Kf(t){let e=[`"$schema" = ${It(J0)}`,"","[meta]",`name = ${It(de(t.name))}`,...t.base?[`base = ${It(t.base)}`]:[],...t.group?[`group = ${It(t.group)}`]:[],...t.ansiSource?[`ansi_source = ${It(t.ansiSource)}`]:[],...t.booru?[`booru = ${It(t.booru)}`]:[],`signature = [${t.signature.map(It).join(", ")}]`,...t.booruSites?["","[meta.booru_sites]",...Object.entries(t.booruSites).map(([n,r])=>`${n} = [${r.map(It).join(", ")}]`)]:[],"","[colors]",`background = ${It(t.background)}`,`foreground = ${It(t.foreground)}`,`cursor = ${It(t.cursor)}`,`selection_background = ${It(t.selection)}`,"ansi = [",...t.ansi.slice(0,8).map((n)=>` ${It(n)},`),"",...t.ansi.slice(8).map((n)=>` ${It(n)},`),"]"];if(t.waive&&t.waive.length>0)e.push("","[contrast]",`waive = [${t.waive.map(It).join(", ")}]`,`reason = ${It(t.reason??"")}`);for(let n of t.pictures??[])e.push("",...i$(n));return`${e.join(`
|
|
261
261
|
`)}
|
|
262
|
-
`}class
|
|
263
|
-
`)}function
|
|
264
|
-
`)}function
|
|
265
|
-
`);return[]}}function
|
|
266
|
-
`)}function
|
|
267
|
-
`),l=!1;for(let
|
|
268
|
-
`){if(
|
|
269
|
-
`){if(i&&
|
|
270
|
-
`)}var
|
|
271
|
-
`),
|
|
262
|
+
`}class s${bytes=[];u8(t){this.bytes.push(t&255)}u16(t){this.u8(t>>8),this.u8(t)}u32(t){this.u16(Math.floor(t/65536)),this.u16(t%65536)}str(t=""){let e=new TextEncoder().encode(t);if(e.length>255)throw Error(`"${t}" is too long to share`);this.u8(e.length),this.bytes.push(...e)}color(t){let e=Number.parseInt(t.slice(1),16);this.u8(e>>16),this.u8(e>>8),this.u8(e)}done(){return Buffer.from(this.bytes).toString("base64url")}}class a${at=0;bytes;constructor(t){this.bytes=t}u8(){let t=this.bytes[this.at++];if(t===void 0)throw Error("the share code is cut short");return t}u16(){return this.u8()*256+this.u8()}u32(){return this.u16()*65536+this.u16()}str(){let t=this.u8(),e=this.bytes.subarray(this.at,this.at+t);if(e.length!==t)throw Error("the share code is cut short");this.at+=t;try{return new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch{throw Error("the share code holds text it cannot read — was it copied whole?")}}color(){return`#${[this.u8(),this.u8(),this.u8()].map((t)=>t.toString(16).padStart(2,"0")).join("")}`}end(){if(this.at!==this.bytes.length)throw Error("the share code has bytes left over")}}function zf(t){let e=new s$;e.str(t.name);for(let r of[t.background,t.foreground,t.cursor,t.selection,...t.ansi])e.color(r);for(let r of t.signature)e.u8(r$.indexOf(r));e.str(t.base),e.str(t.group),e.str(t.ansiSource),e.str(t.booru),e.u16((t.waive??[]).reduce((r,i)=>r|1<<Rd.indexOf(i),0)),e.str(t.waive&&t.waive.length>0?t.reason:"");let n=t.pictures??[];e.u8(n.length);for(let r of n)e.u8(V.findIndex((i)=>i.key===r.site)),e.u32(r.id),e.u16(r.size===void 0?0:r.size==="fill"?1:r.size),e.u8(r.position===void 0?0:Wt.indexOf(r.position)+1),e.u16(r.opacity===void 0?0:Math.round(r.opacity*1000)+1);return`${vn}${e.done()}`}function Df(t){if(!t.startsWith(vn))throw Error(`a share code starts with ${vn}`);let e=t.slice(vn.length);if(!/^[A-Za-z0-9_-]+$/.test(e))throw Error("the share code holds characters it never uses — was it copied whole?");let n=new a$(new Uint8Array(Buffer.from(e,"base64url"))),r=n.str(),[i,o,s,a,...c]=Array.from({length:20},()=>n.color()),u=[n.u8(),n.u8(),n.u8()].map((k)=>r$[k]??`slot${k}`),l=n.str(),d=n.str(),f=n.str(),h=n.str(),m=n.u16(),p=n.str(),b=Rd.filter((k,v)=>m&1<<v),$=Array.from({length:n.u8()},()=>{let k=V[n.u8()]?.key??"unknown",v=n.u32(),S=n.u16(),M=n.u8(),I=n.u16();return{site:k,id:v,...S===1?{size:"fill"}:S>1?{size:S}:{},...M>0?{position:Wt[M-1]??"unknown"}:{},...I>0?{opacity:(I-1)/1000}:{}}});if(n.end(),![i,o,s,a,...c].every(le))throw Error("the share code holds a color that is not one");return{name:r,...l?{base:l}:{},...d?{group:d}:{},...f?{ansiSource:f}:{},...h?{booru:h}:{},signature:u,background:i,foreground:o,cursor:s,selection:a,ansi:c,...b.length>0?{waive:b,reason:p}:{},...$.length>0?{pictures:$}:{}}}function oa(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi}}function qf(t,e){let n=t.indexOf("ansi = ["),r=t.indexOf("]",n);if(n<0||r<0)throw Error("no ansi = [...] list to rewrite");let i=0,o=t.slice(n,r).replace(/"#[0-9a-fA-F]{6}"/g,()=>It(e.ansi[i++]));return[["background",e.background],["foreground",e.foreground],["cursor",e.cursor],["selection_background",e.selection]].reduce((a,[c,u])=>a.replace(new RegExp(`^(${c}\\s*=\\s*)"#[0-9a-fA-F]{6}"`,"m"),(l,d)=>`${d}${It(u)}`),t.slice(0,n)+o+t.slice(r))}function c$(t,e){return t.replace(/^(signature\s*=\s*)\[[^\]]*\]/m,(n,r)=>`${r}[${e.map(It).join(", ")}]`)}function sa(t){let e=pn(Ie(t)),n=new Set(t.waived??[]),r=Math.max(...ve.map((i)=>i.label.length));return ve.map((i,o)=>{let s=e[o],a=n.has(i.rule)||Number.isNaN(s)||(i.min===void 0||s>=i.min)&&(i.max===void 0||s<=i.max),c=i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",u=Number.isNaN(s)?"—":Number.isInteger(s)?String(s):s.toFixed(2);return` ${a?"✓":"✗"} ${i.label.padEnd(r)} ${u.padStart(6)} ${c}${n.has(i.rule)?" waived":""}`})}import{existsSync as nN,readFileSync as rN,rmSync as iN}from"node:fs";import{join as oN}from"node:path";var ca=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],sN=1;function u$(t){return oN(t,"ttheme","tone.json")}function l$(t){return ca.includes(t)}function Yn(t){let e=u$(t);if(!nN(e))return{};let n;try{n=JSON.parse(rN(e,"utf8"))}catch{return{}}let r=n?.palettes;if(typeof r!=="object"||r===null)return{};let i={};for(let[o,s]of Object.entries(r)){if(typeof s!=="object"||s===null)continue;let a={};for(let[c,u]of Object.entries(s))if(l$(c)&&typeof u==="string"&&le(u.toLowerCase()))a[c]=u.toLowerCase();if(Object.keys(a).length>0)i[o]=a}return i}function Yf(t,e){let n=u$(t),r=Object.fromEntries(Object.entries(e).filter(([,i])=>Object.keys(i).length>0));if(Object.keys(r).length===0){iN(n,{force:!0});return}L(n,`${JSON.stringify({version:sN,palettes:r},null,2)}
|
|
263
|
+
`)}function aa(t,e){if(e==="background"||e==="foreground"||e==="cursor"||e==="selection")return t[e];return t.ansi[Number(e.slice(4))]}function d$(t){return ca.map((e)=>aa(t,e))}function f$(t,e){let n={};return ca.forEach((r,i)=>{let o=e[i].toLowerCase();if(o!==aa(t,r).toLowerCase())n[r]=o}),n}function eu(t,e){if(!e)return t;let n=(u)=>e[u]===void 0||e[u]===aa(t,u).toLowerCase();if(ca.every(n))return t;let r=(u)=>e[u]??aa(t,u),i={background:r("background"),foreground:r("foreground"),cursor:r("cursor"),selection:r("selection"),ansi:ca.slice(4).map(r)},o=t.signatureSlots.map((u)=>l$(u)?r(u):aa(i,u)),s={...t,...i,signature:o},a=Ie(s),c=yn({name:s.name,background:i.background,foreground:i.foreground,cursor:i.cursor,selection:i.selection,ansi:i.ansi,waived:a.waive},s.signatureSlots);return{...s,gate:pn(a),backdrop:c}}function nu(t,e){return Object.keys(e).length===0?t:t.map((n)=>eu(n,e[n.name]))}function h$(t,e,n){let r={...t};if(Object.keys(n).length===0)delete r[e];else r[e]=n;return r}function m$(t,e,n){let r=Yn(t);if(!Object.keys(r).some((o)=>e.has(o)||n.includes(o)))return;Yf(t,Object.fromEntries(Object.entries(r).filter(([o])=>!n.includes(o)).map(([o,s])=>[e.get(o)??o,s])))}var w$=20000;function Ge(t){return b$(t,"ttheme","catalog.json")}function $$(t,e){L(Ge(t),`${JSON.stringify(e,null,2)}
|
|
264
|
+
`)}function dt(t,e=!0,n){let r=Bo(t),i=Ge(t),o=Dc();if(r.includes(q))if(n)o=n;else{if(!g$(i))throw Error(`no catalog at ${i} — run \`ttheme init\` first`);o=En(Jf(i,"utf8"))}let s=r.filter(gt).flatMap((a)=>cN(t,a,o.palettes,e));return{...o,palettes:[...o.palettes,...s]}}function aN(t){let e;try{e=JSON.parse(t)}catch{throw Error("is not valid JSON")}let n=e?.files;if(!n||typeof n!=="object"||Object.values(n).some((r)=>typeof r!=="string"))throw Error("is not a copy of a market this ttheme fetched — `ttheme update` fetches it again");return{...typeof e?.etag==="string"?{etag:e.etag}:{},files:n}}function tn(t,e){return aN(Jf(_e(t,e),"utf8"))}function k$(t,e){return ae({owner:X0(t),name:e.name})}function y$(t,e){let n=e.files[Bt];if(n===void 0)throw Error(`${tt(t)} has no ${Bt} — \`ttheme market init\` makes one`);return jf(n,Bt)}function ru(t,e){return k$(t,y$(t,e))}function Jn(t,e,n,r){let i=y$(t,e),o=k$(t,i),s=tt(t),a=new Map(Object.entries(e.files).map(([u,l])=>[`${s}/${u}`,l])),c=Bf(Object.keys(e.files),(u)=>`${s}/${u}`);return{id:o,info:i,entries:Uf(c,(u)=>a.get(u.path)??"",o,n,r,!0)}}function cN(t,e,n,r){let i=_e(t,e);if(!g$(i))return[];try{return Jn(e,tn(t,e),n,ce(!1)).entries}catch(o){if(r)process.stderr.write(`ttheme: skipping ${i} — ${o.message}
|
|
265
|
+
`);return[]}}function En(t){let e;try{e=JSON.parse(t)}catch{throw Error("catalog is not valid JSON")}let n=e;if(typeof n?.version!=="string"||!Array.isArray(n.palettes))throw Error("catalog has no version or palettes");for(let r of n.palettes){let i=v$(r);if(i)throw Error(`catalog entry ${JSON.stringify(r?.name)} ${i}`)}return n}function v$(t){if(typeof t?.name!=="string"||!Array.isArray(t.ansi)||t.ansi.length!==16)return"is missing name or its 16 ANSI colors";let e=xe(t.name)??(t.base===void 0?void 0:xe(t.base));if(e)return e;if(![t.background,t.foreground,t.cursor,t.selection,...t.ansi].every((n)=>typeof n==="string"&&le(n)))return'holds a color that is not "#rrggbb"';for(let n of[t.group,t.native??"-",t.catalog??"-",t.ansiSource]){let r=typeof n==="string"?Xs(n):"has a field that is not text";if(r)return r}return}function S$(t){return b$(t,"ttheme","kept.json")}function Wo(t,e){L(S$(t),`${JSON.stringify({palettes:e},null,2)}
|
|
266
|
+
`)}function Ar(t){try{let{palettes:e}=JSON.parse(Jf(S$(t),"utf8"));return Array.isArray(e)?e.filter((n)=>v$(n)===void 0):[]}catch{return[]}}function p$(t){return JSON.stringify([t.background,t.foreground,t.cursor,t.selection,t.ansi,t.pictures??[]])}function Ko(t,e){let n=new Map(Ar(t).map((r)=>[r.name,r]));return e.palettes.filter((r)=>{let i=n.get(r.name);return ct(r.name)!==void 0&&i!==void 0&&p$(i)!==p$(r)})}function zo(t,e,n=!0){let r=Ar(t),i=new Map(r.filter((a)=>ct(a.name)!==void 0).map((a)=>[a.name,a])),o=[...e.palettes.map((a)=>i.get(a.name)??a),...tu(t,e.palettes,n)],s=new Set(o.map((a)=>a.name));return{...e,palettes:[...o,...r.filter((a)=>!s.has(a.name))]}}function Ct(t,e,n=!0){let r=zo(t,e,n);return{...r,palettes:nu(r.palettes,Yn(t))}}function he(t){return Ct(t,dt(t))}class iu extends Error{}class ou extends Error{}async function Vf(t,e=w$,n,r={}){let i;try{let o=AbortSignal.timeout(e);i=await fetch(t,{headers:r,signal:n?AbortSignal.any([o,n]):o})}catch(o){throw Error(`cannot reach ${t} — ${o instanceof Error?o.message:String(o)}`)}if(i.status===404)throw new iu(`nothing at ${t}`);if(i.status===403||i.status===429)throw new ou(`${new URL(t).host} is turning requests away for now (${i.status}) — try again in a minute`);if(!i.ok&&i.status!==304)throw Error(`${t} answered ${i.status}`);return i}async function E$(t,e,n=w$,r){return e(await(await Vf(t,n,r)).text())}function ua(t){let e=new Set(t.waived??[]),n=t.gate??pn(Ie(t));return ve.flatMap((r,i)=>{let o=n[i];if(e.has(r.rule)||typeof o!=="number"||Number.isNaN(o))return[];if(r.min!==void 0&&o<r.min)return[`${r.label} ${o} < ${r.min}`];if(r.max!==void 0&&o>r.max)return[`${r.label} ${o} > ${r.max}`];return[]})}function Tr(t,e){let n=t.find((r)=>r.name===e);if(!n)throw Error(`no palette named ${e} in the catalog — ${Zf(t,[e])}`);return n}function Zf(t,e){let n=e.map((s)=>s.toLowerCase()),r=t.filter((s)=>n.some((a)=>s.name.includes(a))),i=t.filter((s)=>!r.includes(s)&&n.some((a)=>s.group.toLowerCase().includes(a))),o=[...r,...i].map((s)=>s.name).slice(0,3);return o.length>0?`did you mean: ${o.join(", ")}?`:"`ttheme list` shows what is there"}function M$(t,e){return t.filter((n)=>Mi([n.name,n.group,n.native??"",n.ansiSource,...n.nativeNames??[],...Jc(n.booru)],e))}function x$(t,e,n){let r=n.toLowerCase(),i=(o)=>o.name===e.name?0:o.group===e.group?1:2;return t.filter((o)=>o.booru?.toLowerCase().includes(r)).map((o,s)=>({p:o,at:s})).sort((o,s)=>i(o.p)-i(s.p)||o.at-s.at).map(({p:o})=>o)}function O$(t,e){return t.booruSites?.[e]??(t.booru?[t.booru]:[])}var uN=9999,Do;function Vt(t,e){if(!Do||e===""||Do.length>=uN)return e;return`\x1B[?${Do.push(t)}y${e}\x1B[?0y`}function R$(t){let e=Do,n=[];Do=n;try{return{drawn:t(),targets:n}}finally{Do=e}}function P$(t){let e=t.slice(3,-1);return t.startsWith("\x1B[?")&&t.endsWith("y")&&/^\d{1,4}$/.test(e)?Number(e):void 0}function lN(t){let e=t.slice(2,-1);return t.startsWith("\x1B[")&&t.endsWith("G")&&/^\d*$/.test(e)?Math.max(1,Number(e||1))-1:void 0}function dN(t,e,n){if(!t.includes("\x1B[?"))return{text:t,zones:[]};let r=[],i=[],o="",s=0,a="",c=()=>{let l=i.pop();if(l&&s>l.col)r.push({row:e,col:l.col,width:s-l.col,height:1,target:l.target})},u=0;while(u<t.length){let l=t.indexOf("\x1B",u);if(l!==u){let m=l===-1?t.length:l;a+=t.slice(u,m),o+=t.slice(u,m),u=m;continue}let d=t.slice(u,u+(Sd(t,u)||1));u+=d.length;let f=P$(d),h=f===void 0?lN(d):void 0;if(f===void 0&&h===void 0){o+=d;continue}if(s+=B(a),a="",h!==void 0)s=h,o+=d;else if(f===0)c();else if(f!==void 0)i.push({target:n[f-1],col:s})}s+=B(a);while(i.length>0)c();return{text:o,zones:r}}function N$(t,e,n){let r=[],i=[],o="",s=(p)=>{let b=P$(p);if(b===0)r.pop();else if(b!==void 0)r.push(p);else if(p.startsWith("\x1B]8;"))o=p.slice(p.indexOf(";",4)+1).replace("\x07","").replace("\x1B\\","")===""?"":p;else if(p.startsWith("\x1B[")&&p.endsWith("m"))i.push(p)},a=t.includes("\x1B")||n.includes("\x1B")?"\x1B[0m":"",c=vc(t),u="",l=0,d=0;while(d<c.length&&l<e){let p=c[d];if(p.sequence)s(p.text);else if(l+p.width>e)break;else l+=p.width;u+=p.text,d++}u+=" ".repeat(e-Math.min(e,l));let f=`${"\x1B[?0y".repeat(r.length)}${o?"\x1B]8;;\x1B\\":""}${a}`,h=e+B(n);while(d<c.length&&l<h){let p=c[d];if(p.sequence)s(p.text);else l+=p.width;d++}if(d>=c.length)return`${u}${f}${n}${a}`;let m=`${i.join("")}${o}${r.join("")}${" ".repeat(Math.max(0,l-h))}`;return`${u}${f}${n}${a}${m}${t.slice(c[d].start)}`}function A$(t,e){let n=[];return{lines:t.map((i,o)=>{let s=dN(i,o,e);return n.push(...s.zones),s.text}),zones:n}}function I$(t,e,n,r=0.5,i=0.5){let o=n-t.col,s=e-t.row;return{target:t.target,x:o,y:s,exact:{x:o+r,y:s+i},width:t.width,height:t.height,inside:o>=0&&o<t.width&&s>=0&&s<t.height}}function fN(t,e,n){let r;for(let i of t)if(e>=i.row&&e<i.row+i.height&&n>=i.col&&n<i.col+i.width&&(!r||i.width*i.height<=r.width*r.height))r=i;return r}var hN={space:" ",enter:"enter",esc:"esc",tab:"tab",bksp:"backspace","←":"left","→":"right"};function Qf(t){let e=/^(ctrl|alt)\+([a-z])$/.exec(t);if(e)return`${e[1]}-${e[2]}`;return hN[t]??([...t].length===1&&t!==" "?t:void 0)}function Kt(t,e){let n=Qf(t);return n?Vt({kind:"key",key:n},e):e}class Xf{zones=[];held;point(t){if(t.action==="drag"||t.action==="release"){let n=this.held;if(t.action==="release")this.held=void 0;return n&&I$(n,t.row,t.col,t.fx,t.fy)}let e=fN(this.zones,t.row,t.col);if(t.action==="press")this.held=t.button==="left"?e:void 0;return e&&I$(e,t.row,t.col,t.fx,t.fy)}drop(){this.held=void 0}}var Vn=[{name:"preview",title:"Preview"},{name:"browse",title:"Browse"}],su=10,au=20,mN="\x1B[7;1m\x1B[36m";function T$(t){return Vn.find((e)=>e.name===t.TTHEME_HUB)?.name}function H$(t,e){let n=Vn.findIndex((r)=>r.name===t);return au+(n+e+Vn.length)%Vn.length+1}function C$(t){return au+Vn.findIndex((e)=>e.name===t)+1}function th(t,e){let n=Vn.map(({name:i,title:o})=>{let s={kind:"hub",tab:i};if(!e)return Vt(s,i===t?`[${o}]`:` ${o} `);return i===t?`${mN}${Vt(s,` ${o} `)}${Ft}`:`${C}${Vt(s,` ${o} `)}${Ft}`}),r="tab next";return` ${n.join(" ")} ${e?`${C}tab next${Ft}`:"tab next"}`}import{execFileSync as uH}from"node:child_process";import{existsSync as Qu,mkdirSync as lH,readdirSync as dH,readFileSync as Xu,rmSync as fH}from"node:fs";import{basename as v1,join as Pa,relative as $1}from"node:path";import{styleText as fu}from"node:util";import{stdout as D$,stdin as vN}from"node:process";import SN from"node:readline";var cu="\x1B",B$="",pN=39,nh="\x07",G$="[",gN="]",U$="m",rh=`${gN}8;;`,L$=new RegExp(`(?:\\${G$}(?<code>\\d+)m|\\${rh}(?<uri>.*)${nh})`,"y"),F$=(t)=>{if(t>=30&&t<=37)return 39;if(t>=90&&t<=97)return 39;if(t>=40&&t<=47)return 49;if(t>=100&&t<=107)return 49;if(t===1||t===2)return 22;if(t===3)return 23;if(t===4)return 24;if(t===7)return 27;if(t===8)return 28;if(t===9)return 29;if(t===0)return 0;return},j$=(t)=>`${cu}${G$}${t}${U$}`,_$=(t)=>`${cu}${rh}${t}${nh}`,eh=(t,e,n)=>{let r=e[Symbol.iterator](),i=!1,o=!1,s=t.at(-1),a=s===void 0?0:B(s),c=r.next(),u=r.next(),l=0;while(!c.done){let d=c.value,f=B(d);if(a+f<=n)t[t.length-1]+=d;else t.push(d),a=0;if(d===cu||d===B$)i=!0,o=e.startsWith(rh,l+1);if(i){if(o){if(d===nh)i=!1,o=!1}else if(d===U$)i=!1}else if(a+=f,a===n&&!u.done)t.push(""),a=0;c=u,u=r.next(),l+=d.length}if(s=t.at(-1),!a&&s!==void 0&&s.length&&t.length>1)t[t.length-2]+=t.pop()},bN=(t)=>{let e=t.split(" "),n=e.length;while(n){if(B(e[n-1]))break;n--}if(n===e.length)return t;return e.slice(0,n).join(" ")+e.slice(n).join("")},wN=(t,e,n={})=>{if(n.trim!==!1&&t.trim()==="")return"";let r="",i,o,s=t.split(" "),a=[""],c=0;for(let d=0;d<s.length;d++){let f=s[d];if(n.trim!==!1){let m=a.at(-1)??"",p=m.trimStart();if(m.length!==p.length)a[a.length-1]=p,c=B(p)}if(d!==0){if(c>=e&&(n.wordWrap===!1||n.trim===!1))a.push(""),c=0;if(c||n.trim===!1)a[a.length-1]+=" ",c++}let h=B(f);if(n.hard&&h>e){let m=e-c,p=1+Math.floor((h-m-1)/e);if(Math.floor((h-1)/e)<p)a.push("");eh(a,f,e),c=B(a.at(-1)??"");continue}if(c+h>e&&c&&h){if(n.wordWrap===!1&&c<e){eh(a,f,e),c=B(a.at(-1)??"");continue}a.push(""),c=0}if(c+h>e&&n.wordWrap===!1){eh(a,f,e),c=B(a.at(-1)??"");continue}a[a.length-1]+=f,c+=h}if(n.trim!==!1)a=a.map((d)=>bN(d));let u=a.join(`
|
|
267
|
+
`),l=!1;for(let d=0;d<u.length;d++){let f=u[d];if(r+=f,!l){if(l=f>="\uD800"&&f<="\uDBFF",l)continue}else l=!1;if(f===cu||f===B$){L$.lastIndex=d+1;let m=L$.exec(u)?.groups;if(m?.code!==void 0){let p=Number.parseFloat(m.code);i=p===pN?void 0:p}else if(m?.uri!==void 0)o=m.uri.length===0?void 0:m.uri}if(u[d+1]===`
|
|
268
|
+
`){if(o)r+=_$("");let h=i?F$(i):void 0;if(i&&h)r+=j$(h)}else if(f===`
|
|
269
|
+
`){if(i&&F$(i))r+=j$(i);if(o)r+=_$(o)}}return r},$N=/\r?\n/;function Hr(t,e,n){return String(t).normalize().split($N).map((r)=>wN(r,e,n)).join(`
|
|
270
|
+
`)}var Re=yd(oh(),1);function Zn(t,e,n){if(!n.some((s)=>!s.disabled))return t;let r=t+e,i=Math.max(n.length-1,0),o=r<0?i:r>i?0:r;return n[o]?.disabled?Zn(o,e<0?-1:1,n):o}function uu(t,e,n,r){let i=r.split(`
|
|
271
|
+
`),o=0,s=t;for(let c of i){if(s<=c.length)break;s-=c.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+n)),s=Math.min(s,i[o].length)+e;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let a=0;for(let c=0;c<o;c++)a+=i[c].length+1;return a+s}var EN=["up","down","left","right","space","enter","cancel"],MN=["January","February","March","April","May","June","July","August","September","October","November","December"],zt={actions:new Set(EN),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...MN],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:(t)=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:(t)=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};function q$(t,e){if(typeof t=="string")return zt.aliases.get(t)===e;for(let n of t)if(n!==void 0&&q$(n,e))return!0;return!1}function xN(t,e){if(t===e)return;let n=t.split(`
|
|
272
272
|
`),r=e.split(`
|
|
273
|
-
`),i=Math.max(n.length,r.length),
|
|
274
|
-
`).map((a,c,u)=>{let l=
|
|
275
|
-
`)}function
|
|
276
|
-
`),
|
|
277
|
-
`).length-1;this.output.write(
|
|
278
|
-
`);this.output.write(o
|
|
279
|
-
`).slice(
|
|
280
|
-
`)),this._prevFrame=t;return}}this.output.write(Oe.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function MR(t,e){if(t===void 0||e.length===0)return 0;let n=e.findIndex((r)=>r.value===t);return n!==-1?n:0}function OR(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function xR(t,e){if(e)return t?e:e[0]}var IR=class extends Un{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#n="";#t;#s;#a;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return Gc(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let e=this.userInput.slice(0,this.cursor),n=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${e}${Gc("inverse",n)}${r}`}get options(){return typeof this.#s=="function"?this.#s():this.#s}constructor(e){super(e),this.#s=e.options,this.#a=e.placeholder;let n=this.options;this.filteredOptions=[...n],this.multiple=e.multiple===!0,this.#t=typeof e.options=="function"?e.filter:e.filter??OR;let r;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?r=e.initialValue:r=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let s=n.findIndex((o)=>o.value===i);s!==-1&&(this.toggleSelected(i),this.#e=s)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,s)=>this.#r(i,s)),this.on("userInput",(i)=>this.#i(i))}_isActionKey(e,n){return e==="\t"||this.multiple&&this.isNavigating&&n.name==="space"&&e!==void 0&&e!==""}#r(e,n){let r=n.name==="up",i=n.name==="down",s=n.name==="return",o=this.userInput===""||this.userInput==="\t",a=this.#a,c=this.options,u=a!==void 0&&a!==""&&c.some((l)=>!l.disabled&&(this.#t?this.#t(a,l):!0));if(n.name==="tab"&&o&&u){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(a,!0),this.isNavigating=!1;return}r||i?(this.#e=Bn(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):s?this.value=xR(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(n.name==="tab"||this.isNavigating&&n.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter((n)=>n!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#i(e){if(e!==this.#n){this.#n=e;let n=this.options;e&&this.#t?this.filteredOptions=n.filter((s)=>this.#t?.(e,s)):this.filteredOptions=[...n];let r=MR(this.focusedValue,this.filteredOptions);this.#e=Bn(r,0,this.filteredOptions);let i=this.filteredOptions[this.#e];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class Od extends Un{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(e)=>{this.output.write(Oe.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var RR={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function _0(t){return[...t].map((e)=>RR[e])}function NR(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),n=[],r="/";for(let i of e)i.type==="literal"?r=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&n.push({type:i.type,len:i.type==="year"?4:2});return{segments:n,separator:r}}function vd(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function _c(t){return{year:vd(t.year),month:vd(t.month),day:vd(t.day)}}function Sd(t,e){return new Date(t||2001,e||1,0).getDate()}function K0(t){let{year:e,month:n,day:r}=_c(t);if(!e||e<0||e>9999||!n||n<1||n>12||!r||r<1)return;let i=new Date(Date.UTC(e,n-1,r));if(!(i.getUTCFullYear()!==e||i.getUTCMonth()!==n-1||i.getUTCDate()!==r))return{year:e,month:n,day:r}}function G0(t){let e=K0(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function TR(t,e,n,r){let i=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,s=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return t==="year"?{min:i?.year??1,max:s?.year??9999}:t==="month"?{min:i&&e.year===i.year?i.month:1,max:s&&e.year===s.year?s.month:12}:{min:i&&e.year===i.year&&e.month===i.month?i.day:1,max:s&&e.year===s.year&&e.month===s.month?s.day:Sd(e.year,e.month)}}class z0 extends Un{#e;#n;#t;#s;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#o=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#t}}get segments(){return this.#e}get separator(){return this.#n}get formattedValue(){return this.#f(this.#t)}#f(t){return this.#e.map((e)=>t[e.type]).join(this.#n)}#c(){this._setUserInput(this.#f(this.#t)),this._setValue(G0(this.#t)??void 0)}constructor(t){let e=t.format?{segments:_0(t.format),separator:t.separator??"/"}:NR(t.locale),n=t.separator??e.separator,r=t.format?_0(t.format):e.segments,i=t.initialValue??t.defaultValue,s=i?{year:String(i.getUTCFullYear()).padStart(4,"0"),month:String(i.getUTCMonth()+1).padStart(2,"0"),day:String(i.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},o=r.map((a)=>s[a.type]).join(n);super({...t,initialUserInput:o},!1),this.#e=r,this.#n=n,this.#t=s,this.#s=t.minDate,this.#a=t.maxDate,this.#c(),this.on("cursor",(a)=>this.#m(a)),this.on("key",(a,c)=>this.#p(a,c)),this.on("finalize",()=>this.#g(t))}#u(){let t=Math.max(0,Math.min(this.#r.segmentIndex,this.#e.length-1)),e=this.#e[t];if(e)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,e.len-1)),{segment:e,index:t}}#l(t){this.inlineError="",this.#o=null;let e=this.#u();e&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#e.length-1,e.index+t)),this.#r.positionInSegment=0,this.#i=!0)}#d(t){let e=this.#u();if(!e)return;let{segment:n}=e,r=this.#t[n.type],i=!r||r.replace(/_/g,"")==="",s=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,o=TR(n.type,_c(this.#t),this.#s,this.#a),a;i?a=t===1?o.min:o.max:a=Math.max(Math.min(o.max,s+t),o.min),this.#t={...this.#t,[n.type]:a.toString().padStart(n.len,"0")},this.#i=!0,this.#o=null,this.#c()}#m(t){if(t)switch(t){case"right":return this.#l(1);case"left":return this.#l(-1);case"up":return this.#d(1);case"down":return this.#d(-1)}}#p(t,e){if(e?.name==="backspace"||e?.sequence===""||e?.sequence==="\b"||t===""||t==="\b"){this.inlineError="";let n=this.#u();if(!n)return;if(!this.#t[n.segment.type].replace(/_/g,"")){this.#l(-1);return}this.#t[n.segment.type]="_".repeat(n.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(e?.name==="tab"){this.inlineError="";let n=this.#u();if(!n)return;let r=e.shift?-1:1,i=n.index+r;i>=0&&i<this.#e.length&&(this.#r.segmentIndex=i,this.#r.positionInSegment=0,this.#i=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#u();if(!n)return;let{segment:r}=n,i=!this.#t[r.type].replace(/_/g,"");if(this.#i&&this.#o!==null&&!i){let d=this.#o+t,h={...this.#t,[r.type]:d},m=this.#h(h,r);if(m){this.inlineError=m,this.#o=null,this.#i=!1;return}this.inlineError="",this.#t[r.type]=d,this.#o=null,this.#i=!1,this.#c(),n.index<this.#e.length-1&&(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!i&&(this.#t[r.type]="_".repeat(r.len),this.#r.positionInSegment=0),this.#i=!1,this.#o=null;let s=this.#t[r.type],o=s.indexOf("_"),a=o>=0?o:Math.min(this.#r.positionInSegment,r.len-1);if(a<0||a>=r.len)return;let c=s.slice(0,a)+t+s.slice(a+1),u=!1;if(a===0&&s==="__"&&(r.type==="month"||r.type==="day")){let d=Number.parseInt(t,10);c=`0${t}`,u=d<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(s.replace(/_/g,"")+t).padStart(r.len,"_")),!c.includes("_")){let d={...this.#t,[r.type]:c},h=this.#h(d,r);if(h){this.inlineError=h;return}}this.inlineError="",this.#t[r.type]=c;let l=c.includes("_")?void 0:K0(this.#t);if(l){let{year:d,month:h}=l,m=Sd(d,h);this.#t={year:String(Math.max(0,Math.min(9999,d))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(m,l.day))).padStart(2,"0")}}this.#c();let f=c.indexOf("_");u?(this.#i=!0,this.#o=t):f>=0?this.#r.positionInSegment=f:o>=0&&n.index<this.#e.length-1?(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(a+1,r.len-1)}}#h(t,e){let{month:n,day:r}=_c(t);if(e.type==="month"&&(n<0||n>12))return Wt.date.messages.invalidMonth;if(e.type==="day"&&(r<0||r>31))return Wt.date.messages.invalidDay(31,"any month")}#g(t){let{year:e,month:n,day:r}=_c(this.#t);if(e&&n&&r){let i=Sd(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=G0(this.#t)??t.defaultValue??void 0}}var AR=class extends Un{options;cursor=0;#e;getGroupItems(e){return this.options.filter((n)=>n.group===e)}isGroupSelected(e){let n=this.getGroupItems(e),r=this.value;return r===void 0?!1:n.every((i)=>r.includes(i.value))}toggleValue(){let e=this.options[this.cursor];if(e!==void 0)if(this.value===void 0&&(this.value=[]),e.group===!0){let n=e.value,r=this.getGroupItems(n);this.isGroupSelected(n)?this.value=this.value.filter((i)=>r.findIndex((s)=>s.value===i)===-1):this.value=[...this.value,...r.map((i)=>i.value)],this.value=Array.from(new Set(this.value))}else{let n=this.value.includes(e.value);this.value=n?this.value.filter((r)=>r!==e.value):[...this.value,e.value]}}constructor(e){super(e,!1);let{options:n}=e;this.#e=e.selectableGroups!==!1,this.options=Object.entries(n).flatMap(([r,i])=>[{value:r,group:!0,label:r},...i.map((s)=>({...s,group:r}))]),this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),this.#e?0:1),this.on("cursor",(r)=>{switch(r){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#e&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#e&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},PR=new Set(["up","down","left","right"]);class D0 extends Un{#e=!1;#n;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}█`;let e=t.slice(0,this.cursor),n=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return n===`
|
|
273
|
+
`),i=Math.max(n.length,r.length),o=[];for(let s=0;s<i;s++)n[s]!==r[s]&&o.push(s);return{lines:o,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}var I_=globalThis.process.platform.startsWith("win"),ah=Symbol("clack:cancel");function me(t){return t===ah}function lu(t,e){let n=t;n.isTTY&&n.setRawMode(e)}var hu=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,uh=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function Cr(t,e,n,r=n,i=n,o){let s=hu(t??D$);return Hr(e,s-n.length,{hard:!0,trim:!1}).split(`
|
|
274
|
+
`).map((a,c,u)=>{let l=o?o(a,c):a;return c===0?`${r}${l}`:c===u.length-1?`${i}${l}`:`${n}${l}`}).join(`
|
|
275
|
+
`)}function Y$(t,e){if("~standard"in t){let n=t["~standard"].validate(e);if(n instanceof Promise)throw TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return n.issues?.at(0)?.message}return t(e)}class Qn{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(t,e=!0){let{input:n=vN,output:r=D$,render:i,signal:o,...s}=t;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=e,this._abortSignal=o,this.input=n,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(t,e){let n=this._subscribers.get(t)??[];n.push(e),this._subscribers.set(t,n)}on(t,e){this.setSubscriber(t,{cb:e})}once(t,e){this.setSubscriber(t,{cb:e,once:!0})}emit(t,...e){let n=this._subscribers.get(t)??[],r=[];for(let i of n)i.cb(...e),i.once&&r.push(()=>n.splice(n.indexOf(i),1));for(let i of r)i()}prompt(){return new Promise((t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(ah);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=SN.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),lu(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Re.cursor.show),this.output.off("resize",this.render),lu(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Re.cursor.show),this.output.off("resize",this.render),lu(this.input,!1),t(ah)})})}_isActionKey(t,e){return t==="\t"}_shouldSubmit(t,e){return!0}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,e){this.userInput=t??"",this.emit("userInput",this.userInput),e&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(t,e){if(this._track&&e.name!=="return"&&(e.name&&this._isActionKey(t,e)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),e?.name&&(!this._track&&zt.aliases.has(e.name)&&this.emit("cursor",zt.aliases.get(e.name)),zt.actions.has(e.name)&&this.emit("cursor",e.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t,e),e?.name==="return"&&this._shouldSubmit(t,e)){if(this.opts.validate){let n=Y$(this.opts.validate,this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}q$([t,e?.name,e?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
276
|
+
`),lu(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=Hr(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
277
|
+
`).length-1;this.output.write(Re.cursor.move(-999,t*-1))}render(){let t=Hr(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Re.cursor.hide);else{let e=xN(this._prevFrame,t),n=uh(this.output);if(this.restoreCursor(),e){let r=Math.max(0,e.numLinesAfter-n),i=Math.max(0,e.numLinesBefore-n),o=e.lines.find((s)=>s>=r);if(o===void 0){this._prevFrame=t;return}if(e.lines.length===1){this.output.write(Re.cursor.move(0,o-i)),this.output.write(Re.erase.lines(1));let s=t.split(`
|
|
278
|
+
`);this.output.write(s[o]),this._prevFrame=t,this.output.write(Re.cursor.move(0,s.length-o-1));return}else if(e.lines.length>1){if(r<i)o=r;else{let a=o-i;a>0&&this.output.write(Re.cursor.move(0,a))}this.output.write(Re.erase.down());let s=t.split(`
|
|
279
|
+
`).slice(o);this.output.write(s.join(`
|
|
280
|
+
`)),this._prevFrame=t;return}}this.output.write(Re.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function ON(t,e){if(t===void 0||e.length===0)return 0;let n=e.findIndex((r)=>r.value===t);return n!==-1?n:0}function IN(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function RN(t,e){if(e)return t?e:e[0]}var PN=class extends Qn{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#n="";#t;#o;#a;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return fu(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let e=this.userInput.slice(0,this.cursor),n=this.userInput.slice(this.cursor,this.cursor+1),r=this.userInput.slice(this.cursor+1);return`${e}${fu("inverse",n)}${r}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(e){super(e),this.#o=e.options,this.#a=e.placeholder;let n=this.options;this.filteredOptions=[...n],this.multiple=e.multiple===!0,this.#t=typeof e.options=="function"?e.filter:e.filter??IN;let r;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?r=e.initialValue:r=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0]?.value]),r)for(let i of r){let o=n.findIndex((s)=>s.value===i);o!==-1&&(this.toggleSelected(i),this.#e=o)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,o)=>this.#r(i,o)),this.on("userInput",(i)=>this.#i(i))}_isActionKey(e,n){return e==="\t"||this.multiple&&this.isNavigating&&n.name==="space"&&e!==void 0&&e!==""}#r(e,n){let r=n.name==="up",i=n.name==="down",o=n.name==="return",s=this.userInput===""||this.userInput==="\t",a=this.#a,c=this.options,u=a!==void 0&&a!==""&&c.some((l)=>!l.disabled&&(this.#t?this.#t(a,l):!0));if(n.name==="tab"&&s&&u){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(a,!0),this.isNavigating=!1;return}r||i?(this.#e=Zn(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=RN(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(n.name==="tab"||this.isNavigating&&n.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter((n)=>n!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#i(e){if(e!==this.#n){this.#n=e;let n=this.options;e&&this.#t?this.filteredOptions=n.filter((o)=>this.#t?.(e,o)):this.filteredOptions=[...n];let r=ON(this.focusedValue,this.filteredOptions);this.#e=Zn(r,0,this.filteredOptions);let i=this.filteredOptions[this.#e];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};class lh extends Qn{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",(e)=>{this.output.write(Re.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var NN={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function K$(t){return[...t].map((e)=>NN[e])}function AN(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),n=[],r="/";for(let i of e)i.type==="literal"?r=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&n.push({type:i.type,len:i.type==="year"?4:2});return{segments:n,separator:r}}function sh(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function du(t){return{year:sh(t.year),month:sh(t.month),day:sh(t.day)}}function ch(t,e){return new Date(t||2001,e||1,0).getDate()}function J$(t){let{year:e,month:n,day:r}=du(t);if(!e||e<0||e>9999||!n||n<1||n>12||!r||r<1)return;let i=new Date(Date.UTC(e,n-1,r));if(!(i.getUTCFullYear()!==e||i.getUTCMonth()!==n-1||i.getUTCDate()!==r))return{year:e,month:n,day:r}}function z$(t){let e=J$(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function TN(t,e,n,r){let i=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,o=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return t==="year"?{min:i?.year??1,max:o?.year??9999}:t==="month"?{min:i&&e.year===i.year?i.month:1,max:o&&e.year===o.year?o.month:12}:{min:i&&e.year===i.year&&e.month===i.month?i.day:1,max:o&&e.year===o.year&&e.month===o.month?o.day:ch(e.year,e.month)}}class V$ extends Qn{#e;#n;#t;#o;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#t}}get segments(){return this.#e}get separator(){return this.#n}get formattedValue(){return this.#d(this.#t)}#d(t){return this.#e.map((e)=>t[e.type]).join(this.#n)}#c(){this._setUserInput(this.#d(this.#t)),this._setValue(z$(this.#t)??void 0)}constructor(t){let e=t.format?{segments:K$(t.format),separator:t.separator??"/"}:AN(t.locale),n=t.separator??e.separator,r=t.format?K$(t.format):e.segments,i=t.initialValue??t.defaultValue,o=i?{year:String(i.getUTCFullYear()).padStart(4,"0"),month:String(i.getUTCMonth()+1).padStart(2,"0"),day:String(i.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},s=r.map((a)=>o[a.type]).join(n);super({...t,initialUserInput:s},!1),this.#e=r,this.#n=n,this.#t=o,this.#o=t.minDate,this.#a=t.maxDate,this.#c(),this.on("cursor",(a)=>this.#m(a)),this.on("key",(a,c)=>this.#p(a,c)),this.on("finalize",()=>this.#g(t))}#u(){let t=Math.max(0,Math.min(this.#r.segmentIndex,this.#e.length-1)),e=this.#e[t];if(e)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,e.len-1)),{segment:e,index:t}}#l(t){this.inlineError="",this.#s=null;let e=this.#u();e&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#e.length-1,e.index+t)),this.#r.positionInSegment=0,this.#i=!0)}#f(t){let e=this.#u();if(!e)return;let{segment:n}=e,r=this.#t[n.type],i=!r||r.replace(/_/g,"")==="",o=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,s=TN(n.type,du(this.#t),this.#o,this.#a),a;i?a=t===1?s.min:s.max:a=Math.max(Math.min(s.max,o+t),s.min),this.#t={...this.#t,[n.type]:a.toString().padStart(n.len,"0")},this.#i=!0,this.#s=null,this.#c()}#m(t){if(t)switch(t){case"right":return this.#l(1);case"left":return this.#l(-1);case"up":return this.#f(1);case"down":return this.#f(-1)}}#p(t,e){if(e?.name==="backspace"||e?.sequence===""||e?.sequence==="\b"||t===""||t==="\b"){this.inlineError="";let n=this.#u();if(!n)return;if(!this.#t[n.segment.type].replace(/_/g,"")){this.#l(-1);return}this.#t[n.segment.type]="_".repeat(n.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(e?.name==="tab"){this.inlineError="";let n=this.#u();if(!n)return;let r=e.shift?-1:1,i=n.index+r;i>=0&&i<this.#e.length&&(this.#r.segmentIndex=i,this.#r.positionInSegment=0,this.#i=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#u();if(!n)return;let{segment:r}=n,i=!this.#t[r.type].replace(/_/g,"");if(this.#i&&this.#s!==null&&!i){let f=this.#s+t,h={...this.#t,[r.type]:f},m=this.#h(h,r);if(m){this.inlineError=m,this.#s=null,this.#i=!1;return}this.inlineError="",this.#t[r.type]=f,this.#s=null,this.#i=!1,this.#c(),n.index<this.#e.length-1&&(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!i&&(this.#t[r.type]="_".repeat(r.len),this.#r.positionInSegment=0),this.#i=!1,this.#s=null;let o=this.#t[r.type],s=o.indexOf("_"),a=s>=0?s:Math.min(this.#r.positionInSegment,r.len-1);if(a<0||a>=r.len)return;let c=o.slice(0,a)+t+o.slice(a+1),u=!1;if(a===0&&o==="__"&&(r.type==="month"||r.type==="day")){let f=Number.parseInt(t,10);c=`0${t}`,u=f<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(o.replace(/_/g,"")+t).padStart(r.len,"_")),!c.includes("_")){let f={...this.#t,[r.type]:c},h=this.#h(f,r);if(h){this.inlineError=h;return}}this.inlineError="",this.#t[r.type]=c;let l=c.includes("_")?void 0:J$(this.#t);if(l){let{year:f,month:h}=l,m=ch(f,h);this.#t={year:String(Math.max(0,Math.min(9999,f))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(m,l.day))).padStart(2,"0")}}this.#c();let d=c.indexOf("_");u?(this.#i=!0,this.#s=t):d>=0?this.#r.positionInSegment=d:s>=0&&n.index<this.#e.length-1?(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(a+1,r.len-1)}}#h(t,e){let{month:n,day:r}=du(t);if(e.type==="month"&&(n<0||n>12))return zt.date.messages.invalidMonth;if(e.type==="day"&&(r<0||r>31))return zt.date.messages.invalidDay(31,"any month")}#g(t){let{year:e,month:n,day:r}=du(this.#t);if(e&&n&&r){let i=ch(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=z$(this.#t)??t.defaultValue??void 0}}var HN=class extends Qn{options;cursor=0;#e;getGroupItems(e){return this.options.filter((n)=>n.group===e)}isGroupSelected(e){let n=this.getGroupItems(e),r=this.value;return r===void 0?!1:n.every((i)=>r.includes(i.value))}toggleValue(){let e=this.options[this.cursor];if(e!==void 0)if(this.value===void 0&&(this.value=[]),e.group===!0){let n=e.value,r=this.getGroupItems(n);this.isGroupSelected(n)?this.value=this.value.filter((i)=>r.findIndex((o)=>o.value===i)===-1):this.value=[...this.value,...r.map((i)=>i.value)],this.value=Array.from(new Set(this.value))}else{let n=this.value.includes(e.value);this.value=n?this.value.filter((r)=>r!==e.value):[...this.value,e.value]}}constructor(e){super(e,!1);let{options:n}=e;this.#e=e.selectableGroups!==!1,this.options=Object.entries(n).flatMap(([r,i])=>[{value:r,group:!0,label:r},...i.map((o)=>({...o,group:r}))]),this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),this.#e?0:1),this.on("cursor",(r)=>{switch(r){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#e&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#e&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},CN=new Set(["up","down","left","right"]);class Z$ extends Qn{#e=!1;#n;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}█`;let e=t.slice(0,this.cursor),n=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return n===`
|
|
281
281
|
`?`${e}█
|
|
282
|
-
${r}`:`${e}${
|
|
282
|
+
${r}`:`${e}${fu("inverse",n)}${r}`}get cursor(){return this._cursor}#t(t){if(this.userInput.length===0){this._setUserInput(t);return}this._setUserInput(this.userInput.slice(0,this.cursor)+t+this.userInput.slice(this.cursor))}#o(t){let e=this.value??"";switch(t){case"up":this._cursor=uu(this._cursor,0,-1,e);return;case"down":this._cursor=uu(this._cursor,0,1,e);return;case"left":this._cursor=uu(this._cursor,-1,0,e);return;case"right":this._cursor=uu(this._cursor,1,0,e);return}}_shouldSubmit(t,e){if(this.#n)return this.focused==="submit"?!0:(this.#t(`
|
|
283
283
|
`),this._cursor++,!1);let n=this.#e;return this.#e=!0,n&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
|
|
284
284
|
`&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#t(`
|
|
285
|
-
`),this._cursor++,!1)}constructor(t){let e=t.initialUserInput??t.initialValue;super({...t,initialUserInput:e},!1),e!==void 0&&(this._cursor=e.length),this.#n=t.showSubmit??!1,this.on("key",(n,r)=>{if(r?.name&&
|
|
286
|
-
`);
|
|
287
|
-
`:""}${
|
|
288
|
-
`,c=this.value?e:n;switch(this.state){case"submit":{let u=r?`${
|
|
289
|
-
${
|
|
290
|
-
${
|
|
291
|
-
`:` ${
|
|
285
|
+
`),this._cursor++,!1)}constructor(t){let e=t.initialUserInput??t.initialValue;super({...t,initialUserInput:e},!1),e!==void 0&&(this._cursor=e.length),this.#n=t.showSubmit??!1,this.on("key",(n,r)=>{if(r?.name&&CN.has(r.name)){this.#e=!1,this.#o(r.name);return}if(n==="\t"&&this.#n){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#e=!1,r?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(r?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}n&&(this.#n&&this.focused==="submit"&&(this.focused="editor"),this.#t(n??""),this._cursor++)}}),this.on("userInput",(n)=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}class dh extends Qn{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter((t)=>t.disabled!==!0)}toggleAll(){let t=this._enabledOptions,e=this.value!==void 0&&this.value.length===t.length;this.value=e?[]:t.map((n)=>n.value)}toggleInvert(){let t=this.value;if(!t)return;let e=this._enabledOptions.filter((n)=>!t.includes(n.value));this.value=e.map((n)=>n.value)}toggleValue(){this.value===void 0&&(this.value=[]);let t=this.value.includes(this._value);this.value=t?this.value.filter((e)=>e!==this._value):[...this.value,this._value]}constructor(t){super(t,!1),this.options=t.options,this.value=[...t.initialValues??[]];let e=Math.max(this.options.findIndex(({value:n})=>n===t.cursorAt),0);this.cursor=this.options[e]?.disabled?Zn(e,1,this.options):e,this.on("key",(n,r)=>{r.name==="a"&&this.toggleAll(),r.name==="i"&&this.toggleInvert()}),this.on("cursor",(n)=>{switch(n){case"left":case"up":this.cursor=Zn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Zn(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}var Q$=class extends Qn{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let e=this._selectedValue;this.value=e===void 0?void 0:e.value}constructor(e){super(e,!1),this.options=e.options;let n=this.options.findIndex(({value:i})=>i===e.initialValue),r=n===-1?0:n;this.cursor=this.options[r]?.disabled?Zn(r,1,this.options):r,this.changeValue(),this.on("cursor",(i)=>{switch(i){case"left":case"up":this.cursor=Zn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Zn(this.cursor,1,this.options);break}this.changeValue()})}};class fh extends Qn{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}█`;let e=t.slice(0,this.cursor),n=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return`${e}${fu("inverse",n)}${r}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",(e)=>{this._setValue(e)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as O,stripVTControlCharacters as L_}from"node:util";import Ue from"node:process";var rk=yd(oh(),1);function LN(){if(Ue.platform!=="win32")return Ue.env.TERM!=="linux";return Boolean(Ue.env.CI)||Boolean(Ue.env.WT_SESSION)||Boolean(Ue.env.TERMINUS_SUBLIME)||Ue.env.ConEmuTask==="{cmd::Cmder}"||Ue.env.TERM_PROGRAM==="Terminus-Sublime"||Ue.env.TERM_PROGRAM==="vscode"||Ue.env.TERM==="xterm-256color"||Ue.env.TERM==="alacritty"||Ue.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var FN=LN();var ht=(t,e)=>FN?t:e,jN=ht("◆","*"),_N=ht("■","x"),BN=ht("▲","x"),ph=ht("◇","o"),GN=ht("┌","T"),it=ht("│","|"),Xn=ht("└","—"),B_=ht("┐","T"),G_=ht("┘","—"),hh=ht("●",">"),pu=ht("○"," "),UN=ht("◻","[•]"),X$=ht("◼","[+]"),tk=ht("◻","[ ]"),U_=ht("▪","•"),ek=ht("─","-"),WN=ht("╮","+"),KN=ht("├","+"),zN=ht("╯","+"),DN=ht("╰","+"),W_=ht("╭","+"),qN=ht("●","•"),YN=ht("◆","*"),JN=ht("▲","!"),VN=ht("■","x"),gu=(t)=>{switch(t){case"initial":case"active":return O("cyan",jN);case"cancel":return O("red",_N);case"error":return O("yellow",BN);case"submit":return O("green",ph)}},ik=(t)=>{switch(t){case"initial":case"active":return O("cyan",it);case"cancel":return O("red",it);case"error":return O("yellow",it);case"submit":return O("green",it)}};function ok(t,e){let n=[`${e?`${O("cyan",it)} `:""}${t.join(" • ")}`];return e&&n.push(O("cyan",Xn)),n}var nk=(t,e,n,r,i,o=!1)=>{let s=e,a=0;if(o)for(let c=r-1;c>=n;c--){let u=t[c];if(u&&(s-=u.length),a++,s<=i)break}else for(let c=n;c<r;c++){let u=t[c];if(u&&(s-=u.length),a++,s<=i)break}return{lineCount:s,removals:a}},mh=({cursor:t,options:e,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let a=hu(r)-o,c=uh(r),u=O("dim","..."),l=Math.max(c-s,0),d=Math.max(Math.min(i,l),5),f=0;t>=d-3&&(f=Math.max(Math.min(t-d+3,e.length-d),0));let h=d<e.length&&f>0,m=d<e.length&&f+d<e.length,p=Math.min(f+d,e.length),b=[],$=0;h&&$++,m&&$++;let k=f+(h?1:0),v=p-(m?1:0);for(let M=k;M<v;M++){let I=e[M],x=I?n(I,M===t):"",H=Hr(x,a,{hard:!0,trim:!1}).split(`
|
|
286
|
+
`);b.push(H),$+=H.length}if($>l){let M=0,I=0,x=$,H=t-k,N=l,F=()=>nk(b,x,0,H,N),W=()=>nk(b,x,H+1,b.length,N,!0);h?({lineCount:x,removals:M}=F(),x>N&&(m||(N-=1),{lineCount:x,removals:I}=W())):(m||(N-=1),{lineCount:x,removals:I}=W(),x>N&&(N-=1,{lineCount:x,removals:M}=F())),M>0&&(h=!0,b.splice(0,M)),I>0&&(m=!0,b.splice(b.length-I,I))}let S=[];h&&S.push(u);for(let M of b)for(let I of M)S.push(I);return m&&S.push(u),S};var en=(t)=>{let e=t.active??"Yes",n=t.inactive??"No";return new lh({active:e,inactive:n,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let r=t.withGuide??zt.withGuide,i=`${gu(this.state)} `,o=r?`${O("gray",it)} `:"",s=Cr(t.output,t.message,o,i),a=`${r?`${O("gray",it)}
|
|
287
|
+
`:""}${s}
|
|
288
|
+
`,c=this.value?e:n;switch(this.state){case"submit":{let u=r?`${O("gray",it)} `:"";return`${a}${u}${O("dim",c)}`}case"cancel":{let u=r?`${O("gray",it)} `:"";return`${a}${u}${O(["strikethrough","dim"],c)}${r?`
|
|
289
|
+
${O("gray",it)}`:""}`}default:{let u=r?`${O("cyan",it)} `:"",l=r?O("cyan",Xn):"";return`${a}${u}${this.value?`${O("green",hh)} ${e}`:`${O("dim",pu)} ${O("dim",e)}`}${t.vertical?r?`
|
|
290
|
+
${O("cyan",it)} `:`
|
|
291
|
+
`:` ${O("dim","/")} `}${this.value?`${O("dim",pu)} ${O("dim",n)}`:`${O("green",hh)} ${n}`}
|
|
292
292
|
${l}
|
|
293
|
-
`}}}}).prompt()};var
|
|
293
|
+
`}}}}).prompt()};var ZN=[`${O("dim","↑/↓")} to navigate`,`${O("dim","Space:")} select`,`${O("dim","Enter:")} confirm`],la=(t,e)=>t.split(`
|
|
294
294
|
`).map((n)=>e(n)).join(`
|
|
295
|
-
`),
|
|
296
|
-
${
|
|
297
|
-
`:""}${
|
|
298
|
-
`,a=this.value??[],c=(u,l)=>{if(u.disabled)return e(u,"disabled");let
|
|
299
|
-
${
|
|
300
|
-
`).map((h,m)=>m===0?`${i?`${
|
|
301
|
-
`),
|
|
302
|
-
`).length,
|
|
303
|
-
`).length+1;return`${
|
|
295
|
+
`),sk=(t)=>{let e=(i,o)=>{let s=i.label??String(i.value);return o==="disabled"?`${O("gray",tk)} ${la(s,(a)=>O(["strikethrough","gray"],a))}${i.hint?` ${O("dim",`(${i.hint??"disabled"})`)}`:""}`:o==="active"?`${O("cyan",UN)} ${s}${i.hint?` ${O("dim",`(${i.hint})`)}`:""}`:o==="selected"?`${O("green",X$)} ${la(s,(a)=>O("dim",a))}${i.hint?` ${O("dim",`(${i.hint})`)}`:""}`:o==="cancelled"?`${la(s,(a)=>O(["strikethrough","dim"],a))}`:o==="active-selected"?`${O("green",X$)} ${s}${i.hint?` ${O("dim",`(${i.hint})`)}`:""}`:o==="submitted"?`${la(s,(a)=>O("dim",a))}`:`${O("dim",tk)} ${la(s,(a)=>O("dim",a))}`},n=t.required??!0,r=t.showInstructions??!0;return new dh({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:n,cursorAt:t.cursorAt,validate(i){if(n&&(i===void 0||i.length===0))return`Please select at least one option.
|
|
296
|
+
${O("reset",O("dim",`Press ${O(["gray","bgWhite","inverse"]," space ")} to select, ${O("gray",O("bgWhite",O("inverse"," enter ")))} to submit`))}`},render(){let i=t.withGuide??zt.withGuide,o=Cr(t.output,t.message,i?`${ik(this.state)} `:"",`${gu(this.state)} `),s=`${i?`${O("gray",it)}
|
|
297
|
+
`:""}${o}
|
|
298
|
+
`,a=this.value??[],c=(u,l)=>{if(u.disabled)return e(u,"disabled");let d=a.includes(u.value);return l&&d?e(u,"active-selected"):d?e(u,"selected"):e(u,l?"active":"inactive")};switch(this.state){case"submit":{let u=this.options.filter(({value:d})=>a.includes(d)).map((d)=>e(d,"submitted")).join(O("dim",", "))||O("dim","none"),l=Cr(t.output,u,i?`${O("gray",it)} `:"");return`${s}${l}`}case"cancel":{let u=this.options.filter(({value:d})=>a.includes(d)).map((d)=>e(d,"cancelled")).join(O("dim",", "));if(u.trim()==="")return`${s}${O("gray",it)}`;let l=Cr(t.output,u,i?`${O("gray",it)} `:"");return`${s}${l}${i?`
|
|
299
|
+
${O("gray",it)}`:""}`}case"error":{let u=i?`${O("yellow",it)} `:"",l=this.error.split(`
|
|
300
|
+
`).map((h,m)=>m===0?`${i?`${O("yellow",Xn)} `:""}${O("yellow",h)}`:` ${h}`).join(`
|
|
301
|
+
`),d=s.split(`
|
|
302
|
+
`).length,f=l.split(`
|
|
303
|
+
`).length+1;return`${s}${u}${mh({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:d+f,style:c}).join(`
|
|
304
304
|
${u}`)}
|
|
305
305
|
${l}
|
|
306
|
-
`}default:{let u=i?`${
|
|
307
|
-
`).length,
|
|
308
|
-
`),h=
|
|
306
|
+
`}default:{let u=i?`${O("cyan",it)} `:"",l=s.split(`
|
|
307
|
+
`).length,d=r?ok(ZN,i):i?[O("cyan",Xn)]:[],f=d.join(`
|
|
308
|
+
`),h=d.length+1;return`${s}${u}${mh({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:l+h,style:c}).join(`
|
|
309
309
|
${u}`)}
|
|
310
|
-
${
|
|
311
|
-
`}}}}).prompt()};var
|
|
312
|
-
`);if(
|
|
310
|
+
${f}
|
|
311
|
+
`}}}}).prompt()};var Lr={message:(t=[],{symbol:e=O("gray",it),secondarySymbol:n=O("gray",it),output:r=process.stdout,spacing:i=1,withGuide:o}={})=>{let s=[],a=o??zt.withGuide,c=a?n:"",u=a?`${e} `:"",l=a?`${n} `:"";for(let f=0;f<i;f++)s.push(c);let d=Array.isArray(t)?t:t.split(`
|
|
312
|
+
`);if(d.length>0){let[f,...h]=d;f.length>0?s.push(`${u}${f}`):s.push(a?e:"");for(let m of h)m.length>0?s.push(`${l}${m}`):s.push(a?n:"")}r.write(`${s.join(`
|
|
313
313
|
`)}
|
|
314
|
-
`)},info:(t,e)=>{
|
|
314
|
+
`)},info:(t,e)=>{Lr.message(t,{...e,symbol:O("blue",qN)})},success:(t,e)=>{Lr.message(t,{...e,symbol:O("green",YN)})},step:(t,e)=>{Lr.message(t,{...e,symbol:O("green",ph)})},warn:(t,e)=>{Lr.message(t,{...e,symbol:O("yellow",JN)})},warning:(t,e)=>{Lr.warn(t,e)},error:(t,e)=>{Lr.message(t,{...e,symbol:O("red",VN)})}},Fr=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??zt.withGuide?`${O("gray",Xn)} `:"";n.write(`${r}${O("red",t)}
|
|
315
315
|
|
|
316
|
-
`)},
|
|
317
|
-
`)},
|
|
318
|
-
${
|
|
316
|
+
`)},bu=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??zt.withGuide?`${O("gray",GN)} `:"";n.write(`${r}${t}
|
|
317
|
+
`)},da=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??zt.withGuide?`${O("gray",it)}
|
|
318
|
+
${O("gray",Xn)} `:"";n.write(`${r}${t}
|
|
319
319
|
|
|
320
|
-
`)};var
|
|
321
|
-
`),
|
|
322
|
-
`).map(
|
|
323
|
-
`),l=i?`${
|
|
324
|
-
`:"",
|
|
320
|
+
`)};var QN=(t)=>t,XN=(t,e,n)=>{let r={hard:!0,trim:!1},i=Hr(t,e,r).split(`
|
|
321
|
+
`),o=i.reduce((c,u)=>Math.max(B(u),c),0),s=i.map(n).reduce((c,u)=>Math.max(B(u),c),0),a=e-(s-o);return Hr(t,a,r)},Mn=(t="",e="",n)=>{let r=n?.output??Ue.stdout,i=n?.withGuide??zt.withGuide,o=n?.format??QN,s=["",...XN(t,hu(r)-6,o).split(`
|
|
322
|
+
`).map(o),""],a=B(e),c=Math.max(s.reduce((f,h)=>{let m=B(h);return m>f?m:f},0),a)+2,u=s.map((f)=>`${O("gray",it)} ${f}${" ".repeat(c-B(f))}${O("gray",it)}`).join(`
|
|
323
|
+
`),l=i?`${O("gray",it)}
|
|
324
|
+
`:"",d=i?KN:DN;r.write(`${l}${O("green",ph)} ${O("reset",e)} ${O("gray",ek.repeat(Math.max(c-a-1,1))+WN)}
|
|
325
325
|
${u}
|
|
326
|
-
${
|
|
327
|
-
`)};var
|
|
326
|
+
${O("gray",d+ek.repeat(c+2)+zN)}
|
|
327
|
+
`)};var K_={light:ht("─","-"),heavy:ht("━","="),block:ht("█","#")};var tA=[`${O("dim","↑/↓")} to navigate`,`${O("dim","Enter:")} confirm`],mu=(t,e)=>t.includes(`
|
|
328
328
|
`)?t.split(`
|
|
329
329
|
`).map((n)=>e(n)).join(`
|
|
330
|
-
`):e(t),
|
|
331
|
-
`:""}${
|
|
332
|
-
`;switch(this.state){case"submit":{let c=r?`${
|
|
333
|
-
${
|
|
334
|
-
`).length,l=n?
|
|
335
|
-
`),
|
|
330
|
+
`):e(t),ak=(t)=>{let e=(r,i)=>{if(r===void 0)return"";let o=r.label??String(r.value);switch(i){case"disabled":return`${O("gray",pu)} ${mu(o,(s)=>O("gray",s))}${r.hint?` ${O("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${mu(o,(s)=>O("dim",s))}`;case"active":return`${O("green",hh)} ${o}${r.hint?` ${O("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${mu(o,(s)=>O(["strikethrough","dim"],s))}`;default:return`${O("dim",pu)} ${mu(o,(s)=>O("dim",s))}`}},n=t.showInstructions??!0;return new Q$({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,render(){let r=t.withGuide??zt.withGuide,i=`${gu(this.state)} `,o=`${ik(this.state)} `,s=Cr(t.output,t.message,o,i),a=`${r?`${O("gray",it)}
|
|
331
|
+
`:""}${s}
|
|
332
|
+
`;switch(this.state){case"submit":{let c=r?`${O("gray",it)} `:"",u=Cr(t.output,e(this.options[this.cursor],"selected"),c);return`${a}${u}`}case"cancel":{let c=r?`${O("gray",it)} `:"",u=Cr(t.output,e(this.options[this.cursor],"cancelled"),c);return`${a}${u}${r?`
|
|
333
|
+
${O("gray",it)}`:""}`}default:{let c=r?`${O("cyan",it)} `:"",u=a.split(`
|
|
334
|
+
`).length,l=n?ok(tA,r):r?[O("cyan",Xn)]:[],d=l.join(`
|
|
335
|
+
`),f=l.length+1;return`${a}${c}${mh({output:t.output,cursor:this.cursor,options:this.options,maxItems:t.maxItems,columnPadding:c.length,rowPadding:u+f,style:(h,m)=>e(h,h.disabled?"disabled":m?"active":"inactive")}).join(`
|
|
336
336
|
${c}`)}
|
|
337
|
-
${
|
|
338
|
-
`}}}}).prompt()};var
|
|
339
|
-
`:""}${
|
|
340
|
-
`,r=t.placeholder&&t.placeholder.length>0?
|
|
337
|
+
${d}
|
|
338
|
+
`}}}}).prompt()};var z_=`${O("gray",it)} `;var gh=(t)=>new fh({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,output:t.output,signal:t.signal,input:t.input,render(){let e=t?.withGuide??zt.withGuide,n=`${`${e?`${O("gray",it)}
|
|
339
|
+
`:""}${gu(this.state)} `}${t.message}
|
|
340
|
+
`,r=t.placeholder&&t.placeholder.length>0?O("inverse",t.placeholder[0])+O("dim",t.placeholder.slice(1)):O(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:r,o=this.value??"";switch(this.state){case"error":{let s=this.error?` ${O("yellow",this.error)}`:"",a=e?`${O("yellow",it)} `:"",c=e?O("yellow",Xn):"";return`${n.trim()}
|
|
341
341
|
${a}${i}
|
|
342
|
-
${c}${
|
|
343
|
-
`}case"submit":{let o
|
|
344
|
-
${a}`:""}`}default:{let
|
|
342
|
+
${c}${s}
|
|
343
|
+
`}case"submit":{let s=o?` ${O("dim",o)}`:"",a=e?O("gray",it):"";return`${n}${a}${s}`}case"cancel":{let s=o?` ${O(["strikethrough","dim"],o)}`:"",a=e?O("gray",it):"";return`${n}${a}${s}${o.trim()?`
|
|
344
|
+
${a}`:""}`}default:{let s=e?`${O("cyan",it)} `:"",a=e?O("cyan",Xn):"";return`${n}${s}${i}
|
|
345
345
|
${a}
|
|
346
|
-
`}}}}).prompt();import{existsSync as
|
|
347
|
-
`)}var
|
|
348
|
-
`)){let
|
|
349
|
-
`),
|
|
350
|
-
`),
|
|
351
|
-
`)}let
|
|
352
|
-
`)}
|
|
346
|
+
`}}}}).prompt();import{existsSync as zu,readFileSync as Hy,rmSync as hm}from"node:fs";import{homedir as sn}from"node:os";import{join as ss}from"node:path";var ck=44,Dt=[{name:"Shell",lines:["«B4»~/code/demo«d» on «5»main«2» +2«3» ~1","«2»❯ «»git status -sb","«w»## «2»main«»...«1»origin/main«3» [ahead 1]","«1» M«» src/main.rs","«1»??«» notes.md","","«w»«2»❯ «»ls","«w»«B4»docs«» «B4»src«» «B4»tests«» Cargo.toml README.md","«w»","«2»❯ «»cargo test","«2» ✓«» parses config","«n»«1» ✗«» renders frame","«w»«1» ✗«» renders frame«d» expected «2»3«d», received «1»2","","«2»❯ «»echo «s»selected text«» «c» "]},{name:"Code",lines:["«d» 12 │ «5»import«» { readFile } «5»from «2»'node:fs/promises'","«d» 13 │","«d» 14 │ «8»// Read a palette and check its sixteen colors","«d» 15 │ «5»export async function «4»load«»(path: «6»string«») {","«d» 16 │ «5»const«» text = «5»await «4»readFile«»(path, «2»'utf8'«»)","«b» 17 «d»│ «5»const«» colors = «s»parse(text)«».colors ?? {}","«d» 18 │ «5»if«» (colors.ansi.length !== «3»16«») {","«d» 19 │ «5»throw new «6»Error«»(«2»'needs 16 colors'«»)","«d» 20 │ }","«d» 21 │ «5»return«» { ...colors, ratio: «c»4«3».5«» }","«d» 22 │ }"]},{name:"Diff",lines:["«2»❯ «»git diff --stat","«» src/theme.ts | 3 «2»++«1»-","«2»❯ «»git diff","«b»diff --git a/src/theme.ts b/src/theme.ts","«6»@@ -16,3 +16,4 @@«» export async function load(","«» const text = await readFile(path, 'utf8')","«1»- const colors = parse(text).colors","«2»+ const colors = parse(text).colors ?? {}","«2»+ const ratio = contrast(colors)","«2»❯ «»git log --oneline --graph -4","«3»* 3f2a1c9 («B6»HEAD -> «B2»main«3»)«» Check contrast on load","«3»* 9b04e7d«» Merge branch ansi","«1»|«5»\\","«1»| «5»* «3»51cd0aa«» Add sixteen ANSI colors","«1»|«5»/","«3»* 07be2f1 («B1»origin/main«3», «B3»tag: v1.0«3»)«» Read palette files"]},{name:"Logs",lines:["«2»❯ «»npm run dev","«B2» VITE v6.2.0«d» ready in «b»412«d» ms","«2» ➜ «b»Local«»: «6»http://localhost:5173/","«d»10:42:07 «2»INFO «» GET /api/palettes «2»200«d» 12 ms","«d»10:42:08 «2»INFO «» GET /api/themes/kita «2»200«d» 8 ms","«d»10:42:09 «3»WARN «» slow query: palettes «3»812 ms","«d»10:42:10 «4»DEBUG«» cache hit themes/kita","«d»10:42:11 «B1»ERROR«» POST /api/share «1»500«d» 41 ms","«1» Error«»: read ECONNRESET","«d» at «»TCP.onStreamRead «d»(«6»node:net:216:20«d»)","«d» at «»share «d»(«6»src/share.ts:48:11«d»)","«d»10:42:12 «2»INFO «» retry 1/3 in 200 ms"]},{name:"Monitor",lines:["«6» 1 «b»[«2»|||||||||||||«1»||«» 42.1%«b»]«6» Tasks: «b»128«», 412 thr; «B2»3«» running","«6» 2 «b»[«2»||||||«4»||«» 21.4%«b»]«6» Load average: «b»1.42 «»1.18 0.97","«6» 3 «b»[«2»||||||||||||||«1»|||||«» 71.0%«b»]«6» Uptime: «b»3 days, 04:12:55","«6» 4 «b»[«2»||«» 7.9%«b»]","«6» Mem«b»[«2»||||||||«4»||«3»||«» 6.21G/16.0G«b»]","«6» Swp«b»[«1»|«» 0.10G/2.00G«b»]","","«K2» PID USER CPU% MEM% TIME+ Command ","«s» 4127 kec 38.2 2.1 3:12.44 node dev.js ","«» 2210 kec 12.0 4.8 1:02.10 «b»ghostty","«» 3301 kec 4.4 1.2 0:05.61 «b»zsh","«» 812 «1»root«» 3.1 0.3 0:44.02 «d»kernel_task","«» 167 «1»root«» 0.9 0.1 0:12.80 «d»WindowServer"]}];function Ri(t){let e=Dt.length;return Dt[(t%e+e)%e]}function qo(t,e){let n=t.split("«"),r=n[0]?[[n[0],""]]:[];for(let i of n.slice(1)){let o=i.indexOf("»"),s=i.slice(0,o),a=i.slice(o+1);if(s==="w"||s==="n"){if(s==="w"!==e>=44)return}if(a)r.push([a,s==="w"||s==="n"?"":s])}return r}import{createHash as uA}from"node:crypto";import{existsSync as ku,readFileSync as Eh,rmSync as fk}from"node:fs";import{homedir as hk}from"node:os";import{join as Pi}from"node:path";function jr(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}function tr(t,e){return[`[${t}]`,`Color=${nt(e).join(",")}`,""]}function bh(t,e,n=["Wallpaper="]){let r=(i)=>bt(i,t.background,0.5);return[...tr("Background",t.background),...tr("BackgroundFaint",t.background),...tr("BackgroundIntense",t.background),...t.ansi.slice(0,8).flatMap((i,o)=>[...tr(`Color${o}`,i),...tr(`Color${o}Faint`,r(i)),...tr(`Color${o}Intense`,t.ansi[o+8])]),...tr("Foreground",t.foreground),...tr("ForegroundFaint",r(t.foreground)),...tr("ForegroundIntense",t.foreground),"[General]","Blur=false","ColorRandomization=false",`Description=${e}`,"Opacity=1",...n,""]}var uk={left:"0",top:"0",center:"0.5",right:"1",bottom:"1"};function eA(t){if(!t||t.opacity<=0)return["Wallpaper="];let[e="center",n="center"]=t.position.split("-");return[`Wallpaper=${t.image}`,`FillStyle=${t.cover?"Crop":"Adapt"}`,`Anchor=${uk[n]??"0.5"},${uk[e]??"0.5"}`,`WallpaperOpacity=${t.opacity}`]}function wh(t,e){return[...jr(t),"",...bh(t,`ttheme · ${t.name}`,eA(e))].join(`
|
|
347
|
+
`)}var $h={id:"konsole",limits:"draws no OSC 4, so a tab repaints by switching color scheme",emit(t){return[{path:`konsole/${j(t.name)}.colorscheme`,content:wh(t)}]}};import{openSync as nA,writeSync as rA}from"node:fs";import{ReadStream as iA}from"node:tty";var nn=["11","10","12","17",...Array.from({length:16},(t,e)=>`4;${e}`)];function Nt(t=process.env){return Boolean(t.NO_COLOR)||t.TERM==="dumb"}function oA(t,e){return`\x1B]${nn[t]};${e}\x1B\\`}function er(t,e){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi].map((n,r)=>e&&!e.includes(r)?"":oA(r,n)).join("")}function sA(t){return`\x1B]${t.startsWith("4;")?`104;${t.slice(2)}`:`1${t}`}\x1B\\`}function aA(t){let e=new Map;for(let n of t.split("\x1B")){let r=n.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,o]=r??[];if(i&&o)e.set(i,o)}return e}function lk(t){return`#${t.slice(t.indexOf(":")+1).split("/").slice(0,3).map((n)=>n.slice(0,2).padStart(2,"0")).join("")}`}function dk(t){return nn.map((e)=>{let n=t.get(e);return n?lk(n):void 0})}function wu(t,e=[...t.keys()],n=!1){return e.map((r)=>{let i=t.get(r);return i?`\x1B]${r};${n?lk(i):i}\x1B\\`:sA(r)}).join("")}function $u(t,e){return`\x1B]50;ColorScheme=${t};UseCustomCursorColor=true;customCursorColor=${e}\x07`}function kh(t=nn,e="\x1B[5n"){return`${t.map((n)=>`\x1B]${n};?\x1B\\`).join("")}${e}`}function cA(t){return t.includes("\x1B[0n")}async function yh(t=nn){let e,n;try{e=nA("/dev/tty","r+"),n=new iA(e),n.setRawMode(!0)}catch{return new Map}try{rA(e,kh(t));let r="";return await new Promise((i)=>{let o=setTimeout(i,120);n.on("data",(s)=>{if(r+=s.toString(),cA(r))clearTimeout(o),i()})}),aA(r)}finally{n.setRawMode(!1),n.destroy()}}function Mh(t){if(t.NVIM)return"nvim";if(t.VIM_TERMINAL)return"vim";if(t.INSIDE_EMACS)return"emacs";return t.TERM_PROGRAM==="vscode"?"vscode":void 0}function qt(t){if(Mh(t))return"editor";if(t.TERM_PROGRAM==="WarpTerminal")return"warp";if(t.GHOSTTY_RESOURCES_DIR||t.TERM_PROGRAM==="ghostty")return"ghostty";if(t.KITTY_WINDOW_ID)return"kitty";if(t.WEZTERM_PANE)return"wezterm";if(t.ALACRITTY_WINDOW_ID)return"alacritty";if(t.KONSOLE_VERSION)return"konsole";if(t.ITERM_SESSION_ID||t.TERM_PROGRAM==="iTerm.app")return"iterm2";if(t.TERM_PROGRAM==="Apple_Terminal")return"terminal-app";if(t.WT_SESSION&&!t.TERM_PROGRAM)return"windows-terminal";if(t.TERM?.startsWith("foot"))return"foot";return"unknown"}var pe={ghostty:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},kitty:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},iterm2:{links:!0,pictures:!0,bands:!0,files:!0,moves:!0,layers:!0,paints:!0,repaint:[0,1]},wezterm:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!1,paints:!0,wipes:!0,views:!0},alacritty:{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},"windows-terminal":{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},konsole:{links:!1,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0,repaint:[0,1],hex:!0,schemes:!0},foot:{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},"terminal-app":{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},warp:{links:!0,pictures:!0,bands:!0,files:!1,moves:!1,layers:!1,paints:!1},editor:{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!1},unknown:{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0}};function vh(t,e,n){let r="";for(let i of t.split(`
|
|
348
|
+
`)){let o=i.trim();if(o.startsWith("[")&&o.endsWith("]"))r=o.slice(1,-1);else if(r===e&&o.startsWith(`${n}=`))return o.slice(n.length+1)}return}function lA(t){let e=t.XDG_CONFIG_HOME??Pi(hk(),".config"),n=Pi(e,"konsolerc"),r=ku(n)?vh(Eh(n,"utf8"),"Desktop Entry","DefaultProfile"):void 0;for(let i=0;i<8&&r&&r!=="FALLBACK/";i++){let o=r.endsWith(".profile")?r:`${r}.profile`,s=bk(t).map((u)=>Pi(u,o)).find((u)=>ku(u));if(!s)return!1;let a=Eh(s,"utf8"),c=vh(a,"Interaction Options","AllowEscapedLinks");if(c!==void 0)return c==="true";r=vh(a,"General","Parent")}return!1}function mk(t){let e=qt(t);return e==="konsole"?lA(t):pe[e].links}function Yo(t,e){let n=qt(t),r=pe[n];return r.pictures&&!t.TMUX&&(!r.views||e.includes(n))}function yu(t){return pe[qt(t)].bands}function vu(t){return pe[qt(t)].files}function Jo(t){return pe[qt(t)].layers}function pk(t){return pe[qt(t)].moves}function gk(t){return pe[qt(t)].wipes===!0}function Ni(t){return pe[qt(t)].views===!0}function Ai(t){return`\x1B]1337;SetUserVar=ttheme_view=${Buffer.from(t).toString("base64")}\x07`}var Ti="\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H",xh=120,Sh=4,dA=40;function fA(t){let e=t.TTHEME_ITERM_SHOWN;return t.TTHEME_ITERM_SWITCH==="1"&&t.TTHEME_ITERM_DYED==="0"&&e?`ttheme · ${e}`:void 0}function hA(t,e){let n=pe.iterm2.repaint??[],r=nn.map((c,u)=>u).filter((c)=>!n.includes(c)),i=new Set(n),o=fA(t),s=[],a=()=>{for(let c of s)clearTimeout(c);s=[]};return{slots:n,paint(c){a();for(let u=0;u<r.length;u+=Sh){let l=r.slice(u,u+Sh),d=setTimeout(()=>{for(let f of l)i.add(f);e(er(c,l))},xh+u/Sh*dA);d.unref?.(),s.push(d)}return er(c,n)},wear:(c)=>er(c),saved:()=>yh(),restore(c){a();let u=nn.filter((l,d)=>i.has(d));return o?`\x1B[?2026h${wu(new Map,u)}\x1B]1337;SetProfile=${o}\x07\x1B[?2026l`:wu(c,u)},stop:a}}var mA=3,pA=/^(Wallpaper|FillStyle|Anchor|WallpaperOpacity|WallpaperFlipType)=/;function bk(t){return[t.XDG_DATA_HOME??Pi(hk(),".local","share"),...(t.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((e)=>Pi(e,"konsole"))}function gA(t,e){let n=/(?:^|;)ColorScheme=([^;]+)/.exec(e)?.[1],r=n&&t.map((c)=>Pi(c,`${n}.colorscheme`)).find((c)=>ku(c));if(!r)return["Wallpaper="];let i=Eh(r,"utf8").split(`
|
|
349
|
+
`),o=i.findIndex((c)=>c.trim()==="[General]"),s=i.findIndex((c,u)=>u>o&&c.trimStart().startsWith("[")),a=o<0?[]:i.slice(o+1,s<0?void 0:s).filter((c)=>pA.test(c));return a.length>0?a:["Wallpaper="]}function bA(t,e){let n=bk(t),r=n[0],i=gA(n,e),o=[],s=(c,u,l)=>{let d=bh(u,`ttheme · ${c}`,i).join(`
|
|
350
|
+
`),f=`${j("view")}.${uA("sha1").update(d).digest("hex").slice(0,10)}`,h=Pi(r,`${f}.colorscheme`);if(!ku(h))L(h,d);if(!o.includes(h))o.push(h);for(let m of o.splice(0,Math.max(0,o.length-mA)))fk(m,{force:!0});return $u(f,l)},a=()=>{for(let c of o.splice(0))fk(c,{force:!0})};return{slots:[],paint:(c)=>s(c.name,c,c.cursor),wear:(c,u)=>u.includes("konsole")?$u(j(c.name),c.cursor):void 0,saved:async()=>new Map,restore:()=>{return a(),`\x1B]50;${e}\x07`},stop:a}}function wk(t,e,n=(r)=>{process.stdout.write(r)}){let r=qt(t),i=pe[r];if(!e||Nt(t)||t.TMUX||!i.paints)return;if(r==="iterm2")return hA(t,n);if(r==="konsole"&&t.TTHEME_KONSOLE_LOOK)return bA(t,t.TTHEME_KONSOLE_LOOK);let o=i.repaint??nn.map((a,c)=>c),s=nn.filter((a,c)=>o.includes(c));return{slots:o,paint:(a)=>er(a,o),wear:(a,c)=>!i.schemes?er(a):c.includes(r)?$u(j(a.name),a.cursor):void 0,saved:()=>yh(s),restore:(a)=>wu(a,s,i.hex===!0)}}var Zt=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp","konsole","terminal-app"];var wA=[{section:"tab",title:"This tab"},{section:"startup",title:"New tabs"},{section:"catalog",title:"Palettes"},{section:"own",title:"Your own"},{section:"setup",title:"Setup"},{section:"support",title:"Support"}],Zo=[{name:"preview",args:[],about:"Try palettes live — focus repaints, enter edits its tone and picture and applies it, esc restores, ? lists keys",section:"tab",shell:!0},{name:"use",args:["<palette>"],about:"Paint this tab — a unique prefix works: ttheme use ho",section:"tab",shell:!0},{name:"default",args:["<palette>"],about:"Make a palette the one new tabs open with",section:"startup"},{name:"on",args:[],about:"Wear the default palette in new tabs again",section:"startup"},{name:"off",args:[],about:"Take the palette and picture off every tab — the terminal's own colors until `ttheme on`",section:"startup"},{name:"pin",args:["[dir|ssh:<host>]"],about:"Pin a palette to a directory or an ssh host — the pin covers everything below it, or its whole repository; cd or ssh in repaints, leaving restores",section:"tab",shell:!0},{name:"unpin",args:["[dir|ssh:<host>]"],about:"Drop a pin — this directory's, every one below it, the one above that paints it, or an ssh host's",section:"tab",shell:!0},{name:"pins",args:[],about:"Map every pin — the pinned directories as a tree in their palettes' colors, every ssh host, and the pin that covers this one",section:"tab",shell:!0},{name:"config",args:[],about:"Edit settings in $EDITOR — they apply in new tabs",section:"startup",shell:!0},{name:"browse",args:[],about:"Pick palettes and markets in a live picker — shift+←/→ moves between Catalog, Installed, Markets and Errors",section:"catalog"},{name:"list",args:["[query]"],about:"Show the catalog, marking what is installed",section:"catalog",flags:{json:{type:"boolean",about:"Print the matches as JSON — name, group, catalog, installed"}}},{name:"add",args:["<palette...>"],about:"Install palettes — from the catalog, or from a share code: ttheme add tt1:…",section:"catalog",flags:{market:{type:"string",value:"<source>",about:"Add this market first — a repository, a folder or official — and take bare palette names from it"}}},{name:"remove",args:["<palette...>"],about:"Uninstall palettes",section:"catalog"},{name:"update",args:["[market...]"],about:"Update ttheme and refresh your markets — official palettes come with ttheme; an installed palette from another market keeps its colors until browse's Installed tab takes its update",section:"catalog"},{name:"market",args:["[action]","[source]"],about:"The markets you added — add, remove and search them; init makes one of your own",actions:[["(none)","List the markets you added — their palettes, auto-update and last update"],["add <source>","Add a market — a repository (alice/ttheme-pastel, #v1 pins a tag or branch), a folder, or official; asks whether it updates on its own"],["remove <market>","Drop one by its name (alice@pastel) — the palettes you installed from it keep working"],["search [query]","Repositories on GitHub with the ttheme-market topic"],["init [name]","Make a market of your own — <you>@<name>, in ~/.config/ttheme/market/<name> or a folder you give"],["check [dir]","Check a market's folder before you push it — ttheme-market.toml, every palette, the renames and the gate; nothing is written"]],section:"catalog"},{name:"new",args:["<name>"],about:"Make a palette of your own in the palette editor — <you>@<market>/<name>, from blank, installed at once",section:"own",flags:{from:{type:"string",value:"<palette>",about:"Start from this palette's colors instead of blank"},in:{type:"string",value:"<market>",about:"The local market to put it in — when you have more than one"}}},{name:"edit",args:["<palette>"],about:"Change one of your palettes in the palette editor — the contrast gate advises, never refuses",section:"own"},{name:"check",args:["<palette>"],about:"Measure a palette against the contrast gate — where it misses, suggest colors that pass",section:"own",flags:{fix:{type:"boolean",about:"Write the suggested colors into your palette"}}},{name:"share",args:["<palette>"],about:"Print a share code — ttheme add <code> installs it anywhere, pictures included",section:"own",flags:{tone:{type:"string",value:"<tuned|original>",choices:["tuned","original"],about:"Share it as you tuned it, or as it was — asked when you tuned it and omit this"}}},{name:"init",args:[],about:"Install the shell layer and wire your terminals",section:"setup",flags:{yes:{type:"boolean",short:"y",about:"Accept every default without prompting"}}},{name:"uninstall",args:[],about:"Remove ttheme — its block comes out of every terminal config and what it wrote is deleted",section:"setup",flags:{yes:{type:"boolean",short:"y",about:"Remove without asking"}}},{name:"wire",args:["<terminal>"],about:"Wire one more terminal into this setup, after showing what it edits — the shell offers it in a terminal that paints only through the config init would have wired",section:"setup",hidden:!0},{name:"info",args:[],about:"Print what a bug report needs — version, OS, shell, terminal and the settings you changed",section:"support"},{name:"build",args:[],about:"Emit dist/ for every terminal, plus the zsh palette table — from a checkout",section:"setup",hidden:!0,flags:{only:{type:"string",multiple:!0,value:"<terminal>",choices:Zt,about:"Rebuild just this terminal — repeat it for more"}}},{name:"find",args:["<palette>"],about:"Pick a booru background for a palette — preview opens this on tab",section:"setup",hidden:!0},{name:"image",args:["<palette>","<action>","[picture]"],about:"Show one of a palette's saved backgrounds, remove one, draw one in its palette's tone or its own colors (or get the other ready before it is asked for), or pass on tuning — preview calls this",section:"setup",hidden:!0},{name:"flatten",args:["<source>","<out>","<background>","<opacity>","[canvas]","[place]","[into]"],about:"Lay a picture on a background color at an opacity, placed on a canvas when given one, for Warp, which fades the window instead, and Terminal.app, which takes it written into the file its profile points at and renamed to the out — preview calls this",section:"setup",hidden:!0},{name:"bake",args:["<source>","<out>","<canvas>","<place>"],about:"Place a picture on a transparent canvas the way sips bakes preview's tuning — preview in Warp calls this",section:"setup",hidden:!0},{name:"tone",args:["<palette>","<action>"],about:"Print a palette's colors for preview's panel, or open them in the palette editor — preview calls this",section:"setup",hidden:!0},{name:"redraw",args:[],about:"Draw the background pictures again after TTHEME_BG_BLUR changed — ttheme config and preview call this",section:"setup",hidden:!0},{name:"latest",args:[],about:"Ask npm for the newest ttheme — any command starts this in the background once a day",section:"setup",hidden:!0},{name:"names",args:[],about:"Download aninames' character names when its release changed and index them — any command starts this in the background once a day",section:"setup",hidden:!0}];function $A(t){let e=Object.entries(t.flags??{}).map(([n,{value:r}])=>`[--${n}${r?` ${r}`:""}]`);return[t.name,...e,...t.args].join(" ")}function Vo(t,e=kA){return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}function $k(t){return t.split(" — ")[0]}function yk(t){return Object.entries(t.flags??{}).map(([e,{short:n,value:r,about:i}])=>[`${n?`-${n}, `:""}--${e}${r?` ${r}`:""}`,i])}function vk(t,e){let n=e?[...t.actions??[],...yk(t)]:[];return[[[t.name,...t.args].join(" "),$k(t.about)],...n.map(([r,i])=>[` ${r}`,$k(i)])]}var Sk=[`ttheme ${lt.version}`,lt.description,"Usage: ttheme <command> [options] [args]"],Ek=[["ttheme help","Every command"],["ttheme help all","Every command with its options, and examples"],["ttheme help <command>","One command in full"]],Mk=[["-h, --help","Show help — after a command, that command's"],["-v, --version","Print the version"]],kA=Math.max(...[...Ek,...Mk,...Zo.filter((t)=>!t.hidden).flatMap((t)=>vk(t,!0))].map(([t])=>t.length)),kk=[["npx @kecan0406/ttheme init -y","Wire the terminals found here, no prompts"],["ttheme add homura madoka","Install two palettes"],["ttheme use homura","Paint this tab with one"],["ttheme list --json madoka","The madoka series as JSON"],["ttheme market add alice/ttheme-pastel","alice's market, alice@pastel — ttheme add alice@pastel/dusk"],["ttheme add dusk --market alice/ttheme-pastel","The same in one step"],["ttheme new rei --from rei","Your own rei, <you>@<market>/rei, to edit and share"]];function xk(){return[...Sk,"","Use --help to list every command, or init to set ttheme up"].join(`
|
|
351
|
+
`)}function Oh(t){let e=yk(t);return[`Usage: ttheme ${$A(t)}`,"",t.about,...t.actions?["","Actions:",...Vo(t.actions)]:[],...e.length>0?["","Options:",...Vo(e)]:[]].join(`
|
|
352
|
+
`)}function ha(t,e=!1){let n=Zo.filter((i)=>!i.hidden&&!(e&&i.section==="setup")),r=wA.filter(({section:i})=>n.some((o)=>o.section===i));return[...Sk,"","Getting help:",...Vo(Ek),"","Global options:",...Vo(Mk),...r.flatMap(({section:i,title:o})=>["",`${o}:`,...Vo(n.filter((s)=>s.section===i).flatMap((s)=>vk(s,t)))]),...t?["","Examples:",...Vo(kk,Math.max(...kk.map(([i])=>i.length)))]:[],"",...e?["ttheme alone opens preview and browse as tabs — tab and shift+tab move between them"]:[],"https://ttheme.vercel.app"].join(`
|
|
353
|
+
`)}import{readFileSync as yA}from"node:fs";import{join as vA}from"node:path";var Ih="# ttheme begin",Rh="# ttheme end",Qo=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function _r(t,e){let n=`${Ih}
|
|
353
354
|
${e}
|
|
354
|
-
${
|
|
355
|
-
`;if(
|
|
355
|
+
${Rh}
|
|
356
|
+
`;if(Qo.test(t))return t.replace(Qo,n);if(t==="")return n;return`${t.replace(/\n*$/,`
|
|
356
357
|
`)}
|
|
357
|
-
${n}`}function
|
|
358
|
-
`)}function
|
|
358
|
+
${n}`}function Br(t){let e=t.replace(/\n?# ttheme begin\n[\s\S]*?# ttheme end(?=\n|$)/,"");if(e===t)return t;return e.trim()===""?"":e.replace(/\n*$/,`
|
|
359
|
+
`)}function Gr(t,e){let n=t.replace(Qo,"");return new RegExp(String.raw`^[ \t]*${e}(?:[ \t]*=|[ \t]+\S)`,"m").test(n)}function Ok(t){return`source ${t}/ttheme.zsh`}var SA="# ttheme settings — uncomment a line to change it; exported variables win over this file",Xo={TTHEME_TAB_PALETTE:{doc:"# new tabs: off keeps the configured terminal theme, seq rotates through the palettes (default off)",default:"off"},TTHEME_ANNOUNCE:{doc:'# the palette notice under "Last login:": 1 shows it, 0 silences it (default 1)',default:"1"},TTHEME_FX:{doc:"# search hint animation: typewriter, decode or glitch (default typewriter)",default:"typewriter"},TTHEME_SORT:{doc:"# series and palettes in ttheme and preview: abc sorts them by name, series keeps the order they were added (default abc)",default:"abc"},TTHEME_MOUSE:{doc:"# clicks, the wheel and drags in preview, browse, the palette editor and find: on, or off to leave the mouse to the terminal, so a drag selects text again without a modifier (default on)",default:"on"},TTHEME_BG_BLUR:{doc:"# soften the background pictures behind the text: a blur radius in screen pixels, 0 keeps them sharp — changing it draws every picture again (default 0)",default:"0"},TTHEME_BG_COLORS:{doc:"# the colors new background pictures are drawn in: tone tints a picture in one color of its palette, original keeps its own — preview switches each picture later (default tone)",default:"tone"},TTHEME_WARP_FAST:{doc:"# Warp tab switches: on keeps Warp rereading its settings while it is in front with tabs of different palettes, so the tab you switch to shows its palette in about 0.2 s instead of 0.6 s — about 8% CPU meanwhile; off leaves it to Warp (default on)",default:"on"},TTHEME_NAMES:{doc:"# character names in every language for searching palettes and find's search box, from aninames' weekly release: on downloads them (about 7 MB) and checks once a day in the background; off leaves them as they are (default on)",default:"on"},TTHEME_AUTO_UPDATE:{doc:"# checks in the background: on refreshes the markets you set to update on their own once a day and says when a newer ttheme is out; off leaves both to ttheme update (default on)",default:"on"},TTHEME_MARKET_LOOKUP:{doc:"# the Markets tab in browse: on looks GitHub up by itself — the markets carrying the ttheme-market topic when the tab opens or you type, and the palettes of a repository you type or move onto; off waits for space (default on)",default:"on"},TTHEME_FIND_RATING:{doc:"# the ratings find lists, any of safe, questionable and explicit, each booru read in its own rating vocabulary (default safe)",default:"safe"},TTHEME_FIND_BLOCK:{doc:'# the posts find drops by tag: nudity, underwear, both, or none to keep them all (default "nudity underwear")',default:"nudity underwear"},TTHEME_FIND_POSTS:{doc:"# what find lists first: all is every post of the character, cutouts are the transparent ones (default all)",default:"all"},TTHEME_FIND_SOLO:{doc:"# on keeps the posts tagged solo, the character alone, by danbooru or zerochan; off lists every post (default on)",default:"on"},TTHEME_FIND_CUTOUTS:{doc:'# the tags find calls a transparent cutout, per site as key=tag,tag pairs — e.g. "konachan=transparent,vector yande=transparent_png" (default the built-in tags)',default:""},TTHEME_FIND_ORDER:{doc:"# the order find lists posts in: fit ranks each page by how well it makes a backdrop, newest or score (default fit)",default:"fit"},TTHEME_FIND_SETS:{doc:"# runs of the same picture at the same size from one uploader: fold shows them as one tile, show lists each (default fold)",default:"fold"},TTHEME_FIND_REMOVE_BG:{doc:"# an opaque picture tried on in find: on cuts the character out with macOS Vision, off leaves it as it is (default on)",default:"on"},TTHEME_FIND_MIN_SCORE:{doc:"# the lowest score find lists: off, or a number such as 5, 10, 25, 50 or 100 — danbooru, konachan and yande.re filter by it, zerochan keeps no score (default off)",default:"off"},TTHEME_FIND_MIN_SIZE:{doc:"# the shortest side a picture find lists must reach, in pixels: off, or a number such as 720, 1080, 1440, 1800 or 2560 (default off)",default:"off"},TTHEME_FIND_SITES:{doc:"# the sites find mixes in its all tab: any of danbooru, konachan, yande.re and zerochan (default all four)",default:"danbooru konachan yande.re zerochan"},TTHEME_FIND_HIDE:{doc:"# the kinds of picture find leaves out by tag: comic, monochrome, sketch, chibi, or none to keep them all (default none)",default:"none"},TTHEME_FIND_HIDE_TAGS:{doc:'# more tags find leaves out, spaced — e.g. "cosplay multiple_girls" (default none)',default:""},TTHEME_FIND_PNG:{doc:"# on lists PNG originals only — a zerochan post counts only where danbooru holds the same file (default off)",default:"off"},TTHEME_FIND_HOSTS:{doc:'# send a find site somewhere else, as key=https://host pairs — e.g. "danbooru=https://danbooru.donmai.us" (default none)',default:""}};function ma(t){return Xo[t]?.default}function Ph(t,e){let n=`: \${${t}:=${e}}`;return ma(t)===e?`# ${n}`:n}function Ik(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function EA(t,e){if(Ik(e).test(t))return t;let n=Xo[e];return`${t.replace(/\n*$/,`
|
|
359
360
|
`)}
|
|
360
361
|
${n.doc}
|
|
361
|
-
${
|
|
362
|
-
`}var
|
|
363
|
-
${
|
|
362
|
+
${Ph(e,n.default)}
|
|
363
|
+
`}var Su=Object.keys(Xo),MA=8;function Eu(t,e){let n="";try{n=yA(vA(t,"ttheme","config.zsh"),"utf8")}catch{}return(new RegExp(String.raw`^: \$\{${e}:=([^}\n]*)\}`,"m").exec(n)?.[1]??Xo[e].default).replace(/^(["'])(.*)\1$/,"$2")}function Ur(t){let e=Number(Eu(t,"TTHEME_BG_BLUR"));return Number.isFinite(e)?Math.min(MA,Math.max(0,e)):0}function Mu(t){return Eu(t,"TTHEME_BG_COLORS")==="original"?"original":"tone"}function Nh(){let t=Object.entries(Xo).map(([e,n])=>`${n.doc}
|
|
364
|
+
${Ph(e,n.default)}`);return`${[SA,...t].join(`
|
|
364
365
|
|
|
365
366
|
`)}
|
|
366
|
-
`}function
|
|
367
|
+
`}function xu(t,e,n){let r=Ph(e,n),i=Ik(e);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
|
|
367
368
|
`)}
|
|
368
369
|
${r}
|
|
369
|
-
`}function
|
|
370
|
-
`)}function
|
|
371
|
-
`)}var
|
|
372
|
-
`).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function
|
|
373
|
-
`)}var
|
|
374
|
-
`);return[{path:`alacritty/themes/${
|
|
375
|
-
`);return[{path:`ghostty/themes/${
|
|
376
|
-
`}function
|
|
377
|
-
`)}var
|
|
378
|
-
`);return[{path:`iterm2/${
|
|
379
|
-
`);return[{path:`kitty/themes/${
|
|
380
|
-
`)}function
|
|
381
|
-
`}]}};var
|
|
382
|
-
${n.toLowerCase()}`,"utf8"))r=Math.imul(r^i,16777619)>>>0;return`${
|
|
383
|
-
`)}var
|
|
384
|
-
`);return[{path:`wezterm/colors/${
|
|
385
|
-
`)}var
|
|
386
|
-
`}var
|
|
387
|
-
`}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:
|
|
388
|
-
import = ["${t}"]`:""}function
|
|
370
|
+
`}function Rk(t){if(t==="")return Nh();return Object.keys(Xo).reduce(EA,t)}var Ou=/["$`\\]/;function xA(t){return t.replace(/_\([^)]*\)$/,"").replaceAll("_"," ")}function Ah(t,e,n=[],r={}){for(let l of t)for(let d of[l.name,l.group,l.native??"",...l.nativeNames??[],l.ansiSource])if(Ou.test(d))throw Error(`${l.name}: "${d}" contains a character that breaks zsh quoting`);let i=Math.max(0,...t.map((l)=>l.name.length)),o=(l,d)=>` ${l.name.padEnd(i)} "${d}"`,s=(l)=>l.map((d)=>d.name).join(" "),a=Pt(t),c=(l)=>`'${l.replaceAll("'","'\\''")}'`,u=Zo.filter((l)=>l.section!=="setup"&&!l.hidden);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${lt.version}`,"",'# the palette new tabs open with, which the iTerm2 "ttheme · default" profile wears',`typeset -g TTHEME_STARTUP=${e??""}`,"","# the terminals ttheme is wired into: a picture change reaches every one of them, from whichever runs the shell",`typeset -ga TTHEME_TERMINALS=(${n.join(" ")})`,...Object.keys(r).length>0?["","# what a wired terminal's adapter needs to know of it (src/terminals/)",...Object.entries(r).map(([l,d])=>`typeset -g ${l}=${c(d)}`)]:[],"","# the commands the shell layer knows (src/verbs.ts): help, completion and argument checks read them",`typeset -ga TTHEME_VERBS=(${u.map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_TAB_VERBS=(${u.filter((l)=>l.section==="tab").map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_SHELL_VERBS=(${u.filter((l)=>l.shell).map((l)=>l.name).join(" ")})`,"typeset -gA TTHEME_VERB_ARGS=(",...u.map((l)=>` ${l.name} ${c(l.args.join(" "))}`),")","typeset -gA TTHEME_VERB_ABOUT=(",...u.map((l)=>` ${l.name} ${c(l.about)}`),")",`typeset -g TTHEME_HELP=${c(ha(!1,!0))}`,`typeset -g TTHEME_HELP_ALL=${c(ha(!0,!0))}`,"","# the screens the bare ttheme switches between (src/hub.ts): the exit status of a screen run by the CLI says where it went",`typeset -ga TTHEME_HUB_TABS=(${Vn.map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_HUB_TITLES=(${Vn.map((l)=>l.title).join(" ")})`,`typeset -gi TTHEME_HUB_CLOSED=${su} TTHEME_HUB_SWITCH=${au}`,"","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${Su.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${Nh().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...t.map((l)=>o(l,[l.background,l.foreground,l.cursor,l.selection,...l.ansi].join(" "))),")","","# series order: new tabs cycle through it and TTHEME_SORT=series lists it — the default role stays applyable but unlisted",`typeset -ga TTHEME_ORDER=(${s(a)})`,"","# the same palettes by series name, then palette name: TTHEME_SORT=abc lists them this way",`typeset -ga TTHEME_ABC=(${s(yi(a))})`,"","typeset -gA TTHEME_GROUP=(",...t.map((l)=>o(l,l.group)),")","","# the catalog a market palette sits in — the folder under the market's palettes/, one level below the market in every list","typeset -gA TTHEME_CATALOG=(",...t.filter((l)=>l.catalog).map((l)=>o(l,l.catalog??"")),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...t.filter((l)=>l.native).map((l)=>o(l,l.native??"")),")","","# the character's names in its original language, |-separated, and as its booru tag spells it: preview searches both","typeset -gA TTHEME_NATIVE_NAMES=(",...t.filter((l)=>l.nativeNames).map((l)=>o(l,(l.nativeNames??[]).join("|"))),")","typeset -gA TTHEME_CHARACTER=(",...t.filter((l)=>l.booru&&!Ou.test(l.booru)).map((l)=>o(l,xA(l.booru??""))),")","","# the example scenes preview draws beside the list (src/scenes.ts), each line as «role»text runs",`typeset -ga TTHEME_SCENES=(${Dt.map((l)=>l.name).join(" ")})`,...Dt.flatMap((l,d)=>[`typeset -ga TTHEME_SCENE_${d+1}=(`,...l.lines.map((f)=>` ${c(f)}`),")"]),"","# each booru's ANSI color, which marks a link to one of its posts",`typeset -gA TTHEME_SITE_ANSI=(${V.map((l)=>`${l.name} ${l.ansi}`).join(" ")})`,"","# the terminals that open OSC 8 links (src/terminal.ts)",`typeset -ga TTHEME_LINKS=(${Object.entries(pe).flatMap(([l,d])=>d.links?[l]:[]).join(" ")})`,"","# the six colors a list row shows: foreground, the signature, then red and green","typeset -gA TTHEME_SWATCH=(",...t.map((l)=>o(l,zc(l).join(" "))),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...t.map((l)=>o(l,l.ansiSource)),")",""].join(`
|
|
371
|
+
`)}function Pk(t){let e=Object.entries(t).flatMap(([r,i])=>{let o=i.filter((s)=>!Ou.test(s)&&!s.includes("|"));return o.length>0&&!Ou.test(r)?[[r,o.join("|")]]:[]}),n=Math.max(0,...e.map(([r])=>r.length));return["# the character's other names in every language, |-separated, from the aninames index in the cache: preview reads this when it opens and searches them too","typeset -gA TTHEME_ALIASES=(",...e.map(([r,i])=>` ${r.padEnd(n)} "${i}"`),")",""].join(`
|
|
372
|
+
`)}var Th={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:Ah(t.map(Qe))}]}};import{execFileSync as OA}from"node:child_process";import{existsSync as Nk,readdirSync as IA,readFileSync as RA}from"node:fs";import{join as Ak}from"node:path";function at(t){return Nk(t)?RA(t,"utf8"):""}function Lt(t,e){return t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}function Iu(t){return[...new Set(t.split(`
|
|
373
|
+
`).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function xn(t,e){let n=at(t),r=e(n);return r===n?[]:[{file:t,content:r}]}function pa(t){return process.env.XDG_DATA_HOME??Ak(t,".local","share")}function ts(t){return Nk(t)?IA(t).flatMap((e)=>e.startsWith(j(""))?[Ak(t,e)]:[]):[]}function Hh(t,e){if(!t.shelf)return[];let n=`${[t.id,t.shelf.from].filter(Boolean).join("/")}/`;return(t.emitter.emit?.(e)??[]).flatMap((r)=>{let i=r.path.startsWith(n)?r.path.slice(n.length):"";return i!==""&&!i.includes("/")?[{file:i,content:r.content}]:[]})}function rn(){return{platform:process.platform,env:process.env,run:(t,e)=>{try{return OA(t,[...e],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5000}).trim()}catch{return}}}}import{existsSync as zk}from"node:fs";import{join as Pu}from"node:path";var PA=["black","red","green","yellow","blue","magenta","cyan","white"];function Tk(t,e){return[t,...PA.map((n,r)=>`${n} = '${e[r]}'`),""].join(`
|
|
374
|
+
`)}var Ch={id:"alacritty",limits:"no runtime color API (OSC only)",emit(t){let e=[...jr(t),"","[colors.primary]",`background = '${t.background}'`,`foreground = '${t.foreground}'`,"","[colors.cursor]",`cursor = '${t.cursor}'`,`text = '${t.background}'`,"","[colors.selection]",`background = '${t.selectionBackground}'`,`text = '${t.foreground}'`,"",Tk("[colors.normal]",t.ansi.slice(0,8)),Tk("[colors.bright]",t.ansi.slice(8,16))].join(`
|
|
375
|
+
`);return[{path:`alacritty/themes/${j(t.name)}.toml`,content:e}]}};var Lh={id:"ghostty",emit(t){let e=[...jr(t),`background = ${t.background}`,`foreground = ${t.foreground}`,`cursor-color = ${t.cursor}`,`selection-background = ${t.selectionBackground}`,`selection-foreground = ${t.foreground}`,...t.ansi.map((n,r)=>`palette = ${r}=${n}`),"","macos-icon = custom-style",`macos-icon-ghost-color = ${t.ghostty.iconGhost}`,`macos-icon-screen-color = ${t.ghostty.iconScreen.join(",")}`,"macos-icon-frame = chrome",""].join(`
|
|
376
|
+
`);return[{path:`ghostty/themes/${j(t.name)}`,content:e}]}};function Wr(t){let[e,n,r]=nt(t);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":n/255,"Red Component":e/255}}function Ck(t){return{...Object.fromEntries(t.ansi.map((e,n)=>[`Ansi ${n} Color`,Wr(e)])),"Background Color":Wr(t.background),"Bold Color":Wr(t.foreground),"Cursor Color":Wr(t.cursor),"Cursor Text Color":Wr(t.background),"Foreground Color":Wr(t.foreground),"Selected Text Color":Wr(t.foreground),"Selection Color":Wr(t.selectionBackground)}}function Hk(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function Lk(t,e,n,r,i=!1){let o=(c,u)=>({Name:`ttheme · ${u}`,Guid:j(u),...r?{"Dynamic Profile Parent GUID":r}:{},"Use Separate Colors for Light and Dark Mode":!1,...Hk(e.get(c.name)),...Ck(c)}),s={Name:"ttheme · default",Guid:j("default"),"Dynamic Profile Parent GUID":r,...Hk(void 0)},a=[...n?[o(n,"default")]:i&&r?[s]:[],...t.map((c)=>o(c,c.name))];return`${JSON.stringify({Profiles:a},null,2)}
|
|
377
|
+
`}function NA(t,e){return[` <key>${t}</key>`,"\t<dict>",...Object.entries(e).flatMap(([n,r])=>[` <key>${n}</key>`,typeof r==="string"?` <string>${r}</string>`:` <real>${r}</real>`]),"\t</dict>"].join(`
|
|
378
|
+
`)}var Fh={id:"iterm2",limits:"colors are Display P3, the space iTerm2 reads OSC colors in",emit(t){let e=['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>",...Object.entries(Ck(t)).map(([n,r])=>NA(n,r)),"</dict>","</plist>",""].join(`
|
|
379
|
+
`);return[{path:`iterm2/${j(t.name)}.itermcolors`,content:e}]}};var jh={id:"kitty",emit(t){let e=[...jr(t),`background ${t.background}`,`foreground ${t.foreground}`,`cursor ${t.cursor}`,`cursor_text_color ${t.background}`,`selection_background ${t.selectionBackground}`,`selection_foreground ${t.foreground}`,...t.ansi.map((n,r)=>`color${r} ${n}`),""].join(`
|
|
380
|
+
`);return[{path:`kitty/themes/${j(t.name)}.conf`,content:e}]}};function Fk(t){return["# Generated by ttheme — rewritten on every add, remove and default; do not edit.","import os","",`THEMES = ${JSON.stringify(t.themes)}`,`BACKGROUNDS = ${JSON.stringify(t.backgrounds)}`,"PLACES = {"," 'top-left': 'top-left', 'top-center': 'top', 'top-right': 'top-right',"," 'center-left': 'left', 'center': 'center', 'center-center': 'center', 'center-right': 'right',"," 'bottom-left': 'bottom-left', 'bottom-center': 'bottom', 'bottom-right': 'bottom-right',","}","","shown = {}","faded = {}","worn = {}","","","def locate(path):"," if path.startswith('~/'):"," return os.path.expanduser(path)"," return path if os.path.isabs(path) else os.path.join(BACKGROUNDS, path)","","","def read(path, into):"," try:"," with open(path, encoding='utf-8') as f:"," lines = f.read().splitlines()"," except OSError:"," return False"," for line in lines:"," key, sep, value = line.partition('=')"," key, value = key.strip(), value.strip()"," if not sep or not key or key.startswith('#'):"," continue"," if key == 'config-file':"," read(locate(value.lstrip('?')), into)"," else:"," into[key] = value"," return True","","","def logo(palette):"," c = {}"," if not palette or not read(os.path.join(BACKGROUNDS, palette.replace('@', '--', 1).replace('/', '--', 1) + '.conf'), c):"," return None"," image = c.get('background-image', '')"," try:"," opacity = min(float(c.get('background-image-opacity', '1')), 1.0)"," except ValueError:"," opacity = 1.0"," if not image or opacity <= 0:"," return None"," return locate(image), PLACES.get(c.get('background-image-position', 'center'), 'center'), opacity","","","def fade(path, opacity):"," key = f'{path}#{opacity}'"," if key not in faded:"," from kitty.fast_data_types import load_png_data, png_from_32bit_rgba_data"," with open(path, 'rb') as f:"," rgba, width, height = load_png_data(f.read())"," data = bytearray(rgba)"," data[3::4] = data[3::4].translate(bytes(round(a * opacity) for a in range(256)))"," if len(faded) > 8:"," faded.clear()"," faded[key] = png_from_32bit_rgba_data(bytes(data), width, height)"," return key, faded[key]","","","def show(window):"," want = logo(window.user_vars.get('ttheme_shown') or '')"," if window.id in shown and shown[window.id] == want:"," return"," shown[window.id] = want"," try:"," if want is None:"," window.set_logo('')"," elif want[2] < 1:"," key, png = fade(want[0], want[2])"," window.set_logo(key, want[1], 1, png)"," else:"," window.set_logo(want[0], want[1], 1)"," except Exception:"," shown.pop(window.id, None)","","","def theme(palette):"," path = os.path.join(THEMES, 'ttheme-' + palette.replace('@', '--', 1).replace('/', '--', 1) + '.conf')"," if not palette or not os.path.exists(path):"," return None"," from kitty.colors import parse_colors"," return parse_colors([path])","","","def wear(palette):"," colors = theme(palette) if worn.get('startup') != palette else None"," if colors is None:"," return"," from kitty.colors import patch_colors"," patch_colors(colors[0], colors[1], True, ())"," worn['startup'] = palette","","","def rewear(boss):"," from kitty.colors import patch_colors"," for window in tuple(boss.all_windows):"," colors = theme(window.user_vars.get('ttheme_worn') or '')"," if colors is not None:"," patch_colors(colors[0], colors[1], False, (window,))","","","def on_load(boss, data):"," if getattr(boss, 'ttheme_rewears', False):"," return"," load = boss.load_config_file",""," def reload(*args, **kwargs):"," load(*args, **kwargs)"," worn.pop('startup', None)"," rewear(boss)",""," boss.load_config_file = reload"," boss.ttheme_rewears = True","","","def on_set_user_var(boss, window, data):"," if data['key'] == 'ttheme_shown':"," show(window)"," elif data['key'] == 'ttheme_startup':"," wear(data['value'] or '')","","","def on_focus_change(boss, window, data):"," if data['focused']:"," show(window)","","","def on_close(boss, window, data):"," shown.pop(window.id, None)",""].join(`
|
|
381
|
+
`)}function AA(t){let[e]=t;if(!e)throw Error("manifest needs at least one theme");return{...Dc(),palettes:t.map(Qe)}}var _h={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(AA(t),null,2)}
|
|
382
|
+
`}]}};var Bh={id:"terminal-app",limits:"profiles go into its own settings at init, so the archive carries none"};import{createHash as TA}from"node:crypto";var HA=["black","red","green","yellow","blue","magenta","cyan","white"];function jk(t,e){return[` ${t}:`,...HA.map((n,r)=>` ${n}: "${e[r]}"`)]}function CA(t,e,n){let r=TA("sha1");for(let i of e)r.update(i);return`${j(t)}.${r.digest("hex").slice(0,8)}.${n}`}function _k(t,e,n){let r=2166136261;for(let i of Buffer.from(`${e}
|
|
383
|
+
${n.toLowerCase()}`,"utf8"))r=Math.imul(r^i,16777619)>>>0;return`${j(t)}.${r.toString(16).padStart(8,"0")}.png`}function ga(t,e){return e?CA(t,[e.image,String(Bk(e))],"yaml"):`${j(t)}.yaml`}function Bk(t){return Math.max(0,Math.min(100,Math.round(t.opacity*100)))}function ba(t,e){return[`name: "${t.name}"`,`background: "${t.background}"`,`foreground: "${t.foreground}"`,`accent: "${t.cursor}"`,`cursor: "${t.cursor}"`,`details: ${St(t.background)<0.18?"darker":"lighter"}`,...e?["background_image:",` path: "${e.image}"`,` opacity: ${Bk(e)}`]:[],"terminal_colors:",...jk("normal",t.ansi.slice(0,8)),...jk("bright",t.ansi.slice(8,16)),""].join(`
|
|
384
|
+
`)}var Gh={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(t){return[{path:`warp/themes/${ga(t.name)}`,content:ba(t)}]}};var Gk=(t)=>`[${t.map((e)=>`"${e}"`).join(", ")}]`,Uh={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(t){let e=["[metadata]",`name = "${j(t.name)}"`,`origin_url = "${t.ansiSource}"`,"","[colors]",`foreground = "${t.foreground}"`,`background = "${t.background}"`,`cursor_bg = "${t.cursor}"`,`cursor_border = "${t.cursor}"`,`cursor_fg = "${t.background}"`,`selection_bg = "${t.selectionBackground}"`,`selection_fg = "${t.foreground}"`,"",`ansi = ${Gk(t.ansi.slice(0,8))}`,`brights = ${Gk(t.ansi.slice(8,16))}`,""].join(`
|
|
385
|
+
`);return[{path:`wezterm/colors/${j(t.name)}.toml`,content:e}]}},es=(t)=>JSON.stringify(t);function Uk(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${es(t.path)}`,`local COLORS = ${es(t.colors)}`,`local BACKGROUNDS = ${es(t.backgrounds)}`,`local STARTUP = ${t.startup?es(j(t.startup)):"nil"}`,"local PALETTES = {",...t.palettes.map((e)=>` [${es(e.name)}] = ${es(e.background)},`),"}","","local X = { left = 'Left', center = 'Center', right = 'Right' }","local Y = { top = 'Top', center = 'Middle', bottom = 'Bottom' }","local SIZE = { cover = 'Cover', contain = 'Contain', stretch = '100%' }","","local function locate(path)"," if path:sub(1, 2) == '~/' then"," return os.getenv('HOME') .. path:sub(2)"," elseif path:sub(1, 1) == '/' or path:match('^%a:[/\\\\]') then"," return path"," end"," return BACKGROUNDS .. '/' .. path","end","","local function read(path, into)"," local f = io.open(path, 'r')"," if not f then"," return false"," end"," for line in f:lines() do"," local key, value = line:match('^%s*([%w%-]+)%s*=%s*(.-)%s*$')"," if key == 'config-file' then"," read(locate((value:gsub('^%?', ''))), into)"," elseif key then"," into[key] = value"," end"," end"," f:close()"," return true","end","","local function layers(palette)"," local color = PALETTES[palette]"," local c = {}"," if not color or not read(BACKGROUNDS .. '/' .. ((palette:gsub('@', '--', 1)):gsub('/', '--', 1)) .. '.conf', c) then"," return nil, 'none'"," end"," local image = c['background-image'] or ''"," local opacity = tonumber(c['background-image-opacity'] or '1') or 1"," if image == '' or opacity <= 0 then"," return nil, 'none'"," end"," local fit = c['background-image-fit'] or 'contain'"," local position = c['background-image-position'] or 'center'"," local y, x = position:match('^(%a+)-(%a+)$')"," local rep = c['background-image-repeat'] == 'true' and 'Repeat' or 'NoRepeat'"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = locate(image) },"," opacity = opacity,"," width = SIZE[fit],"," height = SIZE[fit],"," horizontal_align = X[x or 'center'],"," vertical_align = Y[y or 'center'],"," repeat_x = rep,"," repeat_y = rep,"," },"," }, table.concat({ color, image, opacity, fit, position, rep }, '|')","end","","local function framed(window, view)"," local color, image, opacity, W, H, w, h, x, y, at ="," view:match('^([^|]*)|([^|]*)|([^|]*)|(%d+)|(%d+)|(%-?%d+)|(%-?%d+)|(%-?%d+)|(%-?%d+)|(%d)$')"," if not image or image == '' or tonumber(W) == 0 or tonumber(H) == 0 then"," return nil, 'none'"," end"," local d = window:get_dimensions()"," local k = math.max(d.pixel_width / W, d.pixel_height / H)"," local n = tonumber(at) - 1"," local ax, ay = n % 3, n // 3"," local px = function(n) return string.format('%.2fpx', n) end"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = image },"," opacity = tonumber(opacity) or 1,"," width = px(w * k),"," height = px(h * k),"," horizontal_align = 'Left',"," vertical_align = 'Top',"," horizontal_offset = px(ax * (d.pixel_width - W * k) / 2 + x * k),"," vertical_offset = px(ay * (d.pixel_height - H * k) / 2 + y * k),"," repeat_x = 'NoRepeat',"," repeat_y = 'NoRepeat',"," },"," }, table.concat({ view, d.pixel_width, d.pixel_height }, '|')","end","","local shown = {}","","local function show(window, pane)"," local vars = pane:get_user_vars()"," local id = window:window_id()"," local background, key"," if vars.ttheme_view and vars.ttheme_view ~= '' then"," background, key = framed(window, vars.ttheme_view)"," elseif vars.ttheme_shown and vars.ttheme_shown ~= '' then"," background, key = layers(vars.ttheme_shown)"," elseif shown[id] == nil then"," return"," end"," if shown[id] == key then"," return"," end"," shown[id] = key"," local overrides = window:get_config_overrides() or {}"," overrides.background = background"," window:set_config_overrides(overrides)","end","","wezterm.on('user-var-changed', function(window, pane, name)"," if name == 'ttheme_shown' or name == 'ttheme_view' then"," show(window, pane)"," end","end)","wezterm.on('update-status', show)","","return function(config)"," local dirs = config.color_scheme_dirs or {}"," table.insert(dirs, COLORS)"," config.color_scheme_dirs = dirs"," if STARTUP then"," config.color_scheme = STARTUP"," end"," wezterm.add_to_config_reload_watch_list(MODULE)","end",""].join(`
|
|
386
|
+
`)}var Wk=["black","red","green","yellow","blue","purple","cyan","white"];function Kk(t){return{name:j(t.name),background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(Wk.map((e,n)=>[e,t.ansi[n]])),...Object.fromEntries(Wk.map((e,n)=>[`bright${e[0]?.toUpperCase()}${e.slice(1)}`,t.ansi[n+8]]))}}function Wh(t,e,n){let r={...e&&n?{profiles:[{updates:e,colorScheme:j(n)}]}:{},schemes:t.map(Kk)};return`${JSON.stringify(r,null,2)}
|
|
387
|
+
`}var Kh={id:"windows-terminal",limits:"a picture belongs to a profile, which a pane cannot change, so none; OSC repaints per pane",emit(t){return[{path:`windows-terminal/schemes/${j(t.name)}.json`,content:`${JSON.stringify(Kk(t),null,2)}
|
|
388
|
+
`}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:Wh(t)}]}};function LA(t){let e=t.replace(Qo,"");return/^[ \t]*\[colors[\].]/m.test(e)||/^[ \t]*colors[ \t]*[.=]/m.test(e)}var FA=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,Dk=/^[ \t]*\[/m,qk=/^[ \t]*import[ \t]*=/m,jA=/^[ \t]*general[ \t]*[.=]/m;function _A(t){return t?`[general]
|
|
389
|
+
import = ["${t}"]`:""}function zh(t,e){let n=t.replace(Qo,""),r=FA.exec(n);if(!r){let c=n.search(Dk),u=c<0?n:n.slice(0,c);if(jA.test(n)||qk.test(u))return;return _r(t,_A(e))}let i=r.index+r[0].length,o=n.slice(i),s=o.search(Dk);if(qk.test(s<0?o:o.slice(0,s)))return;let a=e?`import = ["${e}"]
|
|
389
390
|
`:"";return`${n.slice(0,i)}
|
|
390
|
-
${
|
|
391
|
-
${a}${
|
|
392
|
-
`)}function
|
|
393
|
-
`)}function
|
|
394
|
-
`),i=
|
|
395
|
-
`),r=
|
|
391
|
+
${Ih}
|
|
392
|
+
${a}${Rh}${o}`}function Ru(t){return Pu(t,"alacritty","alacritty.toml")}function Yk(t){return Pu(t.configHome,"alacritty","themes")}function BA(t,e){return e?Pu(t,"alacritty","themes",`${j(e)}.toml`):void 0}var Dh={id:"alacritty",name:"Alacritty",emitter:Ch,shelf:{from:"themes",dir:Yk},offered:()=>!0,present:(t)=>zk(Pu(t.configHome,"alacritty")),sync(t,e){e.themes(Dh);let n=Ru(t.configHome),r=zh(at(n),BA(t.configHome,t.startup));if(r!==void 0)e.wire(n,r)},plan(t){let e=Ru(t.configHome);return zh(at(e),void 0)!==void 0?[`Edit ${Lt(e,t.home)} — a ttheme block: general.import`]:[]},notes(t){let e=Ru(t.configHome),n=at(e);return[...zk(e)&&zh(n,void 0)===void 0?[`${e} already imports files under [general] — ttheme left it alone; add ${Yk(t)}/<palette>.toml to that import list yourself`]:[],...LA(n)?[`${Lt(e,t.home)} sets its own colors, which win over an imported palette — remove them to open with ttheme's`]:[]]},next:()=>["Alacritty Reloads its config by itself"],unwire:(t)=>({edits:xn(Ru(t.configHome),Br),removals:[],touches:[]})};import{existsSync as GA}from"node:fs";import{join as Au}from"node:path";function UA(t,e,n=""){let r=[];if(!Gr(n,"command")){if(r.push(`command = ${t}/launch-tab.zsh`),!Gr(n,"shell-integration"))r.push("shell-integration = zsh")}if(e)r.push(`theme = ${j(e)}`);return r.push(`config-file = ?${t}/backgrounds/shown.conf`),r.join(`
|
|
393
|
+
`)}function Nu(t){return Au(t,"ghostty","config")}function Jk(t,e,n){return UA(Au(t.configHome,"ttheme"),e,n)}var qh={id:"ghostty",name:"Ghostty",emitter:Lh,shelf:{from:"themes",dir:(t)=>Au(t.configHome,"ghostty","themes")},offered:()=>!0,present:(t)=>GA(Au(t.configHome,"ghostty")),sync(t,e){e.themes(qh);let n=Nu(t.configHome),r=at(n);e.wire(n,_r(r,Jk(t,t.startup,r)))},plan(t){let e=Nu(t.configHome);return[`Edit ${Lt(e,t.home)} — a ttheme block: ${Iu(Jk(t,t.startup,at(e)))}`]},notes(t){let e=Nu(t.configHome);return Gr(at(e),"command")?[`${Lt(e,t.home)} sets its own command — ttheme leaves it, so a new tab takes its palette once zsh starts`]:[]},next:()=>["Restart Ghostty New tabs pick up its config"],unwire:(t)=>({edits:xn(Nu(t.configHome),Br),removals:[],touches:[]})};import{existsSync as Vk}from"node:fs";import{join as Xk}from"node:path";var Yh="ttheme-default";function ns(t){return Xk(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function ty(t){return t.itermBase!==void 0&&t.palettes.length>0}function Zk(t){let e=Z(t.configHome),n=new Map;for(let i of t.themes){let o=Oe(e,i.name,t.home);if(o)n.set(i.name,o)}let r=new Set(Pt(t.entries).map((i)=>i.name));return Lk(t.themes.filter((i)=>r.has(i.name)),n,t.themes.find((i)=>i.name===t.startup),t.state.itermBase,ty(t.state))}function Jh(t){return t.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"}function Qk(t){return t.run("defaults",["read",Jh(t),"Default Bookmark Guid"])||void 0}function WA(t){return t.run("defaults",["read",Jh(t),"PreventEscapeSequenceFromChangingProfile"])==="0"}var KA={key:"itermBase",profile:()=>"ttheme · default",base(t){let e=Qk(t.host);return e&&!e.startsWith("ttheme-")?{...t.state,itermBase:e}:t.state},point(t,e){let n=Qk(t.host),r=t.startup?e||n===Yh?Yh:void 0:n===Yh&&!ty(t.state)?t.state.itermBase:void 0;if(!r||r===n)return;return t.host.run("defaults",["write",Jh(t.host),"Default Bookmark Guid","-string",r]),{restart:Boolean(t.host.run("pgrep",["-x","iTerm2"]))}}},ey={id:"iterm2",name:"iTerm2",emitter:Fh,bakes:!0,offered:(t,e)=>e.platform==="darwin",present:(t)=>Vk(Xk(t.home,"Library","Application Support","iTerm2")),sync(t,e){e.write(ns(t.home),Zk(t))},pictures(t,e){e.write(ns(t.home),Zk(t))},layer:(t,e)=>({TTHEME_ITERM_SWITCH:WA(e)?"1":"",TTHEME_ITERM_PROFILES:ns(t.home)}),plan:(t)=>[`Write ${Lt(ns(t.home),t.home)} — a "ttheme · <palette>" profile per palette`],notes:()=>[],next(t,e){let n=['iTerm2 profiles A "ttheme · <palette>" per palette in Settings › Profiles'];if(t.startup)n.push(e?.restart?`Restart iTerm2 New tabs open on "ttheme · default", which wears ${t.startup}`:`iTerm2 default "ttheme · default" wears ${t.startup} and follows \`ttheme default\``);return n},unwire:(t)=>({edits:[],removals:Vk(ns(t.home))?[ns(t.home)]:[],touches:[]}),defaults:KA};import{existsSync as zA}from"node:fs";import{join as Hu}from"node:path";function ny(t,e,n=""){return[...t?[`include themes/${j(t)}.conf`]:[],`watcher ${e}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!Gr(n,r.split(" ")[0]))].join(`
|
|
394
|
+
`)}function Tu(t){return Hu(t,"kitty","kitty.conf")}function Vh(t){return Hu(t,"ttheme","kitty.py")}function ry(t){return Hu(t.configHome,"kitty","themes")}var Zh={id:"kitty",name:"kitty",emitter:jh,shelf:{from:"themes",dir:ry},offered:()=>!0,present:(t)=>zA(Hu(t.configHome,"kitty")),sync(t,e){e.themes(Zh),e.write(Vh(t.configHome),Fk({themes:ry(t),backgrounds:Z(t.configHome)}));let n=Tu(t.configHome),r=at(n);e.wire(n,_r(r,ny(t.startup,Vh(t.configHome),r)))},plan(t){let e=Tu(t.configHome),n=ny(t.startup,Vh(t.configHome),at(e));return[`Edit ${Lt(e,t.home)} — a ttheme block: ${Iu(n)}`]},notes(t){let e=at(Tu(t.configHome));return Gr(e,"window_logo_scale")||Gr(e,"window_logo_alpha")?["kitty.conf sets its own window_logo_scale or window_logo_alpha — pictures are drawn with them"]:[]},next:()=>["New kitty window Pictures follow it — kitty reloads its colors by itself"],unwire:(t)=>({edits:xn(Tu(t.configHome),Br),removals:[],touches:[]})};import{createHash as DA}from"node:crypto";import{existsSync as Cu}from"node:fs";import{basename as oy,isAbsolute as qA,join as Hi}from"node:path";function rs(t){return Hi(pa(t),"konsole")}function wa(t){return Hi(t,"konsolerc")}function sy(t){return`${j(t)}.profile`}function $a(t){return`ttheme · ${t}`}function ay(t,e){let n=t.findIndex((i)=>i.trim()===`[${e}]`);if(n<0)return;let r=t.findIndex((i,o)=>o>n&&i.trimStart().startsWith("["));return[n,r<0?t.length:r]}function Qh(t){return new RegExp(String.raw`^\s*${t}\s*=`)}function Kr(t,e,n){let r=t.split(`
|
|
395
|
+
`),i=ay(r,e);return(i&&r.slice(i[0]+1,i[1]).find((s)=>Qh(n).test(s)))?.replace(Qh(n),"").trim()}function cy(t,e){let n=t.split(`
|
|
396
|
+
`),r=ay(n,"Desktop Entry"),i=e===void 0?[]:[`DefaultProfile=${e}`];if(!r)return e===void 0?t:`${t===""?"":t.replace(/\n*$/,`
|
|
396
397
|
|
|
397
398
|
`)}[Desktop Entry]
|
|
398
399
|
${i[0]}
|
|
399
|
-
`;let
|
|
400
|
-
`)}function
|
|
401
|
-
`)}var
|
|
400
|
+
`;let o=n.findIndex((a,c)=>c>r[0]&&c<r[1]&&Qh("DefaultProfile").test(a));if(o>=0)n.splice(o,1,...i);else n.splice(r[0]+1,0,...i);let s=r[1]+i.length-(o>=0?1:0);if(n.slice(r[0]+1,s).every((a)=>a.trim()==="")){let a=r[0]>0&&n[r[0]-1]?.trim()===""?r[0]-1:r[0],c=s===n.length&&n[s-1]===""?s-1:s;n.splice(a,c-a)}return n.join(`
|
|
401
|
+
`)}function YA(t){if(t&&le(t.toLowerCase()))return t.toLowerCase();let e=t?.split(",").map((n)=>Number(n.trim()));if(!e||e.length<3||e.slice(0,3).some((n)=>!Number.isInteger(n)||n<0||n>255))return;return`#${e.slice(0,3).map((n)=>n.toString(16).padStart(2,"0")).join("")}`}function uy(t,e){let n=e.endsWith(".profile")?e:`${e}.profile`;if(qA(n))return Cu(n)?n:void 0;let r=n.includes("/")?n:Hi("konsole",n);return[pa(t.home),...(process.env.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((o)=>Hi(o,r)).find((o)=>Cu(o))}function ly(t,e,n=0){let r=e&&e!=="FALLBACK/"&&n<8?uy(t,e):void 0;if(!r)return{};let i=at(r),o=ly(t,Kr(i,"General","Parent"),n+1);return{scheme:Kr(i,"Appearance","ColorScheme")||o.scheme,use:Kr(i,"Cursor Options","UseCustomCursorColor")??o.use,cursor:Kr(i,"Cursor Options","CustomCursorColor")??o.cursor}}function JA(t,e){let n=ly(t,e),r=n.use==="true"?YA(n.cursor):void 0;return[`ColorScheme=${n.scheme??"Breeze"}`,`UseCustomCursorColor=${r?"true":"false"}`,...r?[`customCursorColor=${r}`]:[]].join(";")}function VA(t,e){return["[Appearance]",`ColorScheme=${j(t.name)}`,"","[Cursor Options]",`CustomCursorColor=${nt(t.cursor).join(",")}`,`CustomCursorTextColor=${nt(t.background).join(",")}`,"UseCustomCursorColor=true","","[General]",`Name=${$a(t.name)}`,`Parent=${e}`,""].join(`
|
|
402
|
+
`)}var dy=/^ttheme-(.+)\.([0-9a-f]{8})\.colorscheme$/;function ZA(t){return DA("sha1").update(t).digest("hex").slice(0,8)}function iy(t,e){let n=rs(t.home),r=Z(t.configHome),i=new Set;for(let o of t.themes){let s=wh(o,Oe(r,o.name,t.home)),a=Hi(n,`${j(o.name)}.${ZA(s)}.colorscheme`);i.add(a),e.write(Hi(n,`${j(o.name)}.colorscheme`),s),e.write(a,s)}for(let o of ts(n))if(dy.test(oy(o))&&!i.has(o))e.remove(o)}function QA(t){return ts(t).flatMap((e)=>{let[,n,r]=dy.exec(oy(e))??[];return n&&r?[`${n} ${r}`]:[]}).sort().join(" ")}function XA(t){let e=new Set(Pt(t.entries).map((n)=>n.name));return t.themes.filter((n)=>e.has(n.name)||n.name===t.startup)}var Xh=["--session","--print-reply","--reply-timeout=2000"];function tT(t){return[...(t.run("dbus-send",[...Xh,"--dest=org.freedesktop.DBus","/org/freedesktop/DBus","org.freedesktop.DBus.ListNames"])??"").matchAll(/string "(org\.kde\.konsole(?:-\d+)?)"/g)].flatMap(([,n=""])=>{let i=t.run("dbus-send",[...Xh,`--dest=${n}`,"/Windows","org.freedesktop.DBus.Introspectable.Introspect"])?.match(/<node name="(\d+)"/)?.[1];return i?[{service:n,window:`/Windows/${i}`}]:[]})}function eT(t,{service:e,window:n},r){let i=(o,...s)=>t.run("dbus-send",[...Xh,`--dest=${e}`,n,`org.kde.konsole.Window.${o}`,...s]);return i("setDefaultProfile",`string:${r}`),i("defaultProfile")?.includes(`string "${r}"`)===!0}function nT(t,e){let n=uy(t,e);return n?Kr(at(n),"General","Name"):void 0}function rT(t){return Kr(at(wa(t)),"Desktop Entry","DefaultProfile")}var iT={key:"konsoleBase",profile:$a,base(t){let e=rT(t.configHome);return e&&!e.startsWith(j(""))?{...t.state,konsoleBase:e}:t.state},point(t,e){let n=wa(t.configHome),r=at(n),i=Kr(r,"Desktop Entry","DefaultProfile"),o=i?.startsWith(j(""))===!0,s=t.startup?e||o?sy(t.startup):void 0:o?t.state.konsoleBase??"":void 0;if(s===void 0||s===(i??"")&&!e)return;if(s!==(i??""))gn(n,cy(r,s||void 0));let a=t.startup?$a(t.startup):s?nT(t,s):void 0,c=tT(t.host),u=a!==void 0&&c.every((l)=>eT(t.host,l,a));return{restart:c.length>0&&!u}}},fy={id:"konsole",name:"Konsole",emitter:$h,shelf:{from:"",dir:(t)=>rs(t.home)},offered:(t,e)=>e.platform!=="darwin"&&e.platform!=="win32",present:(t)=>Cu(rs(t.home))||Cu(wa(t.configHome)),sync(t,e){iy(t,e);let n=rs(t.home),r=t.state.konsoleBase??"FALLBACK/",i=new Set;for(let o of XA(t)){let s=Hi(n,sy(o.name));i.add(s),e.write(s,VA(o,r))}for(let o of ts(n))if(o.endsWith(".profile")&&!i.has(o))e.remove(o)},pictures:iy,layer:(t)=>({TTHEME_KONSOLE_BASE:JA(t,t.state.konsoleBase),TTHEME_KONSOLE_SCHEMES:QA(rs(t.home))}),plan(t){return[`Write ${Lt(rs(t.home),t.home)}/${j("*")}.profile — a "ttheme · <palette>" profile per palette, on top of your own`,...t.startup?[`Edit ${Lt(wa(t.configHome),t.home)} — DefaultProfile; \`ttheme off\` puts yours back`]:[]]},notes:()=>[],next(t,e){let n=['Konsole profiles A "ttheme · <palette>" per palette in its profile list'];if(t.startup)n.push(e?.restart?`Restart Konsole New tabs open on "${$a(t.startup)}"`:`Konsole default "${$a(t.startup)}", which follows \`ttheme default\``);return n},unwire(t,e){let n=wa(t.configHome),r=at(n);return{edits:Kr(r,"Desktop Entry","DefaultProfile")?.startsWith(j(""))?[{file:n,content:cy(r,e?.konsoleBase)}]:[],removals:[],touches:[]}},defaults:iT};import{createHash as oT}from"node:crypto";import{existsSync as py,readdirSync as sT,readFileSync as aT,rmSync as cT}from"node:fs";import{join as Ci}from"node:path";var gy="com.apple.Terminal",ka="ttheme · ";function on(t){return`${ka}${t}`}function Lu(t){return Ci(t,"ttheme","terminal-app.js")}function is(t){return Ci(t,"ttheme","terminal-app")}function uT(t,e){return Ci(t.XDG_STATE_HOME??Ci(e,".local","state"),"ttheme","terminal-app.window")}var lT=`ObjC.import('AppKit')
|
|
402
403
|
|
|
403
|
-
const OURS = '${
|
|
404
|
+
const OURS = '${ka}'
|
|
404
405
|
const IMAGE = 'BackgroundImageBookmark'
|
|
405
406
|
const KEYS = ['BackgroundColor', 'TextColor', 'CursorColor', 'SelectionColor', 'ANSIBlackColor', 'ANSIRedColor',
|
|
406
407
|
'ANSIGreenColor', 'ANSIYellowColor', 'ANSIBlueColor', 'ANSIMagentaColor', 'ANSICyanColor', 'ANSIWhiteColor',
|
|
@@ -584,83 +585,65 @@ function run(argv) {
|
|
|
584
585
|
}
|
|
585
586
|
return changed ? 'wrote' : 'same'
|
|
586
587
|
}
|
|
587
|
-
`;function
|
|
588
|
-
`),n=
|
|
589
|
-
`),r=
|
|
588
|
+
`;function tm(t,e,n){return t.run("osascript",["-l","JavaScript",Lu(e),...n])}function em(t){return t.run("defaults",["read",gy,"Default Window Settings"])||void 0}function dT(t){return[t.background,t.foreground,t.cursor,t.selectionBackground,...t.ansi]}function by(t){let e=new Set(Pt(t.entries).map((n)=>n.name));return t.themes.filter((n)=>e.has(n.name)||n.name===t.startup)}function nm(t,e){let n=em(e);return t.terminalBase??(n&&!n.startsWith(ka)?n:"Basic")}function rm(t,e){let n=/^(\d+)x(\d+)$/.exec(at(uT(t,e)).trim());return n?{width:Number(n[1])*2,height:Number(n[2])*2}:void 0}function im(t,e,n,r){let i=r?.width??t,o=r?.height??e,s=Wt.indexOf(n.position)+1||5,a=Ho(t,e,i,o,100,s,n.cover),c=Math.min(1,t/Math.max(1,a.w));return{width:Math.max(1,Math.round(i*c)),height:Math.max(1,Math.round(o*c)),at:{x:Math.round(a.x*c),y:Math.round(a.y*c),w:Math.round(a.w*c),h:Math.round(a.h*c)}}}var wy=/^ttheme-(.+)\.([0-9a-z-]+)\.png$/;function Fu(t){let e=new Map;for(let n of py(t)?sT(t):[]){let[,r]=wy.exec(n)??[];if(r)e.set(r,[...e.get(r)??[],n])}return e}function fT(t){return[...Fu(t)].map(([e,n])=>`${e} ${(wy.exec(n[0])??[])[2]}`).sort().join(" ")}function hy(t){let e=is(t.configHome),n=Fu(e),r=rm(t.host.env,t.home),i=new Map,o=(s)=>{for(let a of s)cT(Ci(e,a),{force:!0})};for(let s of by(t)){let a=n.get(oe(s.name))??[];n.delete(oe(s.name));let c=Oe(Z(t.configHome),s.name,t.home),u=c&&py(c.image)?new Uint8Array(aT(c.image)):void 0,l=u&&wn(u);if(!c||!u||!l||c.opacity<=0){o(a);continue}let d=im(l.width,l.height,c,r),f=oT("sha1").update(u).update(JSON.stringify([s.background.toLowerCase(),c.opacity,d])).digest("hex").slice(0,8),h=`${j(s.name)}.${f}.png`,m=Ci(e,h);if(!a.includes(h)){let p;try{p=kr($r(_t(u),s.background,c.opacity,d))}catch{o(a);continue}let[b,...$]=a;if(b)di(Ci(e,b),m,p);else L(m,p);o($)}else o(a.filter((p)=>p!==h));i.set(s.name,m)}for(let s of n.values())o(s);return i}function my(t,e){tm(t.host,t.configHome,["write",nm(t.state,t.host),...by(t).flatMap((n)=>[on(n.name),...dT(n),e.get(n.name)??"-"])])}var hT={key:"terminalBase",profile:on,base(t){let e=em(t.host);return e&&!e.startsWith(ka)?{...t.state,terminalBase:e}:t.state},point(t,e){let n=em(t.host),r=n?.startsWith(ka)===!0;if(t.state.palettes.length===0)tm(t.host,t.configHome,["drop"]);let i=t.startup?e||r?on(t.startup):void 0:r?nm(t.state,t.host):void 0;if(i===void 0||i===n&&!e)return;for(let s of["Default Window Settings","Startup Window Settings"])t.host.run("defaults",["write",gy,s,"-string",i]);return{restart:Boolean(t.host.run("pgrep",["-x","Terminal"]))&&tm(t.host,t.configHome,["loaded",i])!=="1"}}},$y={id:"terminal-app",name:"Terminal.app",emitter:Bh,offered:(t,e)=>e.platform==="darwin",present:()=>!1,sync(t,e){e.write(Lu(t.configHome),lT),my(t,hy(t))},pictures(t){my(t,hy(t))},layer:(t,e)=>({TTHEME_TERMINAL_APP_BASE:nm(t.state,e),TTHEME_TERMINAL_PICTURES:fT(is(t.configHome))}),plan:(t)=>[`Add a "${on("<palette>")}" profile per palette to Terminal.app's settings — a copy of your own profile in the palette's colors, with its picture`,...t.startup?[`Make "${on(t.startup)}" Terminal.app's default — \`ttheme off\` puts yours back`]:[]],notes:()=>[],next(t,e){let n=[`Terminal.app A "${on("<palette>")}" profile per palette in Settings › Profiles`];if(t.startup)n.push(e?.restart?`Restart Terminal New windows and tabs open on "${on(t.startup)}"`:`Terminal default "${on(t.startup)}", which follows \`ttheme default\``);return n},unwire:()=>({edits:[],removals:[],touches:[]}),defaults:hT};import{spawn as mT}from"node:child_process";import{existsSync as zr,mkdirSync as pT,readdirSync as om,readFileSync as sm,realpathSync as gT,rmSync as bT,writeFileSync as wT}from"node:fs";import{dirname as Sy,join as Pe}from"node:path";function Li(t){return process.platform==="darwin"?Pe(t,".warp","themes"):Pe(pa(t),"warp-terminal","themes")}function Dr(t,e){return process.platform==="darwin"?Pe(t,".warp","settings.toml"):Pe(e,"warp-terminal","settings.toml")}var ju='"dark"';function _u(t){return Pe(t,"ttheme","warp.base")}var Ey="[appearance.themes]";function My(t){let e=t.findIndex((r)=>r.trim()===Ey);if(e<0)return;let n=t.findIndex((r,i)=>i>e&&r.trimStart().startsWith("["));return[e,n<0?t.length:n]}function qr(t){let e=t.split(`
|
|
589
|
+
`),n=My(e);if(!n)return;return e.slice(n[0]+1,n[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function cm(t,e=`${j(t)}.yaml`){return`{ custom = { name = "${t}", path = "${e}" } }`}function $T(t){return t?.includes(`path = "${j("")}`)===!0?/name = "([^"]+)"/.exec(t)?.[1]:void 0}function Bu(t,e){let n=t.split(`
|
|
590
|
+
`),r=My(n);if(!r)return e===void 0?t:`${t.replace(/\n*$/,`
|
|
590
591
|
`)}
|
|
591
|
-
${
|
|
592
|
+
${Ey}
|
|
592
593
|
theme = ${e}
|
|
593
|
-
`;let i=n.findIndex((s
|
|
594
|
-
`)}function
|
|
594
|
+
`;let i=n.findIndex((o,s)=>s>r[0]&&s<r[1]&&/^theme\s*=/.test(o));if(i>=0)n.splice(i,1,...e===void 0?[]:[`theme = ${e}`]);else if(e!==void 0)n.splice(r[0]+1,0,`theme = ${e}`);return n.join(`
|
|
595
|
+
`)}function am(t){return qr(t)?.includes(`path = "${j("")}`)===!0}var kT="setTimeout(() => { const fs = require('node:fs'); const [file, next, seen, theme] = process.argv.slice(-4); if (fs.readFileSync(file, 'utf8') !== seen || !fs.existsSync(theme)) return; const tmp = file + '.ttheme-' + process.pid; fs.writeFileSync(tmp, next); fs.chmodSync(tmp, fs.statSync(file).mode & 0o7777); fs.renameSync(tmp, file) }, 500)";function xy(t,e,n){return{image:Pe(t,_k(e.name,n.image,e.background)),opacity:n.opacity}}function ky(t){let e=Li(t.home),n=Z(t.configHome),r=new Map,i=new Set;for(let o of t.themes){let s=Oe(n,o.name,t.home),a=ga(o.name,s&&xy(e,o,s));r.set(o.name,a);for(let c of new Set([a,ga(o.name)]))if(!zr(Pe(e,c)))i.add(c)}return{files:r,fresh:i}}function yy(t,e,n){let r=Li(t.home),i=Z(t.configHome),o=new Set(n.values()),s=qr(at(Dr(t.home,t.configHome)))??"";for(let u of t.themes){let l=Oe(i,u.name,t.home),d=n.get(u.name);if(l&&d){let f=xy(r,u,l);if(!zr(f.image))try{let h=_t(new Uint8Array(sm(l.image)));L(f.image,kr($r(h,u.background,1)))}catch{n.set(u.name,ga(u.name));continue}e.write(Pe(r,d),ba(u,f))}}if(!zr(r))return;let a=(u,l)=>u.startsWith(j(""))&&new RegExp(`\\.[0-9a-f]{8}\\.${l}$`).test(u);for(let u of om(r))if(a(u,"yaml")&&!o.has(u)&&!s.includes(`path = "${u}"`))e.remove(Pe(r,u));let c=new Set;for(let u of om(r)){let l=u.startsWith(j(""))&&u.endsWith(".yaml")?/^ {2}path: "(.+)"$/m.exec(at(Pe(r,u)))?.[1]:void 0;if(l)c.add(l)}for(let u of om(r))if(a(u,"png")&&!c.has(Pe(r,u)))e.remove(Pe(r,u))}function yT(t,e){let n=process.env.TTHEME_WARP_WEARS;return t!==void 0&&n!==void 0&&e.files.has(n)?n:t}function vy(t,e,n,r=!1){let i=Dr(t.home,t.configHome);if(!zr(i))return;let o=_u(t.configHome),s=sm(i,"utf8"),a=r?$T(qr(s)):e;if(r&&(a===void 0||!n.files.has(a)))return;let c;if(a){if(!am(s)&&!zr(o))pT(Sy(o),{recursive:!0}),wT(o,qr(s)??"");c=cm(a,n.files.get(a))}else{if(!am(s))return;c=zr(o)&&sm(o,"utf8")||ju,bT(o,{force:!0})}let u=Bu(s,c);if(u===s)return;let l=a===void 0?void 0:n.files.get(a)??`${j(a)}.yaml`;if(l!==void 0&&n.fresh.has(l))Nd(i),mT(process.execPath,["-e",kT,gT(i),u,s,Pe(Li(t.home),l)],{detached:!0,stdio:"ignore"}).unref();else gn(i,u);return i}var um={id:"warp",name:"Warp",emitter:Gh,shelf:{from:"themes",dir:(t)=>Li(t.home)},bakes:!0,offered:(t,e)=>e.platform!=="win32",present:(t)=>zr(Sy(Li(t.home))),sync(t,e){let n=ky(t);e.themes(um),yy(t,e,n.files);let r=vy(t,yT(t.startup,n),n);if(r)e.note(r)},pictures(t,e){let n=ky(t);yy(t,e,n.files),vy(t,void 0,n,!0)},plan(t){let e=Dr(t.home,t.configHome);return t.startup&&zr(e)?[`Edit ${Lt(e,t.home)} — [appearance.themes] theme; \`ttheme off\` puts yours back`]:[]},notes:()=>["Warp wears one theme for the whole app, set through its settings.toml — a tab that takes a palette (`ttheme use`, a pin, preview) switches it, and switching tabs puts on the palette of the tab in front, read from Warp’s session database with sqlite3"],next:()=>[],unwire(t){let e=Dr(t.home,t.configHome),n=at(e);return{edits:am(n)?[{file:e,content:Bu(n,at(_u(t.configHome))||ju)}]:[],removals:[],touches:[]}}};import{existsSync as Wu}from"node:fs";import{join as os}from"node:path";var Oy=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,vT=/^return config[ \t]*$/gm;function ST(t){return`dofile(${JSON.stringify(t)})(config)`}var Ry=`local wezterm = require 'wezterm'
|
|
595
596
|
local config = wezterm.config_builder()
|
|
596
597
|
|
|
597
|
-
`;function
|
|
598
|
-
`?"":e}function
|
|
598
|
+
`;function ET(t){let e=t.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return e===`${Ry}return config
|
|
599
|
+
`?"":e}function lm(t,e){let n=`-- ttheme begin
|
|
599
600
|
${e}
|
|
600
601
|
-- ttheme end
|
|
601
|
-
`;if(
|
|
602
|
+
`;if(Oy.test(t))return t.replace(Oy,n);if(t==="")return`${Ry}${n}
|
|
602
603
|
return config
|
|
603
|
-
`;let r=[...t.matchAll(
|
|
604
|
-
${t.slice(r.index)}`}function
|
|
605
|
-
`)}function
|
|
606
|
-
`),this.shown=[]}put(t,e){let n=t.map((
|
|
604
|
+
`;let r=[...t.matchAll(vT)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${n}
|
|
605
|
+
${t.slice(r.index)}`}function Gu(t,e){let n=os(e,".wezterm.lua");return Wu(n)?n:os(t,"wezterm","wezterm.lua")}function Iy(t){return os(t.configHome,"wezterm","colors")}function Uu(t){return os(t.configHome,"ttheme","wezterm.lua")}var dm={id:"wezterm",name:"WezTerm",emitter:Uh,shelf:{from:"colors",dir:Iy},offered:()=>!0,present:(t)=>Wu(os(t.configHome,"wezterm"))||Wu(os(t.home,".wezterm.lua")),sync(t,e){e.themes(dm),e.write(Uu(t),Uk({path:Uu(t),colors:Iy(t),backgrounds:Z(t.configHome),...t.startup?{startup:t.startup}:{},palettes:t.themes}));let n=Gu(t.configHome,t.home),r=lm(at(n),ST(Uu(t)));if(r!==void 0)e.wire(n,r)},plan(t){let e=Gu(t.configHome,t.home);return lm(at(e),"")!==void 0?[`Edit ${Lt(e,t.home)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`]:[]},notes(t){let e=Gu(t.configHome,t.home);return Wu(e)&&lm(at(e),"")===void 0?[`${e} has no \`return config\` line — ttheme left it alone; call \`dofile("${Uu(t)}")(config)\` from it yourself`]:[]},next:()=>["WezTerm Reloads its config by itself"],unwire:(t)=>({edits:xn(Gu(t.configHome,t.home),ET),removals:[],touches:[]})};import{existsSync as Ny,readFileSync as MT,utimesSync as xT}from"node:fs";import{dirname as OT,join as Ku}from"node:path";function fm(t){return Ku(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function Py(t){return[Ku(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),Ku(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),Ku(t,"Microsoft","Windows Terminal","settings.json")].filter((e)=>Ny(e))}function IT(t){for(let e of t){let n=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(MT(e,"utf8"))?.[1];if(n)return n}return}function Ay(t){if(t.platform==="win32")return t.env.LOCALAPPDATA;if(!t.env.WSL_DISTRO_NAME)return;let e=t.run("cmd.exe",["/d","/c","echo %LOCALAPPDATA%"]);return e&&t.run("wslpath",["-u",e])||void 0}var Ty={id:"windows-terminal",name:"Windows Terminal",emitter:Kh,offered:(t)=>t.wtHome!==void 0,present:(t)=>t.wtHome!==void 0,installs:(t)=>({wtHome:t.wtHome,wtProfile:t.wtProfile}),sync(t,e){let{wtHome:n,wtProfile:r}=t.state;if(!n)return;let i=Py(n);if(e.write(fm(n),Wh(t.themes,r??IT(i),t.startup))){let o=new Date;for(let s of i)xT(s,o,o);if(i.length>0)e.repaint()}},plan:(t)=>t.state.wtHome?[`Write ${fm(t.state.wtHome)} — its schemes, and touch settings.json so it reloads`]:[],notes:(t)=>t.state.wtHome?[]:["Windows Terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself"],next:()=>["Windows Terminal Reloads its settings by itself"],unwire(t,e){let n=e?.wtHome,r=n?OT(fm(n)):void 0;return{edits:[],removals:r&&Ny(r)?[r]:[],touches:n?Py(n):[]}}};var On={ghostty:qh,kitty:Zh,alacritty:Dh,wezterm:dm,iterm2:ey,"windows-terminal":Ty,warp:um,konsole:fy,"terminal-app":$y};function kt(t=Zt){return t.map((e)=>On[e])}function ji(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function Ne(t){return t.off?void 0:ji(t)}function J(){return process.env.XDG_CONFIG_HOME??ss(sn(),".config")}var Fi=(t)=>typeof t==="string"&&t!==""?t:void 0,RT={author:Fi,startup:Fi,off:(t)=>t?!0:void 0,itermBase:Fi,konsoleBase:Fi,terminalBase:Fi,wtHome:Fi,wtProfile:Fi,markets:(t)=>Array.isArray(t)?t.filter((e)=>typeof e==="string"):void 0,updates:(t)=>t&&typeof t==="object"?Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]==="boolean")):void 0};function K(t){let e=qn(t);if(!zu(e))throw Error(`nothing installed yet at ${e} — run \`ttheme init\` first`);let n=JSON.parse(Hy(e,"utf8"));if(!Array.isArray(n?.palettes)||!Array.isArray(n.terminals))throw Error(`${e} has no palettes or terminals`);return{terminals:n.terminals.filter((r)=>Zt.includes(r)),...Object.fromEntries(Object.entries(RT).flatMap(([r,i])=>{let o=i(n[r]);return o===void 0?[]:[[r,o]]})),palettes:n.palettes}}function We(t,e){L(qn(t),`${JSON.stringify(e,null,2)}
|
|
606
|
+
`)}function Cy(t,e){let n=new Map(t.palettes.map((i)=>[i.name,i])),r=e.filter((i)=>!n.has(i));if(r.length>0){let i=[...new Set(r.flatMap((s)=>ct(s)??[]))].filter((s)=>!t.palettes.some((a)=>ct(a.name)===s)),o=i.length>0?`add ${i.join(", ")} first — \`ttheme market search\` finds a market's repository`:Zf(Pt(t.palettes),r);throw Error(`not in any market: ${r.join(", ")} — ${o}`)}return t.palettes.filter((i)=>e.includes(i.name))}function ya(t,e,n){return{configHome:t,home:n,state:e,startup:Ne(e)}}function Ly(t,e,n,r,i){return{...ya(t,n,r),entries:e,themes:e.map(Ie),host:i}}function Fy(t){let e=[],n={written:e,repainted:!1,write(r,i){if(e.push(r),zu(r)&&Hy(r,"utf8")===i)return!1;return L(r,i),!0},wire(r,i){e.push(r),gn(r,i)},note(r){e.push(r)},remove(r){hm(r,{force:!0})},themes(r){let i=r.shelf?.dir(t);if(!i)return;for(let o of t.themes)for(let{file:s,content:a}of Hh(r,o))n.write(ss(i,s),a)},repaint(){n.repainted=!0}};return n}function PT(t,e){return Object.assign({},...kt(t.state.terminals).map((n)=>n.layer?.(t,e)??{}))}function ue(t,e,n,r=sn(),i=rn()){Rt(Z(t));let o=Cy(zo(t,e),n.palettes),s=nu(o,Yn(t));H0(t,new Map(s.map((u)=>[u.name,No(u)]))),S0(t),Wo(t,o);let a=Ly(t,s,n,r,i),c=Fy(a);for(let u of kt(n.terminals))u.sync(a,c);return c.written.push(By(a,i,c.repainted)),_y(t,s,r),c.written}function jy(t,e=sn()){if(!zu(ss(t,"ttheme","palettes.zsh")))return;let n=new Set(K(t).palettes);_y(t,he(t).palettes.filter((r)=>n.has(r.name)),e)}function _y(t,e,n){let r=ss(t,"ttheme","aliases.zsh"),i=Pk(NT(e,n));if(at(r)!==i)L(r,i)}function NT(t,e){let n=t.flatMap((o)=>o.booru?[o.booru]:[]),r=Tf(n,e),i={};for(let o of t){let s=new Set(o.nativeNames??[]),a=(o.booru?r.get(o.booru)??[]:[]).filter((c)=>!s.has(c));if(a.length>0)i[o.name]=a}return i}function By(t,e,n){let r=ss(t.configHome,"ttheme","palettes.zsh"),i=Ah(t.entries,t.startup,t.state.terminals,PT(t,e));if(n||at(r)!==i)L(r,i),hm(`${r}.zwc`,{force:!0});return r}function Ae(t,e=sn(),n=rn()){let r=K(t),i=kt(r.terminals).filter((a)=>a.pictures);if(i.length===0)return;let o=Ly(t,Cy(he(t),r.palettes),r,e,n),s=Fy(o);for(let a of i)a.pictures?.(o,s);By(o,n,!1)}function _i(t){return!kt(t).some((e)=>e.bakes)}function Du(t,e,n=sn()){let r=ya(t,e,n);return kt(e.terminals).flatMap((i)=>[...i.shelf?[`Write ${Lt(i.shelf.dir(r),n)}/${j("*")} — a theme file per palette`]:[],...i.plan(r)])}function qu(t,e,n=sn()){let r=ya(t,e,n);return kt(e.terminals).flatMap((i)=>i.notes(r))}function Yu(t,e,n,r=sn()){let i=ya(t,e,r);return kt(e.terminals).flatMap((o)=>o.next(i,n.get(o.id)))}function as(t,e,n,r,i=sn()){let o=[],s=Ct(t,e,!1).palettes;for(let a of kt(n)){let c=a.shelf?.dir({configHome:t,home:i});for(let u of c?s.filter((l)=>r.includes(l.name)):[])for(let{file:l}of Hh(a,Ie(u))){let d=ss(c,l);if(zu(d))hm(d,{force:!0}),o.push(d)}}return o}function Gy(t,e,n,r){return{...ya(t,e,r),host:n}}function va(t,e,n,r=sn()){return kt(e.terminals).reduce((i,o)=>o.defaults?.base(Gy(t,i,n,r))??i,e)}function Bi(t,e,n,r,i=sn()){let o=new Map;for(let s of kt(e.terminals)){let a=s.defaults?.point(Gy(t,e,r,i),n);if(a)o.set(s.id,a)}return o}function Ke(t,e,n,r,i=!1,o=rn(),s=sn()){let a=i||!Ne(n)&&Ne(r)!==void 0,c=a?va(t,r,o,s):r;return ue(t,e,c,s,o),We(t,c),a||Ne(n)!==Ne(r)?Bi(t,c,a,o,s):new Map}import{performance as Uy}from"node:perf_hooks";var AT=16,mm=80,Wy="\x1B[?2026h",Ky="\x1B[?2026l";class Gi{shown=[];pointer=new Xf;cursor="";wipe="";immediate;delayed;ticker;last=Number.NEGATIVE_INFINITY;stopped=!1;write;view;beat;constructor(t){this.write=t.write,this.view=t.view,this.beat=t.beat??(()=>{})}request(){if(this.stopped||this.immediate||this.delayed)return;let t=this.last+AT-Uy.now();if(t>0)this.delayed=setTimeout(this.paint,t);else this.immediate=setImmediate(this.paint)}soon(){if(this.stopped||this.immediate)return;clearTimeout(this.delayed),this.delayed=void 0,this.immediate=setImmediate(this.paint)}now(){this.cancel(),this.paint()}reset(t=""){this.shown=[],this.cursor="",this.wipe=t}stop(){this.stopped=!0,this.cancel(),clearInterval(this.ticker),this.ticker=void 0}point(t){return this.pointer.point(t)}drop(){this.pointer.drop()}cancel(){clearImmediate(this.immediate),clearTimeout(this.delayed),this.immediate=void 0,this.delayed=void 0}paint=()=>{if(this.immediate=void 0,this.delayed=void 0,this.stopped)return;let{drawn:t,targets:e}=R$(()=>this.view());if(!t)return;this.last=Uy.now();let{lines:n,zones:r}=A$(t.lines,e);this.pointer.zones=[...t.zones??[],...r];let i=this.wipe;this.wipe="";let o=new Set,s=Math.max(n.length,this.shown.length);for(let l=0;l<s;l++){let d=n[l];if(d!==this.shown[l])i+=`\x1B[${l+1};1H\x1B[0m\x1B[2K${d??""}`,o.add(l)}this.shown=n;let a=t.after?.(o)??"",c=t.cursor??"",u=c!==""&&(i!==""||a!==""||c!==this.cursor);if(this.cursor=c,i||a||u)this.write(`${Wy}${i}${a}\x1B[0m${u?c:""}${Ky}`);this.tick(t.ticking===!0)};tick(t){if(t&&!this.ticker)this.ticker=setInterval(()=>{this.beat(),this.request()},mm);else if(!t&&this.ticker)clearInterval(this.ticker),this.ticker=void 0}}class pm{shown=[];write;cols;constructor(t,e){this.write=t,this.cols=e}draw(t){this.put(t,"")}redraw(t){let e=`${this.shown.length>1?`\x1B[${this.shown.length-1}A`:""}${this.shown.length>0?"\r\x1B[J":""}`;this.shown=[],this.put(t,e)}end(t){this.put(t,""),this.write(`
|
|
607
|
+
`),this.shown=[]}put(t,e){let n=t.map((o)=>rt(o,this.cols()-1,!1)),r=0;while(r<n.length&&r<this.shown.length&&n[r]===this.shown[r])r++;if(r===n.length&&n.length===this.shown.length)return;if(r===n.length)r=Math.max(0,n.length-1);let i="";if(this.shown.length===0)i=n.join(`
|
|
607
608
|
`);else if(r>=this.shown.length)i=`
|
|
608
609
|
${n.slice(r).join(`
|
|
609
|
-
`)}`;else{let
|
|
610
|
-
`)}`}this.shown=n,this.write(`${
|
|
610
|
+
`)}`;else{let o=this.shown.length-1-r;i=`${o>0?`\x1B[${o}A`:""}\r\x1B[J${n.slice(r).join(`
|
|
611
|
+
`)}`}this.shown=n,this.write(`${Wy}${e}${i}${Ky}`)}}var TT=300;function Ju(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function Vu(t,e){if(!e)return Ju(t);return e>=1e6?`${(t/1e6).toFixed(1)}/${(e/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(e/1000)} KB`}var cs;async function zy(t,e){cs=t;try{return await e()}finally{cs=void 0}}function In(t){if(cs)cs.say(t);else console.log(t)}function Yr(t=""){if(cs){let u=cs;return u.set(t),{set:(l)=>u.set(l),say:(l)=>u.say(l),done:()=>u.set("")}}let e=process.stdout;if(!e.isTTY||process.env.TERM==="dumb")return{set(){},say:(u)=>console.log(u),done(){}};let[n,r]=Nt()?["",""]:[C,$e],i=0,o=!1,s,a=()=>{e.write(`\r\x1B[2K${n}${rt(`${_n[i%_n.length]} ${t}`,(e.columns||80)-1,!1)}${r}`)},c=setTimeout(()=>{o=!0,a(),s=setInterval(()=>{i++,a()},mm),s.unref()},TT);return c.unref(),{set(u){if(t=u,o)a()},say(u){if(o)e.write("\r\x1B[2K");if(console.log(u),o)a()},done(){if(clearTimeout(c),clearInterval(s),o)e.write("\r\x1B[2K"),o=!1}}}import{existsSync as Sm,mkdirSync as f1,readFileSync as h1,statSync as ZT,utimesSync as QT}from"node:fs";import{homedir as XT}from"node:os";import{dirname as tH,join as l1}from"node:path";function Zu(t){if(t.length>0&&process.stderr.isTTY)process.stderr.write(`${t.join(`
|
|
611
612
|
`)}
|
|
612
|
-
`)}import{existsSync as
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
function
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
const request = $.VNGenerateForegroundInstanceMaskRequest.alloc.init
|
|
621
|
-
if (!handler.performRequestsError($([request]), error)) throw new Error('vision failed')
|
|
622
|
-
if (request.results.count === 0) throw new Error('no foreground')
|
|
623
|
-
const found = request.results.objectAtIndex(0)
|
|
624
|
-
const buffer = found.generateMaskedImageOfInstancesFromRequestHandlerCroppedToInstancesExtentError(
|
|
625
|
-
found.allInstances, handler, false, error)
|
|
626
|
-
if (!buffer) throw new Error('mask failed')
|
|
627
|
-
const written = $.CIContext.context.writePNGRepresentationOfImageToURLFormatColorSpaceOptionsError(
|
|
628
|
-
$.CIImage.imageWithCVPixelBuffer(buffer), $.NSURL.fileURLWithPath(argv[1]), $.kCIFormatRGBA8,
|
|
629
|
-
$.CGColorSpaceCreateWithName($.kCGColorSpaceSRGB), $({}), error)
|
|
630
|
-
if (!written) throw new Error('write failed')
|
|
631
|
-
}`;function Gs(){return process.platform==="darwin"}function Iu(t){return t>=HT&&t<=FT}function ea(t,e,n){return new Promise((r,i)=>{let s=AT("osascript",["-l","JavaScript","-e",CT,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(PT)])}),o="";s.stderr.on("data",(a)=>{o+=a}),s.on("error",i),s.on("close",(a)=>{if(a===0){r();return}i(Error(o.trim().split(`
|
|
632
|
-
`).at(-1)||`osascript exited ${a}`))})})}var Pk=90000;function Nu(t,e){let n=q(t),r=ce(t,e).flatMap((i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(i.key)??[];return s&&o&&Y.some((a)=>a.key===s)?[{site:s,id:Number(o),...Bf(n,i)}]:[]});return r.length>0?r:void 0}function jT(t,e){let n=new Set(kt(q(t)).palettes[e.name]?.pictures.map((r)=>r.key));return(e.pictures??[]).filter((r)=>!n.has(te(r)))}function Us(t,e){let n=new Set((e??[]).map((r)=>te(r)));return{...t,pictures:(t.pictures??[]).filter((r)=>!n.has(te(r)))}}async function _T(t,e,n,r,i,s){let o=Y.find((g)=>g.key===n.site);if(!o)throw Error(`no site called ${n.site}`);s("Fetching");let a=await us(o,n.id,i);if(!a)throw Error("the post is gone");if(o!==Qt&&a.md5)try{ec([a],await nc([a.md5],i))}catch{}let c=tc(o,a)?Xa(o,a.id,i).then((g)=>{if(g)Eo(a,g)},()=>{}):void 0;if(!Za(o,a,si(process.env.TTHEME_FIND_RATING))||Va(a,cs(process.env.TTHEME_FIND_BLOCK)).length>0)throw Error("outside your find filters — TTHEME_FIND_RATING and TTHEME_FIND_BLOCK");let u=fn(a);if(!u)throw Error("too large to use");let l=Ni(Ke(o),"orig",`${n.id}.${u.ext}`),f;if(Ah(l))f=new Uint8Array(Bs(l));else{s("Downloading");let g=oi(o,a,u);f=await rc(g.site,g.url,i,(b,y)=>s("Downloading",xu(b,y))),P(l,f)}let d=or(f,$e),h=!1;if(Tn(d)===0&&Gs()&&process.env.TTHEME_FIND_REMOVE_BG!=="off"){let g=Ni(Ke(o),"cut",`${n.id}.png`);try{if(!Ah(g))s("Cutting out"),Tk(Ak(g),{recursive:!0}),await ea(l,g,i);let b=or(new Uint8Array(Bs(g)),$e);if(Iu(Tn(b)))d=b,h=!0}catch{}}await c;let m=jf(e);s("Drawing"),fc(t,m,hn(m,e.signatureSlots),d,{site:o.key,id:n.id,ext:u.ext,bytes:f,from:`${o.name} ${n.id} ${o.pageUrl(n.id)}`,artist:a.named.artist,source:vo(a.source),cut:h},{width:0,height:0},Tr(t),nu(t));let $=ce(t,e.name).find((g)=>g.key===te(n));if($)Ao(q(t),$,n,r,LT())}function GT(t,e){let n=Y.find((s)=>s.key===t.site),r=`${n?.name??t.site} ${t.id}`;if(!n||!e)return r;return`${Lt()?uo:`\x1B[${30+n.ansi}m${uo}\x1B[39m`} ${Ua(r,n.pageUrl(t.id))}`}async function Dn(t,e,n){let r=e.flatMap((c)=>jT(t,c).map((u)=>({entry:c,shared:u})));if(r.length===0)return;let i=xi(n),s=process.stdout.isTTY&&a$(process.env),o=new Set,a=jr();for(let[c,{entry:u,shared:l}]of r.entries()){let f=`${u.name} · ${GT(l,s)}`,d=r.length>1?` · ${c+1}/${r.length}`:"",h=(m,$)=>a.set(`${m} ${f}${$?` · ${$}`:""}${d}`);try{await _T(t,u,l,i,AbortSignal.timeout(Pk),h),a.say(` ▣ ${f}`),o.add(u)}catch(m){a.say(` ▢ ${f} — ${m instanceof Error?m.message:String(m)}`)}}a.done();for(let c of o){let u=(c.pictures??[]).find((l)=>ce(t,c.name).some((f)=>f.key===te(l)));if(u)bs(t,c.name,te(u))}if(o.size>0)Re(t)}function Hk(t,e,n){if(e.width!==t.width||e.height!==t.height)return!1;for(let r=0;r<t.width*t.height;r++)t.data[r*4+3]=e.data[r*4+n]??0;return!0}async function BT(t,e){let[,n,r]=/^(.+)_(\d+)$/.exec(t)??[],i=Ni(hr(),n??"local","cut",`${r??t}.png`);if(!Ah(i)){if(!Gs())return;Tk(Ak(i),{recursive:!0}),await ea(e,i,AbortSignal.timeout(Pk))}return or(new Uint8Array(Bs(i)),$e)}function UT(t,e){try{return Tn(Ht(new Uint8Array(Bs(Ni(t,`${e.stem}.png`)))))>0}catch{return!1}}function Ru(t,e){return()=>or(new Uint8Array(Bs(Ni(t,e.original))),$e)}function Fk(t,e){let n=Ru(t,e);return()=>{let r=n(),i=Ht(new Uint8Array(Bs(Ni(t,e.cut))));return Hk(r,i,0)?r:null}}async function Tu(t,e,n,r,i,s,o,a){let c=q(t),u=kt(c).palettes[e]?.pictures.find((l)=>l.key===n);if(!u?.original)return null;if(u.cut)return Po(t,e,u,Fk(c,u),r,i,s,o,!1,a);if(gs(u)){let l=Ru(c,u)();if(Tn(l)===0&&UT(c,u)){let f=await BT(n,Ni(c,u.original));if(!f||!Hk(l,f,3))return null;return Po(t,e,u,()=>l,r,i,s,o,!0,a)}return Po(t,e,u,()=>l,r,i,s,o,!1,a)}return Po(t,e,u,Ru(c,u),r,i,s,o,!1,a)}function Ck(t,e,n,r,i,s){let o=q(t),a=kt(o).palettes[e]?.pictures.find((u)=>u.key===n);if(!a?.original||gs(a))return!1;let c=a.cut?Fk(o,a):Ru(o,a);return Tw(t,e,a,c,r,i,s)}import{existsSync as WT,readFileSync as KT}from"node:fs";import{join as zT}from"node:path";function DT(t){return zT(t,"ttheme","pins")}function Lk(t,e,n){let r=DT(t);if(!WT(r))return;let i=KT(r,"utf8"),o=i.split(`
|
|
633
|
-
`).flatMap((a)=>{let c=/^((?:[~/]|ssh:).*\s)(\S+)(\s*)$/.exec(a);if(!c)return[a];let[,u,l,f]=c;if(n.includes(l))return[];let d=e.get(l);return[d?`${u}${d}${f}`:a]}).join(`
|
|
634
|
-
`);if(o!==i)P(r,o)}function jk(t,e){let n=e,r=new Set;while(Object.hasOwn(t,n)&&!r.has(n)){r.add(n);let i=t[n];if(i===!1)return!1;n=i}return r.has(n)||n===e?void 0:n}function _k(t,e,n,r,i){let s=`${t}/`;for(let o of r){let a=o.startsWith(s)?o.slice(s.length):void 0;if(a===void 0||n.has(a))continue;let c=jk(e.renames,a);if(c===!1)i.removed.push(o);else if(c!==void 0&&n.has(c))i.renamed.set(o,`${s}${c}`);else if(e.forceRemove)i.removed.push(o)}}function Gk(t,e){let n=[],r=[];for(let i of Object.keys(t)){if(e.has(i)){r.push(`renames.${i}: ${i} is still a palette here, so the rename never applies`);continue}let s=jk(t,i);if(s===void 0)n.push(`renames.${i}: the chain comes back to a name it already passed`);else if(s!==!1&&!e.has(s))n.push(`renames.${i}: the chain ends at ${s}, which is not a palette here — end it at one, or at false`)}return{errors:n,warnings:r}}import{gunzipSync as qT}from"node:zlib";var Ti=512,Bk=67108864,Ph=new TextDecoder;function Ws(t,e,n){let r=t.subarray(e,e+n),i=r.indexOf(0);return Ph.decode(i<0?r:r.subarray(0,i))}function YT(t){if((t[124]??0)&128)throw Error("the archive holds a file too large to be a palette");let e=Number.parseInt(Ws(t,124,12).trim()||"0",8);if(!Number.isFinite(e)||e<0)throw Error("the archive has a header that does not read");return e}function JT(t){let e=0,n;while(e<t.length){let r=t.indexOf(32,e),i=r<0?Number.NaN:Number.parseInt(Ph.decode(t.subarray(e,r)),10);if(!Number.isFinite(i)||i<=0)break;let s=Ph.decode(t.subarray(r+1,e+i-1)),o=s.indexOf("=");if(s.slice(0,o)==="path")n=s.slice(o+1);e+=i}return n}function VT(t){if(t[0]!==31||t[1]!==139)return t;try{return qT(t,{maxOutputLength:Bk})}catch(e){throw Error(e instanceof RangeError?`the archive unpacks to more than ${Bk/1024/1024} MB`:"the archive is not a gzip file that reads")}}function Uk(t){let e=VT(t),n=new Map,r,i=0;while(i+Ti<=e.length){let s=e.subarray(i,i+Ti);if(s.every((f)=>f===0))break;let o=YT(s),a=e.subarray(i+Ti,i+Ti+o);i+=Ti+Math.ceil(o/Ti)*Ti;let c=String.fromCharCode(s[156]??0);if(c==="x"){r=JT(a)??r;continue}if(c==="L"){r=Ws(a,0,a.length);continue}let u=Ws(s,257,5)==="ustar"?Ws(s,345,155):"",l=r??(u?`${u}/${Ws(s,0,100)}`:Ws(s,0,100));if(r=void 0,c==="0"||c==="\x00")n.set(l.split("/").slice(1).join("/"),a)}return n}var eA=86400000,nA=3600000,Fh=5000;function Hh(){return Wk(process.env.XDG_STATE_HOME??Wk(XT(),".local","state"),"ttheme","markets.json")}function qn(){try{let t=JSON.parse(Yk(Hh(),"utf8"));return Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]?.at==="number"&&typeof e[1].error==="string"))}catch{return{}}}function Kk(t,e){let n=qn();if(e===void 0){if(!(t in n))return;delete n[t]}else n[t]={at:Date.now(),error:e};qk(tA(Hh()),{recursive:!0}),P(Hh(),`${JSON.stringify(n,null,2)}
|
|
635
|
-
`)}function na(t,e){let n=e===z?Me(t):ee(e)?He(t,e):void 0;try{return n?ZT(n).mtimeMs:void 0}catch{return}}function rA(t,e,n,r){return t&&(e===void 0||r-e>=eA)&&(n===void 0||r-n>=nA)}function Ch(t,e,n=Date.now()){let r=qn();return Ct(e.markets).filter((i)=>rA(kr(i,e.updates),na(t,i),r[i]?.at,n))}function iA(t,e){let n={},r=new TextDecoder;for(let[i,s]of Uk(t))if(i===Ft||i.startsWith("palettes/")&&i.endsWith(".toml"))n[i]=r.decode(s);return{...e?{etag:e}:{},files:n}}async function Jk(t,e,n,r){let i;try{i=await hd(Xw(t),e,n,r?{"if-none-match":r}:{})}catch(s){if(s instanceof Rc){let o=Fo(t);throw Error(`${Z(t)}${o?` has no ${o}`:" is not there"} — is the repository public?`)}throw s}if(i.status===304)return;return iA(new Uint8Array(await i.arrayBuffer()),i.headers.get("etag"))}function Vk(t,e,n){let{id:r,info:i,entries:s}=Ln(t,e,n,re(!1));return{source:t,id:r,entries:s,archive:e,info:i}}function ra(t){return Ai(t,z)}async function ia(t,e,n,r){if(e===z){let s=await Tc(w0,Je,n,r);return{source:e,id:z,manifest:s,entries:s.palettes}}let i=await Jk(e,n,r);if(!i)throw Error(`${Z(e)} answered as if nothing had changed`);return Vk(e,i,ra(t))}function Ks(t,e){if("manifest"in e){Oc(t,e.manifest);return}qk(Xf(t),{recursive:!0}),P(He(t,e.source),`${JSON.stringify(e.archive)}
|
|
636
|
-
`)}function sA(t,e){try{return Ye(t,e)}catch{return}}function Ai(t,e){try{if(e===z)return Je(Yk(Me(t),"utf8")).palettes;return Ln(e,Ye(t,e),ra(t),re(!1)).entries}catch{return[]}}function oA(t,e){let n=new Map(t.map((i)=>[i.name,JSON.stringify(i)])),r=new Map(e.map((i)=>[i.name,JSON.stringify(i)]));return{added:[...r.keys()].filter((i)=>!n.has(i)),changed:[...r].filter(([i,s])=>n.has(i)&&n.get(i)!==s).map(([i])=>i),gone:[...n.keys()].filter((i)=>!r.has(i))}}async function aA(t,e,n){if(!ee(e))return ia(t,e,n);let r=sA(t,e),i=await Jk(e,n,void 0,r?.etag);return i&&Vk(e,i,ra(t))}async function Lh(t,e,n){let r=Ai(t,e),i;try{i=await aA(t,e,n)}catch(o){throw Kk(e,o.message),o}if(i)Ks(t,i);else{let o=new Date;QT(He(t,e),o,o)}Kk(e,void 0);let s=i?.entries??r;return{source:e,id:i?.id??xc(e,Ye(t,e)),...i&&"manifest"in i?{version:i.manifest.version}:{},count:Mt(s).length,change:oA(r,s)}}async function jh(t,e,n){try{return{source:e,refreshed:await Lh(t,e,n)}}catch(r){return{source:e,failure:r instanceof Error?r:Error(String(r))}}}function _h(t,e){return`${Z(t)}: ${e.message}`}function cA(t){return"failure"in t&&t.failure instanceof dc?_h(t.source,t.failure):void 0}function Rt(t){return`${t} palette${t===1?"":"s"}`}function sa(t,e=Date.now()){let n=Math.floor(Math.max(0,e-t)/60000);if(n<1)return"just now";if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<48?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Zk({added:t,changed:e,gone:n}){return[t.length>0?`${t.length} new`:"",e.length>0?`${e.length} changed`:"",n.length>0?`${n.length} gone`:""].filter(Boolean).join(", ")}function Gh(t){let e=Zk(t.change);return`${t.version?`${t.id} ${t.version}`:t.id} — ${Rt(t.count)}${e?` (${e})`:""}`}function Bh(t){return Zk(t.change)?`Updated ${Gh(t)}`:void 0}var zk=/^(\d+)\.(\d+)\.(\d+)$/;function uA(t,e){let n=zk.exec(t),r=zk.exec(e);if(!n||!r)return!1;for(let i of[1,2,3]){let s=Number(n[i])-Number(r[i]);if(s!==0)return s>0}return!1}function Uh(t,e=It.version){return t.version&&uA(t.version,e)?`ttheme ${t.version} is out, you have ${e} — \`${Kf}\` updates it`:void 0}function oa(t,e,n=ra(t)){try{if(ct(e)){let r=Fe(e),i=ne(r);return{id:i,info:r,entries:qe(e,i,n,re(!1))}}return ee(e)?Ln(e,Ye(t,e),n,re(!1)):void 0}catch{return}}function Wh(t){if(!Dk(Hn(t)))return[];let e=L(t),n=ra(t),r={renamed:new Map,removed:[]};for(let u of Ct(e.markets)){let l=oa(t,u,n);if(l)_k(l.id,l.info,new Set(l.entries.map((f)=>ae(f.name))),e.palettes,r)}if(r.renamed.size===0&&r.removed.length===0)return[];let i=ut(t,!1);js(t,i,e.terminals,[...r.renamed.keys(),...r.removed]),p0(t,r.renamed,r.removed),vw(t,r.renamed),Lk(t,r.renamed,r.removed);let s=[...new Set(e.palettes.filter((u)=>!r.removed.includes(u)).map((u)=>r.renamed.get(u)??u))],{startup:o,...a}=e,c=o&&!r.removed.includes(o)?r.renamed.get(o)??o:void 0;return je(t,i,e,{...a,palettes:s,...c?{startup:c}:{}}),[...[...r.renamed].map(([u,l])=>`${u} is ${l} now — its market renamed it`),...r.removed.map((u)=>`${u} was removed from its market`)]}async function Kh(t,e,n,r){let i=Wh(t),s=i.length>0?L(t):e,o=new Set(r.flatMap((d)=>[...d.change.changed,...d.change.gone])),a=s.palettes.filter((d)=>o.has(d));if(a.length===0)return i;let c=ut(t,!1);jt(t,c,s);let u=new Set(r.flatMap((d)=>d.change.gone)),l=a.filter((d)=>u.has(d)).map((d)=>`${d} left its market — ttheme keeps the copy you have`),f=new Map(n.map((d)=>[d.name,d.pictures]));return await Dn(t,Ot(t,c,!1).palettes.filter((d)=>a.includes(d.name)&&f.has(d.name)).map((d)=>Us(d,f.get(d.name))),s.terminals),[...i,...l]}async function Qk(t=J()){try{if(!Dk(Hn(t)))return;let e=L(t),n=Ch(t,e);if(n.length===0)return;let r=jn(t),i=jr(`Checking ${n.map(Z).join(", ")} for updates`),s=await Promise.all(n.map((u)=>jh(t,u,Fh)));i.done();let o=s.flatMap((u)=>("refreshed"in u)?[u.refreshed]:[]),a=o.flatMap((u)=>Bh(u)??[]);Th(a);let c=a.length>0?await Kh(t,e,r,o):[];Th([...c,...s.flatMap((u)=>cA(u)??[]),...o.flatMap((u)=>Uh(u)??[])])}catch{return}}var iy=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,hA=["add","remove","search","init","check"];function Dh(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function mA(){try{let t=lA("gh",["api","user","--jq",".login"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim().toLowerCase();return iy.test(t)?t:void 0}catch{return}}async function pA(t,e){if(e.author)return e.author;let n=mA();if(!n){if(!Dh())throw Error("your palettes are named after your GitHub handle — log in with `gh auth login`, or run this in a terminal");let r=await Ad({message:"Your GitHub handle — your palettes are named <handle>@<market>/<palette>",validate:(i)=>iy.test((i??"").toLowerCase())&&(i??"").length<=39?void 0:"that is not a GitHub handle"});if(fe(r))throw Error("no handle given");n=r.toLowerCase()}return Le(t,{...e,author:n}),console.log(`Your palettes are named ${n}@<market>/<palette>`),n}function zs(t,e){if(e===z)return z;return ct(e)?ne(Fe(e)):xc(e,Ye(t,e))}function Hu(t,e){try{return zs(t,e)}catch{return}}function sy(t){return lt(t)??z}function ca(t){return ut(t).palettes.filter((e)=>lt(e.name)===void 0)}function gA(t){let e=aa(import.meta.dirname,"..","dist","manifest.json");return Au(e)?Je(Pu(e,"utf8")).palettes:ca(t)}function ua(t,e,n){let{updates:r,...i}=t,s=Object.entries(n).filter(([o,a])=>e.includes(o)&&a!==kr(o,{}));return{...i,markets:e,...s.length>0?{updates:Object.fromEntries(s)}:{}}}function oy(t,e,n,r){return e.find((i)=>i!==n&&!Ms(i,n)&&Hu(t,i)===r)}function zh(t,e,n,r){let i=L(t),s=Ct(i.markets),o=oy(t,s,e,n);if(o)throw Error(`${n} already names the market at ${Z(o)} — \`ttheme market remove ${n}\` first`);let a=r===void 0?{...i.updates}:{...i.updates,[e]:r};Le(t,ua(i,s.includes(e)?s:[...s,e],a))}async function bA(t){if(!Dh())return!1;let e=await Ve({message:`Update ${t} on its own when its author changes it? ttheme checks once a day, when you run it`,initialValue:!1});if(fe(e))throw Error("no answer given — nothing was added");return e}async function ay(t,e){let n=jr(`Fetching ${Z(e)}`);try{return await ia(t,e)}finally{n.done()}}async function wA(t,e,n){let r=await ay(t,n),i=L(t),s=Ct(i.markets),o=oy(t,s,n,r.id);if(o)throw Error(`${r.id} already names the market at ${Z(o)} — \`ttheme market remove ${r.id}\` first`);let{[e]:a,...c}=i.updates??{},u=a===void 0?c:{...c,[n]:a};return Le(t,ua(i,s.map((l)=>l===e?n:l),u)),Ks(t,r),r}async function qh(t,e){let n=yr(e),r=Ct(L(t).markets);if(r.includes(n))return console.log(`${Z(n)} is already added`),{source:n,id:zs(t,n),fresh:!1};let i=ee(n)?r.find((c)=>ee(c)&&Ms(c,n)):void 0;if(i){let c=await wA(t,i,n);return console.log(`Moved ${c.id} to ${Fo(n)??"its default branch"} · ${Z(n)} — ${Rt(Mt(c.entries).length)}`),{source:n,id:c.id,fresh:!1}}if(ct(n)){let c=ne(Fe(n));zh(t,n,c);let u=qe(n,c,ca(t)).length;return console.log(`Added ${c} · ${Z(n)} — ${Rt(u)}, read in place`),{source:n,id:c,fresh:!0}}let s=await ay(t,n),o=n===z?void 0:await bA(s.id);zh(t,n,s.id,o),Ks(t,s);let a=Rt(Mt(s.entries).length);return console.log(n===z?`Added the ttheme catalog — ${a}`:`Added ${s.id} · ${Z(n)} — ${a}${o?", updating on its own":""}`),{source:n,id:s.id,fresh:!0}}async function $A(t){let e=J(),{source:n,id:r,fresh:i}=await qh(e,t);if(!i)return;if(ct(n))console.log("\n`ttheme browse` picks them · once the folder is on GitHub, `ttheme market add <owner>/<repo>` adds it anywhere");else if(n===z)console.log("\n`ttheme browse` picks them");else console.log(`
|
|
637
|
-
\`ttheme browse\` picks them, or \`ttheme add ${r}/<palette>\``)}function Yh(t,e){if(e===z)Xk(Me(t),{force:!0});else if(ee(e))Xk(He(t,e),{force:!0})}function Jh(t){return`${Rt(t.length)} installed from it keep${t.length===1?"s":""} working: ${t.join(", ")} — \`ttheme remove\` drops ${t.length===1?"it":"them"}`}function kA(t){let e=J(),n=L(e),r=Ct(n.markets),i=r.find((u)=>Hu(e,u)===t)??r.find((u)=>u===cy(t));if(!i)throw Error(`no market named ${t} — \`ttheme market\` lists them`);let s=Hu(e,i),o=n.palettes.filter((u)=>sy(u)===s),a=r.filter((u)=>u!==i),c=ua(n,a,n.updates??{});if(Le(e,c),Yh(e,i),jt(e,ut(e),c),console.log(`Removed ${s??t} · ${Z(i)}`),o.length>0)console.log(Jh(o))}function cy(t){try{return yr(t)}catch{return}}function yA(t,e){try{if(e===z)return Mt(Je(Pu(Me(t),"utf8")).palettes).length;if(ct(e))return qe(e,zs(t,e),ca(t),re(!1)).length;return Ln(e,Ye(t,e),ca(t),re(!1)).entries.length}catch{return}}function Vh(t,e,n=qn(),r=Date.now()){if(ct(e))return"read in place";let i=n[e],s=na(t,e);if(i&&(s===void 0||i.at>s))return`update failed ${sa(i.at,r)}`;return s===void 0?"never updated":`updated ${sa(s,r)}`}function vA(){let t=J(),e=L(t),n=Ct(e.markets);if(n.length===0){console.log("No markets — `ttheme market add official` brings the ttheme catalog back");return}let r=qn(),i=n.map((a)=>{let c=Hu(t,a)??"?",u=yA(t,a),l=e.palettes.filter((h)=>sy(h)===c).length,f=ct(a)?[]:[`auto-update ${kr(a,e.updates)?"on":"off"}`],d=a===z?void 0:oa(t,a)?.info.description;return{name:c,where:Z(a),about:d,note:[u===void 0?"Unreadable":Rt(u),...l>0?[`${l} installed`]:[],...f,Vh(t,a,r)].join(" · ")}}),s=Math.max(...i.map((a)=>a.name.length)),o=Math.max(...i.map((a)=>a.where.length));for(let a of i)if(console.log(` ${a.name.padEnd(s)} ${a.where.padEnd(o)} ${a.note}`),a.about)console.log(` ${" ".repeat(s)} ${a.about}`)}function Zh(t){return`${t.owner.login.toLowerCase()}/${t.name}`}async function Qh(t,e){let n=encodeURIComponent(`topic:${Es}${t?` ${t}`:""}`);try{let{items:r}=await Tc(`https://api.github.com/search/repositories?q=${n}&sort=stars&per_page=50`,(i)=>JSON.parse(i),void 0,e);return r}catch(r){if(r instanceof Nc)throw Error("GitHub lets a search through about ten times a minute without signing in — try again in a minute");throw r}}async function EA(t){let e=J(),n=await Qh(t);if(n.length===0){console.log(`No repository carries the ${Es} topic${t?` and matches ${t}`:""} yet`);return}let r=new Set(Ct(L(e).markets).map($r)),i=n.map((o)=>{let a=Zh(o);return{arg:a,added:r.has(a),stars:`★${o.stargazers_count}`,about:o.description??""}}),s=Math.max(...i.map((o)=>o.arg.length));for(let o of i)console.log(` ${o.added?"●":"○"} ${o.arg.padEnd(s)} ${o.stars.padStart(5)} ${o.about}`);console.log("\n`ttheme market add <name>` adds one")}function uy({name:t}){return`ttheme-${t}`}function SA(t,e){fA(yc(t),{recursive:!0}),P(aa(t,Ft),e0(e)),P(aa(t,"README.md"),`# ${ne(e)}
|
|
613
|
+
`)}import{existsSync as HT,readFileSync as CT}from"node:fs";import{join as LT}from"node:path";function FT(t){return LT(t,"ttheme","pins")}function Dy(t,e,n){let r=FT(t);if(!HT(r))return;let i=CT(r,"utf8"),s=i.split(`
|
|
614
|
+
`).flatMap((a)=>{let c=/^((?:[~/]|ssh:).*\s)(\S+)(\s*)$/.exec(a);if(!c)return[a];let[,u,l,d]=c;if(n.includes(l))return[];let f=e.get(l);return[f?`${u}${f}${d}`:a]}).join(`
|
|
615
|
+
`);if(s!==i)L(r,s)}import{execFile as jT,spawn as _T,spawnSync as gm}from"node:child_process";import{mkdirSync as BT,readFileSync as GT,realpathSync as qy}from"node:fs";import{homedir as UT,tmpdir as Yy}from"node:os";import{dirname as WT,join as bm}from"node:path";var Sa=`npx ${lt.name}@latest init`,km=86400000,KT=3600000,zT=1e4,wm=/^(\d+)\.(\d+)\.(\d+)$/;function Jy(t,e){let n=wm.exec(t),r=wm.exec(e);if(!n||!r)return!1;for(let i of[1,2,3]){let o=Number(n[i])-Number(r[i]);if(o!==0)return o>0}return!1}function ls(t=process.env){return t.TTHEME_AUTO_UPDATE!=="off"&&(t.CI===void 0||t.CI===""||t.CI==="false")}function $m(){return bm(process.env.XDG_STATE_HOME??bm(UT(),".local","state"),"ttheme","release.json")}function Ea(){try{let t=JSON.parse(GT($m(),"utf8"));return{checked:typeof t.checked==="number"?t.checked:0,...typeof t.latest==="string"?{latest:t.latest}:{},...typeof t.told==="number"?{told:t.told}:{}}}catch{return{checked:0}}}function us(t){BT(WT($m()),{recursive:!0}),L($m(),`${JSON.stringify(t)}
|
|
616
|
+
`)}function Vy(t=zT){return new Promise((e,n)=>{jT("npm",["view",`${lt.name}@latest`,"version","--prefer-online"],{cwd:Yy(),encoding:"utf8",timeout:t,env:{...process.env,npm_config_update_notifier:"false"}},(r,i,o)=>{if(r){let a=o.split(`
|
|
617
|
+
`).find((l)=>/\S/.test(l))?.replace(/^npm (error|ERR!) /,""),{code:c,killed:u}=r;n(Error(c==="ENOENT"?"cannot run npm":u?`npm did not answer within ${t/1000} s`:`npm could not ask its registry — ${a??"it gave no reason"}`));return}let s=i.trim();if(!wm.test(s)){n(Error("the npm registry named no version"));return}e(s)})})}function Zy(t=Date.now()){let e=Ea();if(!ls()||t-e.checked<km)return;try{us({...e,checked:t}),_T(process.execPath,[process.argv[1],"latest"],{detached:!0,stdio:"ignore",env:process.env}).unref()}catch{}}async function Qy(){let t=Ea();try{return us({...t,checked:Date.now(),latest:await Vy()}),0}catch{return us({...t,checked:Date.now()-km+KT}),1}}function Xy(t=J()){return bm(t,"ttheme","ttheme.js")}function t1(){try{return qy(process.argv[1])===qy(Xy())}catch{return!1}}function DT(){return t1()?"`ttheme update` updates it":`\`${Sa}\` updates it`}function e1(t,e=lt.version){return`ttheme ${t} is out, you have ${e} — ${DT()}`}function n1(t=Date.now()){let e=Ea();if(!ls()||!e.latest||!Jy(e.latest,lt.version)||t-(e.told??0)<km)return;if(process.stderr.isTTY)us({...e,told:t});Zu([e1(e.latest)])}function r1(t,e){console.log(`Updating ttheme ${lt.version} → ${t}`);let n=gm("npx",["--yes",`${lt.name}@${t}`,"init","--yes"],{cwd:Yy(),stdio:"inherit",env:{...process.env,npm_config_prefer_online:"true"}});if(n.error)throw Error(`cannot run npx — ${n.error.message}; \`${Sa}\` updates ttheme once npm is there`);if(n.status!==0)throw Error(`npx stopped with status ${n.status} — ttheme ${lt.version} is still installed`);let r=Xy(),i=gm(process.execPath,[r,"--version"],{encoding:"utf8"}).stdout?.trim();if(i!==t)throw Error(`${r} is ${i||"unreadable"} after the update, not ${t} — \`${Sa}\` tries again`);let o=Ea();return us({...o,latest:t}),gm(process.execPath,[r,"update",...e],{stdio:"inherit",env:{...process.env,TTHEME_UPDATED:t}}).status??1}async function i1(){if(process.env.TTHEME_UPDATED)return{note:` ttheme ${lt.version} — updated`};let t;try{t=await Vy()}catch(e){return{note:` ttheme ${lt.version} — could not check for a newer one: ${e.message}`}}if(us({...Ea(),checked:Date.now(),latest:t}),!Jy(t,lt.version))return{note:` ttheme ${lt.version} — up to date`};return t1()?{latest:t,note:""}:{note:` ${e1(t)}`}}function o1(t,e){let n=e,r=new Set;while(Object.hasOwn(t,n)&&!r.has(n)){r.add(n);let i=t[n];if(i===!1)return!1;n=i}return r.has(n)||n===e?void 0:n}function s1(t,e,n,r,i){let o=`${t}/`;for(let s of r){let a=s.startsWith(o)?s.slice(o.length):void 0;if(a===void 0||n.has(a))continue;let c=o1(e.renames,a);if(c===!1)i.removed.push(s);else if(c!==void 0&&n.has(c))i.renamed.set(s,`${o}${c}`);else if(e.forceRemove)i.removed.push(s)}}function a1(t,e){let n=[],r=[];for(let i of Object.keys(t)){if(e.has(i)){r.push(`renames.${i}: ${i} is still a palette here, so the rename never applies`);continue}let o=o1(t,i);if(o===void 0)n.push(`renames.${i}: the chain comes back to a name it already passed`);else if(o!==!1&&!e.has(o))n.push(`renames.${i}: the chain ends at ${o}, which is not a palette here — end it at one, or at false`)}return{errors:n,warnings:r}}import{gunzipSync as qT}from"node:zlib";var Ui=512,c1=67108864,ym=new TextDecoder;function ds(t,e,n){let r=t.subarray(e,e+n),i=r.indexOf(0);return ym.decode(i<0?r:r.subarray(0,i))}function YT(t){if((t[124]??0)&128)throw Error("the archive holds a file too large to be a palette");let e=Number.parseInt(ds(t,124,12).trim()||"0",8);if(!Number.isFinite(e)||e<0)throw Error("the archive has a header that does not read");return e}function JT(t){let e=0,n;while(e<t.length){let r=t.indexOf(32,e),i=r<0?Number.NaN:Number.parseInt(ym.decode(t.subarray(e,r)),10);if(!Number.isFinite(i)||i<=0)break;let o=ym.decode(t.subarray(r+1,e+i-1)),s=o.indexOf("=");if(o.slice(0,s)==="path")n=o.slice(s+1);e+=i}return n}function VT(t){if(t[0]!==31||t[1]!==139)return t;try{return qT(t,{maxOutputLength:c1})}catch(e){throw Error(e instanceof RangeError?`the archive unpacks to more than ${c1/1024/1024} MB`:"the archive is not a gzip file that reads")}}function u1(t){let e=VT(t),n=new Map,r,i=0;while(i+Ui<=e.length){let o=e.subarray(i,i+Ui);if(o.every((d)=>d===0))break;let s=YT(o),a=e.subarray(i+Ui,i+Ui+s);i+=Ui+Math.ceil(s/Ui)*Ui;let c=String.fromCharCode(o[156]??0);if(c==="x"){r=JT(a)??r;continue}if(c==="L"){r=ds(a,0,a.length);continue}let u=ds(o,257,5)==="ustar"?ds(o,345,155):"",l=r??(u?`${u}/${ds(o,0,100)}`:ds(o,0,100));if(r=void 0,c==="0"||c==="\x00")n.set(l.split("/").slice(1).join("/"),a)}return n}var eH=86400000,nH=3600000,Em=5000;function vm(){return l1(process.env.XDG_STATE_HOME??l1(XT(),".local","state"),"ttheme","markets.json")}function nr(){try{let t=JSON.parse(h1(vm(),"utf8"));return Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]?.at==="number"&&typeof e[1].error==="string"))}catch{return{}}}function d1(t,e){let n=nr();if(e===void 0){if(!(t in n))return;delete n[t]}else n[t]={at:Date.now(),error:e};f1(tH(vm()),{recursive:!0}),L(vm(),`${JSON.stringify(n,null,2)}
|
|
618
|
+
`)}function Ma(t,e){let n=gt(e)?_e(t,e):void 0;try{return n?ZT(n).mtimeMs:void 0}catch{return}}function rH(t,e,n,r){return t&&(e===void 0||r-e>=eH)&&(n===void 0||r-n>=nH)}function Mm(t,e,n=Date.now()){let r=nr();return Gt(e.markets).filter((i)=>rH(Pr(i,e.updates),Ma(t,i),r[i]?.at,n))}function iH(t,e){let n={},r=new TextDecoder;for(let[i,o]of u1(t))if(i===Bt||i.startsWith("palettes/")&&i.endsWith(".toml"))n[i]=r.decode(o);return{...e?{etag:e}:{},files:n}}async function m1(t,e,n,r){let i;try{i=await Vf(Q0(t),e,n,r?{"if-none-match":r}:{})}catch(o){if(o instanceof iu){let s=ia(t);throw Error(`${tt(t)}${s?` has no ${s}`:" is not there"} — is the repository public?`)}throw o}if(i.status===304)return;return iH(new Uint8Array(await i.arrayBuffer()),i.headers.get("etag"))}function p1(t,e,n){let{id:r,info:i,entries:o}=Jn(t,e,n,ce(!1));return{source:t,id:r,entries:o,archive:e,info:i}}function xa(t){return Jr(t,q)}async function Oa(t,e,n,r){if(e===q){if(!Sm(Ge(t)))throw Error(`the ttheme catalog is not on this machine — \`${Sa}\` puts it back`);return{source:e,id:q,entries:Jr(t,q)}}let i=await m1(e,n,r);if(!i)throw Error(`${tt(e)} answered as if nothing had changed`);return p1(e,i,xa(t))}function fs(t,e){if(!("archive"in e))return;f1(Lf(t),{recursive:!0}),L(_e(t,e.source),`${JSON.stringify(e.archive)}
|
|
619
|
+
`)}function oH(t,e){try{return tn(t,e)}catch{return}}function Jr(t,e){try{if(e===q)return En(h1(Ge(t),"utf8")).palettes;return Jn(e,tn(t,e),xa(t),ce(!1)).entries}catch{return[]}}function sH(t,e){let n=new Map(t.map((i)=>[i.name,JSON.stringify(i)])),r=new Map(e.map((i)=>[i.name,JSON.stringify(i)]));return{added:[...r.keys()].filter((i)=>!n.has(i)),changed:[...r].filter(([i,o])=>n.has(i)&&n.get(i)!==o).map(([i])=>i),gone:[...n.keys()].filter((i)=>!r.has(i))}}async function aH(t,e,n){if(!gt(e))return Oa(t,e,n);let r=oH(t,e),i=await m1(e,n,void 0,r?.etag);return i&&p1(e,i,xa(t))}async function xm(t,e,n){let r=Jr(t,e),i;try{i=await aH(t,e,n)}catch(s){throw d1(e,s.message),s}if(i)fs(t,i);else{let s=new Date;QT(_e(t,e),s,s)}d1(e,void 0);let o=i?.entries??r;return{source:e,id:i?.id??ru(e,tn(t,e)),count:Pt(o).length,change:sH(r,o)}}async function Om(t,e,n){try{return{source:e,refreshed:await xm(t,e,n)}}catch(r){return{source:e,failure:r instanceof Error?r:Error(String(r))}}}function g1(t,e){return`${tt(t)}: ${e.message}`}function Tt(t){return`${t} palette${t===1?"":"s"}`}function Ia(t,e=Date.now()){let n=Math.floor(Math.max(0,e-t)/60000);if(n<1)return"just now";if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<48?`${r}h ago`:`${Math.floor(r/24)}d ago`}function b1({added:t,changed:e,gone:n}){return[t.length>0?`${t.length} new`:"",e.length>0?`${e.length} changed`:"",n.length>0?`${n.length} gone`:""].filter(Boolean).join(", ")}function Im(t){let e=b1(t.change);return`${t.id} — ${Tt(t.count)}${e?` (${e})`:""}`}function Rm(t){return b1(t.change)?`Updated ${Im(t)}`:void 0}function Ra(t,e,n=xa(t)){try{if(Ot(e)){let r=Be(e),i=ae(r);return{id:i,info:r,entries:Xe(e,i,n,ce(!1))}}return gt(e)?Jn(e,tn(t,e),n,ce(!1)):void 0}catch{return}}function cH(t){if(!Sm(qn(t)))return[];let e=K(t),n=xa(t),r={renamed:new Map,removed:[]};for(let u of Gt(e.markets)){let l=Ra(t,u,n);if(l)s1(l.id,l.info,new Set(l.entries.map((d)=>de(d.name))),e.palettes,r)}if(r.renamed.size===0&&r.removed.length===0)return[];let i=dt(t,!1);as(t,i,e.terminals,[...r.renamed.keys(),...r.removed]),m$(t,r.renamed,r.removed),E0(t,r.renamed),Dy(t,r.renamed,r.removed);let o=[...new Set(e.palettes.filter((u)=>!r.removed.includes(u)).map((u)=>r.renamed.get(u)??u))],{startup:s,...a}=e,c=s&&!r.removed.includes(s)?r.renamed.get(s)??s:void 0;return Ke(t,i,e,{...a,palettes:o,...c?{startup:c}:{}}),[...[...r.renamed].map(([u,l])=>`${u} is ${l} now — its market renamed it`),...r.removed.map((u)=>`${u} was removed from its market`)]}function Pm(t){let e=Ko(t,dt(t,!1)).map((n)=>n.name);if(e.length===0)return;return`${e.join(", ")} ${e.length===1?"has":"have"} an update from ${e.length===1?"its market":"their markets"} — ctrl+r in \`ttheme browse\`'s Installed tab takes it`}function Wi(t,e){let n=cH(t),r=K(t),i=new Set(e.flatMap((s)=>s.change.gone)),o=r.palettes.filter((s)=>i.has(s)).map((s)=>`${s} left its market — ttheme keeps the copy you have`);return[...n,...o]}async function w1(t=J()){try{if(!ls()||!Sm(qn(t)))return;let e=Mm(t,K(t));if(e.length===0)return;let n=Yr(`Checking ${e.map(tt).join(", ")} for updates`),r=await Promise.all(e.map((s)=>Om(t,s,Em)));n.done();let i=r.flatMap((s)=>("refreshed"in s)?[s.refreshed]:[]),o=i.flatMap((s)=>Rm(s)??[]);if(o.length===0)return;Zu([...o,...Wi(t,i),...[Pm(t)??[]].flat()])}catch{return}}var S1=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,hH=["add","remove","search","init","check"];function Am(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function mH(){try{let t=uH("gh",["api","user","--jq",".login"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim().toLowerCase();return S1.test(t)?t:void 0}catch{return}}async function pH(t,e){if(e.author)return e.author;let n=mH();if(!n){if(!Am())throw Error("your palettes are named after your GitHub handle — log in with `gh auth login`, or run this in a terminal");let r=await gh({message:"Your GitHub handle — your palettes are named <handle>@<market>/<palette>",validate:(i)=>S1.test((i??"").toLowerCase())&&(i??"").length<=39?void 0:"that is not a GitHub handle"});if(me(r))throw Error("no handle given");n=r.toLowerCase()}return We(t,{...e,author:n}),console.log(`Your palettes are named ${n}@<market>/<palette>`),n}function Vr(t,e){if(e===q)return q;return Ot(e)?ae(Be(e)):ru(e,tn(t,e))}function tl(t,e){try{return Vr(t,e)}catch{return}}function E1(t){return ct(t)??q}function Na(t){return dt(t).palettes.filter((e)=>ct(e.name)===void 0)}function gH(t){let e=Pa(import.meta.dirname,"..","dist","manifest.json");return Qu(e)?En(Xu(e,"utf8")).palettes:Na(t)}function Aa(t,e,n){let{updates:r,...i}=t,o=Object.entries(n).filter(([s,a])=>gt(s)&&e.includes(s)&&a!==Pr(s,{}));return{...i,markets:e,...o.length>0?{updates:Object.fromEntries(o)}:{}}}function M1(t,e,n,r){return e.find((i)=>i!==n&&!Go(i,n)&&tl(t,i)===r)}function Nm(t,e,n,r){let i=K(t),o=Gt(i.markets),s=M1(t,o,e,n);if(s)throw Error(`${n} already names the market at ${tt(s)} — \`ttheme market remove ${n}\` first`);let a=r===void 0?{...i.updates}:{...i.updates,[e]:r};We(t,Aa(i,o.includes(e)?o:[...o,e],a))}async function bH(t){if(!Am())return!1;let e=await en({message:`Update ${t} on its own when its author changes it? ttheme checks once a day, when you run it`,initialValue:!1});if(me(e))throw Error("no answer given — nothing was added");return e}async function x1(t,e){let n=Yr(`Fetching ${tt(e)}`);try{return await Oa(t,e)}finally{n.done()}}async function wH(t,e,n){let r=await x1(t,n),i=K(t),o=Gt(i.markets),s=M1(t,o,n,r.id);if(s)throw Error(`${r.id} already names the market at ${tt(s)} — \`ttheme market remove ${r.id}\` first`);let{[e]:a,...c}=i.updates??{},u=a===void 0?c:{...c,[n]:a};return We(t,Aa(i,o.map((l)=>l===e?n:l),u)),fs(t,r),r}async function Tm(t,e){let n=Nr(e),r=Gt(K(t).markets);if(r.includes(n))return console.log(`${tt(n)} is already added`),{source:n,id:Vr(t,n),fresh:!1};let i=gt(n)?r.find((c)=>gt(c)&&Go(c,n)):void 0;if(i){let c=await wH(t,i,n);return console.log(`Moved ${c.id} to ${ia(n)??"its default branch"} · ${tt(n)} — ${Tt(Pt(c.entries).length)}`),{source:n,id:c.id,fresh:!1}}if(Ot(n)){let c=ae(Be(n));Nm(t,n,c);let u=Xe(n,c,Na(t)).length;return console.log(`Added ${c} · ${tt(n)} — ${Tt(u)}, read in place`),{source:n,id:c,fresh:!0}}let o=await x1(t,n),s=n===q?void 0:await bH(o.id);Nm(t,n,o.id,s),fs(t,o);let a=Tt(Pt(o.entries).length);return console.log(n===q?`Added the ttheme catalog — ${a}`:`Added ${o.id} · ${tt(n)} — ${a}${s?", updating on its own":""}`),{source:n,id:o.id,fresh:!0}}async function $H(t){let e=J(),{source:n,id:r,fresh:i}=await Tm(e,t);if(!i)return;if(Ot(n))console.log("\n`ttheme browse` picks them · once the folder is on GitHub, `ttheme market add <owner>/<repo>` adds it anywhere");else if(n===q)console.log("\n`ttheme browse` picks them");else console.log(`
|
|
620
|
+
\`ttheme browse\` picks them, or \`ttheme add ${r}/<palette>\``)}function Hm(t,e){if(gt(e))fH(_e(t,e),{force:!0})}function Cm(t){return`${Tt(t.length)} installed from it keep${t.length===1?"s":""} working: ${t.join(", ")} — \`ttheme remove\` drops ${t.length===1?"it":"them"}`}function kH(t){let e=J(),n=K(e),r=Gt(n.markets),i=r.find((u)=>tl(e,u)===t)??r.find((u)=>u===O1(t));if(!i)throw Error(`no market named ${t} — \`ttheme market\` lists them`);let o=tl(e,i),s=n.palettes.filter((u)=>E1(u)===o),a=r.filter((u)=>u!==i),c=Aa(n,a,n.updates??{});if(We(e,c),Hm(e,i),ue(e,dt(e),c),console.log(`Removed ${o??t} · ${tt(i)}`),s.length>0)console.log(Cm(s))}function O1(t){try{return Nr(t)}catch{return}}function yH(t,e){try{if(e===q)return Pt(En(Xu(Ge(t),"utf8")).palettes).length;if(Ot(e))return Xe(e,Vr(t,e),Na(t),ce(!1)).length;return Jn(e,tn(t,e),Na(t),ce(!1)).entries.length}catch{return}}function Lm(t,e,n=nr(),r=Date.now()){if(Ot(e))return"read in place";if(e===q)return"comes with ttheme";let i=n[e],o=Ma(t,e);if(i&&(o===void 0||i.at>o))return`update failed ${Ia(i.at,r)}`;return o===void 0?"never updated":`updated ${Ia(o,r)}`}function vH(){let t=J(),e=K(t),n=Gt(e.markets);if(n.length===0){console.log("No markets — `ttheme market add official` brings the ttheme catalog back");return}let r=nr(),i=n.map((a)=>{let c=tl(t,a)??"?",u=yH(t,a),l=e.palettes.filter((h)=>E1(h)===c).length,d=Ot(a)?[]:[`auto-update ${Pr(a,e.updates)?"on":"off"}`],f=a===q?void 0:Ra(t,a)?.info.description;return{name:c,where:tt(a),about:f,note:[u===void 0?"Unreadable":Tt(u),...l>0?[`${l} installed`]:[],...d,Lm(t,a,r)].join(" · ")}}),o=Math.max(...i.map((a)=>a.name.length)),s=Math.max(...i.map((a)=>a.where.length));for(let a of i)if(console.log(` ${a.name.padEnd(o)} ${a.where.padEnd(s)} ${a.note}`),a.about)console.log(` ${" ".repeat(o)} ${a.about}`)}function Fm(t){return`${t.owner.login.toLowerCase()}/${t.name}`}async function jm(t,e){let n=encodeURIComponent(`topic:${_o}${t?` ${t}`:""}`);try{let{items:r}=await E$(`https://api.github.com/search/repositories?q=${n}&sort=stars&per_page=50`,(i)=>JSON.parse(i),void 0,e);return r}catch(r){if(r instanceof ou)throw Error("GitHub lets a search through about ten times a minute without signing in — try again in a minute");throw r}}async function SH(t){let e=J(),n=await jm(t);if(n.length===0){console.log(`No repository carries the ${_o} topic${t?` and matches ${t}`:""} yet`);return}let r=new Set(Gt(K(e).markets).map(Rr)),i=n.map((s)=>{let a=Fm(s);return{arg:a,added:r.has(a),stars:`★${s.stargazers_count}`,about:s.description??""}}),o=Math.max(...i.map((s)=>s.arg.length));for(let s of i)console.log(` ${s.added?"●":"○"} ${s.arg.padEnd(o)} ${s.stars.padStart(5)} ${s.about}`);console.log("\n`ttheme market add <name>` adds one")}function I1({name:t}){return`ttheme-${t}`}function EH(t,e){lH(Xc(t),{recursive:!0}),L(Pa(t,Bt),t$(e)),L(Pa(t,"README.md"),`# ${ae(e)}
|
|
638
621
|
|
|
639
622
|
A [ttheme](https://github.com/kecan0406/ttheme) market:
|
|
640
623
|
|
|
641
624
|
\`\`\`sh
|
|
642
|
-
ttheme market add ${e.owner}/${
|
|
625
|
+
ttheme market add ${e.owner}/${I1(e)}
|
|
643
626
|
ttheme browse
|
|
644
627
|
\`\`\`
|
|
645
|
-
`)}function
|
|
628
|
+
`)}function R1(t){return xe(`x@${t}/x`)?"takes lowercase letters, digits and single hyphens":void 0}async function P1(){if(!Am())throw Error("name the market: ttheme market init <name>, or --in <name> on new");let t=await gh({message:"Your market's name — its palettes are <you>@<name>/<palette>",validate:(e)=>R1((e??"").toLowerCase())});if(me(t))throw Error("no market name given");return t.toLowerCase()}async function N1(t,e){let n=Ii(t);if(e){let s=n.find((a)=>a.name===e||a.id===e||a.dir===O1(e));if(!s)throw Error(`${e} is not one of your local markets — \`ttheme market init ${e}\` makes it one`);return s}let[r,...i]=n;if(r&&i.length===0)return r;if(r)throw Error(`you have ${n.length} local markets — --in names one: ${n.map((s)=>s.name).join(", ")}`);let o=await P1();return A1(t,Ff(t,o),o)}async function A1(t,e,n){let r=!Qu(Pa(e,Bt)),i;if(r){let s=R1(n);if(s)throw Error(`the market name ${n} ${s}`);if(Qu(e)&&dH(e).length>0)throw Error(`${e} is not empty — pick a new folder for the market`);i={owner:await pH(t,K(t)),name:n},EH(e,i)}else i=Be(e);let o=ae(i);return Nm(t,e,o),console.log(`${r?"Made":"Added"} your market ${o} · ${tt(e)}`),{dir:e,...i,id:o}}function k1(t){return t.startsWith(".")||t.startsWith("/")||t.startsWith("~")}async function MH(t){let e=J(),n=t&&!k1(t)?t.toLowerCase():t?v1(Nr(t)).toLowerCase():await P1(),r=t&&k1(t)?Nr(t):Ff(e,n),i=await A1(e,r,n),o=`${i.owner}/${I1(i)}`;console.log(`
|
|
646
629
|
\`ttheme new <palette> --from <palette>\` puts palettes in it, and a folder under palettes/ shelves them in a catalog — others see them once it is on GitHub:
|
|
647
630
|
|
|
648
|
-
cd ${
|
|
631
|
+
cd ${tt(r)}
|
|
649
632
|
git init -b main && git add -A && git commit -m "${i.id}"
|
|
650
|
-
gh repo create ${
|
|
651
|
-
gh repo edit ${
|
|
633
|
+
gh repo create ${o} --public --source . --push
|
|
634
|
+
gh repo edit ${o} --add-topic ${_o}
|
|
652
635
|
|
|
653
|
-
Every push is the market: \`ttheme market add ${
|
|
636
|
+
Every push is the market: \`ttheme market add ${o}\` works anywhere`)}function xH(t){let e=t?Nr(t):process.cwd(),n=Pa(e,Bt);if(!Qu(n))throw Error(`${tt(e)} has no ${Bt} — \`ttheme market init ${tt(e)}\` makes one`);let r=[],i=[],o=Xu(n,"utf8"),s;try{s=Be(e)}catch(h){return console.error(` ✗ ${h.message}`),1}let a=$i(o),c=a.owner;for(let h of Object.keys(a).filter((m)=>!V0.includes(m)))i.push(`${Bt}: unknown key ${h} — ttheme ignores it`);for(let h of Object.keys(c).filter((m)=>!Z0.includes(m)))i.push(`${Bt}: unknown key owner.${h} — ttheme ignores it`);if(!s.description)i.push(`${Bt}: no description — browse and the market page show one`);let u=ae(s),l=Xe(e,u,gH(J()),(h,m)=>r.push(`${$1(e,h)}: ${m.replace(`${v1(h)}: `,"")}`));for(let h of Uo(e)){let m;try{m=n0(h.path,Xu(h.path,"utf8"))}catch{m=[]}for(let p of m)i.push(`${$1(e,h.path)}: unknown key ${p} — ttheme ignores it`)}let d=a1(s.renames,new Set(l.map((h)=>de(h.name))));r.push(...d.errors.map((h)=>`${Bt}: ${h}`)),i.push(...d.warnings.map((h)=>`${Bt}: ${h}`));for(let h of l){let m=sa(h).filter((b)=>b.startsWith(" ✗")),p=h.catalog?`${h.catalog}/${de(h.name)}`:de(h.name);console.log(` ${p}${m.length>0?`
|
|
654
637
|
${m.join(`
|
|
655
|
-
`)}`:" passes the gate"}`)}for(let h of r)console.error(` ✗ ${h}`);for(let h of i)console.log(` ! ${h}`);let
|
|
656
|
-
${u} · ${Rt(l.length)} · ${d(r.length,"error")} · ${d(i.length,"warning")}`),r.length>0?1:0}async function my(t,e){switch(t){case void 0:vA();return;case"add":await $A(ny(t,e));return;case"remove":kA(ny(t,e));return;case"search":await EA(e);return;case"init":await MA(e);return;case"check":return OA(e);default:throw Error(`unknown market action ${t} — ${hA.join(", ")}, or none to list them`)}}function ny(t,e){if(!e)throw Error(t==="add"?"market add takes a repository or a folder: ttheme market add alice/ttheme-dust":"market remove takes a market name — `ttheme market` lists them");return e}function py(t,e){let n=zs(t,e);return`${n} — ${Rt(qe(e,n,ca(t),re(!1)).length)}, read in place`}var xA=new Intl.Segmenter(void 0,{granularity:"grapheme"});function gy(t){return[...t].length===1&&t>=" "&&t!==""}function IA(t){return[...t.replace(/[\r\n\t]+/g," ")].filter(gy).join("")}function Pi(t,e,n=()=>!0){if(e==="backspace")return[...xA.segment(t)].slice(0,-1).map((r)=>r.segment).join("");if(e==="ctrl-u")return"";if(e==="ctrl-w"||e==="alt-backspace")return t.replace(/\S*\s*$/,"");return gy(e)&&n(e)?t+e:void 0}class _r{value;constructor(t=""){this.value=t}key(t){let e=Pi(this.value,t);if(e===void 0)return!1;return this.value=e,!0}paste(t){this.value+=IA(t)}}import{performance as RA}from"node:perf_hooks";import{StringDecoder as NA}from"node:string_decoder";var TA=30,by=50,AA=500,PA=5,wy=Buffer.from("\x1B[M"),Cu="\x1B]1337;ReportCellSize\x07\x1B[16t\x1B[14t\x1B[18t",Sy={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end","1~":"home","7~":"home","3~":"delete","4~":"end","8~":"end","5~":"pgup","6~":"pgdn",I:"focus-in",O:"focus-out",Z:"shift-tab","1;2C":"shift-right","1;2D":"shift-left"},HA={"\r":"enter","\n":"enter","\t":"tab","\b":"backspace","":"backspace","\x1B":"esc","\x00":"ctrl-space"},$y=/\[([0-?]*)([ -/]*)([@-~])/y,FA=/^\[[0-?]*[ -/]*$/,ky=/\](\d+)/y,CA=/^\]\d*$/,yy=/\]\d+;/y,LA=/^1337;ReportCellSize=([\d.]+);([\d.]+)(?:;([\d.]+))?$/,My="\x1B[200~",Fu="\x1B[201~";function Xh(t){let e=HA[t];if(e)return e;let n=t.codePointAt(0)??0;if(n<27)return`ctrl-${String.fromCharCode(n+96)}`;return n<32?void 0:t}function Ds(t){return{kind:"key",key:t}}function qs(t){return{events:[Ds("esc")],end:t+1}}function jA(t){let e={};for(let n of t.split(":")){let r=n.indexOf("=");if(r>0)e[n.slice(0,r)]=n.slice(r+1)}return e}var _A=["left","middle","right",void 0];function Oy(t,e,n,r){if(!Number.isInteger(t)||t<0||t>=128||!(e>=0)||!(n>=0))return;let i=t&3,s={kind:"mouse",row:n,col:e,shift:(t&4)!==0,alt:(t&8)!==0,ctrl:(t&16)!==0};if(t&64)return{...s,action:"wheel",button:void 0,wheel:i%2===0?-1:1,sideways:i>=2,count:0};let o=_A[i],a=t&32?o?"drag":"move":r||!o?"release":"press";return{...s,action:a,button:o,wheel:0,sideways:!1,count:a==="press"?1:0}}function GA(t,e,n){let r=[],i=e;while(r.length<3&&i<t.length){let u=t.codePointAt(i);r.push(u),i+=u>65535?2:1}if(r.length<3)return n?{events:[],end:t.length}:void 0;let[s=0,o=0,a=0]=r,c=Math.max(s,o,a)<128?Oy(s-32,o-33,a-33,!1):void 0;return{events:c?[c]:[],end:i}}function BA(t,e,n){if((n==="M"||n==="m")&&e===""&&t.startsWith("<")){let[i=-1,s=0,o=0]=t.slice(1).split(";").map(Number),a=Oy(i,s-1,o-1,n==="m");return a?[a]:[]}if(n==="t"&&e===""){let[i,s=0,o=0]=t.split(";").map(Number),a=i===6?"cell":i===4?"window":i===8?"grid":void 0;return a?[{kind:"size",of:a,h:s,w:o}]:[]}if(n==="y"&&e==="$"&&t.startsWith("?")){let[i=0,s=0]=t.slice(1).split(";").map(Number);return[{kind:"mode",mode:i,value:s}]}if(n==="c"&&t.startsWith("?"))return[{kind:"attributes"}];let r=e===""?Sy[`${t}${n}`]:void 0;return r?[Ds(r)]:[]}function UA(t,e,n){$y.lastIndex=e+1;let r=$y.exec(t);if(!r)return!n&&FA.test(t.slice(e+1))?void 0:qs(e);let[i,s="",o="",a=""]=r,c=e+1+i.length;if(s===""&&o===""&&a==="M")return GA(t,c,n);if(s==="200"&&a==="~"){let u=t.indexOf(Fu,c);if(u===-1)return n?{events:[{kind:"paste",text:t.slice(c)}],end:t.length}:void 0;return{events:[{kind:"paste",text:t.slice(c,u)}],end:u+Fu.length}}return{events:BA(s,o,a),end:c}}function WA(t){let e=LA.exec(t);if(e){let s=Number(e[3]??1);return[{kind:"size",of:"cell",h:Math.round(Number(e[1])*s),w:Math.round(Number(e[2])*s)}]}let[n="",r="",...i]=t.split(";");return[{kind:"osc",code:n,meta:jA(r),payload:i.join(";")}]}function KA(t,e,n){ky.lastIndex=e+1;let r=ky.exec(t),i=r?t[e+1+r[0].length]:void 0;if(i!==";"&&i!=="\x07"&&i!=="\x1B")return!n&&CA.test(t.slice(e+1))?void 0:qs(e);let s=[t.indexOf("\x07",e),t.indexOf("\x1B\\",e+2)].filter((a)=>a!==-1);if(s.length===0)return n?{events:[],end:t.length}:void 0;let o=Math.min(...s);return{events:WA(t.slice(e+2,o)),end:o+(t[o]==="\x07"?1:2)}}function zA(t,e,n){let r=t[e+2];if(r===void 0)return n?qs(e):void 0;if(!/^[A-Za-z]$/.test(r))return qs(e);let i=Sy[r];return{events:i?[Ds(i)]:[],end:e+3}}function DA(t,e,n){let r=t[e+1];if(r===void 0)return n?qs(e):void 0;if(r==="[")return UA(t,e,n);if(r==="]")return KA(t,e,n);if(r==="O")return zA(t,e,n);if(r==="")return{events:[Ds("alt-backspace")],end:e+2};if(/^[a-z]$/.test(r))return{events:[Ds(`alt-${r}`)],end:e+2};return qs(e)}function vy(t,e=!1){let n=[],r=0;while(r<t.length){if(t[r]==="\x1B"){let o=DA(t,r,e);if(!o)return{events:n,rest:t.slice(r)};n.push(...o.events),r=o.end;continue}let i=String.fromCodePoint(t.codePointAt(r)),s=Xh(i);if(s)n.push(Ds(s));r+=i.length}return{events:n,rest:""}}function qA(t){let e=t.indexOf(wy);if(e===-1)return{bytes:t,carry:void 0};let n=[],r=0;while(e!==-1&&e+6<=t.length){n.push(t.subarray(r,e));let[i=0,s=0,o=0]=t.subarray(e+3,e+6);if(s>32&&o>32)n.push(Buffer.from(`\x1B[<${i-32};${s-32};${o-32}M`));r=e+6,e=t.indexOf(wy,r)}return n.push(t.subarray(r,e===-1?t.length:e)),{bytes:Buffer.concat(n),carry:e===-1?void 0:t.subarray(e)}}function Ey(t){return yy.lastIndex=1,t.startsWith(My)||t.startsWith("\x1B]")&&yy.test(t)}function YA(t,e){let n=t.slice(-Fu.length)+e;return t.startsWith(My)?n.includes(Fu):n.includes("\x07")||n.includes("\x1B\\")}class tm{held="";timer;carry;pressed;wheeled;utf8=new NA("utf8");burst;take;constructor(t,e=()=>!1){this.burst=e,this.take=(n)=>{let r=this.counted(n);if(r.length>0)t(r)}}counted(t){let e=RA.now();return t.filter((n)=>{if(n.kind!=="mouse")return!0;if(n.action==="wheel"){let s=n.wheel*(n.sideways?2:1),o=this.wheeled;if(o!==void 0&&o.way===s&&e-o.at<PA)return!1;return this.wheeled={at:e,way:s},!0}if(n.action==="release")n.count=this.pressed?.count??0;if(n.action!=="press"||!n.button)return!0;let r=this.pressed,i=r!==void 0&&r.button===n.button&&r.row===n.row&&Math.abs(r.col-n.col)<=1&&e-r.at<=AA;return n.count=i?r.count+1:1,this.pressed={at:e,button:n.button,row:n.row,col:n.col,count:n.count},!0})}feed(t){clearTimeout(this.timer);let e=typeof t==="string"?t:this.bytes(t);if(this.carry)this.wait(by);if(!this.held&&!e.includes("\x1B")&&this.burst(e)){this.take([{kind:"paste",text:e}]);return}if(Ey(this.held)&&!YA(this.held,e)){this.held+=e;return}let{events:n,rest:r}=vy(this.held+e);if(this.held=r,r&&!Ey(r))this.wait(r.length===1?TA:by);if(n.length>0)this.take(n)}bytes(t){let{bytes:e,carry:n}=qA(this.carry?Buffer.concat([this.carry,t]):t);return this.carry=n,this.utf8.write(e)}wait(t){clearTimeout(this.timer),this.timer=setTimeout(()=>this.flush(),t)}flush(){clearTimeout(this.timer),this.carry=void 0;let{events:t}=vy(this.held,!0);if(this.held="",t.length>0)this.take(t)}stop(){clearTimeout(this.timer),this.held="",this.carry=void 0}}class la{window;grid;see(t){if(t.kind!=="size")return;if(t.of==="cell")return{w:t.w,h:t.h};if(t.of==="window")this.window=t;else this.grid=t;let e=this.window,n=this.grid;return e&&n&&n.h>0&&n.w>0?{h:Math.floor(e.h/n.h),w:Math.floor(e.w/n.w)}:void 0}}var ju={on:"\x1B[?1049h",off:"\x1B[?1049l"},Yn={on:"\x1B[?25l",off:"\x1B[?25h"},Hi={on:"\x1B[?7l",off:"\x1B[?7h"},Gr={on:"\x1B[?2004h",off:"\x1B[?2004l"},Ny={on:"\x1B[?1004h",off:"\x1B[?1004l"},JA={on:"\x1B[?1000h\x1B[?1002h\x1B[?1006h",off:"\x1B[?1006l\x1B[?1002l\x1B[?1000l"};function Js(t=process.env){return t.TTHEME_MOUSE==="off"?[]:[JA]}var Ty={SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGTERM:15},VA=3000;class da extends Error{exit;constructor(t){super(t);this.exit=128+Ty[t]}}var kn=[],Ys=new Map,fa=new Map;function xy(t){return kn.findLast((e)=>e.input===t)}var Iy;function Ay(t){for(let e of[...kn].reverse())e.abort(t);if(!Iy)Iy=setTimeout(()=>{Py(),process.exit(t instanceof da?t.exit:1)},VA).unref()}var ZA=Object.fromEntries(Object.keys(Ty).map((t)=>[t,()=>Ay(new da(t))]));function Py(){for(let t of[...kn].reverse())t.close()}function QA(){for(let t of kn)t.reassert();kn.at(-1)?.redraw()}function Ry(t){let e=t?"on":"off";for(let[n,r]of Object.entries(ZA))process[e](n,r);if(process[e]("uncaughtException",Ay),process[e]("exit",Py),process.platform!=="win32")process[e]("SIGCONT",QA)}function Lu(){}class Hy{input;output;failed;modes=[];assumed;owned=[];keys;tty;take;resized;queued=[];asking;reject=Lu;open=!0;aborted=!1;constructor(t={}){if(this.input=t.input??process.stdin,this.output=t.output??process.stdout,this.tty=this.output.isTTY===!0&&this.input.isTTY===!0,this.assumed=t.assume??[],this.keys=new tm((r)=>this.deliver(r),t.burst),this.failed=new Promise((r,i)=>{this.reject=i}),this.failed.catch(Lu),this.tty&&!kn.some((r)=>r.tty))Ry(!0);kn.push(this);let e="";for(let r of this.assumed)if(!Ys.has(r))e+=r.on;for(let r of t.modes??[])e+=this.claim(r);this.write(e);let n=fa.get(this.input)??0;if(n===0)this.input.setRawMode?.(!0);fa.set(this.input,n+1),this.input.on("data",this.received),this.input.resume(),this.output.on("resize",this.resizing),this.output.on("error",Lu)}hold(t){this.write(this.claim(t))}get cols(){return this.output.columns||80}get rows(){return this.output.rows||24}write(t){if(t&&this.open)this.output.write(t)}listen(t){this.take=t;let e=this.queued;if(this.queued=[],e.length>0)t(e)}onResize(t){this.resized=t}until(t){return Promise.race([t,this.failed])}loop(t,e=()=>{}){return this.until(new Promise((n)=>{let r=!1;this.listen((i)=>{for(let s of i){let o=r?void 0:t(s);if(o!==void 0)r=!0,n(o)}if(!r)e()})}))}ask(t,e,n,r=!0){return new Promise((i)=>{let s={hold:r,pick:(c)=>{let u=e(c);if(u===void 0)return!1;return o(u),!0}},o=(c)=>{if(clearTimeout(a),this.asking===s)this.asking=void 0;i(c),this.release()},a=setTimeout(()=>o(void 0),n);this.asking=s,this.write(t)})}abort(t){if(this.aborted)return;this.aborted=!0,this.keys.stop(),this.reject(t)}redraw(){this.resized?.()}reassert(){if(this.open)this.input.setRawMode?.(!0),this.write([...this.assumed,...this.owned].map((t)=>t.on).join(""))}close(){if(!this.open)return;this.keys.stop(),this.input.off("data",this.received),this.output.off("resize",this.resizing);let t="";for(let n of[...this.modes].reverse()){let r=(Ys.get(n)??1)-1;if(r===0)Ys.delete(n),t+=n.off;else Ys.set(n,r)}this.write(t),this.open=!1;let e=(fa.get(this.input)??1)-1;if(e===0)fa.delete(this.input),this.input.setRawMode?.(!1),this.input.pause();else fa.set(this.input,e);if(this.output.off("error",Lu),kn.splice(kn.indexOf(this),1),this.tty&&!kn.some((n)=>n.tty))Ry(!1)}received=(t)=>{if(xy(this.input)===this&&!this.aborted)this.keys.feed(t)};resizing=()=>{if(xy(this.input)===this)this.resized?.()};claim(t){this.modes.push(t);let e=Ys.get(t)??0;if(Ys.set(t,e+1),e>0)return"";return this.owned.push(t),t.on}deliver(t){let e=this.asking,n=e?t.filter((r)=>!e.pick(r)):t;if(n.length===0)return;if(!this.take||this.asking?.hold){this.queued.push(...n);return}this.take(n)}release(){if(this.take&&this.queued.length>0){let t=this.queued;this.queued=[],this.take(t)}}}async function Br(t,e){let n=new Hy(t);try{return await e(n)}finally{n.close()}}var XA=3;function ha(t,e){return`${t}/${e}`}function Fy(t){return lt(t.name)?ae(t.name):t.name}function Vs(t){return t.catalog!==void 0&&Ly(t.group)?ha(t.group,t.catalog):void 0}function em(t){if(t?.kind==="palette")return`palette ${t.entry.name}`;if(t?.kind==="group")return`group ${t.name}`;if(t?.kind==="catalog")return`catalog ${ha(t.group,t.name)}`;return t?.kind??""}function _u(t,e){return di([t.name,t.group,t.native??"",t.catalog??"",...t.nativeNames??[],...bc(t.booru)],e)}function Cy(t,e,n){let r=n.trim(),i=[],s=new Set,o=(a)=>({kind:"palette",entry:a});for(let a of t){if(a.default||s.has(a.group))continue;s.add(a.group);let c=t.filter((d)=>!d.default&&d.group===a.group),u=r?c.filter((d)=>_u(d,r)):c;if(r&&u.length===0)continue;let l=r.length>0||e.has(a.group);if(i.push({kind:"group",name:a.group,native:a.native,lead:c.find((d)=>d.lead)??a,expanded:l,count:u.length}),!l)continue;let f=u.filter((d)=>Vs(d)!==void 0);for(let d of new Set(f.map((h)=>h.catalog))){let h=f.filter(($)=>$.catalog===d),m=r.length>0||e.has(ha(a.group,d));if(i.push({kind:"catalog",group:a.group,name:d,lead:h[0],expanded:m,count:h.length}),m)i.push(...h.map(o))}i.push(...u.filter((d)=>Vs(d)===void 0).map(o))}return i}function tP(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||_u(i,n))).map((i)=>i.group));return Cy(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function Ly(t){return t.includes("@")}function nm(t,e,n,r,i=!0){let s=n-1;if(s<0)return t;let o;if(!Number.isFinite(e))o=e>0?s:0;else if(e>0)o=t>=s?i?0:s:Math.min(s,t+e);else o=t<=0?i?s:0:Math.max(0,t+e);return r(o)?o+Math.sign(e):o}function Gu(t,e){let n={home:Number.NEGATIVE_INFINITY,end:Number.POSITIVE_INFINITY,pgup:-e,pgdn:e};return t===void 0?void 0:n[t]}function eP(t){let e=t.findIndex((n)=>n.kind==="group"&&Ly(n.name));return e>0&&t.slice(0,e).some((n)=>n.kind==="group")?[...t.slice(0,e),{kind:"rule"},...t.slice(e)]:t}function nP(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}function Bu(t){return t==="decode"||t==="glitch"?t:"typewriter"}function Zs(t,e,n){return le({kind:"row",at:t,part:e},n)}class ma{picked;scope;maxItems;named=[];series=[];color;onFocus;entries=[];seriesPad=0;namePad=0;expanded=new Set;rows=[];cursor=0;top=0;filter="";lastFocused="";constructor(t){this.picked=t.picked,this.scope=t.scope??"palette",this.maxItems=t.maxItems??12,this.color=t.color??!0,this.onFocus=t.onFocus,this.load(t.entries),this.rebuild("first")}load(t){this.entries=t,this.named=t.filter((e)=>!e.default),this.series=[...new Set(this.named.map((e)=>e.group))],this.seriesPad=Math.max(0,...this.series.map((e)=>e.length)),this.namePad=Math.max(0,...this.named.map((e)=>this.indent(e).length+Fy(e).length))}indent(t){return Vs(t)===void 0?" ":" "}setEntries(t){this.load(t),this.rebuild("stay")}setFilter(t){if(t!==this.filter)this.filter=t,this.rebuild("keep")}clear(){let t=this.rows[this.cursor];if(t?.kind==="palette"&&!t.entry.default){this.expanded.add(t.entry.group);let e=Vs(t.entry);if(e!==void 0)this.expanded.add(e)}this.setFilter("")}focusedRow(){return this.rows[this.cursor]}refocus(){this.lastFocused="",this.sync()}members(t,e){let n=this.scope==="palette"?this.filter.trim():"";return this.named.filter((r)=>r.group===t&&(e===void 0||r.catalog===e)&&(n===""||_u(r,n)))}everyone(t){return t.flatMap((e)=>e.kind==="group"?this.members(e.name):[])}pick(){let t=this.rows[this.cursor],e=t?.kind==="palette"?[t.entry.name]:t?.kind==="group"?this.members(t.name).map((r)=>r.name):t?.kind==="catalog"?this.members(t.group,t.name).map((r)=>r.name):t?.kind==="all"?this.everyone(this.rows).map((r)=>r.name):[];if(e.length===0)return;let n=e.some((r)=>!this.picked.has(r));for(let r of e)if(n)this.picked.add(r);else this.picked.delete(r)}pickedIn(t,e){return this.members(t,e).filter((n)=>this.picked.has(n.name)).length}pickedCount(){if(this.scope==="palette")return this.named.filter((t)=>this.picked.has(t.name)).length;return this.series.filter((t)=>this.members(t).every((e)=>this.picked.has(e.name))).length}total(){return this.scope==="series"?this.series.length:this.named.length}matched(){let t=this.filter.trim();if(this.scope==="series")return this.rows.filter((e)=>e.kind==="group").length;return t?this.named.filter((e)=>_u(e,t)).length:this.named.length}sync(){let t=this.rows[this.cursor],e=t?.kind==="palette"?t.entry:t?.kind==="group"&&this.scope==="series"?t.lead:void 0;if(e&&e.name!==this.lastFocused)this.lastFocused=e.name,this.onFocus?.(e)}rebuild(t){let e=this.rows[this.cursor],n=this.scope==="series"?tP(this.entries,this.filter):Cy(this.entries,this.expanded,this.filter);this.rows=n.length>0?eP([{kind:"all",count:this.allCount(n)},...n]):[];let r=n.length>0?this.rows.indexOf(n[nP(n)]):0;if(t==="first")this.cursor=r;else if(t==="keep"||t==="stay"){let i=em(e),s=e?.kind==="palette"||t==="stay"?this.rows.findIndex((o)=>em(o)===i):-1;this.cursor=s===-1?r:s}else if(this.cursor>=this.rows.length)this.cursor=Math.max(0,this.rows.length-1);this.sync()}allCount(t){return this.scope==="series"?t.length:this.everyone(t).length}move(t,e=!0){this.cursor=nm(this.cursor,t,this.rows.length,(n)=>this.rows[n]?.kind==="rule",e),this.sync()}point(t){let e=this.rows[t];if(!e||e.kind==="rule")return!1;return this.cursor=t,this.sync(),!0}flip(){let t=this.rows[this.cursor];if(t?.kind==="group"||t?.kind==="catalog")this.fold(!t.expanded)}foldable(){let t=this.rows[this.cursor];return(t?.kind==="group"||t?.kind==="catalog")&&this.scope==="palette"&&!this.filter}open(){if(this.foldable())this.flip();else this.pick()}toggle(t){if(this.expanded.has(t))this.expanded.delete(t);else this.expanded.add(t);this.rebuild("clamp")}climb(t,e){this.expanded.delete(t),this.rebuild("clamp"),this.reach(e)}reach(t){this.cursor=Math.max(0,this.rows.findIndex((e)=>em(e)===t)),this.sync()}fold(t){if(this.filter||this.scope==="series")return;let e=this.rows[this.cursor];if(e?.kind==="group"){if(t!==e.expanded)this.toggle(e.name)}else if(e?.kind==="catalog"){if(t!==e.expanded)this.toggle(ha(e.group,e.name));else if(!t)this.reach(`group ${e.group}`)}else if(e?.kind==="palette"&&!t&&!e.entry.default){let n=Vs(e.entry);if(n===void 0)this.climb(e.entry.group,`group ${e.entry.group}`);else this.climb(n,`catalog ${n}`)}}window(){if(this.cursor<this.top)this.top=this.cursor;if(this.cursor>=this.top+this.maxItems)this.top=this.cursor-this.maxItems+1;this.top=Math.min(this.top,Math.max(0,this.rows.length-this.maxItems));let t=this.rows.slice(this.top,this.top+this.maxItems);return{lines:t.map((e,n)=>this.renderRow(e,this.top+n)),above:this.top,below:this.rows.length-this.top-t.length}}renderRow(t,e){if(t.kind==="rule")return` ${this.color?`${A}${"── Markets ──────────"}${At}`:"── Markets ──────────"}`;return Zs(e,"row",this.rowText(t,e))}rowText(t,e){let n=e===this.cursor,r=t.kind==="palette"?t.entry:t.kind==="all"?void 0:t.lead,i=this.color&&n&&r!==void 0,s=(E)=>this.color?`${A}${E}${ge}`:E,o=(E)=>this.color?`${at}${E}${ge}`:E,a=(E)=>this.color?` ${Up(hc(E),i?Be(E.foreground):"\x1B[39m")}`:"",c=n?i?`${Be(r.cursor)}▌\x1B[39m `:"▌ ":" ",u=(E)=>i?`${c}${Ga(r.selection,r.foreground)} ${E} ${At}`:`${c} ${E}`,l=(E)=>Zs(e,"box",`${E?"●":"○"} `),f=(E)=>Zs(e,"fold",`${E?"▾":"▸"} `);if(t.kind==="all")return u(`${l(this.everyone(this.rows).every((E)=>this.picked.has(E.name)))}Select all ${s(`(${t.count})`)}`);if(t.kind==="group"&&this.scope==="series"){let E=`(${t.count})${t.native?` ${t.native}`:""}`;return u(`${l(this.pickedIn(t.name)===t.count)}${o(t.name.padEnd(this.seriesPad))}${a(t.lead)}${this.color?" ":" "}${s(E)}`)}let d=this.rows[this.cursor],h=(E,S)=>this.color&&d?.kind==="palette"&&E?`${at}${Be(d.entry.cursor)}${S}${ge}\x1B[39m`:o(S);if(t.kind==="group"){let E=h(d?.kind==="palette"&&d.entry.group===t.name,t.name),S=t.native?` ${s(t.native)}`:"";return u(`${f(t.expanded)}${E} ${s(`(${this.pickedIn(t.name)}/${t.count})`)}${S}`)}if(t.kind==="catalog"){let E=d?.kind==="palette"&&Vs(d.entry)===ha(t.group,t.name),S=s(`(${this.pickedIn(t.group,t.name)}/${t.count})`);return u(` ${f(t.expanded)}${h(E,t.name)} ${S}`)}let m=t.entry,$=this.indent(m),g=Fy(m),b=this.color?g.padEnd(this.namePad-$.length):g,y=n?o(b):b;return u(`${$}${l(this.picked.has(m.name))}${y}${a(m)}`)}}function rm(t){let e=t.named[Math.floor(Math.random()*t.named.length)],n=t.series[Math.floor(Math.random()*t.series.length)];return e&&n?`${e.name} | ${n}`:""}class Uu{fx;make;redraw;roller;example="";step=0;seed=0;timer;constructor(t,e,n){this.fx=t,this.make=e,this.redraw=n,this.roll(),this.roller=setInterval(()=>{this.roll(),this.step=8,this.redraw()},3000),this.roller.unref?.()}stop(){clearInterval(this.roller),clearTimeout(this.timer)}roll(){let t=this.make();this.example=t.length>30?`${t.slice(0,29)}…`:t,this.seed=Math.floor(Math.random()*997)}text(){if(this.step===0)return this.example;if(!this.timer)this.timer=setTimeout(()=>{this.timer=void 0,this.step-=1,this.redraw()},60),this.timer.unref?.();let t=Math.floor(this.example.length*(8-this.step)/8);if(this.fx==="typewriter")return`${this.example.slice(0,t)}▏`;let e=this.fx==="decode"?"abcdefghijklmnopqrstuvwxyz":"▓▒░#*+=<>?/-_",n=this.fx==="decode"?(r)=>!/[a-z0-9]/i.test(r):(r)=>r===" ";return[...this.example].map((r,i)=>i+(i*7+this.seed)%3<t||n(r)?r:e[Math.floor(Math.random()*e.length)]??r).join("")}}var rP=5;class im{picked;list;scope;color;required;most;hint;field=new _r;input;output;state="active";error="";redraw=()=>{};constructor(t){this.scope=t.scope??"palette",this.picked=new Set(t.installed??[]),this.color=t.color??!0,this.required=t.required??!1,this.most=t.maxItems??12,this.input=t.input,this.output=t.output,this.list=new ma({entries:t.entries,picked:this.picked,scope:this.scope,maxItems:this.most,color:this.color,...t.onFocus?{onFocus:t.onFocus}:{}}),this.hint=new Uu(t.fx??"typewriter",()=>rm(this.list),()=>this.redraw())}prompt(){return Br({input:this.input,output:this.output,modes:[Yn,Gr]},async(t)=>{let e=new Nh((r)=>t.write(r),()=>t.cols),n=()=>{return this.list.maxItems=Math.max(XA,Math.min(this.most,t.rows-rP)),this.draw()};this.redraw=()=>e.draw(n()),t.onResize(()=>e.redraw(n())),this.redraw();try{let r=await t.loop((i)=>{return this.take(i),this.state==="submit"||this.state==="cancel"?this.state:void 0},()=>this.redraw());return this.redraw=()=>{},e.end(this.draw()),r}finally{this.hint.stop()}})}take(t){if(t.kind==="paste"){this.field.paste(t.text),this.list.setFilter(this.field.value);return}if(t.kind!=="key")return;let e=t.key;if(this.state==="error")this.state="active";let n=Gu(e,this.list.maxItems);if(e==="esc"||e==="ctrl-c")this.state="cancel";else if(e==="enter")if(this.required&&this.picked.size===0)this.error=`Pick at least one ${this.scope}`,this.state="error";else this.state="submit";else if(e==="up"||e==="down")this.list.move(e==="up"?-1:1);else if(e==="left"||e==="right")this.list.fold(e==="right");else if(n!==void 0)this.list.move(n);else if(e===" ")this.list.pick();else if(this.field.key(e))this.list.setFilter(this.field.value)}draw(){let t=(m)=>this.color?`${A}${m}${At}`:m,e=(m)=>this.color?`${Ba}${m}${At}`:m,n=this.scope==="series"?"Series":"Catalog";if(this.state==="submit")return[`${t("◇")} ${n} ${t(`· ${this.list.pickedCount()} picked`)}`];if(this.state==="cancel")return[`${t(`◇ ${n} · cancelled`)}`];let r=this.field.value,i=`${e("◆")} ${n} ${t(`(${this.list.matched()}/${this.list.total()} · ${this.list.pickedCount()} picked)`)}`,s=this.hint.text(),o=`${e("│")} ${r?`${r}_`:t(`Search…${s?` e.g. ${s}`:""}`)}`,{lines:a,below:c}=this.list.window(),u=a.length>0?a.map((m)=>`${e("│")} ${m}`):[`${e("│")} ${t(`No ${this.scope==="series"?"series":"palettes"} match '${r}'`)}`];while(u.length<this.list.maxItems)u.push(e("│"));let l=c>0?`${e("│")} ${t(`↓ ${c} more`)}`:e("│"),f=this.scope==="series"?"":" · ←→ fold",d=this.scope==="series"?"continue":"install",h=this.state==="error"?`${e("└")} ${this.color?`${Vt}${this.error}${At}`:this.error}`:`${e("└")} ${t(`↑↓ move${f} · space pick · type to filter · enter ${d} · esc cancel`)}`;return[i,o,...u,l,h]}}var Qs=[{tab:"catalog",title:"Catalog",heading:"Discover palettes"},{tab:"installed",title:"Installed",heading:"Installed palettes"},{tab:"markets",title:"Markets",heading:"Manage markets"},{tab:"errors",title:"Errors",heading:"Problems"}],sm=34,iP=72,sP=94,oP=22,jy=40,_y=10,Gy=3,aP=600,cP=500,uP=300,By=12,lP="\x1B[7;1m",om={title:"",lines:[],brief:""};function pa(t){let e=t.trim();if(e!==z&&!e.includes("/")&&!e.startsWith("~"))return;try{return yr(e)}catch{return}}function fP(t){return t.charAt(0).toUpperCase()+t.slice(1)}class am{picked;tab="catalog";fields={catalog:new _r,installed:new _r,markets:new _r,errors:new _r};cursor={markets:0,errors:0};top={markets:0,errors:0};adds=new Map;removes=new Set;want=new Map;scope={catalog:void 0,installed:void 0};busy=new Map;failed=new Map;peeked=new Map;peekFailed=new Map;staging=new Set;timers=new Map;refreshed=[];inflight=new Set;markets;problems;kept;installed;startup;io;order;color;hub;owns;input;output;maxItems=12;paint;catalog;mine;hint;screen;state="active";phase="browse";offset=0;started=!1;log=[];working="";stopped;beat=0;asking;leaving;goto;repos;searching=!1;searchError;searched;asked=0;help=!1;worn;live;constructor(t){this.markets=t.markets,this.problems=t.problems,this.kept=t.kept,this.installed=new Set(t.installed),this.startup=t.startup,this.io=t.io,this.order=t.order??((n)=>n),this.color=t.color??!0,this.hub=t.hub,this.owns=t.owns??!1,this.input=t.input,this.output=t.output,this.live=t.lookups??!0,this.paint=t.onFocus,this.picked=new Set(t.installed);let e=this.entries();this.catalog=new ma({entries:e,picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("catalog",n)}),this.mine=new ma({entries:this.mineOf(e),picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("installed",n)}),this.hint=new Uu(t.fx??"typewriter",()=>rm(this.tab==="installed"?this.mine:this.catalog),()=>this.redraw());for(let n of t.due)this.update(n)}run(){let t=[...this.owns?[ju,Yn,Hi]:[],Gr,...Js()],e=this.owns?[]:[Yn,Hi];return Br({input:this.input,output:this.output,modes:t,assume:e},async(n)=>{let r=new Ri({write:(i)=>n.write(i),view:()=>this.state==="active"?{lines:this.view(),ticking:this.phase==="applying"}:void 0,beat:()=>{this.beat+=1}});this.screen=r,n.onResize(()=>{r.reset(),r.request()}),r.now();try{return await n.loop((i)=>{if(i.kind==="key")this.key(i.key);else if(i.kind==="paste")this.pasted(i.text);else if(i.kind==="mouse")this.mouse(i,r);return this.state==="active"?void 0:this.state},()=>r.soon())}finally{r.stop(),this.screen=void 0,this.hint.stop();for(let i of this.timers.values())clearTimeout(i);this.timers.clear()}})}applied(){return this.started}lines(){return this.log}failure(){return this.stopped}next(){return this.goto}async idle(){await Promise.allSettled([...this.inflight])}result(){let t=new Set(this.entries().map((e)=>e.name));return{picked:new Set([...this.picked].filter((e)=>t.has(e))),adds:[...this.adds.values()],removes:[...this.removes],auto:Object.fromEntries(this.want),refreshed:this.refreshed}}key(t){if(t==="ctrl-c"){this.state="cancel";return}if(this.help){if(t==="?"||t==="esc")this.help=!1;return}if(this.leaving!==void 0){if(t==="esc")this.leaving=void 0;else if(/^[yn]$/i.test(t)){if(t.toLowerCase()==="y")this.begin();else this.goto=this.leaving,this.state="cancel";this.leaving=void 0}return}if(this.asking){if(t==="esc")this.asking=void 0;else if(/^[yn]$/i.test(t))this.answer(t.toLowerCase()==="y");return}if(this.phase!=="browse"){this.steer(t);return}let e=Gu(t,this.maxItems),n=this.list();if(t==="enter")if(n?.foldable())n.flip();else if(this.dirty())this.phase="review",this.offset=0;else this.state="submit";else if((t==="esc"||t==="ctrl-u")&&this.fields[this.tab].value)this.clear();else if(t==="esc")this.state="cancel";else if(t==="?")this.help=!0;else if(e!==void 0)this.move(e);else if(t==="up"||t==="down")this.move(t==="up"?-1:1);else if(t==="left"||t==="right")this.side(t==="right");else if(t==="tab"||t==="shift-tab"){if(this.hub)this.leave(R0(this.hub,t==="tab"?1:-1))}else if(t==="shift-left"||t==="shift-right")this.switchTab(t==="shift-right"?1:-1);else if(t===" ")this.activate();else if(t==="ctrl-r"){let r=this.tab==="markets"?this.marketRow():void 0;if(r?.kind==="market"&&!this.adds.has(r.market.source))this.update(r.market.source);else if(r?.kind==="find")this.search()}else if(t==="ctrl-s")this.cycle();else if(this.fields[this.tab].key(t))this.typed()}pasted(t){if(this.phase==="browse"&&!this.help&&!this.asking&&this.leaving===void 0)this.fields[this.tab].paste(t),this.typed()}mouse(t,e){if(this.help){if(t.action==="release")this.help=!1;return}let n=e.point(t),r=n?.target,i=this.phase==="browse"&&this.leaving===void 0&&!this.asking;if(t.action==="wheel"){if(!t.sideways&&(i||this.phase!=="browse"))this.wheel(t.wheel);return}if(!r)return;if(t.action==="press"&&t.button==="left"){if(!i)return;if(r.kind==="tab")this.show(r.tab);else if(r.kind==="chip")this.scopeTo(r.source);else if(r.kind==="row")this.pointRow(r.at)}else if(t.action==="release"&&n?.inside){if(r.kind==="key")this.key(r.key);else if(r.kind==="page"){if(this.phase!=="browse")this.scroll(r.step*this.span());else if(i)this.move(r.step*this.maxItems)}else if(r.kind==="hub"){if(i&&this.hub&&r.tab!==this.hub)this.leave(N0(r.tab))}else if(r.kind==="row"&&i)this.openRow(r,t.count)}}wheel(t){if(this.phase!=="browse"){this.scroll(t);return}let e=this.list();if(e)e.move(t,!1);else this.move(t,!1)}pointRow(t){let e=this.list();if(e){e.point(t);return}this.cursor[this.tab==="markets"?"markets":"errors"]=t,this.watch()}openRow(t,e){let n=this.list();if(n){if(t.part==="box")n.pick();else if(t.part==="fold")n.flip();else if(e===2)n.open()}else if(t.part==="box"||e===2)this.activate()}typed(){let t=this.fields[this.tab].value;if(this.list()?.setFilter(t),this.tab==="markets")this.later("search",aP,()=>this.lookup()),this.watch()}clear(){this.fields[this.tab].value="";let t=this.list();if(t)t.clear();else this.typed()}redraw(){if(this.state==="active")this.screen?.request()}focus(t,e){if(this.tab===t&&this.state!=="submit"&&this.state!=="cancel")this.worn=e,this.paint?.(e)}track(t){this.inflight.add(t);let e=()=>this.inflight.delete(t);return t.then(e,e),t}list(){return this.tab==="catalog"?this.catalog:this.tab==="installed"?this.mine:void 0}active(){return[...this.markets.filter((t)=>!this.removes.has(t.source)),...this.adds.values()]}entries(){let t=this.active().flatMap((i)=>i.entries),e=new Set(t.map((i)=>i.name)),n=new Map,r=this.markets.filter((i)=>this.removes.has(i.source)).flatMap((i)=>i.entries);for(let i of[...this.kept,...r])if(this.installed.has(i.name)&&!e.has(i.name))n.set(i.name,i);return this.order([...t,...n.values()])}mineOf(t){return t.filter((e)=>this.installed.has(e.name))}scoped(t,e){let n=this.scope[e],r=n===void 0?void 0:this.active().find((s)=>s.source===n);if(!r)return this.scope[e]=void 0,t;let i=new Set(r.entries.map((s)=>s.name));return t.filter((s)=>i.has(s.name))}reload(){let t=this.entries();this.catalog.setEntries(this.scoped(t,"catalog")),this.mine.setEntries(this.scoped(this.mineOf(t),"installed"))}chips(t){let e=t==="catalog"?this.entries():this.mineOf(this.entries()),n=this.active().map((r)=>({source:r.source,label:r.id,count:r.entries.filter((i)=>!i.default&&(t==="catalog"||this.installed.has(i.name))).length})).filter((r)=>t==="catalog"||r.count>0||r.source===this.scope[t]);return[{source:void 0,label:"All",count:e.filter((r)=>!r.default).length},...n]}cycle(){let t=this.tab;if(t!=="catalog"&&t!=="installed"||this.active().length<2)return;let e=this.chips(t),n=Math.max(0,e.findIndex((r)=>r.source===this.scope[t]));this.scopeTo(e[(n+1)%e.length]?.source)}scopeTo(t){let e=this.tab;if(e!=="catalog"&&e!=="installed")return;this.scope[e]=t,this.reload(),this.list()?.refocus()}switchTab(t){let e=Qs.findIndex((n)=>n.tab===this.tab);this.show(Qs[(e+t+Qs.length)%Qs.length]?.tab??"catalog")}show(t){if(this.tab=t,this.list()?.refocus(),t==="markets")this.lookup(),this.watch()}move(t,e=!0){let n=this.list();if(n){n.move(t,e);return}let r=this.tab==="markets"?"markets":"errors",i=r==="markets"?this.marketRows().map((s)=>s.kind==="rule"):this.problemRows().map(()=>!1);this.cursor[r]=nm(this.cursor[r],t,i.length,(s)=>i[s]===!0,e),this.watch()}side(t){let e=this.list();if(e){e.fold(t);return}let n=this.tab==="markets"?this.marketRow():void 0;if(n?.kind==="market"&&!ct(n.market.source))if(t===n.market.auto)this.want.delete(n.market.source);else this.want.set(n.market.source,t)}activate(){let t=this.list();if(t){t.pick();return}let e=this.tab==="markets"?this.marketRow():void 0;if(e?.kind==="market")this.toggleMarket(e.market);else if(e?.kind==="add")this.load(e.source,!0);else if(e?.kind==="repo"){let n=this.known(e.source),r=this.marketRows().findIndex((i)=>i.kind==="market"&&i.market===n);if(n&&r>=0)this.cursor.markets=r;else if(!n)this.load(e.source,!0)}else if(e?.kind==="find")this.search()}toggleMarket(t){if(this.adds.has(t.source))this.adds.delete(t.source),this.want.delete(t.source);else if(this.removes.has(t.source))this.removes.delete(t.source);else this.removes.add(t.source);this.reload()}known(t){return[...this.markets,...this.adds.values()].find((e)=>Ms(e.source,t))}load(t,e){let n=this.peeked.get(t);if(n){if(e)this.arrive(t,n);return}if(e)this.staging.add(t);if(this.busy.has(t))return;this.failed.delete(t),this.peekFailed.delete(t),this.busy.set(t,"Fetching…"),this.track(this.io.fetch(t)).then((r)=>{if(this.busy.delete(t),this.peeked.set(t,r),this.staging.delete(t))this.arrive(t,r);this.redraw()},(r)=>{if(this.busy.delete(t),this.staging.delete(t))this.failed.set(t,r.message);else this.peekFailed.set(t,r.message);this.redraw()})}arrive(t,e){let n=this.active().find((r)=>r.id===e.id);if(n)this.failed.set(t,`${e.id} already names the market at ${n.shown}`);else if(ct(t)||t===z)this.stage(e,e.auto);else this.asking=e;this.redraw()}later(t,e,n){this.cancel(t),this.timers.set(t,setTimeout(()=>{if(this.timers.delete(t),this.state!=="submit"&&this.state!=="cancel")n()},e))}cancel(t){clearTimeout(this.timers.get(t)),this.timers.delete(t)}wants(t){return!this.known(t)&&!this.peeked.has(t)&&!this.busy.has(t)&&!this.peekFailed.has(t)}watch(){if(!this.live||this.tab!=="markets")return;let t=pa(this.fields.markets.value);if(t&&this.wants(t))this.later("typed",cP,()=>this.load(t,!1));else this.cancel("typed");let e=this.marketRow();if(e?.kind==="repo"&&this.wants(e.source)){let n=e.source;this.later("focus",uP,()=>{let r=this.marketRow();if(this.tab==="markets"&&r?.kind==="repo"&&r.source===n)this.load(n,!1)})}else this.cancel("focus")}answer(t){let e=this.asking;if(this.asking=void 0,e)this.stage(e,t)}stage(t,e){if(this.adds.set(t.source,t),e===t.auto)this.want.delete(t.source);else this.want.set(t.source,e);this.reload(),this.cursor.markets=Math.max(0,this.marketRows().findIndex((n)=>n.kind==="market"&&n.market.source===t.source))}update(t){if(this.busy.has(t))return;this.failed.delete(t),this.busy.set(t,"Updating…"),this.track(this.io.refresh(t)).then(({market:e,refreshed:n})=>{this.busy.delete(t),this.markets=this.markets.map((r)=>r.source===t?e:r),this.problems=this.problems.filter((r)=>r.source!==t),this.refreshed.push(n),this.reload(),this.redraw()},(e)=>{this.busy.delete(t),this.failed.set(t,`Update failed: ${e.message}`),this.redraw()})}wanted(){let t=this.fields.markets.value.trim();return t&&!pa(t)?t:""}lookup(){if(this.live&&this.searched!==this.wanted())this.search()}search(){let t=this.wanted(),e=++this.asked;this.searched=t,this.searching=!0,this.searchError=void 0,this.track(this.io.search(t||void 0)).then((n)=>{if(e===this.asked)this.searching=!1,this.repos=n,this.watch(),this.redraw()},(n)=>{if(e===this.asked)this.searching=!1,this.searchError=n.message,this.redraw()})}marketRows(){let t=(...s)=>di(s,this.fields.markets.value),e=[...this.markets,...this.adds.values()],n=e.filter((s)=>t(s.id,s.shown,s.source)).map((s)=>({kind:"market",market:s})),r=pa(this.fields.markets.value);if(r&&!e.some((s)=>Ms(s.source,r)))n.push({kind:"add",source:r});let i=(this.repos??[]).map((s)=>({repo:s,source:Zh(s)})).filter(({repo:s,source:o})=>t(o,s.description??""));return n.push({kind:"rule"},...i.length>0?i.map(({repo:s,source:o})=>({kind:"repo",repo:s,source:o})):[{kind:"find"}]),n}marketRow(){let t=this.marketRows();return t[this.at(t,"markets",(e)=>e?.kind==="rule")]}problemList(){let t=new Map([...this.markets,...this.adds.values()].map((e)=>[e.source,e.id]));return[...this.problems.filter((e)=>!(e.update&&e.source&&this.failed.has(e.source))),...[...this.failed].map(([e,n])=>({where:t.get(e)??e,message:n,source:e}))]}problemRows(){return this.problemList().filter((t)=>di([`${t.where} ${t.message}`],this.fields.errors.value))}at(t,e,n=()=>!1){let r=Math.min(this.cursor[e],Math.max(0,t.length-1));if(!n(t[r]))return r;return r>0?r-1:r+1}windowOf(t,e,n,r=()=>!1){let i=this.at(t,e,r);this.cursor[e]=i;let s=(l)=>r(t[l])?1:2,o=(l,f)=>{let d=0;for(let h=l;h<=f;h++)d+=s(h);return d},a=Math.min(this.top[e],i);while(a<i&&o(a,i)>this.maxItems)a+=1;while(a>0&&o(a-1,t.length-1)<=this.maxItems)a-=1;this.top[e]=a;let c=[],u=0;for(let l=a;l<t.length&&u+s(l)<=this.maxItems;l++)c.push(l),u+=s(l);return{lines:c.flatMap((l)=>{let f=n(t[l],l===i,l);return r(t[l])?f:f.map((d)=>Zs(l,"row",d))}),above:a,below:t.length-a-c.length}}dim(t){return this.color?`${A}${t}${ge}`:t}bold(t){return this.color?`${at}${t}${ge}`:t}warn(t){return this.color?`${Vt}${t}\x1B[39m`:t}lit(t,e,n){if(e&&this.color&&t)return`${Be(t.cursor)}▌\x1B[39m ${Ga(t.selection,t.foreground)} ${n} ${At}`;return`${e?"▌ ":" "} ${n}`}status(t){return this.adds.has(t.source)?"Will add":this.removes.has(t.source)?"Will remove":this.busy.get(t.source)??(this.failed.has(t.source)||t.status.startsWith("update failed")?"Update failed":"")}note(t){return` ${this.dim(t)}`}peeking(t){let e=this.peeked.get(t);return e?Rt(e.entries.filter((n)=>!n.default).length):""}marketLine(t,e,n){let r=(s)=>Zs(n,"box",`${s} `);if(t.kind==="rule")return[` ${this.dim(`── On GitHub${this.searching?" · searching…":""} ──────────`)}`];if(t.kind==="market"){let s=t.market,o=this.status(s),a=e?this.bold(s.id):s.id,c=s.entries.filter((l)=>!l.default),u=!ct(s.source)&&(this.want.get(s.source)??s.auto)?` ${this.dim("↻ auto-update")}`:"";return[this.lit(s.entries.find((l)=>!l.default),e,`${r(this.removes.has(s.source)?"○":"●")}${a}${u}${o?` ${this.dim(o)}`:""}`),this.note([s.source===z?"The ttheme catalog":ct(s.source)?s.shown:s.source,Rt(c.length),`${c.filter((l)=>this.installed.has(l.name)).length} installed`,s.status].join(" · "))]}if(t.kind==="add"){let s=this.busy.get(t.source),o=this.failed.get(t.source)??this.peekFailed.get(t.source),a=this.peeked.get(t.source);return[this.lit(void 0,e,`${r("+")}Add ${Z(t.source)}${s?` ${this.dim(s)}`:""}`),o?` ${this.warn(o)}`:this.note(a?`${a.id} · ${this.peeking(t.source)}`:this.live?"Fetching its palettes…":"space fetches its palettes")]}if(t.kind==="find"){let s=this.fields.markets.value.trim(),o=s&&!pa(s),a=!this.searching&&!this.searchError&&this.repos===void 0,c=this.searching?"Searching GitHub…":this.searchError?"GitHub search failed":a?o?`Find "${s}" on GitHub`:"Find markets on GitHub":o?`No market on GitHub matches "${s}"`:"No market on GitHub yet";return[this.lit(void 0,e,`${r("⌕")}${c}`),this.note(this.searchError??(this.searching?"":a?"space searches GitHub":"space searches again"))]}let i=this.busy.get(t.source);return[this.lit(void 0,e,`${r(this.known(t.source)?"●":"○")}${t.source} ${this.dim(`★${t.repo.stargazers_count}`)}${i?` ${this.dim(i)}`:""}`),this.note([this.peeking(t.source),t.repo.description??""].filter(Boolean).join(" · "))]}problemLine(t,e){return[this.lit(void 0,e,`${this.warn("✗")} ${t.where}`),this.note(t.message)]}body(){let t=this.list();if(t){let n=this.fields[this.tab].value;return{...t.window(),empty:n?`No palettes match '${n}'`:this.tab==="installed"?"Nothing installed yet":"No palettes"}}if(this.tab==="markets")return{...this.windowOf(this.marketRows(),"markets",(n,r,i)=>this.marketLine(n,r,i),(n)=>n?.kind==="rule"),empty:""};let e=this.fields.errors.value;return{...this.windowOf(this.problemRows(),"errors",(n,r)=>this.problemLine(n,r)),empty:e?`No problems match '${e}'`:"No problems"}}changes(){return this.adds.size+this.removes.size+this.want.size}dirty(){let{picked:t}=this.result();return this.changes()>0||t.size!==this.installed.size||[...t].some((e)=>!this.installed.has(e))}leave(t){if(this.dirty()){this.leaving=t;return}this.goto=t,this.state="cancel"}steer(t){if(this.phase==="review"){if(t==="enter")this.begin();else if(t==="esc")this.phase="browse"}else if(this.phase==="done"&&(t==="enter"||t==="esc"))this.state="submit";let e=t==="up"?-1:t==="down"?1:Gu(t,this.span());if(e!==void 0)this.scroll(e)}scroll(t){this.offset=Number.isFinite(t)?Math.max(0,this.offset+t):t>0?Number.MAX_SAFE_INTEGER:0,this.redraw()}span(){return Math.max(Gy,this.rows()-(this.hub?1:0)-4)}begin(){this.phase="applying",this.started=!0,this.offset=0,this.log=[],this.working="";let t={say:(e)=>{this.log.push(...e.split(`
|
|
657
|
-
`)),this.redraw()},status:(e)=>{this.working=e,this.redraw()}};this.track(this.io.apply(this.result(),t)).then(()=>this.ended(),(e)=>this.ended(e))}ended(t){this.working="",this.stopped=t,this.phase="done",this.offset=0,this.redraw()}pending(){let t=this.entries().filter((e)=>!e.default);return{names:t.filter((e)=>this.picked.has(e.name)&&!this.installed.has(e.name)),dropped:t.filter((e)=>this.installed.has(e.name)&&!this.picked.has(e.name))}}marketChanges(){let t=[];for(let e of this.adds.values()){let n=e.source!==
|
|
658
|
-
`)}keyBar(t,e){let n=this.color&&this.worn?
|
|
659
|
-
`);return Array.from({length:this.rows()},(e,n)=>t[n]??"")}
|
|
660
|
-
${this.dim("esc cancels")}
|
|
661
|
-
`)}helpRows(){return[["Move","↑↓ home end pgup pgdn"],["Series","←→ · enter on a series"],["Pick","space · a palette, a series, all"],["Filter","Any text · bksp · ctrl-u clears"],["","Each tab keeps its own"],["Tabs","⇧←→ Catalog, Installed, Markets, Errors"],...this.active().length>=2?[["Market","ctrl+s · one market, then all"]]:[],["Markets","space adds or removes · ←→ auto-update"],["","ctrl+r updates it, or searches again"],["Apply","enter reviews and applies · esc cancels"],...this.hub?[["Screens","tab · shift+tab"]]:[],["Close","? esc"]]}helpBox(t,e,n,r){let i=this.helpRows(),s=Math.min(e-2,58),o=Math.floor((e-s)/2),a=`│${" ".repeat(s-2)}│`,c=[`╭─ Help ${"─".repeat(s-9)}╮`,a,...i.map(([l,f])=>`│${ot(` ${this.bold(l.padEnd(10))}${f}`,s-4)} │`),a,`╰${"─".repeat(s-2)}╯`],u=Math.max(0,Math.min(Math.max(r,Math.floor((n-c.length)/2)),n-1-c.length));return t.map((l,f)=>{let d=c[f-u];return d===void 0?l:`${Wp(l,o)}${d}`})}}import{existsSync as LC}from"node:fs";import{existsSync as Aa,mkdirSync as IC,readFileSync as Vm}from"node:fs";import{dirname as RC}from"node:path";class Ne extends Error{}import{closeSync as QH,mkdtempSync as XH,openSync as tF,readSync as eF,rmSync as Gv}from"node:fs";import{homedir as nF,tmpdir as rF}from"node:os";import{join as Bv}from"node:path";import{readFileSync as dP}from"node:fs";var gt={pitch:25,cols:22,rows:9,height:13},Ci={cols:25,rows:21},me={cols:10,rows:3,pitch:12,top:4},he=me.top+me.rows+1,hP=1073741824,mm=2147483648,mP=-1073741826,pP=1600,gP=56,bP=4,Uy=20,wP=50,Wy=[["space","unfolds a set of ×N"],["o","opens the post page in a browser"],["c","switches between cutouts and every post"],["a","opens the advanced filters"],["1-9","turn a tag of the tags row on or off"],["ctrl+v","tries on a picture from the clipboard — or drop one on the window"]];function pm(t){return Math.max(0,Math.floor((t-1)/me.pitch))}function Jn(t,e){let n=e-he-2;return{perRow:Math.max(1,Math.floor((t-1)/gt.pitch)),rowsVis:Math.max(1,Math.floor(n/gt.height)),height:n}}function Du(t,e=!0){if(e)return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`;let n;try{n=dP(t.path).toString("base64")}catch{return}let r=n.match(/.{1,4096}/g)??[""];return r.map((i,s)=>{let o=s<r.length-1?1:0;return s===0?`\x1B_Ga=t,f=100,i=${t.id},m=${o},q=2;${i}\x1B\\`:`\x1B_Gm=${o},q=2;${i}\x1B\\`}).join("")}function Zy(t,e){let n=t.crop===void 0?"":`,x=0,y=${t.crop*e.h},w=${t.cols*e.w},h=${t.rows*e.h}`;return`\x1B[${t.row+1};${t.col+1}H\x1B_Ga=p,i=${t.id},p=${t.id}${n},c=${t.cols},r=${t.rows},C=1,z=${t.z},q=2\x1B\\`}function gm(t){return`\x1B_Ga=d,d=i,i=${t},p=${t},q=2\x1B\\`}function ka(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function Xs(t){return`\x1B[38;2;${rt(t).join(";")}m`}function zu(t){return`\x1B[48;2;${rt(t).join(";")}m`}var um=!1;function qu(t){return um=!0,t.beat}function to(t){return xn[qu(t)%xn.length]}function ft(t){return X(t)}function lm(t,e){if(X(t)<=e)return t;let n="";for(let r of t){if(X(n+r)>e)break;n+=r}return n}function Ur(t){return`\x1B[${30+t}m`}function Li(t,e,n,r){return n?[[`${uo} `,r,void 0,{kind:"link",url:n}],[t,e,n]]:[[t,e]]}function cm(t){let e=pd(t);return e?{kind:"key",key:e}:void 0}function fm(t){return t.reduce((e,[n])=>e+ft(n),0)}function $P(t,e){let n=[],r=e;for(let[i,s,o,a]of t){let c=ft(i);if(c<=r){n.push([i,s,o,a]),r-=c;continue}n.push([`${lm(i,r)}…`,s,o,a]);break}return n}class Ku{parts=[];cols;constructor(t){this.cols=t}put(t,e,n="",r,i){return this.parts.push({col:t,text:e,sgr:n,...r?{link:r}:{},...i?{spot:i}:{}}),t+ft(e)}run(t,e){let n=t;for(let[r,i,s,o]of e)n=this.put(n,r,i,s,o);return n}mark(t,e,n){this.parts.push({col:t,text:" ".repeat(Math.max(0,e)),sgr:"",spot:n,hidden:!0})}zones(t){return this.parts.flatMap(({col:e,text:n,link:r,spot:i})=>{let s=i??(r?{kind:"link",url:r}:void 0),o=e>=0&&e<this.cols?ft(lm(n,this.cols-e)):0;return s&&o>0?[{row:t,col:e,width:o,height:1,target:s}]:[]})}right(t,e){this.run(t-e.reduce((n,[r])=>n+ft(r),0),e)}center(t,e){this.run(Math.floor((t-e.reduce((n,[r])=>n+ft(r),0))/2),e)}render(){let t="";for(let{col:e,text:n,sgr:r,link:i,hidden:s}of this.parts){if(s||e>=this.cols||e<0)continue;let o=lm(n,this.cols-e);t+=`\x1B[${e+1}G${r}${Ua(o,i)}${r?At:""}`}return t}}function kP(t){return t.replace(/_\([^)]*\)?$/,"")}function Qy(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<pP?Vt:A]}function wa(t,e,n,r){let i=[...r.keys??[]],s=r.lead,o=r.right,a=()=>{let l=[...s?[fm(s)]:[],...i.map(([d,h])=>ft(d)+1+ft(h))];return(r.badge?ft(r.badge)+4:0)+l.reduce((d,h)=>d+h,0)+3*Math.max(0,l.length-1)+(o?3+ft(o[0])+1+ft(o[1]):0)};while(a()>e)if(i.length>2)i.splice(-2,1);else if(o)o=void 0;else if(i.length>1)i.splice(-2,1);else break;if(s&&a()>e)s=$P(s,Math.max(0,fm(s)-(a()-e)-1));let c=0;if(r.badge)c=t.put(0,` ${r.badge} `,`\x1B[7;1m${n}`)+2;if([...s?[s]:[],...i.map(([l,f])=>[[l,at,void 0,cm(l)],[` ${f}`,A,void 0,cm(l)]])].forEach((l,f)=>{c=t.run(c+(f?3:0),l)}),o){let l=cm(o[0].split(" ")[0]??"");t.right(e,[[o[0],at,void 0,l],[` ${o[1]}`,A,void 0,l]])}}function yP(t,e){if(t==="d")return A;if(t==="b")return at;if(t==="s")return zu(e.colors.selection);if(t==="c")return zu(e.colors.cursor);let n=/^([BK]?)(\d+)$/.exec(t);if(!n)return"";let r=Number(n[2]),i=(s)=>r<8?s+r:s+52+r;if(n[1]==="K")return`\x1B[30;${i(40)}m`;return`\x1B[${n[1]==="B"?"1;":""}${i(30)}m`}function vP(t,e,n,r,i){let s=ie.indexOf(bi(r.scene)),o=ie.flatMap((c,u)=>[...u?[[" ",""]]:[],[c.name,u===s?at+i:A,void 0,{kind:"scene",scene:u}]]),a=o.reduce((c,[u])=>c+ft(u),0)<=n;t?.run(e,a?o:[[bi(r.scene).name,at+i],[` ${s+1}/${ie.length}`,A]])}function EP(t,e,n,r,i,s,o){let{ansi:a,cursor:c}=s.colors;vP(t[e-2],n,r,s,o);let u=r<r$?3:4;if(r>=56)u=Math.min(7,Math.floor((r+1)/8)-1);let l=n;for(let d=0;d<8;d++)l=(t[e]?.put(l,"▀".repeat(u),Xs(a[d]??c)+zu(a[d+8]??c))??l)+1;let f=e+2;for(let d of bi(s.scene).lines){let h=Dc(d,r);if(!h)continue;if(f>i)return;t[f]?.run(n,h.map(([m,$])=>[m,yP($,s)])),f++}}function SP(t,e,n){let r=[[]];for(let o of t){let a=r[r.length-1];if(a.length===0||ft([...a,o].join(" "))<=e)a.push(o);else if(r.length<n)r.push([o]);else break}let i=r.reduce((o,a)=>o+a.length,0),s=r[r.length-1];while(i<t.length&&s.length>0&&ft([...s,`+${t.length-i}`].join(" "))>e)s.pop(),i--;if(i<t.length)s.push(`+${t.length-i}`);return r.filter((o)=>o.length>0).map((o)=>o.join(" "))}function Ky(t){return t.replace(/^https?:\/\/(?:www\.)?/,"")}function MP(t,e,n,r,i){let s=r.info,o=s?.artists??[],a=Ur(r.tiles[r.focus]?.siteAnsi??r.siteAnsi);[["Post",s?.page?Li(Ky(s.page),"",s.page,a):[["—",A]]],["Source",s?.source?Li(Ky(s.source),"",s.link,i):[["—",A]]],["Artist",[o.length>0?[o.join(" "),""]:["—",A]]]].forEach(([u,l],f)=>{t[e+f]?.put(n,u,A),t[e+f]?.run(n+12,l)})}function OP(t,e,n,r,i,s){let o=s.info,a=s.tiles[s.focus];if(!o||!a)return;let c=s.shown?.id===a.key?s.shown:void 0,u=n+12,l=Math.max(12,r-12),f=[`${a.width}×${a.height}${o.ext?` ${o.ext.toUpperCase()}`:""}`,...c?[Ou(c.bytes)]:[]].join(" · "),d=[o.rating??"—",a.score>0?`★${a.score}`:"",o.posted??""].filter(Boolean).join(" · "),h=(g,b)=>g.length>0?SP(g,l,b).map((y)=>[[y,""]]):[[["—",A]]],m=[["Characters",h(o.characters,2)],["Series",h(o.series,1)],["Tags",h(o.tags,3)],["Rating",[[[d,d==="—"?A:""]]]],["File",[[[f,""],...c?[[" ",""]]:[],...c?Xy(c):[]]]],["Uploader",[[o.uploader?[o.uploader,""]:["—",A]]]]],$=e;for(let[g,b]of m){if($+b.length-1>i)return;t[$]?.put(n,g,A);for(let y of b)t[$]?.run(u,y),$++}}var xP=["Size","Position","Opacity"],IP=[0,3,6];function RP(t,e){let{tune:n,untuned:r}=t;return e===0?n.size!==r.size:e===1?n.at!==r.at:n.opacity!==r.opacity}function NP(t){return t.toFixed(2)}function TP(t,e,n,r,i,s){let o=i.tuning;if(!o)return;let a=i.tiles[i.focus];t[e-3]?.run(n,[[i.palette,at+s],[" Background",A],...a?[[" · ",A],...Li(`${a.site} ${a.id}`,A,a.page||void 0,Ur(a.siteAnsi))]:[]]);let c=Math.max(8,r-n-21),u=20,l=Math.max(100,o.fill);for(let[f,d]of xP.entries()){let h=e+IP[f],m=o.field===f,$=m?at:A;if(m)t[h]?.put(n,"▶",s,void 0,{kind:"field",field:f});t[h]?.put(n+2,d,$,void 0,{kind:"field",field:f});let g;if(f===1){for(let b=1;b<=9;b++){let y=b===i.tune.at,E=t[e+2+Math.floor((b-1)/3)],S=n+12+(b-1)%3*3;E?.mark(S-1,3,{kind:"place",at:b}),E?.put(S,y?"■":"·",y?at+s:A)}g=Ut[i.tune.at-1]??"center"}else{let b;if(f===0){let{size:y}=i.tune;b=y==="fill"?c-1:Math.floor((y-u)*(c-1)/(l-u+1)),g=y==="fill"?"fill":`${y}%`}else b=Math.floor(Math.round(i.tune.opacity*100)*(c-1)/100),g=NP(i.tune.opacity);b=Math.max(0,Math.min(c-1,b)),t[h]?.run(n+12,[["━".repeat(b),s],["●",at],["─".repeat(c-1-b),A]]),t[h]?.mark(n+12,c,{kind:"track",field:f})}if(t[h]?.right(r-2,[[g,$]]),RP(i,f))t[h]?.put(r-1,"↺",m?at+s:A)}}function AP(t,e,n,r,i,s){t[e]?.put(n,`╭${"─".repeat(i-2)}╮`,s);for(let o=e+1;o<e+r-1;o++)t[o]?.put(n,"│",s),t[o]?.put(n+i-1,"│",s);t[e+r-1]?.put(n,`╰${"─".repeat(i-2)}╯`,s)}function dm(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function ba(t){return`${Y[Math.floor(t/dr)]?.name??"local"} ${t%dr}`}function ga(t,e,n){let r=Y[Math.floor(e/dr)],i=ba(e),s=t.indexOf(i);if(!r||s===-1)return[[t,n]];return[[t.slice(0,s),n],...Li(i,n,r.pageUrl(e%dr),Ur(r.ansi)),[t.slice(s+i.length),n]].filter(([a])=>a!=="")}function PP(t,e,n){let r=[{name:"all",moved:!1},...Y].flatMap((s,o)=>{let a=`${s.name}${s.moved?"*":""}`,[c,u]=s.name===n.site?dm(n,a):[` ${a} `,A],l=[c,u,void 0,{kind:"site",tab:o}];return o?[[" ",""],l]:[l]}),i=r.reduce((s,[o])=>s+ft(o),0)<=e;t.run(0,i?r:[dm(n)])}function HP(t,e,n,r){if(n.chips.length===0)return;let i=[["tags ",A]],s=ft("tags "),o=n.chips.length;for(let[a,c]of n.chips.entries()){let u=` ${a+1} ${c.name} `;if(s+ft(u)+1>e-2)break;i.push([u,c.on?`\x1B[7m${r}`:A,void 0,{kind:"chip",index:a}],[" ",""]),s+=ft(u)+1,o--}if(o>0)i.push([`+${o}`,A]);t.run(0,i)}function FP(t,e,n,r,i){t[he-1]?.put(0,"─".repeat(n-1),A);let s=t[me.top-1],o=pm(n),a=r.held.length>o?Math.max(0,o-1):r.held.length;for(let[c,u]of r.held.slice(0,a).entries()){let l=c*me.pitch,f=u.up?at:"";if(s.run(l+1,u.page?Li(String(u.id),f,u.page,Ur(u.ansi)):[["● ",Ur(u.ansi)],[String(u.id),f]]),u.up)for(let d=0;d<me.rows;d++)t[me.top+d]?.put(l,"▌",i);if(u.thumb)e.push({id:hP+c,path:u.thumb,row:me.top,col:l+1,cols:me.cols,rows:me.rows,z:-1})}if(a<r.held.length)s.put(a*me.pitch+1,`+${r.held.length-a}`,A)}function CP(t,e,n,r){if(n.editing!==void 0){let c=t.run(0,[["⌕ ",r],[n.editing,""],["█",r]]),u=n.suggest?.length?" ↑↓ pick enter searches":" enter searches";t.put(c,n.editing?u:` A tag, a post URL or an id, or drop a picture or ctrl+v — ${n.tag||"esc leaves"}`,A);return}let i=t.run(0,[["⌕ ",r,void 0,{kind:"query"}],[n.tag||"Nothing yet — / searches, ctrl+v pastes a picture",n.tag?"":A,void 0,{kind:"query"}]]),s=ii.filter((c)=>!n.block.includes(c)),o=Y.filter((c)=>!n.enabled.includes(c.name)).map((c)=>c.name),a=[n.preset,...n.solo?["solo"]:[],n.order,...n.rating.join("+")==="safe"?[]:[n.rating.join("+")],...s.length>0?[`allows ${s.join("+")}`]:[],...n.narrow.size>0?[`≥${n.narrow.size}px`]:[],...n.narrow.score>0?[`score≥${n.narrow.score}`]:[],...n.narrow.png?["png"]:[],...n.hide.length+n.hideTags.length>0?[`hides ${[...n.hide,...n.hideTags].join("+")}`]:[],...o.length>0?[`all skips ${o.join("+")}`]:[]];if(t.put(i,` ${a.join(" ")}`,A),n.total>0||!n.searching){let c=[[`${n.tiles.length}/${n.checked}`,""]];if(n.checked<n.total)c.push([` of ${n.total}`,A]);t.right(e,c)}}function Xy(t){if(t.cut==="on")return[[`Cut out · ${t.clear}% transparent`,Zi]];if(t.cut==="off")return[["Opaque · x cuts out",Vt]];if(t.cut==="failed")return[["Opaque · no cut-out",Vt]];return[t.clear>0?[`${t.clear}% transparent`,Zi]:["Opaque",Vt]]}function zy(t){return t.site==="all"?"any site":t.site}function hm(t,e){if(t.installing!==void 0)return ga(`${to(t)} Installing ${t.palette} ← ${ba(t.installing)}`,t.installing,Vt);if(t.hint)return[[t.hint,Zi]];if(t.error)return[[t.error,Vt]];if(t.waiting!==void 0)return[[`${t.slow??t.site} asked to slow down · ${t.waiting}s`,Vt]];if(t.fetching){let{id:n,got:r,size:i}=t.fetching;return ga(`${to(t)} Fetching ${ba(n)} · ${xu(r,i)}`,n,Vt)}if(t.cutting!==void 0)return ga(`${to(t)} Cutting out ${ba(t.cutting)}`,t.cutting,Vt);if(t.preparing!==void 0)return ga(`${to(t)} Preparing ${ba(t.preparing)}`,t.preparing,Vt);if(e)return[e];if(t.saved)return ga(t.saved.text,t.saved.key,Zi);if(t.note)return[[t.note,A]];return}function tv(t){if(t.ranking)return"Ranking previews by palette colors";if(t.stage==="check")return t.preset==="cutouts"?"Checking PNG headers":"Loading previews";return"Fetching posts"}function ev(t,e){return t.ranking?`${e}${t.ranking.done}/${t.ranking.total}`:""}function LP(t,e,n,r,i){let{background:s,cursor:o,selection:a}=r.colors,{ranking:c}=r,u=c?Math.round(n*c.done/c.total):-1,l=Math.max(6,Math.round(n*0.22)),f=qu(r)%(Uy*2)/Uy,d=Math.round((n-l)*(0.5-0.5*Math.cos(Math.PI*(f<1?f:2-f)))),h=Bt(s,o,i),m=Bt(s,Bt(a,s,0.15),i),$=Array.from({length:n},(b,y)=>{let E=(u>=0?y<u:y>=d&&y<d+l)?h:m;return y===0||y===n-1?Bt(E,s,0.55):E}),g=0;for(let b=1;b<=n;b++)if(b===n||$[b]!==$[g])t?.put(e+g," ".repeat(b-g),zu($[g])),g=b}function jP(t,e,n,r,i){let{background:s,foreground:o}=i.colors,a=i.loaderFrom===void 0?0:Math.min(1,(qu(i)-i.loaderFrom)/bP),c=e+(n>=5?Math.floor((n-5)/2):0);t[c]?.center(r,[[tv(i),at+Xs(Bt(s,o,a))],[ev(i," "),Xs(Bt(s,Bt(o,s,0.45),a))]]);let u=Math.min(gP,r-8);if(LP(t[c+(n>=3?2:1)],Math.floor((r-u)/2),u,i,a),n<5)return;t[c+4]?.center(r,i.sites.flatMap(({name:l,arrived:f},d)=>[...d?[[" · ",Xs(Bt(s,o,0.25*a))]]:[],[l,Xs(Bt(s,f?Bt(o,s,0.2):o,f?a:0.32*a))]]))}function _P(t,e,n,r,i,s){if(i<=r)return;let o=Math.max(1,Math.round(r*r/i)),a=Math.max(0,Math.min(r-o,Math.round(n.scroll*r/i)));for(let c=0;c<r;c++){let u=c>=a&&c<a+o;t[he+c]?.put(e-1,u?"┃":"│",u?s:A)}}function GP(t,e,n){if(e)return[`${to(t)} ${tv(t)}${ev(t," · ")}`,A];let r=n.filter((s)=>!s.missing),i=r.filter((s)=>s.thumb).length;return i<r.length?[`${to(t)} Loading thumbnails · ${i}/${r.length}`,A]:void 0}function BP(t,e,n,r,i,s,o){let{perRow:a,rowsVis:c,height:u}=Jn(r,i);CP(t[0],r,s,o),PP(t[1],r,s),HP(t[2],r,s,o),FP(t,e,r,s,o);let l=t.map((F,_)=>_>=he&&_<he+u?F:void 0),f=Math.floor(s.scroll/gt.height),d=Math.floor((s.scroll+u-1)/gt.height),h=[];for(let F=f;F<=d;F++){let _=he+F*gt.height-s.scroll;for(let B=0;B<a;B++){let tt=F*a+B,W=B*gt.pitch,Q=s.tiles[tt];if(!Q)continue;h.push(Q);let U=Math.max(_,he),yt=Math.min(_+gt.height,he+u);if(yt>U)n.push({row:U,col:W,width:gt.pitch-1,height:yt-U,target:{kind:"tile",index:tt}});let et=tt===s.focus;if(et)AP(l,_,W,gt.height,gt.pitch-1,o);let Xn=_+1,en=Math.max(Xn,he),nn=Math.min(Xn+gt.rows,he+u);if(Q.thumb&&nn>en)e.push({id:Q.key,path:Q.thumb,row:en,col:W+1,cols:gt.cols,rows:nn-en,...nn-en<gt.rows?{crop:en-Xn}:{},z:-1});let rn=[...s.installed.includes(Q.key)?[["✓ ",Zi]]:[],...Q.page||s.site!=="all"?Li(String(Q.id),et?at:"",Q.page||void 0,Ur(Q.siteAnsi)):[["● ",Ur(Q.siteAnsi)],[String(Q.id),et?at:""]],[" ",""],Qy(Q)],Ca=gt.cols-(Q.mates.length>0?1:0);if(l[_+10]?.run(W+1,fm(rn)>Ca?rn.map(([El,Sl,Ml])=>[El.replace(/^(\S) $/,"$1"),Sl,Ml]):rn),Q.mates.length>0)l[_+10]?.put(W+gt.cols,"≈",o);l[_+11]?.put(W+1,Q.artist?kP(Q.artist).slice(0,gt.cols-8):"—",A);let Dr=[];if(Q.score>0)Dr.push([`★${Q.score}`,A]);if(Q.variants>1)Dr.push([` ×${Q.variants}`,o]);if(Dr.length>0)l[_+11]?.right(W+gt.cols+1,Dr)}}let m=Math.ceil(s.tiles.length/a)*gt.height;_P(t,r,s,u,m,o);let $=Math.max(he,he+m-s.scroll),g=he+u-$,b=s.searching&&g>=2;if(b)jP(l,$,g,r-1,s);let y=s.searching&&s.tiles.length===0;if(y&&!s.error){let[F,_]=Wy[Math.floor(qu(s)/wP)%Wy.length];t[i-2]?.run(0,[["Tip ",A],[F,at],[` ${_}`,A]])}let E=s.top*a,S=s.tiles.length-(s.top+c)*a,x=[...E>0?[`↑ ${E} above`]:[],...S>0?[`↓ ${S} more`]:[]];if(x.length>0)t[i-2]?.put(0,x.join(" "),A);if(!s.searching&&s.tiles.length===0&&!s.error&&s.tag)t[he+1]?.put(0,s.preset==="cutouts"?`No transparent cutouts of ${s.tag} on ${zy(s)} — c searches every post, tab tries ${s.nextSite}`:`No posts of ${s.tag} on ${zy(s)} — tab tries ${s.nextSite}`,A);let R=GP(s,b,h),N=hm(s,R);return wa(t[i-1],r,o,{badge:"IMAGE SEARCH",lead:N,keys:y&&N?.[0]===R?[]:[["←↑↓→","move"],["enter","try on"],["tab","site"],["ctrl+v","picture"],["s","settings"],["/","search"],["?","keys"]],right:["esc","back"]}),b}function UP(t,e,n,r,i,s){let o=i.tiles[i.focus];if(!o)return;let a=i.shown?.id===o.key?i.shown:void 0,c=[dm(i,o.site,o.siteAnsi),[" ",""],...Li(String(o.id),at,o.page||void 0,Ur(o.siteAnsi)),[" ",""],Qy(o)];if(o.score>0)c.push([` · ★${o.score}`,A]);if(a)c.push([` · ${Ou(a.bytes)}`,A]);if(a){if(c.push([" ",""],...Xy(a)),i.coloring==="original")c.push([" · own colors",A])}if(t[0]?.run(0,c),o.mates.length>0)t[0]?.right(n,[["≈ ",s],[o.mates.join(" "),A]]);if(MP(t,1,2,i,s),i.tuning)TP(t,8,2,2+Math.min(n-4,60),i,s);else if(i.details)OP(t,5,2,Math.min(n-4,Math.max(48,Math.floor(n*0.55))),r-2,i);else EP(t,7,2,n-4,r-2,i,s);if(i.shown)e.push({id:mm+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:mP});if(i.tuning){wa(t[r-1],n,s,{badge:"IMAGE EDIT",lead:hm(i),keys:[["↑↓","field"],["←→","step"],["=","reset"],["+","reset all"],i.tuning.field===1?["1-9","place"]:["⇧←→","×10"],["c","colors"],["enter","keep"]],right:["esc","undo"]});return}let u=hm(i);wa(t[r-1],n,s,{badge:"IMAGE PREVIEW",lead:u,keys:i.installing===void 0?[["←→","browse"],["enter","install"],["t","tune"],["c","colors"],["i","details"],...i.details?[]:[["⇧←→","example"]],...i.shown?.cut==="on"||i.shown?.cut==="off"?[["x","cut out"]]:[],["?","keys"]]:[],right:i.installing===void 0?["esc","grid"]:void 0})}var WP=[["Field","↑↓ size, position, opacity"],["Step","←→ · ⇧←→ ×10"],["Place","1-9 the nine positions"],["Reset","= this field back to its default · + every field"],["Colors","c the palette's tone or its own colors, opacity back to its default"],["Keep","enter back to try, installed with the picture"],["Undo","esc"],["Close","? esc"]],KP={grid:[["Move","←↑↓→ j k home end pgup pgdn"],["Try on","enter"],["Site",`tab shift+tab all, ${Y.map((t)=>t.name).join(", ")}`],["Posts","c cutouts or every post"],["Search","/ a tag, a post URL or an id"],["Tags","1-9 turn a tag of the tags row on or off — the palette's own, then danbooru's related characters"],["Your own","ctrl+v or v a picture from the clipboard · drop one on the window or paste its link"],["Unfold","space a set of ×N"],["Open","o the post page in a browser"],["Settings","s rating, block, posts, solo, order, sets, remove bg"],["Advanced","a or Advanced › in settings min score, min size, sites, hide, hide tags, PNG only"],["Back","esc returns to preview"],["Close","? esc"]],try:[["Browse","←→"],["Install","enter"],["Tune","t size, position and opacity, installed with the picture"],["Colors","c the palette's tone or its own colors, installed with the picture"],["Details","i characters, series, tags, rating and file, under Post, Source and Artist"],["Example",`⇧←→ ${ie.map((t)=>t.name.toLowerCase()).join(", ")}`],["Cut out","x the background off or on, on an opaque picture"],["Open","o the post page in a browser"],["Your own","ctrl+v or v a picture from the clipboard · drop one on the window"],["Grid","esc"],["Close","? esc"]]},bm=6,zP=24;function $a(t){return[...t.settings.flatMap((e,n)=>Boolean(e.advanced)===t.advanced?[n]:[]),t.settings.length]}function DP(t){return t.replace(/^[A-Z](?=[a-z])/,(e)=>e.toLowerCase())}function Dy(t){let e=t.settings.filter((n)=>Boolean(n.advanced)!==t.advanced).map((n)=>DP(n.label));return`${t.advanced?"Back to":"More filters:"} ${e.join(", ")} — enter opens the page, or a from any row`}function nv(t,e,n){let r=t.indexOf(e);if(r!==-1)return t[(r+n+t.length)%t.length];let i=Number(e)||0;return(n>0?t.find((o)=>(Number(o)||0)>i):[...t].reverse().find((o)=>(Number(o)||0)<i))??t[n>0?0:t.length-1]}function Fi(t,e){let n=[],r="";for(let i of t.split(" "))if(r&&ft(r)+1+ft(i)>e)n.push(r),r=i;else r=r?`${r} ${i}`:i;return r?[...n,r]:n}function qP(t){if(t.entry!=="number"||t.choices.includes(t.value))return t.choices;let e=t.choices.findIndex((n)=>(Number(n)||0)>Number(t.value));return e===-1?[...t.choices,t.value]:[...t.choices.slice(0,e),t.value,...t.choices.slice(e)]}function YP(t,e,n,r){let i=`\x1B[7;${30+r}m`,s=e&&n!==void 0;if(t.entry==="text")return[{text:` ${s?`${n}█`:t.value||"none"} `,sgr:s||e&&t.value?i:t.value?"":A}];let o=s?[]:t.value.split(" "),a=(s?t.choices:qP(t)).map((c,u)=>{let l=o.includes(c),f=t.multi&&e&&u===t.cursor?"4;":"";return{text:t.multi?` ${l?"[x]":"[ ]"} ${c} `:` ${c} `,sgr:l?e?`\x1B[${f}7;${30+r}m`:"":f?`\x1B[4m${A}`:A,choice:c}});return s?[...a,{text:` ${n}█ `,sgr:i}]:a}function qy(t){if(t.entry==="text")return[{text:" ".repeat(zP),sgr:""}];let e=t.choices.map((n)=>({text:t.multi?` [x] ${n} `:` ${n} `,sgr:""}));return t.entry==="number"?[...e,{text:` ${"0".repeat(bm)}█ `,sgr:""}]:e}function JP(t){return t.reduce((e,n)=>e+ft(n.text)+1,0)-1}function Yy(t,e){let n=[[]],r=0;for(let i of t){let s=ft(i.text)>e?{...i,text:` …${Array.from(i.text).slice(-(e-2)).join("")}`}:i;if(r>0&&r+ft(s.text)>e)n.push([]),r=0;n[n.length-1]?.push(s),r+=ft(s.text)+1}return n}function Jy(t){if(t.multi&&t.choices.every((e)=>t.default.split(" ").includes(e)))return"Default all";return`Default ${t.default&&t.default!==t.multi?.none?t.default:"none"}`}function Vy(t){if(!t.tag)return"";if(!t.counts)return`${t.tag}: counting…`;let e=t.counts.map(({site:n,count:r})=>`${n} ${r===void 0?"no count":r.toLocaleString("en-US")}`);return`${t.tag}: ${e.join(" · ")}`}function VP(t,e){let n=t.advanced?"basic":"advanced";if(!e)return{keys:[["↑↓","setting"],["enter",n],["s","save"]],right:["esc","undo"]};if(t.typing!==void 0)return{keys:[["⌫","erase"],["enter","done"]],right:["esc","cancel"]};if(e.entry)return{keys:[["↑↓","setting"],...e.entry==="number"?[["←→","step"]]:[],["a",n],["enter","type"],["s","save"]],right:["esc","undo"]};return{keys:[["↑↓","setting"],["←→","value"],["a",n],...e.multi?[["space","toggle"]]:[],["enter","save"]],right:["esc","undo"]}}function ZP(t,e,n,r,i){let s=r.panel??0,o=r.settings.length,c=6+Math.max(...r.settings.map((U)=>ft(U.label))),u=Math.max(...r.settings.map((U)=>ft(Jy(U)))),l=c+Math.max(...r.settings.map((U)=>JP(qy(U))))+u+5,f=Math.min(e-2,Math.max(48,l)),d=f-c-u-5,h=f-7,m=[!1,!0].map((U)=>({advanced:U,rows:$a({settings:r.settings,advanced:U}).slice(0,-1)})),$=r.settings.map((U)=>Yy(qy(U),d).length),g=Math.max(...m.map((U)=>U.rows.reduce((yt,et)=>yt+$[et],0))),b=Math.max(...m.map((U)=>Fi(Dy({settings:r.settings,advanced:U.advanced}),h).length),...r.settings.map((U)=>Fi(U.about,h).length)),y=`${r.tag}: ${Y.map((U)=>`${U.name} 0,000,000`).join(" · ")}`,E=r.tag?Math.max(Fi(y,h).length,Fi(Vy(r),h).length):0,S=g+b+E+8,x=Math.floor((e-f)/2),R=Math.max(1,Math.floor((n-1-S)/2)),N=`\x1B[7;${30+r.siteAnsi}m`;t[R]?.put(x,`╭─ Settings ${"─".repeat(Math.max(0,f-13))}╮`);for(let U=R+1;U<R+S-1;U++)t[U]?.put(x,`│${" ".repeat(f-2)}│`);let F=R+2;for(let U of $a(r).slice(0,-1)){let yt=r.settings[U],et=U===s;if(et)t[F]?.put(x+2,"▶",i);if(t[F]?.mark(x+2,c-3,{kind:"setting",index:U}),t[F]?.put(x+4,yt.label,et?at:""),yt.value!==yt.default)t[F]?.right(x+f-3,[[Jy(yt),A]]);Yy(YP(yt,et,r.typing,r.siteAnsi),d).forEach((Xn,en)=>{let nn=x+c;for(let rn of Xn)nn=t[F+en].put(nn,rn.text,rn.sgr,void 0,{kind:"choice",index:U,choice:rn.choice}),nn+=1}),F+=$[U]}let _=m.find((U)=>U.advanced!==r.advanced)?.rows??[],B=t[R+3+g];if(s===o)B.put(x+2,"▶",i);let tt=B.put(x+3,r.advanced?" ‹ Basic ":" Advanced › ",s===o?N:at,void 0,{kind:"setting",index:o});if(_.some((U)=>r.settings[U]?.value!==r.settings[U]?.default))B.put(tt+1,"•",A);t[R+5+g]?.put(x+2,"─".repeat(f-4),A),Fi(r.settings[s]?.about??Dy(r),h).forEach((U,yt)=>{t[R+6+g+yt]?.put(x+4,U)}),Fi(Vy(r),h).forEach((U,yt)=>{t[R+6+g+b+yt]?.put(x+4,U,A)}),t[R+S-1]?.put(x,`╰${"─".repeat(f-2)}╯`);let{keys:W,right:Q}=VP(r,r.settings[s]);wa(t[n-1],e,i,{keys:W,right:Q})}function QP(t,e,n,r,i){let s=r.tuning?WP:KP[r.mode],o=Math.min(e-2,Math.max(50,...s.map(([,d])=>ft(d)+16))),a=s.map(([d,h])=>({label:d,parts:Fi(h,o-16)})),c=a.reduce((d,{parts:h})=>d+h.length,0)+4,u=Math.floor((e-o)/2),l=Math.max(2,Math.floor((n-c)/2));t[l]?.put(u,`╭─ Help ${"─".repeat(o-9)}╮`);for(let d=l+1;d<l+c-1;d++)t[d]?.put(u,`│${" ".repeat(o-2)}│`);let f=l+2;for(let{label:d,parts:h}of a){t[f]?.put(u+3,d,at);for(let m of h)t[f]?.put(u+13,m),f++}t[l+c-1]?.put(u,`╰${"─".repeat(o-2)}╯`),wa(t[n-1],e,i,{badge:"HELP",right:["? esc","close"]})}function XP(t,e,n){let r=e.suggest??[],i=r.map((a)=>a.alias??(a.count>0?String(a.count):a.palette??"0")),s=Math.max(...r.map((a)=>ft(a.value))),o=Math.max(7,...i.map(ft));r.forEach((a,c)=>{let u=c===e.pick,l=t[1+c];l?.run(0,[[u?"▸ ":" ",n,void 0,{kind:"suggest",index:c}],[a.value,u?at+n:"",void 0,{kind:"suggest",index:c}]]),l?.right(2+s+2+o,[[i[c],A]])})}function Wu(t,e=[]){return[...e,...t.flatMap((n,r)=>n.zones(r))]}function wm(t,e,n){let r=Array.from({length:n},()=>new Ku(e)),i=[],s=[],o=Xs(t.colors.cursor);if(um=!1,e<Ci.cols||n<Ci.rows)return r[0]?.put(0,"ttheme find",at+o),r[1]?.put(0,`Needs ${Ci.cols}×${Ci.rows} — now ${e}×${n}`),r[2]?.put(0,"esc quits",A,void 0,{kind:"key",key:"esc"}),{lines:r.map((c)=>c.render()),images:i,zones:Wu(r),loader:!1,tick:!1};let a=!1;if(t.mode==="try")UP(r,i,e,n,t,o);else a=BP(r,i,s,e,n,t,o);if(t.mode==="grid"&&t.editing!==void 0&&t.suggest?.length){for(let c=1;c<n-1;c++)r[c]=new Ku(e);return XP(r,t,o),{lines:r.map((c)=>c.render()),images:[],zones:Wu(r),loader:!1,tick:!1}}if(t.help||t.panel!==void 0){let c=t.mode==="try"?i:[];for(let u=0;u<n;u++)r[u]=new Ku(e);if(t.help)QP(r,e,n,t,o);else ZP(r,e,n,t,o);return{lines:r.map((u)=>u.render()),images:c,zones:Wu(r),loader:!1,tick:!1}}return{lines:r.map((c)=>c.render()),images:i,zones:Wu(r,s),loader:a,tick:um}}import{execFile as tH}from"node:child_process";import{createHash as ov}from"node:crypto";import{existsSync as eH,mkdtempSync as nH,readFileSync as Zu,rmSync as rH,statSync as av,writeFileSync as cv}from"node:fs";import{homedir as iH,tmpdir as sH}from"node:os";import{join as Yu}from"node:path";import{fileURLToPath as oH}from"node:url";import{promisify as aH}from"node:util";var yn=aH(tH),Ju=67108864,cH=4096,ym=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],uH=["text/uri-list","text/plain;charset=utf-8","text/plain"],$m=[...ym,"text/uri-list","text/plain"];function lH(t){try{return av(t).isFile()}catch{return!1}}function fH(t){let e=[],n="",r="",i=!1;for(let s=0;s<t.length;s++){let o=t[s];if(r==="'")if(o==="'")r="";else n+=o;else if(r==='"')if(o==='"')r="";else if(o==="\\"&&'"\\$`'.includes(t[s+1]??""))n+=t[++s];else n+=o;else if(o==="\\"&&s+1<t.length)n+=t[++s],i=!0;else if(o==="'"||o==='"')r=o,i=!0;else if(/\s/.test(o)){if(i)e.push(n);n="",i=!1}else n+=o,i=!0}if(i)e.push(n);return e}function rv(t){if(/^file:\/\//i.test(t))try{return oH(t)}catch{return}if(t.startsWith("~/"))return Yu(iH(),t.slice(2));return t.startsWith("/")?t:void 0}function eo(t,e=lH){let n=[];for(let r of t.replace(/\r\n?/g,`
|
|
638
|
+
`)}`:" passes the gate"}`)}for(let h of r)console.error(` ✗ ${h}`);for(let h of i)console.log(` ! ${h}`);let f=(h,m)=>`${h} ${m}${h===1?"":"s"}`;return console.log(`
|
|
639
|
+
${u} · ${Tt(l.length)} · ${f(r.length,"error")} · ${f(i.length,"warning")}`),r.length>0?1:0}async function T1(t,e){switch(t){case void 0:vH();return;case"add":await $H(y1(t,e));return;case"remove":kH(y1(t,e));return;case"search":await SH(e);return;case"init":await MH(e);return;case"check":return xH(e);default:throw Error(`unknown market action ${t} — ${hH.join(", ")}, or none to list them`)}}function y1(t,e){if(!e)throw Error(t==="add"?"market add takes a repository or a folder: ttheme market add alice/ttheme-dust":"market remove takes a market name — `ttheme market` lists them");return e}function H1(t,e){let n=Vr(t,e);return`${n} — ${Tt(Xe(e,n,Na(t),ce(!1)).length)}, read in place`}function C1(t){return[...t].length===1&&t>=" "&&t!==""}function OH(t){return[...t.replace(/[\r\n\t]+/g," ")].filter(C1).join("")}function Ki(t,e,n=()=>!0){if(e==="backspace")return[...Ed.segment(t)].slice(0,-1).map((r)=>r.segment).join("");if(e==="ctrl-u")return"";if(e==="ctrl-w"||e==="alt-backspace")return t.replace(/\S*\s*$/,"");return C1(e)&&n(e)?t+e:void 0}class Zr{value;constructor(t=""){this.value=t}key(t){let e=Ki(this.value,t);if(e===void 0)return!1;return this.value=e,!0}paste(t){this.value+=OH(t)}}import{performance as IH}from"node:perf_hooks";import{StringDecoder as RH}from"node:string_decoder";var PH=30,L1=50,NH=500,AH=5,F1=Buffer.from("\x1B[M"),nl="\x1B]1337;ReportCellSize\x07\x1B[16t\x1B[14t\x1B[18t",z1="\x1B[?1016$p\x1B[16t",D1={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end","1~":"home","7~":"home","3~":"delete","4~":"end","8~":"end","5~":"pgup","6~":"pgdn",I:"focus-in",O:"focus-out",Z:"shift-tab","1;2C":"shift-right","1;2D":"shift-left"},TH={"\r":"enter","\n":"enter","\t":"tab","\b":"backspace","":"backspace","\x1B":"esc","\x00":"ctrl-space"},j1=/\[([0-?]*)([ -/]*)([@-~])/y,HH=/^\[[0-?]*[ -/]*$/,_1=/\[(<-?\d+;-?\d+;-?\d+)([Mm])/y,CH=/^\[<[-\d;]*$/,B1=/\](\d+)/y,LH=/^\]\d*$/,G1=/\]\d+;/y,FH=/^1337;ReportCellSize=([\d.]+);([\d.]+)(?:;([\d.]+))?$/,jH=/^(1[0-2]|17|4;\d{1,3});(rgba?:[0-9a-fA-F/]+)$/,q1="\x1B[200~",el="\x1B[201~";function _H(t){let e=TH[t];if(e)return e;let n=t.codePointAt(0)??0;if(n<27)return`ctrl-${String.fromCharCode(n+96)}`;return n<32?void 0:t}function hs(t){return{kind:"key",key:t}}function ms(t){return{events:[hs("esc")],end:t+1}}function BH(t){let e={};for(let n of t.split(":")){let r=n.indexOf("=");if(r>0)e[n.slice(0,r)]=n.slice(r+1)}return e}var GH=["left","middle","right",void 0];function _m(t,e,n,r){if(!Number.isInteger(t)||t<0||t>=128||!(e>=0)||!(n>=0))return;let i=t&3,o={kind:"mouse",row:n,col:e,shift:(t&4)!==0,alt:(t&8)!==0,ctrl:(t&16)!==0};if(t&64)return{...o,action:"wheel",button:void 0,wheel:i%2===0?-1:1,sideways:i>=2,count:0};let s=GH[i],a=t&32?s?"drag":"move":r||!s?"release":"press";return{...o,action:a,button:s,wheel:0,sideways:!1,count:a==="press"?1:0}}function UH(t,e,n){let r=[],i=e;while(r.length<3&&i<t.length){let u=t.codePointAt(i);r.push(u),i+=u>65535?2:1}if(r.length<3)return n?{events:[],end:t.length}:void 0;let[o=0,s=0,a=0]=r,c=Math.max(o,s,a)<128?_m(o-32,s-33,a-33,!1):void 0;return{events:c?[c]:[],end:i}}function WH(t,e,n,r,i){let o=Math.max(0,e)/i.w,s=Math.max(0,n)/i.h,a=Math.floor(o),c=Math.floor(s),u=_m(t,a,c,r);return u&&{...u,fx:o-a,fy:s-c}}function U1(t,e,n,r){if((n==="M"||n==="m")&&e===""&&t.startsWith("<")){let[o=-1,s=0,a=0]=t.slice(1).split(";").map(Number),c=r?WH(o,s,a,n==="m",r):_m(o,s-1,a-1,n==="m");return c?[c]:[]}if(n==="t"&&e===""){let[o,s=0,a=0]=t.split(";").map(Number),c=o===6?"cell":o===4?"window":o===8?"grid":void 0;return c?[{kind:"size",of:c,h:s,w:a}]:[]}if(n==="y"&&e==="$"&&t.startsWith("?")){let[o=0,s=0]=t.slice(1).split(";").map(Number);return[{kind:"mode",mode:o,value:s}]}if(n==="c"&&t.startsWith("?"))return[{kind:"attributes"}];let i=e===""?D1[`${t}${n}`]:void 0;return i?[hs(i)]:[]}function KH(t,e,n,r){_1.lastIndex=e+1;let i=_1.exec(t);if(i)return{events:U1(i[1],"",i[2],r),end:e+1+i[0].length};j1.lastIndex=e+1;let o=j1.exec(t);if(!o){let d=t.slice(e+1);return!n&&(HH.test(d)||CH.test(d))?void 0:ms(e)}let[s,a="",c="",u=""]=o,l=e+1+s.length;if(a===""&&c===""&&u==="M")return UH(t,l,n);if(a==="200"&&u==="~"){let d=t.indexOf(el,l);if(d===-1)return n?{events:[{kind:"paste",text:t.slice(l)}],end:t.length}:void 0;return{events:[{kind:"paste",text:t.slice(l,d)}],end:d+el.length}}return{events:U1(a,c,u,r),end:l}}function zH(t){let e=FH.exec(t);if(e){let s=Number(e[3]??1);return[{kind:"size",of:"cell",h:Math.round(Number(e[1])*s),w:Math.round(Number(e[2])*s)}]}let n=jH.exec(t);if(n)return[{kind:"color",code:n[1],value:n[2]}];let[r="",i="",...o]=t.split(";");return[{kind:"osc",code:r,meta:BH(i),payload:o.join(";")}]}function DH(t,e,n){B1.lastIndex=e+1;let r=B1.exec(t),i=r?t[e+1+r[0].length]:void 0;if(i!==";"&&i!=="\x07"&&i!=="\x1B")return!n&&LH.test(t.slice(e+1))?void 0:ms(e);let o=[t.indexOf("\x07",e),t.indexOf("\x1B\\",e+2)].filter((a)=>a!==-1);if(o.length===0)return n?{events:[],end:t.length}:void 0;let s=Math.min(...o);return{events:zH(t.slice(e+2,s)),end:s+(t[s]==="\x07"?1:2)}}function qH(t,e,n){let r=t[e+2];if(r===void 0)return n?ms(e):void 0;if(!/^[A-Za-z]$/.test(r))return ms(e);let i=D1[r];return{events:i?[hs(i)]:[],end:e+3}}function YH(t,e,n,r){let i=t[e+1];if(i===void 0)return n?ms(e):void 0;if(i==="[")return KH(t,e,n,r);if(i==="]")return DH(t,e,n);if(i==="O")return qH(t,e,n);if(i==="")return{events:[hs("alt-backspace")],end:e+2};if(/^[a-z]$/.test(i))return{events:[hs(`alt-${i}`)],end:e+2};return ms(e)}function W1(t,e=!1,n){let r=[],i=0;while(i<t.length){if(t[i]==="\x1B"){let a=YH(t,i,e,n);if(!a)return{events:r,rest:t.slice(i)};r.push(...a.events),i=a.end;continue}let o=String.fromCodePoint(t.codePointAt(i)),s=_H(o);if(s)r.push(hs(s));i+=o.length}return{events:r,rest:""}}function JH(t){let e=t.indexOf(F1);if(e===-1)return{bytes:t,carry:void 0};let n=[],r=0;while(e!==-1&&e+6<=t.length){n.push(t.subarray(r,e));let[i=0,o=0,s=0]=t.subarray(e+3,e+6);if(o>32&&s>32)n.push(Buffer.from(`\x1B[<${i-32};${o-32};${s-32}M`));r=e+6,e=t.indexOf(F1,r)}return n.push(t.subarray(r,e===-1?t.length:e)),{bytes:Buffer.concat(n),carry:e===-1?void 0:t.subarray(e)}}function K1(t){return G1.lastIndex=1,t.startsWith(q1)||t.startsWith("\x1B]")&&G1.test(t)}function VH(t,e){let n=t.slice(-el.length)+e;return t.startsWith(q1)?n.includes(el):n.includes("\x07")||n.includes("\x1B\\")}class Bm{held="";timer;carry;pressed;wheeled;utf8=new RH("utf8");burst;cell;take;constructor(t,e=()=>!1,n=()=>{return}){this.burst=e,this.cell=n,this.take=(r)=>{let i=this.counted(r);if(i.length>0)t(i)}}counted(t){let e=IH.now();return t.filter((n)=>{if(n.kind!=="mouse")return!0;if(n.action==="wheel"){let o=n.wheel*(n.sideways?2:1),s=this.wheeled;if(s!==void 0&&s.way===o&&e-s.at<AH)return!1;return this.wheeled={at:e,way:o},!0}if(n.action==="release")n.count=this.pressed?.count??0;if(n.action!=="press"||!n.button)return!0;let r=this.pressed,i=r!==void 0&&r.button===n.button&&r.row===n.row&&Math.abs(r.col-n.col)<=1&&e-r.at<=NH;return n.count=i?r.count+1:1,this.pressed={at:e,button:n.button,row:n.row,col:n.col,count:n.count},!0})}feed(t){clearTimeout(this.timer);let e=typeof t==="string"?t:this.bytes(t);if(this.carry)this.wait(L1);if(!this.held&&!e.includes("\x1B")&&this.burst(e)){this.take([{kind:"paste",text:e}]);return}if(K1(this.held)&&!VH(this.held,e)){this.held+=e;return}let{events:n,rest:r}=W1(this.held+e,!1,this.cell());if(this.held=r,r&&!K1(r))this.wait(r.length===1?PH:L1);if(n.length>0)this.take(n)}bytes(t){let{bytes:e,carry:n}=JH(this.carry?Buffer.concat([this.carry,t]):t);return this.carry=n,this.utf8.write(e)}wait(t){clearTimeout(this.timer),this.timer=setTimeout(()=>this.flush(),t)}flush(){clearTimeout(this.timer),this.carry=void 0;let{events:t}=W1(this.held,!0,this.cell());if(this.held="",t.length>0)this.take(t)}stop(){clearTimeout(this.timer),this.held="",this.carry=void 0}}class Ta{window;grid;see(t){if(t.kind!=="size")return;if(t.of==="cell")return{w:t.w,h:t.h};if(t.of==="window")this.window=t;else this.grid=t;let e=this.window,n=this.grid;return e&&n&&n.h>0&&n.w>0?{h:Math.floor(e.h/n.h),w:Math.floor(e.w/n.w)}:void 0}}class Gm{known=!1;cell;see(t){if(t.kind==="mode"&&t.mode===1016)this.known=t.value===1||t.value===2;else if(t.kind==="size"&&t.of==="cell"&&t.w>0&&t.h>0)this.cell={w:t.w,h:t.h};else if(t.kind==="attributes")return{cell:this.known?this.cell:void 0};return}}var il={on:"\x1B[?1049h",off:"\x1B[?1049l"},Pn={on:"\x1B[?25l",off:"\x1B[?25h"},Qr={on:"\x1B[?7l",off:"\x1B[?7h"},rr={on:"\x1B[?2004h",off:"\x1B[?2004l"},X1={on:"\x1B[?1004h",off:"\x1B[?1004l"},ZH={on:"\x1B[?1000h\x1B[?1002h\x1B[?1006h",off:"\x1B[?1006l\x1B[?1002l\x1B[?1000l"},Y1={on:"\x1B[?1016h",off:"\x1B[?1016l\x1B[?1006h"};function Xr(t=process.env){return t.TTHEME_MOUSE==="off"?[]:[ZH]}var tv={SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGTERM:15},QH=3000;class Ca extends Error{exit;constructor(t){super(t);this.exit=128+tv[t]}}var Rn=[],zi=new Map,Ha=new Map,J1;function V1(t){return Rn.findLast((e)=>e.input===t)}var Z1;function ev(t){for(let e of[...Rn].reverse())e.abort(t);if(!Z1)Z1=setTimeout(()=>{nv(),process.exit(t instanceof Ca?t.exit:1)},QH).unref()}var XH=Object.fromEntries(Object.keys(tv).map((t)=>[t,()=>ev(new Ca(t))]));function nv(){for(let t of[...Rn].reverse())t.close()}function tC(){for(let t of Rn)t.reassert();Rn.at(-1)?.redraw()}function Q1(t){let e=t?"on":"off";for(let[n,r]of Object.entries(XH))process[e](n,r);if(process[e]("uncaughtException",ev),process[e]("exit",nv),process.platform!=="win32")process[e]("SIGCONT",tC)}function rl(){}class rv{input;output;failed;modes=[];assumed;owned=[];keys;tty;take;resized;queued=[];asking;reject=rl;open=!0;aborted=!1;constructor(t={}){if(this.input=t.input??process.stdin,this.output=t.output??process.stdout,this.tty=this.output.isTTY===!0&&this.input.isTTY===!0,this.assumed=t.assume??[],this.keys=new Bm((r)=>this.deliver(r),t.burst,()=>zi.has(Y1)?J1:void 0),this.failed=new Promise((r,i)=>{this.reject=i}),this.failed.catch(rl),this.tty&&!Rn.some((r)=>r.tty))Q1(!0);Rn.push(this);let e="";for(let r of this.assumed)if(!zi.has(r))e+=r.on;for(let r of t.modes??[])e+=this.claim(r);this.write(e);let n=Ha.get(this.input)??0;if(n===0)this.input.setRawMode?.(!0);Ha.set(this.input,n+1),this.input.on("data",this.received),this.input.resume(),this.output.on("resize",this.resizing),this.output.on("error",rl)}hold(t){this.write(this.claim(t))}pixels(t){J1=t,this.hold(Y1)}get cols(){return this.output.columns||80}get rows(){return this.output.rows||24}write(t){if(t&&this.open)this.output.write(t)}listen(t){this.take=t;let e=this.queued;if(this.queued=[],e.length>0)t(e)}onResize(t){this.resized=t}until(t){return Promise.race([t,this.failed])}loop(t,e=()=>{}){return this.until(new Promise((n)=>{let r=!1;this.listen((i)=>{for(let o of i){let s=r?void 0:t(o);if(s!==void 0)r=!0,n(s)}if(!r)e()})}))}ask(t,e,n,r=!0){return new Promise((i)=>{let o={hold:r,pick:(c)=>{let u=e(c);if(u===void 0)return!1;return s(u),!0}},s=(c)=>{if(clearTimeout(a),this.asking===o)this.asking=void 0;i(c),this.release()},a=setTimeout(()=>s(void 0),n);this.asking=o,this.write(t)})}abort(t){if(this.aborted)return;this.aborted=!0,this.keys.stop(),this.reject(t)}redraw(){this.resized?.()}reassert(){if(this.open)this.input.setRawMode?.(!0),this.write([...this.assumed,...this.owned].map((t)=>t.on).join(""))}close(){if(!this.open)return;this.keys.stop(),this.input.off("data",this.received),this.output.off("resize",this.resizing);let t="";for(let n of[...this.modes].reverse()){let r=(zi.get(n)??1)-1;if(r===0)zi.delete(n),t+=n.off;else zi.set(n,r)}this.write(t),this.open=!1;let e=(Ha.get(this.input)??1)-1;if(e===0)Ha.delete(this.input),this.input.setRawMode?.(!1),this.input.pause();else Ha.set(this.input,e);if(this.output.off("error",rl),Rn.splice(Rn.indexOf(this),1),this.tty&&!Rn.some((n)=>n.tty))Q1(!1)}received=(t)=>{if(V1(this.input)===this&&!this.aborted)this.keys.feed(t)};resizing=()=>{if(V1(this.input)===this)this.resized?.()};claim(t){this.modes.push(t);let e=zi.get(t)??0;if(zi.set(t,e+1),e>0)return"";return this.owned.push(t),t.on}deliver(t){let e=this.asking,n=e?t.filter((r)=>!e.pick(r)):t;if(n.length===0)return;if(!this.take||this.asking?.hold){this.queued.push(...n);return}this.take(n)}release(){if(this.take&&this.queued.length>0){let t=this.queued;this.queued=[],this.take(t)}}}async function ti(t,e){let n=new rv(t);try{return await e(n)}finally{n.close()}}var eC=3;function La(t,e){return`${t}/${e}`}function iv(t){return ct(t.name)?de(t.name):t.name}function ps(t){return t.catalog!==void 0&&sv(t.group)?La(t.group,t.catalog):void 0}function Um(t){if(t?.kind==="palette")return`palette ${t.entry.name}`;if(t?.kind==="group")return`group ${t.name}`;if(t?.kind==="catalog")return`catalog ${La(t.group,t.name)}`;return t?.kind??""}function ol(t,e){return Mi([t.name,t.group,t.native??"",t.catalog??"",...t.nativeNames??[],...Jc(t.booru)],e)}function ov(t,e,n){let r=n.trim(),i=[],o=new Set,s=(a)=>({kind:"palette",entry:a});for(let a of t){if(a.default||o.has(a.group))continue;o.add(a.group);let c=t.filter((f)=>!f.default&&f.group===a.group),u=r?c.filter((f)=>ol(f,r)):c;if(r&&u.length===0)continue;let l=r.length>0||e.has(a.group);if(i.push({kind:"group",name:a.group,native:a.native,lead:c.find((f)=>f.lead)??a,expanded:l,count:u.length}),!l)continue;let d=u.filter((f)=>ps(f)!==void 0);for(let f of new Set(d.map((h)=>h.catalog))){let h=d.filter((p)=>p.catalog===f),m=r.length>0||e.has(La(a.group,f));if(i.push({kind:"catalog",group:a.group,name:f,lead:h[0],expanded:m,count:h.length}),m)i.push(...h.map(s))}i.push(...u.filter((f)=>ps(f)===void 0).map(s))}return i}function nC(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||ol(i,n))).map((i)=>i.group));return ov(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function sv(t){return t.includes("@")}function Wm(t,e,n,r,i=!0){let o=n-1;if(o<0)return t;let s;if(!Number.isFinite(e))s=e>0?o:0;else if(e>0)s=t>=o?i?0:o:Math.min(o,t+e);else s=t<=0?i?o:0:Math.max(0,t+e);if(!r(s))return s;let a=Math.sign(e),c=s+a;if(c>=0&&c<=o)return c;return i&&Math.abs(e)===1?c<0?o:0:s-a}function sl(t,e){let n={home:Number.NEGATIVE_INFINITY,end:Number.POSITIVE_INFINITY,pgup:-e,pgdn:e};return t===void 0?void 0:n[t]}function rC(t){let e=t.findIndex((n)=>n.kind==="group"&&sv(n.name));return e>0&&t.slice(0,e).some((n)=>n.kind==="group")?[...t.slice(0,e),{kind:"rule"},...t.slice(e)]:t}function iC(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}function al(t){return t==="decode"||t==="glitch"?t:"typewriter"}function gs(t,e,n){return Vt({kind:"row",at:t,part:e},n)}class Fa{picked;scope;maxItems;named=[];series=[];color;onFocus;note;entries=[];seriesPad=0;namePad=0;expanded=new Set;rows=[];cursor=0;top=0;filter="";lastFocused="";constructor(t){this.picked=t.picked,this.scope=t.scope??"palette",this.maxItems=t.maxItems??12,this.color=t.color??!0,this.onFocus=t.onFocus,this.note=t.note,this.load(t.entries),this.rebuild("first")}load(t){this.entries=t,this.named=t.filter((e)=>!e.default),this.series=[...new Set(this.named.map((e)=>e.group))],this.seriesPad=Math.max(0,...this.series.map((e)=>e.length)),this.namePad=Math.max(0,...this.named.map((e)=>this.indent(e).length+iv(e).length))}indent(t){return ps(t)===void 0?" ":" "}setEntries(t){this.load(t),this.rebuild("stay")}setFilter(t){if(t!==this.filter)this.filter=t,this.rebuild("keep")}clear(){let t=this.rows[this.cursor];if(t?.kind==="palette"&&!t.entry.default){this.expanded.add(t.entry.group);let e=ps(t.entry);if(e!==void 0)this.expanded.add(e)}this.setFilter("")}focusedRow(){return this.rows[this.cursor]}refocus(){this.lastFocused="",this.sync()}members(t,e){let n=this.scope==="palette"?this.filter.trim():"";return this.named.filter((r)=>r.group===t&&(e===void 0||r.catalog===e)&&(n===""||ol(r,n)))}everyone(t){return t.flatMap((e)=>e.kind==="group"?this.members(e.name):[])}pick(){let t=this.rows[this.cursor],e=t?.kind==="palette"?[t.entry.name]:t?.kind==="group"?this.members(t.name).map((r)=>r.name):t?.kind==="catalog"?this.members(t.group,t.name).map((r)=>r.name):t?.kind==="all"?this.everyone(this.rows).map((r)=>r.name):[];if(e.length===0)return;let n=e.some((r)=>!this.picked.has(r));for(let r of e)if(n)this.picked.add(r);else this.picked.delete(r)}pickedIn(t,e){return this.members(t,e).filter((n)=>this.picked.has(n.name)).length}pickedCount(){if(this.scope==="palette")return this.named.filter((t)=>this.picked.has(t.name)).length;return this.series.filter((t)=>this.members(t).every((e)=>this.picked.has(e.name))).length}total(){return this.scope==="series"?this.series.length:this.named.length}matched(){let t=this.filter.trim();if(this.scope==="series")return this.rows.filter((e)=>e.kind==="group").length;return t?this.named.filter((e)=>ol(e,t)).length:this.named.length}sync(){let t=this.rows[this.cursor],e=t?.kind==="palette"?t.entry:t?.kind==="group"&&this.scope==="series"?t.lead:void 0;if(e&&e.name!==this.lastFocused)this.lastFocused=e.name,this.onFocus?.(e)}rebuild(t){let e=this.rows[this.cursor],n=this.scope==="series"?nC(this.entries,this.filter):ov(this.entries,this.expanded,this.filter);this.rows=n.length>0?rC([{kind:"all",count:this.allCount(n)},...n]):[];let r=n.length>0?this.rows.indexOf(n[iC(n)]):0;if(t==="first")this.cursor=r;else if(t==="keep"||t==="stay"){let i=Um(e),o=e?.kind==="palette"||t==="stay"?this.rows.findIndex((s)=>Um(s)===i):-1;this.cursor=o===-1?r:o}else if(this.cursor>=this.rows.length)this.cursor=Math.max(0,this.rows.length-1);this.sync()}allCount(t){return this.scope==="series"?t.length:this.everyone(t).length}move(t,e=!0){this.cursor=Wm(this.cursor,t,this.rows.length,(n)=>this.rows[n]?.kind==="rule",e),this.sync()}point(t){let e=this.rows[t];if(!e||e.kind==="rule")return!1;return this.cursor=t,this.sync(),!0}flip(){let t=this.rows[this.cursor];if(t?.kind==="group"||t?.kind==="catalog")this.fold(!t.expanded)}foldable(){let t=this.rows[this.cursor];return(t?.kind==="group"||t?.kind==="catalog")&&this.scope==="palette"&&!this.filter}open(){if(this.foldable())this.flip();else this.pick()}toggle(t){if(this.expanded.has(t))this.expanded.delete(t);else this.expanded.add(t);this.rebuild("clamp")}climb(t,e){this.expanded.delete(t),this.rebuild("clamp"),this.reach(e)}reach(t){this.cursor=Math.max(0,this.rows.findIndex((e)=>Um(e)===t)),this.sync()}fold(t){if(this.filter||this.scope==="series")return;let e=this.rows[this.cursor];if(e?.kind==="group"){if(t!==e.expanded)this.toggle(e.name)}else if(e?.kind==="catalog"){if(t!==e.expanded)this.toggle(La(e.group,e.name));else if(!t)this.reach(`group ${e.group}`)}else if(e?.kind==="palette"&&!t&&!e.entry.default){let n=ps(e.entry);if(n===void 0)this.climb(e.entry.group,`group ${e.entry.group}`);else this.climb(n,`catalog ${n}`)}}window(){if(this.cursor<this.top)this.top=this.cursor;if(this.cursor>=this.top+this.maxItems)this.top=this.cursor-this.maxItems+1;this.top=Math.min(this.top,Math.max(0,this.rows.length-this.maxItems));let t=this.rows.slice(this.top,this.top+this.maxItems);return{lines:t.map((e,n)=>this.renderRow(e,this.top+n)),above:this.top,below:this.rows.length-this.top-t.length}}renderRow(t,e){if(t.kind==="rule")return` ${this.color?`${C}${"── Markets ──────────"}${Ft}`:"── Markets ──────────"}`;return gs(e,"row",this.rowText(t,e))}rowText(t,e){let n=e===this.cursor,r=t.kind==="palette"?t.entry:t.kind==="all"?void 0:t.lead,i=this.color&&n&&r!==void 0,o=(v)=>this.color?`${C}${v}${$e}`:v,s=(v)=>this.color?`${ut}${v}${$e}`:v,a=(v)=>this.color?` ${Ug(zc(v),i?qe(v.foreground):"\x1B[39m")}`:"",c=n?i?`${qe(r.cursor)}▌\x1B[39m `:"▌ ":" ",u=(v)=>i?`${c}${$c(r.selection,r.foreground)} ${v} ${Ft}`:`${c} ${v}`,l=(v)=>gs(e,"box",`${v?"●":"○"} `),d=(v)=>gs(e,"fold",`${v?"▾":"▸"} `);if(t.kind==="all")return u(`${l(this.everyone(this.rows).every((v)=>this.picked.has(v.name)))}Select all ${o(`(${t.count})`)}`);if(t.kind==="group"&&this.scope==="series"){let v=`(${t.count})${t.native?` ${t.native}`:""}`;return u(`${l(this.pickedIn(t.name)===t.count)}${s(t.name.padEnd(this.seriesPad))}${a(t.lead)}${this.color?" ":" "}${o(v)}`)}let f=this.rows[this.cursor],h=(v,S)=>this.color&&f?.kind==="palette"&&v?`${ut}${qe(f.entry.cursor)}${S}${$e}\x1B[39m`:s(S);if(t.kind==="group"){let v=h(f?.kind==="palette"&&f.entry.group===t.name,t.name),S=t.native?` ${o(t.native)}`:"";return u(`${d(t.expanded)}${v} ${o(`(${this.pickedIn(t.name)}/${t.count})`)}${S}`)}if(t.kind==="catalog"){let v=f?.kind==="palette"&&ps(f.entry)===La(t.group,t.name),S=o(`(${this.pickedIn(t.group,t.name)}/${t.count})`);return u(` ${d(t.expanded)}${h(v,t.name)} ${S}`)}let m=t.entry,p=this.indent(m),b=iv(m),$=this.color?b.padEnd(this.namePad-p.length):b,k=n?s($):$;return u(`${p}${l(this.picked.has(m.name))}${k}${a(m)}${this.note?.(m)??""}`)}}function Km(t){let e=t.named[Math.floor(Math.random()*t.named.length)],n=t.series[Math.floor(Math.random()*t.series.length)];return e&&n?`${e.name} | ${n}`:""}class cl{fx;make;redraw;roller;example="";step=0;seed=0;timer;constructor(t,e,n){this.fx=t,this.make=e,this.redraw=n,this.roll(),this.roller=setInterval(()=>{this.roll(),this.step=8,this.redraw()},3000),this.roller.unref?.()}stop(){clearInterval(this.roller),clearTimeout(this.timer)}roll(){let t=this.make();this.example=t.length>30?`${t.slice(0,29)}…`:t,this.seed=Math.floor(Math.random()*997)}text(){if(this.step===0)return this.example;if(!this.timer)this.timer=setTimeout(()=>{this.timer=void 0,this.step-=1,this.redraw()},60),this.timer.unref?.();let t=Math.floor(this.example.length*(8-this.step)/8);if(this.fx==="typewriter")return`${this.example.slice(0,t)}▏`;let e=this.fx==="decode"?"abcdefghijklmnopqrstuvwxyz":"▓▒░#*+=<>?/-_",n=this.fx==="decode"?(r)=>!/[a-z0-9]/i.test(r):(r)=>r===" ";return[...this.example].map((r,i)=>i+(i*7+this.seed)%3<t||n(r)?r:e[Math.floor(Math.random()*e.length)]??r).join("")}}var oC=5;class zm{picked;list;scope;color;required;most;hint;field=new Zr;input;output;state="active";error="";redraw=()=>{};constructor(t){this.scope=t.scope??"palette",this.picked=new Set(t.installed??[]),this.color=t.color??!0,this.required=t.required??!1,this.most=t.maxItems??12,this.input=t.input,this.output=t.output,this.list=new Fa({entries:t.entries,picked:this.picked,scope:this.scope,maxItems:this.most,color:this.color,...t.onFocus?{onFocus:t.onFocus}:{}}),this.hint=new cl(t.fx??"typewriter",()=>Km(this.list),()=>this.redraw())}prompt(){return ti({input:this.input,output:this.output,modes:[Pn,rr]},async(t)=>{let e=new pm((r)=>t.write(r),()=>t.cols),n=()=>{return this.list.maxItems=Math.max(eC,Math.min(this.most,t.rows-oC)),this.draw()};this.redraw=()=>e.draw(n()),t.onResize(()=>e.redraw(n())),this.redraw();try{let r=await t.loop((i)=>{return this.take(i),this.state==="submit"||this.state==="cancel"?this.state:void 0},()=>this.redraw());return this.redraw=()=>{},e.end(this.draw()),r}finally{this.hint.stop()}})}take(t){if(t.kind==="paste"){this.field.paste(t.text),this.list.setFilter(this.field.value);return}if(t.kind!=="key")return;let e=t.key;if(this.state==="error")this.state="active";let n=sl(e,this.list.maxItems);if(e==="esc"||e==="ctrl-c")this.state="cancel";else if(e==="enter")if(this.required&&this.picked.size===0)this.error=`Pick at least one ${this.scope}`,this.state="error";else this.state="submit";else if(e==="up"||e==="down")this.list.move(e==="up"?-1:1);else if(e==="left"||e==="right")this.list.fold(e==="right");else if(n!==void 0)this.list.move(n);else if(e===" ")this.list.pick();else if(this.field.key(e))this.list.setFilter(this.field.value)}draw(){let t=(m)=>this.color?`${C}${m}${Ft}`:m,e=(m)=>this.color?`${kc}${m}${Ft}`:m,n=this.scope==="series"?"Series":"Catalog";if(this.state==="submit")return[`${t("◇")} ${n} ${t(`· ${this.list.pickedCount()} picked`)}`];if(this.state==="cancel")return[`${t(`◇ ${n} · cancelled`)}`];let r=this.field.value,i=`${e("◆")} ${n} ${t(`(${this.list.matched()}/${this.list.total()} · ${this.list.pickedCount()} picked)`)}`,o=this.hint.text(),s=`${e("│")} ${r?`${r}_`:t(`Search…${o?` e.g. ${o}`:""}`)}`,{lines:a,below:c}=this.list.window(),u=a.length>0?a.map((m)=>`${e("│")} ${m}`):[`${e("│")} ${t(`No ${this.scope==="series"?"series":"palettes"} match '${r}'`)}`];while(u.length<this.list.maxItems)u.push(e("│"));let l=c>0?`${e("│")} ${t(`↓ ${c} more`)}`:e("│"),d=this.scope==="series"?"":" · ←→ fold",f=this.scope==="series"?"continue":"install",h=this.state==="error"?`${e("└")} ${this.color?`${ne}${this.error}${Ft}`:this.error}`:`${e("└")} ${t(`↑↓ move${d} · space pick · type to filter · enter ${f} · esc cancel`)}`;return[i,s,...u,l,h]}}var bs=[{tab:"catalog",title:"Catalog",heading:"Discover palettes"},{tab:"installed",title:"Installed",heading:"Installed palettes"},{tab:"markets",title:"Markets",heading:"Manage markets"},{tab:"errors",title:"Errors",heading:"Problems"}],Dm=34,sC=72,aC=94,cC=22,av=40,cv=10,ul=3,uC=600,lC=500,dC=300,uv=12,fC="\x1B[7;1m",qm={title:"",lines:[],brief:""};function ja(t){let e=t.trim();if(e!==q&&!e.includes("/")&&!e.startsWith("~"))return;try{return Nr(e)}catch{return}}function lv(t){return t.charAt(0).toUpperCase()+t.slice(1)}class Ym{picked;tab="catalog";fields={catalog:new Zr,installed:new Zr,markets:new Zr,errors:new Zr};cursor={markets:0,errors:0};top={markets:0,errors:0};adds=new Map;removes=new Set;want=new Map;renew=new Set;updates;scope={catalog:void 0,installed:void 0};busy=new Map;failed=new Map;peeked=new Map;peekFailed=new Map;staging=new Set;timers=new Map;refreshed=[];inflight=new Set;markets;problems;kept;installed;startup;io;order;color;hub;owns;input;output;maxItems=12;paint;catalog;mine;hint;screen;state="active";phase="browse";offset=0;started=!1;log=[];working="";stopped;beat=0;asking;leaving;goto;repos;searching=!1;searchError;searched;asked=0;help=!1;worn;live;constructor(t){this.markets=t.markets,this.problems=t.problems,this.kept=t.kept,this.installed=new Set(t.installed),this.updates=new Set(t.updates??[]),this.startup=t.startup,this.io=t.io,this.order=t.order??((n)=>n),this.color=t.color??!0,this.hub=t.hub,this.owns=t.owns??!1,this.input=t.input,this.output=t.output,this.live=t.lookups??!0,this.paint=t.onFocus,this.picked=new Set(t.installed);let e=this.entries();this.catalog=new Fa({entries:e,picked:this.picked,color:this.color,maxItems:this.maxItems,note:(n)=>this.mark(n),onFocus:(n)=>this.focus("catalog",n)}),this.mine=new Fa({entries:this.mineOf(e),picked:this.picked,color:this.color,maxItems:this.maxItems,note:(n)=>this.mark(n),onFocus:(n)=>this.focus("installed",n)}),this.hint=new cl(t.fx??"typewriter",()=>Km(this.tab==="installed"?this.mine:this.catalog),()=>this.redraw());for(let n of t.due)this.update(n)}run(){let t=[...this.owns?[il,Pn,Qr]:[],rr,...Xr()],e=this.owns?[]:[Pn,Qr];return ti({input:this.input,output:this.output,modes:t,assume:e},async(n)=>{let r=new Gi({write:(i)=>n.write(i),view:()=>this.state==="active"?{lines:this.view(),ticking:this.phase==="applying"}:void 0,beat:()=>{this.beat+=1}});this.screen=r,n.onResize(()=>{r.reset(),r.request()}),r.now();try{return await n.loop((i)=>{if(i.kind==="key")this.key(i.key);else if(i.kind==="paste")this.pasted(i.text);else if(i.kind==="mouse")this.mouse(i,r);return this.state==="active"?void 0:this.state},()=>r.soon())}finally{r.stop(),this.screen=void 0,this.hint.stop();for(let i of this.timers.values())clearTimeout(i);this.timers.clear()}})}applied(){return this.started}lines(){return this.log}failure(){return this.stopped}next(){return this.goto}async idle(){await Promise.allSettled([...this.inflight])}result(){let t=new Set(this.entries().map((e)=>e.name));return{picked:new Set([...this.picked].filter((e)=>t.has(e))),adds:[...this.adds.values()],removes:[...this.removes],auto:Object.fromEntries(this.want),renew:[...this.renew].filter((e)=>this.updates.has(e)&&this.picked.has(e)&&t.has(e)),refreshed:this.refreshed}}key(t){if(t==="ctrl-c"){this.state="cancel";return}if(this.help){if(t==="?"||t==="esc")this.help=!1;return}if(this.leaving!==void 0){if(t==="esc")this.leaving=void 0;else if(/^[yn]$/i.test(t)){if(t.toLowerCase()==="y")this.begin();else this.goto=this.leaving,this.state="cancel";this.leaving=void 0}return}if(this.asking){if(t==="esc")this.asking=void 0;else if(/^[yn]$/i.test(t))this.answer(t.toLowerCase()==="y");return}if(this.phase!=="browse"){this.steer(t);return}let e=sl(t,this.maxItems),n=this.list();if(t==="enter")if(n?.foldable())n.flip();else if(this.dirty())this.phase="review",this.offset=0;else this.state="submit";else if((t==="esc"||t==="ctrl-u")&&this.fields[this.tab].value)this.clear();else if(t==="esc")this.state="cancel";else if(t==="?")this.help=!0;else if(e!==void 0)this.move(e);else if(t==="up"||t==="down")this.move(t==="up"?-1:1);else if(t==="left"||t==="right")this.side(t==="right");else if(t==="tab"||t==="shift-tab"){if(this.hub)this.leave(H$(this.hub,t==="tab"?1:-1))}else if(t==="shift-left"||t==="shift-right")this.switchTab(t==="shift-right"?1:-1);else if(t===" ")this.activate();else if(t==="ctrl-r"&&n)this.toggleRenew(n);else if(t==="ctrl-r"){let r=this.tab==="markets"?this.marketRow():void 0;if(r?.kind==="market"&>(r.market.source)&&!this.adds.has(r.market.source))this.update(r.market.source);else if(r?.kind==="find")this.search()}else if(t==="ctrl-s")this.cycle();else if(this.fields[this.tab].key(t))this.typed()}pasted(t){if(this.phase==="browse"&&!this.help&&!this.asking&&this.leaving===void 0)this.fields[this.tab].paste(t),this.typed()}mouse(t,e){if(this.help){if(t.action==="release")this.help=!1;return}let n=e.point(t),r=n?.target,i=this.phase==="browse"&&this.leaving===void 0&&!this.asking;if(t.action==="wheel"){if(!t.sideways&&(i||this.phase!=="browse"))this.wheel(t.wheel);return}if(!r)return;if(t.action==="press"&&t.button==="left"){if(!i)return;if(r.kind==="tab")this.show(r.tab);else if(r.kind==="chip")this.scopeTo(r.source);else if(r.kind==="row")this.pointRow(r.at)}else if(t.action==="release"&&n?.inside){if(r.kind==="key")this.key(r.key);else if(r.kind==="page"){if(this.phase!=="browse")this.scroll(r.step*this.span());else if(i)this.move(r.step*this.maxItems)}else if(r.kind==="hub"){if(i&&this.hub&&r.tab!==this.hub)this.leave(C$(r.tab))}else if(r.kind==="row"&&i)this.openRow(r,t.count)}}wheel(t){if(this.phase!=="browse"){this.scroll(t);return}let e=this.list();if(e)e.move(t,!1);else this.move(t,!1)}pointRow(t){let e=this.list();if(e){e.point(t);return}this.cursor[this.tab==="markets"?"markets":"errors"]=t,this.watch()}openRow(t,e){let n=this.list();if(n){if(t.part==="box")n.pick();else if(t.part==="fold")n.flip();else if(e===2)n.open()}else if(t.part==="box"||e===2)this.activate()}typed(){let t=this.fields[this.tab].value;if(this.list()?.setFilter(t),this.tab==="markets")this.later("search",uC,()=>this.lookup()),this.watch()}clear(){this.fields[this.tab].value="";let t=this.list();if(t)t.clear();else this.typed()}redraw(){if(this.state==="active")this.screen?.request()}focus(t,e){if(this.tab===t&&this.state!=="submit"&&this.state!=="cancel")this.worn=e,this.paint?.(e)}track(t){this.inflight.add(t);let e=()=>this.inflight.delete(t);return t.then(e,e),t}list(){return this.tab==="catalog"?this.catalog:this.tab==="installed"?this.mine:void 0}active(){return[...this.markets.filter((t)=>!this.removes.has(t.source)),...this.adds.values()]}entries(){let t=this.active().flatMap((i)=>i.entries),e=new Set(t.map((i)=>i.name)),n=new Map,r=this.markets.filter((i)=>this.removes.has(i.source)).flatMap((i)=>i.entries);for(let i of[...this.kept,...r])if(this.installed.has(i.name)&&!e.has(i.name))n.set(i.name,i);return this.order([...t,...n.values()])}mineOf(t){return t.filter((e)=>this.installed.has(e.name))}scoped(t,e){let n=this.scope[e],r=n===void 0?void 0:this.active().find((o)=>o.source===n);if(!r)return this.scope[e]=void 0,t;let i=new Set(r.entries.map((o)=>o.name));return t.filter((o)=>i.has(o.name))}reload(){let t=this.entries();this.catalog.setEntries(this.scoped(t,"catalog")),this.mine.setEntries(this.scoped(this.mineOf(t),"installed"))}chips(t){let e=t==="catalog"?this.entries():this.mineOf(this.entries()),n=this.active().map((r)=>({source:r.source,label:r.id,count:r.entries.filter((i)=>!i.default&&(t==="catalog"||this.installed.has(i.name))).length})).filter((r)=>t==="catalog"||r.count>0||r.source===this.scope[t]);return[{source:void 0,label:"All",count:e.filter((r)=>!r.default).length},...n]}cycle(){let t=this.tab;if(t!=="catalog"&&t!=="installed"||this.active().length<2)return;let e=this.chips(t),n=Math.max(0,e.findIndex((r)=>r.source===this.scope[t]));this.scopeTo(e[(n+1)%e.length]?.source)}scopeTo(t){let e=this.tab;if(e!=="catalog"&&e!=="installed")return;this.scope[e]=t,this.reload(),this.list()?.refocus()}switchTab(t){let e=bs.findIndex((n)=>n.tab===this.tab);this.show(bs[(e+t+bs.length)%bs.length]?.tab??"catalog")}show(t){if(this.tab=t,this.list()?.refocus(),t==="markets")this.lookup(),this.watch()}move(t,e=!0){let n=this.list();if(n){n.move(t,e);return}let r=this.tab==="markets"?"markets":"errors",i=r==="markets"?this.marketRows().map((o)=>o.kind==="rule"):this.problemRows().map(()=>!1);this.cursor[r]=Wm(this.cursor[r],t,i.length,(o)=>i[o]===!0,e),this.watch()}side(t){let e=this.list();if(e){e.fold(t);return}let n=this.tab==="markets"?this.marketRow():void 0;if(n?.kind==="market"&>(n.market.source))if(t===n.market.auto)this.want.delete(n.market.source);else this.want.set(n.market.source,t)}activate(){let t=this.list();if(t){t.pick();return}let e=this.tab==="markets"?this.marketRow():void 0;if(e?.kind==="market")this.toggleMarket(e.market);else if(e?.kind==="add")this.load(e.source,!0);else if(e?.kind==="repo"){let n=this.known(e.source),r=this.marketRows().findIndex((i)=>i.kind==="market"&&i.market===n);if(n&&r>=0)this.cursor.markets=r;else if(!n)this.load(e.source,!0)}else if(e?.kind==="find")this.search()}toggleMarket(t){if(this.adds.has(t.source))this.adds.delete(t.source),this.want.delete(t.source);else if(this.removes.has(t.source))this.removes.delete(t.source);else this.removes.add(t.source);this.reload()}known(t){return[...this.markets,...this.adds.values()].find((e)=>Go(e.source,t))}load(t,e){let n=this.peeked.get(t);if(n){if(e)this.arrive(t,n);return}if(e)this.staging.add(t);if(this.busy.has(t))return;this.failed.delete(t),this.peekFailed.delete(t),this.busy.set(t,"Fetching…"),this.track(this.io.fetch(t)).then((r)=>{if(this.busy.delete(t),this.peeked.set(t,r),this.staging.delete(t))this.arrive(t,r);this.redraw()},(r)=>{if(this.busy.delete(t),this.staging.delete(t))this.failed.set(t,r.message);else this.peekFailed.set(t,r.message);this.redraw()})}arrive(t,e){let n=this.active().find((r)=>r.id===e.id);if(n)this.failed.set(t,`${e.id} already names the market at ${n.shown}`);else if(Ot(t)||t===q)this.stage(e,e.auto);else this.asking=e;this.redraw()}later(t,e,n){this.cancel(t),this.timers.set(t,setTimeout(()=>{if(this.timers.delete(t),this.state!=="submit"&&this.state!=="cancel")n()},e))}cancel(t){clearTimeout(this.timers.get(t)),this.timers.delete(t)}wants(t){return!this.known(t)&&!this.peeked.has(t)&&!this.busy.has(t)&&!this.peekFailed.has(t)}watch(){if(!this.live||this.tab!=="markets")return;let t=ja(this.fields.markets.value);if(t&&this.wants(t))this.later("typed",lC,()=>this.load(t,!1));else this.cancel("typed");let e=this.marketRow();if(e?.kind==="repo"&&this.wants(e.source)){let n=e.source;this.later("focus",dC,()=>{let r=this.marketRow();if(this.tab==="markets"&&r?.kind==="repo"&&r.source===n)this.load(n,!1)})}else this.cancel("focus")}answer(t){let e=this.asking;if(this.asking=void 0,e)this.stage(e,t)}stage(t,e){if(this.adds.set(t.source,t),e===t.auto)this.want.delete(t.source);else this.want.set(t.source,e);this.reload(),this.cursor.markets=Math.max(0,this.marketRows().findIndex((n)=>n.kind==="market"&&n.market.source===t.source))}update(t){if(this.busy.has(t))return;this.failed.delete(t),this.busy.set(t,"Updating…"),this.track(this.io.refresh(t)).then(({market:e,refreshed:n,updates:r})=>{this.busy.delete(t),this.updates=new Set(r),this.markets=this.markets.map((i)=>i.source===t?e:i),this.problems=this.problems.filter((i)=>i.source!==t),this.refreshed.push(n),this.reload(),this.redraw()},(e)=>{this.busy.delete(t),this.failed.set(t,`Update failed: ${e.message}`),this.redraw()})}wanted(){let t=this.fields.markets.value.trim();return t&&!ja(t)?t:""}lookup(){if(this.live&&this.searched!==this.wanted())this.search()}search(){let t=this.wanted(),e=++this.asked;this.searched=t,this.searching=!0,this.searchError=void 0,this.track(this.io.search(t||void 0)).then((n)=>{if(e===this.asked)this.searching=!1,this.repos=n,this.watch(),this.redraw()},(n)=>{if(e===this.asked)this.searching=!1,this.searchError=n.message,this.redraw()})}marketRows(){let t=(...o)=>Mi(o,this.fields.markets.value),e=[...this.markets,...this.adds.values()],n=e.filter((o)=>t(o.id,o.shown,o.source)).map((o)=>({kind:"market",market:o})),r=ja(this.fields.markets.value);if(r&&!e.some((o)=>Go(o.source,r)))n.push({kind:"add",source:r});let i=(this.repos??[]).map((o)=>({repo:o,source:Fm(o)})).filter(({repo:o,source:s})=>t(s,o.description??""));return n.push({kind:"rule"},...i.length>0?i.map(({repo:o,source:s})=>({kind:"repo",repo:o,source:s})):[{kind:"find"}]),n}marketRow(){let t=this.marketRows();return t[this.at(t,"markets",(e)=>e?.kind==="rule")]}problemList(){let t=new Map([...this.markets,...this.adds.values()].map((e)=>[e.source,e.id]));return[...this.problems.filter((e)=>!(e.update&&e.source&&this.failed.has(e.source))),...[...this.failed].map(([e,n])=>({where:t.get(e)??e,message:n,source:e}))]}problemRows(){return this.problemList().filter((t)=>Mi([`${t.where} ${t.message}`],this.fields.errors.value))}at(t,e,n=()=>!1){let r=Math.min(this.cursor[e],Math.max(0,t.length-1));if(!n(t[r]))return r;return r>0?r-1:r+1}windowOf(t,e,n,r=()=>!1){let i=this.at(t,e,r);this.cursor[e]=i;let o=(l)=>r(t[l])?1:2,s=(l,d)=>{let f=0;for(let h=l;h<=d;h++)f+=o(h);return f},a=Math.min(this.top[e],i);while(a<i&&s(a,i)>this.maxItems)a+=1;while(a>0&&s(a-1,t.length-1)<=this.maxItems)a-=1;this.top[e]=a;let c=[],u=0;for(let l=a;l<t.length&&u+o(l)<=this.maxItems;l++)c.push(l),u+=o(l);return{lines:c.flatMap((l)=>{let d=n(t[l],l===i,l);return r(t[l])?d:d.map((f)=>gs(l,"row",f))}),above:a,below:t.length-a-c.length}}dim(t){return this.color?`${C}${t}${$e}`:t}bold(t){return this.color?`${ut}${t}${$e}`:t}warn(t){return this.color?`${ne}${t}\x1B[39m`:t}lit(t,e,n){if(e&&this.color&&t)return`${qe(t.cursor)}▌\x1B[39m ${$c(t.selection,t.foreground)} ${n} ${Ft}`;return`${e?"▌ ":" "} ${n}`}status(t){return this.adds.has(t.source)?"Will add":this.removes.has(t.source)?"Will remove":this.busy.get(t.source)??(this.failed.has(t.source)||t.status.startsWith("update failed")?"Update failed":"")}note(t){return` ${this.dim(t)}`}peeking(t){let e=this.peeked.get(t);return e?Tt(e.entries.filter((n)=>!n.default).length):""}marketLine(t,e,n){let r=(o)=>gs(n,"box",`${o} `);if(t.kind==="rule")return[` ${this.dim(`── On GitHub${this.searching?" · searching…":""} ──────────`)}`];if(t.kind==="market"){let o=t.market,s=this.status(o),a=e?this.bold(o.id):o.id,c=o.entries.filter((l)=>!l.default),u=gt(o.source)&&(this.want.get(o.source)??o.auto)?` ${this.dim("↻ auto-update")}`:"";return[this.lit(o.entries.find((l)=>!l.default),e,`${r(this.removes.has(o.source)?"○":"●")}${a}${u}${s?` ${this.dim(s)}`:""}`),this.note([o.source===q?"The ttheme catalog":Ot(o.source)?o.shown:o.source,Tt(c.length),`${c.filter((l)=>this.installed.has(l.name)).length} installed`,o.status].join(" · "))]}if(t.kind==="add"){let o=this.busy.get(t.source),s=this.failed.get(t.source)??this.peekFailed.get(t.source),a=this.peeked.get(t.source);return[this.lit(void 0,e,`${r("+")}Add ${tt(t.source)}${o?` ${this.dim(o)}`:""}`),s?` ${this.warn(s)}`:this.note(a?`${a.id} · ${this.peeking(t.source)}`:this.live?"Fetching its palettes…":"space fetches its palettes")]}if(t.kind==="find"){let o=this.fields.markets.value.trim(),s=o&&!ja(o),a=!this.searching&&!this.searchError&&this.repos===void 0,c=this.searching?"Searching GitHub…":this.searchError?"GitHub search failed":a?s?`Find "${o}" on GitHub`:"Find markets on GitHub":s?`No market on GitHub matches "${o}"`:"No market on GitHub yet";return[this.lit(void 0,e,`${r("⌕")}${c}`),this.note(this.searchError??(this.searching?"":a?"space searches GitHub":"space searches again"))]}let i=this.busy.get(t.source);return[this.lit(void 0,e,`${r(this.known(t.source)?"●":"○")}${t.source} ${this.dim(`★${t.repo.stargazers_count}`)}${i?` ${this.dim(i)}`:""}`),this.note([this.peeking(t.source),t.repo.description??""].filter(Boolean).join(" · "))]}problemLine(t,e){return[this.lit(void 0,e,`${this.warn("✗")} ${t.where}`),this.note(t.message)]}body(){let t=this.list();if(t){let n=this.fields[this.tab].value;return{...t.window(),empty:n?`No palettes match '${n}'`:this.tab==="installed"?"Nothing installed yet":"No palettes"}}if(this.tab==="markets")return{...this.windowOf(this.marketRows(),"markets",(n,r,i)=>this.marketLine(n,r,i),(n)=>n?.kind==="rule"),empty:""};let e=this.fields.errors.value;return{...this.windowOf(this.problemRows(),"errors",(n,r)=>this.problemLine(n,r)),empty:e?`No problems match '${e}'`:"No problems"}}changes(){return this.adds.size+this.removes.size+this.want.size}dirty(){let{picked:t,renew:e}=this.result();return this.changes()>0||e.length>0||t.size!==this.installed.size||[...t].some((n)=>!this.installed.has(n))}mark(t){if(!this.updates.has(t.name)||!this.installed.has(t.name))return"";return this.renew.has(t.name)?` ${this.bold("↑ update")}`:` ${this.dim("↑")}`}toggleRenew(t){let e=t.focusedRow(),n=this.entries(),r=(e?.kind==="palette"?[e.entry]:e?.kind==="group"?n.filter((o)=>o.group===e.name):e?.kind==="catalog"?n.filter((o)=>o.group===e.group&&o.catalog===e.name):e?.kind==="all"?n:[]).map((o)=>o.name).filter((o)=>this.updates.has(o)&&this.installed.has(o));if(r.length===0)return;let i=r.some((o)=>!this.renew.has(o));for(let o of r)if(i)this.renew.add(o);else this.renew.delete(o)}leave(t){if(this.dirty()){this.leaving=t;return}this.goto=t,this.state="cancel"}steer(t){if(this.phase==="review"){if(t==="enter")this.begin();else if(t==="esc")this.phase="browse"}else if(this.phase==="done"&&(t==="enter"||t==="esc"))this.state="submit";let e=t==="up"?-1:t==="down"?1:sl(t,this.span());if(e!==void 0)this.scroll(e)}scroll(t){this.offset=Number.isFinite(t)?Math.max(0,this.offset+t):t>0?Number.MAX_SAFE_INTEGER:0,this.redraw()}span(){return Math.max(ul,this.rows()-(this.hub?1:0)-4)}begin(){this.phase="applying",this.started=!0,this.offset=0,this.log=[],this.working="";let t={say:(e)=>{this.log.push(...e.split(`
|
|
640
|
+
`)),this.redraw()},status:(e)=>{this.working=e,this.redraw()}};this.track(this.io.apply(this.result(),t)).then(()=>this.ended(),(e)=>this.ended(e))}ended(t){this.working="",this.stopped=t,this.phase="done",this.offset=0,this.redraw()}pending(){let t=this.entries().filter((e)=>!e.default);return{names:t.filter((e)=>this.picked.has(e.name)&&!this.installed.has(e.name)),dropped:t.filter((e)=>this.installed.has(e.name)&&!this.picked.has(e.name))}}marketChanges(){let t=[];for(let e of this.adds.values()){let n=e.source!==q&&(this.want.get(e.source)??e.auto)?"updates on its own":"";t.push(`+ ${e.id} ${this.dim([e.source===q?"The ttheme catalog":e.shown,Tt(e.entries.filter((r)=>!r.default).length),n].filter(Boolean).join(" · "))}`)}for(let e of this.removes){let n=this.markets.find((i)=>i.source===e),r=(n?.entries??[]).filter((i)=>!i.default&&this.installed.has(i.name)&&this.picked.has(i.name));t.push(`- ${n?.id??e} ${this.dim([n?.shown??tt(e),r.length>0?`its ${Tt(r.length)} installed keep working`:""].filter(Boolean).join(" · "))}`)}for(let[e,n]of this.want){let r=this.markets.find((i)=>i.source===e);if(r&&!this.removes.has(e))t.push(`↻ ${r.id} ${this.dim(n?"updates on its own from now":"stops updating on its own")}`)}return t}reviewLines(){let t=this.marketChanges(),{names:e,dropped:n}=this.pending(),r=new Set(this.result().renew),i=this.entries().filter((c)=>r.has(c.name)),o=Math.max(0,...[...e,...n,...i].map((c)=>c.name.length)),s=(c,u)=>` ${c} ${u.name.padEnd(o)} ${this.dim(ct(u.name)?u.catalog??"":u.group)}`,a=[e.length>0?`${e.length} to install`:"",n.length>0?`${n.length} to remove`:"",i.length>0?`${i.length} to update`:""].filter(Boolean);return[...t.length>0?[` ${this.bold("Markets")} ${this.dim(`(${t.length})`)}`,...t.map((c)=>` ${c}`),""]:[],...a.length>0?[` ${this.bold("Palettes")} ${this.dim(`(${a.join(" · ")})`)}`,...e.map((c)=>s("+",c)),...n.map((c)=>s("-",c)),...i.map((c)=>s("↑",c))]:[]]}summary(){let{names:t,dropped:e}=this.pending(),n=this.adds.size;return[n>0?`${n} market${n===1?"":"s"} added`:"",this.removes.size>0?`${this.removes.size} removed`:"",t.length>0?`${t.length} installed`:"",e.length>0?`${e.length} removed`:"",this.result().renew.length>0?`${this.result().renew.length} updated`:""].filter(Boolean).join(" · ")}progressLines(){let t=this.log.map((e)=>` ${e}`);if(this.phase==="applying"){let e=_n[this.beat%_n.length];t.push(` ${this.dim(`${e} ${this.working||"Working…"}`)}`)}else if(this.stopped)t.push("",...wt(this.stopped.message,Math.max(20,this.columns()-6)).map((e,n)=>` ${n===0?this.warn("✗"):" "} ${e}`));return t}frame(t,e){let n=t-1,r=this.phase==="review",i=r?this.reviewLines():this.progressLines(),o=this.phase==="review"?`${this.bold("Review changes")}`:this.phase==="applying"?this.bold("Applying changes"):this.stopped?`${this.warn("✗")} ${this.bold("Stopped")}`:`${this.bold("✓ Applied")} ${this.dim(this.summary()?`(${this.summary()})`:"")}`,s=this.span(),a=Math.max(0,i.length-s),c=this.phase==="applying"?a:Math.min(this.offset,a);this.offset=c;let u=i.slice(c,c+s),l=i.length-c-u.length,d=[c>0?` ${this.more(-1,`↑ ${c} more`)}`:"",...u];while(d.length<s+1)d.push("");d.push(l>0?` ${this.more(1,`↓ ${l} more`)}`:"");let f=a>0?[["↑↓","scroll"]]:[],h=r?{badge:"BROWSE (APPLY)",keys:[...f,["enter","apply"]],right:["esc","back"]}:this.phase==="applying"?{badge:"BROWSE (APPLY)",note:"Keys wait until it ends",keys:[]}:{badge:"BROWSE (APPLY)",keys:f,right:["enter","close"]};return[...this.hub?[rt(th(this.hub,this.color),n,!1)]:[],rt(` ${o}`,n,!1),...d.map((m)=>rt(m,n,!1)),` ${this.keyBar(h,n-1)}`].slice(0,e).join(`
|
|
641
|
+
`)}keyBar(t,e){let n=this.color&&this.worn?qe(this.worn.cursor):"",r=this.color?`\x1B[7;1m${n} ${t.badge} ${Ft} `:`[${t.badge}] `,i=([c,u])=>Kt(c.split(" ")[0]??"",`${this.bold(c)} ${this.dim(u)}`),{note:o,keys:s,right:a}=t;for(;;){let c=`${r}${[t.lead??"",o?this.dim(o):"",...s.map(i)].filter(Boolean).join(" ")}`,u=a?i(a):"";if(B(c)+(a?3+B(u):0)<=e)return a?vt(c,u,e):rt(c,e,!1);if(o)o=void 0;else if(s.length>2||!a&&s.length>1){let l=s.length-2;s=s.filter((d,f)=>f!==l)}else if(a)a=void 0;else return rt(c,e,!1)}}more(t,e){return this.dim(Vt({kind:"page",step:t},e))}counts(){let t=[...this.busy.values()].includes("Updating…")?"Updating… · ":"",e=this.list();if(e)return`${t}${e.matched()}/${e.total()} · ${e.pickedCount()} picked`;if(this.tab==="markets"){let n=this.markets.length+this.adds.size,r=this.marketRows().filter((o)=>o.kind==="market").length,i=this.changes();return`${t}${r}/${n}${i>0?` · ${i} to apply`:""}`}return`${this.problemRows().length}/${this.problemList().length}`}searchText(){let t=this.fields[this.tab].value;if(t)return`${t}_`;if(this.tab==="markets")return this.dim("Search… or add one: owner/repo");let e=this.tab==="errors"?"":this.hint.text();return this.dim(`Search…${e?` e.g. ${e}`:""}`)}tabBar(){return bs.map(({tab:t,title:e})=>{let n=t==="errors"?this.problemList().length:0,r=n>0?`${e} ${n}`:e,i={kind:"tab",tab:t};if(!this.color)return Vt(i,t===this.tab?`[${r}]`:` ${r} `);return`${t===this.tab?fC:C}${Vt(i,` ${r} `)}${Ft}`}).join(" ")}heading(){let t=bs.find((e)=>e.tab===this.tab)?.heading??"";return`${this.bold(t)} ${this.dim(`(${this.counts()})`)}`}searchBox(t){let e=(r,i)=>this.dim(`${r}${"─".repeat(t-2)}${i}`),n=this.dim("│");return[e("╭","╮"),`${n} ${rt(`${this.dim("⌕")} ${this.searchText()}`,t-4)} ${n}`,e("╰","╯")]}strip(t){let e=this.tab;if(e!=="catalog"&&e!=="installed"||this.active().length<2)return;let n=this.chips(e),r=Math.max(0,n.findIndex((b)=>b.source===this.scope[e])),i=n.map((b,$)=>$===r&&!this.color?`[${b.label} ${b.count}]`:`${b.label} ${b.count}`),o=" · ",s=(b)=>b>0?`${o}+${b} more`.length:0,a=(b)=>{let $=b>0?2:0,k=0;for(let v=b;v<i.length;v++){let S=$+(k>0?o.length:0)+i[v].length;if(S+s(i.length-v-1)>t)break;$=S,k+=1}return k},c=0;while(c<r&&c+a(c)<=r)c+=1;let u=Math.max(1,a(c)),l=i.slice(c,c+u),d=i.length-c-u,f=l.map((b,$)=>{let k=Vt({kind:"chip",source:n[c+$]?.source},b);if(c+$===r)return this.color?`${ut}${kc}${k}${Ft}`:k;return this.dim(k)}),h=`${c>0?`${this.dim(Kt("ctrl+s","…"))} `:""}${f.join(this.dim(o))}${d>0?this.dim(`${o}${Kt("ctrl+s",`+${d} more`)}`):""}`,m=(c>0?2:0)+l.join(o).length+s(d),p="ctrl+s market";return m+2+p.length<=t?`${h} ${this.dim(Kt("ctrl+s",p))}`:h}sourceOf(t){let e=this.active().find((n)=>n.entries.some((r)=>r.name===t.name));if(!e)return"In no market you added";return e.source===q?"The ttheme catalog":e.shown}paletteState(t){let e=this.picked.has(t.name),n=this.installed.has(t.name),r=e&&n?"Installed":e?"Will install":n?"Will remove":"Not installed",i=e&&n&&this.updates.has(t.name)?this.renew.has(t.name)?" · Will update":" · Update ready":"";return`${r}${i}${this.startup===t.name?" · Default":""}`}paletteDetail(t,e){if(!t||t.kind==="rule")return qm;if(t.kind==="all")return{title:this.bold("Select all"),lines:["space picks every palette shown"],brief:""};if(t.kind==="group"){let u=this.entries().filter((f)=>f.group===t.name&&!f.default),l=this.sourceOf(t.lead),d=`${Tt(u.length)} · ${u.filter((f)=>this.installed.has(f.name)).length} installed`;return{title:this.bold(t.name),lines:[...t.native?wt(t.native,e).map((f)=>this.dim(f)):[],...wt(l,e),d],brief:`${l} · ${d}`}}if(t.kind==="catalog"){let u=this.entries().filter((f)=>f.group===t.group&&f.catalog===t.name),l=this.sourceOf(t.lead),d=`${Tt(u.length)} · ${u.filter((f)=>this.installed.has(f.name)).length} installed`;return{title:this.bold(t.name),lines:[t.group,...wt(l,e),d],brief:`${t.group} · ${d}`}}let n=t.entry,r=this.sourceOf(n),i=ua(n),o=`Gate ${ve.length-i.length}/${ve.length}`,s=n.pictures?.length??0,a=[...s>0?[`${s} picture${s===1?"":"s"}`]:[],...n.base?[`Base ${n.base}`]:[]].join(" · "),c=ct(n.name)?n.catalog?[n.catalog]:[]:[n.group,...n.native?[this.dim(n.native)]:[]];return{title:this.color?`${ut}${qe(n.cursor)}${n.name}${$e}\x1B[39m`:n.name,lines:[...wt(r,e),...c,this.paletteState(n),"",i.length===0?`${o} · passes`:o,...i.flatMap((u)=>wt(u,e-2).map((l,d)=>`${d===0?this.warn("✗"):" "} ${l}`)),...a?["",a]:[]],brief:[r,o,...a?[a]:[],this.paletteState(n)].join(" · ")}}marketDetail(t,e){if(!t||t.kind==="rule")return qm;if(t.kind==="market"){let i=t.market,o=i.source===q?"The ttheme catalog":i.shown,s=i.entries.filter((h)=>!h.default),a=s.filter((h)=>this.installed.has(h.name)).map((h)=>h.name),c=`${Tt(s.length)} · ${a.length} installed`,u=gt(i.source)?`Auto-update ${this.want.get(i.source)??i.auto?"on":"off"}`:lv(i.status),l=this.busy.get(i.source)??lv(i.status),d=this.failed.get(i.source),f=this.adds.has(i.source)?["Will add"]:this.removes.has(i.source)?[a.length>0?`Will remove — ${a.join(", ")} stay${a.length===1?"s":""} installed`:"Will remove"]:this.want.has(i.source)?[`Auto-update turns ${this.want.get(i.source)?"on":"off"}`]:[];return{title:this.bold(i.id),lines:[...wt(o,e),...i.description?wt(i.description,e).map((h)=>this.dim(h)):[],c,"",gt(i.source)?`${u} ${this.dim("←→")}`:u,...gt(i.source)?[l]:[],...d?wt(d,e).map((h)=>this.warn(h)):[],...f.length>0?["",...f.flatMap((h)=>wt(h,e))]:[]],brief:[o,u,...f,...gt(i.source)?[l]:[]].join(" · ")}}if(t.kind==="add"){let i=this.busy.get(t.source)??this.failed.get(t.source)??this.peekFailed.get(t.source)??(this.peeked.has(t.source)?"space adds it":this.live?"Fetching its palettes…":"space fetches its palettes");return{title:this.bold(tt(t.source)),lines:["Not added",...this.peekLines(t.source,e),"",...wt(i,e)],brief:[this.peeking(t.source),i].filter(Boolean).join(" · ")}}if(t.kind==="find"){let i=this.fields.markets.value.trim(),o=this.searchError??(this.searching?"Searching…":this.repos?`${this.repos.length} found · space searches again`:"space searches GitHub");return{title:this.bold("GitHub"),lines:[...wt(`Repositories with the ${_o} topic`,e),...i&&!ja(i)?[`Matching "${i}"`]:[],"",...wt(o,e)],brief:o}}let r=this.known(t.source)?"Added":this.busy.get(t.source)??this.failed.get(t.source)??this.peekFailed.get(t.source)??"space adds it";return{title:this.bold(t.source),lines:[`★ ${t.repo.stargazers_count}`,...wt(t.repo.description??"",e),...this.peekLines(t.source,e),"",...wt(r,e)],brief:[this.peeking(t.source),r].filter(Boolean).join(" · ")}}peekLines(t,e){let n=this.peeked.get(t);if(!n)return[];let r=n.entries.filter((o)=>!o.default),i=`${r.slice(0,uv).map((o)=>de(o.name)).join(", ")}${r.length>uv?", …":""}`;return["",n.id,...n.description?wt(n.description,e):[],Tt(r.length),...wt(i,e).map((o)=>this.dim(o))]}detail(t){let e=this.list();if(e)return this.paletteDetail(e.focusedRow(),t);if(this.tab==="markets")return this.marketDetail(this.marketRow(),t);let n=this.problemRows(),r=n[Math.min(this.cursor.errors,n.length-1)];return r?{title:this.bold(r.where),lines:wt(r.message,t),brief:r.message}:qm}footer(){if(this.help)return{badge:"HELP",keys:[],right:["? esc","close"]};if(this.leaving!==void 0)return{badge:"BROWSE",lead:"Apply your changes before you leave?",keys:[["y","apply"],["n","discard"]],right:["esc","stay"]};if(this.asking)return{badge:"BROWSE",lead:`Update ${this.asking.id} on its own when its author changes it?`,keys:[["y","yes"],["n","no"]],right:["esc","back"]};let t=this.fields[this.tab].value,e=["enter",this.dirty()?"apply":"close"],n=[["⇧←→","tabs"],...t?[["bksp","edit"]]:[],["?","keys"]];return{badge:t?"BROWSE (FILTER)":"BROWSE",keys:[...this.rowKeys(e),...n],right:t?["esc","clear filter"]:["esc","cancel"]}}rowKeys(t){let e=this.list();if(e){let r=e.focusedRow();if(!r)return[t];if(e.foldable())return[(r.kind==="group"||r.kind==="catalog")&&r.expanded?["←","close"]:["→","open"],["space","pick"]];let i=r.kind==="palette"&&this.updates.has(r.entry.name)&&this.installed.has(r.entry.name);return[["space","pick"],...i?[["ctrl+r",this.renew.has(r.entry.name)?"keep":"update"]]:[],t]}if(this.tab==="errors")return[t];let n=this.marketRow();if(n?.kind==="market"){let r=n.market;return[["space",this.adds.has(r.source)||this.removes.has(r.source)?"undo":"remove"],...gt(r.source)?[["←→","auto-update"]]:[],...gt(r.source)&&!this.adds.has(r.source)?[["ctrl+r","update"]]:[],t]}if(n?.kind==="find")return[["space","search"],t];if(n?.kind==="add"||n?.kind==="repo"&&!this.known(n.source))return[["space","add"],t];return[t]}columns(){return(this.output??process.stdout).columns??100}rows(){return(this.output??process.stdout).rows??24}fitItems(t){let e=Math.max(ul,this.rows()-t);this.maxItems=e,this.catalog.maxItems=e,this.mine.maxItems=e}view(){let t=this.draw().split(`
|
|
642
|
+
`);return Array.from({length:this.rows()},(e,n)=>t[n]??"")}small(t,e,n){return`Needs ${av}×${n} — now ${t}×${e}
|
|
643
|
+
${this.dim("esc cancels")}`}draw(){let t=this.columns(),e=this.rows();if(t<av||e<cv)return this.small(t,e,cv);if(this.phase!=="browse")return this.frame(t,e);let n=t>=aC,r=t-1,i=n?Math.min(t-Dm-4,sC):r,o=this.strip(r-1),s=[` ${this.tabBar()}`,...e>=cC?[` ${this.heading()}`,...this.searchBox(t-3).map(($)=>` ${$}`)]:[vt(` ${this.dim("⌕")} ${this.searchText()}`,this.dim(this.counts()),r)],...o?[` ${o}`]:[]],a=s.length+3+(n?0:1)+(this.hub?1:0);if(e<a+ul)return this.small(t,e,a+ul);this.fitItems(a);let{lines:c,above:u,below:l,empty:d}=this.body(),f=c.length>0?c.map(($)=>` ${$}`):[` ${this.dim(d)}`];while(f.length<this.maxItems)f.push("");let h=[u>0?` ${this.more(-1,`↑ ${u} more`)}`:"",...f,l>0?` ${this.more(1,`↓ ${l} more`)}`:""],m=this.detail(n?Dm:i-2),p=n?h.map(($,k)=>`${rt($,i)} ${this.dim("│")} ${rt(k===0?m.title:m.lines[k-1]??"",Dm,!1)}`):[...h.map(($)=>rt($,i,!1)),rt(` ${this.dim(m.brief)}`,i,!1)],b=[...this.hub?[rt(th(this.hub,this.color),r,!1)]:[],...s.map(($)=>rt($,r,!1)),...p,` ${this.keyBar(this.footer(),r-1)}`];return(this.help?this.helpBox(b,t,e,b.length-p.length-1):b).join(`
|
|
644
|
+
`)}helpRows(){return[["Move","↑↓ home end pgup pgdn"],["Series","←→ · enter on a series"],["Pick","space · a palette, a series, all"],["Filter","Any text · bksp · ctrl-u clears"],["","Each tab keeps its own"],["Tabs","⇧←→ Catalog, Installed, Markets, Errors"],...this.active().length>=2?[["Market","ctrl+s · one market, then all"]]:[],["Markets","space adds or removes · ←→ auto-update"],["","ctrl+r updates it, or searches again"],["Update","ctrl+r on a palette marked ↑"],["Apply","enter reviews and applies · esc cancels"],...this.hub?[["Screens","tab · shift+tab"]]:[],["Close","? esc"]]}helpBox(t,e,n,r){let i=this.helpRows(),o=Math.min(e-2,58),s=Math.floor((e-o)/2),a=`│${" ".repeat(o-2)}│`,c=[`╭─ Help ${"─".repeat(o-9)}╮`,a,...i.map(([l,d])=>`│${rt(` ${this.bold(l.padEnd(10))}${d}`,o-4)} │`),a,`╰${"─".repeat(o-2)}╯`],u=Math.max(0,Math.min(Math.max(r,Math.floor((n-c.length)/2)),n-1-c.length));return t.map((l,d)=>{let f=c[d-u];return f===void 0?l:`${Wg(l,s)}${f}`})}}import{existsSync as c5}from"node:fs";import{existsSync as lc,mkdirSync as z8,readFileSync as Zp}from"node:fs";import{dirname as D8}from"node:path";class Te extends Error{}import{closeSync as AF,mkdtempSync as TF,openSync as HF,readSync as CF,rmSync as RS}from"node:fs";import{homedir as LF,tmpdir as FF}from"node:os";import{join as PS}from"node:path";import{readFileSync as hC}from"node:fs";var yt={pitch:25,cols:22,rows:9,height:13},qi={cols:25,rows:21},be={cols:10,rows:3,pitch:12,top:4},ge=be.top+be.rows+1,mC=1073741824,ep=2147483648,pC=-1073741826,gC=1600,bC=56,wC=4,dv=20,$C=50,fv=[["space","unfolds a set of ×N"],["o","opens the post page in a browser"],["c","switches between cutouts and every post"],["a","opens the advanced filters"],["1-9","turn a tag of the tags row on or off"],["ctrl+v","tries on a picture from the clipboard — or drop one on the window"]];function np(t){return Math.max(0,Math.floor((t-1)/be.pitch))}function ir(t,e){let n=e-ge-2;return{perRow:Math.max(1,Math.floor((t-1)/yt.pitch)),rowsVis:Math.max(1,Math.floor(n/yt.height)),height:n}}function hl(t,e=!0){if(e)return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`;let n;try{n=hC(t.path).toString("base64")}catch{return}let r=n.match(/.{1,4096}/g)??[""];return r.map((i,o)=>{let s=o<r.length-1?1:0;return o===0?`\x1B_Ga=t,f=100,i=${t.id},m=${s},q=2;${i}\x1B\\`:`\x1B_Gm=${s},q=2;${i}\x1B\\`}).join("")}function kv(t,e){let n=t.crop===void 0?"":`,x=0,y=${t.crop*e.h},w=${t.cols*e.w},h=${t.rows*e.h}`;return`\x1B[${t.row+1};${t.col+1}H\x1B_Ga=p,i=${t.id},p=${t.id}${n},c=${t.cols},r=${t.rows},C=1,z=${t.z},q=2\x1B\\`}function rp(t){return`\x1B_Ga=d,d=i,i=${t},p=${t},q=2\x1B\\`}function Wa(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function ws(t){return`\x1B[38;2;${nt(t).join(";")}m`}function fl(t){return`\x1B[48;2;${nt(t).join(";")}m`}var Vm=!1;function ml(t){return Vm=!0,t.beat}function $s(t){return _n[ml(t)%_n.length]}function ft(t){return B(t)}function Zm(t,e){if(B(t)<=e)return t;let n="";for(let r of t){if(B(n+r)>e)break;n+=r}return n}function ei(t){return`\x1B[${30+t}m`}function Yi(t,e,n,r){return n?[[`${Hs} `,r,void 0,{kind:"link",url:n}],[t,e,n]]:[[t,e]]}function Jm(t){let e=Qf(t);return e?{kind:"key",key:e}:void 0}function Qm(t){return t.reduce((e,[n])=>e+ft(n),0)}function kC(t,e){let n=[],r=e;for(let[i,o,s,a]of t){let c=ft(i);if(c<=r){n.push([i,o,s,a]),r-=c;continue}n.push([`${Zm(i,r)}…`,o,s,a]);break}return n}class dl{parts=[];cols;constructor(t){this.cols=t}put(t,e,n="",r,i){return this.parts.push({col:t,text:e,sgr:n,...r?{link:r}:{},...i?{spot:i}:{}}),t+ft(e)}run(t,e){let n=t;for(let[r,i,o,s]of e)n=this.put(n,r,i,o,s);return n}mark(t,e,n){this.parts.push({col:t,text:" ".repeat(Math.max(0,e)),sgr:"",spot:n,hidden:!0})}zones(t){return this.parts.flatMap(({col:e,text:n,link:r,spot:i})=>{let o=i??(r?{kind:"link",url:r}:void 0),s=e>=0&&e<this.cols?ft(Zm(n,this.cols-e)):0;return o&&s>0?[{row:t,col:e,width:s,height:1,target:o}]:[]})}right(t,e){this.run(t-e.reduce((n,[r])=>n+ft(r),0),e)}center(t,e){this.run(Math.floor((t-e.reduce((n,[r])=>n+ft(r),0))/2),e)}render(){let t="";for(let{col:e,text:n,sgr:r,link:i,hidden:o}of this.parts){if(o||e>=this.cols||e<0)continue;let s=Zm(n,this.cols-e);t+=`\x1B[${e+1}G${r}${yc(s,i)}${r?Ft:""}`}return t}}function yC(t){return t.replace(/_\([^)]*\)?$/,"")}function yv(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<gC?ne:C]}function Ga(t,e,n,r){let i=[...r.keys??[]],o=r.lead,s=r.right,a=()=>{let l=[...o?[Qm(o)]:[],...i.map(([f,h])=>ft(f)+1+ft(h))];return(r.badge?ft(r.badge)+4:0)+l.reduce((f,h)=>f+h,0)+3*Math.max(0,l.length-1)+(s?3+ft(s[0])+1+ft(s[1]):0)};while(a()>e)if(i.length>2)i.splice(-2,1);else if(s)s=void 0;else if(i.length>1)i.splice(-2,1);else break;if(o&&a()>e)o=kC(o,Math.max(0,Qm(o)-(a()-e)-1));let c=0;if(r.badge)c=t.put(0,` ${r.badge} `,`\x1B[7;1m${n}`)+2;if([...o?[o]:[],...i.map(([l,d])=>[[l,ut,void 0,Jm(l)],[` ${d}`,C,void 0,Jm(l)]])].forEach((l,d)=>{c=t.run(c+(d?3:0),l)}),s){let l=Jm(s[0].split(" ")[0]??"");t.right(e,[[s[0],ut,void 0,l],[` ${s[1]}`,C,void 0,l]])}}function vC(t,e){if(t==="d")return C;if(t==="b")return ut;if(t==="s")return fl(e.colors.selection);if(t==="c")return fl(e.colors.cursor);let n=/^([BK]?)(\d+)$/.exec(t);if(!n)return"";let r=Number(n[2]),i=(o)=>r<8?o+r:o+52+r;if(n[1]==="K")return`\x1B[30;${i(40)}m`;return`\x1B[${n[1]==="B"?"1;":""}${i(30)}m`}function SC(t,e,n,r,i){let o=Dt.indexOf(Ri(r.scene)),s=Dt.flatMap((c,u)=>[...u?[[" ",""]]:[],[c.name,u===o?ut+i:C,void 0,{kind:"scene",scene:u}]]),a=s.reduce((c,[u])=>c+ft(u),0)<=n;t?.run(e,a?s:[[Ri(r.scene).name,ut+i],[` ${o+1}/${Dt.length}`,C]])}function EC(t,e,n,r,i,o,s){let{ansi:a,cursor:c}=o.colors;SC(t[e-2],n,r,o,s);let u=r<ck?3:4;if(r>=56)u=Math.min(7,Math.floor((r+1)/8)-1);let l=n;for(let f=0;f<8;f++)l=(t[e]?.put(l,"▀".repeat(u),ws(a[f]??c)+fl(a[f+8]??c))??l)+1;let d=e+2;for(let f of Ri(o.scene).lines){let h=qo(f,r);if(!h)continue;if(d>i)return;t[d]?.run(n,h.map(([m,p])=>[m,vC(p,o)])),d++}}function MC(t,e,n){let r=[[]];for(let s of t){let a=r[r.length-1];if(a.length===0||ft([...a,s].join(" "))<=e)a.push(s);else if(r.length<n)r.push([s]);else break}let i=r.reduce((s,a)=>s+a.length,0),o=r[r.length-1];while(i<t.length&&o.length>0&&ft([...o,`+${t.length-i}`].join(" "))>e)o.pop(),i--;if(i<t.length)o.push(`+${t.length-i}`);return r.filter((s)=>s.length>0).map((s)=>s.join(" "))}function hv(t){return t.replace(/^https?:\/\/(?:www\.)?/,"")}function xC(t,e,n,r,i){let o=r.info,s=o?.artists??[],a=ei(r.tiles[r.focus]?.siteAnsi??r.siteAnsi);[["Post",o?.page?Yi(hv(o.page),"",o.page,a):[["—",C]]],["Source",o?.source?Yi(hv(o.source),"",o.link,i):[["—",C]]],["Artist",[s.length>0?[s.join(" "),""]:["—",C]]]].forEach(([u,l],d)=>{t[e+d]?.put(n,u,C),t[e+d]?.run(n+12,l)})}function OC(t,e,n,r,i,o){let s=o.info,a=o.tiles[o.focus];if(!s||!a)return;let c=o.shown?.id===a.key?o.shown:void 0,u=n+12,l=Math.max(12,r-12),d=[`${a.width}×${a.height}${s.ext?` ${s.ext.toUpperCase()}`:""}`,...c?[Ju(c.bytes)]:[]].join(" · "),f=[s.rating??"—",a.score>0?`★${a.score}`:"",s.posted??""].filter(Boolean).join(" · "),h=(b,$)=>b.length>0?MC(b,l,$).map((k)=>[[k,""]]):[[["—",C]]],m=[["Characters",h(s.characters,2)],["Series",h(s.series,1)],["Tags",h(s.tags,3)],["Rating",[[[f,f==="—"?C:""]]]],["File",[[[d,""],...c?[[" ",""]]:[],...c?vv(c):[]]]],["Uploader",[[s.uploader?[s.uploader,""]:["—",C]]]]],p=e;for(let[b,$]of m){if(p+$.length-1>i)return;t[p]?.put(n,b,C);for(let k of $)t[p]?.run(u,k),p++}}var IC=["Size","Position","Opacity"],RC=[0,3,6];function PC(t,e){let{tune:n,untuned:r}=t;return e===0?n.size!==r.size:e===1?n.at!==r.at:n.opacity!==r.opacity}function NC(t){return t.toFixed(2)}function AC(t,e,n,r,i,o){let s=i.tuning;if(!s)return;let a=i.tiles[i.focus];t[e-3]?.run(n,[[i.palette,ut+o],[" Background",C],...a?[[" · ",C],...Yi(`${a.site} ${a.id}`,C,a.page||void 0,ei(a.siteAnsi))]:[]]);let c=Math.max(8,r-n-21),u=20,l=Math.max(100,s.fill);for(let[d,f]of IC.entries()){let h=e+RC[d],m=s.field===d,p=m?ut:C;if(m)t[h]?.put(n,"▶",o,void 0,{kind:"field",field:d});t[h]?.put(n+2,f,p,void 0,{kind:"field",field:d});let b;if(d===1){for(let $=1;$<=9;$++){let k=$===i.tune.at,v=t[e+2+Math.floor(($-1)/3)],S=n+12+($-1)%3*3;v?.mark(S-1,3,{kind:"place",at:$}),v?.put(S,k?"■":"·",k?ut+o:C)}b=Wt[i.tune.at-1]??"center"}else{let $;if(d===0){let{size:k}=i.tune;$=k==="fill"?c-1:Math.floor((k-u)*(c-1)/(l-u+1)),b=k==="fill"?"fill":`${k}%`}else $=Math.floor(Math.round(i.tune.opacity*100)*(c-1)/100),b=NC(i.tune.opacity);$=Math.max(0,Math.min(c-1,$)),t[h]?.run(n+12,[["━".repeat($),o],["●",ut],["─".repeat(c-1-$),C]]),t[h]?.mark(n+12,c,{kind:"track",field:d})}if(t[h]?.right(r-2,[[b,p]]),PC(i,d))t[h]?.put(r-1,"↺",m?ut+o:C)}}function TC(t,e,n,r,i,o){t[e]?.put(n,`╭${"─".repeat(i-2)}╮`,o);for(let s=e+1;s<e+r-1;s++)t[s]?.put(n,"│",o),t[s]?.put(n+i-1,"│",o);t[e+r-1]?.put(n,`╰${"─".repeat(i-2)}╯`,o)}function Xm(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function Ba(t){return`${V[Math.floor(t/Er)]?.name??"local"} ${t%Er}`}function _a(t,e,n){let r=V[Math.floor(e/Er)],i=Ba(e),o=t.indexOf(i);if(!r||o===-1)return[[t,n]];return[[t.slice(0,o),n],...Yi(i,n,r.pageUrl(e%Er),ei(r.ansi)),[t.slice(o+i.length),n]].filter(([a])=>a!=="")}function HC(t,e,n){let r=[{name:"all",moved:!1},...V].flatMap((o,s)=>{let a=`${o.name}${o.moved?"*":""}`,[c,u]=o.name===n.site?Xm(n,a):[` ${a} `,C],l=[c,u,void 0,{kind:"site",tab:s}];return s?[[" ",""],l]:[l]}),i=r.reduce((o,[s])=>o+ft(s),0)<=e;t.run(0,i?r:[Xm(n)])}function CC(t,e,n,r){if(n.chips.length===0)return;let i=[["tags ",C]],o=ft("tags "),s=n.chips.length;for(let[a,c]of n.chips.entries()){let u=` ${a+1} ${c.name} `;if(o+ft(u)+1>e-2)break;i.push([u,c.on?`\x1B[7m${r}`:C,void 0,{kind:"chip",index:a}],[" ",""]),o+=ft(u)+1,s--}if(s>0)i.push([`+${s}`,C]);t.run(0,i)}function LC(t,e,n,r,i){t[ge-1]?.put(0,"─".repeat(n-1),C);let o=t[be.top-1],s=np(n),a=r.held.length>s?Math.max(0,s-1):r.held.length;for(let[c,u]of r.held.slice(0,a).entries()){let l=c*be.pitch,d=u.up?ut:"";if(o.run(l+1,u.page?Yi(String(u.id),d,u.page,ei(u.ansi)):[["● ",ei(u.ansi)],[String(u.id),d]]),u.up)for(let f=0;f<be.rows;f++)t[be.top+f]?.put(l,"▌",i);if(u.thumb)e.push({id:mC+c,path:u.thumb,row:be.top,col:l+1,cols:be.cols,rows:be.rows,z:-1})}if(a<r.held.length)o.put(a*be.pitch+1,`+${r.held.length-a}`,C)}function FC(t,e,n,r){if(n.editing!==void 0){let c=t.run(0,[["⌕ ",r],[n.editing,""],["█",r]]),u=n.suggest?.length?" ↑↓ pick enter searches":" enter searches";t.put(c,n.editing?u:` A tag, a post URL or an id, or drop a picture or ctrl+v — ${n.tag||"esc leaves"}`,C);return}let i=t.run(0,[["⌕ ",r,void 0,{kind:"query"}],[n.tag||"Nothing yet — / searches, ctrl+v pastes a picture",n.tag?"":C,void 0,{kind:"query"}]]),o=gi.filter((c)=>!n.block.includes(c)),s=V.filter((c)=>!n.enabled.includes(c.name)).map((c)=>c.name),a=[n.preset,...n.solo?["solo"]:[],n.order,...n.rating.join("+")==="safe"?[]:[n.rating.join("+")],...o.length>0?[`allows ${o.join("+")}`]:[],...n.narrow.size>0?[`≥${n.narrow.size}px`]:[],...n.narrow.score>0?[`score≥${n.narrow.score}`]:[],...n.narrow.png?["png"]:[],...n.hide.length+n.hideTags.length>0?[`hides ${[...n.hide,...n.hideTags].join("+")}`]:[],...s.length>0?[`all skips ${s.join("+")}`]:[]];if(t.put(i,` ${a.join(" ")}`,C),n.total>0||!n.searching){let c=[[`${n.tiles.length}/${n.checked}`,""]];if(n.checked<n.total)c.push([` of ${n.total}`,C]);t.right(e,c)}}function vv(t){if(t.cut==="on")return[[`Cut out · ${t.clear}% transparent`,ho]];if(t.cut==="off")return[["Opaque · x cuts out",ne]];if(t.cut==="failed")return[["Opaque · no cut-out",ne]];return[t.clear>0?[`${t.clear}% transparent`,ho]:["Opaque",ne]]}function mv(t){return t.site==="all"?"any site":t.site}function tp(t,e){if(t.installing!==void 0)return _a(`${$s(t)} Installing ${t.palette} ← ${Ba(t.installing)}`,t.installing,ne);if(t.hint)return[[t.hint,ho]];if(t.error)return[[t.error,ne]];if(t.waiting!==void 0)return[[`${t.slow??t.site} asked to slow down · ${t.waiting}s`,ne]];if(t.fetching){let{id:n,got:r,size:i}=t.fetching;return _a(`${$s(t)} Fetching ${Ba(n)} · ${Vu(r,i)}`,n,ne)}if(t.cutting!==void 0)return _a(`${$s(t)} Cutting out ${Ba(t.cutting)}`,t.cutting,ne);if(t.preparing!==void 0)return _a(`${$s(t)} Preparing ${Ba(t.preparing)}`,t.preparing,ne);if(e)return[e];if(t.saved)return _a(t.saved.text,t.saved.key,ho);if(t.note)return[[t.note,C]];return}function Sv(t){if(t.ranking)return"Ranking previews by palette colors";if(t.stage==="check")return t.preset==="cutouts"?"Checking PNG headers":"Loading previews";return"Fetching posts"}function Ev(t,e){return t.ranking?`${e}${t.ranking.done}/${t.ranking.total}`:""}function jC(t,e,n,r,i){let{background:o,cursor:s,selection:a}=r.colors,{ranking:c}=r,u=c?Math.round(n*c.done/c.total):-1,l=Math.max(6,Math.round(n*0.22)),d=ml(r)%(dv*2)/dv,f=Math.round((n-l)*(0.5-0.5*Math.cos(Math.PI*(d<1?d:2-d)))),h=bt(o,s,i),m=bt(o,bt(a,o,0.15),i),p=Array.from({length:n},($,k)=>{let v=(u>=0?k<u:k>=f&&k<f+l)?h:m;return k===0||k===n-1?bt(v,o,0.55):v}),b=0;for(let $=1;$<=n;$++)if($===n||p[$]!==p[b])t?.put(e+b," ".repeat($-b),fl(p[b])),b=$}function _C(t,e,n,r,i){let{background:o,foreground:s}=i.colors,a=i.loaderFrom===void 0?0:Math.min(1,(ml(i)-i.loaderFrom)/wC),c=e+(n>=5?Math.floor((n-5)/2):0);t[c]?.center(r,[[Sv(i),ut+ws(bt(o,s,a))],[Ev(i," "),ws(bt(o,bt(s,o,0.45),a))]]);let u=Math.min(bC,r-8);if(jC(t[c+(n>=3?2:1)],Math.floor((r-u)/2),u,i,a),n<5)return;t[c+4]?.center(r,i.sites.flatMap(({name:l,arrived:d},f)=>[...f?[[" · ",ws(bt(o,s,0.25*a))]]:[],[l,ws(bt(o,d?bt(s,o,0.2):s,d?a:0.32*a))]]))}function BC(t,e,n,r,i,o){if(i<=r)return;let s=Math.max(1,Math.round(r*r/i)),a=Math.max(0,Math.min(r-s,Math.round(n.scroll*r/i)));for(let c=0;c<r;c++){let u=c>=a&&c<a+s;t[ge+c]?.put(e-1,u?"┃":"│",u?o:C)}}function GC(t,e,n){if(e)return[`${$s(t)} ${Sv(t)}${Ev(t," · ")}`,C];let r=n.filter((o)=>!o.missing),i=r.filter((o)=>o.thumb).length;return i<r.length?[`${$s(t)} Loading thumbnails · ${i}/${r.length}`,C]:void 0}function UC(t,e,n,r,i,o,s){let{perRow:a,rowsVis:c,height:u}=ir(r,i);FC(t[0],r,o,s),HC(t[1],r,o),CC(t[2],r,o,s),LC(t,e,r,o,s);let l=t.map((H,N)=>N>=ge&&N<ge+u?H:void 0),d=Math.floor(o.scroll/yt.height),f=Math.floor((o.scroll+u-1)/yt.height),h=[];for(let H=d;H<=f;H++){let N=ge+H*yt.height-o.scroll;for(let F=0;F<a;F++){let W=H*a+F,_=F*yt.pitch,X=o.tiles[W];if(!X)continue;h.push(X);let z=Math.max(N,ge),xt=Math.min(N+yt.height,ge+u);if(xt>z)n.push({row:z,col:_,width:yt.pitch-1,height:xt-z,target:{kind:"tile",index:W}});let et=W===o.focus;if(et)TC(l,N,_,yt.height,yt.pitch-1,s);let dr=N+1,dn=Math.max(dr,ge),fn=Math.min(dr+yt.rows,ge+u);if(X.thumb&&fn>dn)e.push({id:X.key,path:X.thumb,row:dn,col:_+1,cols:yt.cols,rows:fn-dn,...fn-dn<yt.rows?{crop:dn-dr}:{},z:-1});let hn=[...o.installed.includes(X.key)?[["✓ ",ho]]:[],...X.page||o.site!=="all"?Yi(String(X.id),et?ut:"",X.page||void 0,ei(X.siteAnsi)):[["● ",ei(X.siteAnsi)],[String(X.id),et?ut:""]],[" ",""],yv(X)],pc=yt.cols-(X.mates.length>0?1:0);if(l[N+10]?.run(_+1,Qm(hn)>pc?hn.map(([ad,cd,ud])=>[ad.replace(/^(\S) $/,"$1"),cd,ud]):hn),X.mates.length>0)l[N+10]?.put(_+yt.cols,"≈",s);l[N+11]?.put(_+1,X.artist?yC(X.artist).slice(0,yt.cols-8):"—",C);let ii=[];if(X.score>0)ii.push([`★${X.score}`,C]);if(X.variants>1)ii.push([` ×${X.variants}`,s]);if(ii.length>0)l[N+11]?.right(_+yt.cols+1,ii)}}let m=Math.ceil(o.tiles.length/a)*yt.height;BC(t,r,o,u,m,s);let p=Math.max(ge,ge+m-o.scroll),b=ge+u-p,$=o.searching&&b>=2;if($)_C(l,p,b,r-1,o);let k=o.searching&&o.tiles.length===0;if(k&&!o.error){let[H,N]=fv[Math.floor(ml(o)/$C)%fv.length];t[i-2]?.run(0,[["Tip ",C],[H,ut],[` ${N}`,C]])}let v=o.top*a,S=o.tiles.length-(o.top+c)*a,M=[...v>0?[`↑ ${v} above`]:[],...S>0?[`↓ ${S} more`]:[]];if(M.length>0)t[i-2]?.put(0,M.join(" "),C);if(!o.searching&&o.tiles.length===0&&!o.error&&o.tag)t[ge+1]?.put(0,o.preset==="cutouts"?`No transparent cutouts of ${o.tag} on ${mv(o)} — c searches every post, tab tries ${o.nextSite}`:`No posts of ${o.tag} on ${mv(o)} — tab tries ${o.nextSite}`,C);let I=GC(o,$,h),x=tp(o,I);return Ga(t[i-1],r,s,{badge:"IMAGE SEARCH",lead:x,keys:k&&x?.[0]===I?[]:[["←↑↓→","move"],["enter","try on"],["tab","site"],["ctrl+v","picture"],["s","settings"],["/","search"],["?","keys"]],right:["esc","back"]}),$}function WC(t,e,n,r,i,o){let s=i.tiles[i.focus];if(!s)return;let a=i.shown?.id===s.key?i.shown:void 0,c=[Xm(i,s.site,s.siteAnsi),[" ",""],...Yi(String(s.id),ut,s.page||void 0,ei(s.siteAnsi)),[" ",""],yv(s)];if(s.score>0)c.push([` · ★${s.score}`,C]);if(a)c.push([` · ${Ju(a.bytes)}`,C]);if(a){if(c.push([" ",""],...vv(a)),i.coloring==="original")c.push([" · own colors",C])}if(t[0]?.run(0,c),s.mates.length>0)t[0]?.right(n,[["≈ ",o],[s.mates.join(" "),C]]);if(xC(t,1,2,i,o),i.tuning)AC(t,8,2,2+Math.min(n-4,60),i,o);else if(i.details)OC(t,5,2,Math.min(n-4,Math.max(48,Math.floor(n*0.55))),r-2,i);else EC(t,7,2,n-4,r-2,i,o);if(i.shown)e.push({id:ep+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:pC});if(i.tuning){Ga(t[r-1],n,o,{badge:"IMAGE EDIT",lead:tp(i),keys:[["↑↓","field"],["←→","step"],["=","reset"],["+","reset all"],i.tuning.field===1?["1-9","place"]:["⇧←→","×10"],["c","colors"],["enter","keep"]],right:["esc","undo"]});return}let u=tp(i);Ga(t[r-1],n,o,{badge:"IMAGE PREVIEW",lead:u,keys:i.installing===void 0?[["←→","browse"],["enter","install"],["t","tune"],["c","colors"],["i","details"],...i.details?[]:[["⇧←→","example"]],...i.shown?.cut==="on"||i.shown?.cut==="off"?[["x","cut out"]]:[],["?","keys"]]:[],right:i.installing===void 0?["esc","grid"]:void 0})}var KC=[["Field","↑↓ size, position, opacity"],["Step","←→ · ⇧←→ ×10"],["Place","1-9 the nine positions"],["Reset","= this field back to its default · + every field"],["Colors","c the palette's tone or its own colors, opacity back to its default"],["Keep","enter back to try, installed with the picture"],["Undo","esc"],["Close","? esc"]],zC={grid:[["Move","←↑↓→ j k home end pgup pgdn"],["Try on","enter"],["Site",`tab shift+tab all, ${V.map((t)=>t.name).join(", ")}`],["Posts","c cutouts or every post"],["Search","/ a tag, a post URL or an id"],["Tags","1-9 turn a tag of the tags row on or off — the palette's own, then danbooru's related characters"],["Your own","ctrl+v or v a picture from the clipboard · drop one on the window or paste its link"],["Unfold","space a set of ×N"],["Open","o the post page in a browser"],["Settings","s rating, block, posts, solo, order, sets, remove bg"],["Advanced","a or Advanced › in settings min score, min size, sites, hide, hide tags, PNG only"],["Back","esc returns to preview"],["Close","? esc"]],try:[["Browse","←→"],["Install","enter"],["Tune","t size, position and opacity, installed with the picture"],["Colors","c the palette's tone or its own colors, installed with the picture"],["Details","i characters, series, tags, rating and file, under Post, Source and Artist"],["Example",`⇧←→ ${Dt.map((t)=>t.name.toLowerCase()).join(", ")}`],["Cut out","x the background off or on, on an opaque picture"],["Open","o the post page in a browser"],["Your own","ctrl+v or v a picture from the clipboard · drop one on the window"],["Grid","esc"],["Close","? esc"]]},ip=6,DC=24;function Ua(t){return[...t.settings.flatMap((e,n)=>Boolean(e.advanced)===t.advanced?[n]:[]),t.settings.length]}function qC(t){return t.replace(/^[A-Z](?=[a-z])/,(e)=>e.toLowerCase())}function pv(t){let e=t.settings.filter((n)=>Boolean(n.advanced)!==t.advanced).map((n)=>qC(n.label));return`${t.advanced?"Back to":"More filters:"} ${e.join(", ")} — enter opens the page, or a from any row`}function Mv(t,e,n){let r=t.indexOf(e);if(r!==-1)return t[(r+n+t.length)%t.length];let i=Number(e)||0;return(n>0?t.find((s)=>(Number(s)||0)>i):[...t].reverse().find((s)=>(Number(s)||0)<i))??t[n>0?0:t.length-1]}function Di(t,e){let n=[],r="";for(let i of t.split(" "))if(r&&ft(r)+1+ft(i)>e)n.push(r),r=i;else r=r?`${r} ${i}`:i;return r?[...n,r]:n}function YC(t){if(t.entry!=="number"||t.choices.includes(t.value))return t.choices;let e=t.choices.findIndex((n)=>(Number(n)||0)>Number(t.value));return e===-1?[...t.choices,t.value]:[...t.choices.slice(0,e),t.value,...t.choices.slice(e)]}function JC(t,e,n,r){let i=`\x1B[7;${30+r}m`,o=e&&n!==void 0;if(t.entry==="text")return[{text:` ${o?`${n}█`:t.value||"none"} `,sgr:o||e&&t.value?i:t.value?"":C}];let s=o?[]:t.value.split(" "),a=(o?t.choices:YC(t)).map((c,u)=>{let l=s.includes(c),d=t.multi&&e&&u===t.cursor?"4;":"";return{text:t.multi?` ${l?"[x]":"[ ]"} ${c} `:` ${c} `,sgr:l?e?`\x1B[${d}7;${30+r}m`:"":d?`\x1B[4m${C}`:C,choice:c}});return o?[...a,{text:` ${n}█ `,sgr:i}]:a}function gv(t){if(t.entry==="text")return[{text:" ".repeat(DC),sgr:""}];let e=t.choices.map((n)=>({text:t.multi?` [x] ${n} `:` ${n} `,sgr:""}));return t.entry==="number"?[...e,{text:` ${"0".repeat(ip)}█ `,sgr:""}]:e}function VC(t){return t.reduce((e,n)=>e+ft(n.text)+1,0)-1}function bv(t,e){let n=[[]],r=0;for(let i of t){let o=ft(i.text)>e?{...i,text:` …${Array.from(i.text).slice(-(e-2)).join("")}`}:i;if(r>0&&r+ft(o.text)>e)n.push([]),r=0;n[n.length-1]?.push(o),r+=ft(o.text)+1}return n}function wv(t){if(t.multi&&t.choices.every((e)=>t.default.split(" ").includes(e)))return"Default all";return`Default ${t.default&&t.default!==t.multi?.none?t.default:"none"}`}function $v(t){if(!t.tag)return"";if(!t.counts)return`${t.tag}: counting…`;let e=t.counts.map(({site:n,count:r})=>`${n} ${r===void 0?"no count":r.toLocaleString("en-US")}`);return`${t.tag}: ${e.join(" · ")}`}function ZC(t,e){let n=t.advanced?"basic":"advanced";if(!e)return{keys:[["↑↓","setting"],["enter",n],["s","save"]],right:["esc","undo"]};if(t.typing!==void 0)return{keys:[["⌫","erase"],["enter","done"]],right:["esc","cancel"]};if(e.entry)return{keys:[["↑↓","setting"],...e.entry==="number"?[["←→","step"]]:[],["a",n],["enter","type"],["s","save"]],right:["esc","undo"]};return{keys:[["↑↓","setting"],["←→","value"],["a",n],...e.multi?[["space","toggle"]]:[],["enter","save"]],right:["esc","undo"]}}function QC(t,e,n,r,i){let o=r.panel??0,s=r.settings.length,c=6+Math.max(...r.settings.map((z)=>ft(z.label))),u=Math.max(...r.settings.map((z)=>ft(wv(z)))),l=c+Math.max(...r.settings.map((z)=>VC(gv(z))))+u+5,d=Math.min(e-2,Math.max(48,l)),f=d-c-u-5,h=d-7,m=[!1,!0].map((z)=>({advanced:z,rows:Ua({settings:r.settings,advanced:z}).slice(0,-1)})),p=r.settings.map((z)=>bv(gv(z),f).length),b=Math.max(...m.map((z)=>z.rows.reduce((xt,et)=>xt+p[et],0))),$=Math.max(...m.map((z)=>Di(pv({settings:r.settings,advanced:z.advanced}),h).length),...r.settings.map((z)=>Di(z.about,h).length)),k=`${r.tag}: ${V.map((z)=>`${z.name} 0,000,000`).join(" · ")}`,v=r.tag?Math.max(Di(k,h).length,Di($v(r),h).length):0,S=b+$+v+8,M=Math.floor((e-d)/2),I=Math.max(1,Math.floor((n-1-S)/2)),x=`\x1B[7;${30+r.siteAnsi}m`;t[I]?.put(M,`╭─ Settings ${"─".repeat(Math.max(0,d-13))}╮`);for(let z=I+1;z<I+S-1;z++)t[z]?.put(M,`│${" ".repeat(d-2)}│`);let H=I+2;for(let z of Ua(r).slice(0,-1)){let xt=r.settings[z],et=z===o;if(et)t[H]?.put(M+2,"▶",i);if(t[H]?.mark(M+2,c-3,{kind:"setting",index:z}),t[H]?.put(M+4,xt.label,et?ut:""),xt.value!==xt.default)t[H]?.right(M+d-3,[[wv(xt),C]]);bv(JC(xt,et,r.typing,r.siteAnsi),f).forEach((dr,dn)=>{let fn=M+c;for(let hn of dr)fn=t[H+dn].put(fn,hn.text,hn.sgr,void 0,{kind:"choice",index:z,choice:hn.choice}),fn+=1}),H+=p[z]}let N=m.find((z)=>z.advanced!==r.advanced)?.rows??[],F=t[I+3+b];if(o===s)F.put(M+2,"▶",i);let W=F.put(M+3,r.advanced?" ‹ Basic ":" Advanced › ",o===s?x:ut,void 0,{kind:"setting",index:s});if(N.some((z)=>r.settings[z]?.value!==r.settings[z]?.default))F.put(W+1,"•",C);t[I+5+b]?.put(M+2,"─".repeat(d-4),C),Di(r.settings[o]?.about??pv(r),h).forEach((z,xt)=>{t[I+6+b+xt]?.put(M+4,z)}),Di($v(r),h).forEach((z,xt)=>{t[I+6+b+$+xt]?.put(M+4,z,C)}),t[I+S-1]?.put(M,`╰${"─".repeat(d-2)}╯`);let{keys:_,right:X}=ZC(r,r.settings[o]);Ga(t[n-1],e,i,{keys:_,right:X})}function XC(t,e,n,r,i){let o=r.tuning?KC:zC[r.mode],s=Math.min(e-2,Math.max(50,...o.map(([,f])=>ft(f)+16))),a=o.map(([f,h])=>({label:f,parts:Di(h,s-16)})),c=a.reduce((f,{parts:h})=>f+h.length,0)+4,u=Math.floor((e-s)/2),l=Math.max(2,Math.floor((n-c)/2));t[l]?.put(u,`╭─ Help ${"─".repeat(s-9)}╮`);for(let f=l+1;f<l+c-1;f++)t[f]?.put(u,`│${" ".repeat(s-2)}│`);let d=l+2;for(let{label:f,parts:h}of a){t[d]?.put(u+3,f,ut);for(let m of h)t[d]?.put(u+13,m),d++}t[l+c-1]?.put(u,`╰${"─".repeat(s-2)}╯`),Ga(t[n-1],e,i,{badge:"HELP",right:["? esc","close"]})}function tL(t,e,n){let r=e.suggest??[],i=r.map((a)=>a.alias??(a.count>0?String(a.count):a.palette??"0")),o=Math.max(...r.map((a)=>ft(a.value))),s=Math.max(7,...i.map(ft));r.forEach((a,c)=>{let u=c===e.pick,l=t[1+c];l?.run(0,[[u?"▸ ":" ",n,void 0,{kind:"suggest",index:c}],[a.value,u?ut+n:"",void 0,{kind:"suggest",index:c}]]),l?.right(2+o+2+s,[[i[c],C]])})}function ll(t,e=[]){return[...e,...t.flatMap((n,r)=>n.zones(r))]}function op(t,e,n){let r=Array.from({length:n},()=>new dl(e)),i=[],o=[],s=ws(t.colors.cursor);if(Vm=!1,e<qi.cols||n<qi.rows)return r[0]?.put(0,"ttheme find",ut+s),r[1]?.put(0,`Needs ${qi.cols}×${qi.rows} — now ${e}×${n}`),r[2]?.put(0,"esc quits",C,void 0,{kind:"key",key:"esc"}),{lines:r.map((c)=>c.render()),images:i,zones:ll(r),loader:!1,tick:!1};let a=!1;if(t.mode==="try")WC(r,i,e,n,t,s);else a=UC(r,i,o,e,n,t,s);if(t.mode==="grid"&&t.editing!==void 0&&t.suggest?.length){for(let c=1;c<n-1;c++)r[c]=new dl(e);return tL(r,t,s),{lines:r.map((c)=>c.render()),images:[],zones:ll(r),loader:!1,tick:!1}}if(t.help||t.panel!==void 0){let c=t.mode==="try"?i:[];for(let u=0;u<n;u++)r[u]=new dl(e);if(t.help)XC(r,e,n,t,s);else QC(r,e,n,t,s);return{lines:r.map((u)=>u.render()),images:c,zones:ll(r),loader:!1,tick:!1}}return{lines:r.map((c)=>c.render()),images:i,zones:ll(r,o),loader:a,tick:Vm}}var eL=130,nL=38,rL=96,iL=28,za=[{id:"shell",scenes:["Diff","Logs","Shell"],name:"zsh",tail:!0},{id:"code",scenes:["Editor"],name:"nvim",tail:!1},{id:"monitor",scenes:["Top"],name:"htop",tail:!1}],oL={Shell:[0,1,2,3,4,6,7,9,10,12,14],Diff:[0,1,3,4,6,7,8,9,10,15],Logs:[0,1,2,3,4,5,6,7,8,9,10]},xv=(t)=>Array.from({length:8},(e,n)=>`«K${t+n}» «»`).join(" "),sL=["«2»❯ «»colortest",`«d»0-7 ${xv(0)}`,`«d»8-15 ${xv(8)}`],Ov=2;function aL(t){let e=za.length;return za[(t%e+e)%e]}function Pv(){return za.map((t)=>t.name)}function Da(t,e,n){let r=t>=eL&&e>=nL?"full":t>=rL&&e>=iL?"tabs":void 0;if(!r)return;let i=r==="full"?t>=140?47:38:37,o=t-i-1,s=i+1+Ov,a=i+o-Ov,c=3,u=e-3,l={col:s,row:c,cols:a-s+1,rows:u-c+1},d={col:s+1,row:c+3,cols:l.cols-2,rows:u-c-3},f=[{row:c,col:s,length:l.cols,down:!1},{row:c+2,col:s,length:l.cols,down:!1},{row:u,col:s,length:l.cols,down:!1},{row:c,col:s,length:u-c+1,down:!0},{row:c,col:a,length:u-c+1,down:!0}],h=aL(n);return{tier:r,side:i,width:o,frame:l,title:{col:d.col,row:c+1,cols:d.cols,rows:1},inner:d,rules:f,tiles:[{id:h.id,name:h.name,col:d.col,row:d.row,width:d.cols,rows:d.rows}]}}var Ka="«2»▎ ",Iv="«3»▎ ",cL="«1»▁ ",uL=[["","«5»import«» { «4»readFile«» } «5»from «2»'node:fs/promises'"],["","«5»import«» { «5»type «6»Hex«», «4»contrast«» } «5»from «2»'./color.ts'"],["",""],["","«8»/** A palette read from disk and checked against the gate. */"],[Ka,"«5»export interface «6»Palette «»{"],[Ka," name: «6»string"],[Ka," ansi: «6»Hex«»[]"],[Ka," ratio?: «6»number"],[Ka,"}"],["",""],["","«5»const «»SIXTEEN = «3»16"],["","«5»const «»FLOOR = «3»4.5 «8»// WCAG AA for body text"],["",""],["","«5»export async function «4»load«»(path: «6»string«»): «6»Promise«»<«6»Palette«»> {"],[Iv," «5»const «»text = «5»await «4»readFile«»(path, «2»'utf8'«»)"],[Iv," «5»const «»colors = «s»parse(text)«».colors ?? {}"],[""," «5»if «»(colors.ansi.length !== «K3»SIXTEEN«») { «1»● needs 16 ANSI colors"],[""," «5»throw new «6»Error«»(«2»'expected sixteen colors, got '«» + colors.ansi.length)"],[""," }"],[cL," «5»const «»ratio = «4»contrast«»(colors.ansi[«3»0«»], colors.ansi[«3»7«»]) «3»● ratio is read once"],[""," «5»return «»{ name: path, ...colors, ratio: «c»r«»atio }"],["","}"],["",""],["","«5»export function «4»passes«»(palette: «6»Palette«»): «6»boolean «»{"],[""," «5»return «»(palette.ratio ?? «3»0«») >= FLOOR «8»// TODO: check the bright pairs"],["","}"]],lL=21;function dL(){return["«K4» theme.ts «s» scenes.ts «s» contrast.ts ",...uL.map(([t,e],n)=>{let r=String(n+1).padStart(3);return`${n+1===lL?`«b»${r}`:`«d»${r}`} ${t||"«» "}«»${e}`})]}function sp(t,e,n,r){let i=Math.max(1,r-t.length-2-n.length),o=0,s=`«6»${t}«b»[`;for(let[a,c]of e){let u=Math.min(i-o,Math.round(c*i));s+=`«${a}»${"|".repeat(u)}`,o+=u}return`${s}«»${" ".repeat(i-o)}${n}«b»]`}var fL=[[0.31,0.07,0],[0.22,0.02,0.03],[0.04,0.01,0],[0.52,0.12,0],[0.1,0.02,0],[0.41,0.11,0],[0.02,0,0],[0.15,0.03,0.04]],hL=["«s» 4127 kec 24 0 412G 612M «s»R 38.2 3.7 3:12.44 node dev.js"," 2210 kec 31 0 411G 1.2G «2»R«» 12.0 7.5 1:02.10 «d»/Applications/«b»Ghostty"," 3301 kec 31 0 409G 12M S 4.4 0.1 0:05.61 «b»zsh"," 3302 kec 31 0 409G 9.8M S 0.0 0.1 0:00.42 «d»├─ «b»nvim «»src/theme.ts"," 3310 kec 31 0 410G 88M S 1.2 0.5 0:03.18 «d»│ └─ «b»tsserver"," 3402 kec 24 0 409G 21M «2»R«» 0.6 0.1 0:01.02 «d»└─ «b»htop"," 501 kec 31 «4»10«» 409G 34M S 0.3 0.2 0:02.77 «b»bun «»test --watch"," 1180 kec 31 0 409G 72M «1»D«» 0.0 0.4 0:00.91 «b»rsync «»-a ~/Pictures backup:"," 812 «d»root«» «1» 4 -20«» 410G 1.5G S 3.1 9.4 0:44.02 «d»kernel_task"," 167 «d»root«» 31 0 411G 402M S 0.9 2.5 0:12.80 «d»WindowServer"," 344 «d»_mdns«» 31 0 408G 5.1M S 0.0 0.0 0:00.33 «d»mDNSResponder"],mL=["Help","Setup","Search","Filter","Tree","SortBy","Nice -","Nice +","Kill","Quit"];function pL(t,e,n){return`«${t}»${e}${" ".repeat(Math.max(0,n-B(e)))}`}function gL(t){let e=t-2,n=Math.floor((e-2)/2),r=(i)=>{let[o,s,a]=fL[i],c=`${((o+s+a)*100).toFixed(1)}%`;return sp(String(i).padStart(3),[["2",o],["1",s],["4",a]],c,n)};return[...[0,1,2,3].map((i)=>`${r(i)} ${r(i+4)}`),`${sp("Mem",[["2",0.45],["4",0.1],["3",0.07]],"9.84G/16.0G",n)} «6»Tasks: «b»214«», 1093 thr; «B2»4«» running`,`${sp("Swp",[["1",0.15]],"0.31G/2.00G",n)} «6»Load average: «b»2.14 «»1.87 «d»1.52`,`${" ".repeat(n)} «6»Uptime: «b»3 days, 04:12:55`,"",pL("K2"," PID USER PRI NI VIRT RES S CPU% MEM% TIME+ Command",e),...hL.map((i)=>i.startsWith("«s»")?`${i}${" ".repeat(Math.max(0,e-B(i.replace(/«[^»]*»/g,""))))}`:i)]}function bL(t){let e=t-2,n="",r=0;return mL.forEach((i,o)=>{let s=`F${o+1}`,a=i.padEnd(6);if(r+s.length+a.length<=e)n+=`«»${s}«K6»${a}`,r+=s.length+a.length}),`${n}«K6»${" ".repeat(Math.max(0,e-r))}`}function Rv(t,e,n){if(t==="Editor")return dL();if(t==="Top")return gL(n);let r=Dt.find((s)=>s.name===t)?.lines??[],i=e?oL[t]:void 0,o=i?i.map((s)=>r[s]??""):r;return t==="Shell"?[...o.slice(0,-1),...sL,...o.slice(-1)]:o}function pl(t,e){let n=[];for(let r of t){let i=qo(r,e);if(!i)continue;let o=0;n.push(i.map(([s,a])=>{let c={text:s,role:a,col:o};return o+=B(s),c}))}return n}function wL(t){let r=t-2-B("«K4» NORMAL «s» main src/theme.ts [+] ".replace(/«[^»]*»/g,""))-B("«K1» 1 «K3» 1 «s» utf-8 typescript 21:28 «K4» 80% ".replace(/«[^»]*»/g,""));return`${"«K4» NORMAL «s» main src/theme.ts [+] "}${" ".repeat(Math.max(0,r))}${"«K1» 1 «K3» 1 «s» utf-8 typescript 21:28 «K4» 80% "}`}function $L(t,e){if(t.id==="code")return[wL(e),'«d»"src/theme.ts" 26L, 912B written'];return t.id==="monitor"?[bL(e)]:[]}function kL(t,e,n){let r=pl($L(t,e),e),i=Math.max(0,n-r.length),o=[];for(let a of[...t.scenes].reverse()){let c=pl(Rv(a,!1,e),e),u=pl(Rv(a,!0,e),e),l=[c,u].find((d)=>o.length+d.length<=i);if(!l){if(o.length===0)o=t.tail?u.slice(u.length-i):u.slice(0,i);break}o=[...l,...o]}if(r.length===0)return o;let s=pl(Array.from({length:i-o.length},()=>t.id==="code"?"«4»~":""),e);return[...o,...s,...r]}function qa(t){let e=za.find((n)=>n.id===t.id);return e?kL(e,t.width,t.rows):[]}function ap(t,e){let{text:n,ground:r}=Av(t);return n===e||r===e}function Nv(t,e){let n=t.inner;return za.map((r)=>({name:r.name,count:qa({id:r.id,name:r.name,col:n.col,row:n.row,width:n.cols,rows:n.rows}).flat().filter((i)=>ap(i.role,e)).length}))}function Av(t){if(t==="s")return{text:1,ground:3};if(t==="c")return{text:1,ground:2};let e=/^([BK]?)(\d+)$/.exec(t);if(!e)return{text:1,ground:0};let n=4+Number(e[2]);return e[1]==="K"?{text:4,ground:n}:{text:n,ground:0}}function cp(t,e){if(e>=4){let n=/^([BK]?)(\d+)$/.exec(t);return n!==null&&Number(n[2])===e-4}return e===3&&t==="s"||e===2&&t==="c"}function gl(t){let e=[];for(let n of t.tiles)qa(n).forEach((r,i)=>{r.forEach((o,s)=>{e.push({spot:{pane:n.id,line:i,run:s},col:o.col,text:o.text,role:o.role})})});return e}function up(t,e){return t.pane===e.pane&&t.line===e.line&&t.run===e.run}function Tv(t,e){let n=gl(t);return(n.find((r)=>cp(r.role,e))??n[0])?.spot}function bl(t,e){return e&&gl(t).find((n)=>up(n.spot,e))?.spot}function Hv(t,e,n){let r=gl(t);if(r.length===0)return;let i=e?r.findIndex((f)=>up(f.spot,e)):-1;if(i<0)return r[0]?.spot;let o=r[i];if(n==="left"||n==="right")return r[(i+(n==="left"?r.length-1:1))%r.length]?.spot;if(n==="next"||n==="previous"){let f=t.tiles.map((p)=>p.id),h=f.indexOf(o.spot.pane),m=f[(h+(n==="next"?1:f.length-1))%f.length];return r.find((p)=>p.spot.pane===m)?.spot}let s=n==="up"?-1:1,a=r.filter((f)=>f.spot.pane===o.spot.pane),c=[...new Set(a.map((f)=>f.spot.line))],u=c[c.indexOf(o.spot.line)+s];if(u===void 0){let f=t.tiles.map((k)=>k.id),h=f.indexOf(o.spot.pane)+s,m=f[(h+f.length)%f.length],p=r.filter((k)=>k.spot.pane===m),b=s<0?p.at(-1)?.spot.line??0:p[0]?.spot.line??0,$=p.filter((k)=>k.spot.line===b);return($.find((k)=>k.col>=o.col)??$.at(-1))?.spot}let l=a.filter((f)=>f.spot.line===u);return(l.find((f)=>f.col<=o.col&&f.col+B(f.text)>o.col)??l.find((f)=>f.col>=o.col)??l.at(-1))?.spot}function Cv(t,e){let n=gl(t).find((r)=>up(r.spot,e));return n?Av(n.role):void 0}var yL={lr:"─",du:"│",dr:"╭",dl:"╮",ru:"╰",lu:"╯",dlr:"┬",lru:"┴",dru:"├",dlu:"┤",dlru:"┼"};function Lv(t){let e=new Map,n=(i,o,s)=>{let a=e.get(i)??new Map;e.set(i,a);let c=a.get(o)??new Set;a.set(o,c),c.add(s)};for(let i of t)for(let o=0;o<i.length;o++){let s=i.down?i.row+o:i.row,a=i.down?i.col:i.col+o;if(o>0)n(s,a,i.down?"u":"l");if(o<i.length-1)n(s,a,i.down?"d":"r")}let r=new Map;for(let[i,o]of e){let s=new Map;for(let[a,c]of o){let u=[...c].sort().join("");s.set(a,yL[u]??(c.has("l")||c.has("r")?"─":"│"))}r.set(i,s)}return r}import{execFile as vL}from"node:child_process";import{createHash as Bv}from"node:crypto";import{existsSync as SL,mkdtempSync as EL,readFileSync as yl,rmSync as ML,statSync as Gv,writeFileSync as Uv}from"node:fs";import{homedir as xL,tmpdir as OL}from"node:os";import{join as wl}from"node:path";import{fileURLToPath as IL}from"node:url";import{promisify as RL}from"node:util";var Nn=RL(vL),$l=67108864,PL=4096,fp=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],NL=["text/uri-list","text/plain;charset=utf-8","text/plain"],lp=[...fp,"text/uri-list","text/plain"];function AL(t){try{return Gv(t).isFile()}catch{return!1}}function TL(t){let e=[],n="",r="",i=!1;for(let o=0;o<t.length;o++){let s=t[o];if(r==="'")if(s==="'")r="";else n+=s;else if(r==='"')if(s==='"')r="";else if(s==="\\"&&'"\\$`'.includes(t[o+1]??""))n+=t[++o];else n+=s;else if(s==="\\"&&o+1<t.length)n+=t[++o],i=!0;else if(s==="'"||s==='"')r=s,i=!0;else if(/\s/.test(s)){if(i)e.push(n);n="",i=!1}else n+=s,i=!0}if(i)e.push(n);return e}function Fv(t){if(/^file:\/\//i.test(t))try{return IL(t)}catch{return}if(t.startsWith("~/"))return wl(xL(),t.slice(2));return t.startsWith("/")?t:void 0}function ks(t,e=AL){let n=[];for(let r of t.replace(/\r\n?/g,`
|
|
662
645
|
`).split(`
|
|
663
|
-
`)){let i=
|
|
646
|
+
`)){let i=Fv(r.trim());if(i&&e(i)){n.push(i);continue}for(let o of TL(r)){if(/^https?:\/\/\S+$/i.test(o)){n.push(o);continue}let s=Fv(o);if(s&&e(s))n.push(s)}}return n}function jv(t){let e=hi(t)?wn(t):Dd(t);if(!e)return;return{ext:hi(t)?"png":"jpg",width:e.width,height:e.height}}async function kl(t,e){let n=jv(t);if(n&&n.width*n.height<=Se)return{bytes:t,...n,source:e};if(process.platform!=="darwin")throw Error(n?`${n.width}×${n.height} is over ${Se/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=EL(wl(OL(),"ttheme-attach-"));try{let i=wl(r,"in"),o=wl(r,"out.png");Uv(i,t);let s=!n||n.width*n.height>Se?["--resampleHeightWidthMax",String(PL)]:[];await Nn("sips",["-s","format","png",...s,i,"--out",o]).catch(()=>{throw Error("that is not a picture macOS can read")});let a=new Uint8Array(yl(o)),c=jv(a);if(!c)throw Error("that is not a picture macOS can read");return{bytes:a,...c,source:e}}finally{ML(r,{recursive:!0,force:!0})}}async function hp(t,e){if(/^https?:\/\//i.test(t)){let n=await fetch(t,{headers:{"User-Agent":Xd},signal:e});if(!n.ok)throw Error(`${new URL(t).host} answered ${n.status}`);if(Number(n.headers.get("content-length")??0)>$l)throw Error("that picture is over 64 MB");let r=new Uint8Array(await n.arrayBuffer());if(/^text\/html/i.test(n.headers.get("content-type")??""))throw Error(`${new URL(t).host} sent a web page, not a picture — copy the image address instead`);return kl(r,t)}if(Gv(t).size>$l)throw Error("that picture is over 64 MB");return kl(new Uint8Array(yl(t)),t)}var Wv=new Map,or={key:"local",name:"local",origin:"file://",moved:!1,cutouts:"",best:"",tagBudget:0,ors:!1,vouched:!0,scored:!1,ansi:7,ratings:{safe:new Set,questionable:new Set,explicit:new Set},rate:()=>"",narrow:()=>[],postsUrl:()=>"",countUrl:()=>"",postUrl:()=>"",pageUrl:(t)=>Wv.get(t)??"",parse:()=>[],count:()=>0};function Kv(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function zv(t,e){Wv.set(t,e)}function Dv(t){return Number.parseInt(Bv("sha1").update(t).digest("hex").slice(0,8),16)%Er}var HL=`ObjC.import('AppKit')
|
|
664
647
|
function run(argv) {
|
|
665
648
|
const pb = $.NSPasteboard.generalPasteboard
|
|
666
649
|
const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
|
|
@@ -685,16 +668,16 @@ function run(argv) {
|
|
|
685
668
|
if (web && web.count > 0) return web.objectAtIndex(0).absoluteString.js
|
|
686
669
|
const text = pb.stringForType('public.utf8-plain-text')
|
|
687
670
|
return text && !text.isNil() ? text.js : ''
|
|
688
|
-
}`,
|
|
671
|
+
}`,CL=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
|
|
689
672
|
$c = [Windows.Forms.Clipboard]
|
|
690
673
|
$f = $c::GetFileDropList(); if ($f.Count) { $f; exit }
|
|
691
674
|
$p = Join-Path $env:TEMP 'ttheme-clipboard.png'
|
|
692
675
|
$s = $c::GetData('PNG'); if ($s -is [IO.MemoryStream]) { [IO.File]::WriteAllBytes($p, $s.ToArray()); $p; exit }
|
|
693
676
|
$i = $c::GetImage(); if ($i) { $i.Save($p, [Drawing.Imaging.ImageFormat]::Png); $p; exit }
|
|
694
|
-
$c::GetText()`;function
|
|
695
|
-
`).map((
|
|
696
|
-
`).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await
|
|
697
|
-
`)}}if(process.platform==="linux")return
|
|
677
|
+
$c::GetText()`;function qv(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(yl("/proc/version","utf8"))}catch{return!1}}async function LL(t){let e=Boolean(process.env.WAYLAND_DISPLAY),n=e?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await Nn(n[0],n[1])).stdout.split(`
|
|
678
|
+
`).map((s)=>s.trim()),i=(s)=>e?Nn("wl-paste",["--no-newline","--type",s],{encoding:"buffer",maxBuffer:$l}):Nn("xclip",["-selection","clipboard","-t",s,"-o"],{encoding:"buffer",maxBuffer:$l});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let o=fp.find((s)=>r.includes(s));if(o)return Uv(t,(await i(o)).stdout),{image:t};return{text:r.some((s)=>s.startsWith("text/plain")||s==="UTF8_STRING")?(await i(r.includes("text/plain")?"text/plain":"UTF8_STRING")).stdout.toString("utf8"):""}}function mp(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function Yv(t){if(process.platform==="darwin"){let e=(await Nn("osascript",["-l","JavaScript","-e",HL,t])).stdout.trim();return e===t?{image:t}:{text:e}}if(qv()){let e=(await Nn("powershell.exe",["-NoProfile","-STA","-Command",CL])).stdout.replace(/\r/g,"").trim(),n=await Promise.all(e.split(`
|
|
679
|
+
`).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await Nn("wslpath",["-u",r])).stdout.trim():r));return n.length===1&&/ttheme-clipboard\.png$/.test(n[0]??"")?{image:n[0]}:{text:n.join(`
|
|
680
|
+
`)}}if(process.platform==="linux")return LL(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var FL=`ObjC.import('AppKit')
|
|
698
681
|
function run() {
|
|
699
682
|
const pb = $.NSPasteboard.generalPasteboard
|
|
700
683
|
const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
|
|
@@ -706,57 +689,74 @@ function run() {
|
|
|
706
689
|
picture = ['public.png', 'public.tiff', 'public.jpeg', 'public.heic'].some((t) => types.includes(t))
|
|
707
690
|
}
|
|
708
691
|
return pb.changeCount + '\\t' + (picture ? 'picture' : '')
|
|
709
|
-
}`;async function pv(){if(Em())return;if(process.platform==="darwin"){let[t="",e=""]=(await yn("osascript",["-l","JavaScript","-e",pH])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!hv()){let e=Boolean(process.env.WAYLAND_DISPLAY)?(await yn("wl-paste",["--list-types"])).stdout:(await yn("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:e,picture:/^image\//m.test(e)}}return}function Qu(t){return t.length>8&&/^(?:\/|~\/|file:|https?:)/.test(t)}var ya=(t)=>Buffer.from(t).toString("base64"),km=(t)=>Buffer.from(t,"base64");function sv(t,e){return e.find((n)=>t.includes(n))}class Sm{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=ya(ov("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(t,e){this.send=t,this.deliver=e}start(){let t="";if(this.clipboard)t+="\x1B[?5522h";if(this.drops)t+=`\x1B]72;t=a;${$m.join(" ")}\x1B\\`;this.send(t)}stop(){this.send(`${this.clipboard?"\x1B[?5522l":""}${this.drops?"\x1B]72;t=A\x1B\\":""}`)}ask(){this.reading={mime:".",chunks:[],pw:"",listing:!0},this.send(`\x1B]5522;type=read:name=${ya("ttheme")}:pw=${this.pw};${ya(".")}\x1B\\`)}take(t){if(t.code==="5522")this.clip(t.meta,t.payload);else if(t.code==="72")this.drop(t.meta,t.payload)}clip(t,e){if(t.type!=="read")return;let n=t.status??"";if(n==="OK"){if(this.reading??={mime:".",chunks:[],pw:t.pw??"",listing:!0},t.pw)this.reading.pw=t.pw;return}let r=this.reading;if(!r)return;if(n==="DATA"){if(r.mime=t.mime?km(t.mime).toString("utf8"):r.mime,e)r.chunks.push(km(e));return}if(this.reading=void 0,n!=="DONE"){this.deliver({kind:"error",message:n==="EPERM"?"The clipboard read was not allowed":`The terminal answered ${n}`});return}let i=Buffer.concat(r.chunks);if(r.listing){let s=i.toString("utf8").split(/\s+/).filter(Boolean),o=sv(s,[...ym,...uH]);if(!o){this.deliver({kind:"text",text:""});return}let a=r.pw||this.pw,c=r.pw?"Paste event":"ttheme";this.reading={mime:o,chunks:[],pw:a,listing:!1},this.send(`\x1B]5522;type=read:name=${ya(c)}:pw=${a};${ya(o)}\x1B\\`);return}this.deliver(r.mime.startsWith("image/")?{kind:"bytes",bytes:new Uint8Array(i),source:"clipboard"}:{kind:"text",text:i.toString("utf8")})}drop(t,e){let n=t.t??"";if(n==="m"){if(t.x==="-1"){this.offered=[];return}if(e){this.offered=e.split(" ").filter(Boolean);let a=$m.filter((c)=>this.offered.includes(c));this.send(`\x1B]72;t=m:o=${a.length>0?1:0};${a.join(" ")}\x1B\\`)}return}if(n==="M"){let a=e?e.split(" ").filter(Boolean):this.offered,c=sv(a,$m);if(!c){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:a,index:a.indexOf(c)+1,chunks:[]},this.send(`\x1B]72;t=r:x=${this.dropping.index}\x1B\\`);return}let r=this.dropping;if(!r)return;if(n==="R"){this.dropping=void 0,this.send("\x1B]72;t=r:o=0\x1B\\"),this.deliver({kind:"error",message:`The drop failed: ${e.split(":")[0]||"unknown error"}`});return}if(n!=="r"&&n!=="")return;if(e)r.chunks.push(km(e));if(t.m==="1"||e)return;this.dropping=void 0;let i=Buffer.concat(r.chunks),s=r.mimes[r.index-1]??"",o;if(s.startsWith("image/"))o={kind:"bytes",bytes:new Uint8Array(i),source:"drop"};else{let a=i.toString("utf8"),c=s==="text/uri-list"?eo(a).find((u)=>eH(u)):void 0;o=c?{kind:"bytes",bytes:new Uint8Array(Zu(c)),source:c}:{kind:"text",text:a}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(o)}}var Mm=5,gH=6,gv=0.05,bH=[1,2,3,4,5,6,9,10,11,12,13,14],bv=(t,e)=>(e-t+360)%360<=180?1:-1;function va(t,e,n){let r=e*Math.cos(n*Math.PI/180),i=e*Math.sin(n*Math.PI/180),s=[t+0.3963377774*r+0.2158037573*i,t-0.1055613458*r-0.0638541728*i,t-0.0894841775*r-1.291485548*i].map((l)=>l**3),[o,a,c]=s,u=[4.0767416621*o-3.3077115913*a+0.2309699292*c,-1.2684380046*o+2.6097574011*a-0.3413193965*c,-0.0041960863*o-0.7034186147*a+1.707614701*c];if(u.some((l)=>l<-0.0001||l>1.0001))return;return u.map((l)=>{let f=Math.min(1,Math.max(0,l));return Math.round(255*(f<=0.0031308?12.92*f:1.055*f**0.4166666666666667-0.055))})}function Om(t,e,n){if(va(t,n,e)!==void 0)return n;let r=0,i=n;for(let s=0;s<24;s++){let o=(r+i)/2;if(va(t,o,e)===void 0)i=o;else r=o}return r}function _e(t,e,n){return`#${(va(t,Om(t,n,e),n)??[0,0,0]).map((i)=>i.toString(16).padStart(2,"0")).join("")}`}function wH(t,e){let{l:n,c:r}=St(t);return _e(n,r,(e+360)%360)}function $H(t,e,n){let{l:r,c:i,h:s}=St(t),o=vt(e)<0.18,a=(l)=>_e(o?r+(1-r)*l:r*(1-l),i,s);if(wt(a(1),e)<n+gv)return a(1);let c=0,u=1;for(let l=0;l<30;l++){let f=(c+u)/2;if(wt(a(f),e)>=n+gv)u=f;else c=f}return a(u)}function kH(t,e){let{l:n,c:r,h:i}=St(t),s=0,o=n;for(let a=0;a<30;a++){let c=(s+o)/2;if(vt(_e(c,r,i))<=e-0.005)s=c;else o=c}return _e(s,r,i)}function yH(t,e,n){let r=be[e],[i,s]=[St(t[e]),St(t[e+8])],o=(l,f)=>n.has(l)?[f]:Array.from({length:2*r.width+1},(d,h)=>(r.center-r.width+h+360)%360),a=(l,f,d)=>er.every((h)=>{let m=(l>8?8:0)+h;if(m===l)return!0;let $=St(t[m]);return $.c<fo||Ae($.h,f)>=Qi+1||Math.abs($.l-d)>=Xi}),c,u=Number.POSITIVE_INFINITY;for(let l of o(e,i.h)){if(!n.has(e)&&!a(e,l,i.l))continue;for(let f of o(e+8,s.h)){if(Ae(l,f)>Ue-Mm||!n.has(e+8)&&!a(e+8,f,s.l))continue;let d=Ae(l,i.h)+Ae(f,s.h);if(d<u)u=d,c=[l,f]}}return c}class wv{theme;moves=[];constructor(t){this.theme={...t,ansi:[...t.ansi]}}set(t,e,n){let r=this.get(t);if(n===r)return;if(this.moves.push({slot:t,rule:e,from:r,to:n}),t==="foreground")this.theme.foreground=n;else if(t==="selection")this.theme.selectionBackground=n;else this.theme.ansi[Number(t.slice(4))]=n}get(t){if(t==="foreground")return this.theme.foreground;if(t==="selection")return this.theme.selectionBackground;return this.theme.ansi[Number(t.slice(4))]}rehue(t,e,n){this.set(`ansi${t}`,e,wH(this.theme.ansi[t],n))}roles(){let t=new Set(this.theme.signatureSlots);for(let{slot:n,hue:r}of nr(this.theme)){let i=be[sn(n)];this.rehue(n,"ansi-role",i.center+bv(i.center,r)*(i.width-Mm))}for(let{normal:n,gap:r}of Rn(this.theme)){if(r<=Ue)continue;let[i,s]=t.has(`ansi${n+8}`)?[n+8,n]:[n,n+8],o=St(this.theme.ansi[i]).h,a=St(this.theme.ansi[s]).h;this.rehue(s,"bright-follows",o+bv(o,a)*(Ue-Mm))}let e=ts(this.theme);for(let[n,r]of Nn(this.theme)){let i=sn(e.has(r)?n:r),s=yH(this.theme.ansi,i,e);if(s===void 0)continue;this.rehue(i,"distinct",s[0]),this.rehue(i+8,"distinct",s[1])}}readability(){let t=new Set(this.theme.waive),{background:e}=this.theme,n=(r,i,s,o=e)=>{if(t.has(r))return;for(let a of i)if(wt(this.get(a),o)<s)this.set(a,r,$H(this.get(a),o,s))};if(n("foreground",["foreground"],7),n("accents",bH.map((r)=>`ansi${r}`),3),n("light-ansi",["ansi7","ansi15"],7),n("ansi8-visible",["ansi8"],1.6),!t.has("ansi0-dark")&&vt(this.get("ansi0"))>0.15)this.set("ansi0","ansi0-dark",kH(this.get("ansi0"),0.15));n("selection",["selection"],7,this.theme.foreground)}net(){return[...new Set(this.moves.map((t)=>t.slot))].flatMap((t)=>{let e=this.moves.filter((i)=>i.slot===t),n=e[0].from,r=this.get(t);return n===r?[]:[{slot:t,rule:[...new Set(e.map((i)=>i.rule))].join(", "),from:n,to:r}]})}}function Xu(t){let e=new wv(t);for(let n=0;n<gH;n++)if(e.readability(),e.roles(),Qr(e.theme).length===0)break;return{theme:e.theme,moves:e.net(),left:Qr(e.theme)}}var ji=[{key:"background",label:"Background",min:0,max:0.5,step:0.01,digits:2},{key:"foreground",label:"Foreground",min:0.5,max:1,step:0.01,digits:2},{key:"hue",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0},{key:"tint",label:"Tint",min:0,max:0.1,step:0.005,digits:3},{key:"lightness",label:"Accent lightness",min:0.4,max:0.95,step:0.01,digits:2},{key:"chroma",label:"Accent chroma",min:0,max:0.3,step:0.005,digits:3},{key:"brights",label:"Brights",min:-0.2,max:0.2,step:0.01,digits:2}],Ea={background:0.21,foreground:0.88,hue:265,tint:0.02,lightness:0.72,chroma:0.12,brights:0.06},$v=(t,e,n)=>Math.min(n,Math.max(e,t));function xm(t,e,n){let r=t[e.key]+e.step*n,i=e.wraps?(r%e.max+e.max)%e.max:$v(r,e.min,e.max);return{...t,[e.key]:Math.round(i*1e4)/1e4}}function Wr(t){let e=(r,i,s)=>_e($v(r,0,1),i,s),n=Array.from({length:16},()=>"#000000");n[0]=e(t.background+0.06,t.tint,t.hue),n[8]=e(t.background+0.25,t.tint,t.hue),n[7]=e(t.foreground-0.06,t.tint/2,t.hue),n[15]=e(t.foreground+0.06,t.tint/2,t.hue);for(let r of er){let i=be[r].center;n[r]=e(t.lightness,t.chroma,i),n[r+8]=e(t.lightness+t.brights,t.chroma,i)}return{background:e(t.background,t.tint,t.hue),foreground:e(t.foreground,t.tint/2,t.hue),cursor:e(t.lightness+t.brights,Math.max(t.chroma,0.08),t.hue),selection:e(t.background+0.1,t.tint*2,t.hue),ansi:n}}var Ui=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],j=["Background","Foreground","Cursor","Selection"],tl=["Black","Red","Green","Yellow","Blue","Magenta","Cyan","White"],Kr=j.length+tl.length,tn=[{key:"l",label:"Lightness",min:0,max:1,step:0.01,digits:2},{key:"c",label:"Chroma",min:0,max:0.37,step:0.005,digits:3},{key:"h",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0}],kv=5,Qn=tn.length,ro=["this","pair","normals","brights","accents"],el=[1,2,3,4,5,6,9,10,11,12,13,14],yv=el.filter((t)=>t<8).map((t)=>j.length+t),vv=el.filter((t)=>t>8).map((t)=>j.length+t);function Im(t,e){let n=e-j.length;if(n<0||t==="this")return[e];if(t==="pair")return[j.length+n%8,j.length+8+n%8];let r=t==="normals"?yv:t==="brights"?vv:[...yv,...vv];return r.includes(e)?r:[e]}function vH(){return Array.from({length:Kr},(t,e)=>e<j.length?[e]:[e,e+8]).flat()}function EH(t){let e=t.trim();return/^https?:\/\/\S+$/i.test(e)||eo(e).length>0}function no(t){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi]}function se(t){let[e,n,r,i,...s]=t;return{background:e,foreground:n,cursor:r,selection:i,ansi:s}}function Gi(t){if(t<j.length)return{name:j[t],about:Ui[t]};let e=t-j.length,n=tl[e%8];return e<8?{name:n,about:`ansi ${e}`}:{name:`Bright ${n.toLowerCase()}`,about:`ansi ${e}`}}var io=(t,e,n)=>Math.min(n,Math.max(e,t));function Ev(t){return t.length===1?t.toLowerCase():t}function SH(t){return io(Math.round(t),0,255).toString(16).padStart(2,"0")}function Sv(t){let e=t.trim().toLowerCase(),n=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/.exec(e);if(n){let s=n[1];return`#${s.length===3?[...s].map((o)=>o+o).join(""):s}`}let r=/^rgb\(\s*(\d+)[\s,]+(\d+)[\s,]+(\d+)\s*\)$/.exec(e);if(r)return`#${r.slice(1,4).map((s)=>SH(Number(s))).join("")}`;let i=/^oklch\(\s*([\d.]+)(%?)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:deg|°)?\s*\)$/.exec(e);if(i){let s=Number(i[1])/(i[2]?100:1);return _e(io(s,0,1),Number(i[3]),Number(i[4])%360)}return}function _i(t){let e=we.find((n)=>n.rule===t);return e?.min??e?.max??0}function Bi(t,e,n){let r=se(t);return{name:"draft",background:r.background,foreground:r.foreground,selectionBackground:r.selection,ansi:r.ansi,waive:n,signatureSlots:e}}function MH(t,e){let n=t-j.length,r=t<=1?"foreground":t===3?"selection":n===7||n===15?"light-ansi":n===8?"ansi8-visible":el.includes(n)?"accents":void 0;return{against:t===0||t===3?1:0,floor:r===void 0||e.includes(r)?void 0:_i(r)}}function Tm(t,e,n,r){let i=Bi(t,e,n),{background:s,foreground:o,selection:a,ansi:c}=se(t),u=(l,f,d)=>wt(f,d)<_i(r)?[l]:[];if(r==="foreground")return wt(o,s)<_i(r)?[1,0]:[];if(r==="selection")return wt(o,a)<_i(r)?[3,1]:[];if(r==="accents")return el.flatMap((l)=>u(j.length+l,c[l],s));if(r==="light-ansi")return[7,15].flatMap((l)=>u(j.length+l,c[l],s));if(r==="ansi8-visible")return u(j.length+8,c[8],s);if(r==="ansi0-dark")return vt(c[0])>_i(r)?[j.length]:[];if(r==="ansi-role")return nr(i).map(({slot:l})=>j.length+l);if(r==="bright-follows")return Rn(i).filter(({gap:l})=>l>Ue).flatMap(({normal:l})=>[j.length+l,j.length+l+8]);if(r==="distinct")return Nn(i).flatMap(([l,f])=>[j.length+l,j.length+f]);return[]}function OH(t,e,n){return new Set(Ui.flatMap((r,i)=>nl(t,e,n,i).some((s)=>s.ok===!1)?[i]:[]))}function Zn(t,e,n,r,i){let s=wt(t,e),o=_i(n);if(i.includes(n))return{ok:void 0,text:`${r} ${s.toFixed(2)}:1 · waived`};return{ok:s>=o,text:`${r} ${s.toFixed(2)}:1 · ≥ ${o}`}}function nl(t,e,n,r){let i=se(t),s=Bi(t,e,n);if(r===0){let b=[1,2,3,4,5,6,9,10,11,12,13,14].reduce((y,E)=>wt(i.ansi[y],i.background)<=wt(i.ansi[E],i.background)?y:E);return[Zn(i.foreground,i.background,"foreground","Foreground on it",n),Zn(i.ansi[b],i.background,"accents",`Weakest, ANSI ${b},`,n),Zn(i.ansi[8],i.background,"ansi8-visible","ANSI 8 on it",n)]}if(r===1)return[Zn(i.foreground,i.background,"foreground","On background",n),Zn(i.foreground,i.selection,"selection","On the selection",n)];if(r===2)return[{ok:void 0,text:`On background ${wt(i.cursor,i.background).toFixed(2)}:1`}];if(r===3)return[Zn(i.foreground,i.selection,"selection","Foreground on it",n)];let o=r-j.length,a=i.ansi[o];if(o===0){let g=vt(a),b=_i("ansi0-dark");return[n.includes("ansi0-dark")?{ok:void 0,text:`Luminance ${g.toFixed(3)} · waived`}:{ok:g<=b,text:`Luminance ${g.toFixed(3)} · ≤ ${b}`}]}if(o===7||o===15)return[Zn(a,i.background,"light-ansi","On background",n)];if(o===8)return[Zn(a,i.background,"ansi8-visible","On background",n)];let c=[Zn(a,i.background,"accents","On background",n)],u=St(a),l=sn(o),f=be[l],d=`${f.name} ${f.center}±${f.width}°`;if(u.c<fo)c.push({ok:void 0,text:"Too grey to have a hue"});else if(ts(s).has(o))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · a signature, free of ${d}`});else if(n.includes("ansi-role"))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · ${d} waived`});else{let g=Ae(u.h,f.center)-f.width;c.push(g>0?{ok:!1,text:`Hue ${u.h.toFixed(0)}° · ${g.toFixed(0)}° outside ${d}`}:{ok:!0,text:`Hue ${u.h.toFixed(0)}° · in ${d}`})}let h=o<8?o+8:o-8,m=Rn(s).find((g)=>g.normal===l);if(m)c.push(n.includes("bright-follows")?{ok:void 0,text:`${m.gap.toFixed(0)}° from ANSI ${h} · waived`}:{ok:m.gap<=Ue,text:`${m.gap.toFixed(0)}° from ANSI ${h} · ≤ ${Ue}°`});let $=Nn(s).flatMap(([g,b])=>g===o?[b]:b===o?[g]:[]);if($.length>0&&!n.includes("distinct"))c.push({ok:!1,text:`Reads as ANSI ${$.join(", ")} · within ${Qi}° and ${Xi} lightness`});return c}function Ov(t,e,n){let r=on(Bi(t,e,n));return we.map((i,s)=>{let o=r[s],a=n.includes(i.rule),c=a||Number.isNaN(o)?void 0:(i.min===void 0||o>=i.min)&&(i.max===void 0||o<=i.max);return{ok:c,label:i.label,value:Number.isNaN(o)?"—":Number.isInteger(o)?String(o):o.toFixed(2),bound:a?"waived":i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",slots:c===!1?Tm(t,e,n,i.rule):[]}})}var xH=new Set(["reset","reset-all","hex","paste","fix","open","tune","sig","follow"]),xv=tn[1].max;function Rm(t){let[e,n,r]=rt(t);return e===n&&n===r}function Nm(t,e){return Math.floor(Om(t,e,xv)*1e4)/1e4}function Mv(t,e){let n=t.wraps?t.max-t.step:t.max;return Math.min(n,Math.round((t.min+(t.max-t.min)*e)/t.step)*t.step)}class Sa{mode;seeds=Ea;field=0;list;lch;start;original;signature;row=0;col=0;channel=0;scope="this";view="slot";scene=0;typing;overlay;quitting=!1;compare=!1;notice;filter="";pick=0;result;act;wants;pictures;startPictures;options;fresh;theme;startSignature;seeded=!1;tuneFrom;holds=new Map;clip;history=[];future=[];lastEdit;constructor(t){this.options=t,this.theme=t.variant==="theme",this.fresh=t.colors===void 0,this.mode=this.fresh?"seeds":"list",this.list=no(t.colors??Wr(this.seeds)),this.lch=this.lchs(),this.start=[...this.list],this.original=t.original?no(t.original):[...this.list],this.signature=[...t.signature],this.startSignature=[...t.signature],this.pictures=t.pictures??0,this.startPictures=this.pictures}markSaved(){this.start=[...this.list],this.history=[],this.future=[],this.lastEdit=void 0}offDefault(t){return this.list[t]!==this.original[t]}get added(){return Math.max(0,this.pictures-this.startPictures)}found(t){this.pictures=t.count,this.notice=t.note}get waive(){return this.options.waive??[]}get held(){return this.holds.get(this.slot())}colors(){return se(this.list)}edited(){return{colors:this.colors(),signature:[...this.signature]}}shown(){return this.compare?this.start:this.list}slot(){return this.row<j.length?this.row:this.row+(this.col===1?8:0)}dirty(){return this.seeded||this.pictures!==this.startPictures||this.list.some((t,e)=>t!==this.start[e])||this.signature.join()!==this.startSignature.join()}misses(){return OH(this.list,this.signature,this.waive)}failing(){return Qr(Bi(this.list,this.signature,this.waive))}choices(){let t=this.filter.toLowerCase();return(this.options.palettes??[]).filter((e)=>e.name.toLowerCase().includes(t))}paste(t){if(this.notice=void 0,this.overlay==="open"){this.filter+=t.replace(/\s+/g,"").toLowerCase(),this.pick=0;return}if(this.overlay)return;if(t.trim()===""){this.findPictures({clipboard:!0});return}if(EH(t)){this.findPictures({paste:t});return}if(this.mode==="seeds")return;let e=Sv(t);if(!e){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(e,"paste")}press(t){if(this.notice=void 0,t==="ctrl-c"){if(this.theme)this.act="cancel";else this.result="cancelled";return}if(this.quitting){if(this.quitting=!1,t==="y"||t==="Y")this.result="cancelled";return}if(this.typing!==void 0){this.type(t);return}if(this.overlay==="keys"){this.overlay=void 0;return}if(this.overlay==="open"){this.openKey(t);return}if(t==="?"){this.overlay="keys";return}if(this.theme&&(t==="ctrl-v"||t==="alt-v"||t==="p"))return;if(t==="ctrl-v"||t==="alt-v"){this.findPictures({clipboard:!0});return}if(t==="p"&&this.mode!=="tune"){this.findPictures();return}if(t===" "&&this.mode!=="seeds"){this.compare=!this.compare;return}if(this.compare&&t==="esc"){this.compare=!1;return}if(t==="g"&&this.mode!=="seeds"){this.view=this.view==="slot"?"relations":"slot";return}let e=t==="j"?"down":t==="k"?"up":t;if(this.mode==="seeds")this.seedKey(e);else if(this.mode==="tune")this.tuneKey(e);else this.listKey(e)}select(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return;if(this.mode==="tune"){if(t===this.slot())return;this.tuneKey("enter")}if(this.notice=void 0,this.row=t<j.length?t:j.length+(t-j.length)%8,t>=j.length)this.col=t-j.length>=8?1:0;this.lastEdit=void 0}grip(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return!1;if(this.notice=void 0,this.mode==="list")this.tune();return this.channel=t,!0}slide(t,e){if(!this.grip(t))return;let n=Math.min(1,Math.max(0,e));if(t===Qn){this.reach(21**n);return}this.put(Mv(tn[t],n))}sow(t,e){let n=ji[t];if(this.mode!=="seeds"||this.overlay||this.quitting||!n)return;this.notice=void 0,this.field=t;let r=Math.min(1,Math.max(0,e));this.seeds=xm({...this.seeds,[n.key]:Mv(n,r)},n,0),this.list=no(Wr(this.seeds)),this.lch=this.lchs()}scroll(t){let e=(n,r)=>Math.min(r,Math.max(0,n+t));if(this.overlay==="open")this.pick=e(this.pick,Math.max(0,this.choices().length-1));else if(this.overlay||this.quitting||this.typing!==void 0)return;else if(this.mode==="seeds")this.field=e(this.field,ji.length-1);else if(this.mode==="tune")this.channel=e(this.channel,Qn);else this.row=e(this.row,Kr-1),this.lastEdit=void 0}lchOf(t){let e=St(t);return Rm(t)?{...e,h:this.neutralHue()}:e}lchs(){return this.list.map((t)=>this.lchOf(t))}neutralHue(){let t=[0,1,3,2].map((e)=>this.list[e]).find((e)=>!Rm(e));return t?St(t).h:Ea.hue}seedKey(t){let e=ji.length;if(t==="up"||t==="down")this.field=(this.field+(t==="up"?e-1:1))%e;else if(t==="home"||t==="end")this.field=t==="home"?0:e-1;else if(t==="left"||t==="right"||t==="shift-left"||t==="shift-right"){let n=ji[this.field],r=(t.endsWith("left")?-1:1)*(t.startsWith("shift")?n.wraps?10:kv:1);this.seeds=xm(this.seeds,n,r),this.list=no(Wr(this.seeds)),this.lch=this.lchs()}else if(t==="enter")this.leaveSeeds();else if(t==="o")this.openPalettes();else if(t==="esc")this.leave()}leaveSeeds(){this.start=[...this.list],this.original=[...this.list],this.seeded=!0,this.mode="list"}leave(){if(this.theme)this.act="cancel";else if(this.dirty())this.quitting=!0;else this.result="cancelled"}findPictures(t){if(!this.options.find){this.notice="Pictures need Ghostty, iTerm2 or kitty, outside tmux";return}this.wants=t?{start:t}:{}}openPalettes(){if((this.options.palettes??[]).length>0)this.overlay="open",this.pick=0;else this.notice="No other palettes to take colors from"}listKey(t){if(t==="up"||t==="down"){if(this.theme&&this.row===(t==="up"?0:Kr-1))this.act=t==="up"?"above":"below";else this.row=(this.row+(t==="up"?Kr-1:1))%Kr;this.lastEdit=void 0}else if(t==="home"||t==="end")this.row=t==="home"?0:Kr-1;else if(t==="pgup"||t==="pgdn")this.row=t==="pgup"?0:j.length;else if(t==="left"||t==="right"){if(this.row>=j.length)this.col=t==="left"?0:1,this.lastEdit=void 0}else if((t==="shift-left"||t==="shift-right")&&!this.theme)this.scene+=t==="shift-left"?-1:1;else if(t==="n"||t==="N")this.nextMiss(t==="n"?1:-1);else if(t==="enter"||t==="tab")this.tune();else if(t==="#")this.typing="";else if(t==="c")this.clip=this.list[this.slot()],this.notice=`Copied ${this.clip}`;else if(t==="v")if(this.clip)this.set(this.slot(),this.clip,"paste");else this.notice="Nothing copied yet — c copies a slot";else if(t==="r")this.set(this.slot(),this.original[this.slot()],"reset");else if(t==="R")this.remember("reset-all"),this.list=[...this.original],this.lch=this.lchs();else if(t==="=")this.follow();else if(t==="*"&&!this.theme)this.mark();else if(t==="f")this.fix();else if(t==="o"&&!this.theme)this.openPalettes();else if(t==="u")this.undo();else if(t==="ctrl-r")this.redo();else if(t==="s"||t==="ctrl-s")if(this.theme)this.act="save";else this.save();else if(t==="esc")this.leave()}nextMiss(t){let e=vH(),n=this.misses();if(n.size===0){this.notice="The gate passes";return}let r=e.indexOf(this.slot());for(let i=1;i<=e.length;i++){let s=e[((r+t*i)%e.length+e.length)%e.length];if(n.has(s)){if(this.row=s<j.length?s:j.length+(s-j.length)%8,s>=j.length)this.col=s-j.length>=8?1:0;return}}}tune(){this.remember("tune"),this.tuneFrom={list:[...this.list],lch:[...this.lch]},this.holds=new Map,this.hold(),this.mode="tune"}hold(){for(let t of this.scoped())if(!this.holds.has(t))this.holds.set(t,this.lch[t].c)}scoped(){return Im(this.scope,this.slot())}tuneKey(t){let e=tn.length+1,n=this.channel===Qn;if(t==="up"||t==="down"||t==="tab"||t==="shift-tab")this.channel=(this.channel+(t==="up"||t==="shift-tab"?e-1:1))%e;else if(t==="left"||t==="right"||t==="shift-left"||t==="shift-right"){let r=t.endsWith("left")?-1:1;if(n)this.reach(this.ratio()+r*(t.startsWith("shift")?0.5:0.1));else{let i=tn[this.channel];this.step(r*(t.startsWith("shift")?i.wraps?10:kv:1))}}else if(t==="home"||t==="end")if(n)this.reach(t==="home"?this.partner().floor??1:21);else{let r=tn[this.channel];this.put(t==="home"?r.min:r.wraps?r.max-r.step:r.max)}else if(/^[0-9]$/.test(t))if(n){if(t!=="0")this.reach(Number(t))}else{let r=tn[this.channel];this.put(r.min+(r.max-r.min)*Number(t)/10)}else if(t==="a")this.rescope();else if(t==="#")this.typing="";else if(t==="enter"){if(this.tuneFrom&&this.list.every((r,i)=>r===this.tuneFrom?.list[i]))this.history.pop();this.endTune()}else if(t==="esc"){if(this.tuneFrom)this.list=[...this.tuneFrom.list],this.lch=[...this.tuneFrom.lch],this.history.pop();this.endTune()}}rescope(){if(this.slot()<j.length){this.notice="A base color moves alone";return}let t=ro.indexOf(this.scope);for(let e=1;e<=ro.length;e++){let n=ro[(t+e)%ro.length];if(n==="this"||Im(n,this.slot()).length>1){this.scopeTo(n);return}}}scopeTo(t){if(this.mode!=="tune"||this.typing!==void 0||this.quitting||this.slot()<j.length)return;if(t!=="this"&&Im(t,this.slot()).length<=1)return;this.scope=t,this.hold();let e=this.scoped().length;this.notice=e>1?`${e} slots move together`:"This slot moves alone"}endTune(){this.tuneFrom=void 0,this.holds=new Map,this.mode="list"}partner(){return MH(this.slot(),this.waive)}ratio(){return wt(this.list[this.slot()],this.list[this.partner().against])}reach(t){let e=this.slot(),n=this.list[this.partner().against],r=this.lch[e],i=this.holds.get(e)??r.c,s=(d)=>_e(d,Math.min(i,Nm(d,r.h)),r.h),o=(d)=>wt(s(d),n),a=vt(this.list[e])>=vt(n),c=St(n).l,u=Math.max(1,Math.round(t*100)/100),l=a?1:0,f;if(o(l)<u)f=l,this.notice=`The ratio stops at ${o(l).toFixed(2)}:1 on this side of the color it is read against`;else{let d=c,h=l;for(let m=0;m<24;m++){let $=(d+h)/2;if(o($)>=u)h=$;else d=$}f=h}this.place(e,f,i,r.h);for(let d=0;d<40&&f!==l&&wt(this.list[e],n)<u;d++)f=a?Math.min(1,f+0.001):Math.max(0,f-0.001),this.place(e,f,i,r.h);this.lch[e]={...this.lch[e],l:Math.round(f*1e4)/1e4}}step(t){let e=tn[this.channel],n=this.lch[this.slot()][e.key];this.put(n+e.step*t)}put(t){let e=this.slot(),n=tn[this.channel],r=n.wraps?(t%n.max+n.max)%n.max:io(t,n.min,n.max),i=Math.round(r*1e4)/1e4,s=this.lch[e],o=this.scoped().filter((u)=>u!==e),a=(u)=>Math.round(u*1e4)/1e4;if(n.key==="c"){let u=Nm(s.l,s.h);if(i>u)this.notice=`Chroma stops at ${u.toFixed(3)}, the sRGB edge for this lightness and hue`;let l=Math.min(i,u),f=l-s.c;this.holds.set(e,l),this.place(e,s.l,l,s.h);for(let d of o){let h=this.lch[d],m=a(io((this.holds.get(d)??h.c)+f,0,xv));this.holds.set(d,m),this.place(d,h.l,m,h.h)}return}let c=n.key==="h"?((i-s.h)%360+540)%360-180:i-s.l;if(this.place(e,n.key==="l"?i:s.l,this.holds.get(e)??s.c,n.key==="h"?i:s.h),n.key==="h"&&Rm(this.list[e]))this.notice="A grey shows no hue — raise its chroma first";for(let u of o){let l=this.lch[u];this.place(u,n.key==="l"?a(io(l.l+c,0,1)):l.l,this.holds.get(u)??l.c,n.key==="h"?a(((l.h+c)%360+360)%360):l.h)}}place(t,e,n,r){let i=Math.min(n,Nm(e,r));this.lch[t]={l:e,c:i,h:r},this.list[t]=_e(e,i,r)}take(t,e){if(this.mode==="tune")this.list[this.slot()]=t,this.lch[this.slot()]=this.lchOf(t),this.holds.set(this.slot(),this.lch[this.slot()].c);else this.set(this.slot(),t,e)}type(t){let e=this.typing??"";if(t==="esc")this.typing=void 0;else if(t==="enter"){let n=Sv(e);if(!n){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(n,"hex")}else{let n=Pi(e,Ev(t),(r)=>/^[0-9a-z#(),.% ]$/.test(r)&&e.length<28);if(n!==void 0)this.typing=n}}openKey(t){let e=this.choices();if(t==="esc")this.overlay=void 0,this.filter="";else if(t==="up"||t==="down"){let n=Math.max(1,e.length);this.pick=(this.pick+(t==="up"?n-1:1))%n}else if(t==="home"||t==="end")this.pick=t==="home"?0:Math.max(0,e.length-1);else if(t==="enter"){let n=e[this.pick];if(!n)return;if(this.remember("open"),this.list=no(n.colors),this.lch=this.lchs(),this.overlay=void 0,this.filter="",this.notice=`Took the colors of ${n.name}`,this.mode==="seeds")this.leaveSeeds()}else{let n=Pi(this.filter,Ev(t),(r)=>/^[a-z0-9@/-]$/.test(r));if(n!==void 0)this.filter=n,this.pick=0}}remember(t){if(t!==this.lastEdit||xH.has(t))this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.future=[];this.lastEdit=t}set(t,e,n){if(!oe(e)||this.list[t]===e)return;this.remember(n),this.list[t]=e,this.lch[t]=this.lchOf(e)}follow(){if(this.row<j.length){this.notice="= works on an ANSI row — the bright takes its normal";return}let t=this.row,e=this.row+8,n=this.lch[t];this.remember("follow"),this.place(e,io(n.l+0.06,0,1),n.c,n.h),this.col=1,this.notice=`${Gi(e).name} follows ${Gi(t).name.toLowerCase()}`}mark(){let t=Ui[this.slot()];this.remember("sig");let e=this.signature.includes(t)?this.signature.filter((r)=>r!==t):[...this.signature,t],n=e.length>3?e[0]:void 0;this.signature=e.slice(-3),this.notice=this.signature.length===3?`Signature: ${this.signature.join(", ")}${n?` — ${n} dropped`:""}`:`The signature needs three slots — ${this.signature.length} marked`}fix(){let t=Bi(this.list,this.signature,this.waive),{theme:e,moves:n,left:r}=Xu({...t,selectionBackground:t.selectionBackground,signatureSlots:this.signature});if(n.length===0){this.notice=Qr(t).length===0?"Already passes the gate":"No color change fixes it";return}this.remember("fix");let i=no({...this.colors(),foreground:e.foreground,selection:e.selectionBackground,ansi:e.ansi}),s=this.list;this.list=i,this.lch=i.map((o,a)=>o===s[a]?this.lch[a]:this.lchOf(o)),this.notice=`Moved ${n.length} ${n.length===1?"color":"colors"}${r.length===0?" — passes the gate":" closer to the gate"}`}save(){let t=this.options.check(this.edited());if(t){this.notice=t;return}this.result="saved"}undo(){let t=this.history.pop();if(!t){this.notice="Nothing to undo";return}this.future.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}redo(){let t=this.future.pop();if(!t){this.notice="Nothing to redo";return}this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}restore(t){this.list=[...t.list],this.lch=[...t.lch],this.signature=[...t.signature],this.lastEdit=void 0}}import{mkdirSync as _H,readFileSync as Hm,writeFileSync as Fv}from"node:fs";import{dirname as GH}from"node:path";import{isMainThread as BH,parentPort as Cv,Worker as UH}from"node:worker_threads";var IH=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),RH=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),NH=0.04,TH=0.1,AH=0.05,PH=4096;function HH(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function FH(t,e,n,r=0){let{site:i,post:s}=t,o=new Set(s.tags),a=[...HH(i)].some((l)=>o.has(l)),c=Math.min(s.width,s.height),u=s.width>0&&s.height>0?s.width/s.height/(e.w/e.h):1;return(s.solo?2:0)+([...IH].some((l)=>o.has(l))?-3:0)+([...RH].some((l)=>o.has(l))?-1.5:0)+2*Math.min(1,c/e.h)+(a?1.5:-Math.min(1.5,Math.abs(Math.log(u))))+(n>0?1.5*Math.log1p(Math.max(0,s.score))/Math.log1p(n):0)+2*r}function rl(t,e,n=new Map){let r=new Map;for(let{site:i,post:s}of t)r.set(i,Math.max(r.get(i)??0,s.score));return t.map((i,s)=>({pick:i,at:s,score:FH(i,e,r.get(i.site)??0,n.get(i.post))})).sort((i,s)=>s.score-i.score||i.at-s.at).map(({pick:i})=>i)}function Rv(t){let e=new Map;for(let r of t)e.set(r.site,[...e.get(r.site)??[],r]);let n=[];for(let r=0;n.length<t.length;r++)for(let i of e.values()){let s=i[r];if(s)n.push(s)}return n}function Am(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function Iv(t,e,n){let[r,i,s]=[Am(t),Am(e),Am(n)],o=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*s),a=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*s),c=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*s);return[0.2104542553*o+0.793617785*a-0.0040720468*c,1.9779984951*o-2.428592205*a+0.4505937099*c,0.0259040371*o+0.7827717662*a-0.808675766*c]}function Nv(t,e){let n=e.map((o)=>Iv(...rt(o))).filter(([,o,a])=>Math.hypot(o,a)>=NH);if(n.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/PH))),i=n.map(()=>0),s=0;for(let o=0;o<t.height;o+=r)for(let a=0;a<t.width;a+=r){let c=(o*t.width+a)*4;if(t.data[c+3]<128)continue;s++;let[u,l,f]=Iv(t.data[c],t.data[c+1],t.data[c+2]);n.forEach(([d,h,m],$)=>{if(Math.hypot(u-d,l-h,f-m)<TH)i[$]=i[$]+1})}if(s===0)return 0;return i.reduce((o,a)=>o+Math.min(1,a/s/AH),0)/n.length}var CH=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,LH=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"],[/zerochan\.net\/(\d+)(?:[?#\s]|$)/,"zerochan"]];function Pm(t){let e=/(\d+)_p(\d+)/.exec(t.source);return[...t.md5?[`md5:${t.md5}`]:[],...e&&t.source.includes("pximg")?[`pixiv:${e[1]}_p${e[2]}`]:[]]}function Tv(t,e){let n=CH.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...LH.flatMap(([r,i])=>{let s=r.exec(e.source)?.[1];return s?[`post:${i}:${Number(s)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function Av(t,e){let n=t.owner||t.named.artist[0]||"";return n!==""&&n===(e.owner||e.named.artist[0]||"")&&t.width===e.width&&t.height===e.height}function Pv(t){let r=[];for(let s=0;s<8;s++){let o=Math.floor(s*t.height/8),a=Math.max(o+1,Math.floor((s+1)*t.height/8));for(let c=0;c<9;c++){let u=Math.floor(c*t.width/9),l=Math.max(u+1,Math.floor((c+1)*t.width/9)),f=0;for(let d=o;d<a;d++)for(let h=u;h<l;h++){let m=(d*t.width+h)*4,$=t.data[m+3]/255,g=0.299*t.data[m]+0.587*t.data[m+1]+0.114*t.data[m+2];f+=g*$+255*(1-$)}r.push(f/((l-u)*(a-o)))}}let i=0n;for(let s=0;s<8;s++)for(let o=0;o<8;o++)i=i<<1n|(r[s*9+o]>r[s*9+o+1]?1n:0n);return i.toString(16).padStart(16,"0")}function jH(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function Hv(t,e){if(t.width<=0||t.height<=0||e.width<=0||e.height<=0)return!1;return Math.abs(Math.log(t.width/t.height/(e.width/e.height)))<0.01&&jH(t.hash,e.hash)<=2}var WH={thumb:"tile",band:"band",match:"tile",show:"view",backdrop:"view",redraw:"view"},il;async function KH(t){if(t.job==="redraw")return Tu(t.home,t.name,t.key,t.paint,t.blur,t.aligns,t.user);if(t.job==="show"){if(il?.from!==t.from){let o=or(new Uint8Array(Hm(t.from)),$e);il={from:t.from,clear:Tn(o),inked:Lf(o)}}let{image:r,fill:i,opacity:s}=$w(il.inked,t.colors,t.tone,t.width,t.height,t.blur,t.tune,t.coloring);return _H(GH(t.to),{recursive:!0}),Fv(t.to,ln(r)),{clear:il.clear,fill:i,opacity:s}}let e=or(new Uint8Array(Hm(t.from)),$e);if(t.job==="backdrop"){fc(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(Hm(t.source)),cut:t.from!==t.source},t,t.blur,t.coloring);let r=t.tune&&ce(t.home,t.colors.name).find((i)=>i.key===te(t.origin));if(t.tune&&r)Ao(q(t.home),r,t.tune,t.aligns??!0,t.user??t.home);return 0}if(t.job==="match")return{match:Nv(e,t.colors),hash:Pv(e)};if(t.job==="thumb")return P(t.to,ln(sb(e,t.width,t.height))),0;let n=e.data.subarray(t.y*e.width*4,(t.y+t.height)*e.width*4);return Fv(t.to,ln({width:e.width,height:t.height,data:n})),0}function zH(t){t.on("message",async(e)=>{try{t.postMessage({id:e.id,value:await KH(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class Fm{worker;next=1;waiting=new Map;send(t){let e=this.next++;return new Promise((n,r)=>{let i=this.open();this.waiting.set(e,{ok:n,no:r}),i.ref(),i.postMessage({...t,id:e})})}close(){this.worker?.terminate(),this.worker=void 0,this.drop(Error("renderer closed"))}open(){if(this.worker)return this.worker;let t=new UH(import.meta.filename);t.unref(),t.on("message",({id:n,value:r,error:i})=>{let s=this.waiting.get(n);if(this.waiting.delete(n),this.waiting.size===0)t.unref();if(i!==void 0)s?.no(Error(i));else s?.ok(r)});let e=(n)=>{if(this.worker===t)this.worker=void 0;this.drop(n instanceof Error?n:Error("renderer stopped"))};return t.on("error",e),t.on("exit",()=>e(void 0)),this.worker=t,t}drop(t){for(let e of this.waiting.values())e.no(t);this.waiting.clear()}}class Ma{lines=new Map;run(t){let e=WH[t.job],n=this.lines.get(e);if(!n)n=new Fm,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}class Cm{lines;constructor(t){this.lines=Array.from({length:Math.max(1,t)},()=>new Fm)}async map(t){let e=[],n=0;return await Promise.all(this.lines.map(async(r)=>{while(n<t.length){let i=n++;try{e[i]=await r.send(t[i])}catch(s){e[i]=s instanceof Error?s:Error(String(s))}}})),e}close(){for(let t of this.lines)t.close()}}if(!BH&&Cv)zH(Cv);import{existsSync as DH,mkdtempSync as qH,readFileSync as YH,rmSync as Lv,writeFileSync as JH}from"node:fs";import{tmpdir as VH}from"node:os";import{basename as _v,join as jv}from"node:path";var ZH=6;class Oa{dir;made=[];of(t,e){this.dir??=qH(jv(VH(),"ttheme-tint-"));let n=jv(this.dir,`${_v(t,".png")}.${e.slice(1).toLowerCase()}.png`);if(!DH(n)){let r=new Uint8Array(YH(t));JH(n,za(r,e)??ri(ni(Ht(r)),e)),this.made.push(n);while(this.made.length>ZH)Lv(this.made.shift(),{force:!0})}return n}clear(){if(this.dir)Lv(this.dir,{recursive:!0,force:!0});this.dir=void 0,this.made.length=0}}function sl(t,e,n,r,i){if(Ee(t)==="original")return{image:e,opacity:t.peak?ps(n,t.peak):t.opacity};let s=hn(n,[...r]);return{image:s.color===t.tone?e:i.of(e,s.color),opacity:s.opacity}}function ol(t,e){let n=_v(e);return t.find((r)=>n.startsWith(`${r.stem}.`)||n.startsWith(`${r.stem}@`))}var iF=2147483625,Uv=2147483626,vn=2147483627,sF=-1073741827,Wv=-1073741826,oF=-1073741825,aF=4;function cF(t,e,n,r,i,s){let o=Math.trunc,a=n*i.w,c=r*i.h,u=o((Math.max(s.x,0)+i.w-1)/i.w),l=o(Math.min(s.x+s.w,a)/i.w),f=o((Math.max(s.y,0)+i.h-1)/i.h),d=o(Math.min(s.y+s.h,c)/i.h);if(l<=u||d<=f)return;return{col:u,row:f,cols:l-u,rows:d-f,x:o((u*i.w-s.x)*t/s.w),y:o((f*i.h-s.y)*e/s.h),w:o((l-u)*i.w*t/s.w),h:o((d-f)*i.h*e/s.h)}}function uF(t){try{let e=tF(t,"r"),n=Buffer.alloc(24);return eF(e,n,0,24,0),QH(e),n.readUInt32BE(0)===2303741511?{width:n.readUInt32BE(16),height:n.readUInt32BE(20)}:void 0}catch{return}}class al{ready=()=>{};cell={w:0,h:0};held;tints=new Oa;sent=new Map;placed=new Map;viewed="";renders;scratch;made=0;bands=new Map;home;name;views;banded;files;static of(t,e,n,r){if(Lt(t)||!Vc(t,r)||!(Xc(t)||$i(t)))return;return new al(t,e,n)}constructor(t,e,n){this.home=e,this.name=n,this.views=$i(t),this.banded=Zc(t),this.files=Qc(t)}measured(t){if(this.cell.w===0&&t.w>0&&t.h>0)this.cell=t}load(){let t=q(this.home),e=Se(t,this.name,nF()),n=[];try{n=kt(t).palettes[this.name]?.pictures??[]}catch{}let r=e?ol(n,e.image):void 0;this.held=e&&r?{picture:r,image:e.image,opacity:e.opacity,cover:e.cover,at:Ut.indexOf(e.position)+1||5}:void 0}draw(t,e,n,r,i){if(this.cell.w===0)return"";let s=t[0],o=this.look(t,e,n,r,i);if(this.views){let c=r*this.cell.w,u=i*this.cell.h,l=o?`${s}|${o.image}|${o.opacity}|${c}|${u}|${o.box.w}|${o.box.h}|${o.box.x}|${o.box.y}|${this.held?.at??5}`:`${s}||1|${c}|${u}|0|0|0|0|5`;if(l===this.viewed)return"";return this.viewed=l,ki(l)}let a=this.layer(iF,sF,"f=24",Buffer.from(rt(s)),r,i);if(o){let c=Math.max(0,Math.min(255,Math.round((1-o.opacity)*255)));a+=this.picture(o),a+=this.layer(Uv,oF,"f=32",Buffer.from([...rt(s),c]),r,i)}else a+=this.drop(vn)+this.drop(Uv);return a}resized(){this.sent.clear(),this.placed.clear(),this.viewed=""}clear(){let t=this.views&&this.viewed?ki(""):"";for(let e of this.sent.keys())t+=ka(e);return this.resized(),t}close(){let t=this.clear();if(this.tints.clear(),this.renders?.close(),this.scratch)Gv(this.scratch,{recursive:!0,force:!0});return t}look(t,e,n,r,i){let s=this.held;if(!s)return;let o={name:this.name,...se([...t]),waived:[...n]},a=sl(s.picture,s.image,o,e,this.tints),c=uF(a.image);if(!c)return;let u=ws(c.width,c.height,r*this.cell.w,i*this.cell.h,100,s.at,s.cover),l=cF(c.width,c.height,r,i,this.cell,u);if(!l)return;return{image:a.image,opacity:s.opacity===s.picture.opacity?a.opacity:s.opacity,...c,box:u,rect:l}}layer(t,e,n,r,i,s){let o=r.toString("base64"),a=`${o}|${i}|${s}`;if(this.placed.get(t)===a)return"";return this.sent.set(t,a),this.placed.set(t,a),`\x1B_Ga=t,${n},s=1,v=1,i=${t},q=2;${o}\x1B\\\x1B[H\x1B_Ga=p,i=${t},p=${t},c=${i},r=${s},C=1,z=${e},q=2\x1B\\`}picture(t){let{image:e,rect:n}=t;if(this.banded&&(2*n.y+n.h-t.height)**2>1){let s=this.band(t.image,n.y,n.h);if(!s.ready)return"";e=s.path,n={...n,y:0}}let r="";if(this.sent.get(vn)!==e){let s=Du({id:vn,path:e,row:0,col:0,cols:0,rows:0,z:Wv},this.files);if(s===void 0)return"";r+=s,this.sent.set(vn,e),this.placed.delete(vn)}let i=`${n.col};${n.row};${n.cols};${n.rows};${n.x};${n.y};${n.w};${n.h}`;if(this.placed.get(vn)!==i)r+=`\x1B[${n.row+1};${n.col+1}H\x1B_Ga=p,i=${vn},p=${vn},x=${n.x},y=${n.y},w=${n.w},h=${n.h},c=${n.cols},r=${n.rows},C=1,z=${Wv},q=2\x1B\\`,this.placed.set(vn,i);return r}drop(t){if(!this.sent.has(t))return"";return this.sent.delete(t),this.placed.delete(t),ka(t)}band(t,e,n){let r=`${t}|${e}|${n}`,i=this.bands.get(r);if(i)return i;this.scratch??=XH(Bv(rF(),"ttheme-edit-")),this.renders??=new Ma;let s={path:Bv(this.scratch,`band-${++this.made}.png`),ready:!1};this.bands.set(r,s),this.renders.run({job:"band",from:t,to:s.path,y:e,height:n}).then(()=>{s.ready=!0,this.ready()}).catch(()=>{});for(let[o,a]of this.bands){if(this.bands.size<=aF)break;if(a.ready&&a.path!==this.sent.get(vn))this.bands.delete(o),Gv(a.path,{force:!0})}return s}}var Kv=80,zv=24,xa=50,Lm=11;function _t(t,e){return le(t,e)}function Jv(t){return{color:t,dim:(e)=>t?`${A}${e}${ge}`:e,bold:(e)=>t?`${at}${e}${ge}`:e,fg:(e)=>t?Be(e):"",bg:(e)=>t?`\x1B[48;2;${rt(e).join(";")}m`:""}}function Dv(t){return vt(t)>0.35?"#000000":"#ffffff"}function Vv(t,e,n,r,i){let s=e.length-1,o=Math.max(0,Math.min(s,n)),a=i===void 0?-1:Math.max(0,Math.min(s,i));if(!t.color)return e.map((c,u)=>u===o?"●":u===a?"○":r?"━":"─").join("");return e.map((c,u)=>{let l=c??"#000000";if(u===o)return`${t.bg(l)}${t.fg(Dv(l))}●\x1B[39;49m`;if(u===a)return c?`${t.bg(c)}${t.fg(Dv(c))}○\x1B[39;49m`:`${t.fg("#aaaaaa")}○`;return c?`${t.fg(c)}█`:`${t.fg(r?"#777777":"#555555")}░`}).join("").concat("\x1B[39m")}function lF(t,e,n){return Array.from({length:n},(r,i)=>{let s=e.min+(e.max-e.min)*i/(n-1),o={...t,[e.key]:s};return va(o.l,o.c,o.h)?_e(o.l,o.c,o.h):void 0})}function jm(t,e,n,r){return Math.round((t-e)/(n-e)*(r-1))}function Zv(t,e){return t.held!==void 0&&t.held-e.c>0.0005?t.held:void 0}function Qv(t,e,n,r){let i=Zv(e,n);return tn.map((s,o)=>{let a=e.mode==="tune"&&o===e.channel,c=n[s.key],u=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),l=Vv(t,lF(n,s,r),jm(c,s.min,s.max,r),a,s.key==="c"&&i!==void 0?jm(i,s.min,s.max,r):void 0),f=s.key.toUpperCase(),d={kind:"channel",channel:o};return`${_t(d,a?t.bold(`▸${f}`):t.dim(` ${f}`))} ${_t({kind:"bar",channel:o},l)} ${_t(d,a?t.bold(u):t.dim(u))}`})}function Xv(t,e,n){let r=e.mode==="tune"&&e.channel===Qn,i=e.ratio(),{floor:s}=e.partner(),o=(h)=>Math.round(Math.log(Math.max(1,h))/Math.log(21)*(n-1)),a=o(i),c=s===void 0?-1:o(s),u=r?"━":"─",l=Array.from({length:n},(h,m)=>m===a?t.bold("●"):m===c?"┃":m<c?t.dim(u):u).join(""),f=`${i.toFixed(2)}:1`.padStart(6),d={kind:"channel",channel:Qn};return`${_t(d,r?t.bold("▸◐"):t.dim(" ◐"))} ${_t({kind:"bar",channel:Qn},l)} ${_t(d,r?t.bold(f):t.dim(f))}`}function t1(t,e){if(e.mode!=="tune"||e.slot()<j.length)return[];let n=se(e.list),r=ro.map((s)=>_t({kind:"scope",scope:s},s!==e.scope?t.dim(s):t.color?`${t.bg(n.selection)}${t.fg(n.foreground)} ${s} \x1B[39;49m`:`[${s}]`)),i=e.scoped().length;return[`${t.dim("Scope")} ${r.join(" ")}`,t.dim(i>1?`${i} slots move by the same step, each keeping its own color`:"This slot moves alone · a widens it")]}function fF(t,e){if(!t.misses().has(e))return;if(Tm(t.list,t.signature,t.waive,"bright-follows").includes(e))return e-j.length<8?"= makes the bright follow its normal":"= on the normal makes this follow it";return"f moves the colors the gate misses"}function e1(t,e,n){let r=nl(t.list,t.signature,t.waive,e),i=Zv(t,n);if(i!==void 0)r.push({ok:void 0,text:`Chroma ○ ${i.toFixed(3)} is held while you tune — ${n.c.toFixed(3)} fits this lightness and hue`});return r}var qv={background:(t)=>t.background,foreground:(t)=>t.foreground,hue:(t)=>t.cursor,tint:(t)=>t.background,lightness:(t)=>t.ansi[4],chroma:(t)=>t.ansi[1],brights:(t)=>t.ansi[12]};function dF(t){return`oklch ${t.l.toFixed(3)} ${t.c.toFixed(3)} ${t.h.toFixed(0)}°`}function _m(t){return`${t.l.toFixed(2)} ${t.c.toFixed(3)} ${t.h.toFixed(0).padStart(3)}°`}function n1(t,e){return`${t.dim("oklch")} ${t.bold(`${e.l.toFixed(3)} ${e.c.toFixed(3)} ${e.h.toFixed(0)}°`)}`}function cl(t,e){return e===void 0?t.dim("·"):e?t.dim("✓"):t.bold("✗")}function r1(t,e,n,r=xa){let i=Ov(e.list,e.signature,e.waive).sort((u,l)=>Number(u.ok!==!1)-Number(l.ok!==!1)),s=i.filter((u)=>u.ok===!1).length,o=` ${t.dim("Gate")} ${s===0?t.dim("passes"):t.bold(`${s} ${s===1?"miss":"misses"}`)}`,a=r-4,c=i.flatMap((u)=>{let l=`${u.value} ${u.bound}`,f=` ${cl(t,u.ok)} ${Gt(u.ok===!1?u.label:t.dim(u.label),t.dim(l),a-2)}`,d=[...new Set(u.slots)].map(($)=>Gi($).name),h=u.slots[0],m=($)=>h===void 0?$:_t({kind:"slot",slot:h},$);return d.length>0?[m(f),m(` ${t.dim(ot(d.join(" · "),a-2))}`)]:[m(f)]});return[s===0?o:Gt(o,`${t.bold("n")} ${t.dim("next miss")}`,r-2),...c.slice(0,Math.max(0,n-1))]}function i1(t,e,n,r=xa,i=!0){let s=e.misses(),o=se(e.list),a=i?e.slot():-1,c=(f)=>{let d=e.list[f],h=f===a,m=e.signature.includes(Ui[f])?"◆":t.color?"■":" ",$=s.has(f)?"✗":e.theme&&e.offDefault(f)?"↺":" ",b=`${t.color?`${t.fg(d)}${m}${h?t.fg(o.foreground):"\x1B[39m"} `:`${m} `}${_m(e.lch[f])}${$}`;if(!h)return _t({kind:"slot",slot:f},` ${b}`);return _t({kind:"slot",slot:f},t.color?`${t.bg(o.selection)}${t.fg(o.foreground)} ${b}\x1B[39;49m`:`›${b}`)},u=(f)=>f?t.color?`${t.fg(o.cursor)}▌\x1B[39m `:"▌ ":" ",l=[` ${t.dim("Base")}`];for(let f=0;f<j.length;f++){let d=i&&f===e.row,h=j[f].padEnd(10);l.push(`${_t({kind:"slot",slot:f},`${u(d)}${d?t.bold(h):h}`)}${c(f)}`)}l.push("",` ${t.dim(`${"ANSI".padEnd(10)} ${"Normal".padEnd(18)} Bright`)}`);for(let f=j.length;f<Kr;f++){let d=i&&f===e.row,h=tl[f-j.length].padEnd(10),m=_t({kind:"slot",slot:f+(e.col===1?8:0)},`${u(d)}${d?t.bold(h):h}`);l.push(`${m}${c(f)}${c(f+8)}`)}return l.push(""),[...l,...r1(t,e,n-l.length,r)]}function hF(t,e,n){let r=se(e.list),i=[` ${t.dim("Seeds")}`];ji.forEach((s,o)=>{let a=o===e.field,c=e.seeds[s.key],u=Array.from({length:Lm},(g,b)=>{let y=s.min+(s.max-s.min)*b/(Lm-1);return qv[s.key](Wr({...e.seeds,[s.key]:y}))}),l=Vv(t,u,jm(c,s.min,s.max,Lm),a),f=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),d=qv[s.key](r),h=a?t.color?`${t.fg(r.cursor)}▌\x1B[39m `:"▌ ":" ",m=s.label.padEnd(17),$={kind:"field",field:o};i.push(`${_t($,`${h}${a?t.bold(m):m}`)}${_t({kind:"seed",field:o},l)}${_t($,` ${f} ${t.color?`${t.fg(d)}■\x1B[39m `:""}${t.dim(d)}`)}`)}),i.push("");for(let s of bt("Seven seeds grow all twenty colors, each accent on the hue its ANSI role reads as — whatever the seeds, they pass the gate. enter moves on to tune each slot, and the seeds stay behind.",xa-4))i.push(` ${t.dim(s)}`);return i.push(""),[...i,...r1(t,e,n-i.length)]}function mF(t,e){let n=t-j.length;if(n>=0)return e===String(n)||e===`B${n}`||e===`K${n}`;return t===3&&e==="s"||t===2&&e==="c"}function pF(t,e,n,r){let i=r?"\x1B[4m":"";if(n==="d")return`${t.fg(e.foreground)}\x1B[2m${i}`;if(n==="b")return`${t.fg(e.foreground)}\x1B[1m${i}`;if(n==="s")return`${t.bg(e.selection)}${t.fg(e.foreground)}${i}`;if(n==="c")return`${t.bg(e.cursor)}${i}`;let s=/^([BK]?)(\d+)$/.exec(n);if(!s)return`${t.fg(e.foreground)}${i}`;let o=e.ansi[Number(s[2])];if(s[1]==="K")return`${t.fg(e.ansi[0])}${t.bg(o)}${i}`;return`${t.fg(o)}${s[1]==="B"?"\x1B[1m":""}${i}`}function s1(t,e,n,r,i,s){let o=ie.indexOf(bi(i)),a=ie.map((l,f)=>_t({kind:"scene",scene:f},f!==o?t.dim(l.name):t.color?`${t.bg(e.selection)}${t.fg(e.foreground)} ${l.name} \x1B[39;49m`:`[${l.name}]`)).join(" "),c=[Gt(a,t.dim("⇧←→"),n)],u=`${t.bg(e.background)}${t.fg(e.foreground)}`;for(let l of bi(i).lines){let f=Dc(l,n-2);if(!f)continue;if(c.length>=r)break;let d=t.color?f.map(([h,m])=>`${pF(t,e,m,mF(s,m))}${h}\x1B[0m${u}`).join(""):f.map(([h])=>h).join("");c.push(`${u} ${ot(d,n-2)} ${t.color?"\x1B[0m":""}`)}return c}var gF=["Bk","Rd","Gr","Ye","Bl","Ma","Cy","Wh"];function Yv(t,e,n,r,i,s,o){let a=(i-s)/(o-1),c=o1(e),u=se(n),l=(f)=>Math.min(o-1,Math.max(0,Math.round((i-r(St(f)))/a)));return Array.from({length:o},(f,d)=>{let m=`${(d%2===0?(i-a*d).toFixed(i>=1?1:2).replace(/^0(?=\.\d\d)/,""):"").padStart(4)} ${t.dim(d%2===0?"┤":"│")}`;for(let $=0;$<8;$++){let g=[" "," "," "," "," "],b=u.ansi[$],y=u.ansi[$+8],E=l(b)===d,S=l(y)===d,x=(N)=>{if(N===1&&E)return t.color?`${t.fg(b)}●`:"●";if(N===3&&S)return t.color?`${t.fg(y)}○`:"○";return g[N]},R=[0,1,2,3,4].map(x).join("");m+=c.has($)?t.color?`${t.bg(u.selection)}${R}\x1B[39;49m`:R:`${R}${t.color?"\x1B[39m":""}`}return m})}function o1(t){let e=t.mode==="tune"?t.scoped():[t.slot()];return new Set(e.filter((n)=>n>=j.length).map((n)=>(n-j.length)%8))}function bF(t,e){let n=o1(e);return` ${gF.map((r,i)=>n.has(i)?t.bold(` ${r} `):t.dim(` ${r} `)).join("")}`}function wF(t,e){let n=se(e),r=Array.from({length:40},(s,o)=>{let a=o*9+4.5,c=-1,u=999;for(let[l,f]of Object.entries(be)){let d=Ae(a,f.center);if(d<=f.width&&d<u)u=d,c=Number(l)}return c<0?" ":t.color?`${t.fg(n.ansi[c])}─`:"─"}).join(""),i=(s,o)=>{let a=Array.from({length:40},()=>" ");for(let c of Object.keys(be).map(Number)){let u=n.ansi[c+s],l=Math.min(39,Math.round(St(u).h/9));a[l]=t.color?`${t.fg(u)}${o}\x1B[39m`:o}return` ${a.join("")}`};return[`${t.bold("Hue")} ${t.dim("0° 90° 180° 270° 360°")}`,`${t.dim("bands")} ${r}${t.color?"\x1B[39m":""}`,i(0,"●"),i(8,"○")]}function $F(t,e,n){let r=Bi(n,e.signature,e.waive),i=(a)=>Gi(j.length+a).name,s=(a)=>St(n[j.length+a]).h.toFixed(0),o=[...Rn(r).filter(({gap:a})=>a>25).map(({normal:a,gap:c})=>`${i(a)} ${s(a)}° → bright ${s(a+8)}° · ${c.toFixed(0)}° apart · ≤ 25°`),...nr(r).map(({slot:a,over:c})=>{let u=be[sn(a)];return`${i(a)} ${s(a)}° · ${c.toFixed(0)}° outside ${u.name} ${u.center}±${u.width}°`}),...Nn(r).map(([a,c])=>`${i(a)} and ${i(c).toLowerCase()} read as one color`)];return o.length>0?o.map((a)=>`${t.bold("✗")} ${a}`):[t.dim("✓ Every accent keeps its role and its bright")]}function Gm(t,e,n,r,i){let s=e.shown(),o=Math.max(...s.slice(j.length).map((u)=>St(u).c)),a=Math.max(0.2,Math.ceil(o/0.05)*0.05),c=[Gt(t.bold("Lightness"),t.dim("● normal ○ bright"),n),...Yv(t,e,s,(u)=>u.l,1,0.3,8),bF(t,e)];if(i)c.push("",t.bold("Chroma"),...Yv(t,e,s,(u)=>u.c,a,0,5),"",...wF(t,s));return[...c,...$F(t,e,s)].slice(0,r)}function kF(t,e,n){let r=se(e.list),i=(s,o)=>_t({kind:"view",view:o},e.view!==o?t.dim(` ${s} `):t.color?`${t.bg(r.selection)}${t.fg(r.foreground)}${t.bold(` ${s} `)}\x1B[39;49m`:`[${s}]`);return Gt(`${i("Slot","slot")}${i("Relations","relations")}`,gn("g",`${t.bold("g")} ${t.dim("switch")}`),n)}function yF(t,e,n,r){let i=e.slot(),s=e.list[i],o=e.lch[i],a=e.start[i],{name:c,about:u}=Gi(i),l=e.signature.includes(Ui[i]),f=Math.max(8,Math.min(64,n-12));if(e.view==="relations"&&e.mode!=="tune")return[kF(t,e,n),"",...Gm(t,e,n,r-2,!0)];let d=i>=j.length?t.dim("Uses underlined below"):l?t.dim("◆ signature"):"",h=[Gt(`${t.bold(c)} ${t.dim(u)}`,e.view==="relations"?"":d,n),""],m=t.color?`${t.fg(s)}${"█".repeat(8)}\x1B[39m `:"",$=e.typing!==void 0?`${t.bold(`${e.typing}▏`)}`:void 0,[g,b,y]=rt(s);if(h.push(`${m}${$??n1(t,o)}`),h.push(`${m}${t.dim(`${s} · rgb ${g} ${b} ${y}`)}`),e.view!=="relations"){let R=t.color?`${t.fg(a)}■\x1B[39m `:"";h.push(`${m}${a!==s?t.dim(`was ${R}${dF(e.lchOf(a)).slice(6)} · ${a}`):t.dim("as it opened")}`)}h.push(""),h.push(...Qv(t,e,o,f),Xv(t,e,f));let E=t1(t,e);if(E.length>0)h.push(...E);if(e.view==="relations")return h.push("",...Gm(t,e,n,r-h.length-1,!1)),h;h.push("");for(let R of e1(e,i,o))bt(R.text,n-2).forEach((N,F)=>{h.push(`${F===0?cl(t,R.ok):" "} ${R.ok===!1?N:t.dim(N)}`)});let S=fF(e,i);if(S)h.push(t.dim(` ${S}`));let x=r-h.length-1;if(x>=3)h.push("",...s1(t,se(e.shown()),n,x,e.scene,i));return h}function vF(t,e,n,r){return[Gt(`${t.bold("Sample")} ${t.dim("what the seeds grow")}`,"",n),"",...s1(t,se(e.list),n,r-2,e.scene,-1)]}var EF=[["Slots","↑↓ slot · ←→ normal or bright · home end · pgup the base colors · pgdn the ANSI ones · n N the next and last miss"],["Tune","enter or tab · ↑↓ lightness, chroma, hue or contrast · ←→ step · ⇧←→ ×5, hue ×10 · home end the ends · 0-9 jump · enter keeps · esc undoes"],["Contrast","◐ moves lightness until the ratio to the color it is read against changes · home the gate’s floor · 1-9 that ratio"],["Chroma","stops at the sRGB edge · what lightness or hue takes away comes back while you tune, where it fits again (○)"],["Scope","a while tuning: this, pair, normals, brights or accents — the slots in it move by the same step, each keeping its own color"],["Relations","g shows the lightness, chroma and hue of every ANSI color at once, and the relations the gate checks"],["Sample","⇧←→ another scene · the slot under the cursor is underlined where it is used"],["Type","# then #rrggbb, rgb(r g b) or oklch(l c h) — a paste works too"],["Slot","c copies · v pastes · r puts it back as it opened, R all of them · = the bright follows its normal · * marks it a signature color"],["Palette","f moves the colors the gate misses · o takes another palette’s colors"],["Gate","✗ marks every slot whose own checks miss, and each miss names its slots"],["History","u undo · ctrl+r redo"],["Pictures","p finds one on the boorus, tried on in these colors · drop a picture on the window, or paste one, its path or its link · ctrl+v takes the clipboard’s"],["Compare","space shows the colors you started from, on the terminal too"],["Save","s saves · esc cancels, asking first when something changed"]];function SF(t,e,n){let r=[` ${t.bold("Help")}`,""];for(let[i,s]of EF.filter(([o])=>o!=="Pictures"||e.options.find))bt(s,n-16).forEach((o,a)=>{r.push(` ${t.bold((a===0?i:"").padEnd(11))} ${o}`)});return r}function MF(t,e,n,r){let i=e.choices(),s=e.options.palettes?.length??0,o=e.filter?`${t.bold(e.filter)}▏`:t.dim("type to filter"),a=[Gt(` ${t.bold("Take colors from")} ${o}`,t.dim(`${i.length}/${s}`),n),""],c=r-2,u=Math.max(0,Math.min(e.pick-Math.floor(c/2),i.length-c)),l=Math.min(40,Math.max(12,...i.map((f)=>X(f.name))));if(i.slice(u,u+c).forEach((f,d)=>{let h=u+d===e.pick,m=f.colors,$=t.color?`${t.bg(m.background)} ${[...m.ansi].map((y)=>`${t.fg(y)}■`).join("")} ${t.fg(m.foreground)}Aa \x1B[0m`:"",g=h?"▌ ":" ",b=f.name.padEnd(l);a.push(_t({kind:"choice",index:u+d},`${g}${h?t.bold(b):b} ${$}`))}),i.length===0)a.push(` ${t.dim(`No palettes match '${e.filter}'`)}`);return a}var OF=new Set(["enter","s","?","g","a"]);function xF(t,e,n){let r=t.fg(e.list[2]),i="EDIT",s="",o=[],a="";if(e.quitting)i="EDIT (QUIT)",s=e.added>0?`Discard changes and ${e.added} ${e.added===1?"picture":"pictures"}?`:"Discard changes?",o=[["y","discard"],["n","keep editing"]];else if(e.typing!==void 0)i="EDIT (TYPE)",s=t.dim("#rrggbb, rgb(r g b) or oklch(l c h)"),o=[["enter","set"],["ctrl+u","clear"]],a="esc back";else if(e.overlay==="keys")i="HELP",a="any key closes";else if(e.overlay==="open")i="EDIT (OPEN)",o=[["↑↓","palette"],["a-z","filter"],["enter","take its colors"]],a="esc close";else if(e.compare)i="EDIT (BEFORE)",s="The colors you started from",o=[["space","back to yours"]],a="esc back";else if(e.mode==="seeds")i="EDIT (SEEDS)",o=[["↑↓","seed"],["←→","step"],["⇧←→","×5"],["enter","tune the slots"],["o","open a palette"],["p","picture"],["?","keys"]],a="esc cancel";else if(e.mode==="tune")i="EDIT (TUNE)",o=[["↑↓","L C H ◐"],["←→","step"],...e.slot()>=j.length?[["a","scope"]]:[],["⇧←→","faster"],[e.channel===Qn?"1-9":"0-9",e.channel===Qn?"ratio":"jump"],["#","type"],["enter","keep"]],a="esc undo";else o=[["↑↓","slot"],["←→","normal or bright"],["enter","tune"],["g",e.view==="slot"?"relations":"slot"],...e.misses().size>0?[["n","next miss"]]:[],["#","type"],["f","fix"],["p","picture"],["u","undo"],["s","save"],["?","keys"]],a="esc cancel";if(!e.options.find)o=o.filter(([l])=>l!=="p");if(e.notice)s=t.color?`\x1B[33m${e.notice}\x1B[39m`:e.notice,o=[];let c=t.color?`\x1B[7;1m${r} ${i} \x1B[0m `:`[${i}] `,u=a?gn(a.split(" ")[0],`${t.bold(a.split(" ")[0])} ${t.dim(a.split(" ").slice(1).join(" "))}`):"";for(;;){let l=[s,...o.map(([h,m])=>gn(h,`${t.bold(h)} ${t.dim(m)}`))].filter(Boolean),f=`${c}${l.join(" ")}`,d=-1;if(o.forEach(([h],m)=>{if(m>0&&!OF.has(h))d=m}),X(f)+X(a)+3<=n||d<0)return a?Gt(f,u,n):ot(f,n);o=o.filter((h,m)=>m!==d)}}var Bm=50,Um=22;function a1(t){let e=t.notice??"";if(t.typing!==void 0)return{mode:"type",keys:[["enter","set"],["ctrl+u","clear"],["esc","back"]],note:e};if(t.compare)return{mode:"compare",keys:[["space","back to yours"],["esc","back"]],note:e};if(t.mode==="tune")return{mode:"tune",keys:[["↑↓","L C H ◐"],["←→","step"],...t.slot()>=j.length?[["a","scope"]]:[],["⇧←→","×5"],["enter","keep"],["esc","undo"]],note:e};return{mode:"list",keys:[["↑↓←→","slot"],["enter","tune"],["g",t.view==="slot"?"relations":"slots"],...t.misses().size>0?[["n","next miss"]]:[],["r","reset slot"],["R","reset all"],["#","type a color"],["space","before"]],note:e}}function IF(t,e,n,r){let i=e.slot(),s=e.list[i],o=e.lch[i],a=e.start[i],c=e.original[i],{name:u,about:l}=Gi(i),f=e.signature.includes(Ui[i]),d=t.color?`${t.fg(s)}${"█".repeat(4)}\x1B[39m `:"",h=e.typing!==void 0?t.bold(`${e.typing}▏`):void 0,m=[a!==s?`was ${t.color?`${t.fg(a)}■\x1B[39m `:""}${_m(e.lchOf(a))}`:"",c!==s?`default ${t.color?`${t.fg(c)}■\x1B[39m `:""}${_m(e.lchOf(c))}`:""].filter(Boolean),$=[Gt(`${t.bold(u)} ${t.dim(l)}`,f?t.dim("◆ signature"):"",n),`${d}${h??n1(t,o)} ${t.dim(s)}`,...r>=7?[`${d}${t.dim(m.length>0?m.join(" "):"as the palette has it")}`]:[]],g=Math.max(8,Math.min(40,n-12));$.push(...Qv(t,e,o,g),Xv(t,e,g));for(let b of t1(t,e))if($.length<r)$.push(ot(b,n));for(let b of e1(e,i,o))for(let[y,E]of bt(b.text,n-2).entries()){if($.length>=r)return $;$.push(`${y===0?cl(t,b.ok):" "} ${b.ok===!1?E:t.dim(E)}`)}return $}function c1(t,e,n,r,i){let s=Jv(r);if(t.view==="relations"&&t.mode==="list"&&t.typing===void 0){let y=i?s.bold("Palette"):s.dim("Palette"),E=Gm(s,t,e-2,n-1,!1).map((R)=>` ${R}`),x=[` ${Gt(`${y} ${s.dim("Relations")}`,gn("g",`${s.bold("g")} ${s.dim("slots")}`),e-2)}`,...E];return{lines:Array.from({length:n},(R,N)=>ot(x[N]??"",e)),at:2}}let o=i1(s,t,0,e,i).slice(1,-2),a=(t.mode==="tune"||t.typing!==void 0)&&n-1-o.length<6,c=a?[]:[...o],u=t.row<j.length?t.row+2:t.row+4;if(!a&&n-1-c.length>=9)c.push("");let l=n-1-c.length;if(l>=5){let y=c.length+1;if(c.push(...IF(s,t,e-2,l).map((E)=>` ${E}`)),t.mode==="tune")u=y+3+(l>=7?1:0)+t.channel;else if(t.typing!==void 0)u=y+2}let f=i?s.bold("Palette"):s.dim("Palette"),d=i&&l<5?nl(t.list,t.signature,t.waive,t.slot()).find((y)=>y.ok===!1):void 0,h=t.failing().length,m=h===0?"passes the gate":`${h} ${h===1?"miss":"misses"} in the gate`,$=t.list.filter((y,E)=>t.offDefault(E)).length,b=[` ${d?`${f} ${cl(s,!1)} ${d.text}`:Gt(`${f}${$>0?s.dim(` ${$} off its default`):""}`,s.dim(m),e-2)}`,...c];return{lines:Array.from({length:n},(y,E)=>ot(b[E]??"",e)),at:u}}function RF(t,e,n,r){let i=Jv(r);if(e<Kv||n<zv){let m=[i.bold("ttheme palette editor"),`Needs ${Kv}×${zv} — now ${e}×${n}`,i.dim("esc cancels")];return Array.from({length:n},($,g)=>ot(m[g]??"",e))}let s=t.failing().length,o=s===0?"✓ Passes the gate":`✗ ${s} ${s===1?"miss":"misses"} in the gate`,a=t.pictures>0?i.dim(`▣ ${t.pictures} ${t.pictures===1?"picture":"pictures"} `):"",c=`${t.dirty()?`${i.color?"\x1B[33m●\x1B[39m":"●"} unsaved `:""}${a}${i.dim(o)}`,l=`${i.fg(t.list[2])}◆${i.color?"\x1B[39m":""} ${i.bold(t.options.title)} ${i.dim(`· ${t.options.name}`)}`,f=n-4,d;if(t.overlay==="keys")d=SF(i,t,e);else if(t.overlay==="open")d=MF(i,t,e,f);else{let m=e-xa-2,$=t.mode==="seeds"?hF(i,t,f):i1(i,t,f),g=t.mode==="seeds"?vF(i,t,m,f):yF(i,t,m,f);d=Array.from({length:f},(b,y)=>`${ot($[y]??"",xa)}${i.dim("│")} ${ot(g[y]??"",m)}`)}let h=[Gt(l,c,e),""];for(let m=0;m<f;m++)h.push(ot(d[m]??"",e));return h.push("",xF(i,t,e)),h}function Wm(t,e,n){if(n.action==="wheel"){if(!n.sideways)t.scroll(n.wheel);return}if((n.action==="press"||n.action==="drag")&&n.button!=="left")return;if(n.action==="press"&&t.overlay==="keys"){t.press("esc");return}let r=e?.target;if(!e||!r)return;let i=e.width>1?e.x/(e.width-1):0;if(n.action==="release"){if(!e.inside)return;if(r.kind==="key")t.press(r.key);else if(n.count===2&&r.kind==="slot"&&t.mode==="list")t.press("enter");else if(n.count===2&&r.kind==="choice"&&t.overlay==="open")t.press("enter");return}if(r.kind==="bar")t.slide(r.channel,i);else if(r.kind==="seed")t.sow(r.field,i);else if(n.action!=="press")return;else if(r.kind==="slot")t.select(r.slot);else if(r.kind==="channel")t.grip(r.channel);else if(r.kind==="scope")t.scopeTo(r.scope);else if(r.kind==="choice"){if(t.overlay==="open")t.pick=r.index}else if(t.typing===void 0&&!t.overlay&&!t.quitting){if(r.kind==="field"&&t.mode==="seeds")t.field=r.field;else if(r.kind==="view"&&t.mode!=="seeds")t.view=r.view;else if(r.kind==="scene")t.scene=r.scene}}var NF=[ju,Yn,Hi,Gr],TF=33;async function u1(t,e){let n=new Sa(t),r=e.backdrop,i=(s)=>n.typing===void 0&&Qu(s);return Br({modes:[...NF,...Js()],burst:i},async(s)=>{let o=[],a="",c,u=!1,l=!1,f=()=>{if(c=void 0,e.look){let g=n.shown();if(g.join(" ")!==a)a=g.join(" "),e.look(g);return}let $="";n.shown().forEach((g,b)=>{if(o[b]!==g&&e.only?.includes(b))$+=Uo(b,g),o[b]=g}),s.write($)},d=new Ri({write:($)=>s.write($),view:()=>u?void 0:{lines:RF(n,s.cols,s.rows,e.color),after:()=>r?.draw(n.shown(),n.signature,n.waive,s.cols,s.rows)??""}}),h=($=!1)=>{if($)d.soon();else d.request();if(e.only||e.look)c??=setTimeout(f,TF)},m=async($)=>{let g=t.find;if(!g)return;if(u=!0,clearTimeout(c),c=void 0,r)s.write(r.clear());try{n.found(await g(n.edited(),$))}catch(b){n.notice=b instanceof Error?b.message:String(b)}if(l)return;u=!1,r?.load(),o.length=0,a="",d.reset(yi),h()};if(s.write(yi),s.onResize(()=>{r?.resized(),d.reset(yi),d.request()}),r){r.load(),r.ready=()=>d.request();let $=new la;s.ask(Cu,(g)=>$.see(g),1000).then((g)=>{if(g)r.measured(g);d.request()})}h();try{let{edited:$}=await s.loop((g)=>{if(u)return;if(g.kind==="paste")n.paste(g.text);else if(g.kind==="key")n.press(g.key);else if(g.kind==="mouse")Wm(n,d.point(g),g);if(n.result)return{edited:n.result==="saved"?n.edited():void 0};let b=n.wants;if(b)n.wants=void 0,m(b.start);return},()=>{if(!u)h(!0)});return $}finally{if(l=!0,clearTimeout(c),d.stop(),r)s.write(r.close())}})}import{spawn as zF}from"node:child_process";import{createHash as S1}from"node:crypto";import{existsSync as Ra,mkdirSync as DF,mkdtempSync as qF,readFileSync as YF,rmSync as ul}from"node:fs";import{homedir as JF,tmpdir as VF}from"node:os";import{basename as ZF,dirname as QF,join as En}from"node:path";import{pathToFileURL as d1}from"node:url";import{existsSync as AF,readFileSync as PF,statSync as HF}from"node:fs";import{join as l1}from"node:path";function FF(t,e){try{return JSON.parse(PF(l1(Ke(t),e),"utf8"))}catch{return{}}}function CF(t,e,n){P(l1(Ke(t),e),`${JSON.stringify(n)}
|
|
710
|
-
`)}class Km{caches=new Map;unsaved=new Set;owners=new Map;crediting=new Map;inflight=new Map;home;catalog;entry;signal;credited;constructor(t){this.home=t.home,this.catalog=t.catalog,this.entry=t.entry,this.signal=t.signal,this.credited=t.credited}matesOf(t,e){return this.owners.get(t.key)?.get(e)??[]}async transparent(t,e){let n=this.keep(t,"probes.json"),r=n[e.id];if(r!==void 0)return r;try{let i=await So(t,e,this.signal),s=oi(t,e),o=(i===void 0?await Bb(s.site,s.url,this.signal):i)?.alpha===!0;return n[e.id]=o,this.unsaved.add(`${t.key}/probes.json`),o}catch{return!1}}save(){for(let t of this.unsaved){let[e,n]=t.split("/"),r=Y.find((i)=>i.key===e);if(r)CF(r,n,this.keep(r,n))}this.unsaved.clear()}owned(t,e,n){this.keep(t,"owners.json")[e]=n,this.unsaved.add(`${t.key}/owners.json`)}credit(t,e){let{site:n,post:r}=t;if(!tc(n,r))return Promise.resolve();let i=ke(n,r.id),s=this.crediting.get(i);if(!s)s=this.credits(t,e).finally(()=>this.crediting.delete(i)),this.crediting.set(i,s);return s}async mateOwners(t){let e=this.owners.get(t.key);if(e)return e;let n=xw(this.home),r=this.keep(t,"owners.json"),i=this.catalog.palettes.flatMap((c)=>{let u=n.get(c.name);return c.group===this.entry.group&&c.name!==this.entry.name&&u?.site===t.key?[{name:c.name,id:u.id}]:[]}),s=await Promise.all(i.map(async(c)=>{let u=r[c.id];if(u!==void 0)return{...c,owner:u};try{return{...c,owner:(await us(t,c.id,this.signal))?.owner??""}}catch{return}})),o=new Map;for(let c of s)if(c)r[c.id]=c.owner,o.set(c.name,c.owner);this.unsaved.add(`${t.key}/owners.json`);let a=Fb(o);return this.owners.set(t.key,a),a}async cached(t,e,n,r){if(AF(e))return HF(e).size;let i=this.inflight.get(e);if(i)return i;let s=(async()=>{let o=await rc(t,n,this.signal,r);return P(e,o),o.length})();this.inflight.set(e,s);try{return await s}finally{this.inflight.delete(e)}}keep(t,e){let n=`${t.key}/${e}`,r=this.caches.get(n);if(!r)r=FF(t,e),this.caches.set(n,r);return r}async credits({site:t,post:e},n){let r=this.keep(t,"credits.json"),i=r[e.id];if(!i){try{i=await Xa(t,e.id,n)}catch{return}if(!i?.owner)return;r[e.id]=i,this.unsaved.add(`${t.key}/credits.json`)}Eo(e,i),this.credited()}}import{rmSync as LF}from"node:fs";import{join as jF}from"node:path";var so=2147483645,Ia=2147483646,f1=-1073741827,_F=-1073741828,GF=16,BF=0.4,UF=3221225472,WF=256;function KF(t){let e=/^(\d+) (\d+)$/.exec(t??"");return e&&(Number(e[1])>0||Number(e[2])>0)?{x:Number(e[1]),y:Number(e[2])}:void 0}var zm=KF(process.env.TTHEME_BG_MARGIN);class Dm{screen;gliding;sent=new Map;placed=new Map;covered="";viewed="";bands=Zc(process.env);files=Qc(process.env);moves=c$(process.env);layers=Xc(process.env);wipes=u$(process.env);views=$i(process.env);bandFiles=new Map;nextBand=UF;view;grid;background;renders;scratch;signal;write;constructor(t){this.view=t.view,this.grid=t.grid,this.background=t.background,this.renders=t.renders,this.scratch=t.scratch,this.signal=t.signal,this.write=t.write,this.screen=new Ri({write:(e)=>this.write(e),view:()=>this.frame(),beat:()=>{this.view.beat++}})}draw(){if(!this.signal.aborted)this.screen.request()}soon(){if(!this.signal.aborted)this.screen.soon()}flush(){if(!this.signal.aborted)this.screen.now()}point(t){return this.screen.point(t)}drop(){this.screen.drop()}frame(){if(this.signal.aborted)return;let{cols:t,rows:e,cell:n}=this.grid(),r=wm(this.view,t,e);return this.view.loaderFrom=r.loader?this.view.loaderFrom??this.view.beat:void 0,{lines:r.lines,zones:r.zones,after:(i)=>this.images(r.images,i,n),...this.view.mode==="grid"&&this.view.editing!==void 0?{cursor:this.caret()}:{},ticking:r.tick}}images(t,e,n){let r="",i=new Set,s;for(let o of t){if(this.views&&o.id>=mm){s=o;continue}let a=this.bands?this.banded(o):o;if(!a)continue;if(this.wipes&&[...e].some((u)=>u>=a.row&&u<a.row+a.rows))this.placed.delete(a.id);if(i.add(a.id),this.sent.get(a.id)!==a.path){let u=Du(a,this.files);if(u===void 0)continue;r+=u,this.sent.set(a.id,a.path),this.placed.delete(a.id)}let c=`${a.row};${a.col};${a.cols};${a.rows};${a.crop};${a.z}`;if(this.placed.get(a.id)!==c){if(!this.moves&&this.placed.has(a.id))r+=gm(a.id);r+=Zy(a,n),this.placed.set(a.id,c)}}for(let o of this.sent.keys())if(!i.has(o))r+=ka(o),this.sent.delete(o),this.placed.delete(o);return r+(this.views?this.backdrop(s):this.cover())}glide(){if(this.bands)this.prebake();if(this.gliding)return;let{cols:t,rows:e}=this.grid(),n=Jn(t,e).height,r=()=>{let i=this.view,s=i.top*gt.height,o=s-i.scroll;if(o===0||i.mode!=="grid"){i.scroll=s;let a=this.gliding!==void 0;if(this.gliding=void 0,a)this.draw();return}if(Math.abs(o)>2*n)i.scroll=s-Math.sign(o)*n,o=s-i.scroll;i.scroll+=Math.sign(o)*Math.max(1,Math.round(Math.abs(o)*BF)),this.draw(),this.gliding=setTimeout(r,GF)};r()}snap(){clearTimeout(this.gliding),this.gliding=void 0,this.view.scroll=this.view.top*gt.height}resized(){this.screen.reset()}stop(){this.screen.stop(),clearTimeout(this.gliding)}prebake(){let t=this.view,{cols:e,rows:n}=this.grid();for(let r of wm({...t,scroll:t.top*gt.height},e,n).images)if(r.crop!==void 0)this.band(r.path,r.crop,r.rows)}cover(){let{cols:t,rows:e}=this.grid(),n=`${t};${e}`;if(!this.layers||this.covered===n)return"";let r="";if(!this.covered){let i=Buffer.from(rt(this.background)).toString("base64");if(r+=`\x1B_Ga=t,f=24,s=1,v=1,i=${so},q=2;${i}\x1B\\`,zm)r+=`\x1B_Ga=t,f=32,s=1,v=1,i=${Ia},q=2;AAAAAA==\x1B\\\x1B[H\x1B_Ga=p,i=${Ia},p=${Ia},c=1,r=1,C=1,z=${_F},q=2\x1B\\`}else if(!this.moves)r+=gm(so);if(this.covered=n,zm){let{x:i,y:s}=zm;return`${r}\x1B_Ga=p,i=${so},p=${so},P=${Ia},Q=${Ia},H=${-i},V=${-s},c=${t+2*i},r=${e+2*s},C=1,z=${f1},q=2\x1B\\`}return`${r}\x1B[H\x1B_Ga=p,i=${so},p=${so},c=${t},r=${e},C=1,z=${f1},q=2\x1B\\`}backdrop(t){let{cols:e,rows:n,cell:r}=this.grid(),i=e*r.w,s=n*r.h,o=t?`${this.background}|${t.path}|1|${i}|${s}|${i}|${s}|0|0|1`:`${this.background}||1|${i}|${s}|0|0|0|0|5`;if(o===this.viewed)return"";return this.viewed=o,ki(o)}caret(){return`\x1B[1;${Math.min(this.grid().cols,X(`⌕ ${this.view.editing??""}`)+1)}H`}banded(t){if(t.crop===void 0)return t;let e=this.band(t.path,t.crop,t.rows,!this.gliding);return e?.ready?{...t,id:e.id,path:e.path,crop:void 0}:void 0}band(t,e,n,r=!0){let i=`${t}|${e}|${n}`,s=this.bandFiles.get(i);if(s||!r)return s;let{cell:o}=this.grid(),a=this.nextBand++,c={id:a,path:jF(this.scratch,`band-${a}.png`),ready:!1};return this.bandFiles.set(i,c),this.renders.run({job:"band",from:t,to:c.path,y:e*o.h,height:n*o.h}).then(()=>{c.ready=!0,this.draw()}).catch(()=>{}),this.trimBands(),c}trimBands(){for(let[t,e]of this.bandFiles){if(this.bandFiles.size<=WF)return;if(e.ready&&!this.sent.has(e.id))this.bandFiles.delete(t),LF(e.path,{force:!0})}}}var Wi=[{name:"TTHEME_FIND_RATING",label:"Rating",about:"The ratings to list, each site read in its own words — space ticks one, and one stays ticked",choices:os,multi:{read:si}},{name:"TTHEME_FIND_BLOCK",label:"Block",about:"Posts tagged with nudity or underwear are left out — space unticks one",choices:ii,multi:{read:cs,none:"none"}},{name:"TTHEME_FIND_POSTS",label:"Posts",about:"Every post of the character, or only the transparent cutouts",choices:["all","cutouts"]},{name:"TTHEME_FIND_SOLO",label:"Solo",about:"When on, only the posts known to show the character alone — checked as posts arrive, so the counts below leave it out",choices:["on","off"]},{name:"TTHEME_FIND_ORDER",label:"Order",about:"How posts are ranked: fit, by how well each makes a backdrop; newest; or score",choices:["fit","newest","score"]},{name:"TTHEME_FIND_SETS",label:"Sets",about:"One picture posted over and over, or held by another site too: fold it into one tile, or show each",choices:["fold","show"]},...Gs()?[{name:"TTHEME_FIND_REMOVE_BG",label:"Remove bg",about:"Cut the character out of an opaque picture you try on, with macOS Vision",choices:["on","off"]}]:[],{name:"TTHEME_FIND_MIN_SCORE",label:"Min score",about:"Posts scored at least this — danbooru, konachan and yande.re; zerochan keeps no score. ←→ steps, or type any number",choices:vb,entry:"number",advanced:!0},{name:"TTHEME_FIND_MIN_SIZE",label:"Min size",about:"The shorter side of a picture, in px — every site filters it. ←→ steps, or type any number",choices:Eb,entry:"number",advanced:!0},{name:"TTHEME_FIND_SITES",label:"Sites",about:"The sites the all tab mixes — each keeps its own tab. Space ticks one, and one stays ticked",choices:Y.map((t)=>t.name),multi:{read:ko},advanced:!0},{name:"TTHEME_FIND_HIDE",label:"Hide",about:"Comics, monochrome, sketches or chibi, told by tag in every site's spelling — checked as posts arrive",choices:mf,multi:{read:qa,none:"none"},advanced:!0},{name:"TTHEME_FIND_HIDE_TAGS",label:"Hide tags",about:"Posts with any of these tags are left out, spaced like cosplay multiple_girls — checked as posts arrive",choices:[],entry:"text",advanced:!0},{name:"TTHEME_FIND_PNG",label:"PNG only",about:"PNG originals only — danbooru counts it, the others are told by the file; zerochan only where danbooru holds it",choices:["off","on"],advanced:!0}];function h1(t,e){if(t.multi)return t.multi.read(e).join(" ")||t.multi.none;if(t.entry==="number")return/^\d+$/.test(e??"")&&Number(e)>0?String(Number(e)):"off";if(t.entry==="text")return yo(e).join(" ");return t.choices.find((n)=>n===e)??t.choices[0]}var XF=["fit","newest","score"];function qm(t){return XF.find((e)=>e===t)??"fit"}var tC={left:-1,right:1,"shift-left":-10,"shift-right":10};function m1(t){if(process.env.SSH_CONNECTION||!/^(?:https?|file):/i.test(t))return;try{let e=zF(process.platform==="darwin"?"open":"xdg-open",[t],{stdio:"ignore",detached:!0});e.on("error",()=>{}),e.unref()}catch{}}function eC(t,e,n){if(e<0){if(t!=="fill")return Math.max(fl,t+e);if(!n)return t;return Math.max(fl,Math.max(100,n)+e+1)}return t==="fill"||t+e>n?"fill":t+e}function M1(t,e){return t.size===e.size&&t.at===e.at&&t.opacity===e.opacity}function nC(t,e){if(M1(t,e))return;return{...t.size!=="fill"?{size:t.size}:{},...t.at!==e.at?{position:Ut[t.at-1]}:{},...t.opacity!==e.opacity?{opacity:t.opacity}:{}}}function p1(t,e){let n=q(t);return ce(t,e).flatMap((r,i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(r.key)??[],a=[...Y,Vn].find((c)=>c.key===s);if(!a||!o)return[];return[{key:r.key,id:Number(o),ansi:a.ansi,...a===Vn?{}:{page:a.pageUrl(Number(o))},up:i===0,from:En(n,r.original??r.fill)}]})}function rC(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var g1=12,iC=4,sC=150,oC=300,b1=12,aC=2,cC=150,uC="\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c",lC=4000,fC=8000,w1=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,dC=process.platform==="win32"?"alt+v":"ctrl+v",$1=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",hC=1280,mC=16,pC=Ut.indexOf("top-right")+1,fl=20,k1=2,y1=3,gC=/[\p{Script=Hangul}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,bC=8,wC=9;function ll(t,e){return{key:t,groups:[],sources:[],queue:[],rounds:0,roundOf:new Map,last:new Map,kin:new Map,kindred:new Map,shapes:[],seen:new Set,same:new Map,checked:0,total:0,focus:0,top:0,searching:e,stage:"fetch",arrived:new Set}}function Na(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return Na(t.errors[0]);if(t.cause)return Na(t.cause);let e=t.code;if(typeof e==="string")return e;let n=(t.message||t.name).split(".")[0]??"";return n.length>56?`${n.slice(0,55)}…`:n}function Ym(t,e){return`${t}: ${Na(e)}`}function v1(t){return t.width*t.height}function E1(t,e){return`${t}-${S1("sha1").update(e).digest("hex").slice(0,8)}`}class Jm{view;tone;session=new AbortController;cell={w:0,h:0};cols=process.stdout.columns||80;rows=process.stdout.rows||24;gen=0;pumping=0;boards=new Map;board;posts=new Map;thumbPath=new Map;looking=new Map;looked=new Map;matched=new Map;aheading=!1;pages=new Map;tab=0;values=new Map(Wi.map((t)=>[t.name,h1(t,process.env[t.name])]));direction=1;prefetching=0;related=new Map;pool=[];relating;thumbQueue=[];heldFiles=new Map;heldAsked=new Set;thumbing=0;clarity=new Map;tunedFiles=[];presenting=!1;again=!1;renders=new Ma;showing;thumbless=new Set;current;fetch;settle;suggestTimer;suggesting;countTimer;counting;terminal;grabber=new Sm((t)=>this.write(t),(t)=>void this.got(t));noticeTimer;peekTimer;peeked;attaching;done;scratch=qF(En(VF(),"ttheme-find-"));home;catalog;entry;tagged;blurring;start;paint;kept;constructor(t,e,n,r,i){this.start=i,this.home=t,this.catalog=e,this.entry=n,this.tagged=new Set(e.palettes.flatMap((o)=>o.booru?[o.booru]:[])),this.tone=hn(n,n.signatureSlots),this.blurring=Tr(t);let s={size:"fill",at:pC,opacity:this.tone.opacity};this.view={palette:n.name,tag:r,site:this.tabName,siteAnsi:this.tabAnsi,nextSite:this.nextTabName,preset:this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:qm(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:si(this.setting("TTHEME_FIND_RATING")),block:cs(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",narrow:this.narrowed(),enabled:ko(this.setting("TTHEME_FIND_SITES")),hide:qa(this.setting("TTHEME_FIND_HIDE")),hideTags:yo(this.setting("TTHEME_FIND_HIDE_TAGS")),advanced:!1,settings:Wi.map((o)=>({label:o.label,choices:[...o.choices],value:this.setting(o.name),default:h1(o,Do(o.name)),multi:o.multi&&{none:o.multi.none},about:o.about,entry:o.entry,advanced:o.advanced,cursor:0})),colors:{cursor:n.cursor,selection:n.selection,background:n.background,foreground:n.foreground,ansi:n.ansi},tiles:[],installed:[],held:p1(t,n.name),checked:0,total:0,searching:r!=="",stage:"fetch",sites:[],focus:0,top:0,scroll:0,beat:0,mode:"grid",help:!1,scene:Math.max(0,ie.findIndex((o)=>o.name.toLowerCase()===process.env.TTHEME_SCENE)),details:!1,tune:{...s},untuned:s,coloring:nu(t),editing:r===""?"":void 0,chips:[]},this.paint=new Dm({view:this.view,grid:()=>({cols:this.cols,rows:this.rows,cell:this.cell}),background:n.background,renders:this.renders,scratch:this.scratch,signal:this.signal,write:(o)=>this.write(o)}),this.kept=new Km({home:t,catalog:e,entry:n,signal:this.signal,credited:()=>{this.show(),this.inform(),this.paint.draw()}}),this.pool=this.selected(this.view),this.syncChips(),this.board=ll(this.boardKey,r!==""),this.boards.set(this.board.key,this.board)}get signal(){return this.session.signal}get site(){return this.tab===0?void 0:Y[this.tab-1]}get sites(){return this.site?[this.site]:Y.filter((t)=>this.view.enabled.includes(t.name))}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??iC}get nextTabName(){let t=(this.tab+1)%(Y.length+1);return t===0?"all":Y[t-1].name}frame(){return{w:this.cols*(this.cell.w||10),h:this.rows*(this.cell.h||20)}}setting(t){return this.values.get(t)}narrowed(){return gf(this.setting("TTHEME_FIND_MIN_SCORE"),this.setting("TTHEME_FIND_MIN_SIZE"),this.setting("TTHEME_FIND_PNG"))}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(t,e,n){return En(Ke(t),"orig",`${e}.${n}`)}previewPath(t){let{url:e}=Ja(t.site,t.post);return En(Ke(t.site),"thumb",`${E1(t.post.id,e)}.${fr(e)}`)}tileOf(t,e){let{site:n,post:r}=t,i=ke(n,r.id),s=fn(r)??r;return{id:r.id,key:i,site:n.name,siteAnsi:n.ansi,width:s.width,height:s.height,reduced:s!==r,page:n===Vn?"":n.pageUrl(r.id),artist:n===Vn?lv(r.source):r.named.artist[0]??"",score:r.score,variants:e,mates:this.kept.matesOf(n,r.owner),thumb:this.thumbPath.get(i),missing:this.thumbless.has(i)}}show(){let t=this.view,e=this.board;if(t.tiles=e.groups.flatMap((n)=>n.open?n.posts.map((r)=>this.tileOf(r,0)):[this.tileOf(n.posts[0],n.posts.length)]),t.checked=e.checked,t.total=e.total,t.searching=e.searching,this.stageOf(e),t.note=e.note,t.focus=Math.max(0,Math.min(e.focus,t.tiles.length-1)),t.top=e.top,this.showing!==e)this.showing=e,this.paint.snap()}stageOf(t){let e=this.view;e.stage=t.stage,e.ranking=t.ranking,e.sites=this.sites.map((n)=>({name:n.name,arrived:t.arrived.has(n.name)}))}syncSite(){let t=this.view;t.site=this.tabName,t.siteAnsi=this.tabAnsi,t.nextSite=this.nextTabName}run(){let t=(e)=>this.view.editing===void 0&&Qu(e);return Br({modes:[Gr,...Js()],assume:[Yn,Hi],burst:t},async(e)=>{this.terminal=e,e.onResize(this.onResize),e.listen((i)=>{for(let s of i)this.inbound(s);this.paint.soon()}),e.write(yi);let n=new Promise((i)=>{this.done=i}),r=setInterval(this.onClock,250);setTimeout(wc,0);try{let i=new la,s=await e.ask(Cu,(o)=>i.see(o),1000);if(s){if(this.cell=s,this.holdThumbs(),this.view.tag)this.search(),this.relate(this.view.tag)}else this.view.searching=!1,this.view.error="This terminal does not report its cell size — find needs kitty graphics";if(!process.env.TMUX)await e.ask(uC,(o)=>o.kind==="attributes"?!0:void 0,500,!1);if(this.grabber.start(),e.hold(Ny),this.start&&"paste"in this.start)this.pasted(this.start.paste);else if(this.start)this.fromClipboard();else this.peek();return this.paint.draw(),await e.until(n)}finally{this.session.abort(),this.grabber.stop(),this.attaching?.abort(),clearTimeout(this.noticeTimer),clearTimeout(this.peekTimer),this.fetch?.abort(),clearTimeout(this.settle),this.quietSuggest(),this.quietCount(),clearInterval(r),this.paint.stop(),e.write(`\x1B_Ga=d,d=A,q=2\x1B\\${yi}`),this.kept.save(),this.renders.close(),ul(this.scratch,{recursive:!0,force:!0}),Cb()}})}write(t){this.terminal?.write(t)}get saved(){return this.view.saved?.text}get installs(){return this.view.installed.length}finish(t){this.done?.(t===2&&this.saved?0:t)}inbound(t){if(t.kind==="key")this.key(t.key);else if(t.kind==="mouse")this.pointer(t);else if(t.kind==="paste")this.pasted(t.text);else if(t.kind==="mode"){if(t.mode===5522)this.grabber.clipboard=t.value!==0&&t.value!==4}else if(t.kind==="osc")if(t.code==="72"&&t.meta.t==="q")this.grabber.drops=!0;else this.grabber.take(t)}pasted(t){let e=this.view;if(e.editing!==void 0&&t.trim()!==""&&!this.picture(t)){e.editing+=t.replace(/[\r\n]+/g," "),this.suggest(),this.paint.draw();return}if(e.installing!==void 0||e.panel!==void 0||e.help)return;if(t.trim()===""){this.fromClipboard();return}this.attach(t)}picture(t){let e=t.trim();if(/^https?:\/\/\S+$/i.test(e))return!Ya(e,this.site??Y[0]);return eo(e).length>0}async got(t){if(t.kind==="error"){this.notice(t.message);return}if(t.kind==="text"){if(t.text.trim()===""){this.notice(`No picture on the clipboard — ${$1}`);return}this.pasted(t.text);return}await this.bring(()=>Vu(t.bytes,t.source))}notice(t,e=lC){let n=this.view;n.error=t,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(n.error===t)n.error=void 0,this.paint.draw()},e),this.paint.draw()}async peek(){let t=this.view,e;try{e=await pv()}catch{return}if(!e||e.stamp===this.peeked)return;if(this.peeked=e.stamp,!e.picture||t.installing!==void 0)return;t.hint=`Picture on the clipboard · ${dC} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.paint.draw()},fC),this.paint.draw()}async fromClipboard(){let t=this.view;if(Em()){if(this.grabber.clipboard){this.grabber.ask();return}this.notice("Over SSH the clipboard is not here — drop the file");return}let e;try{e=await mv(En(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`Could not read the clipboard: ${Na(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await vm(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`No picture on the clipboard — ${$1}`);return}if(this.picture(n)){await this.attach(n);return}if(t.editing===void 0)t.editing="";this.pasted(n)}async attach(t){let e=t.trim();if(/^https?:\/\//i.test(e)){let i=Ya(e,this.site??Y[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=eo(e).sort((i,s)=>Number(!w1.test(i))-Number(!w1.test(s)));if(!n){this.notice("Nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>vm(n,i),r.length)}async bring(t,e=0){let n=this.view;this.attaching?.abort();let r=new AbortController;this.attaching=r,n.error=void 0,n.saved=void 0,n.note="Reading the picture…",this.paint.draw();let i;try{i=await t(AbortSignal.any([r.signal,this.signal]))}catch(d){if(!r.signal.aborted)n.note=void 0,this.notice(Na(d),8000);return}if(r.signal.aborted)return;n.note=e>0?`The first picture of ${e+1} — drop one at a time to try the others`:void 0,this.quietSuggest(),n.editing=void 0,n.suggest=void 0,n.pick=void 0;let s=dv(i.bytes);fv(s,i.source);let o=this.origPath(Vn,s,i.ext);P(o,i.bytes);let a=d1(o).href,c={id:s,file:a,width:i.width,height:i.height,ext:i.ext,preview:a,owner:"",score:0,rating:"s",md5:S1("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],named:{artist:[],character:[],copyright:[]},solo:void 0,family:0,smaller:[]},u={site:Vn,post:c},l=this.previewPath(u);P(l,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let f=ll(`local|post:${s}`,!1);this.board=f,this.boards.set(f.key,f),this.single(f,u)}single(t,e){t.searching=!1,this.posts.set(ke(e.site,e.post.id),e),t.groups=[{posts:[e],open:!1}],t.checked=1,t.total=1,this.thumbQueue.push(e),this.thumbs(),this.view.mode="try",this.show(),this.select(),this.paint.draw()}onClock=()=>{let t=this.sites.reduce((r,i)=>Pn(i)>Pn(r)?i:r),e=Math.ceil((Pn(t)-Date.now())/1000),n=e>0?e:void 0;if(n!==this.view.waiting)this.view.waiting=n,this.view.slow=t.name,this.paint.draw()};onResize=()=>{if(this.cols=process.stdout.columns||this.cols,this.rows=process.stdout.rows||this.rows,this.paint.resized(),this.holdThumbs(),this.scroll(),this.paint.snap(),this.view.mode==="try"&&this.current)this.reveal();this.pump(),this.paint.draw()};key(t){let e=this.view;if(t==="ctrl-c"){this.finish(2);return}if(e.installing!==void 0)return;if(t==="focus-in"){this.peek();return}if(t==="focus-out")return;if((t==="ctrl-v"||t==="alt-v")&&e.panel===void 0){this.fromClipboard();return}if(e.editing!==void 0){this.editKey(t);return}if(e.panel!==void 0){this.panelKey(t);return}if(e.help){if(t==="?"||t==="esc")e.help=!1,this.paint.draw();return}if(this.cols<Ci.cols||this.rows<Ci.rows){if(t==="esc")this.finish(2);return}if(t==="?"){e.help=!0,this.paint.draw();return}if(e.mode==="try"){this.tryKey(t);return}this.gridKey(t)}pointer(t){let e=this.view,n=this.paint.point(t),r=n?.target;if(e.installing!==void 0)return;if(t.action==="wheel"){if(!t.sideways)this.wheel(t.wheel);return}if((t.action==="press"||t.action==="drag")&&t.button!=="left")return;if(r?.kind==="track"&&n&&t.action!=="release")this.slide(r.field,n);else if(t.action==="press")this.pressed(r);else if(t.action==="release"&&n?.inside)this.released(r,t)}pressed(t){let e=this.view;if(e.help)this.paint.drop(),this.key("esc");else if(e.editing!==void 0||t===void 0)return;else if(e.panel!==void 0){if(t.kind==="setting"&&t.index<e.settings.length&&e.typing===void 0)e.panel=t.index,this.paint.draw()}else if(e.mode==="try")this.tryPoint(t);else if(t.kind==="tile")this.focus(t.index);else if(t.kind==="query")this.gridKey("/");else if(t.kind==="site")this.tab=t.tab,this.syncSite(),this.turn()}released(t,e){let n=this.view;if(t?.kind==="key")this.key(t.key);else if(t?.kind==="link"){if(!e.shift&&!e.alt&&!e.ctrl)m1(t.url)}else if(n.editing!==void 0){if(t?.kind==="suggest")n.pick=t.index,this.editKey("enter")}else if(n.panel!==void 0)this.panelPoint(t);else if(n.mode==="try"){if(t?.kind==="place"&&n.tuning)this.tuneKey(String(t.at))}else if(t?.kind==="tile"&&e.count===2)this.gridKey("enter");else if(t?.kind==="chip")this.toggle(t.index)}wheel(t){let e=this.view;if(e.help)return;if(e.editing!==void 0){if(e.suggest?.length)this.editKey(t<0?"up":"down")}else if(e.panel!==void 0){if(e.typing===void 0)this.panelKey(t<0?"up":"down")}else if(e.tuning)this.tuneKey(t<0?"up":"down");else if(e.mode==="try")this.tryKey(t<0?"left":"right");else this.focus(e.focus+t*Jn(this.cols,this.rows).perRow)}panelPoint(t){let e=this.view;if(t?.kind!=="setting"&&t?.kind!=="choice")return;let n=e.settings[t.index];if(e.typing!==void 0){let r=e.settings[e.panel??0];if(r&&(t.index!==e.panel||t.kind==="setting"))this.typeKey(r,"enter");else return}if(t.kind==="setting"&&t.index===e.settings.length){e.panel=t.index,this.panelKey("enter");return}if(e.panel=t.index,t.kind==="choice"&&n){if(n.entry==="text"||t.choice===void 0){this.panelKey("enter");return}if(n.multi){n.cursor=Math.max(0,n.choices.indexOf(t.choice)),this.panelKey(" ");return}if(n.value!==t.choice)n.value=t.choice,this.recount()}this.paint.draw()}tryPoint(t){let e=this.view;if(t.kind==="scene")e.scene=t.scene,e.details=!1,this.paint.draw();else if(e.tuning&&t.kind==="field")e.tuning.field=t.field,this.paint.draw()}slide(t,e){let n=this.view,r=n.tuning;if(!r)return;let i=Math.min(1,Math.max(0,e.width>1?e.x/(e.width-1):0));if(r.field=t,t===0){let s=Math.max(100,r.fill),o=fl+Math.round(i*(s-fl+1));n.tune.size=i===1||r.fill>0&&o>=r.fill?"fill":Math.min(s,o)}else n.tune.opacity=Math.round(i*100)/100;this.retune()}gridKey(t){let e=this.view,{perRow:n,rowsVis:r}=Jn(this.cols,this.rows),s={left:-1,right:1,up:-n,down:n,k:-n,j:n,pgup:-n*r,pgdn:n*r,home:-e.focus,end:e.tiles.length}[t];if(s!==void 0){this.focus(e.focus+s);return}if(/^[1-9]$/.test(t)){this.toggle(Number(t)-1);return}if(t==="enter"&&e.tiles[e.focus]){e.mode="try",e.error=void 0,this.select();return}if(t==="v"){this.fromClipboard();return}if(t==="c"){e.preset=e.preset==="cutouts"?"all":"cutouts",this.turn();return}if(t==="tab"||t==="shift-tab"){let o=Y.length+1;this.tab=(this.tab+(t==="tab"?1:o-1))%o,this.syncSite(),this.turn();return}if(t==="/"){e.editing="",this.paint.draw();return}if(t===" "){this.unfold();return}if(t==="o"){this.openPage();return}if(t==="s"){e.panel=0,e.advanced=!1,this.recount(),this.paint.draw();return}if(t==="esc")this.finish(2)}panelKey(t){let e=this.view,n=e.panel??0,r=e.settings[n];if(e.typing!==void 0&&r){this.typeKey(r,t);return}let i=$a(e);if(t==="up"||t==="down"){let s=i.indexOf(n)+(t==="up"?-1:1);e.panel=i[(s+i.length)%i.length]??n,this.paint.draw();return}if(t==="a"||t==="enter"&&n===e.settings.length){e.advanced=!e.advanced,e.panel=$a(e)[0]??0,this.paint.draw();return}if(r?.entry&&(t==="enter"||r.entry==="number"&&/^[0-9]$/.test(t))){e.typing=t==="enter"?r.entry==="text"?r.value:"":t,this.paint.draw();return}if((t==="left"||t==="right")&&r&&r.entry!=="text"){let s=t==="left"?-1:1;if(r.multi)r.cursor=(r.cursor+s+r.choices.length)%r.choices.length;else r.value=nv(r.choices,r.value,s),this.recount();this.paint.draw();return}if(t===" "&&r?.multi){let s=r.value.split(" "),o=r.choices.filter((c,u)=>u===r.cursor?!s.includes(c):s.includes(c)),a=r.multi.none;if(o.length>0||a!==void 0)r.value=o.length>0?o.join(" "):a,this.recount(),this.paint.draw();return}if(t==="esc"){e.settings.forEach((s,o)=>{s.value=this.setting(Wi[o]?.name??"")}),e.panel=void 0,e.advanced=!1,this.quietCount(),this.paint.draw();return}if(t==="enter"||t==="s"||t==="alt-c")e.panel=void 0,e.advanced=!1,this.quietCount(),this.adopt()}typeKey(t,e){let n=this.view,r=n.typing??"";if(e==="esc"){n.typing=void 0,this.paint.draw();return}if(e==="enter"||e==="up"||e==="down"){if(t.value=t.entry==="number"?Number(r)>0?String(Number(r)):"off":yo(r).join(" "),n.typing=void 0,this.recount(),e==="enter"){this.paint.draw();return}this.panelKey(e);return}let i=Pi(r,e,(s)=>t.entry==="number"?/^[0-9]$/.test(s)&&r.length<bm:/^[\x20-\x7e]$/.test(s));if(i!==void 0)n.typing=i,this.paint.draw()}quietCount(){clearTimeout(this.countTimer),this.counting?.abort(),this.counting=void 0}recount(){if(this.quietCount(),this.view.counts=void 0,!this.view.tag)return;let t=new AbortController;this.counting=t,this.countTimer=setTimeout(()=>void this.countPending(t),oC)}pending(){let t=(e)=>this.view.settings[Wi.findIndex((n)=>n.name===e)]?.value??this.setting(e);return{tag:this.view.tag,chosen:this.view.chosen,preset:t("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:qm(t("TTHEME_FIND_ORDER")),rating:si(t("TTHEME_FIND_RATING")),narrow:gf(t("TTHEME_FIND_MIN_SCORE"),t("TTHEME_FIND_MIN_SIZE"),t("TTHEME_FIND_PNG")),enabled:ko(t("TTHEME_FIND_SITES"))}}async countPending(t){let e=this.pending(),n=this.site?[this.site]:Y.filter((s)=>e.enabled.includes(s.name)),r=AbortSignal.any([this.signal,t.signal]),i=await Promise.all(n.map(async(s)=>{let o=this.query(s,e);if(!o)return{site:s.name,count:0};if(s.counts&&!s.counts(o.tags))return{site:s.name};try{let a=await kf(s,o.tags,r);return{site:s.name,...Number.isFinite(a)?{count:a}:{}}}catch{return{site:s.name}}}));if(this.counting===t&&this.view.panel!==void 0)this.view.counts=i,this.paint.draw()}adopt(){let t=this.view,e=Wi.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let s=Wi[i];if(s)this.values.set(s.name,r.value)});let n=Wi.filter((r,i)=>this.setting(r.name)!==e[i]);if(n.length===0){this.paint.draw();return}this.save(n),t.rating=si(this.setting("TTHEME_FIND_RATING")),t.block=cs(this.setting("TTHEME_FIND_BLOCK")),t.sets=this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",t.preset=this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",t.order=qm(this.setting("TTHEME_FIND_ORDER")),t.solo=this.setting("TTHEME_FIND_SOLO")==="on",t.narrow=this.narrowed(),t.enabled=ko(this.setting("TTHEME_FIND_SITES")),t.hide=qa(this.setting("TTHEME_FIND_HIDE")),t.hideTags=yo(this.setting("TTHEME_FIND_HIDE_TAGS")),this.boards.clear(),this.current=void 0,t.shown=void 0,t.mode="grid",this.search()}save(t){this.store(t.map((e)=>[e.name,this.setting(e.name)]))}store(t){let e=En(this.home,"ttheme","config.zsh");try{let n=Ra(e)?YF(e,"utf8"):"";return P(e,t.reduce((r,[i,s])=>ru(r,i,s),n)),!0}catch(n){return this.view.error=n instanceof Error?n.message:String(n),!1}}editKey(t){let e=this.view,n=e.editing??"",r=e.suggest??[];if((t==="up"||t==="down")&&r.length>0){let o=((e.pick??r.length)+(t==="down"?1:r.length))%(r.length+1);e.pick=o===r.length?void 0:o,this.paint.draw();return}if(t==="esc"||t==="enter")this.quietSuggest();if(t==="esc"){if(e.editing=void 0,e.tag===""){this.finish(2);return}this.paint.draw();return}if(t==="enter"){let s=e.pick===void 0?void 0:r[e.pick],o=s?s.whole?s.value:n.replace(/\S*$/,s.value):n;if(e.editing=void 0,e.suggest=void 0,e.pick=void 0,o.trim()){this.commit(o.trim());return}if(e.tag===""){this.finish(2);return}this.paint.draw();return}let i=Pi(n,t);if(i!==void 0)e.editing=i,this.suggest(),this.paint.draw()}quietSuggest(){clearTimeout(this.suggestTimer),this.suggesting?.abort(),this.suggesting=void 0}suggest(){this.quietSuggest();let t=this.view;t.pick=void 0;let e=t.editing??"",n=/\S*$/.exec(e)?.[0]??"",r=rC(n),i=Dw(e,y1,this.tagged).map((c)=>({value:c.tag,count:0,alias:c.name,whole:!0}));if(!r&&i.length===0){t.suggest=void 0;return}let s=r?M0(this.catalog.palettes,this.entry,n).map((c)=>({value:c.booru,count:0,palette:c.name})):[],o=[...new Map([...s.slice(0,y1),...i].map((c)=>[c.value,c])).values()];if(t.suggest=o.length>0?o:void 0,i.length>0&&gC.test(e))t.pick=o.findIndex((c)=>("whole"in c));if(!r)return;let a=new AbortController;this.suggesting=a,this.suggestTimer=setTimeout(async()=>{try{let c=await jb(n,AbortSignal.any([this.signal,a.signal]));if(this.suggesting===a&&t.editing!==void 0){let u=new Map(c.map((f)=>[f.value,f.count])),l=new Set(o.map((f)=>f.value));t.suggest=[...o.map((f)=>({...f,count:u.get(f.value)??0})),...c.filter((f)=>!l.has(f.value))].slice(0,bC),t.pick=t.pick!==void 0&&t.pick<o.length?t.pick:void 0,this.paint.draw()}}catch{}},sC)}async commit(t){let e=Ya(t,this.site??Y[0]);if(e){await this.jump(e.site,e.id);return}if(this.picture(t)){await this.attach(t);return}this.view.tag=t,this.view.chosen=void 0,this.relate(t),this.boards.clear(),await this.search()}async jump(t,e){let n=++this.gen;this.tab=Y.indexOf(t)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ll(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.paint.draw();try{let i=await us(t,e,this.signal);if(n!==this.gen)return;if(!i){r.searching=!1,r.error=`${t.name} has no post ${e}`,this.view.error=r.error,this.show(),this.paint.draw();return}this.single(r,{site:t,post:i})}catch(i){this.fail(n,i,t)}}async turn(){this.fetch?.abort(),this.current=void 0,this.view.shown=void 0;let t=this.boards.get(this.boardKey);if(!t){await this.search();return}this.gen++,this.board=t,this.view.error=t.error,this.show(),this.paint.draw(),await this.pump()}unfold(){let t=this.view,e=0;for(let n of this.board.groups){let r=n.open?n.posts.length:1;if(t.focus<e+r){if(n.posts.length<2)return;n.open=!n.open,this.board.focus=e;for(let i of n.posts)if(!this.thumbPath.has(ke(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.paint.glide(),this.paint.draw();return}e+=r}}openPage(){let t=this.view.tiles[this.view.focus],e=t&&this.posts.get(t.key);if(e)m1(e.site.pageUrl(e.post.id))}tryKey(t){let e=this.view;if(e.tuning){this.tuneKey(t);return}if(t==="left"||t==="right"){this.direction=t==="left"?-1:1,this.focus(e.focus+this.direction);return}if(t==="shift-left"||t==="shift-right"){e.scene+=t==="shift-left"?-1:1,e.details=!1,this.paint.draw();return}if(t==="i"){e.details=!e.details,this.inform(),this.paint.draw();return}if(t==="t"){e.tuning={field:0,held:{...e.tune},fill:this.current?.fill??0,coloring:e.coloring},this.paint.draw();return}if(t==="c"){this.recolor();return}if(t==="o"){this.openPage();return}if(t==="x"){this.swap();return}if(t==="v"){this.fromClipboard();return}if(t==="enter"){this.install();return}if(t==="esc")this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,e.mode="grid",e.error=void 0,this.paint.draw()}tuneKey(t){let e=this.view,n=e.tuning,r=e.tune;if(t==="up"||t==="down"){n.field=(n.field+(t==="up"?2:1))%3,this.paint.draw();return}let i=tC[t];if(i!==void 0){if(n.field===0)r.size=eC(r.size,i,n.fill);else if(n.field===1)r.at=(r.at-1+Math.sign(i)+9)%9+1;else r.opacity=Math.max(0,Math.min(100,Math.round(r.opacity*100)+i))/100;this.retune();return}if(/^[1-9]$/.test(t)){n.field=1,r.at=Number(t),this.retune();return}if(t==="="){let s=e.untuned;if(n.field===0)r.size=s.size;else if(n.field===1)r.at=s.at;else r.opacity=s.opacity;this.retune();return}if(t==="+"){e.tune={...e.untuned},this.retune();return}if(t==="enter"){e.tuning=void 0,this.paint.draw();return}if(t==="c"){this.recolor();return}if(t==="esc")e.tune={...n.held,...n.coloring===e.coloring?{}:{opacity:e.untuned.opacity}},e.tuning=void 0,this.retune()}recolor(){let t=this.view;if(!this.current||t.shown?.id!==this.current.key)return;t.coloring=t.coloring==="tone"?"original":"tone",t.tune.opacity=t.untuned.opacity,this.paint.draw(),this.reveal()}retune(){if(this.paint.draw(),this.current&&this.view.shown?.id===this.current.key)this.reveal()}inform(){let t=this.view,e=t.tiles[t.focus],n=e&&this.posts.get(e.key);t.info=n?this.infoOf(n):void 0}infoOf(t){let{site:e,post:n}=t,r=n.named,i=Hb(e,n),s=new Set([...r.artist,...r.character,...r.copyright]),o=vo(n.source),a=/^https?:\/\//i.test(o)?o:e===Vn&&o.startsWith("/")?d1(o).href:void 0;return{page:e===Vn?"":e.pageUrl(n.id),source:o,...a?{link:a}:{},artists:r.artist,characters:r.character,series:r.copyright,tags:n.tags.filter((c)=>!s.has(c)),...i?{rating:i}:{},...n.posted?{posted:n.posted}:{},ext:(fn(n)??n).ext,uploader:n.owner}}focus(t){let e=this.view;if(e.tiles.length===0)return;let n=Math.max(0,Math.min(e.tiles.length-1,t));if(n===e.focus)return;if(e.focus=n,this.board.focus=n,this.scroll(),this.paint.glide(),this.pump(),e.mode==="try")this.select();this.paint.draw()}scroll(){let t=this.view,{perRow:e,rowsVis:n}=Jn(this.cols,this.rows),r=Math.floor(t.focus/e);if(r<t.top)t.top=r;if(r>t.top+n-1)t.top=r-n+1;this.board.top=t.top}selected(t){if(t.chosen)return t.chosen;if(!t.tag)return[];return this.namesOf(t.tag,"danbooru")}namesOf(t,e){let n=t===this.entry.booru?this.entry:this.catalog.palettes.find((r)=>r.booru===t);return n?O0(n,e):[t]}syncChips(){let t=this.selected(this.view);this.view.chips=this.pool.slice(0,wC).map((e)=>({name:e,on:t.includes(e)}))}toggle(t){let e=this.view,n=e.chips[t];if(!n)return;let r=this.selected(e),i=n.on?r.filter((s)=>s!==n.name):[...r,n.name];if(i.length===0)return;e.chosen=i,e.tag=i.join(" or "),this.syncChips(),this.boards.clear(),this.search()}async relate(t){this.relating?.abort();let e=this.selected({tag:t,chosen:void 0});if(this.pool=e,this.syncChips(),this.paint.draw(),!t||/\s/.test(t))return;let n=this.related.get(t);if(!n){let r=new AbortController;this.relating=r;try{n=(await _b(t,AbortSignal.any([this.signal,r.signal]))).map((i)=>i.value)}catch{return}if(this.relating!==r)return;this.related.set(t,n)}this.pool=[...new Set([...e,...n])],this.syncChips(),this.paint.draw()}query(t,e=this.view){let n=e.chosen?Gb(t,e.chosen):this.namesOf(e.tag,t.key);if(n.length===0)return;let r=e.chosen?.slice(n.length)??[],i=n.length>1,s=e.preset==="cutouts"?t.cutouts:"",o=i&&s.includes("~"),a=[i?n.map((l)=>`~${l}`).join(" "):n[0],t.rate(e.rating),...t.narrow(e.narrow),o?"":s,e.order==="score"?t.best:""].filter(Boolean),c=[],u=[];for(let l of a)if($f([...c,l].join(" "))<=t.tagBudget)c.push(l);else u.push(l);return{tags:c.join(" "),notes:[...u.length>0?[`${t.name} takes ${t.tagBudget} tags — ${u.join(" ")} left out`]:[],...r.length>0?[`${t.name} takes ${n.length} tag${n.length===1?"":"s"} — ${r.join(" ")} left out`]:[],...o?[`${t.name} ORs the names, so cutouts are told by the file`]:[],...e.narrow.score>0&&!t.scored?[`${t.name} keeps no score`]:[],...e.narrow.png&&t.guesses?[`${t.name} names a file type only where danbooru holds the file`]:[]]}}async search(){let t=++this.gen,e=ll(this.boardKey,!0);this.board=e,this.boards.set(e.key,e),this.view.error=void 0;let n=this.sites.flatMap((s)=>{let o=this.query(s);return o?[{site:s,...o}]:[]}),r=this.sites.filter((s)=>!n.some((o)=>o.site===s)),i=[...n.flatMap(({notes:s})=>s),...r.length>0?[`${this.entry.name} has no tag on ${r.map((s)=>s.name).join(", ")}`]:[]];if(e.note=i.length>0?i.join(" · "):void 0,n.length===0)e.searching=!1;this.show(),this.paint.draw(),this.tally(t,e,n);try{let s=await Promise.all(n.map(async(o)=>({plan:o,owners:await this.kept.mateOwners(o.site)})));if(t!==this.gen)return;e.sources=s.flatMap(({plan:{site:o,tags:a},owners:c})=>{let u=$f(a)+1<=o.tagBudget?o.uploadedBy:void 0;return[...u?[...c.keys()].map((l)=>({site:o,tags:`${a} ${u(l)}`,page:0,done:!1})):[],{site:o,tags:a,page:0,done:!1}]}),this.show(),this.paint.draw(),await this.pump()}catch(s){this.fail(t,s)}}async tally(t,e,n){let r=await Promise.allSettled(n.map(({site:i,tags:s})=>kf(i,s,this.signal)));if(t===this.gen)e.total=r.reduce((i,s)=>i+(s.status==="fulfilled"&&Number.isFinite(s.value)?s.value:0),0),this.show(),this.paint.draw()}fail(t,e,n=this.site){if(t!==this.gen||this.signal.aborted)return;this.board.error=Ym(n?.name??this.tabName,e),this.board.searching=!1,this.view.error=this.board.error,this.show(),this.paint.draw()}drop(t,e,n){for(let r of t.sources)if(r.site===e)r.done=!0;t.note=[t.note,Ym(e.name,n)].filter(Boolean).join(" · ")}wants(){let{perRow:t,rowsVis:e}=Jn(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+k1)*t}need(){let{perRow:t,rowsVis:e}=Jn(this.cols,this.rows);return(e+k1)*t}live(t){return this.boards.get(t.key)===t}page(t,e,n){let r=`${t.key}|${e}|${n}`,i=this.pages.get(r);if(!i)i=Lb(t,e,n,this.signal).then((s)=>this.borrow(t,s)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(t,e){let n=t===Qt?[]:e.filter((r)=>r.md5!=="");if(n.length>0)try{ec(n,await nc(n.map((r)=>r.md5),this.signal))}catch{}return e}staged(t){if(t===this.board)this.stageOf(t),this.paint.draw()}async round(t){t.stage="fetch",this.staged(t);let e=Y.flatMap((a)=>{let c=t.sources.find((u)=>u.site===a&&!u.done);return c?[c]:[]}),n=await Promise.all(e.map(async(a)=>{try{let c=await this.page(a.site,a.tags,a.page);return t.arrived.add(a.site.name),this.staged(t),{source:a,posts:c}}catch(c){if(t.sources.every((u)=>u.site===a.site)||this.signal.aborted)throw c;return this.drop(t,a.site,c),{source:a,posts:void 0}}}));if(!this.live(t))return;let r=[];for(let{source:a,posts:c}of n){if(!c)continue;a.page++,a.done=c.length<ur;let u=t.last.get(a);for(let l of c){let f=u&&Av(u.post,l)?u.set:`set:${a.site.key}:${l.id}`;u={post:l,set:f};let d=ke(a.site,l.id);if(t.seen.has(d))continue;t.seen.add(d);let h={site:a.site,post:l};if(this.eligible(h))t.kin.set(h,[f,...Tv(a.site,l)]),r.push(h);else t.checked++}if(u)t.last.set(a,u)}let i=this.dedupe(t,r),s=++t.rounds,o;if(this.view.order!=="fit")o=e.length>1?Rv(i):i;else{let a=rl(i,this.frame(),this.matched),c=a.slice(0,this.need()),u={done:0,total:c.length};if(t.ranking=u,this.staged(t),await this.looks(c,()=>{u.done++,this.staged(t)}),t.ranking=void 0,!this.live(t))return;o=[...rl(c,this.frame(),this.matched),...a.slice(c.length)]}t.stage="check",this.staged(t);for(let a of o)t.roundOf.set(a,s);t.queue.push(...o),this.ahead(t)}ahead(t){if(this.aheading||this.view.order!=="fit"||!this.live(t))return;let e=t.queue.slice(0,this.need()).filter((n)=>!this.looking.has(ke(n.site,n.post.id)));if(e.length===0)return;this.aheading=!0,this.looks(e).then(()=>{this.aheading=!1;for(let n of new Set(e.map((r)=>t.roundOf.get(r)??0)))this.resort(t,n);this.ahead(t)})}resort(t,e){let n=t.queue.flatMap((i,s)=>t.roundOf.get(i)===e?[s]:[]),r=rl(n.map((i)=>t.queue[i]),this.frame(),this.matched);n.forEach((i,s)=>{t.queue[i]=r[s]})}dedupe(t,e){let n=[];for(let r of e){let i=Pm(r.post),s=i.map((a)=>t.same.get(a)).find(Boolean);if(!s){for(let a of i)t.same.set(a,r);n.push(r);continue}if(t.checked++,v1(r.post)<=v1(s.post))continue;for(let a of[...i,...Pm(s.post)])t.same.set(a,r);let o=n.indexOf(s);if(o>=0){n[o]=r;continue}this.replace(t,s,r)}return n}replace(t,e,n){t.roundOf.set(n,t.roundOf.get(e)??0);let r=t.queue.indexOf(e);if(r>=0){t.queue[r]=n;return}for(let i of t.groups){let s=i.posts.indexOf(e);if(s>=0){i.posts[s]=n,this.posts.set(ke(n.site,n.post.id),n),this.thumbQueue.push(n),this.thumbs();return}}}async looks(t,e){let n=0;await Promise.all(Array.from({length:b1},async()=>{while(n<t.length)await this.look(t[n++]),e?.()}))}look(t){let e=ke(t.site,t.post.id),n=this.looking.get(e);if(!n)n=(async()=>{let r=this.previewPath(t),i=Ja(t.site,t.post);await this.kept.cached(i.site,r,i.url);let s=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(e,s),this.matched.set(t.post,s.match),s})().catch(()=>{return}),this.looking.set(e,n);return n}async pump(){let t=this.gen,e=this.board;if(this.pumping===t||e.sources.length===0)return;this.pumping=t;let n=[],r;try{e.searching=!0;while(t===this.gen){while(n.length<g1&&e.queue.length>0&&this.wants()){let o=e.queue.shift();n.push({pick:o,passed:this.vet(o)})}if(this.ahead(e),!r&&e.queue.length<g1&&e.sources.some((o)=>!o.done)&&this.wants()){let o=this.round(e).then(()=>{if(r===o)r=void 0});o.catch(()=>{}),r=o}let i=n.shift();if(!i){if(!r)break;await r,this.show(),this.paint.draw();continue}let s=await i.passed;if(t!==this.gen)return;if(e.checked++,s)this.admit(i.pick);this.show(),this.paint.draw()}if(t===this.gen)e.searching=!1,this.show(),this.paint.draw()}catch(i){this.fail(t,i)}finally{if(this.kept.save(),this.pumping===t)this.pumping=0}}eligible({site:t,post:e}){let n=fn(e);if(!Za(t,e,this.view.rating)||Va(e,this.view.block).length>0||!n)return!1;if(this.view.solo&&e.solo===!1)return!1;let{score:r,size:i,png:s}=this.view.narrow;if(Math.min(e.width,e.height)<i||t.scored&&e.score<r||s&&e.ext!=="png"||Pb(e,this.view.hide).length>0||this.view.hideTags.some((o)=>e.tags.includes(o)))return!1;return this.view.preset==="all"?["png","jpg","jpeg",""].includes(n.ext):["png",""].includes(e.ext)}async vet(t){let[e]=await Promise.all([this.passes(t),this.look(t)]);return e}async passes({site:t,post:e}){return this.view.preset==="all"||t.vouched||this.kept.transparent(t,e)}admit(t){let{site:e,post:n}=t,r=this.board,i=ke(e,n.id);this.posts.set(i,t);let s=r.kin.get(t)??[],o=this.looked.get(i),a=o&&{hash:o.hash,width:n.width,height:n.height},c=this.view.sets==="fold"?this.kindred(r,s,a):void 0;if(c){if(c.posts.push(t),this.register(r,c,s,a),c.open)this.thumbQueue.push(t),this.thumbs();return}let u={posts:[t],open:!1};r.groups.push(u),this.register(r,u,s,a),this.thumbQueue.push(t),this.thumbs()}kindred(t,e,n){for(let r of e){let i=t.kindred.get(r);if(i)return i}return n&&t.shapes.find((r)=>Hv(r.shape,n))?.group}register(t,e,n,r){for(let i of n)if(!t.kindred.has(i))t.kindred.set(i,e);if(r)t.shapes.push({shape:r,group:e})}holds(){this.view.held=p1(this.home,this.entry.name).map((t)=>{let e=this.heldFiles.get(t.from);return e?{...t,thumb:e}:t}),this.holdThumbs()}holdThumbs(){let t=me.cols*this.cell.w,e=me.rows*this.cell.h;if(t===0||e===0)return;for(let n of this.view.held.slice(0,pm(this.cols))){if(n.thumb||this.heldAsked.has(n.from))continue;this.heldAsked.add(n.from);let r=En(this.scratch,`held-${ZF(n.from)}-${t}x${e}.png`);this.renders.run({job:"thumb",from:n.from,to:r,width:t,height:e}).then(()=>{this.heldFiles.set(n.from,r),this.holds(),this.paint.draw()}).catch(()=>{})}}thumbs(){while(!this.signal.aborted&&this.thumbing<b1&&this.thumbQueue.length>0){let t=this.thumbQueue.shift();this.thumbing++,this.thumb(t).catch(()=>{this.thumbless.add(ke(t.site,t.post.id)),this.show(),this.paint.draw()}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(t){let{site:e,post:n}=t,r=gt.cols*this.cell.w,i=gt.rows*this.cell.h,s=Ja(e,n),o=En(Ke(e),"tile",`${E1(n.id,s.url)}-${r}x${i}.png`);if(!Ra(o)){let a=this.previewPath(t);if(await this.kept.cached(s.site,a,s.url),this.signal.aborted)return;await this.renders.run({job:"thumb",from:a,to:o,width:r,height:i})}this.thumbPath.set(ke(e,n.id),o),this.show(),this.paint.draw()}select(){let t=this.view,e=t.tiles[t.focus];if(this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,this.inform(),!e)return;if(this.current?.key===e.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(e),cC),this.paint.draw()}async load(t){let e=this.view,n=this.posts.get(t.key);if(!n)return;let r=new AbortController;if(this.fetch=r,this.kept.credit(n,r.signal),!fn(n.post))return;let{site:i}=n,s=this.board;try{await So(i,n.post,r.signal);let o=fn(n.post),a=this.origPath(i,t.id,o.ext);if(!Ra(a))e.fetching={id:t.key,got:0,size:0},this.paint.draw();let c=oi(i,n.post,o),u=await this.kept.cached(c.site,a,c.url,(d,h)=>{if(e.fetching?.id===t.key)e.fetching={id:t.key,got:d,size:h},this.paint.draw()});if(r.signal.aborted)return;if(e.fetching=void 0,s!==this.board)return;let l={site:i,id:t.id,key:t.key,path:a,ext:o.ext,size:u,using:"plain",failed:!1};e.preparing=t.key,this.paint.flush();let f=await this.render(l,"plain");if(r.signal.aborted||s!==this.board)return;if(f.clear===0&&Gs()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(e.preparing=void 0,e.cutting=t.key,this.paint.flush(),l.cut=await this.cutOut(i,t.id,a,r.signal),r.signal.aborted||s!==this.board)return;if(e.cutting=void 0,l.cut){e.preparing=t.key,this.paint.flush();let d=await this.render(l,"cut").catch(()=>{return});if(r.signal.aborted||s!==this.board)return;if(d&&Iu(d.clear))l.using="cut";else ul(l.cut,{force:!0}),l.cut=void 0,l.failed=!0}else l.failed=!0}if(this.current=l,e.tiles[e.focus]?.key===t.key)await this.present();this.preload()}catch(o){if(!r.signal.aborted&&!this.signal.aborted)e.error=Ym(i.name,o)}finally{if(e.fetching?.id===t.key)e.fetching=void 0;if(e.preparing===t.key)e.preparing=void 0;if(e.cutting===t.key)e.cutting=void 0;this.paint.draw()}}async cutOut(t,e,n,r){let i=En(Ke(t),"cut",`${e}.png`);if(Ra(i))return i;try{return DF(QF(i),{recursive:!0}),await ea(n,i,r),i}catch{ul(i,{force:!0});return}}swap(){let t=this.current;if(!t?.cut||this.view.shown?.id!==t.key)return;t.using=t.using==="cut"?"plain":"cut",this.reveal()}preload(){let t=this.view;if(t.mode!=="try")return;for(let e of[t.focus+this.direction,t.focus-this.direction]){let n=t.tiles[e],r=n&&this.posts.get(n.key);if(r)this.kept.credit(r,this.signal);if(this.prefetching>=aC||!r||!fn(r.post))continue;let{site:i,post:s}=r;this.prefetching++,So(i,s,this.signal).then(async()=>{let o=fn(s),a=this.origPath(i,s.id,o.ext),c=oi(i,s,o);return await this.kept.cached(c.site,a,c.url),this.render({site:i,id:s.id,key:n.key,path:a,ext:o.ext,size:0,using:"plain",failed:!1},"plain")}).catch(()=>{}).finally(()=>{this.prefetching--})}}async render(t,e){let n=this.cols*this.cell.w,r=this.rows*this.cell.h,i=Math.min(n,hC),s=Math.max(1,Math.round(r*i/n)),o={...this.view.tune},{coloring:a}=this.view,c=!M1(o,this.view.untuned),u=o.opacity!==this.view.untuned.opacity,l=c?`-${o.size}-${o.at}${u?`-${Math.round(o.opacity*100)}`:""}`:"",f=En(this.scratch,`${t.site.key}-${t.id}${e==="cut"?"c":""}${a==="original"?"o":""}-${i}x${s}${l}.png`),d=`${t.site.key}:${t.id}:${e}:${a}:${i}x${s}`,h=this.clarity.get(d);if(h&&Ra(f))return t.fill=h.fill,{clear:h.clear,path:f,opacity:h.opacity,touched:u};let m=await this.renders.run({job:"show",from:e==="cut"?t.cut:t.path,to:f,width:i,height:s,colors:this.entry,tone:this.tone,blur:this.blurring*i/Ff(n,r).width,coloring:a,...c?{tune:{size:o.size,at:o.at,...u?{opacity:o.opacity}:{}}}:{}});if(this.clarity.set(d,m),t.fill=m.fill,c)this.keepTuned(f);return{clear:m.clear,path:f,opacity:m.opacity,touched:u}}keepTuned(t){this.tunedFiles.push(t);while(this.tunedFiles.length>mC){let e=this.tunedFiles.findIndex((n)=>n!==this.view.shown?.path&&n!==t);if(e===-1)return;ul(this.tunedFiles.splice(e,1)[0],{force:!0})}}async present(){let t=this.current;if(!t)return;let e=t.using,{coloring:n}=this.view,r=this.view.tune.opacity,{clear:i,path:s,opacity:o,touched:a}=await this.render(t,e);if(this.current!==t||t.using!==e||this.view.coloring!==n)return;if(!a&&this.view.tune.opacity===r)this.view.untuned.opacity=o,this.view.tune.opacity=o;if(this.view.tuning&&t.fill)this.view.tuning.fill=t.fill;this.view.shown={id:t.key,clear:i,bytes:t.size,path:s,cut:t.cut?e==="cut"?"on":"off":t.failed?"failed":"none"}}reveal(){let t=this.view;if(this.presenting){this.again=!0;return}this.presenting=!0,t.preparing=this.current?.key,this.paint.flush(),this.present().catch((e)=>{t.error=e instanceof Error?e.message:String(e)}).finally(()=>{if(this.presenting=!1,this.again){this.again=!1,this.reveal();return}if(t.preparing===this.current?.key)t.preparing=void 0;this.paint.draw()})}async install(){let t=this.view,e=t.tiles[t.focus],n=this.current;if(!e||n?.key!==e.key||t.preparing!==void 0||t.shown?.id!==e.key)return;t.installing=e.key,t.error=void 0,this.paint.flush();let r=nC(t.tune,t.untuned),i=this.posts.get(n.key)?.post;try{await this.renders.run({job:"backdrop",from:n.using==="cut"?n.cut:n.path,source:n.path,home:this.home,colors:this.entry,tone:this.tone,origin:{site:n.site.key,id:n.id,ext:n.ext,from:`${n.site.name} ${n.id} ${n.site.pageUrl(n.id)}`,artist:i?.named.artist??[],source:vo(i?.source??"")},width:this.cols*this.cell.w,height:this.rows*this.cell.h,blur:this.blurring,coloring:t.coloring,...r?{tune:r,aligns:xi(L(this.home).terminals),user:JF()}:{}}),this.kept.owned(n.site,n.id,i?.owner??""),Re(this.home),this.holds();let{size:s,at:o,opacity:a}=t.tune,c=r?` · ${s==="fill"?"fill":`${s}%`} · ${Ut[o-1]} · ${a.toFixed(2)}`:"",u=i?.named.artist.length?`${i.named.artist.join(", ")} · `:"";t.saved={text:`Background · ${this.entry.name} ← ${u}${n.site.name} ${n.id}${c}`,key:e.key},t.installed.push(e.key),this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,t.mode="grid"}catch(s){t.error=s instanceof Error?s.message:String(s)}t.installing=void 0,this.paint.draw()}}async function O1(t,e,n){let r=new Jm(t,ue(t),e,e.booru??"",n);if(await r.run(),$i(process.env))process.stdout.write(ki(""));return{saved:r.saved,installs:r.installs}}async function x1(t){let e=J(),n=ue(e),r=_n(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Jm(e,n,r,r.booru??""),s=await i.run();if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
692
|
+
}`;async function Jv(){if(mp())return;if(process.platform==="darwin"){let[t="",e=""]=(await Nn("osascript",["-l","JavaScript","-e",FL])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!qv()){let e=Boolean(process.env.WAYLAND_DISPLAY)?(await Nn("wl-paste",["--list-types"])).stdout:(await Nn("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:e,picture:/^image\//m.test(e)}}return}function vl(t){return t.length>8&&/^(?:\/|~\/|file:|https?:)/.test(t)}var Ya=(t)=>Buffer.from(t).toString("base64"),dp=(t)=>Buffer.from(t,"base64");function _v(t,e){return e.find((n)=>t.includes(n))}class pp{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=Ya(Bv("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(t,e){this.send=t,this.deliver=e}start(){let t="";if(this.clipboard)t+="\x1B[?5522h";if(this.drops)t+=`\x1B]72;t=a;${lp.join(" ")}\x1B\\`;this.send(t)}stop(){this.send(`${this.clipboard?"\x1B[?5522l":""}${this.drops?"\x1B]72;t=A\x1B\\":""}`)}ask(){this.reading={mime:".",chunks:[],pw:"",listing:!0},this.send(`\x1B]5522;type=read:name=${Ya("ttheme")}:pw=${this.pw};${Ya(".")}\x1B\\`)}take(t){if(t.code==="5522")this.clip(t.meta,t.payload);else if(t.code==="72")this.drop(t.meta,t.payload)}clip(t,e){if(t.type!=="read")return;let n=t.status??"";if(n==="OK"){if(this.reading??={mime:".",chunks:[],pw:t.pw??"",listing:!0},t.pw)this.reading.pw=t.pw;return}let r=this.reading;if(!r)return;if(n==="DATA"){if(r.mime=t.mime?dp(t.mime).toString("utf8"):r.mime,e)r.chunks.push(dp(e));return}if(this.reading=void 0,n!=="DONE"){this.deliver({kind:"error",message:n==="EPERM"?"The clipboard read was not allowed":`The terminal answered ${n}`});return}let i=Buffer.concat(r.chunks);if(r.listing){let o=i.toString("utf8").split(/\s+/).filter(Boolean),s=_v(o,[...fp,...NL]);if(!s){this.deliver({kind:"text",text:""});return}let a=r.pw||this.pw,c=r.pw?"Paste event":"ttheme";this.reading={mime:s,chunks:[],pw:a,listing:!1},this.send(`\x1B]5522;type=read:name=${Ya(c)}:pw=${a};${Ya(s)}\x1B\\`);return}this.deliver(r.mime.startsWith("image/")?{kind:"bytes",bytes:new Uint8Array(i),source:"clipboard"}:{kind:"text",text:i.toString("utf8")})}drop(t,e){let n=t.t??"";if(n==="m"){if(t.x==="-1"){this.offered=[];return}if(e){this.offered=e.split(" ").filter(Boolean);let a=lp.filter((c)=>this.offered.includes(c));this.send(`\x1B]72;t=m:o=${a.length>0?1:0};${a.join(" ")}\x1B\\`)}return}if(n==="M"){let a=e?e.split(" ").filter(Boolean):this.offered,c=_v(a,lp);if(!c){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:a,index:a.indexOf(c)+1,chunks:[]},this.send(`\x1B]72;t=r:x=${this.dropping.index}\x1B\\`);return}let r=this.dropping;if(!r)return;if(n==="R"){this.dropping=void 0,this.send("\x1B]72;t=r:o=0\x1B\\"),this.deliver({kind:"error",message:`The drop failed: ${e.split(":")[0]||"unknown error"}`});return}if(n!=="r"&&n!=="")return;if(e)r.chunks.push(dp(e));if(t.m==="1"||e)return;this.dropping=void 0;let i=Buffer.concat(r.chunks),o=r.mimes[r.index-1]??"",s;if(o.startsWith("image/"))s={kind:"bytes",bytes:new Uint8Array(i),source:"drop"};else{let a=i.toString("utf8"),c=o==="text/uri-list"?ks(a).find((u)=>SL(u)):void 0;s=c?{kind:"bytes",bytes:new Uint8Array(yl(c)),source:c}:{kind:"text",text:a}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(s)}}var gp=5,jL=6,Vv=0.05,_L=[1,2,3,4,5,6,9,10,11,12,13,14],Zv=(t,e)=>(e-t+360)%360<=180?1:-1;function An(t,e,n){let r=e*Math.cos(n*Math.PI/180),i=e*Math.sin(n*Math.PI/180),o=[t+0.3963377774*r+0.2158037573*i,t-0.1055613458*r-0.0638541728*i,t-0.0894841775*r-1.291485548*i].map((l)=>l**3),[s,a,c]=o,u=[4.0767416621*s-3.3077115913*a+0.2309699292*c,-1.2684380046*s+2.6097574011*a-0.3413193965*c,-0.0041960863*s-0.7034186147*a+1.707614701*c];if(u.some((l)=>l<-0.0001||l>1.0001))return;return u.map((l)=>{let d=Math.min(1,Math.max(0,l));return Math.round(255*(d<=0.0031308?12.92*d:1.055*d**0.4166666666666667-0.055))})}function ys(t,e,n){if(An(t,n,e)!==void 0)return n;let r=0,i=n;for(let o=0;o<24;o++){let s=(r+i)/2;if(An(t,s,e)===void 0)i=s;else r=s}return r}function ze(t,e,n){return`#${(An(t,ys(t,n,e),n)??[0,0,0]).map((i)=>i.toString(16).padStart(2,"0")).join("")}`}function BL(t,e){let{l:n,c:r}=Mt(t);return ze(n,r,(e+360)%360)}function GL(t,e,n){let{l:r,c:i,h:o}=Mt(t),s=St(e)<0.18,a=(l)=>ze(s?r+(1-r)*l:r*(1-l),i,o);if($t(a(1),e)<n+Vv)return a(1);let c=0,u=1;for(let l=0;l<30;l++){let d=(c+u)/2;if($t(a(d),e)>=n+Vv)u=d;else c=d}return a(u)}function UL(t,e){let{l:n,c:r,h:i}=Mt(t),o=0,s=n;for(let a=0;a<30;a++){let c=(o+s)/2;if(St(ze(c,r,i))<=e-0.005)o=c;else s=c}return ze(o,r,i)}function WL(t,e,n){let r=ke[e],[i,o]=[Mt(t[e]),Mt(t[e+8])],s=(l,d)=>n.has(l)?[d]:Array.from({length:2*r.width+1},(f,h)=>(r.center-r.width+h+360)%360),a=(l,d,f)=>hr.every((h)=>{let m=(l>8?8:0)+h;if(m===l)return!0;let p=Mt(t[m]);return p.c<li||ye(p.h,d)>=mo+1||Math.abs(p.l-f)>=po}),c,u=Number.POSITIVE_INFINITY;for(let l of s(e,i.h)){if(!n.has(e)&&!a(e,l,i.l))continue;for(let d of s(e+8,o.h)){if(ye(l,d)>Ye-gp||!n.has(e+8)&&!a(e+8,d,o.l))continue;let f=ye(l,i.h)+ye(d,o.h);if(f<u)u=f,c=[l,d]}}return c}class Qv{theme;moves=[];constructor(t){this.theme={...t,ansi:[...t.ansi]}}set(t,e,n){let r=this.get(t);if(n===r)return;if(this.moves.push({slot:t,rule:e,from:r,to:n}),t==="foreground")this.theme.foreground=n;else if(t==="selection")this.theme.selectionBackground=n;else this.theme.ansi[Number(t.slice(4))]=n}get(t){if(t==="foreground")return this.theme.foreground;if(t==="selection")return this.theme.selectionBackground;return this.theme.ansi[Number(t.slice(4))]}rehue(t,e,n){this.set(`ansi${t}`,e,BL(this.theme.ansi[t],n))}roles(){let t=new Set(this.theme.signatureSlots);for(let{slot:n,hue:r}of mr(this.theme)){let i=ke[mn(n)];this.rehue(n,"ansi-role",i.center+Zv(i.center,r)*(i.width-gp))}for(let{normal:n,gap:r}of Gn(this.theme)){if(r<=Ye)continue;let[i,o]=t.has(`ansi${n+8}`)?[n+8,n]:[n,n+8],s=Mt(this.theme.ansi[i]).h,a=Mt(this.theme.ansi[o]).h;this.rehue(o,"bright-follows",s+Zv(s,a)*(Ye-gp))}let e=go(this.theme);for(let[n,r]of Un(this.theme)){let i=mn(e.has(r)?n:r),o=WL(this.theme.ansi,i,e);if(o===void 0)continue;this.rehue(i,"distinct",o[0]),this.rehue(i+8,"distinct",o[1])}}readability(){let t=new Set(this.theme.waive),{background:e}=this.theme,n=(r,i,o,s=e)=>{if(t.has(r))return;for(let a of i)if($t(this.get(a),s)<o)this.set(a,r,GL(this.get(a),s,o))};if(n("foreground",["foreground"],7),n("accents",_L.map((r)=>`ansi${r}`),3),n("light-ansi",["ansi7","ansi15"],7),n("ansi8-visible",["ansi8"],1.6),!t.has("ansi0-dark")&&St(this.get("ansi0"))>0.15)this.set("ansi0","ansi0-dark",UL(this.get("ansi0"),0.15));n("selection",["selection"],7,this.theme.foreground)}net(){return[...new Set(this.moves.map((t)=>t.slot))].flatMap((t)=>{let e=this.moves.filter((i)=>i.slot===t),n=e[0].from,r=this.get(t);return n===r?[]:[{slot:t,rule:[...new Set(e.map((i)=>i.rule))].join(", "),from:n,to:r}]})}}function Sl(t){let e=new Qv(t);for(let n=0;n<jL;n++)if(e.readability(),e.roles(),Wn(e.theme).length===0)break;return{theme:e.theme,moves:e.net(),left:Wn(e.theme)}}var Ji=[{key:"background",label:"Background",min:0,max:0.5,step:0.01,digits:2},{key:"foreground",label:"Foreground",min:0.5,max:1,step:0.01,digits:2},{key:"hue",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0},{key:"tint",label:"Tint",min:0,max:0.1,step:0.005,digits:3},{key:"lightness",label:"Accent lightness",min:0.4,max:0.95,step:0.01,digits:2},{key:"chroma",label:"Accent chroma",min:0,max:0.3,step:0.005,digits:3},{key:"brights",label:"Brights",min:-0.2,max:0.2,step:0.01,digits:2}],Ja={background:0.21,foreground:0.88,hue:265,tint:0.02,lightness:0.72,chroma:0.12,brights:0.06},Xv=(t,e,n)=>Math.min(n,Math.max(e,t));function bp(t,e,n){let r=t[e.key]+e.step*n,i=e.wraps?(r%e.max+e.max)%e.max:Xv(r,e.min,e.max);return{...t,[e.key]:Math.round(i*1e4)/1e4}}function ni(t){let e=(r,i,o)=>ze(Xv(r,0,1),i,o),n=Array.from({length:16},()=>"#000000");n[0]=e(t.background+0.06,t.tint,t.hue),n[8]=e(t.background+0.25,t.tint,t.hue),n[7]=e(t.foreground-0.06,t.tint/2,t.hue),n[15]=e(t.foreground+0.06,t.tint/2,t.hue);for(let r of hr){let i=ke[r].center;n[r]=e(t.lightness,t.chroma,i),n[r+8]=e(t.lightness+t.brights,t.chroma,i)}return{background:e(t.background,t.tint,t.hue),foreground:e(t.foreground,t.tint/2,t.hue),cursor:e(t.lightness+t.brights,Math.max(t.chroma,0.08),t.hue),selection:e(t.background+0.1,t.tint*2,t.hue),ansi:n}}var Tn=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],A=["Background","Foreground","Cursor","Selection"],un=["Black","Red","Green","Yellow","Blue","Magenta","Cyan","White"],KL=["Behind every cell","Plain text","The cursor block","Selected text","Text on colored bars, dark shades","Errors, deleted lines, failed tests","Success, added lines, prompts","Warnings, commit hashes, skipped tests","Directories, info, keywords","Keywords, branches, pictures in ls","Links, diff hunks, types","Light shades, text in some programs","Comments, muted text, suggestions"],ar=A.length+un.length,cn=[{key:"l",label:"Lightness",min:0,max:1,step:0.01,digits:2},{key:"c",label:"Chroma",min:0,max:0.37,step:0.005,digits:3},{key:"h",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0}],tS=5,zL=5,Qt=cn.length,vs=["this","pair","normals","brights","accents"],El=[1,2,3,4,5,6,9,10,11,12,13,14],eS=El.filter((t)=>t<8).map((t)=>A.length+t),nS=El.filter((t)=>t>8).map((t)=>A.length+t);function wp(t,e){let n=e-A.length;if(n<0||t==="this")return[e];if(t==="pair")return[A.length+n%8,A.length+8+n%8];let r=t==="normals"?eS:t==="brights"?nS:[...eS,...nS];return r.includes(e)?r:[e]}function DL(){return Array.from({length:ar},(t,e)=>e<A.length?[e]:[e,e+8]).flat()}function qL(t){let e=t.trim();return/^https?:\/\/\S+$/i.test(e)||ks(e).length>0}function an(t){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi]}function Ut(t){let[e,n,r,i,...o]=t;return{background:e,foreground:n,cursor:r,selection:i,ansi:o}}function He(t){if(t<A.length)return{name:A[t],about:Tn[t]};let e=t-A.length,n=un[e%8];return e<8?{name:n,about:`ANSI ${e}`}:{name:`Bright ${n.toLowerCase()}`,about:`ANSI ${e}`}}function sS(t){let e=t-A.length;if(e>=9&&e<=15)return`Bold or bright ${un[e-8].toLowerCase()} text`;return KL[t]}var Vi=(t,e,n)=>Math.min(n,Math.max(e,t));function rS(t){return t.length===1?t.toLowerCase():t}function YL(t){return Vi(Math.round(t),0,255).toString(16).padStart(2,"0")}function iS(t){let e=t.trim().toLowerCase(),n=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/.exec(e);if(n){let o=n[1];return`#${o.length===3?[...o].map((s)=>s+s).join(""):o}`}let r=/^rgb\(\s*(\d+)[\s,]+(\d+)[\s,]+(\d+)\s*\)$/.exec(e);if(r)return`#${r.slice(1,4).map((o)=>YL(Number(o))).join("")}`;let i=/^oklch\(\s*([\d.]+)(%?)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:deg|°)?\s*\)$/.exec(e);if(i){let o=Number(i[1])/(i[2]?100:1);return ze(Vi(o,0,1),Number(i[3]),Number(i[4])%360)}return}function Zi(t){let e=ve.find((n)=>n.rule===t);return e?.min??e?.max??0}function cr(t,e,n){let r=Ut(t);return{name:"draft",background:r.background,foreground:r.foreground,selectionBackground:r.selection,ansi:r.ansi,waive:n,signatureSlots:e}}function JL(t,e){let n=t-A.length,r=t<=1?"foreground":t===3?"selection":n===7||n===15?"light-ansi":n===8?"ansi8-visible":El.includes(n)?"accents":void 0;return{against:t===0||t===3?1:0,floor:r===void 0||e.includes(r)?void 0:Zi(r)}}function vp(t,e,n,r){let i=cr(t,e,n),{background:o,foreground:s,selection:a,ansi:c}=Ut(t),u=(l,d,f)=>$t(d,f)<Zi(r)?[l]:[];if(r==="foreground")return $t(s,o)<Zi(r)?[1,0]:[];if(r==="selection")return $t(s,a)<Zi(r)?[3,1]:[];if(r==="accents")return El.flatMap((l)=>u(A.length+l,c[l],o));if(r==="light-ansi")return[7,15].flatMap((l)=>u(A.length+l,c[l],o));if(r==="ansi8-visible")return u(A.length+8,c[8],o);if(r==="ansi0-dark")return St(c[0])>Zi(r)?[A.length]:[];if(r==="ansi-role")return mr(i).map(({slot:l})=>A.length+l);if(r==="bright-follows")return Gn(i).filter(({gap:l})=>l>Ye).flatMap(({normal:l})=>[A.length+l,A.length+l+8]);if(r==="distinct")return Un(i).flatMap(([l,d])=>[A.length+l,A.length+d]);return[]}function Sp(t,e,n){return new Set(Tn.flatMap((r,i)=>Ep(t,e,n,i).some((o)=>o.ok===!1)?[i]:[]))}function sr(t,e,n,r,i){let o=$t(t,e),s=Zi(n);if(i.includes(n))return{ok:void 0,text:`${r} ${o.toFixed(2)}:1 · waived`};return{ok:o>=s,text:`${r} ${o.toFixed(2)}:1 · ≥ ${s}`}}function Ep(t,e,n,r){let i=Ut(t),o=cr(t,e,n);if(r===0){let $=[1,2,3,4,5,6,9,10,11,12,13,14].reduce((k,v)=>$t(i.ansi[k],i.background)<=$t(i.ansi[v],i.background)?k:v);return[sr(i.foreground,i.background,"foreground","Foreground on it",n),sr(i.ansi[$],i.background,"accents",`Weakest, ANSI ${$},`,n),sr(i.ansi[8],i.background,"ansi8-visible","ANSI 8 on it",n)]}if(r===1)return[sr(i.foreground,i.background,"foreground","On background",n),sr(i.foreground,i.selection,"selection","On the selection",n)];if(r===2)return[{ok:void 0,text:`On background ${$t(i.cursor,i.background).toFixed(2)}:1`}];if(r===3)return[sr(i.foreground,i.selection,"selection","Foreground on it",n)];let s=r-A.length,a=i.ansi[s];if(s===0){let b=St(a),$=Zi("ansi0-dark");return[n.includes("ansi0-dark")?{ok:void 0,text:`Luminance ${b.toFixed(3)} · waived`}:{ok:b<=$,text:`Luminance ${b.toFixed(3)} · ≤ ${$}`}]}if(s===7||s===15)return[sr(a,i.background,"light-ansi","On background",n)];if(s===8)return[sr(a,i.background,"ansi8-visible","On background",n)];let c=[sr(a,i.background,"accents","On background",n)],u=Mt(a),l=mn(s),d=ke[l],f=`${d.name} ${d.center}±${d.width}°`;if(u.c<li)c.push({ok:void 0,text:"Too grey to have a hue"});else if(go(o).has(s))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · a signature, free of ${f}`});else if(n.includes("ansi-role"))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · ${f} waived`});else{let b=ye(u.h,d.center)-d.width;c.push(b>0?{ok:!1,text:`Hue ${u.h.toFixed(0)}° · ${b.toFixed(0)}° outside ${f}`}:{ok:!0,text:`Hue ${u.h.toFixed(0)}° · in ${f}`})}let h=s<8?s+8:s-8,m=Gn(o).find((b)=>b.normal===l);if(m)c.push(n.includes("bright-follows")?{ok:void 0,text:`${m.gap.toFixed(0)}° from ANSI ${h} · waived`}:{ok:m.gap<=Ye,text:`${m.gap.toFixed(0)}° from ANSI ${h} · ≤ ${Ye}°`});let p=Un(o).flatMap(([b,$])=>b===s?[$]:$===s?[b]:[]);if(p.length>0&&!n.includes("distinct"))c.push({ok:!1,text:`Reads as ANSI ${p.join(", ")} · within ${mo}° and ${po} lightness`});return c}function Mp(t,e,n){let r=pn(cr(t,e,n));return ve.map((i,o)=>{let s=r[o],a=n.includes(i.rule),c=a||Number.isNaN(s)?void 0:(i.min===void 0||s>=i.min)&&(i.max===void 0||s<=i.max);return{ok:c,label:i.label,value:Number.isNaN(s)?"—":Number.isInteger(s)?String(s):s.toFixed(2),bound:a?"waived":i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",slots:c===!1?vp(t,e,n,i.rule):[]}})}var VL=new Set(["reset","reset-all","hex","paste","fix","open","tune","sig","follow"]),aS=cn[1].max;function $p(t){let[e,n,r]=nt(t);return e===n&&n===r}function kp(t,e){return Math.floor(ys(t,e,aS)*1e4)/1e4}function yp(t,e){return{l:e.l-t.l,c:e.c-t.c,h:((e.h-t.h)%360+540)%360-180}}function oS(t,e){let n=t.wraps?t.max-t.step:t.max;return Math.min(n,Math.round((t.min+(t.max-t.min)*e)/t.step)*t.step)}class xp{mode;seeds=Ja;field=0;list;lch;start;original;signature;row=0;col=0;channel=0;scope="this";view="slot";scene=0;typing;overlay;quitting=!1;compare=!1;notice;filter="";pick=0;result;wants;pictures;inspect=!1;spot;format="hex";pic=!0;menu;entry=0;changedOnly=!1;where=!1;size;copied;startPictures;options;fresh;tone;startSignature;seeded=!1;tuneFrom;holds=new Map;clip;history=[];future=[];lastEdit;links=new Map;unlinked=new Set;offsets=new Map;constructor(t){this.options=t,this.tone=t.tone===!0,this.fresh=t.colors===void 0,this.mode=this.fresh?"seeds":"list",this.list=an(t.colors??ni(this.seeds)),this.lch=this.lchs(),this.start=[...this.list],this.original=t.original?an(t.original):[...this.list],this.signature=[...t.signature],this.startSignature=[...t.signature],this.pictures=t.pictures??0,this.startPictures=this.pictures,this.chain(this.original)}chain(t){this.links=new Map,this.unlinked=new Set,this.offsets=new Map;for(let e=0;e<8;e++){let n=A.length+e,r=n+8,i=this.lchOf(t[n]),o=this.lchOf(t[r]);if(i.c>=li&&o.c>=li&&ye(i.h,o.h)<=3)this.links.set(r,n),this.offsets.set(r,yp(i,o))}}pair(t){if(t<A.length)return;let e=A.length+(t-A.length)%8,n=e+8;return{normal:e,bright:n,on:this.linkOf(n)!==void 0,lift:this.lch[n].l-this.lch[e].l}}linkOf(t){let e=this.links.get(t);return e!==void 0&&!this.unlinked.has(t)?e:void 0}changed(t){return this.list[t]!==this.original[t]}visible(t){return!this.changedOnly||this.changed(t)}changes(){return this.list.filter((t,e)=>this.changed(e)).length}slotAt(t,e){return t<A.length?t:t+(e===1?8:0)}get added(){return Math.max(0,this.pictures-this.startPictures)}found(t){this.pictures=t.count,this.notice=t.note}get waive(){return this.options.waive??[]}get held(){return this.holds.get(this.slot())}colors(){return Ut(this.list)}edited(){return{colors:this.colors(),signature:[...this.signature]}}shown(){return this.compare?this.start:this.list}slot(){return this.row<A.length?this.row:this.row+(this.col===1?8:0)}dirty(){return this.seeded||this.pictures!==this.startPictures||this.list.some((t,e)=>t!==this.start[e])||this.signature.join()!==this.startSignature.join()}misses(){return Sp(this.list,this.signature,this.waive)}failing(){return Wn(cr(this.list,this.signature,this.waive))}choices(){let t=this.filter.toLowerCase();return(this.options.palettes??[]).filter((e)=>e.name.toLowerCase().includes(t))}paste(t){if(this.notice=void 0,this.overlay==="open"){this.filter+=t.replace(/\s+/g,"").toLowerCase(),this.pick=0;return}if(this.overlay)return;if(!this.tone&&t.trim()===""){this.findPictures({clipboard:!0});return}if(!this.tone&&qL(t)){this.findPictures({paste:t});return}if(this.mode==="seeds")return;let e=this.options.decode?.(t);if(e){this.remember("open"),this.list=an(e),this.lch=this.lchs(),this.chain(this.list),this.notice="Took the colors of the share code";return}let n=iS(t);if(!n){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(n,"paste")}press(t){if(this.notice=void 0,t==="ctrl-c"){this.result="cancelled";return}if(this.quitting){if(this.quitting=!1,t==="y"||t==="Y")this.result="cancelled";return}if(this.typing!==void 0){this.type(t);return}if(this.overlay==="keys"){this.overlay=void 0;return}if(this.overlay==="open"){this.openKey(t);return}if(this.menu){this.menuKey(t);return}if(t==="?"){this.overlay="keys";return}if(this.inspect&&this.mode==="list"&&this.inspectKey(t))return;if(this.tone&&(t==="ctrl-v"||t==="alt-v"||t==="p"))return;if(t==="ctrl-v"||t==="alt-v"){this.findPictures({clipboard:!0});return}if(t==="p"&&this.mode!=="tune"){this.findPictures();return}if(t===" "&&this.mode!=="seeds"){this.compare=!this.compare;return}if(this.compare&&t==="esc"){this.compare=!1;return}if(t==="g"&&this.mode!=="seeds"){this.view=this.view==="slot"?"relations":"slot";return}let e=t==="j"?"down":t==="k"?"up":t;if(this.mode==="seeds")this.seedKey(e);else if(this.mode==="tune")this.tuneKey(e);else this.listKey(e)}select(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return;if(this.mode==="tune"){if(t===this.slot())return;this.tuneKey("enter")}this.notice=void 0,this.seat(t),this.lastEdit=void 0}seat(t){if(this.row=t<A.length?t:A.length+(t-A.length)%8,t>=A.length)this.col=t-A.length>=8?1:0}grip(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return!1;if(this.notice=void 0,this.mode==="list")this.tune();return this.channel=t,!0}slide(t,e){if(!this.grip(t))return;let n=Math.min(1,Math.max(0,e));if(t===Qt){this.reach(21**n);return}this.put(oS(cn[t],n))}sow(t,e){let n=Ji[t];if(this.mode!=="seeds"||this.overlay||this.quitting||!n)return;this.notice=void 0,this.field=t;let r=Math.min(1,Math.max(0,e));this.seeds=bp({...this.seeds,[n.key]:oS(n,r)},n,0),this.list=an(ni(this.seeds)),this.lch=this.lchs()}scroll(t){let e=(n,r)=>Math.min(r,Math.max(0,n+t));if(this.overlay==="open")this.pick=e(this.pick,Math.max(0,this.choices().length-1));else if(this.overlay||this.quitting||this.typing!==void 0)return;else if(this.mode==="seeds")this.field=e(this.field,Ji.length-1);else if(this.mode==="tune")this.channel=0,this.step(-t);else this.row=e(this.row,ar-1),this.lastEdit=void 0}lchOf(t){let e=Mt(t);return $p(t)?{...e,h:this.neutralHue()}:e}lchs(){return this.list.map((t)=>this.lchOf(t))}neutralHue(){let t=[0,1,3,2].map((e)=>this.list[e]).find((e)=>!$p(e));return t?Mt(t).h:Ja.hue}seedKey(t){let e=Ji.length;if(t==="up"||t==="down")this.field=(this.field+(t==="up"?e-1:1))%e;else if(t==="home"||t==="end")this.field=t==="home"?0:e-1;else if(t==="left"||t==="right"||t==="shift-left"||t==="shift-right"){let n=Ji[this.field],r=(t.endsWith("left")?-1:1)*(t.startsWith("shift")?n.wraps?10:tS:1);this.seeds=bp(this.seeds,n,r),this.list=an(ni(this.seeds)),this.lch=this.lchs()}else if(t==="enter")this.leaveSeeds();else if(t==="o")this.openPalettes();else if(t==="esc")this.leave()}leaveSeeds(){this.start=[...this.list],this.original=[...this.list],this.chain(this.original),this.seeded=!0,this.mode="list"}leave(){if(this.dirty())this.quitting=!0;else this.result="cancelled"}findPictures(t){if(!this.options.find){this.notice="Pictures need Ghostty, iTerm2 or kitty, outside tmux";return}this.wants=t?{start:t}:{}}openPalettes(){if((this.options.palettes??[]).length>0)this.overlay="open",this.pick=0;else this.notice="No other palettes to take colors from"}listKey(t){if(t==="up"||t==="down"){let e=t==="up"?-1:1;this.land(this.row+e,e),this.lastEdit=void 0}else if(t==="home"||t==="end")this.land(t==="home"?0:ar-1,t==="home"?1:-1);else if(t==="pgup"||t==="pgdn")this.land(t==="pgup"?0:A.length,1);else if(t==="left"||t==="right"){let e=t==="left"?0:1;if(this.row>=A.length&&this.visible(this.slotAt(this.row,e)))this.col=e,this.lastEdit=void 0}else if(this.builderKey(t))return;else if(t==="shift-left"||t==="shift-right")this.scene+=t==="shift-left"?-1:1;else if(t==="n"||t==="N")this.nextMiss(t==="n"?1:-1);else if(t==="enter"||t==="tab")this.tune();else if(t==="#")this.typing="";else if(t==="c")this.clip=this.list[this.slot()],this.notice=`Copied ${this.clip}`;else if(t==="v")if(this.clip)this.set(this.slot(),this.clip,"paste");else this.notice="Nothing copied yet — c copies a slot";else if(t==="r")this.set(this.slot(),this.original[this.slot()],"reset");else if(t==="R")this.remember("reset-all"),this.list=[...this.original],this.lch=this.lchs();else if(t==="=")this.follow();else if(t==="*"&&!this.tone)this.mark();else if(t==="f")this.fix();else if(t==="o"&&!this.tone)this.openPalettes();else if(t==="u")this.undo();else if(t==="ctrl-r")this.redo();else if(t==="s"||t==="ctrl-s")this.save();else if(t==="esc")this.leave()}viewport(t,e){this.size={cols:t,rows:e}}layout(){return this.size?Da(this.size.cols,this.size.rows,this.scene):void 0}get roomy(){return this.layout()!==void 0}reseat(){if(!this.visible(this.slot()))this.land(this.row,1)}rowShown(t){return this.visible(this.slotAt(t,0))||t>=A.length&&this.visible(this.slotAt(t,1))}land(t,e){for(let n=0;n<ar;n++){let r=((t+e*n)%ar+ar)%ar;if(this.rowShown(r)){if(this.row=r,r>=A.length&&!this.visible(this.slotAt(r,this.col)))this.col=1-this.col;return}}}builderKey(t){if(["i","m","w","x","I"].includes(t)&&!this.roomy)return this.notice="The builder needs a window of at least 96×28",!0;if(t==="i")this.startInspect();else if(t==="l")this.linkKey();else if(t==="m")this.changedOnly=!this.changedOnly,this.reseat(),this.notice=this.changedOnly?this.changes()>0?void 0:"Nothing changed yet":void 0;else if(t==="b")this.pic=!this.pic;else if(t==="w")this.where=!this.where;else if(t==="x"&&this.options.exports)this.menu="export",this.entry=0;else if(t==="I")this.menu="import",this.entry=0;else return!1;return!0}menuKey(t){let e=this.menu==="export"?3:2;if(t==="esc")this.menu=void 0;else if(t==="up"||t==="down"||t==="k"||t==="j")this.entry=(this.entry+(t==="up"||t==="k"?e-1:1))%e;else if(t==="enter")this.choose(this.entry)}choose(t){let e=this.menu;if(this.menu=void 0,e==="import"){if(t===0)this.openPalettes();else this.notice=this.options.decode?"Paste a tt1: share code into this window":"Share codes are not read here";return}let n=this.options.exports;if(e!=="export"||!n)return;try{let r=this.edited(),i=n.code(r);this.copied=t===0?i:t===1?`${n.command} ${i}`:n.toml(r),this.notice=`Copied ${t===0?"the share code":t===1?"the add command":"the palette file"} — paste it where you need it`}catch(r){this.notice=r instanceof Error?r.message:String(r)}}openMenu(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return;this.menu=this.menu===t?void 0:t,this.entry=0}startInspect(){let t=this.layout();if(!t){this.notice="The builder needs a window of at least 96×28";return}this.inspect=!0,this.spot=Tv(t,this.slot())}toggleInspect(){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return;if(this.inspect)this.inspect=!1,this.spot=void 0;else this.startInspect()}inspectKey(t){let e=this.layout();if(!e)return this.inspect=!1,!1;let r={left:"left",right:"right",up:"up",k:"up",down:"down",j:"down",tab:"next","shift-tab":"previous"}[t];if(t==="i"||t==="esc")this.inspect=!1,this.spot=void 0;else if(r)this.spot=Hv(e,bl(e,this.spot),r);else if(t==="shift-left"||t==="shift-right")this.scene+=t==="shift-left"?-1:1,this.spot=void 0;else if(t==="enter")this.jump();else return!1;return!0}point(t){if(this.mode!=="seeds"&&!this.overlay&&!this.quitting&&this.typing===void 0&&this.layout())this.inspect=!0,this.spot=t}slotsHere(){let t=this.layout();return t&&this.spot?Cv(t,this.spot):void 0}jump(){let t=this.slotsHere();if(!t)return;let e=t.ground!==0?t.ground:t.text;this.inspect=!1,this.spot=void 0,this.show(e),this.select(e)}show(t){if(!this.visible(t))this.changedOnly=!1}openSlot(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return;let e=this.mode==="tune"&&t===this.slot();if(this.mode==="tune")this.tuneKey("enter");if(e)return;if(this.show(t),this.select(t),this.mode==="list")this.tune()}dismiss(){if(this.mode!=="tune"||this.overlay||this.quitting)return;this.typing=void 0,this.tuneKey("enter")}plane(t,e){if(!this.grip(0))return;this.channel=0,this.put(t),this.channel=1,this.put(e)}linkKey(){let t=this.slot();if(t<A.length){this.notice="l links a bright to its normal — pick an ANSI row";return}let e=A.length+(t-A.length)%8,n=e+8,r=`${He(n).name} and ${He(e).name.toLowerCase()}`;if(this.mode!=="tune")this.remember("link");if(this.linkOf(n)!==void 0){this.unlinked.add(n),this.notice=`${r} move apart`;return}this.links.set(n,e),this.unlinked.delete(n),this.offsets.set(n,yp(this.lch[e],this.lch[n])),this.notice=`${r} move together`}nextMiss(t){let e=DL(),n=this.misses();if(n.size===0){this.notice="The gate passes";return}let r=e.indexOf(this.slot());for(let i=1;i<=e.length;i++){let o=e[((r+t*i)%e.length+e.length)%e.length];if(n.has(o)){this.seat(o);return}}}tune(){this.remember("tune"),this.tuneFrom={list:[...this.list],lch:[...this.lch]},this.holds=new Map,this.hold(),this.mode="tune"}hold(){for(let t of this.scoped())if(!this.holds.has(t))this.holds.set(t,this.lch[t].c)}scoped(){return wp(this.scope,this.slot())}tuneKey(t){let e=this.channel===Qt;if(t==="tab"||t==="shift-tab")this.channel=e?0:Qt;else if(t==="up"||t==="down"||t==="pgup"||t==="pgdn")this.channel=0,this.step((t==="up"||t==="pgup"?1:-1)*(t.startsWith("pg")?tS:1));else if(t==="left"||t==="right"){let n=t==="left"?-1:1;if(e)this.reach(this.ratio()+n*0.1);else this.channel=1,this.step(n)}else if(t==="shift-left"||t==="shift-right"){let n=t==="shift-left"?-1:1;if(e)this.reach(this.ratio()+n*0.5);else this.channel=2,this.step(n*zL)}else if((t===","||t===".")&&!e)this.channel=2,this.step(t===","?-1:1);else if(t==="home"||t==="end")if(e)this.reach(t==="home"?this.partner().floor??1:21);else{let n=cn[this.channel];this.put(t==="home"?n.min:n.wraps?n.max-n.step:n.max)}else if(/^[0-9]$/.test(t))if(e){if(t!=="0")this.reach(Number(t))}else{let n=cn[this.channel];this.put(n.min+(n.max-n.min)*Number(t)/10)}else if(t==="a")this.rescope();else if(t==="#")this.typing="";else if(t==="l")this.linkKey();else if(t==="s"||t==="ctrl-s")this.tuneKey("enter"),this.save();else if(t==="enter"){if(this.tuneFrom&&this.list.every((n,r)=>n===this.tuneFrom?.list[r]))this.history.pop();this.endTune()}else if(t==="esc"){if(this.tuneFrom)this.list=[...this.tuneFrom.list],this.lch=[...this.tuneFrom.lch],this.history.pop();this.endTune()}}rescope(){if(this.slot()<A.length){this.notice="A base color moves alone";return}let t=vs.indexOf(this.scope);for(let e=1;e<=vs.length;e++){let n=vs[(t+e)%vs.length];if(n==="this"||wp(n,this.slot()).length>1){this.scopeTo(n);return}}}scopeTo(t){if(this.mode!=="tune"||this.typing!==void 0||this.quitting||this.slot()<A.length)return;if(t!=="this"&&wp(t,this.slot()).length<=1)return;this.scope=t,this.hold();let e=this.scoped().length;this.notice=e>1?`${e} slots move together`:"This slot moves alone"}endTune(){this.tuneFrom=void 0,this.holds=new Map,this.mode="list"}partner(){return JL(this.slot(),this.waive)}ratio(){return $t(this.list[this.slot()],this.list[this.partner().against])}origin(){let t=this.slot(),e=this.original[t];if(e===this.list[t])return;return{hex:e,lch:this.lchOf(e),ratio:$t(e,this.original[this.partner().against])}}reach(t){let e=this.slot(),n=this.list[this.partner().against],r=this.lch[e],i=this.holds.get(e)??r.c,o=(f)=>ze(f,Math.min(i,kp(f,r.h)),r.h),s=(f)=>$t(o(f),n),a=St(this.list[e])>=St(n),c=Mt(n).l,u=Math.max(1,Math.round(t*100)/100),l=a?1:0,d;if(s(l)<u)d=l,this.notice=`The ratio stops at ${s(l).toFixed(2)}:1 on this side of the color it is read against`;else{let f=c,h=l;for(let m=0;m<24;m++){let p=(f+h)/2;if(s(p)>=u)h=p;else f=p}d=h}this.place(e,d,i,r.h);for(let f=0;f<40&&d!==l&&$t(this.list[e],n)<u;f++)d=a?Math.min(1,d+0.001):Math.max(0,d-0.001),this.place(e,d,i,r.h);this.lch[e]={...this.lch[e],l:Math.round(d*1e4)/1e4}}step(t){let e=cn[this.channel],n=this.lch[this.slot()][e.key];this.put(n+e.step*t)}put(t){let e=this.slot(),n=cn[this.channel],r=n.wraps?(t%n.max+n.max)%n.max:Vi(t,n.min,n.max),i=Math.round(r*1e4)/1e4,o=this.lch[e],s=this.scoped().filter((u)=>u!==e),a=(u)=>Math.round(u*1e4)/1e4;if(n.key==="c"){let u=kp(o.l,o.h);if(i>u)this.notice=`Chroma stops at ${u.toFixed(3)}, the sRGB edge for this lightness and hue`;let l=Math.min(i,u),d=l-o.c;this.holds.set(e,l),this.place(e,o.l,l,o.h);for(let f of s){let h=this.lch[f],m=a(Vi((this.holds.get(f)??h.c)+d,0,aS));this.holds.set(f,m),this.place(f,h.l,m,h.h)}this.trail([e,...s]);return}let c=n.key==="h"?((i-o.h)%360+540)%360-180:i-o.l;if(this.place(e,n.key==="l"?i:o.l,this.holds.get(e)??o.c,n.key==="h"?i:o.h),n.key==="h"&&$p(this.list[e]))this.notice="A grey shows no hue — raise its chroma first";for(let u of s){let l=this.lch[u];this.place(u,n.key==="l"?a(Vi(l.l+c,0,1)):l.l,this.holds.get(u)??l.c,n.key==="h"?a(((l.h+c)%360+360)%360):l.h)}this.trail([e,...s])}trail(t){let e=new Set(t);for(let[n,r]of this.links){if(this.unlinked.has(n))continue;if(e.has(n)&&!e.has(r))this.unlinked.add(n);else if(e.has(r)&&!e.has(n)){let i=this.lch[r],o=this.offsets.get(n);this.place(n,Vi(i.l+o.l,0,1),Math.max(0,i.c+o.c),((i.h+o.h)%360+360)%360)}}}place(t,e,n,r){let i=Math.min(n,kp(e,r));this.lch[t]={l:e,c:i,h:r},this.list[t]=ze(e,i,r)}take(t,e){if(this.mode==="tune")this.list[this.slot()]=t,this.lch[this.slot()]=this.lchOf(t),this.holds.set(this.slot(),this.lch[this.slot()].c),this.trail([this.slot()]);else this.set(this.slot(),t,e)}type(t){let e=this.typing??"";if(t==="esc")this.typing=void 0;else if(t==="enter"){let n=iS(e);if(!n){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(n,"hex")}else{let n=Ki(e,rS(t),(r)=>/^[0-9a-z#(),.% ]$/.test(r)&&e.length<28);if(n!==void 0)this.typing=n}}openKey(t){let e=this.choices();if(t==="esc")this.overlay=void 0,this.filter="";else if(t==="up"||t==="down"){let n=Math.max(1,e.length);this.pick=(this.pick+(t==="up"?n-1:1))%n}else if(t==="home"||t==="end")this.pick=t==="home"?0:Math.max(0,e.length-1);else if(t==="enter"){let n=e[this.pick];if(!n)return;if(this.remember("open"),this.list=an(n.colors),this.lch=this.lchs(),this.chain(this.list),this.overlay=void 0,this.filter="",this.notice=`Took the colors of ${n.name}`,this.mode==="seeds")this.leaveSeeds()}else{let n=Ki(this.filter,rS(t),(r)=>/^[a-z0-9@/-]$/.test(r));if(n!==void 0)this.filter=n,this.pick=0}}remember(t){if(t!==this.lastEdit||VL.has(t))this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.future=[];this.lastEdit=t}set(t,e,n){if(!le(e)||this.list[t]===e)return;this.remember(n),this.list[t]=e,this.lch[t]=this.lchOf(e),this.trail([t])}follow(){if(this.row<A.length){this.notice="= works on an ANSI row — the bright takes its normal";return}let t=this.row,e=this.row+8,n=this.lch[t];this.remember("follow"),this.place(e,Vi(n.l+0.06,0,1),n.c,n.h),this.links.set(e,t),this.unlinked.delete(e),this.offsets.set(e,yp(n,this.lch[e])),this.seat(e),this.notice=`${He(e).name} follows ${He(t).name.toLowerCase()}`}mark(){let t=Tn[this.slot()];this.remember("sig");let e=this.signature.includes(t)?this.signature.filter((r)=>r!==t):[...this.signature,t],n=e.length>3?e[0]:void 0;this.signature=e.slice(-3),this.notice=this.signature.length===3?`Signature: ${this.signature.join(", ")}${n?` — ${n} dropped`:""}`:`The signature needs three slots — ${this.signature.length} marked`}fix(){let t=cr(this.list,this.signature,this.waive),{theme:e,moves:n,left:r}=Sl({...t,selectionBackground:t.selectionBackground,signatureSlots:this.signature});if(n.length===0){this.notice=Wn(t).length===0?"Already passes the gate":"No color change fixes it";return}this.remember("fix");let i=an({...this.colors(),foreground:e.foreground,selection:e.selectionBackground,ansi:e.ansi}),o=this.list;this.list=i,this.lch=i.map((s,a)=>s===o[a]?this.lch[a]:this.lchOf(s)),this.notice=`Moved ${n.length} ${n.length===1?"color":"colors"}${r.length===0?" — passes the gate":" closer to the gate"}`}save(){let t=this.options.check(this.edited());if(t){this.notice=t;return}this.result="saved"}undo(){let t=this.history.pop();if(!t){this.notice="Nothing to undo";return}this.future.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}redo(){let t=this.future.pop();if(!t){this.notice="Nothing to redo";return}this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}restore(t){this.list=[...t.list],this.lch=[...t.lch],this.signature=[...t.signature],this.lastEdit=void 0}}import{mkdirSync as $F,readFileSync as Pp,writeFileSync as vS}from"node:fs";import{dirname as kF}from"node:path";import{isMainThread as yF,parentPort as SS,Worker as vF}from"node:worker_threads";var ZL=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),QL=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),XL=0.04,tF=0.1,eF=0.05,nF=4096;function rF(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function iF(t,e,n,r=0){let{site:i,post:o}=t,s=new Set(o.tags),a=[...rF(i)].some((l)=>s.has(l)),c=Math.min(o.width,o.height),u=o.width>0&&o.height>0?o.width/o.height/(e.w/e.h):1;return(o.solo?2:0)+([...ZL].some((l)=>s.has(l))?-3:0)+([...QL].some((l)=>s.has(l))?-1.5:0)+2*Math.min(1,c/e.h)+(a?1.5:-Math.min(1.5,Math.abs(Math.log(u))))+(n>0?1.5*Math.log1p(Math.max(0,o.score))/Math.log1p(n):0)+2*r}function Ml(t,e,n=new Map){let r=new Map;for(let{site:i,post:o}of t)r.set(i,Math.max(r.get(i)??0,o.score));return t.map((i,o)=>({pick:i,at:o,score:iF(i,e,r.get(i.site)??0,n.get(i.post))})).sort((i,o)=>o.score-i.score||i.at-o.at).map(({pick:i})=>i)}function uS(t){let e=new Map;for(let r of t)e.set(r.site,[...e.get(r.site)??[],r]);let n=[];for(let r=0;n.length<t.length;r++)for(let i of e.values()){let o=i[r];if(o)n.push(o)}return n}function Op(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function cS(t,e,n){let[r,i,o]=[Op(t),Op(e),Op(n)],s=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*o),a=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*o),c=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*o);return[0.2104542553*s+0.793617785*a-0.0040720468*c,1.9779984951*s-2.428592205*a+0.4505937099*c,0.0259040371*s+0.7827717662*a-0.808675766*c]}function lS(t,e){let n=e.map((s)=>cS(...nt(s))).filter(([,s,a])=>Math.hypot(s,a)>=XL);if(n.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/nF))),i=n.map(()=>0),o=0;for(let s=0;s<t.height;s+=r)for(let a=0;a<t.width;a+=r){let c=(s*t.width+a)*4;if(t.data[c+3]<128)continue;o++;let[u,l,d]=cS(t.data[c],t.data[c+1],t.data[c+2]);n.forEach(([f,h,m],p)=>{if(Math.hypot(u-f,l-h,d-m)<tF)i[p]=i[p]+1})}if(o===0)return 0;return i.reduce((s,a)=>s+Math.min(1,a/o/eF),0)/n.length}import{existsSync as Ip,mkdirSync as dS,readFileSync as Es}from"node:fs";import{homedir as lF}from"node:os";import{dirname as fS,join as Qi}from"node:path";import{spawn as oF}from"node:child_process";var sF=30000,aF=3,cF=97,uF=`ObjC.import('Vision')
|
|
693
|
+
ObjC.import('CoreImage')
|
|
694
|
+
ObjC.import('CoreGraphics')
|
|
695
|
+
function run(argv) {
|
|
696
|
+
const error = Ref()
|
|
697
|
+
const image = $.CIImage.imageWithContentsOfURL($.NSURL.fileURLWithPath(argv[0]))
|
|
698
|
+
if (!image) throw new Error('unreadable image')
|
|
699
|
+
const handler = $.VNImageRequestHandler.alloc.initWithCIImageOptions(image, $({}))
|
|
700
|
+
const request = $.VNGenerateForegroundInstanceMaskRequest.alloc.init
|
|
701
|
+
if (!handler.performRequestsError($([request]), error)) throw new Error('vision failed')
|
|
702
|
+
if (request.results.count === 0) throw new Error('no foreground')
|
|
703
|
+
const found = request.results.objectAtIndex(0)
|
|
704
|
+
const buffer = found.generateMaskedImageOfInstancesFromRequestHandlerCroppedToInstancesExtentError(
|
|
705
|
+
found.allInstances, handler, false, error)
|
|
706
|
+
if (!buffer) throw new Error('mask failed')
|
|
707
|
+
const written = $.CIContext.context.writePNGRepresentationOfImageToURLFormatColorSpaceOptionsError(
|
|
708
|
+
$.CIImage.imageWithCVPixelBuffer(buffer), $.NSURL.fileURLWithPath(argv[1]), $.kCIFormatRGBA8,
|
|
709
|
+
$.CGColorSpaceCreateWithName($.kCGColorSpaceSRGB), $({}), error)
|
|
710
|
+
if (!written) throw new Error('write failed')
|
|
711
|
+
}`;function Ss(){return process.platform==="darwin"}function xl(t){return t>=aF&&t<=cF}function Va(t,e,n){return new Promise((r,i)=>{let o=oF("osascript",["-l","JavaScript","-e",uF,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(sF)])}),s="";o.stderr.on("data",(a)=>{s+=a}),o.on("error",i),o.on("close",(a)=>{if(a===0){r();return}i(Error(s.trim().split(`
|
|
712
|
+
`).at(-1)||`osascript exited ${a}`))})})}var hS=90000;function Il(t,e){let n=Z(t),r=fe(t,e).flatMap((i)=>{let[,o,s]=/^([a-z.]+)_(\d+)$/.exec(i.key)??[];return o&&s&&V.some((a)=>a.key===o)?[{site:o,id:Number(s),...xf(n,i)}]:[]});return r.length>0?r:void 0}function dF(t,e){let n=new Set(Rt(Z(t)).palettes[e.name]?.pictures.map((r)=>r.key));return(e.pictures??[]).filter((r)=>!n.has(se(r)))}function mS(t,e){let n=new Set((e??[]).map((r)=>se(r)));return{...t,pictures:(t.pictures??[]).filter((r)=>!n.has(se(r)))}}async function fF(t,e,n,r,i,o){let s=V.find((b)=>b.key===n.site);if(!s)throw Error(`no site called ${n.site}`);o("Fetching");let a=await Mo(s,n.id,i);if(!a)throw Error("the post is gone");if(s!==ie&&a.md5)try{Cc([a],await Lc([a.md5],i))}catch{}let c=Hc(s,a)?Tc(s,a.id,i).then((b)=>{if(b)Ds(a,b)},()=>{}):void 0;if(!Nc(s,a,bi(process.env.TTHEME_FIND_RATING))||Pc(a,Eo(process.env.TTHEME_FIND_BLOCK)).length>0)throw Error("outside your find filters — TTHEME_FIND_RATING and TTHEME_FIND_BLOCK");let u=$n(a);if(!u)throw Error("too large to use");let l=Qi(Ve(s),"orig",`${n.id}.${u.ext}`),d;if(Ip(l))d=new Uint8Array(Es(l));else{o("Downloading");let b=wi(s,a,u);d=await Fc(b.site,b.url,i,($,k)=>o("Downloading",Vu($,k))),L(l,d)}let f=wr(d,Se),h=!1;if(Kn(f)===0&&Ss()&&process.env.TTHEME_FIND_REMOVE_BG!=="off"){let b=Qi(Ve(s),"cut",`${n.id}.png`);try{if(!Ip(b))o("Cutting out"),dS(fS(b),{recursive:!0}),await Va(l,b,i);let $=wr(new Uint8Array(Es(b)),Se);if(xl(Kn($)))f=$,h=!0}catch{}}await c;let m=Sf(e);o("Drawing"),Kc(t,m,yn(m,e.signatureSlots),f,{site:s.key,id:n.id,ext:u.ext,bytes:d,from:`${s.name} ${n.id} ${s.pageUrl(n.id)}`,artist:a.named.artist,source:zs(a.source),cut:h},{width:0,height:0},Ur(t),Mu(t));let p=fe(t,e.name).find((b)=>b.key===se(n));if(p)ea(Z(t),p,n,r,lF())}function hF(t,e){let n=V.find((o)=>o.key===t.site),r=`${n?.name??t.site} ${t.id}`;if(!n||!e)return r;return`${Nt()?Hs:`\x1B[${30+n.ansi}m${Hs}\x1B[39m`} ${yc(r,n.pageUrl(t.id))}`}async function Xi(t,e,n){let r=e.flatMap((c)=>dF(t,c).map((u)=>({entry:c,shared:u})));if(r.length===0)return;let i=_i(n),o=process.stdout.isTTY&&mk(process.env),s=new Set,a=Yr();for(let[c,{entry:u,shared:l}]of r.entries()){let d=`${u.name} · ${hF(l,o)}`,f=r.length>1?` · ${c+1}/${r.length}`:"",h=(m,p)=>a.set(`${m} ${d}${p?` · ${p}`:""}${f}`);try{await fF(t,u,l,i,AbortSignal.timeout(hS),h),a.say(` ▣ ${d}`),s.add(u)}catch(m){a.say(` ▢ ${d} — ${m instanceof Error?m.message:String(m)}`)}}a.done();for(let c of s){let u=(c.pictures??[]).find((l)=>fe(t,c.name).some((d)=>d.key===se(l)));if(u)To(t,c.name,se(u))}if(s.size>0)Ae(t)}function pS(t,e,n){if(e.width!==t.width||e.height!==t.height)return!1;for(let r=0;r<t.width*t.height;r++)t.data[r*4+3]=e.data[r*4+n]??0;return!0}async function mF(t,e){let[,n,r]=/^(.+)_(\d+)$/.exec(t)??[],i=Qi(Mr(),n??"local","cut",`${r??t}.png`);if(!Ip(i)){if(!Ss())return;dS(fS(i),{recursive:!0}),await Va(e,i,AbortSignal.timeout(hS))}return wr(new Uint8Array(Es(i)),Se)}function pF(t,e){try{return Kn(_t(new Uint8Array(Es(Qi(t,`${e.stem}.png`)))))>0}catch{return!1}}function Ol(t,e){return()=>wr(new Uint8Array(Es(Qi(t,e.original))),Se)}function gS(t,e){let n=Ol(t,e);return()=>{let r=n(),i=_t(new Uint8Array(Es(Qi(t,e.cut))));return pS(r,i,0)?r:null}}async function Rl(t,e,n,r,i,o,s,a){let c=Z(t),u=Rt(c).palettes[e]?.pictures.find((l)=>l.key===n);if(!u?.original)return null;if(u.cut)return na(t,e,u,gS(c,u),r,i,o,s,!1,a);if(Ao(u)){let l=Ol(c,u)();if(Kn(l)===0&&pF(c,u)){let d=await mF(n,Qi(c,u.original));if(!d||!pS(l,d,3))return null;return na(t,e,u,()=>l,r,i,o,s,!0,a)}return na(t,e,u,()=>l,r,i,o,s,!1,a)}return na(t,e,u,Ol(c,u),r,i,o,s,!1,a)}function bS(t,e,n,r,i,o){let s=Z(t),a=Rt(s).palettes[e]?.pictures.find((u)=>u.key===n);if(!a?.original||Ao(a))return!1;let c=a.cut?gS(s,a):Ol(s,a);return T0(t,e,a,c,r,i,o)}var gF=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,bF=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"],[/zerochan\.net\/(\d+)(?:[?#\s]|$)/,"zerochan"]];function Rp(t){let e=/(\d+)_p(\d+)/.exec(t.source);return[...t.md5?[`md5:${t.md5}`]:[],...e&&t.source.includes("pximg")?[`pixiv:${e[1]}_p${e[2]}`]:[]]}function wS(t,e){let n=gF.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...bF.flatMap(([r,i])=>{let o=r.exec(e.source)?.[1];return o?[`post:${i}:${Number(o)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function $S(t,e){let n=t.owner||t.named.artist[0]||"";return n!==""&&n===(e.owner||e.named.artist[0]||"")&&t.width===e.width&&t.height===e.height}function kS(t){let r=[];for(let o=0;o<8;o++){let s=Math.floor(o*t.height/8),a=Math.max(s+1,Math.floor((o+1)*t.height/8));for(let c=0;c<9;c++){let u=Math.floor(c*t.width/9),l=Math.max(u+1,Math.floor((c+1)*t.width/9)),d=0;for(let f=s;f<a;f++)for(let h=u;h<l;h++){let m=(f*t.width+h)*4,p=t.data[m+3]/255,b=0.299*t.data[m]+0.587*t.data[m+1]+0.114*t.data[m+2];d+=b*p+255*(1-p)}r.push(d/((l-u)*(a-s)))}}let i=0n;for(let o=0;o<8;o++)for(let s=0;s<8;s++)i=i<<1n|(r[o*9+s]>r[o*9+s+1]?1n:0n);return i.toString(16).padStart(16,"0")}function wF(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function yS(t,e){if(t.width<=0||t.height<=0||e.width<=0||e.height<=0)return!1;return Math.abs(Math.log(t.width/t.height/(e.width/e.height)))<0.01&&wF(t.hash,e.hash)<=2}var SF={thumb:"tile",band:"band",match:"tile",show:"view",backdrop:"view",redraw:"view"},Pl;async function EF(t){if(t.job==="redraw")return Rl(t.home,t.name,t.key,t.paint,t.blur,t.aligns,t.user);if(t.job==="show"){if(Pl?.from!==t.from){let s=wr(new Uint8Array(Pp(t.from)),Se);Pl={from:t.from,clear:Kn(s),inked:vf(s)}}let{image:r,fill:i,opacity:o}=y0(Pl.inked,t.colors,t.tone,t.width,t.height,t.blur,t.tune,t.coloring);return $F(kF(t.to),{recursive:!0}),vS(t.to,Fe(r)),{clear:Pl.clear,fill:i,opacity:o}}let e=wr(new Uint8Array(Pp(t.from)),Se);if(t.job==="backdrop"){Kc(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(Pp(t.source)),cut:t.from!==t.source},t,t.blur,t.coloring);let r=t.tune&&fe(t.home,t.colors.name).find((i)=>i.key===se(t.origin));if(t.tune&&r)ea(Z(t.home),r,t.tune,t.aligns??!0,t.user??t.home);return 0}if(t.job==="match")return{match:lS(e,t.colors),hash:kS(e)};if(t.job==="thumb")return L(t.to,Fe(ow(e,t.width,t.height))),0;let n=e.data.subarray(t.y*e.width*4,(t.y+t.height)*e.width*4);return vS(t.to,Fe({width:e.width,height:t.height,data:n})),0}function MF(t){t.on("message",async(e)=>{try{t.postMessage({id:e.id,value:await EF(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class Np{worker;next=1;waiting=new Map;send(t){let e=this.next++;return new Promise((n,r)=>{let i=this.open();this.waiting.set(e,{ok:n,no:r}),i.ref(),i.postMessage({...t,id:e})})}close(){this.worker?.terminate(),this.worker=void 0,this.drop(Error("renderer closed"))}open(){if(this.worker)return this.worker;let t=new vF(import.meta.filename);t.unref(),t.on("message",({id:n,value:r,error:i})=>{let o=this.waiting.get(n);if(this.waiting.delete(n),this.waiting.size===0)t.unref();if(i!==void 0)o?.no(Error(i));else o?.ok(r)});let e=(n)=>{if(this.worker===t)this.worker=void 0;this.drop(n instanceof Error?n:Error("renderer stopped"))};return t.on("error",e),t.on("exit",()=>e(void 0)),this.worker=t,t}drop(t){for(let e of this.waiting.values())e.no(t);this.waiting.clear()}}class Za{lines=new Map;run(t){let e=SF[t.job],n=this.lines.get(e);if(!n)n=new Np,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}class Ap{lines;constructor(t){this.lines=Array.from({length:Math.max(1,t)},()=>new Np)}async map(t){let e=[],n=0;return await Promise.all(this.lines.map(async(r)=>{while(n<t.length){let i=n++;try{e[i]=await r.send(t[i])}catch(o){e[i]=o instanceof Error?o:Error(String(o))}}})),e}close(){for(let t of this.lines)t.close()}}if(!yF&&SS)MF(SS);import{existsSync as xF,mkdtempSync as OF,readFileSync as IF,rmSync as ES,writeFileSync as RF}from"node:fs";import{tmpdir as PF}from"node:os";import{basename as xS,join as MS}from"node:path";var NF=6;class Tp{dir;made=[];of(t,e){this.dir??=OF(MS(PF(),"ttheme-tint-"));let n=MS(this.dir,`${xS(t,".png")}.${e.slice(1).toLowerCase()}.png`);if(!xF(n)){let r=new Uint8Array(IF(t));RF(n,Mc(r,e)??pi(mi(_t(r)),e)),this.made.push(n);while(this.made.length>NF)ES(this.made.shift(),{force:!0})}return n}clear(){if(this.dir)ES(this.dir,{recursive:!0,force:!0});this.dir=void 0,this.made.length=0}}function OS(t,e,n,r,i){if(je(t)==="original")return e;let o=yn(n,[...r]);return o.color===t.tone?e:i.of(e,o.color)}function IS(t,e){let n=xS(e);return t.find((r)=>n.startsWith(`${r.stem}.`)||n.startsWith(`${r.stem}@`))}var jF=2147483625,NS=2147483626,Hn=2147483627,_F=-1073741831,AS=-1073741830,BF=-1073741829,GF=4;function UF(t,e,n,r,i){let o=Math.trunc,s=n.col*r.w,a=n.row*r.h,c=o((Math.max(i.x,s)+r.w-1)/r.w),u=o(Math.min(i.x+i.w,s+n.cols*r.w)/r.w),l=o((Math.max(i.y,a)+r.h-1)/r.h),d=o(Math.min(i.y+i.h,a+n.rows*r.h)/r.h);if(u<=c||d<=l)return;return{col:c,row:l,cols:u-c,rows:d-l,x:o((c*r.w-i.x)*t/i.w),y:o((l*r.h-i.y)*e/i.h),w:o((u-c)*r.w*t/i.w),h:o((d-l)*r.h*e/i.h)}}function WF(t){try{let e=HF(t,"r"),n=Buffer.alloc(24);return CF(e,n,0,24,0),AF(e),n.readUInt32BE(0)===2303741511?{width:n.readUInt32BE(16),height:n.readUInt32BE(20)}:void 0}catch{return}}class Nl{ready=()=>{};cell={w:0,h:0};held;tints=new Tp;sent=new Map;placed=new Map;viewed="";renders;scratch;made=0;bands=new Map;home;name;views;banded;files;static of(t,e,n,r){if(Nt(t)||!Yo(t,r)||!(Jo(t)||Ni(t)))return;return new Nl(t,e,n)}constructor(t,e,n){this.home=e,this.name=n,this.views=Ni(t),this.banded=yu(t),this.files=vu(t)}get laid(){return this.cell.w>0}measured(t){if(this.cell.w===0&&t.w>0&&t.h>0)this.cell=t}load(){let t=Z(this.home),e=Oe(t,this.name,LF()),n=[];try{n=Rt(t).palettes[this.name]?.pictures??[]}catch{}let r=e?IS(n,e.image):void 0;this.held=e&&r?{picture:r,image:e.image,opacity:e.opacity,cover:e.cover,at:Wt.indexOf(e.position)+1||5}:void 0}draw(t,e,n,r,i,o={col:0,row:0,cols:r,rows:i}){if(this.cell.w===0)return"";let s=t[0],a=this.look(t,e,n,o,!this.views||o.cols===r&&o.rows===i);if(this.views){let u=r*this.cell.w,l=i*this.cell.h,d=a?`${s}|${a.image}|${a.opacity}|${u}|${l}|${a.box.w}|${a.box.h}|${a.box.x}|${a.box.y}|${this.held?.at??5}`:`${s}||1|${u}|${l}|0|0|0|0|5`;if(d===this.viewed)return"";return this.viewed=d,Ai(d)}let c=this.layer(jF,_F,"f=24",Buffer.from(nt(s)),o);if(a){let u=Math.max(0,Math.min(255,Math.round((1-a.opacity)*255)));c+=this.picture(a),c+=this.layer(NS,BF,"f=32",Buffer.from([...nt(s),u]),o)}else c+=this.drop(Hn)+this.drop(NS);return c}resized(){this.sent.clear(),this.placed.clear(),this.viewed=""}clear(){let t=this.views&&this.viewed?Ai(""):"";for(let e of this.sent.keys())t+=Wa(e);return this.resized(),t}close(){let t=this.clear();if(this.tints.clear(),this.renders?.close(),this.scratch)RS(this.scratch,{recursive:!0,force:!0});return t}look(t,e,n,r,i){let o=this.held;if(!o)return;let s={name:this.name,...Ut([...t]),waived:[...n]},a=OS(o.picture,o.image,s,e,this.tints),c=WF(a);if(!c)return;let u=Ho(c.width,c.height,r.cols*this.cell.w,r.rows*this.cell.h,100,o.at,o.cover&&i),l={...u,x:u.x+r.col*this.cell.w,y:u.y+r.row*this.cell.h},d=UF(c.width,c.height,r,this.cell,l);if(!d)return;return{image:a,opacity:o.opacity,...c,box:l,rect:d}}layer(t,e,n,r,i){let o=r.toString("base64"),s=`${o}|${i.col}|${i.row}|${i.cols}|${i.rows}`;if(this.placed.get(t)===s)return"";return this.sent.set(t,s),this.placed.set(t,s),`\x1B_Ga=t,${n},s=1,v=1,i=${t},q=2;${o}\x1B\\\x1B[${i.row+1};${i.col+1}H\x1B_Ga=p,i=${t},p=${t},c=${i.cols},r=${i.rows},C=1,z=${e},q=2\x1B\\`}picture(t){let{image:e,rect:n}=t;if(this.banded&&(2*n.y+n.h-t.height)**2>1){let o=this.band(t.image,n.y,n.h);if(!o.ready)return"";e=o.path,n={...n,y:0}}let r="";if(this.sent.get(Hn)!==e){let o=hl({id:Hn,path:e,row:0,col:0,cols:0,rows:0,z:AS},this.files);if(o===void 0)return"";r+=o,this.sent.set(Hn,e),this.placed.delete(Hn)}let i=`${n.col};${n.row};${n.cols};${n.rows};${n.x};${n.y};${n.w};${n.h}`;if(this.placed.get(Hn)!==i)r+=`\x1B[${n.row+1};${n.col+1}H\x1B_Ga=p,i=${Hn},p=${Hn},x=${n.x},y=${n.y},w=${n.w},h=${n.h},c=${n.cols},r=${n.rows},C=1,z=${AS},q=2\x1B\\`,this.placed.set(Hn,i);return r}drop(t){if(!this.sent.has(t))return"";return this.sent.delete(t),this.placed.delete(t),Wa(t)}band(t,e,n){let r=`${t}|${e}|${n}`,i=this.bands.get(r);if(i)return i;this.scratch??=TF(PS(FF(),"ttheme-edit-")),this.renders??=new Za;let o={path:PS(this.scratch,`band-${++this.made}.png`),ready:!1};this.bands.set(r,o),this.renders.run({job:"band",from:t,to:o.path,y:e,height:n}).then(()=>{o.ready=!0,this.ready()}).catch(()=>{});for(let[s,a]of this.bands){if(this.bands.size<=GF)break;if(a.ready&&a.path!==this.sent.get(Hn))this.bands.delete(s),RS(a.path,{force:!0})}return o}}var to=50;function st(t,e){return Vt(t,e)}function Ms(t){return{color:t,dim:(e)=>t?`${C}${e}${$e}`:e,bold:(e)=>t?`${ut}${e}${$e}`:e,fg:(e)=>t?qe(e):"",bg:(e)=>t?`\x1B[48;2;${nt(e).join(";")}m`:""}}function Qa(t){return St(t)>0.35?"#000000":"#ffffff"}function Hp(t,e){return t.held!==void 0&&t.held-e.c>0.0005?t.held:void 0}function Al(t,e,n,r){let i=e.mode==="tune"&&e.channel===Qt,o=e.ratio(),{floor:s}=e.partner(),a=(p)=>Math.round(Math.log(Math.max(1,p))/Math.log(21)*(n-1)),c=a(o),u=s===void 0?-1:a(s),l=r===void 0?-1:a(r),d=i?"━":"─",f=Array.from({length:n},(p,b)=>b===c?t.bold("●"):b===l?"○":b===u?"┃":b<u?t.dim(d):d).join(""),h=`${o.toFixed(2)}:1`.padStart(6),m={kind:"channel",channel:Qt};return`${st(m,i?t.bold("▸◐"):t.dim(" ◐"))} ${st({kind:"bar",channel:Qt},f)} ${st(m,i?t.bold(h):t.dim(h))}`}function Tl(t,e){if(!t.misses().has(e))return;if(vp(t.list,t.signature,t.waive,"bright-follows").includes(e))return e-A.length<8?"= makes the bright follow its normal":"= on the normal makes this follow it";return"f moves the colors the gate misses"}function Hl(t,e,n){let r=Ep(t.list,t.signature,t.waive,e),i=Hp(t,n);if(i!==void 0)r.push({ok:void 0,text:`Chroma ○ ${i.toFixed(3)} is held while you tune — ${n.c.toFixed(3)} fits this lightness and hue`});return r}var KF={top:"╭╮",mid:"├┤",bottom:"╰╯"};function Xt(t,e,n=[]){let[r,i]=[...KF[e]],o=[...`${r}${"─".repeat(Math.max(0,t-2))}${i}`];for(let[s,a]of n)[...a].forEach((c,u)=>{if(s+u>0&&s+u<t-1)o[s+u]=c});return o.join("")}function ln(t,e,n){return`${t.dim("│")}${rt(e,n-2)}${t.dim("│")}`}function Cl(t){let e=(n,r)=>n.toFixed(r).replace(/^0(?=\.)/,"");return`${e(t.l,2)} ${e(t.c,3)} ${t.h.toFixed(0).padStart(3)}°`}function TS(t){return`${t.l.toFixed(2)} ${t.c.toFixed(3)} ${t.h.toFixed(0).padStart(3)}°`}function Cp(t,e){return e===void 0?t.dim("·"):e?t.dim("✓"):t.bold("✗")}function zF(t,e,n,r=to){let i=Mp(e.list,e.signature,e.waive).sort((u,l)=>Number(u.ok!==!1)-Number(l.ok!==!1)),o=i.filter((u)=>u.ok===!1).length,s=` ${t.dim("Gate")} ${o===0?t.dim("passes"):t.bold(`${o} ${o===1?"miss":"misses"}`)}`,a=r-4,c=i.flatMap((u)=>{let l=`${u.value} ${u.bound}`,d=` ${Cp(t,u.ok)} ${vt(u.ok===!1?u.label:t.dim(u.label),t.dim(l),a-2)}`,f=[...new Set(u.slots)].map((p)=>He(p).name),h=u.slots[0],m=(p)=>h===void 0?p:st({kind:"slot",slot:h},p);return f.length>0?[m(d),m(` ${t.dim(rt(f.join(" · "),a-2))}`)]:[m(d)]});return[o===0?s:vt(s,`${t.bold("n")} ${t.dim("next miss")}`,r-2),...c.slice(0,Math.max(0,n-1))]}function HS(t,e){let n=t-A.length;if(n>=0)return e===String(n)||e===`B${n}`||e===`K${n}`;return t===3&&e==="s"||t===2&&e==="c"}function Ll(t,e,n,r){let i=r?"\x1B[4m":"";if(n==="d")return`${t.fg(e.foreground)}\x1B[2m${i}`;if(n==="b")return`${t.fg(e.foreground)}\x1B[1m${i}`;if(n==="s")return`${t.bg(e.selection)}${t.fg(e.foreground)}${i}`;if(n==="c")return`${t.bg(e.cursor)}${i}`;let o=/^([BK]?)(\d+)$/.exec(n);if(!o)return`${t.fg(e.foreground)}${i}`;let s=e.ansi[Number(o[2])];if(o[1]==="K")return`${t.fg(e.ansi[0])}${t.bg(s)}${i}`;return`${t.fg(s)}${o[1]==="B"?"\x1B[1m":""}${i}`}function Xa(t,e,n,r,i){let o=e.length-1,s=Math.max(0,Math.min(o,n)),a=i===void 0?-1:Math.max(0,Math.min(o,i));if(!t.color)return e.map((c,u)=>u===s?"●":u===a?"○":r?"━":"─").join("");return e.map((c,u)=>{let l=c??"#000000";if(u===s)return`${t.bg(l)}${t.fg(Qa(l))}●\x1B[39;49m`;if(u===a)return c?`${t.bg(c)}${t.fg(Qa(c))}○\x1B[39;49m`:`${t.fg("#aaaaaa")}○`;return c?`${t.fg(c)}█`:`${t.fg(r?"#777777":"#555555")}░`}).join("").concat("\x1B[39m")}function Fl(t,e,n){return Array.from({length:n},(r,i)=>{let o=e.min+(e.max-e.min)*i/(n-1),s={...t,[e.key]:o};return An(s.l,s.c,s.h)?ze(s.l,s.c,s.h):void 0})}function eo(t,e,n,r){return Math.round((t-e)/(n-e)*(r-1))}function Lp(t){return Mp(t.list,t.signature,t.waive).filter((e)=>e.ok===!1).length}function tc(t,e,n,r){if(n<3)return[];let i=Lp(e),o=i===0?" Gate ✓ passes ":` Gate ✗ ${i} · n next `;return[t.dim(Xt(r,"top",[[2,o]])),...zF(t,e,n-1,r-1).slice(1).map((s)=>ln(t,s,r)),t.dim(Xt(r,"bottom"))]}var lr=0.98,ec=0.12,DF=0.37,CS=0.74,qF=0.15,YF=-1073741828,Fp=-1073741827,jp=-1073741826,JF=-1073741825,VF=2147483584,ZF=["panel","plane","hue","contrast","mark","hue-thumb","contrast-thumb","origin","hue-origin","contrast-origin"],QF=4096;function nc(t,e){return ys(t,e,DF)}function _l(t,e,n){let r=nc(t,n);return r>0.000001?Math.min(1,e/r):0}function rc(t,e){return{width:t,height:e,data:new Uint8Array(t*e*4)}}function ri(t,e,n,r,i){let o=r[3]*i;if(o<=0||e<0||n<0||e>=t.width||n>=t.height)return;let s=(n*t.width+e)*4,a=t.data;if(o>=1){a[s]=r[0],a[s+1]=r[1],a[s+2]=r[2],a[s+3]=255;return}let c=a[s+3]/255,u=o+c*(1-o);for(let l=0;l<3;l++)a[s+l]=Math.round((r[l]*o+a[s+l]*c*(1-o))/u);a[s+3]=Math.round(u*255)}function ur(t,e=1){return[...nt(t),e]}function Os(t,e,n,r,i,o,s){let a=Math.abs(t-(n+i/2))-(i/2-s),c=Math.abs(e-(r+o/2))-(o/2-s);return Math.hypot(Math.max(a,0),Math.max(c,0))+Math.min(Math.max(a,c),0)-s}function no(t,e,n,r){let i=[],o=[],s=Math.max(0,Math.floor(r?.x??0)),a=Math.max(0,Math.floor(r?.y??0)),c=Math.min(t,Math.ceil(r?r.x+r.w:t)),u=Math.min(e,Math.ceil(r?r.y+r.h:e));for(let l=a;l<u;l++)for(let d=s;d<c;d++){let f=n(d+0.5,l+0.5);if(f>0.002)i.push(l*t+d),o.push(Math.min(1,f))}return{at:Uint32Array.from(i),cover:Float32Array.from(o)}}function ro(t,e,n){for(let r=0;r<e.at.length;r++){let i=e.at[r];ri(t,i%t.width,Math.floor(i/t.width),n,e.cover[r])}}function _p(t,e){return(n,r)=>Math.max(0,0.5-Os(n,r,t.x,t.y,t.w,t.h,e))}function LS(t,e,n){return(r,i)=>Math.max(0,0.5-Math.abs(Os(r,i,t.x,t.y,t.w,t.h,e)+n/2)+n/2)}var jl=new Map;function XF(t,e,n,r){let i=`${e.w}x${e.h} ${_S({...t,ground:"#000000",ink:"#000000",accent:"#000000"})}`,o=jl.get(i);if(o)return o;let{panel:s}=t,a={x:e.w,y:0,w:s.cols*e.w,h:s.rows*e.h},c=Math.round(e.h*0.45),u=Math.round(e.h*0.18),l=e.h*0.6,d=Math.max(1,Math.round(e.h/22)),f=(x)=>({x:(x.col-s.col+1)*e.w,y:(x.row-s.row)*e.h}),h=Math.max(1,Math.round(e.h*0.08)),m=f(t.tabs),p={x:m.x,y:m.y+h,w:t.tabs.cols*e.w,h:e.h-2*h},b=Math.floor(t.tabs.cols/t.tabs.count)*e.w,$=Math.max(1,Math.round(h/2)),k={x:p.x+t.tabs.active*b+$,y:p.y+$,w:(t.tabs.active===t.tabs.count-1?p.w-t.tabs.active*b:b)-2*$,h:p.h-2*$},v=f(t.field),S={x:v.x,y:v.y+h,w:t.field.cols*e.w,h:e.h-2*h},M=t.divider===void 0?void 0:{x:a.x+e.w*0.6,y:(t.divider-s.row)*e.h,w:a.w-e.w*1.2,h:d},I={shadow:no(n,r,(x,H)=>{let N=Os(x,H,a.x,u,a.w,a.h,c);return N>0&&N<l?(1-N/l)**2:0}),fill:no(n,r,_p(a,c),a),border:no(n,r,LS(a,c,d),a),track:no(n,r,_p(p,p.h*0.3),p),segment:no(n,r,_p(k,k.h*0.3),k),field:no(n,r,LS(S,S.h*0.3,d),S),divider:M&&no(n,r,()=>1,M)};if(jl.size>8)jl.clear();return jl.set(i,I),I}function t3(t){let e=St(t.ground)<0.18;return{dark:e,surface:bt(t.ground,t.ink,e?0.07:0.04)}}function e3(t,e){let n=rc((t.panel.cols+2)*e.w,(t.panel.rows+1)*e.h),r=XF(t,e,n.width,n.height),{dark:i,surface:o}=t3(t);if(ro(n,r.shadow,[0,0,0,i?0.45:0.18]),ro(n,r.fill,ur(o)),ro(n,r.border,ur(t.ink,i?0.16:0.2)),ro(n,r.track,ur(t.ink,i?0.06:0.07)),ro(n,r.segment,ur(t.accent,i?0.24:0.2)),ro(n,r.field,ur(t.ink,i?0.22:0.28)),r.divider)ro(n,r.divider,ur(t.ink,i?0.12:0.16));return n}function n3(t,e,n){let r=rc(Math.round(t.cols*n.w),Math.round(t.rows*n.h)),{width:i,height:o,data:s}=r,a=Math.round(n.h*0.3),c=Math.max(1,(t.cols-1)*n.w),u=(h)=>Math.min(1,Math.max(0,(h+0.5-n.w/2)/c)),l=t.rows*2-1,d=(h)=>lr-Math.min(1,Math.max(0,((h+0.5)/n.h*2-0.5)/l))*(lr-ec),f=[];for(let h=0;h<o;h++){if(h%2===0){let m=d(h+0.5),p=nc(m,e);f=Array.from({length:Math.ceil(i/2)},(b,$)=>An(m,u($*2+0.5)*p,e)??[0,0,0])}for(let m=0;m<i;m++){let b=(m<a||m>=i-a)&&(h<a||h>=o-a)?Math.min(1,Math.max(0,0.5-Os(m+0.5,h+0.5,0,0,i,o,a))):1;if(b<=0)continue;let $=f[m>>1],k=(h*i+m)*4;s[k]=$[0],s[k+1]=$[1],s[k+2]=$[2],s[k+3]=Math.round(b*255)}}return r}function jS(t,e){let n=Math.max(4,Math.round(t.h*0.42));return{top:Math.round((t.h-n)/2),height:n,width:e*t.w}}function r3(t,e){let n=rc(t.cols*e.w,e.h),{top:r,height:i,width:o}=jS(e,t.cols),s=Array.from({length:o},(a,c)=>{let l=Math.min(1,Math.max(0,((c+0.5)/e.w-0.5)/Math.max(1,t.cols-1)))*360;return An(CS,ys(CS,l,qF),l)??[0,0,0]});for(let a=r;a<r+i;a++)for(let c=0;c<o;c++){let u=Math.min(1,Math.max(0,0.5-Os(c+0.5,a+0.5,0,r,o,i,i/2))),l=s[c];ri(n,c,a,[l[0],l[1],l[2],1],u)}return n}function i3(t,e,n){let r=rc(t.cols*n.w,n.h),{top:i,height:o,width:s}=jS(n,t.cols),a=t.floor===void 0?-1:Math.round((t.floor*(t.cols-1)+0.5)*n.w),c=Math.max(2,Math.round(o*0.45)),u=i+Math.round((o-c)/2);for(let l=u;l<u+c;l++)for(let d=0;d<s;d++){let f=Math.min(1,Math.max(0,0.5-Os(d+0.5,l+0.5,0,u,s,c,c/2))),h=a<0||d>=a;ri(r,d,l,ur(e,h?t.lit?0.5:0.36:0.14),f)}if(a>=0){let l=Math.max(2,Math.round(n.w/5));for(let d=i-1;d<i+o+1;d++)for(let f=a-Math.floor(l/2);f<a-Math.floor(l/2)+l;f++)ri(r,f,d,ur(e,0.85),1)}return r}function o3(t,e,n,r,i,o,s){let a=rc(t*s.w,e*s.h),c=Math.max(2,Math.round(i*0.3)),u=(d,f)=>Math.min(1,Math.max(0,d-f+0.5)),l=[0,0,0,0.5];for(let d=0;d<a.height;d++)for(let f=0;f<a.width;f++){let h=Math.hypot(f+0.5-n,d+0.5-r);if(o)ri(a,f,d,ur(o),u(i-c,h));else ri(a,f,d,l,u(i-c,h)-u(i-c-1,h));ri(a,f,d,l,u(i+1,h)-u(i,h)),ri(a,f,d,[255,255,255,1],u(i,h)-u(i-c,h))}return a}function xs(t,e,n,r,i,o,s=JF){let a=Math.floor((e-r-2)/o.w),c=Math.floor((e+r+2)/o.w),u=Math.floor((n-r-2)/o.h),l=Math.floor((n+r+2)/o.h),d={row:u,col:a,cols:c-a+1,rows:l-u+1},f=Math.round((e-a*o.w)*2)/2,h=Math.round((n-u*o.h)*2)/2;return{name:t,key:`${d.cols}x${d.rows} ${f},${h} ${r} ${i??"-"}`,box:d,z:s,paint:()=>o3(d.cols,d.rows,f,h,r,i,o)}}function _S(t){let{panel:e}=t,n=(i)=>`${i.row-e.row},${i.col-e.col},${i.cols}`,r=t.divider===void 0?"-":t.divider-e.row;return`${e.cols}x${e.rows} ${t.ground} ${t.ink} ${t.accent} ${n(t.tabs)},${t.tabs.active}/${t.tabs.count} ${n(t.field)} ${r}`}function s3(t,e){let n=`${e.w}x${e.h}`,r=Math.max(4,Math.round(e.h*0.34)),i=(d,f)=>(d.col+0.5+f*(d.cols-1))*e.w,o=(d)=>(d.row+0.5)*e.h,s=t.plane,a=(d)=>{let f=(lr-d)/(lr-ec)*(s.rows*2-1);return s.row*e.h+(Math.min(s.rows*2-1,Math.max(0,f))+0.5)*e.h/2},c=a(s.l),u=[{name:"panel",key:`${n} ${_S(t)}`,box:{row:t.panel.row,col:t.panel.col-1,cols:t.panel.cols+2,rows:t.panel.rows+1},z:YF,paint:()=>e3(t,e)},{name:"plane",key:`${n} ${s.cols}x${s.rows} ${s.h.toFixed(2)}`,box:s,z:Fp,paint:()=>n3(s,s.h,e.h>=24?{w:e.w/2,h:e.h/2}:e)},{name:"hue",key:`${n} ${t.hue.cols}`,box:{...t.hue,rows:1},z:Fp,paint:()=>r3(t.hue,e)},{name:"contrast",key:`${n} ${t.contrast.cols} ${t.contrast.floor??"-"} ${t.contrast.lit} ${t.ink}`,box:{...t.contrast,rows:1},z:Fp,paint:()=>i3(t.contrast,t.ink,e)},xs("mark",i(s,_l(s.l,s.c,s.h)),c,r,void 0,e),xs("hue-thumb",i(t.hue,t.hue.h/360),o(t.hue),r,t.hue.color,e),xs("contrast-thumb",i(t.contrast,t.contrast.at),o(t.contrast),r,t.contrast.color,e)],l=t.origin;if(l){let d=Math.max(3,Math.round(r*0.55));u.push(xs("origin",i(s,_l(l.l,l.c,l.h)),a(l.l),d,l.color,e,jp),xs("hue-origin",i(t.hue,l.h/360),o(t.hue),d,l.color,e,jp),xs("contrast-origin",i(t.contrast,l.at),o(t.contrast),d,l.color,e,jp))}return u}function a3(t,e){let r=e.toString("base64").match(new RegExp(`.{1,${QF}}`,"g"))??[""];return r.map((i,o)=>{let s=o<r.length-1?1:0;return o===0?`\x1B_Ga=t,f=100,i=${t},m=${s},q=2;${i}\x1B\\`:`\x1B_Gm=${s},q=2;${i}\x1B\\`}).join("")}function FS(t,e,n){return`\x1B[${e.row+1};${e.col+1}H\x1B_Ga=p,i=${t},p=${t},c=${e.cols},r=${e.rows},C=1,z=${n},q=2\x1B\\`}function Bp(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}class Bl{cell={w:0,h:0};shown=new Map;static of(t,e){return Nt(t)||!Yo(t,e)||!Jo(t)?void 0:new Bl}get ready(){return this.cell.w>0}measured(t){if(this.cell.w===0&&t.w>0&&t.h>0)this.cell=t}draw(t){if(!this.ready)return"";let e=t?s3(t,this.cell):[],n="";for(let r of e)n+=this.put(r);for(let[r,i]of this.shown)if(!e.some((o)=>o.name===r))n+=Bp(i.id),this.shown.delete(r);return n}clear(){let t="";for(let e of this.shown.values())t+=Bp(e.id);return this.shown.clear(),t}put(t){let e=`${t.box.row};${t.box.col};${t.box.cols};${t.box.rows}`,n=this.shown.get(t.name);if(n&&n.key===t.key){if(n.at===e)return"";return n.at=e,FS(n.id,t.box,t.z)}let r=VF+ZF.indexOf(t.name)*2,i=n?.id===r?r+1:r;return this.shown.set(t.name,{key:t.key,id:i,at:e}),`${a3(i,Fe(t.paint()))}${FS(i,t.box,t.z)}${n?Bp(n.id):""}`}}var c3="\x1B[0m",Wp="\x1B[33m",ic=34,Gp=2,u3=6,Ul=3,l3=7,GS="↑↓ L ←→ C ⇧←→ H tab ◐";function d3(t,e,n){let r="",i=0;for(let o of t){let s=i+B(o);if(s>e&&i<n)r+=i>=e&&s<=n?o:" ".repeat(Math.min(s,n)-Math.max(i,e));if(i=s,i>=n)break}return r}function Wl(t){return t.reduce((e,n)=>e+B(n.text),0)}function Kl(t,e,n){let r=[],i=0;for(let o of t){let s=B(o.text),a=Math.max(e,i),c=Math.min(n,i+s);if(c>a)r.push({...o,text:d3(o.text,a-i,c-i)});i+=s}return r}function f3(t,e,n){return[...Kl(t,0,e),...n,...Kl(t,e+Wl(n),Wl(t))]}function h3(t,e){return t.map((n)=>{let r=e&&n.sgr?`${n.sgr}${n.text}${c3}`:n.text;return n.target?Vt(n.target,r):r}).join("")}function zl(t,e,n){return t.color?`${t.bg(e.selection)}${t.fg(e.foreground)}${t.bold(` ${n} `)}\x1B[39;49m`:`[${n}]`}function US(t){return t<A.length?A[t]:un[(t-A.length)%8]}function WS(t,e,n,r){let i=t.signature.includes(Tn[n])?"◆":e.color?"■":" ";return e.color?`${e.fg(t.list[n])}${i}${r}`:i}function KS(t,e,n,r,i){return r.has(n)?e.bold("✗"):t.changed(n)?e.color?`${Wp}●${i}`:"●":" "}function zS(t,e,n){return n?t.color?`${t.fg(e.cursor)}▌\x1B[39m `:"▌ ":" "}function m3(t,e,n,r,i,o){let s=r===t.slot(),a=s?e.fg(n.foreground):"\x1B[39m",c=US(r).padEnd(12),u=t.lch[r],l=`${zS(e,n,s)}${WS(t,e,r,a)} ${s?e.bold(c):c}${TS(u)} ${KS(t,e,r,o,a)}`,d=rt(l,i);return st({kind:"open",slot:r},s&&e.color?`${e.bg(n.selection)}${e.fg(n.foreground)}${d}\x1B[39;49m`:d)}var Up=8,DS=44;function sc(t){return t>=DS?16:11}function BS(t,e,n,r,i,o){let s=sc(i);if(!t.visible(r))return" ".repeat(s);let a=r===t.slot(),c=a&&e.color?e.fg(n.foreground):"\x1B[39m",u=t.lch[r],l=(p,b)=>p.toFixed(b).replace(/^0(?=\.)/,""),d=`${u.h.toFixed(0).padStart(3)}°`,f=i>=DS?`${l(u.l,2)} ${l(u.c,3)} ${d}`:`${l(u.l,2)} ${d}`,h=`${WS(t,e,r,c)} ${f}${KS(t,e,r,o,c)}`,m=a&&e.color?`${e.bg(n.selection)}${e.fg(n.foreground)}${h}\x1B[39;49m`:h;return st({kind:"open",slot:r},m)}function p3(t,e,n,r,i,o){let s=A.length+r,a=s+8,c=t.row===s,u=un[r].padEnd(Up),l=t.linkOf(a)!==void 0?e.dim("⇠"):" ";return`${st({kind:"open",slot:s},`${zS(e,n,c)}${c?e.bold(u):u}`)}${BS(t,e,n,s,i,o)}${l} ${BS(t,e,n,a,i,o)}`}function qS(t){return 14+2*sc(t)}function g3(t){let e=sc(t)>=16;return[[2," ANSI "],[2+Up,e?" Normal 0–7 ":" Normal "],[5+Up+sc(t),e?" Bright 8–15 ":" Bright "]]}function b3(t,e,n,r,i){let o=t.slot(),s=He(o),a=qS(i),c=a-2,u=` ${s.name}${o>=A.length?` · ${s.about}`:""} `,l=[` ${e.dim(sS(o))}`];if(o>=2){let f=Nv(r,o).filter((p)=>p.count>0),h=f.length>0?f.map((p)=>`${p.name} ${p.count}`).join(" · "):"none",m=Kt("w",t.where?zl(e,n,"w where"):e.dim("w where"));l.push(vt(` ${e.dim("Shown in")} ${h}`,`${m} `,c))}let d=o-A.length;if(d===0||d===7||d===8||d===15){let f=t.lch[o].l,h=t.lch[0].l,m=t.lch[1].l,p=Math.abs(f-h)<=Math.abs(f-m)?"the background":"the text";l.push(` ${e.dim(`L ${f.toFixed(2)} reads near ${p}`)}`)}return[e.dim(Xt(a,"top",[[2,u]])),...l.map((f)=>ln(e,f,a)),e.dim(Xt(a,"bottom"))]}function Gl(t,e){return lr-t*(lr-ec)/(e*2-1)}function YS(t,e,n,r,i){let o=Gl(Math.max(0,Math.min(e*2-1,t*2-0.5)),e),s=Math.max(0,Math.min(1,(n-0.5)/Math.max(1,r-1)));return{lightness:o,chroma:s*nc(o,i)}}function w3(t,e,n,r,i,o){let s=(d)=>{let f=Math.max(0,Math.min(i*2-1,Math.round((lr-d.l)/(lr-ec)*(i*2-1))));return{row:Math.floor(f/2),col:Math.round(_l(d.l,d.c,d.h)*(r-1))}},{row:a,col:c}=s(e),u=o?s(o):{row:-1,col:-1},l=(d,f)=>{return`#${(An(d,f*nc(d,e.h),e.h)??[0,0,0]).map((m)=>m.toString(16).padStart(2,"0")).join("")}`};return Array.from({length:i},(d,f)=>{let h="";for(let m=0;m<r;m++){if(f===a&&m===c){h+=t.color?`${t.bg(n)}${t.fg(Qa(n))}●\x1B[39;49m`:"●";continue}let p=m/Math.max(1,r-1);if(f===u.row&&m===u.col){let b=l(Gl(f*2+1,i),p);h+=t.color?`${t.bg(b)}${t.fg(Qa(b))}○\x1B[39;49m`:"○";continue}h+=t.color?`${t.fg(l(Gl(f*2,i),p))}${t.bg(l(Gl(f*2+1,i),p))}▀\x1B[39;49m`:"·"}return st({kind:"plane",row:f,rows:i},h)})}function $3(t,e,n){if(t.format==="rgb"){let[r,i,o]=[1,3,5].map((s)=>Number.parseInt(e.slice(s,s+2),16));return`rgb(${r} ${i} ${o})`}if(t.format==="oklch")return`oklch(${n.l.toFixed(3)} ${n.c.toFixed(3)} ${n.h.toFixed(0)})`;return e}function JS(t,e,n){let r=t.slot(),i=t.lch[r],s=Hl(t,r,i).filter((c)=>c.ok===!1||c.text.startsWith("Chroma ○")).flatMap((c)=>wt(c.text,n-2).map((u,l)=>`${l===0?c.ok===!1?e.bold("✗"):e.dim("○"):" "} ${u}`)),a=Tl(t,r);return[...s.slice(0,3),...a?[e.dim(a)]:[]]}function VS(t,e,n){let r=t.pair(t.slot());if(!r)return;let i=t.slot()>=r.bright,o=US(i?r.normal:r.bright).toLowerCase(),s=`${r.lift>=0?"+":""}${r.lift.toFixed(2)}`,a=n-9,c=i?r.on?[`⇠ Linked to ${o} · L ${s}`,`⇠ ${o} · L ${s}`,`⇠ ${o}`]:[`Not linked to ${o}`,"Not linked"]:r.on?[`Bright follows · L ${s}`,"Bright follows"]:["Its bright moves on its own","Moves on its own"],u=c.find((l)=>B(l)<=a)??c[c.length-1]??"";return vt(e.dim(u),Kt("l",`${e.bold("l")} ${e.dim(r.on?"unlink":"link")}`),n)}function ZS(t,e,n){let r=t.slot(),i=t.list[r],o=t.lch[r],s=t.typing!==void 0?e.bold(`${t.typing}▏`):Kt("#",e.bold($3(t,i,o))),a=t.start[r],c=e.color?`${e.fg(a)}■\x1B[39m `:"";return vt(s,a!==i?e.dim(`was ${c}${a}`):"",n)}function k3(t,e,n,r,i){let o=t.slot(),s=t.lch[o],a=t.list[o],c=r-4,u=e.dim("│"),l=(x)=>`${u} ${rt(x,c)} ${u}`,d=VS(t,e,c),f=6+(d?1:0),h=JS(t,e,c).slice(0,Math.max(0,i-f-Ul)),m=Math.max(Ul,Math.min(u3,i-f-h.length)),p=" L × C ",b=` H ${s.h.toFixed(0)}° `,$=Math.max(0,r-4-B(" L × C ")-B(b)),k=[`${e.dim("╭─")}${e.dim(" L × C ")}${e.dim("─".repeat($))}${e.dim(b)}${e.dim("─╮")}`],v=t.origin();for(let x of w3(e,s,a,c,m,v?.lch))k.push(l(x));let S=cn[2];k.push(l(st({kind:"bar",channel:2},Xa(e,Fl(s,S,c),eo(s.h,S.min,S.max,c),t.mode==="tune"&&t.channel===2,v&&eo(v.lch.h,S.min,S.max,c))))),k.push(l(Al(e,t,Math.max(8,c-11),v?.ratio)));let M=(x,H)=>st({kind:"format",format:H},t.format===H?zl(e,n,x):e.dim(` ${x} `));if(k.push(l(`${M("Hex","hex")} ${M("RGB","rgb")} ${M("OKLCH","oklch")}`)),k.push(l(ZS(t,e,c))),d)k.push(l(d));for(let x of h)k.push(l(x));let I=rt(` ${GS} `,r-4,!1);return k.push(`${e.dim("╰─")}${e.dim(I)}${e.dim("─".repeat(Math.max(0,r-4-B(I))))}${e.dim("─╯")}`),{lines:k.map((x)=>st({kind:"picker"},x))}}var oc=[["Hex","hex"],["RGB","rgb"],["OKLCH","oklch"]];function y3(t,e,n,r,i){let o=t.lch[t.slot()],s=r-2,a=VS(t,e,s),c=6+(a?1:0),u=JS(t,e,s).slice(0,Math.max(0,i-c-Ul)),l=Math.max(Ul,Math.min(l3,i-c-u.length)),d=(x)=>` ${rt(x,s)} `,f=[d(vt(e.dim("L × C"),e.dim(`H ${o.h.toFixed(0)}°`),s))];for(let x=0;x<l;x++)f.push(d(st({kind:"plane",row:x,rows:l}," ".repeat(s))));let h=f.length;f.push(d(st({kind:"bar",channel:2}," ".repeat(s))));let m=f.length,p=t.mode==="tune"&&t.channel===Qt,b={kind:"channel",channel:Qt},$=`${t.ratio().toFixed(2)}:1`.padStart(8),k=s-11;f.push(d(`${st(b,p?e.bold("◐"):e.dim("◐"))} ${st({kind:"bar",channel:Qt}," ".repeat(k))} ${st(b,p?e.bold($):e.dim($))}`));let v=f.length,S=Math.floor(s/oc.length);f.push(d(oc.map(([x,H],N)=>{let F=N===oc.length-1?s-S*N:S,W=Math.floor((F-B(x))/2),_=`${" ".repeat(W)}${x}${" ".repeat(F-W-B(x))}`,X=t.format===H?e.color?`${e.fg(n.cursor)}${e.bold(_)}\x1B[39m`:`[${x}]`.padEnd(F):e.dim(_);return st({kind:"format",format:H},X)}).join("")));let M=f.length;f.push(d(` ${ZS(t,e,s-2)} `));let I=a?f.length:void 0;if(a)f.push(d(a));for(let x of u)f.push(d(x));return f.push(d(e.dim(GS))),{lines:f.map((x)=>st({kind:"picker"},x)),parts:{plane:{row:1,col:1,cols:s,rows:l},hue:{row:h,col:1,cols:s,rows:1},contrast:{row:m,col:3,cols:k,rows:1},tabs:{row:v,col:1,cols:s,rows:1},field:{row:M,col:1,cols:s,rows:1},divider:I}}}function v3(t,e,n,r,i,o){let s=t.slot(),a=t.lch[s],c=t.list[s],u=(h)=>({row:r+h.row,col:i+h.col,cols:h.cols,rows:h.rows}),l=(h)=>Math.log(Math.max(1,h))/Math.log(21),d=t.partner().floor,f=t.origin();return{panel:{row:r,col:i,cols:n.plane.cols+2,rows:o},ground:e.background,ink:e.foreground,accent:e.cursor,plane:{...u(n.plane),h:a.h,l:a.l,c:a.c},hue:{...u(n.hue),h:a.h,color:c},contrast:{...u(n.contrast),at:l(t.ratio()),floor:d===void 0?void 0:l(d),color:c,lit:t.channel===Qt},tabs:{...u(n.tabs),active:oc.findIndex(([,h])=>h===t.format),count:oc.length},field:u(n.field),divider:n.divider===void 0?void 0:r+n.divider,origin:f&&{...f.lch,color:f.hex,at:l(f.ratio)}}}function S3(t,e,n,r,i,o,s,a){let u=o??1,l=s-1-u,d=u-2,f=12+2*sc(r)-Gp,h=a?y3:k3,m=h(t,e,n,f,Number.POSITIVE_INFINITY),p=m.lines.length<=l||m.lines.length>d&&l>=d,b=p?l:d,$=m.lines.length<=b?m:h(t,e,n,f,b),k=p?u+1:u-$.lines.length,v=Array.from({length:s},(S,M)=>i[M]??"");return $.lines.forEach((S,M)=>{let I=k+M;if(I>=0&&I<s)v[I]=N$(v[I],Gp,S)}),{lines:v,art:$.parts&&v3(t,n,$.parts,k,Gp,$.lines.length)}}function E3(t,e,n,r,i){let o=r.side,s=Lp(t),a=t.changedOnly?e.color?`${Wp}●\x1B[39m`:"●":" ",c=s===0?e.dim("Gate ✓"):e.bold(`Gate ✗ ${s}`),u=vt(` ${e.bold("Colors")} ${c}`,Kt("m",`${t.changedOnly?e.bold("⧩ changed"):e.dim("⧩ changed")}${a} `),o),l=i-1,d=t.misses(),f=qS(o),h=[],m,p=A.map((k,v)=>v).filter((k)=>t.visible(k));if(p.length>0){h.push(e.dim(Xt(f,"top",[[2," Base "]])));for(let k of p){if(k===t.slot())m=h.length;h.push(ln(e,m3(t,e,n,k,f-2,d),f))}}let b=un.map((k,v)=>v).filter((k)=>t.visible(A.length+k)||t.visible(A.length+k+8));if(b.length>0){h.push(e.dim(Xt(f,p.length>0?"mid":"top",g3(o))));for(let k of b){if(t.row===A.length+k)m=h.length;h.push(ln(e,p3(t,e,n,k,o,d),f))}}if(p.length>0||b.length>0)h.push(e.dim(Xt(f,"bottom")));if(t.visible(t.slot()))h.push(...b3(t,e,n,r,o));let $=tc(e,t,l-h.length,f);return h.push(...Array.from({length:Math.max(0,l-h.length-$.length)},()=>""),...$),{lines:[u,...h.slice(0,l)],anchor:m===void 0?void 0:m+1}}function M3(t,e,n,r){let o=`${e.fg(t.list[2])}◆${e.color?"\x1B[39m":""} ${e.bold(t.options.title)} ${e.dim(`· ${t.options.name}`)}`,s=t.dirty(),a=t.changes(),c=e.color?`${Wp}●\x1B[39m`:"●",u=s?`${c} ${e.dim(a>0?`unsaved · ${a} changed`:"unsaved")}`:"",l=s?`${Kt("R",e.dim("Reset"))} ${Kt("s",zl(e,n,"Save"))}`:"",d=[o,u,l].filter(Boolean).join(" "),f=(p,b,$)=>Kt(p,$?zl(e,n,b):e.dim(b)),m=[...t.options.find||t.pictures>0?[f("b",`▣ ${t.pictures>0?`${t.pictures} `:""}Picture`,t.pic&&(t.pictures>0||!!t.options.find))]:[],f("i","⌖ Inspect",t.inspect),`${f("u","↶",!1)} ${f("ctrl+r","↷",!1)}`,f("I","Import ▾",t.menu==="import"),...t.options.exports?[f("x","Export ▾",t.menu==="export")]:[]].join(" ");return vt(d,`${m} `,r)}var x3={kind:"open",slot:0};function O3(t,e,n){return t.color?`${n?"\x1B[49m":t.bg(e.background)}${t.fg(e.foreground)}`:""}function I3(t,e,n,r,i,o){let s=qa(r),a=O3(e,n,o),c=t.slot();return Array.from({length:r.rows},(u,l)=>{let d=s[l],f=[{text:" ",sgr:a}];if(d)d.forEach((p,b)=>{let $=i&&i.pane===r.id&&i.line===l&&i.run===b,k=e.color?$?`${a}${e.bg(n.foreground)}${e.fg(n.background)}`:`${a}${Ll(e,n,p.role,cp(p.role,c))}${t.where&&!ap(p.role,c)?"\x1B[2m":""}`:"";f.push({text:p.text,sgr:k,target:{kind:"run",spot:{pane:r.id,line:l,run:b}}})});let h=Kl(f,0,r.width-1),m=r.width-Wl(h);return m>0?[...h,{text:" ".repeat(m),sgr:a,target:x3}]:h})}function R3(t,e,n){let r=t.slotsHere();if(!r)return;let i=e.color?`${e.bg(n.background)}${e.fg(n.foreground)}`:"",o=e.color?`${i}\x1B[2m`:"",s=(d)=>({text:d,sgr:o}),a="┌ Slots here ",c="└ enter its slot · esc ",u=[[s(`${a}${"─".repeat(ic-B(a)-1)}┐`)]],l=[["text",r.text]];if(r.ground!==r.text)l.push(["ground",r.ground]);for(let[d,f]of l){let h={kind:"open",slot:f},m=t.shown()[f],p=f<A.length?"":He(f).about;u.push([{text:"│ ",sgr:o,target:h},{text:d.padEnd(7),sgr:o,target:h},{text:"■",sgr:e.color?`${i}${e.fg(m)}`:"",target:h},{text:" ",sgr:i,target:h},{text:He(f).name.slice(0,14).padEnd(14),sgr:i,target:h},{text:p.padEnd(ic-27),sgr:o,target:h},{text:" │",sgr:o,target:h}])}return u.push([s(`${c}${"─".repeat(ic-B(c)-1)}┘`)]),u.map((d)=>Kl(d,0,ic))}function P3(t,e,n){if(!t.menu)return;let r=t.menu==="export"?["Share code","Add command","Palette file"]:["Another palette","A share code"],i=24,o=e.color?`${e.bg(n.background)}${e.fg(n.foreground)}`:"",s=e.color?`${o}\x1B[2m`:"",a=t.menu==="export"?"Copy ":"Take from ",c=[[{text:`┌ ${a}${"─".repeat(Math.max(0,i-3-a.length))}┐`,sgr:s}]];return r.forEach((u,l)=>{let d=l===t.entry,f={kind:"entry",index:l};c.push([{text:"│",sgr:s},{text:` ${d?"▌":" "} ${u.padEnd(i-6)}`,sgr:d&&e.color?`${e.bg(n.selection)}${e.fg(n.foreground)}\x1B[1m`:o,target:f},{text:"│",sgr:s}])}),c.push([{text:`└${"─".repeat(i-2)}┘`,sgr:s}]),c}var N3=["#ff5f57","#febc2e","#28c840"];function A3(t,e,n,r){let i=e.color?`${e.bg(QS(n))}${e.fg(n.foreground)}`:"",o=[{text:" ",sgr:i}];for(let u of N3)o.push({text:"●",sgr:e.color?`${i}${e.fg(u)}`:""},{text:" ",sgr:i});o.push({text:" ",sgr:i});let s=Pv(),a=(t.scene%s.length+s.length)%s.length;s.forEach((u,l)=>{let d={kind:"scene",scene:l};o.push(l===a?{text:` ${u} `,sgr:e.color?`${i}${e.bg(bt(n.background,n.foreground,0.3))}\x1B[1m`:"",target:d}:{text:` ${u} `,sgr:e.color?`${i}\x1B[2m`:"",target:d},{text:" ",sgr:i})});let c="⇧←→ ";return[...o,{text:" ".repeat(Math.max(0,r-Wl(o)-B(c))),sgr:i},{text:c,sgr:e.color?`${i}\x1B[2m`:""}]}function QS(t){return bt(t.background,t.foreground,0.14)}function T3(t,e,n){let{frame:r}=n,i=bt(e.background,e.foreground,0.45),o=t.color?`${t.bg(XS(e))}${t.fg(i)}`:"",s=t.color?`${t.bg(QS(e))}${t.fg(i)}`:"",a=(u,l)=>u===r.row||u===r.row+r.rows-1||l===r.col||l===r.col+r.cols-1,c=[];for(let[u,l]of Lv(n.rules))for(let[d,f]of l)c.push([u,d,[{text:f,sgr:a(u,d)?o:s}]]);return c}function XS(t){return bt(t.background,t.foreground,0.08)}function tE(t,e){return Da(t,e,0)?.inner}function eE(t,e,n,r,i={}){let o=Da(e,n,t.scene);if(!o)return;let s=Ms(r),a=t.shown(),c=Ut(a),u=Ut(i.chrome?[...i.chrome]:t.list),l=E3(t,s,u,o,n-1),d=t.mode==="tune"?S3(t,s,u,o.side,l.lines,l.anchor,n-1,r&&i.art===!0):{lines:l.lines,art:void 0},f=d.lines,h=i.behind===!0,m=t.inspect?bl(o,t.spot):void 0,p=s.color?s.bg(XS(u)):"",b=Array.from({length:n-3},()=>[{text:" ".repeat(o.width),sgr:p}]),$=(N,F,W)=>{let _=N-2;if(_>=0&&_<b.length)b[_]=f3(b[_],F,W)},k=o.side+1;for(let[N,F,W]of T3(s,u,o))$(N,F-k,W);for(let N of o.tiles)I3(t,s,c,N,m,h).forEach((F,W)=>{$(N.row+W,N.col-k,F)});$(o.title.row,o.title.col-k,A3(t,s,u,o.title.cols));let v=m?R3(t,s,c):void 0;if(m&&v){let N=o.tiles.find((W)=>W.id===m.pane),F=qa(N)[m.line]?.[m.run];if(F){let W=Math.max(0,Math.min(N.col-k+1+F.col,o.width-ic)),_=N.row+m.line,X=_+1,z=X+v.length-2>n-2?_-v.length:X;v.forEach((xt,et)=>{$(z+et,W,xt)})}}let S=P3(t,s,c);if(S){let N=Math.max(0,o.width-24-(t.menu==="import"?12:2));S.forEach((F,W)=>{$(2+W,N,F)})}let M=M3(t,s,u,o.width),I=s.dim("─".repeat(o.width)),x=s.dim("│"),H=[];for(let N=0;N<n-1;N++){let F=N===0?M:N===1?I:h3(b[N-2]??[],r);H.push(`${rt(f[N]??"",o.side)}${x}${F}`)}return{lines:H,art:d.art}}var nE=80,rE=24,Kp=11;function H3(t,e,n,r){let i=Hp(e,n);return cn.map((o,s)=>{let a=e.mode==="tune"&&s===e.channel,c=n[o.key],u=`${c.toFixed(o.digits)}${o.wraps?"°":""}`.padStart(6),l=Xa(t,Fl(n,o,r),eo(c,o.min,o.max,r),a,o.key==="c"&&i!==void 0?eo(i,o.min,o.max,r):void 0),d=o.key.toUpperCase(),f={kind:"channel",channel:s};return`${st(f,a?t.bold(`▸${d}`):t.dim(` ${d}`))} ${st({kind:"bar",channel:s},l)} ${st(f,a?t.bold(u):t.dim(u))}`})}function C3(t,e){if(e.mode!=="tune"||e.slot()<A.length)return[];let n=Ut(e.list),r=vs.map((o)=>st({kind:"scope",scope:o},o!==e.scope?t.dim(o):t.color?`${t.bg(n.selection)}${t.fg(n.foreground)} ${o} \x1B[39;49m`:`[${o}]`)),i=e.scoped().length;return[`${t.dim("Scope")} ${r.join(" ")}`,t.dim(i>1?`${i} slots move by the same step, each keeping its own color`:"This slot moves alone · a widens it")]}var iE={background:(t)=>t.background,foreground:(t)=>t.foreground,hue:(t)=>t.cursor,tint:(t)=>t.background,lightness:(t)=>t.ansi[4],chroma:(t)=>t.ansi[1],brights:(t)=>t.ansi[12]};function L3(t){return`oklch ${t.l.toFixed(3)} ${t.c.toFixed(3)} ${t.h.toFixed(0)}°`}function F3(t,e){return`${t.dim("oklch")} ${t.bold(`${e.l.toFixed(3)} ${e.c.toFixed(3)} ${e.h.toFixed(0)}°`)}`}function j3(t,e,n,r=to){let i=e.misses(),o=Ut(e.list),s=e.slot(),a=(d)=>{let f=e.list[d],h=d===s,m=e.signature.includes(Tn[d])?"◆":t.color?"■":" ",p=i.has(d)?"✗":e.tone&&e.changed(d)?"●":" ",$=`${t.color?`${t.fg(f)}${m}${h?t.fg(o.foreground):"\x1B[39m"} `:`${m} `}${Cl(e.lch[d])}${p}`;if(!h)return st({kind:"slot",slot:d},` ${$}`);return st({kind:"slot",slot:d},t.color?`${t.bg(o.selection)}${t.fg(o.foreground)} ${$}\x1B[39;49m`:`›${$}`)},c=(d)=>d?t.color?`${t.fg(o.cursor)}▌\x1B[39m `:"▌ ":" ",u=[t.dim(Xt(r,"top",[[2," Base "]]))];for(let d=0;d<A.length;d++){let f=d===e.row,h=A[d].padEnd(10);u.push(ln(t,`${st({kind:"slot",slot:d},`${c(f)}${f?t.bold(h):h}`)}${a(d)}`,r))}u.push(t.dim(Xt(r,"mid",[[2," ANSI "],[12," Normal 0–7 "],[29," Bright 8–15 "]])));for(let d=A.length;d<ar;d++){let f=d===e.row,h=un[d-A.length].padEnd(10),m=st({kind:"slot",slot:d+(e.col===1?8:0)},`${c(f)}${f?t.bold(h):h}`);u.push(ln(t,`${m}${a(d)}${a(d+8)}`,r))}u.push(t.dim(Xt(r,"bottom")));let l=tc(t,e,n-u.length,r);return[...u,...Array.from({length:Math.max(0,n-u.length-l.length)},()=>""),...l]}function _3(t,e,n){let r=Ut(e.list),i=[` ${t.dim("Seeds")}`];Ji.forEach((o,s)=>{let a=s===e.field,c=e.seeds[o.key],u=Array.from({length:Kp},(b,$)=>{let k=o.min+(o.max-o.min)*$/(Kp-1);return iE[o.key](ni({...e.seeds,[o.key]:k}))}),l=Xa(t,u,eo(c,o.min,o.max,Kp),a),d=`${c.toFixed(o.digits)}${o.wraps?"°":""}`.padStart(6),f=iE[o.key](r),h=a?t.color?`${t.fg(r.cursor)}▌\x1B[39m `:"▌ ":" ",m=o.label.padEnd(17),p={kind:"field",field:s};i.push(`${st(p,`${h}${a?t.bold(m):m}`)}${st({kind:"seed",field:s},l)}${st(p,` ${d} ${t.color?`${t.fg(f)}■\x1B[39m `:""}${t.dim(f)}`)}`)}),i.push("");for(let o of wt("Seven seeds grow all twenty colors, each accent on the hue its ANSI role reads as — whatever the seeds, they pass the gate. enter moves on to tune each slot, and the seeds stay behind.",to-4))i.push(` ${t.dim(o)}`);return i.push(""),[...i,...tc(t,e,n-i.length,to)]}function cE(t,e,n,r,i,o){let s=Dt.indexOf(Ri(i)),a=Dt.map((l,d)=>st({kind:"scene",scene:d},d!==s?t.dim(l.name):t.color?`${t.bg(e.selection)}${t.fg(e.foreground)} ${l.name} \x1B[39;49m`:`[${l.name}]`)).join(" "),c=[vt(a,t.dim("⇧←→"),n)],u=`${t.bg(e.background)}${t.fg(e.foreground)}`;for(let l of Ri(i).lines){let d=qo(l,n-2);if(!d)continue;if(c.length>=r)break;let f=t.color?d.map(([h,m])=>`${Ll(t,e,m,HS(o,m))}${h}\x1B[0m${u}`).join(""):d.map(([h])=>h).join("");c.push(`${u} ${rt(f,n-2)} ${t.color?"\x1B[0m":""}`)}return c}var B3=["Bk","Rd","Gr","Ye","Bl","Ma","Cy","Wh"];function oE(t,e,n,r,i,o,s){let a=(i-o)/(s-1),c=uE(e),u=Ut(n),l=(d)=>Math.min(s-1,Math.max(0,Math.round((i-r(Mt(d)))/a)));return Array.from({length:s},(d,f)=>{let m=`${(f%2===0?(i-a*f).toFixed(i>=1?1:2).replace(/^0(?=\.\d\d)/,""):"").padStart(4)} ${t.dim(f%2===0?"┤":"│")}`;for(let p=0;p<8;p++){let b=[" "," "," "," "," "],$=u.ansi[p],k=u.ansi[p+8],v=l($)===f,S=l(k)===f,M=(x)=>{if(x===1&&v)return t.color?`${t.fg($)}●`:"●";if(x===3&&S)return t.color?`${t.fg(k)}○`:"○";return b[x]},I=[0,1,2,3,4].map(M).join("");m+=c.has(p)?t.color?`${t.bg(u.selection)}${I}\x1B[39;49m`:I:`${I}${t.color?"\x1B[39m":""}`}return m})}function uE(t){let e=t.mode==="tune"?t.scoped():[t.slot()];return new Set(e.filter((n)=>n>=A.length).map((n)=>(n-A.length)%8))}function G3(t,e){let n=uE(e);return` ${B3.map((r,i)=>n.has(i)?t.bold(` ${r} `):t.dim(` ${r} `)).join("")}`}function U3(t,e){let n=Ut(e),r=Array.from({length:40},(o,s)=>{let a=s*9+4.5,c=-1,u=999;for(let[l,d]of Object.entries(ke)){let f=ye(a,d.center);if(f<=d.width&&f<u)u=f,c=Number(l)}return c<0?" ":t.color?`${t.fg(n.ansi[c])}─`:"─"}).join(""),i=(o,s)=>{let a=Array.from({length:40},()=>" ");for(let c of Object.keys(ke).map(Number)){let u=n.ansi[c+o],l=Math.min(39,Math.round(Mt(u).h/9));a[l]=t.color?`${t.fg(u)}${s}\x1B[39m`:s}return` ${a.join("")}`};return[`${t.bold("Hue")} ${t.dim("0° 90° 180° 270° 360°")}`,`${t.dim("bands")} ${r}${t.color?"\x1B[39m":""}`,i(0,"●"),i(8,"○")]}function W3(t,e,n){let r=cr(n,e.signature,e.waive),i=(a)=>He(A.length+a).name,o=(a)=>Mt(n[A.length+a]).h.toFixed(0),s=[...Gn(r).filter(({gap:a})=>a>25).map(({normal:a,gap:c})=>`${i(a)} ${o(a)}° → bright ${o(a+8)}° · ${c.toFixed(0)}° apart · ≤ 25°`),...mr(r).map(({slot:a,over:c})=>{let u=ke[mn(a)];return`${i(a)} ${o(a)}° · ${c.toFixed(0)}° outside ${u.name} ${u.center}±${u.width}°`}),...Un(r).map(([a,c])=>`${i(a)} and ${i(c).toLowerCase()} read as one color`)];return s.length>0?s.map((a)=>`${t.bold("✗")} ${a}`):[t.dim("✓ Every accent keeps its role and its bright")]}function sE(t,e,n,r,i){let o=e.shown(),s=Math.max(...o.slice(A.length).map((u)=>Mt(u).c)),a=Math.max(0.2,Math.ceil(s/0.05)*0.05),c=[vt(t.bold("Lightness"),t.dim("● normal ○ bright"),n),...oE(t,e,o,(u)=>u.l,1,0.3,8),G3(t,e)];if(i)c.push("",t.bold("Chroma"),...oE(t,e,o,(u)=>u.c,a,0,5),"",...U3(t,o));return[...c,...W3(t,e,o)].slice(0,r)}function K3(t,e,n){let r=Ut(e.list),i=(o,s)=>st({kind:"view",view:s},e.view!==s?t.dim(` ${o} `):t.color?`${t.bg(r.selection)}${t.fg(r.foreground)}${t.bold(` ${o} `)}\x1B[39;49m`:`[${o}]`);return vt(`${i("Slot","slot")}${i("Relations","relations")}`,Kt("g",`${t.bold("g")} ${t.dim("switch")}`),n)}function z3(t,e,n,r){let i=e.slot(),o=e.list[i],s=e.lch[i],a=e.start[i],{name:c,about:u}=He(i),l=e.signature.includes(Tn[i]),d=Math.max(8,Math.min(64,n-12));if(e.view==="relations"&&e.mode!=="tune")return[K3(t,e,n),"",...sE(t,e,n,r-2,!0)];let f=i>=A.length?t.dim("Uses underlined below"):l?t.dim("◆ signature"):"",h=[vt(`${t.bold(c)} ${t.dim(u)}`,e.view==="relations"?"":f,n),""],m=t.color?`${t.fg(o)}${"█".repeat(8)}\x1B[39m `:"",p=e.typing!==void 0?`${t.bold(`${e.typing}▏`)}`:void 0,[b,$,k]=nt(o);if(h.push(`${m}${p??F3(t,s)}`),h.push(`${m}${t.dim(`${o} · rgb ${b} ${$} ${k}`)}`),e.view!=="relations"){let I=t.color?`${t.fg(a)}■\x1B[39m `:"";h.push(`${m}${a!==o?t.dim(`was ${I}${L3(e.lchOf(a)).slice(6)} · ${a}`):t.dim("as it opened")}`)}h.push(""),h.push(...H3(t,e,s,d),Al(t,e,d));let v=C3(t,e);if(v.length>0)h.push(...v);if(e.view==="relations")return h.push("",...sE(t,e,n,r-h.length-1,!1)),h;h.push("");for(let I of Hl(e,i,s))wt(I.text,n-2).forEach((x,H)=>{h.push(`${H===0?Cp(t,I.ok):" "} ${I.ok===!1?x:t.dim(x)}`)});let S=Tl(e,i);if(S)h.push(t.dim(` ${S}`));let M=r-h.length-1;if(M>=3)h.push("",...cE(t,Ut(e.shown()),n,M,e.scene,i));return h}function D3(t,e,n,r){return[vt(`${t.bold("Sample")} ${t.dim("what the seeds grow")}`,"",n),"",...cE(t,Ut(e.list),n,r-2,e.scene,-1)]}var q3=[["Slots","↑↓ slot · ←→ normal or bright · home end · pgup the base colors · pgdn the ANSI ones · n N the next and last miss"],["Tune","enter or tab opens the picker over the list, under the slot · ↑↓ lightness · ←→ chroma · ⇧←→ hue by 5, , . by 1 · pgup pgdn lightness ×5 · tab ◐ contrast · home end the ends · 0-9 jump · enter keeps · esc undoes · a click outside it keeps"],["Contrast","◐ moves lightness until the ratio to the color it is read against changes · home the gate’s floor · 1-9 that ratio"],["Chroma","stops at the sRGB edge · what lightness or hue takes away comes back while you tune, where it fits again (○)"],["Scope","a while tuning: this, pair, normals, brights or accents — the slots in it move by the same step, each keeping its own color"],["Relations","g shows the lightness, chroma and hue of every ANSI color at once, and the relations the gate checks"],["Sample","⇧←→ another tab · the slot under the cursor is underlined where it is used · w dims the rest"],["Inspect","i, or a click on the sample, finds the slots a spot uses · ←→↑↓ move · enter goes to the slot · esc leaves"],["Link","l makes a bright follow its normal — tuning the normal moves it, tuning the bright alone unlinks it · = snaps it to its normal"],["Filter","m only the slots that changed · n and N walk the gate misses listed under the slots"],["Export","x copies the share code, an add command or the palette file · I takes colors from another palette or a share code"],["Type","# then #rrggbb, rgb(r g b) or oklch(l c h) — a paste works too"],["Slot","c copies · v pastes · r puts it back as it opened, R all of them · = the bright follows its normal · * marks it a signature color"],["Palette","f moves the colors the gate misses · o takes another palette’s colors"],["Gate","✗ marks every slot whose own checks miss, and each miss names its slots"],["History","u undo · ctrl+r redo"],["Pictures","p finds one on the boorus, tried on in these colors · b shows or hides it behind the editor · drop a picture on the window, or paste one, its path or its link · ctrl+v takes the clipboard’s"],["Compare","space shows the colors you started from, on the terminal too"],["Save","s saves · esc cancels, asking first when something changed"]];function Y3(t,e,n){let r=[` ${t.bold("Help")}`,""];for(let[i,o]of q3.filter(([s])=>s!=="Pictures"||e.options.find))wt(o,n-16).forEach((s,a)=>{r.push(` ${t.bold((a===0?i:"").padEnd(11))} ${s}`)});return r}function J3(t,e,n,r){let i=e.choices(),o=e.options.palettes?.length??0,s=e.filter?`${t.bold(e.filter)}▏`:t.dim("type to filter"),a=[vt(` ${t.bold("Take colors from")} ${s}`,t.dim(`${i.length}/${o}`),n),""],c=r-2,u=Math.max(0,Math.min(e.pick-Math.floor(c/2),i.length-c)),l=Math.min(40,Math.max(12,...i.map((d)=>B(d.name))));if(i.slice(u,u+c).forEach((d,f)=>{let h=u+f===e.pick,m=d.colors,p=t.color?`${t.bg(m.background)} ${[...m.ansi].map((k)=>`${t.fg(k)}■`).join("")} ${t.fg(m.foreground)}Aa \x1B[0m`:"",b=h?"▌ ":" ",$=d.name.padEnd(l);a.push(st({kind:"choice",index:u+f},`${b}${h?t.bold($):$} ${p}`))}),i.length===0)a.push(` ${t.dim(`No palettes match '${e.filter}'`)}`);return a}var V3=new Set(["enter","s","?","g","a","i"]);function aE(t,e,n,r){let i=t.fg((r??e.list)[2]),o="EDIT",s="",a=[],c="";if(e.quitting)o="EDIT (QUIT)",s=e.added>0?`Discard changes and ${e.added} ${e.added===1?"picture":"pictures"}?`:"Discard changes?",a=[["y","discard"],["n","keep editing"]];else if(e.typing!==void 0)o="EDIT (TYPE)",s=t.dim("#rrggbb, rgb(r g b) or oklch(l c h)"),a=[["enter","set"],["ctrl+u","clear"]],c="esc back";else if(e.overlay==="keys")o="HELP",c="any key closes";else if(e.overlay==="open")o="EDIT (OPEN)",a=[["↑↓","palette"],["a-z","filter"],["enter","take its colors"]],c="esc close";else if(e.menu)o=e.menu==="export"?"EDIT (EXPORT)":"EDIT (IMPORT)",a=[["↑↓","item"],["enter","choose"]],c="esc close";else if(e.compare)o="EDIT (BEFORE)",s="The colors you started from",a=[["space","back to yours"]],c="esc back";else if(e.mode==="seeds")o="EDIT (SEEDS)",a=[["↑↓","seed"],["←→","step"],["⇧←→","×5"],["enter","tune the slots"],["o","open a palette"],["p","picture"],["?","keys"]],c="esc cancel";else if(e.mode==="tune")o="EDIT (TUNE)",a=[["↑↓","L"],["←→",e.channel===Qt?"ratio":"C"],["⇧←→","H"],["tab","◐"],...e.slot()>=A.length?[["a","scope"]]:[],[e.channel===Qt?"1-9":"0-9",e.channel===Qt?"ratio":"jump"],["#","type"],["enter","keep"]],c="esc undo";else if(e.inspect)o="EDIT (INSPECT)",a=[["←→↑↓","spot"],["tab","pane"],["enter","its slot"],["i","leave"]],c="esc leave";else a=[["↑↓","slot"],["←→","normal or bright"],["enter","tune"],["i","inspect"],["l","link"],["m","changed"],["g",e.view==="slot"?"relations":"slot"],...e.misses().size>0?[["n","next miss"]]:[],["#","type"],["f","fix"],["p","picture"],["b","picture layer"],["x","export"],["u","undo"],["s","save"],["?","keys"]],c="esc cancel";if(!e.options.find)a=a.filter(([d])=>d!=="p"&&d!=="b");if(!e.options.exports||!e.roomy)a=a.filter(([d])=>d!=="x");if(!e.roomy)a=a.filter(([d])=>d!=="i"&&d!=="m");if(e.notice)s=t.color?`\x1B[33m${e.notice}\x1B[39m`:e.notice,a=[];let u=t.color?`\x1B[7;1m${i} ${o} \x1B[0m `:`[${o}] `,l=c?Kt(c.split(" ")[0],`${t.bold(c.split(" ")[0])} ${t.dim(c.split(" ").slice(1).join(" "))}`):"";for(;;){let d=[s,...a.map(([m,p])=>Kt(m,`${t.bold(m)} ${t.dim(p)}`))].filter(Boolean),f=`${u}${d.join(" ")}`,h=-1;if(a.forEach(([m],p)=>{if(p>0&&!V3.has(m))h=p}),B(f)+B(c)+3<=n||h<0)return c?vt(f,l,n):rt(f,n);a=a.filter((m,p)=>p!==h)}}function Z3(t,e,n,r,i={}){let o=Ms(r);if(e<nE||n<rE){let p=[o.bold("ttheme palette editor"),`Needs ${nE}×${rE} — now ${e}×${n}`,o.dim("esc cancels")];return{lines:Array.from({length:n},(b,$)=>rt(p[$]??"",e)),art:void 0}}if(t.viewport(e,n),!t.overlay&&t.mode!=="seeds"){let p=eE(t,e,n,r,i);if(p)return{lines:[...p.lines,aE(o,t,e,i.chrome)],art:p.art}}let s=t.failing().length,a=s===0?"✓ Passes the gate":`✗ ${s} ${s===1?"miss":"misses"} in the gate`,c=t.pictures>0?o.dim(`▣ ${t.pictures} ${t.pictures===1?"picture":"pictures"} `):"",u=`${t.dirty()?`${o.color?"\x1B[33m●\x1B[39m":"●"} unsaved `:""}${c}${o.dim(a)}`,d=`${o.fg(t.list[2])}◆${o.color?"\x1B[39m":""} ${o.bold(t.options.title)} ${o.dim(`· ${t.options.name}`)}`,f=n-4,h;if(t.overlay==="keys")h=Y3(o,t,e);else if(t.overlay==="open")h=J3(o,t,e,f);else{let p=e-to-2,b=t.mode==="seeds"?_3(o,t,f):j3(o,t,f),$=t.mode==="seeds"?D3(o,t,p,f):z3(o,t,p,f);h=Array.from({length:f},(k,v)=>`${rt(b[v]??"",to)}${o.dim("│")} ${rt($[v]??"",p)}`)}let m=[vt(d,u,e),""];for(let p=0;p<f;p++)m.push(rt(h[p]??"",e));return m.push("",aE(o,t,e,i.chrome)),{lines:m,art:void 0}}var Q3=new Set(["tab","a","#","l","enter","esc"]),X3=new Set(["picker","plane","bar","channel","format","scope","open","slot"]);function t8(t){if(!t)return!0;return t.kind==="key"?!Q3.has(t.key):!X3.has(t.kind)}function e8(t,e,n){if(n.action==="wheel"){if(!n.sideways)t.scroll(n.wheel);return}if((n.action==="press"||n.action==="drag")&&n.button!=="left")return;if(n.action==="press"&&t.overlay==="keys"){t.press("esc");return}let r=e?.target;if(n.action==="press"&&t.mode==="tune"&&t.roomy&&!t.overlay&&t8(r))t.dismiss();if(!e||!r)return;let i=e.width>1?(e.exact.x-0.5)/(e.width-1):0;if(n.action==="release"){if(!e.inside)return;if(r.kind==="key")t.press(r.key);else if(r.kind==="entry")t.choose(r.index);else if(n.count===2&&r.kind==="slot"&&t.mode==="list")t.press("enter");else if(n.count===2&&r.kind==="choice"&&t.overlay==="open")t.press("enter");return}if(r.kind==="plane"){let o=YS(r.row+e.exact.y,r.rows,e.exact.x,e.width,t.lch[t.slot()].h);t.plane(o.lightness,o.chroma)}else if(r.kind==="bar")t.slide(r.channel,i);else if(r.kind==="seed")t.sow(r.field,i);else if(n.action!=="press")return;else if(r.kind==="slot")t.select(r.slot);else if(r.kind==="open")t.openSlot(r.slot);else if(r.kind==="run")t.point(r.spot);else if(r.kind==="entry")t.entry=r.index;else if(r.kind==="format")t.format=r.format;else if(r.kind==="channel")t.grip(r.channel);else if(r.kind==="scope")t.scopeTo(r.scope);else if(r.kind==="choice"){if(t.overlay==="open")t.pick=r.index}else if(t.typing===void 0&&!t.overlay&&!t.quitting){if(r.kind==="field"&&t.mode==="seeds")t.field=r.field;else if(r.kind==="view"&&t.mode!=="seeds")t.view=r.view;else if(r.kind==="scene")t.scene=r.scene}}var n8=[il,Pn,Qr,rr];async function lE(t,e){let n=new xp(t),r=e.backdrop,i=e.layer,o=(a)=>n.typing===void 0&&vl(a),s=e.hosted?{modes:[rr,...Xr()],assume:[Pn,Qr],burst:o}:{modes:[...n8,...Xr()],burst:o};return ti(s,async(a)=>{let c=!1,u=!1,l=new Map,d=new Gm,f=await a.ask(`${kh(nn,"")}${Xr().length>0?z1:""}\x1B[c`,(S)=>{if(S.kind==="color"){l.set(S.code,S.value);return}return d.see(S)},1000);if(f?.cell)a.pixels(f.cell);let h=dk(l),m=h.map((S,M)=>S??n.start[M]),[p,b]=m;if(!h[3])m[3]=bt(p,b,0.2);let $=new Gi({write:(S)=>a.write(S),view:()=>{if(c)return;let{lines:S,art:M}=Z3(n,a.cols,a.rows,e.color,{behind:n.pic&&r?.laid===!0,art:i?.ready===!0,chrome:m});return{lines:S,after:()=>`${(n.pic?r?.draw(n.shown(),n.signature,n.waive,a.cols,a.rows,tE(a.cols,a.rows)):r?.clear())??""}${i?.draw(M)??""}`}}}),k=(S=!1)=>{if(S)$.soon();else $.request()},v=async(S)=>{let M=t.find;if(!M)return;c=!0,a.write(`${r?.clear()??""}${i?.clear()??""}`);try{n.found(await M(n.edited(),S))}catch(I){n.notice=I instanceof Error?I.message:String(I)}if(u)return;c=!1,r?.load(),$.reset(Ti),k()};if(a.write(Ti),a.onResize(()=>{r?.resized(),a.write(i?.clear()??""),$.reset(Ti),$.request()}),r)r.load(),r.ready=()=>$.request();if(r||i){let S=new Ta;a.ask(nl,(M)=>S.see(M),1000).then((M)=>{if(M)r?.measured(M),i?.measured(M);$.request()})}k();try{let{edited:S}=await a.loop((M)=>{if(c)return;if(M.kind==="paste")n.paste(M.text);else if(M.kind==="key")n.press(M.key);else if(M.kind==="mouse")e8(n,$.point(M),M);if(n.copied!==void 0)a.write(`\x1B]52;c;${Buffer.from(n.copied).toString("base64")}\x07`),n.copied=void 0;if(n.result)return{edited:n.result==="saved"?n.edited():void 0};let I=n.wants;if(I)n.wants=void 0,v(I.start);return},()=>{if(!c)k(!0)});return S}finally{u=!0,$.stop(),a.write(`${r?.close()??""}${i?.clear()??""}`)}})}import{spawn as g8}from"node:child_process";import{createHash as ME}from"node:crypto";import{existsSync as cc,mkdirSync as b8,mkdtempSync as w8,readFileSync as $8,rmSync as Dl}from"node:fs";import{homedir as k8,tmpdir as y8}from"node:os";import{basename as v8,dirname as S8,join as Cn}from"node:path";import{pathToFileURL as hE}from"node:url";import{existsSync as r8,readFileSync as i8,statSync as o8}from"node:fs";import{join as dE}from"node:path";function s8(t,e){try{return JSON.parse(i8(dE(Ve(t),e),"utf8"))}catch{return{}}}function a8(t,e,n){L(dE(Ve(t),e),`${JSON.stringify(n)}
|
|
713
|
+
`)}class zp{caches=new Map;unsaved=new Set;owners=new Map;crediting=new Map;inflight=new Map;home;catalog;entry;signal;credited;constructor(t){this.home=t.home,this.catalog=t.catalog,this.entry=t.entry,this.signal=t.signal,this.credited=t.credited}matesOf(t,e){return this.owners.get(t.key)?.get(e)??[]}async transparent(t,e){let n=this.keep(t,"probes.json"),r=n[e.id];if(r!==void 0)return r;try{let i=await qs(t,e,this.signal),o=wi(t,e),s=(i===void 0?await Gw(o.site,o.url,this.signal):i)?.alpha===!0;return n[e.id]=s,this.unsaved.add(`${t.key}/probes.json`),s}catch{return!1}}save(){for(let t of this.unsaved){let[e,n]=t.split("/"),r=V.find((i)=>i.key===e);if(r)a8(r,n,this.keep(r,n))}this.unsaved.clear()}owned(t,e,n){this.keep(t,"owners.json")[e]=n,this.unsaved.add(`${t.key}/owners.json`)}credit(t,e){let{site:n,post:r}=t;if(!Hc(n,r))return Promise.resolve();let i=Ee(n,r.id),o=this.crediting.get(i);if(!o)o=this.credits(t,e).finally(()=>this.crediting.delete(i)),this.crediting.set(i,o);return o}async mateOwners(t){let e=this.owners.get(t.key);if(e)return e;let n=R0(this.home),r=this.keep(t,"owners.json"),i=this.catalog.palettes.flatMap((c)=>{let u=n.get(c.name);return c.group===this.entry.group&&c.name!==this.entry.name&&u?.site===t.key?[{name:c.name,id:u.id}]:[]}),o=await Promise.all(i.map(async(c)=>{let u=r[c.id];if(u!==void 0)return{...c,owner:u};try{return{...c,owner:(await Mo(t,c.id,this.signal))?.owner??""}}catch{return}})),s=new Map;for(let c of o)if(c)r[c.id]=c.owner,s.set(c.name,c.owner);this.unsaved.add(`${t.key}/owners.json`);let a=Cw(s);return this.owners.set(t.key,a),a}async cached(t,e,n,r){if(r8(e))return o8(e).size;let i=this.inflight.get(e);if(i)return i;let o=(async()=>{let s=await Fc(t,n,this.signal,r);return L(e,s),s.length})();this.inflight.set(e,o);try{return await o}finally{this.inflight.delete(e)}}keep(t,e){let n=`${t.key}/${e}`,r=this.caches.get(n);if(!r)r=s8(t,e),this.caches.set(n,r);return r}async credits({site:t,post:e},n){let r=this.keep(t,"credits.json"),i=r[e.id];if(!i){try{i=await Tc(t,e.id,n)}catch{return}if(!i?.owner)return;r[e.id]=i,this.unsaved.add(`${t.key}/credits.json`)}Ds(e,i),this.credited()}}import{rmSync as c8}from"node:fs";import{join as u8}from"node:path";var Is=2147483645,ac=2147483646,fE=-1073741827,l8=-1073741828,d8=16,f8=0.4,h8=3221225472,m8=256;function p8(t){let e=/^(\d+) (\d+)$/.exec(t??"");return e&&(Number(e[1])>0||Number(e[2])>0)?{x:Number(e[1]),y:Number(e[2])}:void 0}var Dp=p8(process.env.TTHEME_BG_MARGIN);class qp{screen;gliding;sent=new Map;placed=new Map;covered="";viewed="";bands=yu(process.env);files=vu(process.env);moves=pk(process.env);layers=Jo(process.env);wipes=gk(process.env);views=Ni(process.env);bandFiles=new Map;nextBand=h8;view;grid;background;renders;scratch;signal;write;constructor(t){this.view=t.view,this.grid=t.grid,this.background=t.background,this.renders=t.renders,this.scratch=t.scratch,this.signal=t.signal,this.write=t.write,this.screen=new Gi({write:(e)=>this.write(e),view:()=>this.frame(),beat:()=>{this.view.beat++}})}draw(){if(!this.signal.aborted)this.screen.request()}soon(){if(!this.signal.aborted)this.screen.soon()}flush(){if(!this.signal.aborted)this.screen.now()}point(t){return this.screen.point(t)}drop(){this.screen.drop()}frame(){if(this.signal.aborted)return;let{cols:t,rows:e,cell:n}=this.grid(),r=op(this.view,t,e);return this.view.loaderFrom=r.loader?this.view.loaderFrom??this.view.beat:void 0,{lines:r.lines,zones:r.zones,after:(i)=>this.images(r.images,i,n),...this.view.mode==="grid"&&this.view.editing!==void 0?{cursor:this.caret()}:{},ticking:r.tick}}images(t,e,n){let r="",i=new Set,o;for(let s of t){if(this.views&&s.id>=ep){o=s;continue}let a=this.bands?this.banded(s):s;if(!a)continue;if(this.wipes&&[...e].some((u)=>u>=a.row&&u<a.row+a.rows))this.placed.delete(a.id);if(i.add(a.id),this.sent.get(a.id)!==a.path){let u=hl(a,this.files);if(u===void 0)continue;r+=u,this.sent.set(a.id,a.path),this.placed.delete(a.id)}let c=`${a.row};${a.col};${a.cols};${a.rows};${a.crop};${a.z}`;if(this.placed.get(a.id)!==c){if(!this.moves&&this.placed.has(a.id))r+=rp(a.id);r+=kv(a,n),this.placed.set(a.id,c)}}for(let s of this.sent.keys())if(!i.has(s))r+=Wa(s),this.sent.delete(s),this.placed.delete(s);return r+(this.views?this.backdrop(o):this.cover())}glide(){if(this.bands)this.prebake();if(this.gliding)return;let{cols:t,rows:e}=this.grid(),n=ir(t,e).height,r=()=>{let i=this.view,o=i.top*yt.height,s=o-i.scroll;if(s===0||i.mode!=="grid"){i.scroll=o;let a=this.gliding!==void 0;if(this.gliding=void 0,a)this.draw();return}if(Math.abs(s)>2*n)i.scroll=o-Math.sign(s)*n,s=o-i.scroll;i.scroll+=Math.sign(s)*Math.max(1,Math.round(Math.abs(s)*f8)),this.draw(),this.gliding=setTimeout(r,d8)};r()}snap(){clearTimeout(this.gliding),this.gliding=void 0,this.view.scroll=this.view.top*yt.height}resized(){this.screen.reset()}stop(){this.screen.stop(),clearTimeout(this.gliding)}prebake(){let t=this.view,{cols:e,rows:n}=this.grid();for(let r of op({...t,scroll:t.top*yt.height},e,n).images)if(r.crop!==void 0)this.band(r.path,r.crop,r.rows)}cover(){let{cols:t,rows:e}=this.grid(),n=`${t};${e}`;if(!this.layers||this.covered===n)return"";let r="";if(!this.covered){let i=Buffer.from(nt(this.background)).toString("base64");if(r+=`\x1B_Ga=t,f=24,s=1,v=1,i=${Is},q=2;${i}\x1B\\`,Dp)r+=`\x1B_Ga=t,f=32,s=1,v=1,i=${ac},q=2;AAAAAA==\x1B\\\x1B[H\x1B_Ga=p,i=${ac},p=${ac},c=1,r=1,C=1,z=${l8},q=2\x1B\\`}else if(!this.moves)r+=rp(Is);if(this.covered=n,Dp){let{x:i,y:o}=Dp;return`${r}\x1B_Ga=p,i=${Is},p=${Is},P=${ac},Q=${ac},H=${-i},V=${-o},c=${t+2*i},r=${e+2*o},C=1,z=${fE},q=2\x1B\\`}return`${r}\x1B[H\x1B_Ga=p,i=${Is},p=${Is},c=${t},r=${e},C=1,z=${fE},q=2\x1B\\`}backdrop(t){let{cols:e,rows:n,cell:r}=this.grid(),i=e*r.w,o=n*r.h,s=t?`${this.background}|${t.path}|1|${i}|${o}|${i}|${o}|0|0|1`:`${this.background}||1|${i}|${o}|0|0|0|0|5`;if(s===this.viewed)return"";return this.viewed=s,Ai(s)}caret(){return`\x1B[1;${Math.min(this.grid().cols,B(`⌕ ${this.view.editing??""}`)+1)}H`}banded(t){if(t.crop===void 0)return t;let e=this.band(t.path,t.crop,t.rows,!this.gliding);return e?.ready?{...t,id:e.id,path:e.path,crop:void 0}:void 0}band(t,e,n,r=!0){let i=`${t}|${e}|${n}`,o=this.bandFiles.get(i);if(o||!r)return o;let{cell:s}=this.grid(),a=this.nextBand++,c={id:a,path:u8(this.scratch,`band-${a}.png`),ready:!1};return this.bandFiles.set(i,c),this.renders.run({job:"band",from:t,to:c.path,y:e*s.h,height:n*s.h}).then(()=>{c.ready=!0,this.draw()}).catch(()=>{}),this.trimBands(),c}trimBands(){for(let[t,e]of this.bandFiles){if(this.bandFiles.size<=m8)return;if(e.ready&&!this.sent.has(e.id))this.bandFiles.delete(t),c8(e.path,{force:!0})}}}var io=[{name:"TTHEME_FIND_RATING",label:"Rating",about:"The ratings to list, each site read in its own words — space ticks one, and one stays ticked",choices:vo,multi:{read:bi}},{name:"TTHEME_FIND_BLOCK",label:"Block",about:"Posts tagged with nudity or underwear are left out — space unticks one",choices:gi,multi:{read:Eo,none:"none"}},{name:"TTHEME_FIND_POSTS",label:"Posts",about:"Every post of the character, or only the transparent cutouts",choices:["all","cutouts"]},{name:"TTHEME_FIND_SOLO",label:"Solo",about:"When on, only the posts known to show the character alone — checked as posts arrive, so the counts below leave it out",choices:["on","off"]},{name:"TTHEME_FIND_ORDER",label:"Order",about:"How posts are ranked: fit, by how well each makes a backdrop; newest; or score",choices:["fit","newest","score"]},{name:"TTHEME_FIND_SETS",label:"Sets",about:"One picture posted over and over, or held by another site too: fold it into one tile, or show each",choices:["fold","show"]},...Ss()?[{name:"TTHEME_FIND_REMOVE_BG",label:"Remove bg",about:"Cut the character out of an opaque picture you try on, with macOS Vision",choices:["on","off"]}]:[],{name:"TTHEME_FIND_MIN_SCORE",label:"Min score",about:"Posts scored at least this — danbooru, konachan and yande.re; zerochan keeps no score. ←→ steps, or type any number",choices:vw,entry:"number",advanced:!0},{name:"TTHEME_FIND_MIN_SIZE",label:"Min size",about:"The shorter side of a picture, in px — every site filters it. ←→ steps, or type any number",choices:Sw,entry:"number",advanced:!0},{name:"TTHEME_FIND_SITES",label:"Sites",about:"The sites the all tab mixes — each keeps its own tab. Space ticks one, and one stays ticked",choices:V.map((t)=>t.name),multi:{read:Ws},advanced:!0},{name:"TTHEME_FIND_HIDE",label:"Hide",about:"Comics, monochrome, sketches or chibi, told by tag in every site's spelling — checked as posts arrive",choices:Qd,multi:{read:Oc,none:"none"},advanced:!0},{name:"TTHEME_FIND_HIDE_TAGS",label:"Hide tags",about:"Posts with any of these tags are left out, spaced like cosplay multiple_girls — checked as posts arrive",choices:[],entry:"text",advanced:!0},{name:"TTHEME_FIND_PNG",label:"PNG only",about:"PNG originals only — danbooru counts it, the others are told by the file; zerochan only where danbooru holds it",choices:["off","on"],advanced:!0}];function mE(t,e){if(t.multi)return t.multi.read(e).join(" ")||t.multi.none;if(t.entry==="number")return/^\d+$/.test(e??"")&&Number(e)>0?String(Number(e)):"off";if(t.entry==="text")return Ks(e).join(" ");return t.choices.find((n)=>n===e)??t.choices[0]}var E8=["fit","newest","score"];function Yp(t){return E8.find((e)=>e===t)??"fit"}var M8={left:-1,right:1,"shift-left":-10,"shift-right":10};function pE(t){if(process.env.SSH_CONNECTION||!/^(?:https?|file):/i.test(t))return;try{let e=g8(process.platform==="darwin"?"open":"xdg-open",[t],{stdio:"ignore",detached:!0});e.on("error",()=>{}),e.unref()}catch{}}function x8(t,e,n){if(e<0){if(t!=="fill")return Math.max(Yl,t+e);if(!n)return t;return Math.max(Yl,Math.max(100,n)+e+1)}return t==="fill"||t+e>n?"fill":t+e}function xE(t,e){return t.size===e.size&&t.at===e.at&&t.opacity===e.opacity}function O8(t,e){if(xE(t,e))return;return{...t.size!=="fill"?{size:t.size}:{},...t.at!==e.at?{position:Wt[t.at-1]}:{},...t.opacity!==e.opacity?{opacity:t.opacity}:{}}}function gE(t,e){let n=Z(t);return fe(t,e).flatMap((r,i)=>{let[,o,s]=/^([a-z.]+)_(\d+)$/.exec(r.key)??[],a=[...V,or].find((c)=>c.key===o);if(!a||!s)return[];return[{key:r.key,id:Number(s),ansi:a.ansi,...a===or?{}:{page:a.pageUrl(Number(s))},up:i===0,from:Cn(n,r.original??r.fill)}]})}function I8(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var bE=12,R8=4,P8=150,N8=300,wE=12,A8=2,T8=150,H8="\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c",C8=4000,L8=8000,$E=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,F8=process.platform==="win32"?"alt+v":"ctrl+v",kE=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",j8=1280,_8=16,B8=Wt.indexOf("top-right")+1,Yl=20,yE=2,vE=3,G8=/[\p{Script=Hangul}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,U8=8,W8=9;function ql(t,e){return{key:t,groups:[],sources:[],queue:[],rounds:0,roundOf:new Map,last:new Map,kin:new Map,kindred:new Map,shapes:[],seen:new Set,same:new Map,checked:0,total:0,focus:0,top:0,searching:e,stage:"fetch",arrived:new Set}}function uc(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return uc(t.errors[0]);if(t.cause)return uc(t.cause);let e=t.code;if(typeof e==="string")return e;let n=(t.message||t.name).split(".")[0]??"";return n.length>56?`${n.slice(0,55)}…`:n}function Jp(t,e){return`${t}: ${uc(e)}`}function SE(t){return t.width*t.height}function EE(t,e){return`${t}-${ME("sha1").update(e).digest("hex").slice(0,8)}`}class Vp{view;tone;session=new AbortController;cell={w:0,h:0};cols=process.stdout.columns||80;rows=process.stdout.rows||24;gen=0;pumping=0;boards=new Map;board;posts=new Map;thumbPath=new Map;looking=new Map;looked=new Map;matched=new Map;aheading=!1;pages=new Map;tab=0;values=new Map(io.map((t)=>[t.name,mE(t,process.env[t.name])]));direction=1;prefetching=0;related=new Map;pool=[];relating;thumbQueue=[];heldFiles=new Map;heldAsked=new Set;thumbing=0;clarity=new Map;tunedFiles=[];presenting=!1;again=!1;renders=new Za;showing;thumbless=new Set;current;fetch;settle;suggestTimer;suggesting;countTimer;counting;terminal;grabber=new pp((t)=>this.write(t),(t)=>void this.got(t));noticeTimer;peekTimer;peeked;attaching;done;scratch=w8(Cn(y8(),"ttheme-find-"));home;catalog;entry;tagged;blurring;start;paint;kept;constructor(t,e,n,r,i){this.start=i,this.home=t,this.catalog=e,this.entry=n,this.tagged=new Set(e.palettes.flatMap((s)=>s.booru?[s.booru]:[])),this.tone=yn(n,n.signatureSlots),this.blurring=Ur(t);let o={size:"fill",at:B8,opacity:this.tone.opacity};this.view={palette:n.name,tag:r,site:this.tabName,siteAnsi:this.tabAnsi,nextSite:this.nextTabName,preset:this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:Yp(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:bi(this.setting("TTHEME_FIND_RATING")),block:Eo(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",narrow:this.narrowed(),enabled:Ws(this.setting("TTHEME_FIND_SITES")),hide:Oc(this.setting("TTHEME_FIND_HIDE")),hideTags:Ks(this.setting("TTHEME_FIND_HIDE_TAGS")),advanced:!1,settings:io.map((s)=>({label:s.label,choices:[...s.choices],value:this.setting(s.name),default:mE(s,ma(s.name)),multi:s.multi&&{none:s.multi.none},about:s.about,entry:s.entry,advanced:s.advanced,cursor:0})),colors:{cursor:n.cursor,selection:n.selection,background:n.background,foreground:n.foreground,ansi:n.ansi},tiles:[],installed:[],held:gE(t,n.name),checked:0,total:0,searching:r!=="",stage:"fetch",sites:[],focus:0,top:0,scroll:0,beat:0,mode:"grid",help:!1,scene:Math.max(0,Dt.findIndex((s)=>s.name.toLowerCase()===process.env.TTHEME_SCENE)),details:!1,tune:{...o},untuned:o,coloring:Mu(t),editing:r===""?"":void 0,chips:[]},this.paint=new qp({view:this.view,grid:()=>({cols:this.cols,rows:this.rows,cell:this.cell}),background:n.background,renders:this.renders,scratch:this.scratch,signal:this.signal,write:(s)=>this.write(s)}),this.kept=new zp({home:t,catalog:e,entry:n,signal:this.signal,credited:()=>{this.show(),this.inform(),this.paint.draw()}}),this.pool=this.selected(this.view),this.syncChips(),this.board=ql(this.boardKey,r!==""),this.boards.set(this.board.key,this.board)}get signal(){return this.session.signal}get site(){return this.tab===0?void 0:V[this.tab-1]}get sites(){return this.site?[this.site]:V.filter((t)=>this.view.enabled.includes(t.name))}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??R8}get nextTabName(){let t=(this.tab+1)%(V.length+1);return t===0?"all":V[t-1].name}frame(){return{w:this.cols*(this.cell.w||10),h:this.rows*(this.cell.h||20)}}setting(t){return this.values.get(t)}narrowed(){return tf(this.setting("TTHEME_FIND_MIN_SCORE"),this.setting("TTHEME_FIND_MIN_SIZE"),this.setting("TTHEME_FIND_PNG"))}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(t,e,n){return Cn(Ve(t),"orig",`${e}.${n}`)}previewPath(t){let{url:e}=Rc(t.site,t.post);return Cn(Ve(t.site),"thumb",`${EE(t.post.id,e)}.${Sr(e)}`)}tileOf(t,e){let{site:n,post:r}=t,i=Ee(n,r.id),o=$n(r)??r;return{id:r.id,key:i,site:n.name,siteAnsi:n.ansi,width:o.width,height:o.height,reduced:o!==r,page:n===or?"":n.pageUrl(r.id),artist:n===or?Kv(r.source):r.named.artist[0]??"",score:r.score,variants:e,mates:this.kept.matesOf(n,r.owner),thumb:this.thumbPath.get(i),missing:this.thumbless.has(i)}}show(){let t=this.view,e=this.board;if(t.tiles=e.groups.flatMap((n)=>n.open?n.posts.map((r)=>this.tileOf(r,0)):[this.tileOf(n.posts[0],n.posts.length)]),t.checked=e.checked,t.total=e.total,t.searching=e.searching,this.stageOf(e),t.note=e.note,t.focus=Math.max(0,Math.min(e.focus,t.tiles.length-1)),t.top=e.top,this.showing!==e)this.showing=e,this.paint.snap()}stageOf(t){let e=this.view;e.stage=t.stage,e.ranking=t.ranking,e.sites=this.sites.map((n)=>({name:n.name,arrived:t.arrived.has(n.name)}))}syncSite(){let t=this.view;t.site=this.tabName,t.siteAnsi=this.tabAnsi,t.nextSite=this.nextTabName}run(){let t=(e)=>this.view.editing===void 0&&vl(e);return ti({modes:[rr,...Xr()],assume:[Pn,Qr],burst:t},async(e)=>{this.terminal=e,e.onResize(this.onResize),e.listen((i)=>{for(let o of i)this.inbound(o);this.paint.soon()}),e.write(Ti);let n=new Promise((i)=>{this.done=i}),r=setInterval(this.onClock,250);setTimeout(Vc,0);try{let i=new Ta,o=await e.ask(nl,(s)=>i.see(s),1000);if(o){if(this.cell=o,this.holdThumbs(),this.view.tag)this.search(),this.relate(this.view.tag)}else this.view.searching=!1,this.view.error="This terminal does not report its cell size — find needs kitty graphics";if(!process.env.TMUX)await e.ask(H8,(s)=>s.kind==="attributes"?!0:void 0,500,!1);if(this.grabber.start(),e.hold(X1),this.start&&"paste"in this.start)this.pasted(this.start.paste);else if(this.start)this.fromClipboard();else this.peek();return this.paint.draw(),await e.until(n)}finally{this.session.abort(),this.grabber.stop(),this.attaching?.abort(),clearTimeout(this.noticeTimer),clearTimeout(this.peekTimer),this.fetch?.abort(),clearTimeout(this.settle),this.quietSuggest(),this.quietCount(),clearInterval(r),this.paint.stop(),e.write(`\x1B_Ga=d,d=A,q=2\x1B\\${Ti}`),this.kept.save(),this.renders.close(),Dl(this.scratch,{recursive:!0,force:!0}),Lw()}})}write(t){this.terminal?.write(t)}get saved(){return this.view.saved?.text}get installs(){return this.view.installed.length}finish(t){this.done?.(t===2&&this.saved?0:t)}inbound(t){if(t.kind==="key")this.key(t.key);else if(t.kind==="mouse")this.pointer(t);else if(t.kind==="paste")this.pasted(t.text);else if(t.kind==="mode"){if(t.mode===5522)this.grabber.clipboard=t.value!==0&&t.value!==4}else if(t.kind==="osc")if(t.code==="72"&&t.meta.t==="q")this.grabber.drops=!0;else this.grabber.take(t)}pasted(t){let e=this.view;if(e.editing!==void 0&&t.trim()!==""&&!this.picture(t)){e.editing+=t.replace(/[\r\n]+/g," "),this.suggest(),this.paint.draw();return}if(e.installing!==void 0||e.panel!==void 0||e.help)return;if(t.trim()===""){this.fromClipboard();return}this.attach(t)}picture(t){let e=t.trim();if(/^https?:\/\/\S+$/i.test(e))return!Ic(e,this.site??V[0]);return ks(e).length>0}async got(t){if(t.kind==="error"){this.notice(t.message);return}if(t.kind==="text"){if(t.text.trim()===""){this.notice(`No picture on the clipboard — ${kE}`);return}this.pasted(t.text);return}await this.bring(()=>kl(t.bytes,t.source))}notice(t,e=C8){let n=this.view;n.error=t,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(n.error===t)n.error=void 0,this.paint.draw()},e),this.paint.draw()}async peek(){let t=this.view,e;try{e=await Jv()}catch{return}if(!e||e.stamp===this.peeked)return;if(this.peeked=e.stamp,!e.picture||t.installing!==void 0)return;t.hint=`Picture on the clipboard · ${F8} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.paint.draw()},L8),this.paint.draw()}async fromClipboard(){let t=this.view;if(mp()){if(this.grabber.clipboard){this.grabber.ask();return}this.notice("Over SSH the clipboard is not here — drop the file");return}let e;try{e=await Yv(Cn(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`Could not read the clipboard: ${uc(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await hp(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`No picture on the clipboard — ${kE}`);return}if(this.picture(n)){await this.attach(n);return}if(t.editing===void 0)t.editing="";this.pasted(n)}async attach(t){let e=t.trim();if(/^https?:\/\//i.test(e)){let i=Ic(e,this.site??V[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=ks(e).sort((i,o)=>Number(!$E.test(i))-Number(!$E.test(o)));if(!n){this.notice("Nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>hp(n,i),r.length)}async bring(t,e=0){let n=this.view;this.attaching?.abort();let r=new AbortController;this.attaching=r,n.error=void 0,n.saved=void 0,n.note="Reading the picture…",this.paint.draw();let i;try{i=await t(AbortSignal.any([r.signal,this.signal]))}catch(f){if(!r.signal.aborted)n.note=void 0,this.notice(uc(f),8000);return}if(r.signal.aborted)return;n.note=e>0?`The first picture of ${e+1} — drop one at a time to try the others`:void 0,this.quietSuggest(),n.editing=void 0,n.suggest=void 0,n.pick=void 0;let o=Dv(i.bytes);zv(o,i.source);let s=this.origPath(or,o,i.ext);L(s,i.bytes);let a=hE(s).href,c={id:o,file:a,width:i.width,height:i.height,ext:i.ext,preview:a,owner:"",score:0,rating:"s",md5:ME("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],named:{artist:[],character:[],copyright:[]},solo:void 0,family:0,smaller:[]},u={site:or,post:c},l=this.previewPath(u);L(l,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let d=ql(`local|post:${o}`,!1);this.board=d,this.boards.set(d.key,d),this.single(d,u)}single(t,e){t.searching=!1,this.posts.set(Ee(e.site,e.post.id),e),t.groups=[{posts:[e],open:!1}],t.checked=1,t.total=1,this.thumbQueue.push(e),this.thumbs(),this.view.mode="try",this.show(),this.select(),this.paint.draw()}onClock=()=>{let t=this.sites.reduce((r,i)=>Dn(i)>Dn(r)?i:r),e=Math.ceil((Dn(t)-Date.now())/1000),n=e>0?e:void 0;if(n!==this.view.waiting)this.view.waiting=n,this.view.slow=t.name,this.paint.draw()};onResize=()=>{if(this.cols=process.stdout.columns||this.cols,this.rows=process.stdout.rows||this.rows,this.paint.resized(),this.holdThumbs(),this.scroll(),this.paint.snap(),this.view.mode==="try"&&this.current)this.reveal();this.pump(),this.paint.draw()};key(t){let e=this.view;if(t==="ctrl-c"){this.finish(2);return}if(e.installing!==void 0)return;if(t==="focus-in"){this.peek();return}if(t==="focus-out")return;if((t==="ctrl-v"||t==="alt-v")&&e.panel===void 0){this.fromClipboard();return}if(e.editing!==void 0){this.editKey(t);return}if(e.panel!==void 0){this.panelKey(t);return}if(e.help){if(t==="?"||t==="esc")e.help=!1,this.paint.draw();return}if(this.cols<qi.cols||this.rows<qi.rows){if(t==="esc")this.finish(2);return}if(t==="?"){e.help=!0,this.paint.draw();return}if(e.mode==="try"){this.tryKey(t);return}this.gridKey(t)}pointer(t){let e=this.view,n=this.paint.point(t),r=n?.target;if(e.installing!==void 0)return;if(t.action==="wheel"){if(!t.sideways)this.wheel(t.wheel);return}if((t.action==="press"||t.action==="drag")&&t.button!=="left")return;if(r?.kind==="track"&&n&&t.action!=="release")this.slide(r.field,n);else if(t.action==="press")this.pressed(r);else if(t.action==="release"&&n?.inside)this.released(r,t)}pressed(t){let e=this.view;if(e.help)this.paint.drop(),this.key("esc");else if(e.editing!==void 0||t===void 0)return;else if(e.panel!==void 0){if(t.kind==="setting"&&t.index<e.settings.length&&e.typing===void 0)e.panel=t.index,this.paint.draw()}else if(e.mode==="try")this.tryPoint(t);else if(t.kind==="tile")this.focus(t.index);else if(t.kind==="query")this.gridKey("/");else if(t.kind==="site")this.tab=t.tab,this.syncSite(),this.turn()}released(t,e){let n=this.view;if(t?.kind==="key")this.key(t.key);else if(t?.kind==="link"){if(!e.shift&&!e.alt&&!e.ctrl)pE(t.url)}else if(n.editing!==void 0){if(t?.kind==="suggest")n.pick=t.index,this.editKey("enter")}else if(n.panel!==void 0)this.panelPoint(t);else if(n.mode==="try"){if(t?.kind==="place"&&n.tuning)this.tuneKey(String(t.at))}else if(t?.kind==="tile"&&e.count===2)this.gridKey("enter");else if(t?.kind==="chip")this.toggle(t.index)}wheel(t){let e=this.view;if(e.help)return;if(e.editing!==void 0){if(e.suggest?.length)this.editKey(t<0?"up":"down")}else if(e.panel!==void 0){if(e.typing===void 0)this.panelKey(t<0?"up":"down")}else if(e.tuning)this.tuneKey(t<0?"up":"down");else if(e.mode==="try")this.tryKey(t<0?"left":"right");else this.focus(e.focus+t*ir(this.cols,this.rows).perRow)}panelPoint(t){let e=this.view;if(t?.kind!=="setting"&&t?.kind!=="choice")return;let n=e.settings[t.index];if(e.typing!==void 0){let r=e.settings[e.panel??0];if(r&&(t.index!==e.panel||t.kind==="setting"))this.typeKey(r,"enter");else return}if(t.kind==="setting"&&t.index===e.settings.length){e.panel=t.index,this.panelKey("enter");return}if(e.panel=t.index,t.kind==="choice"&&n){if(n.entry==="text"||t.choice===void 0){this.panelKey("enter");return}if(n.multi){n.cursor=Math.max(0,n.choices.indexOf(t.choice)),this.panelKey(" ");return}if(n.value!==t.choice)n.value=t.choice,this.recount()}this.paint.draw()}tryPoint(t){let e=this.view;if(t.kind==="scene")e.scene=t.scene,e.details=!1,this.paint.draw();else if(e.tuning&&t.kind==="field")e.tuning.field=t.field,this.paint.draw()}slide(t,e){let n=this.view,r=n.tuning;if(!r)return;let i=Math.min(1,Math.max(0,e.width>1?e.x/(e.width-1):0));if(r.field=t,t===0){let o=Math.max(100,r.fill),s=Yl+Math.round(i*(o-Yl+1));n.tune.size=i===1||r.fill>0&&s>=r.fill?"fill":Math.min(o,s)}else n.tune.opacity=Math.round(i*100)/100;this.retune()}gridKey(t){let e=this.view,{perRow:n,rowsVis:r}=ir(this.cols,this.rows),o={left:-1,right:1,up:-n,down:n,k:-n,j:n,pgup:-n*r,pgdn:n*r,home:-e.focus,end:e.tiles.length}[t];if(o!==void 0){this.focus(e.focus+o);return}if(/^[1-9]$/.test(t)){this.toggle(Number(t)-1);return}if(t==="enter"&&e.tiles[e.focus]){e.mode="try",e.error=void 0,this.select();return}if(t==="v"){this.fromClipboard();return}if(t==="c"){e.preset=e.preset==="cutouts"?"all":"cutouts",this.turn();return}if(t==="tab"||t==="shift-tab"){let s=V.length+1;this.tab=(this.tab+(t==="tab"?1:s-1))%s,this.syncSite(),this.turn();return}if(t==="/"){e.editing="",this.paint.draw();return}if(t===" "){this.unfold();return}if(t==="o"){this.openPage();return}if(t==="s"){e.panel=0,e.advanced=!1,this.recount(),this.paint.draw();return}if(t==="esc")this.finish(2)}panelKey(t){let e=this.view,n=e.panel??0,r=e.settings[n];if(e.typing!==void 0&&r){this.typeKey(r,t);return}let i=Ua(e);if(t==="up"||t==="down"){let o=i.indexOf(n)+(t==="up"?-1:1);e.panel=i[(o+i.length)%i.length]??n,this.paint.draw();return}if(t==="a"||t==="enter"&&n===e.settings.length){e.advanced=!e.advanced,e.panel=Ua(e)[0]??0,this.paint.draw();return}if(r?.entry&&(t==="enter"||r.entry==="number"&&/^[0-9]$/.test(t))){e.typing=t==="enter"?r.entry==="text"?r.value:"":t,this.paint.draw();return}if((t==="left"||t==="right")&&r&&r.entry!=="text"){let o=t==="left"?-1:1;if(r.multi)r.cursor=(r.cursor+o+r.choices.length)%r.choices.length;else r.value=Mv(r.choices,r.value,o),this.recount();this.paint.draw();return}if(t===" "&&r?.multi){let o=r.value.split(" "),s=r.choices.filter((c,u)=>u===r.cursor?!o.includes(c):o.includes(c)),a=r.multi.none;if(s.length>0||a!==void 0)r.value=s.length>0?s.join(" "):a,this.recount(),this.paint.draw();return}if(t==="esc"){e.settings.forEach((o,s)=>{o.value=this.setting(io[s]?.name??"")}),e.panel=void 0,e.advanced=!1,this.quietCount(),this.paint.draw();return}if(t==="enter"||t==="s"||t==="alt-c")e.panel=void 0,e.advanced=!1,this.quietCount(),this.adopt()}typeKey(t,e){let n=this.view,r=n.typing??"";if(e==="esc"){n.typing=void 0,this.paint.draw();return}if(e==="enter"||e==="up"||e==="down"){if(t.value=t.entry==="number"?Number(r)>0?String(Number(r)):"off":Ks(r).join(" "),n.typing=void 0,this.recount(),e==="enter"){this.paint.draw();return}this.panelKey(e);return}let i=Ki(r,e,(o)=>t.entry==="number"?/^[0-9]$/.test(o)&&r.length<ip:/^[\x20-\x7e]$/.test(o));if(i!==void 0)n.typing=i,this.paint.draw()}quietCount(){clearTimeout(this.countTimer),this.counting?.abort(),this.counting=void 0}recount(){if(this.quietCount(),this.view.counts=void 0,!this.view.tag)return;let t=new AbortController;this.counting=t,this.countTimer=setTimeout(()=>void this.countPending(t),N8)}pending(){let t=(e)=>this.view.settings[io.findIndex((n)=>n.name===e)]?.value??this.setting(e);return{tag:this.view.tag,chosen:this.view.chosen,preset:t("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:Yp(t("TTHEME_FIND_ORDER")),rating:bi(t("TTHEME_FIND_RATING")),narrow:tf(t("TTHEME_FIND_MIN_SCORE"),t("TTHEME_FIND_MIN_SIZE"),t("TTHEME_FIND_PNG")),enabled:Ws(t("TTHEME_FIND_SITES"))}}async countPending(t){let e=this.pending(),n=this.site?[this.site]:V.filter((o)=>e.enabled.includes(o.name)),r=AbortSignal.any([this.signal,t.signal]),i=await Promise.all(n.map(async(o)=>{let s=this.query(o,e);if(!s)return{site:o.name,count:0};if(o.counts&&!o.counts(s.tags))return{site:o.name};try{let a=await of(o,s.tags,r);return{site:o.name,...Number.isFinite(a)?{count:a}:{}}}catch{return{site:o.name}}}));if(this.counting===t&&this.view.panel!==void 0)this.view.counts=i,this.paint.draw()}adopt(){let t=this.view,e=io.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let o=io[i];if(o)this.values.set(o.name,r.value)});let n=io.filter((r,i)=>this.setting(r.name)!==e[i]);if(n.length===0){this.paint.draw();return}this.save(n),t.rating=bi(this.setting("TTHEME_FIND_RATING")),t.block=Eo(this.setting("TTHEME_FIND_BLOCK")),t.sets=this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",t.preset=this.setting("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",t.order=Yp(this.setting("TTHEME_FIND_ORDER")),t.solo=this.setting("TTHEME_FIND_SOLO")==="on",t.narrow=this.narrowed(),t.enabled=Ws(this.setting("TTHEME_FIND_SITES")),t.hide=Oc(this.setting("TTHEME_FIND_HIDE")),t.hideTags=Ks(this.setting("TTHEME_FIND_HIDE_TAGS")),this.boards.clear(),this.current=void 0,t.shown=void 0,t.mode="grid",this.search()}save(t){this.store(t.map((e)=>[e.name,this.setting(e.name)]))}store(t){let e=Cn(this.home,"ttheme","config.zsh");try{let n=cc(e)?$8(e,"utf8"):"";return L(e,t.reduce((r,[i,o])=>xu(r,i,o),n)),!0}catch(n){return this.view.error=n instanceof Error?n.message:String(n),!1}}editKey(t){let e=this.view,n=e.editing??"",r=e.suggest??[];if((t==="up"||t==="down")&&r.length>0){let s=((e.pick??r.length)+(t==="down"?1:r.length))%(r.length+1);e.pick=s===r.length?void 0:s,this.paint.draw();return}if(t==="esc"||t==="enter")this.quietSuggest();if(t==="esc"){if(e.editing=void 0,e.tag===""){this.finish(2);return}this.paint.draw();return}if(t==="enter"){let o=e.pick===void 0?void 0:r[e.pick],s=o?o.whole?o.value:n.replace(/\S*$/,o.value):n;if(e.editing=void 0,e.suggest=void 0,e.pick=void 0,s.trim()){this.commit(s.trim());return}if(e.tag===""){this.finish(2);return}this.paint.draw();return}let i=Ki(n,t);if(i!==void 0)e.editing=i,this.suggest(),this.paint.draw()}quietSuggest(){clearTimeout(this.suggestTimer),this.suggesting?.abort(),this.suggesting=void 0}suggest(){this.quietSuggest();let t=this.view;t.pick=void 0;let e=t.editing??"",n=/\S*$/.exec(e)?.[0]??"",r=I8(n),i=z0(e,vE,this.tagged).map((c)=>({value:c.tag,count:0,alias:c.name,whole:!0}));if(!r&&i.length===0){t.suggest=void 0;return}let o=r?x$(this.catalog.palettes,this.entry,n).map((c)=>({value:c.booru,count:0,palette:c.name})):[],s=[...new Map([...o.slice(0,vE),...i].map((c)=>[c.value,c])).values()];if(t.suggest=s.length>0?s:void 0,i.length>0&&G8.test(e))t.pick=s.findIndex((c)=>("whole"in c));if(!r)return;let a=new AbortController;this.suggesting=a,this.suggestTimer=setTimeout(async()=>{try{let c=await jw(n,AbortSignal.any([this.signal,a.signal]));if(this.suggesting===a&&t.editing!==void 0){let u=new Map(c.map((d)=>[d.value,d.count])),l=new Set(s.map((d)=>d.value));t.suggest=[...s.map((d)=>({...d,count:u.get(d.value)??0})),...c.filter((d)=>!l.has(d.value))].slice(0,U8),t.pick=t.pick!==void 0&&t.pick<s.length?t.pick:void 0,this.paint.draw()}}catch{}},P8)}async commit(t){let e=Ic(t,this.site??V[0]);if(e){await this.jump(e.site,e.id);return}if(this.picture(t)){await this.attach(t);return}this.view.tag=t,this.view.chosen=void 0,this.relate(t),this.boards.clear(),await this.search()}async jump(t,e){let n=++this.gen;this.tab=V.indexOf(t)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ql(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.paint.draw();try{let i=await Mo(t,e,this.signal);if(n!==this.gen)return;if(!i){r.searching=!1,r.error=`${t.name} has no post ${e}`,this.view.error=r.error,this.show(),this.paint.draw();return}this.single(r,{site:t,post:i})}catch(i){this.fail(n,i,t)}}async turn(){this.fetch?.abort(),this.current=void 0,this.view.shown=void 0;let t=this.boards.get(this.boardKey);if(!t){await this.search();return}this.gen++,this.board=t,this.view.error=t.error,this.show(),this.paint.draw(),await this.pump()}unfold(){let t=this.view,e=0;for(let n of this.board.groups){let r=n.open?n.posts.length:1;if(t.focus<e+r){if(n.posts.length<2)return;n.open=!n.open,this.board.focus=e;for(let i of n.posts)if(!this.thumbPath.has(Ee(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.paint.glide(),this.paint.draw();return}e+=r}}openPage(){let t=this.view.tiles[this.view.focus],e=t&&this.posts.get(t.key);if(e)pE(e.site.pageUrl(e.post.id))}tryKey(t){let e=this.view;if(e.tuning){this.tuneKey(t);return}if(t==="left"||t==="right"){this.direction=t==="left"?-1:1,this.focus(e.focus+this.direction);return}if(t==="shift-left"||t==="shift-right"){e.scene+=t==="shift-left"?-1:1,e.details=!1,this.paint.draw();return}if(t==="i"){e.details=!e.details,this.inform(),this.paint.draw();return}if(t==="t"){e.tuning={field:0,held:{...e.tune},fill:this.current?.fill??0,coloring:e.coloring},this.paint.draw();return}if(t==="c"){this.recolor();return}if(t==="o"){this.openPage();return}if(t==="x"){this.swap();return}if(t==="v"){this.fromClipboard();return}if(t==="enter"){this.install();return}if(t==="esc")this.fetch?.abort(),clearTimeout(this.settle),e.fetching=void 0,e.mode="grid",e.error=void 0,this.paint.draw()}tuneKey(t){let e=this.view,n=e.tuning,r=e.tune;if(t==="up"||t==="down"){n.field=(n.field+(t==="up"?2:1))%3,this.paint.draw();return}let i=M8[t];if(i!==void 0){if(n.field===0)r.size=x8(r.size,i,n.fill);else if(n.field===1)r.at=(r.at-1+Math.sign(i)+9)%9+1;else r.opacity=Math.max(0,Math.min(100,Math.round(r.opacity*100)+i))/100;this.retune();return}if(/^[1-9]$/.test(t)){n.field=1,r.at=Number(t),this.retune();return}if(t==="="){let o=e.untuned;if(n.field===0)r.size=o.size;else if(n.field===1)r.at=o.at;else r.opacity=o.opacity;this.retune();return}if(t==="+"){e.tune={...e.untuned},this.retune();return}if(t==="enter"){e.tuning=void 0,this.paint.draw();return}if(t==="c"){this.recolor();return}if(t==="esc")e.tune={...n.held,...n.coloring===e.coloring?{}:{opacity:e.untuned.opacity}},e.tuning=void 0,this.retune()}recolor(){let t=this.view;if(!this.current||t.shown?.id!==this.current.key)return;t.coloring=t.coloring==="tone"?"original":"tone",t.tune.opacity=t.untuned.opacity,this.paint.draw(),this.reveal()}retune(){if(this.paint.draw(),this.current&&this.view.shown?.id===this.current.key)this.reveal()}inform(){let t=this.view,e=t.tiles[t.focus],n=e&&this.posts.get(e.key);t.info=n?this.infoOf(n):void 0}infoOf(t){let{site:e,post:n}=t,r=n.named,i=Hw(e,n),o=new Set([...r.artist,...r.character,...r.copyright]),s=zs(n.source),a=/^https?:\/\//i.test(s)?s:e===or&&s.startsWith("/")?hE(s).href:void 0;return{page:e===or?"":e.pageUrl(n.id),source:s,...a?{link:a}:{},artists:r.artist,characters:r.character,series:r.copyright,tags:n.tags.filter((c)=>!o.has(c)),...i?{rating:i}:{},...n.posted?{posted:n.posted}:{},ext:($n(n)??n).ext,uploader:n.owner}}focus(t){let e=this.view;if(e.tiles.length===0)return;let n=Math.max(0,Math.min(e.tiles.length-1,t));if(n===e.focus)return;if(e.focus=n,this.board.focus=n,this.scroll(),this.paint.glide(),this.pump(),e.mode==="try")this.select();this.paint.draw()}scroll(){let t=this.view,{perRow:e,rowsVis:n}=ir(this.cols,this.rows),r=Math.floor(t.focus/e);if(r<t.top)t.top=r;if(r>t.top+n-1)t.top=r-n+1;this.board.top=t.top}selected(t){if(t.chosen)return t.chosen;if(!t.tag)return[];return this.namesOf(t.tag,"danbooru")}namesOf(t,e){let n=t===this.entry.booru?this.entry:this.catalog.palettes.find((r)=>r.booru===t);return n?O$(n,e):[t]}syncChips(){let t=this.selected(this.view);this.view.chips=this.pool.slice(0,W8).map((e)=>({name:e,on:t.includes(e)}))}toggle(t){let e=this.view,n=e.chips[t];if(!n)return;let r=this.selected(e),i=n.on?r.filter((o)=>o!==n.name):[...r,n.name];if(i.length===0)return;e.chosen=i,e.tag=i.join(" or "),this.syncChips(),this.boards.clear(),this.search()}async relate(t){this.relating?.abort();let e=this.selected({tag:t,chosen:void 0});if(this.pool=e,this.syncChips(),this.paint.draw(),!t||/\s/.test(t))return;let n=this.related.get(t);if(!n){let r=new AbortController;this.relating=r;try{n=(await _w(t,AbortSignal.any([this.signal,r.signal]))).map((i)=>i.value)}catch{return}if(this.relating!==r)return;this.related.set(t,n)}this.pool=[...new Set([...e,...n])],this.syncChips(),this.paint.draw()}query(t,e=this.view){let n=e.chosen?Bw(t,e.chosen):this.namesOf(e.tag,t.key);if(n.length===0)return;let r=e.chosen?.slice(n.length)??[],i=n.length>1,o=e.preset==="cutouts"?t.cutouts:"",s=i&&o.includes("~"),a=[i?n.map((l)=>`~${l}`).join(" "):n[0],t.rate(e.rating),...t.narrow(e.narrow),s?"":o,e.order==="score"?t.best:""].filter(Boolean),c=[],u=[];for(let l of a)if(rf([...c,l].join(" "))<=t.tagBudget)c.push(l);else u.push(l);return{tags:c.join(" "),notes:[...u.length>0?[`${t.name} takes ${t.tagBudget} tags — ${u.join(" ")} left out`]:[],...r.length>0?[`${t.name} takes ${n.length} tag${n.length===1?"":"s"} — ${r.join(" ")} left out`]:[],...s?[`${t.name} ORs the names, so cutouts are told by the file`]:[],...e.narrow.score>0&&!t.scored?[`${t.name} keeps no score`]:[],...e.narrow.png&&t.guesses?[`${t.name} names a file type only where danbooru holds the file`]:[]]}}async search(){let t=++this.gen,e=ql(this.boardKey,!0);this.board=e,this.boards.set(e.key,e),this.view.error=void 0;let n=this.sites.flatMap((o)=>{let s=this.query(o);return s?[{site:o,...s}]:[]}),r=this.sites.filter((o)=>!n.some((s)=>s.site===o)),i=[...n.flatMap(({notes:o})=>o),...r.length>0?[`${this.entry.name} has no tag on ${r.map((o)=>o.name).join(", ")}`]:[]];if(e.note=i.length>0?i.join(" · "):void 0,n.length===0)e.searching=!1;this.show(),this.paint.draw(),this.tally(t,e,n);try{let o=await Promise.all(n.map(async(s)=>({plan:s,owners:await this.kept.mateOwners(s.site)})));if(t!==this.gen)return;e.sources=o.flatMap(({plan:{site:s,tags:a},owners:c})=>{let u=rf(a)+1<=s.tagBudget?s.uploadedBy:void 0;return[...u?[...c.keys()].map((l)=>({site:s,tags:`${a} ${u(l)}`,page:0,done:!1})):[],{site:s,tags:a,page:0,done:!1}]}),this.show(),this.paint.draw(),await this.pump()}catch(o){this.fail(t,o)}}async tally(t,e,n){let r=await Promise.allSettled(n.map(({site:i,tags:o})=>of(i,o,this.signal)));if(t===this.gen)e.total=r.reduce((i,o)=>i+(o.status==="fulfilled"&&Number.isFinite(o.value)?o.value:0),0),this.show(),this.paint.draw()}fail(t,e,n=this.site){if(t!==this.gen||this.signal.aborted)return;this.board.error=Jp(n?.name??this.tabName,e),this.board.searching=!1,this.view.error=this.board.error,this.show(),this.paint.draw()}drop(t,e,n){for(let r of t.sources)if(r.site===e)r.done=!0;t.note=[t.note,Jp(e.name,n)].filter(Boolean).join(" · ")}wants(){let{perRow:t,rowsVis:e}=ir(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+yE)*t}need(){let{perRow:t,rowsVis:e}=ir(this.cols,this.rows);return(e+yE)*t}live(t){return this.boards.get(t.key)===t}page(t,e,n){let r=`${t.key}|${e}|${n}`,i=this.pages.get(r);if(!i)i=Fw(t,e,n,this.signal).then((o)=>this.borrow(t,o)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(t,e){let n=t===ie?[]:e.filter((r)=>r.md5!=="");if(n.length>0)try{Cc(n,await Lc(n.map((r)=>r.md5),this.signal))}catch{}return e}staged(t){if(t===this.board)this.stageOf(t),this.paint.draw()}async round(t){t.stage="fetch",this.staged(t);let e=V.flatMap((a)=>{let c=t.sources.find((u)=>u.site===a&&!u.done);return c?[c]:[]}),n=await Promise.all(e.map(async(a)=>{try{let c=await this.page(a.site,a.tags,a.page);return t.arrived.add(a.site.name),this.staged(t),{source:a,posts:c}}catch(c){if(t.sources.every((u)=>u.site===a.site)||this.signal.aborted)throw c;return this.drop(t,a.site,c),{source:a,posts:void 0}}}));if(!this.live(t))return;let r=[];for(let{source:a,posts:c}of n){if(!c)continue;a.page++,a.done=c.length<yr;let u=t.last.get(a);for(let l of c){let d=u&&$S(u.post,l)?u.set:`set:${a.site.key}:${l.id}`;u={post:l,set:d};let f=Ee(a.site,l.id);if(t.seen.has(f))continue;t.seen.add(f);let h={site:a.site,post:l};if(this.eligible(h))t.kin.set(h,[d,...wS(a.site,l)]),r.push(h);else t.checked++}if(u)t.last.set(a,u)}let i=this.dedupe(t,r),o=++t.rounds,s;if(this.view.order!=="fit")s=e.length>1?uS(i):i;else{let a=Ml(i,this.frame(),this.matched),c=a.slice(0,this.need()),u={done:0,total:c.length};if(t.ranking=u,this.staged(t),await this.looks(c,()=>{u.done++,this.staged(t)}),t.ranking=void 0,!this.live(t))return;s=[...Ml(c,this.frame(),this.matched),...a.slice(c.length)]}t.stage="check",this.staged(t);for(let a of s)t.roundOf.set(a,o);t.queue.push(...s),this.ahead(t)}ahead(t){if(this.aheading||this.view.order!=="fit"||!this.live(t))return;let e=t.queue.slice(0,this.need()).filter((n)=>!this.looking.has(Ee(n.site,n.post.id)));if(e.length===0)return;this.aheading=!0,this.looks(e).then(()=>{this.aheading=!1;for(let n of new Set(e.map((r)=>t.roundOf.get(r)??0)))this.resort(t,n);this.ahead(t)})}resort(t,e){let n=t.queue.flatMap((i,o)=>t.roundOf.get(i)===e?[o]:[]),r=Ml(n.map((i)=>t.queue[i]),this.frame(),this.matched);n.forEach((i,o)=>{t.queue[i]=r[o]})}dedupe(t,e){let n=[];for(let r of e){let i=Rp(r.post),o=i.map((a)=>t.same.get(a)).find(Boolean);if(!o){for(let a of i)t.same.set(a,r);n.push(r);continue}if(t.checked++,SE(r.post)<=SE(o.post))continue;for(let a of[...i,...Rp(o.post)])t.same.set(a,r);let s=n.indexOf(o);if(s>=0){n[s]=r;continue}this.replace(t,o,r)}return n}replace(t,e,n){t.roundOf.set(n,t.roundOf.get(e)??0);let r=t.queue.indexOf(e);if(r>=0){t.queue[r]=n;return}for(let i of t.groups){let o=i.posts.indexOf(e);if(o>=0){i.posts[o]=n,this.posts.set(Ee(n.site,n.post.id),n),this.thumbQueue.push(n),this.thumbs();return}}}async looks(t,e){let n=0;await Promise.all(Array.from({length:wE},async()=>{while(n<t.length)await this.look(t[n++]),e?.()}))}look(t){let e=Ee(t.site,t.post.id),n=this.looking.get(e);if(!n)n=(async()=>{let r=this.previewPath(t),i=Rc(t.site,t.post);await this.kept.cached(i.site,r,i.url);let o=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(e,o),this.matched.set(t.post,o.match),o})().catch(()=>{return}),this.looking.set(e,n);return n}async pump(){let t=this.gen,e=this.board;if(this.pumping===t||e.sources.length===0)return;this.pumping=t;let n=[],r;try{e.searching=!0;while(t===this.gen){while(n.length<bE&&e.queue.length>0&&this.wants()){let s=e.queue.shift();n.push({pick:s,passed:this.vet(s)})}if(this.ahead(e),!r&&e.queue.length<bE&&e.sources.some((s)=>!s.done)&&this.wants()){let s=this.round(e).then(()=>{if(r===s)r=void 0});s.catch(()=>{}),r=s}let i=n.shift();if(!i){if(!r)break;await r,this.show(),this.paint.draw();continue}let o=await i.passed;if(t!==this.gen)return;if(e.checked++,o)this.admit(i.pick);this.show(),this.paint.draw()}if(t===this.gen)e.searching=!1,this.show(),this.paint.draw()}catch(i){this.fail(t,i)}finally{if(this.kept.save(),this.pumping===t)this.pumping=0}}eligible({site:t,post:e}){let n=$n(e);if(!Nc(t,e,this.view.rating)||Pc(e,this.view.block).length>0||!n)return!1;if(this.view.solo&&e.solo===!1)return!1;let{score:r,size:i,png:o}=this.view.narrow;if(Math.min(e.width,e.height)<i||t.scored&&e.score<r||o&&e.ext!=="png"||Tw(e,this.view.hide).length>0||this.view.hideTags.some((s)=>e.tags.includes(s)))return!1;return this.view.preset==="all"?["png","jpg","jpeg",""].includes(n.ext):["png",""].includes(e.ext)}async vet(t){let[e]=await Promise.all([this.passes(t),this.look(t)]);return e}async passes({site:t,post:e}){return this.view.preset==="all"||t.vouched||this.kept.transparent(t,e)}admit(t){let{site:e,post:n}=t,r=this.board,i=Ee(e,n.id);this.posts.set(i,t);let o=r.kin.get(t)??[],s=this.looked.get(i),a=s&&{hash:s.hash,width:n.width,height:n.height},c=this.view.sets==="fold"?this.kindred(r,o,a):void 0;if(c){if(c.posts.push(t),this.register(r,c,o,a),c.open)this.thumbQueue.push(t),this.thumbs();return}let u={posts:[t],open:!1};r.groups.push(u),this.register(r,u,o,a),this.thumbQueue.push(t),this.thumbs()}kindred(t,e,n){for(let r of e){let i=t.kindred.get(r);if(i)return i}return n&&t.shapes.find((r)=>yS(r.shape,n))?.group}register(t,e,n,r){for(let i of n)if(!t.kindred.has(i))t.kindred.set(i,e);if(r)t.shapes.push({shape:r,group:e})}holds(){this.view.held=gE(this.home,this.entry.name).map((t)=>{let e=this.heldFiles.get(t.from);return e?{...t,thumb:e}:t}),this.holdThumbs()}holdThumbs(){let t=be.cols*this.cell.w,e=be.rows*this.cell.h;if(t===0||e===0)return;for(let n of this.view.held.slice(0,np(this.cols))){if(n.thumb||this.heldAsked.has(n.from))continue;this.heldAsked.add(n.from);let r=Cn(this.scratch,`held-${v8(n.from)}-${t}x${e}.png`);this.renders.run({job:"thumb",from:n.from,to:r,width:t,height:e}).then(()=>{this.heldFiles.set(n.from,r),this.holds(),this.paint.draw()}).catch(()=>{})}}thumbs(){while(!this.signal.aborted&&this.thumbing<wE&&this.thumbQueue.length>0){let t=this.thumbQueue.shift();this.thumbing++,this.thumb(t).catch(()=>{this.thumbless.add(Ee(t.site,t.post.id)),this.show(),this.paint.draw()}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(t){let{site:e,post:n}=t,r=yt.cols*this.cell.w,i=yt.rows*this.cell.h,o=Rc(e,n),s=Cn(Ve(e),"tile",`${EE(n.id,o.url)}-${r}x${i}.png`);if(!cc(s)){let a=this.previewPath(t);if(await this.kept.cached(o.site,a,o.url),this.signal.aborted)return;await this.renders.run({job:"thumb",from:a,to:s,width:r,height:i})}this.thumbPath.set(Ee(e,n.id),s),this.show(),this.paint.draw()}select(){let t=this.view,e=t.tiles[t.focus];if(this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,this.inform(),!e)return;if(this.current?.key===e.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(e),T8),this.paint.draw()}async load(t){let e=this.view,n=this.posts.get(t.key);if(!n)return;let r=new AbortController;if(this.fetch=r,this.kept.credit(n,r.signal),!$n(n.post))return;let{site:i}=n,o=this.board;try{await qs(i,n.post,r.signal);let s=$n(n.post),a=this.origPath(i,t.id,s.ext);if(!cc(a))e.fetching={id:t.key,got:0,size:0},this.paint.draw();let c=wi(i,n.post,s),u=await this.kept.cached(c.site,a,c.url,(f,h)=>{if(e.fetching?.id===t.key)e.fetching={id:t.key,got:f,size:h},this.paint.draw()});if(r.signal.aborted)return;if(e.fetching=void 0,o!==this.board)return;let l={site:i,id:t.id,key:t.key,path:a,ext:s.ext,size:u,using:"plain",failed:!1};e.preparing=t.key,this.paint.flush();let d=await this.render(l,"plain");if(r.signal.aborted||o!==this.board)return;if(d.clear===0&&Ss()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(e.preparing=void 0,e.cutting=t.key,this.paint.flush(),l.cut=await this.cutOut(i,t.id,a,r.signal),r.signal.aborted||o!==this.board)return;if(e.cutting=void 0,l.cut){e.preparing=t.key,this.paint.flush();let f=await this.render(l,"cut").catch(()=>{return});if(r.signal.aborted||o!==this.board)return;if(f&&xl(f.clear))l.using="cut";else Dl(l.cut,{force:!0}),l.cut=void 0,l.failed=!0}else l.failed=!0}if(this.current=l,e.tiles[e.focus]?.key===t.key)await this.present();this.preload()}catch(s){if(!r.signal.aborted&&!this.signal.aborted)e.error=Jp(i.name,s)}finally{if(e.fetching?.id===t.key)e.fetching=void 0;if(e.preparing===t.key)e.preparing=void 0;if(e.cutting===t.key)e.cutting=void 0;this.paint.draw()}}async cutOut(t,e,n,r){let i=Cn(Ve(t),"cut",`${e}.png`);if(cc(i))return i;try{return b8(S8(i),{recursive:!0}),await Va(n,i,r),i}catch{Dl(i,{force:!0});return}}swap(){let t=this.current;if(!t?.cut||this.view.shown?.id!==t.key)return;t.using=t.using==="cut"?"plain":"cut",this.reveal()}preload(){let t=this.view;if(t.mode!=="try")return;for(let e of[t.focus+this.direction,t.focus-this.direction]){let n=t.tiles[e],r=n&&this.posts.get(n.key);if(r)this.kept.credit(r,this.signal);if(this.prefetching>=A8||!r||!$n(r.post))continue;let{site:i,post:o}=r;this.prefetching++,qs(i,o,this.signal).then(async()=>{let s=$n(o),a=this.origPath(i,o.id,s.ext),c=wi(i,o,s);return await this.kept.cached(c.site,a,c.url),this.render({site:i,id:o.id,key:n.key,path:a,ext:s.ext,size:0,using:"plain",failed:!1},"plain")}).catch(()=>{}).finally(()=>{this.prefetching--})}}async render(t,e){let n=this.cols*this.cell.w,r=this.rows*this.cell.h,i=Math.min(n,j8),o=Math.max(1,Math.round(r*i/n)),s={...this.view.tune},{coloring:a}=this.view,c=!xE(s,this.view.untuned),u=s.opacity!==this.view.untuned.opacity,l=c?`-${s.size}-${s.at}${u?`-${Math.round(s.opacity*100)}`:""}`:"",d=Cn(this.scratch,`${t.site.key}-${t.id}${e==="cut"?"c":""}${a==="original"?"o":""}-${i}x${o}${l}.png`),f=`${t.site.key}:${t.id}:${e}:${a}:${i}x${o}`,h=this.clarity.get(f);if(h&&cc(d))return t.fill=h.fill,{clear:h.clear,path:d,opacity:h.opacity,touched:u};let m=await this.renders.run({job:"show",from:e==="cut"?t.cut:t.path,to:d,width:i,height:o,colors:this.entry,tone:this.tone,blur:this.blurring*i/kf(n,r).width,coloring:a,...c?{tune:{size:s.size,at:s.at,...u?{opacity:s.opacity}:{}}}:{}});if(this.clarity.set(f,m),t.fill=m.fill,c)this.keepTuned(d);return{clear:m.clear,path:d,opacity:m.opacity,touched:u}}keepTuned(t){this.tunedFiles.push(t);while(this.tunedFiles.length>_8){let e=this.tunedFiles.findIndex((n)=>n!==this.view.shown?.path&&n!==t);if(e===-1)return;Dl(this.tunedFiles.splice(e,1)[0],{force:!0})}}async present(){let t=this.current;if(!t)return;let e=t.using,{coloring:n}=this.view,r=this.view.tune.opacity,{clear:i,path:o,opacity:s,touched:a}=await this.render(t,e);if(this.current!==t||t.using!==e||this.view.coloring!==n)return;if(!a&&this.view.tune.opacity===r)this.view.untuned.opacity=s,this.view.tune.opacity=s;if(this.view.tuning&&t.fill)this.view.tuning.fill=t.fill;this.view.shown={id:t.key,clear:i,bytes:t.size,path:o,cut:t.cut?e==="cut"?"on":"off":t.failed?"failed":"none"}}reveal(){let t=this.view;if(this.presenting){this.again=!0;return}this.presenting=!0,t.preparing=this.current?.key,this.paint.flush(),this.present().catch((e)=>{t.error=e instanceof Error?e.message:String(e)}).finally(()=>{if(this.presenting=!1,this.again){this.again=!1,this.reveal();return}if(t.preparing===this.current?.key)t.preparing=void 0;this.paint.draw()})}async install(){let t=this.view,e=t.tiles[t.focus],n=this.current;if(!e||n?.key!==e.key||t.preparing!==void 0||t.shown?.id!==e.key)return;t.installing=e.key,t.error=void 0,this.paint.flush();let r=O8(t.tune,t.untuned),i=this.posts.get(n.key)?.post;try{await this.renders.run({job:"backdrop",from:n.using==="cut"?n.cut:n.path,source:n.path,home:this.home,colors:this.entry,tone:this.tone,origin:{site:n.site.key,id:n.id,ext:n.ext,from:`${n.site.name} ${n.id} ${n.site.pageUrl(n.id)}`,artist:i?.named.artist??[],source:zs(i?.source??"")},width:this.cols*this.cell.w,height:this.rows*this.cell.h,blur:this.blurring,coloring:t.coloring,...r?{tune:r,aligns:_i(K(this.home).terminals),user:k8()}:{}}),this.kept.owned(n.site,n.id,i?.owner??""),Ae(this.home),this.holds();let{size:o,at:s,opacity:a}=t.tune,c=r?` · ${o==="fill"?"fill":`${o}%`} · ${Wt[s-1]} · ${a.toFixed(2)}`:"",u=i?.named.artist.length?`${i.named.artist.join(", ")} · `:"";t.saved={text:`Background · ${this.entry.name} ← ${u}${n.site.name} ${n.id}${c}`,key:e.key},t.installed.push(e.key),this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,t.mode="grid"}catch(o){t.error=o instanceof Error?o.message:String(o)}t.installing=void 0,this.paint.draw()}}async function OE(t,e,n){let r=new Vp(t,he(t),e,e.booru??"",n);if(await r.run(),Ni(process.env))process.stdout.write(Ai(""));return{saved:r.saved,installs:r.installs}}async function IE(t){let e=J(),n=he(e),r=Tr(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Vp(e,n,r,r.booru??""),o=await i.run();if(i.saved&&o!==0)return process.stderr.write(`${i.saved}
|
|
714
|
+
`),0;return o}var Rs=50;function K8(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selection,ansi:t.ansi}}function RE(t,e,n){let r=Ms(n),i=an(K8(e)),o=d$(t).map((h)=>h.toLowerCase()),s=Sp(i,e.signatureSlots,e.waived??[]),a=Wn(cr(i,e.signatureSlots,e.waived??[])).length,c=(h)=>i[h]?.toLowerCase()!==o[h],u=i.filter((h,m)=>c(m)).length,l=(h)=>{let m=i[h],p=e.signatureSlots.includes(Tn[h])?"◆":n?"■":" ",b=n?`${r.fg(m)}${p}\x1B[39m`:p,$=s.has(h)?r.bold("✗"):c(h)?n?"\x1B[33m●\x1B[39m":"●":" ";return` ${b} ${Cl(Mt(m))}${$}`},d=a===0?"passes the gate":`${a} ${a===1?"miss":"misses"} in the gate`,f=[` ${vt(`${r.dim("Palette")}${u>0?r.dim(` ${u} tuned`):""}`,r.dim(d),Rs-2)}`];f.push(r.dim(Xt(Rs,"top",[[2," Base "]])));for(let h=0;h<A.length;h++)f.push(ln(r,` ${A[h].padEnd(10)}${l(h)}`,Rs));return f.push(r.dim(Xt(Rs,"mid",[[2," ANSI "],[12," Normal 0–7 "],[29," Bright 8–15 "]]))),un.forEach((h,m)=>{f.push(ln(r,` ${h.padEnd(10)}${l(A.length+m)}${l(A.length+8+m)}`,Rs))}),f.push(r.dim(Xt(Rs,"bottom"))),f}function Zl(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function NE(t,e){if(t.includes("/"))return t;let n=Ii(e,!1),r=n.filter((o)=>Uo(o.dir).some((s)=>s.slug===t)),[i]=r.length===1?r:n.length===1?n:[];return i?`${i.id}/${t}`:t}function q8(t,e,n){let r=K(t),i=n.filter((o)=>!r.palettes.includes(o));if(i.length>0)Ke(t,e,r,{...r,palettes:[...r.palettes,...i]});else if(n.some((o)=>r.palettes.includes(o)))ue(t,e,r);return{state:r,fresh:i}}function Y8(t){let e=Math.max(0,...t.map((n)=>n.slot.length));return t.map((n)=>` ${n.slot.padEnd(e)} ${n.from} → ${n.to} ${n.rule}`)}function AE(t,e,n){let r=Df(e),i=Qe(Sn(r.name,Kf(r),n.palettes,!0)),o=Ct(t,n,!1).palettes.find((s)=>s.name===i.name);if(o&&JSON.stringify(o)!==JSON.stringify(i))throw Error(`${i.name} is already in ${ct(i.name)??"the ttheme catalog"} and differs — \`ttheme add ${i.name}\` wears that one`);if(!o)Wo(t,[...Ar(t),i]);return i.name}var J8=["background","foreground","cursor"];function TE(t){try{t();return}catch(e){return e.message}}function HE(t,e,n){return Ct(t,e,!1).palettes.filter((r)=>r.name!==n).map((r)=>({name:r.name,colors:{background:r.background,foreground:r.foreground,cursor:r.cursor,selection:r.selection,ansi:r.ansi}}))}function CE(t,e){let n=new Set(fe(t,e).map((r)=>r.key));return{count:()=>fe(t,e).length,added:()=>fe(t,e).filter((r)=>!n.has(r.key)).length,fresh:()=>(Il(t,e)??[]).filter((r)=>!n.has(se(r))),discard:()=>{let r=fe(t,e).filter((i)=>!n.has(i.key));for(let i of r)To(t,e,i.key),Wc(t,e);if(r.length>0)Ae(t)}}}function V8(...t){let e=new Map;for(let n of t.flatMap((r)=>r??[]))e.set(se(n),n);return e.size>0?[...e.values()]:void 0}function LE(t,e,n,r){if(!Yo(process.env,K(t).terminals))return;return async(i,o)=>{let s=Qe(Sn(e,r(i),n.palettes)),{saved:a}=await OE(t,s,o);return{...a?{note:a}:{},count:fe(t,e).length}}}async function Qp(t,e=!1){let n=process.stdout.isTTY===!0,r=J(),i=K(r).terminals,o=n?Nl.of(process.env,r,t.name,i):void 0,s=n?Bl.of(process.env,i):void 0;return lE(t,{color:!Nt(),...o?{backdrop:o}:{},...s?{layer:s}:{},...e?{hosted:!0}:{}})}async function FE(t,e,n){let r=J(),i=dt(r),o=await N1(r,n),s=t.includes("/")?t:`${o.id}/${t}`,a=xe(s);if(a)throw Error(`${s} ${a}`);if(ct(s)!==o.id)throw Error(`palettes in ${o.dir} are named ${o.id}/<palette> — ${s} belongs elsewhere`);let c=Gf(r,s);if(lc(c))throw Error(`${s} already exists — \`ttheme edit ${s}\` changes it`);let u=e?Tr(Ct(r,i).palettes,e):void 0;if(!Zl())throw Error("new opens the palette editor — run it in a terminal");let l=u&&(ct(u.name)?u.base:u.default?void 0:u.name),d=u?Wf(u,s,`kept from ${u.name}`):void 0,f=u?Il(r,u.name)??u.pictures:void 0,{base:h,ansiSource:m,group:p,...b}=d??{name:s,signature:J8,...ni(Ja)},$=CE(r,s),k=({colors:M,signature:I})=>{let x=V8(f,$.fresh());return Kf({...b,...M,signature:I,...l?{base:l}:{},...x?{pictures:x}:{}})},v=await Qp({title:"New palette",name:s,...d?{colors:d}:{},signature:b.signature,...b.waive?{waive:b.waive}:{},palettes:HE(r,i,s),pictures:$.count(),find:LE(r,s,i,k),exports:UE(r,s,i,k),decode:Xp,check:(M)=>TE(()=>Sn(s,k(M),i.palettes))});if(!v){$.discard(),console.log("Nothing made");return}z8(D8(c),{recursive:!0}),L(c,k(v));let{state:S}=q8(r,i,[s]);console.log(` + ${s}${u?` from ${u.name}`:""}
|
|
715
|
+
${c}`),await Xi(r,Ct(r,i).palettes.filter((M)=>M.name===s),S.terminals),console.log(`
|
|
716
|
+
\`ttheme use ${s}\` wears it · \`ttheme edit ${s}\` opens it again`)}function Z8(t,e,n){let r=Qe(Sn(t,e,n.palettes));return ua(r).length>0?sa(r).filter((i)=>i.startsWith(" ✗")):[]}async function jE(t){let e=J(),n=dt(e),r=K(e),i=Ct(e,n,!1),o=NE(t,e),s=Vl(e,o),a=s&&lc(s)?o:i.palettes.some(($)=>$.name===t)?t:o,c=Vl(e,a);if(!c||!lc(c)){let $=i.palettes.some((k)=>k.name===a);throw Error($?`${a} is not one of yours — \`ttheme new <name> --from ${a}\` makes your own copy`:`no palette of yours called ${a} — \`ttheme new\` makes one`)}if(!Zl())throw Error("edit opens the palette editor — run it in a terminal");let u=Zp(c,"utf8"),l;try{l=Sn(a,u,n.palettes)}catch($){throw Error(`${c} cannot be read — ${$.message}`)}let d=CE(e,a),f=new Set((l.pictures??[]).map(($)=>se($))),h=({colors:$,signature:k})=>o$(c$(qf(u,$),k),d.fresh().filter((v)=>!f.has(se(v)))),m=await Qp({title:"Edit palette",name:a,colors:oa(l),signature:l.signatureSlots,waive:l.waive,palettes:HE(e,n,a),pictures:d.count(),find:LE(e,a,n,h),exports:UE(e,a,n,h),decode:Xp,check:($)=>TE(()=>Sn(a,h($),n.palettes))});if(!m){d.discard(),console.log("Nothing changed");return}let p=h(m);if(p===u){console.log(d.added()>0?`Kept the pictures you added to ${a}`:"Nothing changed");return}if(L(c,p),r.palettes.includes(a))ue(e,n,r);console.log(`Saved ${a}${r.palettes.includes(a)?" — new tabs and `ttheme use` wear it":` — \`ttheme add ${a}\` installs it`}`);let b=Z8(a,p,n);if(b.length>0)console.log(`
|
|
714
717
|
It misses the contrast gate:
|
|
715
|
-
${
|
|
718
|
+
${b.join(`
|
|
716
719
|
`)}
|
|
717
|
-
\`ttheme check --fix ${a}\` suggests colors that pass`)}
|
|
718
|
-
`),
|
|
719
|
-
`)
|
|
720
|
-
|
|
720
|
+
\`ttheme check --fix ${a}\` suggests colors that pass`)}var PE=2;async function _E(t,e){let n=J(),r=Tr(zo(n,dt(n),!1).palettes,t),i=eu(r,Yn(n)[t]);if(e==="show")return console.log(RE(r,i,!Nt()).join(`
|
|
721
|
+
`)),0;if(e!=="edit")throw Error(`tone takes show or edit, not ${e}`);if(!Zl())throw Error("needs a terminal");let o=await Qp({title:"Edit palette",name:t,colors:oa(Ie(i)),original:oa(Ie(r)),tone:!0,signature:i.signatureSlots,...i.waived?{waive:i.waived}:{},decode:Xp,check:()=>{return}},!0);if(!o)return PE;let s=Yn(n),a=f$(r,an(o.colors));if(JSON.stringify(a)===JSON.stringify(s[t]??{}))return PE;Yf(n,h$(s,t,a)),ue(n,dt(n),K(n));let c=Object.keys(a).length;return process.stderr.write(c===0?"Back to the original colors":`Saved · ${c} ${c===1?"color":"colors"} tuned`),0}function BE(t,e,n){return Tr(t.palettes,t.palettes.some((r)=>r.name===e)?e:NE(e,n))}function GE(t,e=!1){let n=J(),r=dt(n),i=K(n),o=BE(Ct(n,r),t,n);if(console.log(`${o.name} · ${o.group}
|
|
722
|
+
`),console.log(sa(o).join(`
|
|
723
|
+
`)),ua(o).length===0)return console.log(`
|
|
724
|
+
Passes the gate`),0;let{theme:a,moves:c,left:u}=Sl(Ie(o));if(c.length===0)return console.log(`
|
|
721
725
|
No color change fixes it — waive the rule in [contrast] with a reason, or pick other colors`),1;console.log(`
|
|
722
726
|
${u.length===0?"These colors pass":"These colors come closer"}:
|
|
723
|
-
${
|
|
724
|
-
`)}`);let l=
|
|
725
|
-
\`ttheme new <name> --from ${
|
|
726
|
-
\`ttheme check --fix ${
|
|
727
|
-
Wrote ${l}`),u.length===0?0:1}function
|
|
728
|
-
Anyone with ttheme wears it with: ttheme add ${
|
|
729
|
-
It carries your tone, named ${a.name} so it does not clash with ${o.name}`:""}`)}function
|
|
730
|
-
${t} palettes installed — open a new tab, or reload your terminal config`)}function
|
|
731
|
-
`))}function
|
|
732
|
-
`))}function
|
|
733
|
-
${
|
|
734
|
-
${n.length} themes (${
|
|
735
|
-
`)),0}async function
|
|
736
|
-
`),0}if(e==="drop"){let{key:i,left:
|
|
737
|
-
`),0}if(e==="tone"||e==="original"){let i=await
|
|
738
|
-
`),0}if(e==="prepare"){let{key:i,coloring:
|
|
739
|
-
`),0}if(e==="tuned")return
|
|
740
|
-
`)[0]:void 0)??t.SHELL??"unknown"}function
|
|
727
|
+
${Y8(c).join(`
|
|
728
|
+
`)}`);let l=Vl(n,o.name);if(!l||!lc(l))return console.log(`
|
|
729
|
+
\`ttheme new <name> --from ${o.name}\` makes a copy you can fix`),1;if(!e)return console.log(`
|
|
730
|
+
\`ttheme check --fix ${o.name}\` writes them`),1;if(L(l,qf(Zp(l,"utf8"),oa(a))),i.palettes.includes(o.name))ue(n,r,i);return console.log(`
|
|
731
|
+
Wrote ${l}`),u.length===0?0:1}function Vl(t,e){let n=ct(e);return n&&Ii(t,!1).some((r)=>r.id===n)?Gf(t,e):void 0}function Xp(t){let e=t.trim();if(!e.startsWith(vn))return;try{let{background:n,foreground:r,cursor:i,selection:o,ansi:s}=Df(e);return{background:n,foreground:r,cursor:i,selection:o,ansi:s}}catch{return}}function UE(t,e,n,r){return{code:(i)=>zf(WE(t,Qe(Sn(e,r(i),n.palettes)))),toml:r,command:"ttheme add"}}function WE(t,e){let n=Vl(t,e.name),r=n&&lc(n)?Sn(e.name,Zp(n,"utf8"),[e]).waiveReason:void 0,i=Il(t,e.name)??e.pictures,{pictures:o,...s}=Wf(e,e.name,r);return{...s,...i?{pictures:i}:{}}}async function Q8(t,e,n){if(t===e)return e;let r=n;if(r===void 0)if(!Zl())r="tuned";else{let i=await ak({message:`Share ${e.name} as…`,options:[{value:"tuned",label:"Your tone",hint:`named ${Jl(e.name)}`},{value:"original",label:"The original"}]});if(me(i))throw new Te;r=i}return r==="original"?e:t}function Jl(t){return`${t}-tuned`}async function KE(t,e){let n=J(),r=dt(n),i=BE(zo(n,r),t,n),o=eu(i,Yn(n)[i.name]),s=await Q8(o,i,e),a=WE(n,s),c=s===o&&o!==i;if(c){let u=xe(Jl(s.name));if(u)throw Error(`${Jl(s.name)} ${u} — share the original, or tune a palette with a shorter name`);a.name=Jl(s.name)}if(console.log(zf(a)),process.stdout.isTTY)console.error(`
|
|
732
|
+
Anyone with ttheme wears it with: ttheme add ${vn}…${c?`
|
|
733
|
+
It carries your tone, named ${a.name} so it does not clash with ${s.name}`:""}`)}import{spawn as X8,spawnSync as zE}from"node:child_process";import{existsSync as t5,readFileSync as DE}from"node:fs";import{homedir as e5}from"node:os";import{join as qE}from"node:path";function YE(t,e,n,r=e5(),i=(o)=>{process.stdout.write(o)}){if(!e||Nt(t)||t.TMUX||qt(t)!=="terminal-app")return;let[o="",s="-"]=(t.TTHEME_TERMINAL_SHOWN??"").split(" "),a=t.TTHEME_TTY,c=o?Oe(Z(n),o,r):void 0,u=Fu(is(n)).get(oe(o))??[],l=u.find((_)=>_===`${j(o)}.${s}.png`)??u[0];if(!a||!c||s==="-"||!l||!t5(c.image))return;let d=qE(is(n),l),f=["-l","JavaScript",Lu(n),"tab",a,on(o)],h=K(n).terminalBase??"Basic",m=rm(t,r),p=DE(d),b,$=d,k=0,v,S=!1,M=!1,I,x=(_)=>{S=!0,X8("osascript",[...f,h],{stdio:"ignore"}).on("close",()=>{if(S=!1,M)return;i(_);let X=I;I=void 0,X?.()})},H=(_,X)=>{b??=_t(new Uint8Array(DE(c.image)));let z=qE(is(n),`${j(o)}.h${process.pid}-${++k}.png`);di($,z,kr($r(b,_,c.opacity,im(b.width,b.height,c,m)))),$=z,x(X)},N=()=>{if($!==d)di($,d,p),$=d},F=(_)=>{clearTimeout(v),v=setTimeout(()=>{if(S)I=_;else _()},xh)},W=()=>{clearTimeout(v),I=void 0};return{slots:[],paint(_){return F(_.name===o?()=>{N(),x("")}:()=>H(_.background,er(_))),""},wear(_){return zE("osascript",[...f.slice(0,-1),on(_.name),h],{encoding:"utf8"}).stdout?.trim()==="worn"?"":er(_)},saved:async()=>new Map,restore(){return W(),M=!0,N(),zE("osascript",[...f,h],{stdio:"ignore"}),""},stop:W}}import{existsSync as dc,readdirSync as n5,readFileSync as Xl,rmSync as JE,statSync as ZE}from"node:fs";import{homedir as r5}from"node:os";import{join as oo}from"node:path";var i5=150,o5=260;function Ql(t){return t?.includes(`path = "${j("")}`)===!0}function s5(t){try{return K(t).terminals.includes("warp")}catch{return!1}}function VE(t,e){let n=j(e);if(!dc(t))return;return n5(t).filter((i)=>i.startsWith(`${n}.`)&&/^[0-9a-f]{8}\.yaml$/.test(i.slice(n.length+1))).map((i)=>({file:i,at:ZE(oo(t,i)).mtimeMs})).sort((i,o)=>o.at-i.at)[0]?.file??(dc(oo(t,`${n}.yaml`))?`${n}.yaml`:void 0)}function a5(t,e){if(!e)return;let n;try{n=Xl(oo(t,e),"utf8")}catch{return}let r=/^background_image:\n\s+path:\s*"([^"]*)"\n\s+opacity:\s*(\d+)/m.exec(n);return r?.[1]?{image:r[1],opacity:Number(r[2])/100}:void 0}function QE(t,e,n,r=r5()){if(!e||Nt(t)||t.TMUX||qt(t)!=="warp")return;let i=Dr(r,n);if(!dc(i)||!s5(n))return;let o=Li(r),s=_u(n),a=[],c=t.TTHEME_WARP_WEARS??Ne(K(n)),u=a5(o,c&&VE(o,c)),l,d,f=(b)=>{let $=Xl(i,"utf8"),k=qr($);if(k===b)return;if(Ql(b)&&!Ql(k)&&!dc(s))L(s,k??"");if(gn(i,Bu($,b)),!Ql(b))JE(s,{force:!0})},h=(b)=>{for(let $ of a.splice(0))if($===b)a.push($);else JE(oo(o,$),{force:!0})},m=()=>{clearTimeout(l),clearTimeout(d)},p=(b,$,k)=>{m(),l=setTimeout(()=>{let v=$;if(!v)v=`${j(b.name)}.view-${process.pid}-${a.length+1}.yaml`,L(oo(o,v),ba(b,k)),a.push(v);let S=v,M=Date.now()-ZE(oo(o,S)).mtimeMs;d=setTimeout(()=>{f(cm(b.name,S)),h(S)},Math.max(0,o5-M))},i5)};return{slots:[],paint:(b)=>{if(b.name===c)p(b,VE(o,b.name));else if(u)p(b,void 0,u);else p(b,dc(oo(o,`${j(b.name)}.yaml`))?`${j(b.name)}.yaml`:void 0);return""},wear:(b,$)=>$.includes("warp")?"":void 0,saved:async()=>new Map([["theme",qr(Xl(i,"utf8"))??""]]),restore:(b)=>{m();let $=b.get("theme");if($)f($);else if(Ql(qr(Xl(i,"utf8"))))f(ju);return h(),""}}}function Ps(t,e,n){return YE(t,e,n)??wk(t,e)??QE(t,e,n)}function td(t){In(`
|
|
734
|
+
${t} palettes installed — open a new tab, or reload your terminal config`)}function u5(t,e){return t.map((n)=>{if(n.startsWith(vn))return n;let r=ct(n);if(r===void 0)return e===q?n:`${e}/${n}`;if(r!==e)throw Error(`${n} is not in ${e} — give its bare name, or leave --market out`);return n})}async function XE(t,e){let n=J(),r=e?u5(t,(await Tm(n,e)).id):t,i=dt(n),o=[...new Set(r.map((l)=>l.startsWith(vn)?AE(n,l,i):l))],s=K(n),a=o.filter((l)=>s.palettes.includes(l)),c=o.filter((l)=>!s.palettes.includes(l));if(c.length===0){ue(n,i,s),console.log(`Already installed: ${a.join(", ")}`);return}let u={...s,palettes:[...s.palettes,...c]};Ke(n,i,s,u);for(let l of c)console.log(` + ${l}`);await Xi(n,Ct(n,i,!1).palettes.filter((l)=>c.includes(l.name)),u.terminals),td(u.palettes.length)}function tM(t){let e=J(),n=dt(e),r=K(e),i=t.filter((a)=>r.palettes.includes(a)),o=t.filter((a)=>!r.palettes.includes(a));if(i.length===0)throw Error(`not installed: ${o.join(", ")} — \`ttheme list\` marks what is`);let s={...r,palettes:r.palettes.filter((a)=>!i.includes(a))};Ke(e,n,r,s),as(e,n,r.terminals,i);for(let a of i)console.log(` - ${a}`);if(td(s.palettes.length),o.length>0)return console.error(`ttheme remove: not installed: ${o.join(", ")}`),1;return 0}function eM(t){let e=J(),n=dt(e),r=K(e);if(!r.palettes.includes(t))throw Error(`${t} is not installed — \`ttheme add ${t}\` first`);let{off:i,...o}=r,s=Ke(e,n,r,{...o,startup:t},!0);console.log(iM(t,r.terminals,s).join(`
|
|
735
|
+
`))}function nM(){let t=J(),e=K(t),n=ji(e);if(!n)throw Error("no palettes installed — `ttheme browse` picks some");if(!e.off){console.log(`Already on · ${n}`);return}let{off:r,...i}=e,o=Ke(t,dt(t),e,i);console.log(iM(n,i.terminals,o).join(`
|
|
736
|
+
`))}function rM(){let t=J(),e=K(t);if(e.off){console.log("Already off");return}let n=Ke(t,dt(t),e,{...e,off:!0}),r=ji(e);console.log(`Off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`);for(let i of kt(e.terminals))if(n.get(i.id)?.restart)console.log(`${i.name} new tabs open on your own profile once ${i.name} restarts`)}function iM(t,e,n){let r=kt(e).filter((o)=>!o.defaults),i=r.length>0?[`Default ${t} · ${r.map((o)=>o.name).join(", ")} open new tabs with it once their config reloads`]:[];for(let o of kt(e)){let s=o.defaults?.profile(t);if(s)i.push(n.get(o.id)?.restart?`${o.name} new tabs open with it once ${o.name} restarts — "${s}" is now its default profile`:`${o.name} new tabs open with it — "${s}" is its default profile`)}return i.length>0?i:[`Default ${t} · no terminal is wired to open with it — \`ttheme init\` wires one`]}function l5(t,e){let n=new Map(e.palettes.map((r)=>[r.name,"market"]));for(let r of tu(t,e.palettes,!1))n.set(r.name,"mine");return n}function oM(t,e=!1){let n=J(),r=dt(n),i=new Set(K(n).palettes),o=l5(n,r),s=Pt(Ct(n,r).palettes);if(t)xi(s);let a=yi(t?M$(s,t):s),c=(d)=>o.get(d)??"kept";if(e){let d=a.map((f)=>({name:f.name,group:f.group,...f.catalog?{catalog:f.catalog}:{},installed:i.has(f.name),source:c(f.name)}));console.log(JSON.stringify(d,null,2));return}let u=Math.max(...a.map((d)=>d.name.length),0),l={market:"",mine:" · yours",kept:" · in no market you added"};for(let d of a){let f=d.catalog?`${d.group} / ${d.catalog}`:d.group;console.log(` ${i.has(d.name)?"●":"○"} ${d.name.padEnd(u)} ${f}${l[c(d.name)]}`)}if(process.stdout.isTTY){let d=t?`${a.length} of ${s.length}`:`${s.length}`;console.log(`
|
|
737
|
+
${d} palettes — ${a.filter((f)=>i.has(f.name)).length} installed`)}}function d5(t,e,n){let r=(o)=>{try{return Vr(t,o)}catch{return}},i=e.find((o)=>o===n||tt(o)===n||r(o)===n);if(!i)throw Error(`no market named ${n} — \`ttheme market\` lists them`);return i}async function sM(t=[]){let e=J(),n=Bo(e),r=t.map((m)=>d5(e,n,m)),i=await i1(),o=!1;if(i.latest)try{return r1(i.latest,t)}catch(m){o=!0,console.log(` ttheme could not update to ${i.latest}: ${m.message}`)}else console.log(i.note);let s=(r.length>0?r:n).filter((m)=>m!==q);if(r.length===0&&s.length===0)console.log("No markets to update — `ttheme market add <owner>/<repo>` adds one");let a=(m,p)=>`${g1(m,p)} — kept the copy from the last update`;for(let m of s.filter(Ot))try{console.log(` ${H1(e,m)}`)}catch(p){console.log(` ${a(m,p)}`)}let c=s.filter((m)=>!Ot(m)),u=new Set(c),l=[],d=Yr(),f=()=>d.set(`Updating ${[...u].map(tt).join(", ")}${c.length>1?` · ${c.length-u.size}/${c.length}`:""}`);if(f(),await Promise.all(c.map(async(m)=>{let p=await Om(e,m);if("refreshed"in p)l.push(p.refreshed);if(u.delete(m),u.size>0)f();else d.done();d.say(` ${"refreshed"in p?Im(p.refreshed):a(m,p.failure)}`)})),d.done(),!c5(qn(e)))return o?1:0;for(let m of Wi(e,l))console.log(` ${m}`);let h=Pm(e);if(h)console.log(h);return o?1:0}async function aM(t,e){let n=dt(t,!1),r=new Map(Ko(t,n).filter((a)=>e.includes(a.name)).map((a)=>[a.name,a]));if(r.size===0)return;let i=Ar(t);Wo(t,i.map((a)=>r.get(a.name)??a));let o=K(t);ue(t,n,o);let s=new Map(i.map((a)=>[a.name,a.pictures]));await Xi(t,Ct(t,n,!1).palettes.filter((a)=>r.has(a.name)).map((a)=>mS(a,s.get(a.name))),o.terminals)}async function tg(t,e,n,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:yi(t.palettes);xi(i);let o=process.stdout.isTTY===!0,s=Ps(process.env,o,J()),a=s?await s.saved():new Map,c=new zm({entries:i,scope:n,installed:e,required:r,color:!Nt(),fx:al(process.env.TTHEME_FX),onFocus:s?(l)=>process.stdout.write(s.paint(l)):void 0}),u=await c.prompt();if(s)process.stdout.write(s.restore(a));if(u==="cancel")return;return t.palettes.filter((l)=>c.picked.has(l.name)).map((l)=>l.name)}function ng(t,e,n,r){let i=n===q?void 0:Ra(t,n),o;try{o=i?.id??Vr(t,n)}catch{o=gt(n)?Rr(n):tt(n)}return{source:n,id:o,...i?.info.description?{description:i.info.description}:{},shown:tt(n),entries:n===q?Jr(t,n):i?.entries??[],auto:Pr(n,e.updates),status:Lm(t,n,r)}}function eg(t){return t instanceof Error?t.message:String(t)}function m5(t,e,n,r){let i=new Map(r.map((a)=>[a.source,a.id])),o=[],s=(a,c)=>o.push({where:a,message:c});for(let a of Gt(e.markets)){let c=i.get(a)??tt(a),u=n[a],l=Ma(t,a);if(u&&(l===void 0||u.at>l))o.push({where:c,source:a,update:!0,message:`Update failed ${Ia(u.at)}: ${u.error}`});if(a===q)try{En(h5(Ge(t),"utf8"))}catch(d){o.push({where:c,source:a,message:`${tt(Ge(t))}: ${eg(d)}`})}else if(gt(a))if(!f5(_e(t,a)))o.push({where:c,source:a,message:"No copy of it yet — `ttheme update` fetches it"});else try{Jn(a,tn(t,a),Jr(t,q),s)}catch(d){o.push({where:c,source:a,message:`${tt(_e(t,a))}: ${eg(d)}`})}else try{Xe(a,ae(Be(a)),Jr(t,q),(d,f)=>s(tt(d),f))}catch(d){o.push({where:c,message:eg(d)})}}return o}function rg(t){return Ko(t,dt(t,!1)).map((e)=>e.name)}function p5(t,e,n,r,i){return{refresh:async(o)=>{if(Ot(o)){let a=ng(t,e,o,nr());return{market:a,refreshed:{source:o,id:a.id,count:Pt(a.entries).length,change:{added:[],changed:[],gone:[]}},updates:rg(t)}}let s=await xm(t,o,Em);return{market:ng(t,e,o,nr()),refreshed:s,updates:rg(t)}},fetch:async(o)=>{if(Ot(o)){let a=Be(o),c=ae(a);return{source:o,id:c,...a.description?{description:a.description}:{},shown:tt(o),entries:Xe(o,c,Jr(t,q),ce(!1)),auto:!1,status:"read in place"}}let s=await Oa(t,o,void 0,r);return n.set(o,s),{source:o,id:s.id,..."info"in s&&s.info.description?{description:s.info.description}:{},shown:tt(o),entries:s.entries,auto:Pr(o,{}),status:"not added yet"}},search:(o)=>jm(o,r),apply:i}}function cM(...t){for(let e of Wi(...t))In(e)}function g5(t,e,n){let r=[];for(let i of t.adds){let o=i.source!==q&&(t.auto[i.source]??i.auto);r.push(`Added ${i.id} · ${i.shown} — ${Tt(Pt(i.entries).length)}${o?", updating on its own":""}`)}for(let i of t.removes){let o=e.find((a)=>a.source===i)?.id??i;r.push(`Removed ${o} · ${tt(i)}`);let s=n.filter((a)=>(ct(a)??q)===o);if(s.length>0)r.push(Cm(s))}for(let[i,o]of Object.entries(t.auto)){let s=e.find((a)=>a.source===i);if(s&&!t.removes.includes(i))r.push(`${s.id} ${o?"updates on its own now":"no longer updates on its own"}`)}return r}async function b5(t,e,n,r){let i=K(t),o=n.adds.length+n.removes.length+Object.keys(n.auto).length>0;for(let m of n.adds){let p=r.get(m.source);if(p)fs(t,p)}for(let m of n.removes)Hm(t,m);let s=[...Gt(i.markets).filter((m)=>!n.removes.includes(m)),...n.adds.map((m)=>m.source)],a=Aa(i,s,{...i.updates,...n.auto});if(o)We(t,a);let c=dt(t,!1),u=Ct(t,c,!1).palettes.filter((m)=>n.picked.has(m.name)).map((m)=>m.name),l=i.palettes.filter((m)=>!u.includes(m)),d=u.filter((m)=>!i.palettes.includes(m)),f=n.renew.filter((m)=>u.includes(m));if(!o&&d.length===0&&l.length===0&&f.length===0){cM(t,n.refreshed),In("Nothing changed");return}let h={...a,palettes:u};Ke(t,c,i,h),as(t,c,i.terminals,l);for(let m of g5(n,e,u))In(m);for(let m of d)In(` + ${m}`);for(let m of l)In(` - ${m}`);for(let m of Wi(t,n.refreshed))In(m);if(await Xi(t,Ct(t,c,!1).palettes.filter((m)=>d.includes(m.name)),h.terminals),f.length>0){await aM(t,f);for(let m of f)In(` ↑ ${m}`)}if(d.length>0||l.length>0)td(h.palettes.length)}async function uM(){let t=T$(process.env),e=J(),n=K(e),r=Ar(e),i=nr(),o=ls(),s=Gt(n.markets).map((k)=>ng(e,n,k,i)),a=new Set(s.flatMap((k)=>k.entries.map((v)=>v.name))),c=r.filter((k)=>n.palettes.includes(k.name)&&!a.has(k.name));xi([...s.flatMap((k)=>k.entries),...c]);let u=new Map,l=new AbortController,d=process.stdout.isTTY===!0,f=Ps(process.env,d,e),h=f&&!t?await f.saved():new Map,m=Ne(n);if(t)process.stdout.write("\x1B[?2026h");let p=new Ym({markets:s,kept:c,installed:n.palettes,updates:rg(e),...m?{startup:m}:{},...t?{hub:t}:{},problems:m5(e,n,i,s),due:o?Mm(e,n):[],io:p5(e,n,u,l.signal,(k,v)=>zy({say:v.say,set:v.status},()=>b5(e,s,k,u))),...process.env.TTHEME_SORT==="series"?{}:{order:yi},color:!Nt(),lookups:process.env.TTHEME_MARKET_LOOKUP!=="off",fx:al(process.env.TTHEME_FX),owns:d&&!t,...f?{onFocus:(k)=>process.stdout.write(f.paint(k))}:{}});try{await p.run()}finally{if(f?.stop?.(),f&&!t)process.stdout.write(f.restore(h));l.abort()}await p.idle();let b=p.result(),$=p.next();if(t&&$!==void 0)return cM(e,b.refreshed),$;if(d&&t)process.stdout.write("\x1B[?1049l\x1B[?25h");for(let k of b.refreshed){let v=Rm(k);if(v)console.log(v)}if(p.applied()){for(let v of p.lines())console.log(v);let k=p.failure();if(k)throw k}else{for(let k of Wi(e,b.refreshed))console.log(k);console.log("Nothing changed")}return t?su:0}import{rmSync as lM}from"node:fs";import{basename as w5,join as fc}from"node:path";var dM=fc(import.meta.dirname,".."),$5=fc(dM,"themes"),ig=fc(dM,"dist"),ed=Zt.map((t)=>On[t].emitter),k5=[Th,_h],qq=ed.map((t)=>t.id);async function nd({only:t}={}){if(typeof Bun>"u")throw Error("needs bun — run it from a checkout: bun src/bin.ts build");let e=t&&t.length>0?ed.filter((o)=>t.includes(o.id)):ed,n=r0($5),r=Zg(n);if(r.length>0){for(let o of r)console.error(` ✗ ${o.theme} [${o.rule}] ${o.detail}`);throw Error(`${r.length} contrast violation(s). Fix the palette, or waive the rule in its [contrast] section with a reason.`)}if(e.length===ed.length)lM(ig,{recursive:!0,force:!0});else for(let o of e)lM(fc(ig,o.id),{recursive:!0,force:!0});let i=0;for(let o of[...e,...k5]){let s=n.flatMap((u)=>o.emit?.(u)??[]),a=o.emitShared?.(n)??[];for(let u of[...s,...a])await Bun.write(fc(ig,u.path),u.content),i++;let c=s.length>0?`${n.length} themes${o.limits?` (${o.limits})`:""}`:a.length>0?a.map((u)=>w5(u.path)).join(" "):`no files (${o.limits??"nothing to write"})`;console.log(` ${o.id.padEnd(16)} ${c}`)}console.log(`
|
|
738
|
+
${n.length} themes (${i0(n).length} in the new-tab rotation) -> ${i} files in dist/`)}import{existsSync as S5,readFileSync as gM}from"node:fs";import{availableParallelism as y5,homedir as fM}from"node:os";var v5=4;async function rd(t,e,n=fM()){let r=Rt(Z(t)),i=Ur(t),o=new Map(he(t).palettes.map((d)=>[d.name,No(d)])),s=Object.entries(r.palettes).flatMap(([d,f])=>{let h=o.get(d);return h?f.pictures.filter((m)=>Ao(m)||(m.blur??0)!==i).map((m)=>({name:d,key:m.key,paint:h})):[]});if(s.length===0)return 0;e(`Drawing ${s.length} background picture${s.length===1?"":"s"} again${i?` · blur ${i}px`:""}`);let a=_i(K(t).terminals),c=new Ap(Math.min(v5,y5()-1)),u=await c.map(s.map(({name:d,key:f,paint:h})=>({job:"redraw",home:t,user:n,name:d,key:f,paint:h,blur:i,aligns:a})));c.close();let l=[];return u.forEach((d,f)=>{let{name:h,key:m}=s[f];if(d instanceof Error||d===null){e(` ▢ ${h} ${m} — ${d instanceof Error?d.message:"no original to draw it from"}, left as it was`);return}l.push({name:h,picture:d})}),Of(t,l),Ae(t,n),l.length}async function hM(t,e,n,r,i=fM()){let o=Rt(Z(t)).palettes[e],s=o?.pictures.find((l)=>l.key===(r??o.active));if(!o||!s)throw Error(`${e} has no picture ${r??"shown"}`);if(je(s)===n)return{key:s.key,changed:!1};let a=he(t).palettes.find((l)=>l.name===e);if(!a)throw Error(`no palette called ${e}`);let c=_i(K(t).terminals),u=await Rl(t,e,s.key,No(a),Ur(t),c,i,n);if(!u)throw Error(`${e} ${s.key} has no original to draw it from`);return Of(t,[{name:e,picture:u}]),Ae(t,i),{key:s.key,changed:!0}}function mM(t,e,n){let r=Rt(Z(t)).palettes[e],i=r?.pictures.find((a)=>a.key===(n??r.active));if(!r||!i)throw Error(`${e} has no picture ${n??"shown"}`);let o=he(t).palettes.find((a)=>a.name===e);if(!o)throw Error(`no palette called ${e}`);let s=je(i)==="original"?"tone":"original";if(!bS(t,e,i.key,No(o),Ur(t),s))throw Error(`${e} ${i.key} has no original to draw it from`);return{key:i.key,coloring:s}}async function pM(){return await rd(J(),(t)=>process.stderr.write(`${t}
|
|
739
|
+
`)),0}async function bM(t,e,n){let r=J();if(Tr(he(r).palettes,t),e==="show"){if(!n)throw Error("image show needs the picture to show");let{at:i,of:o}=To(r,t,n);return Ae(r),process.stderr.write(`Background · ${t} ${i}/${o} ${n}
|
|
740
|
+
`),0}if(e==="drop"){let{key:i,left:o}=Wc(r,t,n);return Ae(r),process.stderr.write(`Background · ${t} removed ${i} · ${o} left
|
|
741
|
+
`),0}if(e==="tone"||e==="original"){let i=await hM(r,t,e,n);return process.stderr.write(`Background · ${t} ${i.key} ${e==="tone"?"tinted":"in its own colors"}
|
|
742
|
+
`),0}if(e==="prepare"){let{key:i,coloring:o}=mM(r,t,n);return process.stderr.write(`Background · ${t} ${i} ready in ${o==="tone"?"its tone":"its own colors"}
|
|
743
|
+
`),0}if(e==="tuned")return Ae(r),0;throw Error(`unknown image action ${e} — show, drop, tone, original, prepare or tuned`)}function wM(t,e){let n=/^(\d+)x(\d+)$/.exec(t),r=/^(\d+)x(\d+)([+-]\d+)([+-]\d+)$/.exec(e);if(!n||!r)throw Error("a canvas is <width>x<height> and a place <width>x<height>+<x>+<y>");let[i,o]=n.slice(1).map(Number),[s,a,c,u]=r.slice(1).map(Number);return{width:i,height:o,at:{x:c,y:u,w:s,h:a}}}function E5(t,e,n){let r=wM(e,n),i=Math.min(1,t.width/r.at.w);if(i===1)return r;return{width:Math.max(1,Math.round(r.width*i)),height:Math.max(1,Math.round(r.height*i)),at:{x:Math.round(r.at.x*i),y:Math.round(r.at.y*i),w:t.width,h:t.height}}}function $M(t,e,n,r){let i=_t(new Uint8Array(gM(t)));return L(e,Fe(rw(i,wM(n,r)))),0}function kM(t,e,n,r,i,o,s){let a=Number(r);if(!le(n)||!Number.isFinite(a))throw Error("flatten needs a #rrggbb background and an opacity from 0 to 1");let c=_t(new Uint8Array(gM(t))),u=i?E5(c,i,o??""):void 0,l=kr($r(c,n,Math.max(0,Math.min(1,a)),u));if(s&&S5(s))di(s,e,l);else L(e,l);return 0}import{execFileSync as M5}from"node:child_process";import{readFileSync as x5}from"node:fs";import{arch as O5,platform as id,release as og}from"node:os";var I5={ghostty:"ghostty",iterm2:"iTerm.app",wezterm:"WezTerm","terminal-app":"Apple_Terminal",warp:"WarpTerminal"};function R5(t,e){if(t==="konsole"){let r=/^(\d{2})(\d{2})(\d{2})$/.exec(e.KONSOLE_VERSION??"");return r?`${r[1]}.${r[2]}.${Number(r[3])}`:e.KONSOLE_VERSION}let n=I5[t];return n!==void 0&&e.TERM_PROGRAM===n?e.TERM_PROGRAM_VERSION:void 0}function P5(t){let e=qt(t),n=t.TERM_PROGRAM&&t.TERM_PROGRAM!=="tmux"?t.TERM_PROGRAM:void 0,r=e==="unknown"?`unknown${n?` (TERM_PROGRAM=${n})`:""}`:e==="editor"?`editor (${Mh(t)})`:`${e} ${R5(e,t)??"(version unknown)"}`,i=t.TERM_PROGRAM==="tmux"?t.TERM_PROGRAM_VERSION:void 0;return[r,t.TMUX?`tmux ${i??"yes"}`:"tmux no",t.SSH_CONNECTION||t.SSH_TTY?"ssh yes":"ssh no"].join(" · ")}function yM(t,e){try{return M5(t,e,{encoding:"utf8",timeout:2000,stdio:["ignore","pipe","ignore"]}).trim()}catch{return}}function N5(){let t=O5();if(id()==="darwin")return`macOS ${yM("sw_vers",["-productVersion"])??`(Darwin ${og()})`} · ${t}`;if(id()==="linux"){let e="";try{e=x5("/etc/os-release","utf8")}catch{}return`${/^PRETTY_NAME="?([^"\n]*)"?$/m.exec(e)?.[1]??"Linux"} · linux ${og()} · ${t}`}return`${id()==="win32"?"Windows":id()} ${og()} · ${t}`}function A5(t){if(t.TTHEME_ZSH)return`zsh ${t.TTHEME_ZSH}`;return(t.SHELL?yM(t.SHELL,["--version"])?.split(`
|
|
744
|
+
`)[0]:void 0)??t.SHELL??"unknown"}function T5(t){try{let{terminals:e}=K(t);return e.length>0?e.join(", "):"none"}catch{return"installed.json missing or unreadable"}}function H5(t){let e=Su.flatMap((n)=>{let r=t[n];return r===void 0||r===ma(n)?[]:[`${n}=${/\s/.test(r)?JSON.stringify(r):r}`]});return e.length>0?e.join(" "):void 0}function vM(){let t=process.env,n=[["ttheme",lt.version],["OS",N5()],["Shell",A5(t)],["Terminal",P5(t)],["Wired",T5(J())],["Settings",H5(t)]].filter((i)=>i[1]!==void 0),r=Math.max(...n.map(([i])=>i.length));for(let[i,o]of n)console.log(`${i.padEnd(r)} ${o}`)}import{execFileSync as C5,spawnSync as L5}from"node:child_process";import{chmodSync as F5,copyFileSync as j5,existsSync as so,mkdirSync as SM,readdirSync as _5,readFileSync as sd,rmSync as sg}from"node:fs";import{homedir as B5}from"node:os";import{dirname as Ns,join as mt}from"node:path";function G5(t,e,n){for(let r of _5(e))t.push({from:mt(e,r),to:mt(n,r)})}function lg(t){return En(sd(mt(t,"dist","manifest.json"),"utf8"))}function od(t,e){let n=mt(e.configHome,"ttheme"),r=[{from:mt(e.root,"bin","ttheme.js"),to:mt(n,"ttheme.js")},{from:mt(e.root,"bin","ttheme.js.map"),to:mt(n,"ttheme.js.map")},{from:mt(e.root,"bin","package.json"),to:mt(n,"package.json")},{from:mt(e.root,"shell","ttheme.zsh"),to:mt(n,"ttheme.zsh")},{from:mt(e.root,"shell","preview.zsh"),to:mt(n,"preview.zsh")},{from:mt(e.root,"shell","launch-tab.zsh"),to:mt(n,"launch-tab.zsh"),executable:!0}];G5(r,mt(e.root,"shell","adapters"),mt(n,"adapters"));let i=[{file:mt(e.zdotdir,".zshrc"),block:Ok(n)}],o=mt(n,"config.zsh"),s=Rk(so(o)?sd(o,"utf8"):""),a={file:o,content:t.warpFast===void 0?s:xu(s,"TTHEME_WARP_FAST",t.warpFast?"on":"off")},c={terminals:t.terminals,palettes:t.palettes,...Object.fromEntries(kt(t.terminals).flatMap((d)=>Object.entries(d.installs?.(e)??{}).filter(([,f])=>f!==void 0))),...t.off?{off:!0}:{}},u=qu(e.configHome,c,e.home),l=e.stateDir?[mt(e.stateDir,"ghostty",".blind")]:[];return{home:e.home,copies:r,edits:i,settings:a,forget:l,catalog:lg(e.root),installed:c,notes:u}}function MM(t){try{return K(t)}catch{return}}function xM(t,e){try{return Ct(t,dt(t,!1,e),!1).palettes}catch{return[]}}function U5(t,e){let n=lg(e.root),r=Gt(t.markets).includes(q)?n.palettes:[],i=new Set(r.map((s)=>s.name)),o=xM(e.configHome,n).filter((s)=>!i.has(s.name)&&(ct(s.name)!==void 0||t.palettes.includes(s.name)));return{...n,palettes:[...r,...o]}}function OM(t,e){let n=ji(t);return n&&e.includes(n)?n:void 0}function W5(t,e,n){let r=od(e,n),i=OM(t,e.palettes),o=new Set(["terminals","palettes","off","startup",...Zt.flatMap((a)=>Object.keys(On[a].installs?.(n)??{}))]),s=Object.fromEntries(Object.entries(t).filter(([a])=>!o.has(a)));return{...r,installed:{...s,...r.installed,...i?{startup:i}:{}}}}function K5(t,e){let n=od({terminals:t.terminals,palettes:t.palettes,off:t.off},e),r=new Set([...n.catalog.palettes,...xM(e.configHome,n.catalog)].map((l)=>l.name)),i=t.palettes.filter((l)=>r.has(l)),o=t.palettes.filter((l)=>!r.has(l)),{startup:s,...a}=t,c={...a,palettes:i,...s&&i.includes(s)?{startup:s}:{}},u=o.length>0?[`Dropped ${o.join(", ")} — no longer in the catalog`,...n.notes]:n.notes;return{...n,installed:c,notes:u}}function z5(t){try{return C5(process.execPath,[mt(t,"ttheme","ttheme.js"),"--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function IM(t){let e=Ne(t);return[kt(t.terminals).map((n)=>n.name).join(", "),`${t.palettes.length} palettes`,e?`default ${e}`:"no default — ttheme is off"].join(" · ")}function ag(t,e=rn()){for(let s of t.copies)if(SM(Ns(s.to),{recursive:!0}),sg(s.to,{force:!0}),sg(`${s.to}.zwc`,{force:!0}),j5(s.from,s.to),s.executable)F5(s.to,493);L(t.settings.file,t.settings.content);for(let s of t.forget)sg(s,{force:!0});let n=Ns(Ns(t.settings.file)),r=MM(n),i=Object.fromEntries(kt(t.installed.terminals).flatMap((s)=>{let a=s.defaults?.key,c=a?r?.[a]:void 0;return a&&c?[[a,c]]:[]})),o=va(n,{...t.installed,...i},e,t.home);if(Gt(o.markets).includes(q))$$(n,t.catalog);We(n,o),ue(n,dt(n),o,t.home,e);for(let s of t.edits){SM(Ns(s.file),{recursive:!0});let a=so(s.file)?sd(s.file,"utf8"):"";gn(s.file,_r(a,s.block))}return Bi(n,o,!0,e,t.home)}function hc(t){if(me(t))throw Fr("Nothing changed"),new Te;return t}function cg(t,e){return Zt.filter((n)=>On[n].offered(t,e))}async function D5(t,e,n,r){return hc(await sk({message:"Wire which terminals?",options:cg(n,r).map((i)=>({value:i,label:On[i].name,hint:i===t?"detected":void 0})),initialValues:e,required:!0}))}async function q5(t){return hc(await en({message:"Switch Warp to each tab's palette in about 0.2 s instead of 0.6 s?\nAbout 8% CPU while Warp is in front with tabs of different palettes — `ttheme config` changes it",initialValue:Eu(t,"TTHEME_WARP_FAST")!=="off"}))}function ug(t){let e=[...t.copies.filter((n)=>!so(n.to)).map((n)=>n.to),...so(t.settings.file)?[]:[t.settings.file],...t.edits.filter((n)=>!sd(n.file,"utf8").includes("# ttheme begin")).map((n)=>n.file)];if(e.length>0)throw Error(`init left gaps:
|
|
741
745
|
${e.join(`
|
|
742
|
-
`)}`)}function
|
|
743
|
-
`),`Installed ${e.palettes.length} palettes`),
|
|
744
|
-
`),"Next"),
|
|
745
|
-
`));return}
|
|
746
|
-
`),a),
|
|
747
|
-
`))}async function
|
|
748
|
-
${
|
|
749
|
-
`),`Wiring ${
|
|
750
|
-
${this.
|
|
751
|
-
${
|
|
752
|
-
`)
|
|
753
|
-
`),"Uninstall");let i=await Ve({message:"Remove ttheme?"});if(fe(i)||!i)throw Mr("Nothing changed"),new Ne}for(let r of qL(n,e))console.log(r);console.log("Open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}import{homedir as JL}from"node:os";async function GE(t){if(!qt.includes(t))throw Error(`no terminal ${t} — one of ${qt.join(", ")}`);let e=t,n=$n[e],r=J(),i=JL(),s=Ze(),o=L(r);if(o.terminals.includes(e))return console.log(`${n.name} is wired already`),0;let a={configHome:r,home:i};if(!n.offered(a,s))throw Error(`${n.name} cannot be wired on this system`);if(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0)throw Error("wire asks before it edits your configs — run it in a terminal");let c={...o,...n.installs?.(a)??{},terminals:[e]};bn([...Eu(r,c,i),...Su(r,c,i),"Each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out"].join(`
|
|
754
|
-
`),`Wiring ${n.name}`);let u=await Ve({message:`Wire ${n.name} now?`,initialValue:!1});if(fe(u)||!u)throw Mr("Nothing changed"),new Ne;let l=ta(r,c,s,i),f={...l,terminals:[...o.terminals,e]};Le(r,f),jt(r,ut(r),f,i,s);let d=Ii(r,l,!0,s,i),h=Mu(r,l,d,i);if(h.length>0)bn(h.join(`
|
|
755
|
-
`),"Next");return Go(`Wired ${n.name}`),0}var ZL=new Set(["add","remove","market","default","on","off"]),QL={default:([t])=>V1(t),on:()=>Z1(),off:()=>Q1(),browse:()=>rE(),list:([t],{json:e})=>eE(t,e),add:(t,{market:e})=>Y1(t,e),remove:(t)=>J1(t),update:()=>nE(),market:([t,e])=>my(t,e),new:([t],{from:e,in:n})=>W1(t,e,n),edit:([t])=>K1(t),check:([t],{fix:e})=>D1(t,e),share:([t],{tone:e})=>q1(t,e),init:(t,{yes:e})=>ME({yes:e}),uninstall:(t,{yes:e})=>_E(e),wire:([t])=>GE(t),info:()=>gE(),build:(t,{only:e})=>wl({only:e}),find:([t])=>x1(t),image:([t,e,n])=>fE(t,e,n),redraw:()=>uE(),names:()=>HE(),tone:([t])=>LE(t),flatten:([t,e,n,r,i,s,o])=>mE(t,e,n,r,i,s,o),bake:([t,e,n,r])=>hE(t,e,n,r)},XL=Ko.map((t)=>({...t,run:QL[t.name]}));class Di extends Error{verb;constructor(t,e){super(t);this.verb=e}}function BE(t){let e=XL.find((n)=>n.name===t);if(!e)throw new Di(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function t3(t,e){let n={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:s,multiple:o}]of Object.entries(t.flags??{}))n[r]={type:i,multiple:o===!0,...s?{short:s}:{}};try{return VL({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Di(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function e3(t){let[e,...n]=t;if(e===void 0)return{kind:"help",code:1};if(e==="-h"||e==="--help")return{kind:"help",code:0};if(e==="-V"||e==="--version")return{kind:"version"};if(e==="help"){if(n[0]===void 0||n[0]==="all")return{kind:"help",all:n[0]==="all",code:0};return{kind:"help",verb:BE(n[0]),code:0}}let r=BE(e),i=t3(r,n);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[l,{choices:f}]of Object.entries(r.flags??{}))for(let d of[i.values[l]??[]].flat())if(f&&!f.includes(String(d)))throw new Di(`--${l} takes ${f.join(", ")} — not ${d}`,r);let s=i.positionals,o=r.args.filter((l)=>l.startsWith("<")).length,a=r.args.some((l)=>l.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(s.length<o)throw new Di(`missing ${r.args[s.length]}`,r);if(s.length>a)throw new Di(`too many arguments: ${s.slice(a).join(" ")}`,r);let{help:c,...u}=i.values;return{kind:"run",verb:r,args:s,flags:u}}function UE(t){let e=Math.max(0,...t.map(([n])=>n.length));return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}function hp(t,e=!1){if(!t)return zo(e);let n=Object.entries(t.flags??{}).map(([r,{short:i,value:s,about:o}])=>[`${i?`-${i}, `:""}--${r}${s?` ${s}`:""}`,o]);return[`Usage: ttheme ${Wo(t)}`,"",t.about,...t.actions?["","Actions:",...UE(t.actions)]:[],...n.length>0?["","Options:",...UE(n)]:[]].join(`
|
|
756
|
-
`)}var n3=[TypeError,RangeError,ReferenceError,SyntaxError];function r3(t){return n3.some((e)=>t instanceof e)||t instanceof Error&&"code"in t}async function WE(t){let e;try{let n=e3(t);if(n.kind==="version")return console.log(It.version),0;if(n.kind==="help"){if(n.code===0)console.log(hp(n.verb,n.all));else console.error(hp(n.verb,n.all));return n.code}if(e=n.verb,!n.verb.run)throw Error("runs in the shell layer — open a new tab once `ttheme init` has wired it");if(ZL.has(n.verb.name))await Qk();let r=await n.verb.run(n.args,n.flags);if(!n.verb.hidden&&n.verb.name!=="uninstall")PE();return typeof r==="number"?r:0}catch(n){if(n instanceof Di)return console.error(n.verb?`ttheme ${n.verb.name}: ${n.message}
|
|
746
|
+
`)}`)}function RM(t,e){return[...new Set(t.palettes.filter((n)=>e.includes(n.name)).map((n)=>n.group))]}function Y5(t,e,n){let r=t.palettes.find((s)=>s.name===Ne(e)),i=process.stdout.isTTY===!0,o=r&&Ps(process.env,i,n)?.wear(r,e.terminals);if(o===void 0)return!1;return process.stdout.write(o),!0}function J5(t,e){let n=Ne(t);if(!n)return["Default none — new tabs keep the terminal colors",`Turn on \`ttheme on\` wears ${ji(t)}`];return[`Default ${n}${e?" — this tab wears it already":""}`,"Change it `ttheme preview`, enter on a palette, then default"]}function V5(t){L5("zsh",["-c",'source "$1" && __tt_preview init',"zsh",mt(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function Z5(t,e,n,r){let i=RM(t.catalog,e.palettes);Mn([`${i.join(", ")} (${e.palettes.length})`,...J5(t.installed,n)].join(`
|
|
747
|
+
`),`Installed ${e.palettes.length} palettes`),Mn(["exec zsh The ttheme command in this tab",...dg(t,r)].join(`
|
|
748
|
+
`),"Next"),da("Done")}function dg(t,e){return[...Yu(Ns(Ns(t.settings.file)),t.installed,e,t.home),...t.notes]}function PM(t){return t?(e)=>Lr.step(e):(e)=>console.log(e)}async function EM(t,e,n,r){let i=K5(t,e),o=ag(i,n);ug(i),await rd(e.configHome,PM(r),e.home);let s=["exec zsh Open tabs run the new layer — new tabs already do",...dg(i,o)],a=`Updated to ${lt.version} — kept ${IM(i.installed)}`;if(!r){console.log([a,...s].join(`
|
|
749
|
+
`));return}Mn(s.join(`
|
|
750
|
+
`),a),da("Done")}function Q5(t,e){let n=[`Placed ${t.copies.length} files`,`Settings in ${t.settings.file} — edit later with \`ttheme config\``,...t.edits.map((r)=>`Wired ${r.file}`),...dg(t,e),"No palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"];console.log(n.join(`
|
|
751
|
+
`))}async function NM(t={}){let e=mt(import.meta.dirname,"..");for(let x of["ttheme.js","package.json"])if(!so(mt(e,"bin",x)))throw Error(`bin/${x} is missing — run \`mise run bin:build\` first`);if(!so(mt(e,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await nd()}let n=B5(),r=J(),i=process.env.ZDOTDIR??n,o=rn(),s=Ay(o),a=process.env.WT_PROFILE_ID,c={root:e,home:n,configHome:r,zdotdir:i,stateDir:mt(process.env.XDG_STATE_HOME??mt(n,".local","state"),"ttheme"),...s?{wtHome:s}:{},...a?{wtProfile:a}:{}},u=qt(process.env),l=cg(c,o).filter((x)=>x===u||On[x].present(c));if(!t.yes&&(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0))throw Error("init asks before it edits your configs — run it in a terminal, or pass --yes to accept the defaults");let d=MM(r);if(t.yes&&d){await EM(d,c,o,!1);return}if(t.yes){if(l.length===0)throw Error(`no supported terminal detected — run this inside ${kt(cg(c,o)).map((F)=>F.name.toLowerCase()).join(", ").replace(/, ([^,]*)$/," or $1")}`);let H=od({terminals:l,palettes:[]},c),N=ag(H,o);ug(H),Q5(H,N);return}if(bu("ttheme init"),d){let x=z5(r);if(hc(await en({message:`ttheme${x?` ${x}`:""} is installed — ${IM(d)}
|
|
752
|
+
${x===lt.version?"Reinstall":"Update to"} ${lt.version} and keep all of it?`,active:"Yes",inactive:"No, set it up again",initialValue:!0}))){await EM(d,c,o,!0);return}}let f=await D5(u,d?.terminals??l,c,o),h=f.includes("warp")?await q5(r):void 0,m=d?U5(d,c):lg(e),p=d?await tg(m,d.palettes,"palette",!0):await tg(m,[],"series",!0);if(!p)throw Fr("Nothing changed"),new Te;let b=(d&&OM(d,p))??p[0],$=p.length>1&&(pe[u].paints||u==="warp"&&f.includes("warp")&&so(Dr(n,r))),k=hc(await en({message:$?"Pick a default palette in ttheme preview once installed?":`Wear ${b} in every tab?`,initialValue:d?!d.off:!0})),v={terminals:f,palettes:p,off:!k,warpFast:h},S=d?W5(d,v,c):od(v,c);if(Mn([`Install ${p.length} palettes — ${RM(m,p).join(", ")}`,`Copy ${S.copies.length} files under ${r}`,`Write ${S.settings.file}`,...S.edits.map((x)=>`Edit ${x.file} — a ttheme block: source ttheme.zsh`),...Du(r,S.installed,n),"Each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out",k?$?`Open ttheme preview — every tab wears the palette picked there, ${b} until then`:`Paint every tab with ${b}, this one now`:"Leave the terminal colors as they are — `ttheme on` wears a palette later",...k&&b?kt(f).flatMap((x)=>x.defaults?[`Make "${x.defaults.profile(b)}" the ${x.name} default profile`]:[]):[]].join(`
|
|
753
|
+
`),`Wiring ${kt(f).map((x)=>x.name).join(", ")}`),!hc(await en({message:"Apply these changes?"})))throw Fr("Nothing changed"),new Te;let M=ag(S,o);if(ug(S),await rd(r,PM(!0),n),k&&$)V5(r);let I=K(r);Z5({...S,catalog:m,installed:I},v,Y5(m,I,r),M)}import{spawn as X5}from"node:child_process";import{createHash as t4}from"node:crypto";import{existsSync as fg,mkdirSync as e4,readFileSync as n4,statSync as r4,utimesSync as i4,writeFileSync as o4}from"node:fs";import{homedir as CM}from"node:os";import{join as LM}from"node:path";import{gunzipSync as s4}from"node:zlib";var AM="https://github.com/kecan0406/aninames/releases/latest/download",FM=86400000,a4=3600000,c4=120000;function jM(t){return LM(Ir(t),".checked")}function u4(t=process.env){return t.TTHEME_NAMES!=="off"}function l4(t){try{return Date.now()-r4(jM(t)).mtimeMs>=FM}catch{return!0}}function hg(t,e){let n=jM(t);if(e4(Ir(t),{recursive:!0}),!fg(n))o4(n,"");i4(n,e/1000,e/1000)}function _M(t=CM()){if(!u4()||!l4(t))return;try{hg(t,Date.now()),X5(process.execPath,[process.argv[1],"names"],{detached:!0,stdio:"ignore",env:process.env}).unref()}catch{}}function TM(t){return t4("sha256").update(t).digest("hex")}async function HM(t){let e=await fetch(t,{signal:AbortSignal.timeout(c4)});if(!e.ok)throw Error(`${t} answered ${e.status}`);return new Uint8Array(await e.arrayBuffer())}async function BM(t=CM()){let e=Ir(t);try{let r=JSON.parse(new TextDecoder().decode(await HM(`${AM}/ttheme.json`)));for(let[i,{file:o,sha256:s}]of Object.entries(r.layers)){let a=LM(e,`ttheme-${i}.json`);if(fg(a)&&TM(n4(a))===s)continue;let c=s4(await HM(`${AM}/${o}`));if(TM(c)!==s)throw Error(`${o} does not match its hash`);L(a,c)}hg(t,Date.now())}catch{return hg(t,Date.now()-FM+a4),1}Vc(t);let n=J();if(fg(Ge(n)))xi(he(n).palettes,t),jy(n,t);return 0}import{existsSync as GM,rmSync as d4,utimesSync as f4}from"node:fs";import{homedir as h4}from"node:os";import{join as mc}from"node:path";function m4(t){try{return K(t)}catch{return}}function p4(t){let{home:e,configHome:n}=t,r=m4(n),i={configHome:n,home:e},o=kt(Zt),s=o.map((c)=>c.unwire(i,r)),a=[mc(n,"ttheme"),t.cacheDir,t.stateDir];return{edits:[...xn(mc(t.zdotdir,".zshrc"),Br),...s.flatMap((c)=>c.edits)],removals:[...o.flatMap((c)=>c.shelf?ts(c.shelf.dir(i)):[]),...s.flatMap((c)=>c.removals),...a.filter((c)=>GM(c))],touches:s.flatMap((c)=>c.touches),...r?{state:r}:{}}}function g4(t,e,n=rn()){let r=[];for(let{file:o,content:s}of t.edits){let a=nb(o,s);r.push(a==="removed"?`Removed ${o} — ttheme had created it`:a==="restored"?`Took ttheme out of ${o}`:`Took ttheme out of ${o} — kept ${o}.ttheme.bak, since the file changed after ttheme's first edit`)}if(t.state){let o=Bi(e.configHome,{...t.state,off:!0,palettes:[]},!1,n,e.home);for(let s of kt(t.state.terminals))if(o.has(s.id))r.push(`Gave ${s.name} its own default profile back — it takes it at its next start`)}for(let o of t.removals)d4(o,{recursive:!0,force:!0});if(t.removals.length>0)r.push(`Deleted ${t.removals.length} files and folders ttheme wrote`);let i=new Date;for(let o of t.touches)f4(o,i,i);return r}function b4(){let t=h4();return{home:t,configHome:J(),zdotdir:process.env.ZDOTDIR??t,cacheDir:Mr(),stateDir:mc(process.env.XDG_STATE_HOME??mc(t,".local","state"),"ttheme")}}async function UM(t=!1){let e=b4(),n=p4(e);if(n.edits.length===0&&n.removals.length===0){console.log("Nothing of ttheme is installed");return}if(!t){if(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0)throw Error("uninstall asks before it deletes anything — run it in a terminal, or pass --yes");let r=mc(e.configHome,"ttheme");bu("ttheme uninstall"),Mn([...n.edits.map((o)=>`Take ttheme out of ${o.file}`),...n.removals.map((o)=>o===r?`Delete ${o} — settings, pins, every installed picture${GM(Zc(e.configHome))?`, and your markets under ${Zc(e.configHome)} (push them to GitHub first to keep them)`:""}`:`Delete ${o}`)].join(`
|
|
754
|
+
`),"Uninstall");let i=await en({message:"Remove ttheme?"});if(me(i)||!i)throw Fr("Nothing changed"),new Te}for(let r of g4(n,e))console.log(r);console.log("Open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}import{homedir as w4}from"node:os";async function WM(t){if(!Zt.includes(t))throw Error(`no terminal ${t} — one of ${Zt.join(", ")}`);let e=t,n=On[e],r=J(),i=w4(),o=rn(),s=K(r);if(s.terminals.includes(e))return console.log(`${n.name} is wired already`),0;let a={configHome:r,home:i};if(!n.offered(a,o))throw Error(`${n.name} cannot be wired on this system`);if(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0)throw Error("wire asks before it edits your configs — run it in a terminal");let c={...s,...n.installs?.(a)??{},terminals:[e]};Mn([...Du(r,c,i),...qu(r,c,i),"Each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out"].join(`
|
|
755
|
+
`),`Wiring ${n.name}`);let u=await en({message:`Wire ${n.name} now?`,initialValue:!1});if(me(u)||!u)throw Fr("Nothing changed"),new Te;let l=va(r,c,o,i),d={...l,terminals:[...s.terminals,e]};We(r,d),ue(r,dt(r),d,i,o);let f=Bi(r,l,!0,o,i),h=Yu(r,l,f,i);if(h.length>0)Mn(h.join(`
|
|
756
|
+
`),"Next");return da(`Wired ${n.name}`),0}var k4=new Set(["add","remove","market","default","on","off"]),y4={default:([t])=>eM(t),on:()=>nM(),off:()=>rM(),browse:()=>uM(),list:([t],{json:e})=>oM(t,e),add:(t,{market:e})=>XE(t,e),remove:(t)=>tM(t),update:(t)=>sM(t),market:([t,e])=>T1(t,e),new:([t],{from:e,in:n})=>FE(t,e,n),edit:([t])=>jE(t),check:([t],{fix:e})=>GE(t,e),share:([t],{tone:e})=>KE(t,e),init:(t,{yes:e})=>NM({yes:e}),uninstall:(t,{yes:e})=>UM(e),wire:([t])=>WM(t),info:()=>vM(),build:(t,{only:e})=>nd({only:e}),find:([t])=>IE(t),image:([t,e,n])=>bM(t,e,n),redraw:()=>pM(),names:()=>BM(),latest:()=>Qy(),tone:([t,e])=>_E(t,e),flatten:([t,e,n,r,i,o,s])=>kM(t,e,n,r,i,o,s),bake:([t,e,n,r])=>$M(t,e,n,r)},v4=Zo.map((t)=>({...t,run:y4[t.name]}));class ao extends Error{verb;constructor(t,e){super(t);this.verb=e}}function KM(t){let e=v4.find((n)=>n.name===t);if(!e)throw new ao(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function S4(t,e){let n={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:o,multiple:s}]of Object.entries(t.flags??{}))n[r]={type:i,multiple:s===!0,...o?{short:o}:{}};try{return $4({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new ao(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function E4(t){let[e,...n]=t;if(e===void 0)return{kind:"brief"};if(e==="-h"||e==="--help")return{kind:"help"};if(e==="-v"||e==="--version")return{kind:"version"};if(e==="help"){if(n[0]===void 0||n[0]==="all")return{kind:"help",all:n[0]==="all"};return{kind:"help",verb:KM(n[0])}}let r=KM(e),i=S4(r,n);if(i.values.help)return{kind:"help",verb:r};for(let[l,{choices:d}]of Object.entries(r.flags??{}))for(let f of[i.values[l]??[]].flat())if(d&&!d.includes(String(f)))throw new ao(`--${l} takes ${d.join(", ")} — not ${f}`,r);let o=i.positionals,s=r.args.filter((l)=>l.startsWith("<")).length,a=r.args.some((l)=>l.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(o.length<s)throw new ao(`missing ${r.args[o.length]}`,r);if(o.length>a)throw new ao(`too many arguments: ${o.slice(a).join(" ")}`,r);let{help:c,...u}=i.values;return{kind:"run",verb:r,args:o,flags:u}}var M4=[TypeError,RangeError,ReferenceError,SyntaxError];function x4(t){return M4.some((e)=>t instanceof e)||t instanceof Error&&"code"in t}async function zM(t){let e;try{let n=E4(t);if(n.kind==="version")return console.log(lt.version),0;if(n.kind==="brief")return console.error(xk()),1;if(n.kind==="help")return console.log(n.verb?Oh(n.verb):ha(n.all===!0)),0;if(e=n.verb,!n.verb.run)throw Error("runs in the shell layer — open a new tab once `ttheme init` has wired it");if(k4.has(n.verb.name))await w1();let r=await n.verb.run(n.args,n.flags);if(!n.verb.hidden&&n.verb.name!=="uninstall"){if(_M(),n.verb.name!=="update"&&n.verb.name!=="init")Zy(),n1()}return typeof r==="number"?r:0}catch(n){if(n instanceof ao)return console.error(n.verb?`ttheme ${n.verb.name}: ${n.message}
|
|
757
757
|
|
|
758
|
-
${
|
|
759
|
-
ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}${
|
|
758
|
+
${Oh(n.verb)}`:`ttheme: ${n.message} — see \`ttheme help\``),1;if(n instanceof Te)return 1;if(n instanceof Ca)return n.exit;let r=process.env.TTHEME_DEBUG&&n instanceof Error?n.stack:void 0;return console.error(`
|
|
759
|
+
ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}${x4(n)?"\nReport a bug with the output of `ttheme info`":""}`),1}}if(I4)if(process.env.TTHEME_DEBUG&&typeof Bun>"u"&&!process.sourceMapsEnabled){let t=O4(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=t.status??1}else process.exitCode=await zM(process.argv.slice(2));
|
|
760
760
|
|
|
761
|
-
//# debugId=
|
|
761
|
+
//# debugId=93C8B778F25D3CF464756E2164756E21
|
|
762
762
|
//# sourceMappingURL=ttheme.js.map
|