class Runescape{constructor(){this.mondrian=null,this.txList=[]}launch(e,t,n){this.blockHeight=`${e}`,this.txValueCache=t,this.parcelId=n?Number(n.split(":").pop()):null,this.loadRoutine()}async loadRoutine(){const e=await fetch("/r/sat/717782964543142/at/-1").then((e=>e.json())),t=await fetch(`/content/${e.id}`).then((async e=>atob(await e.text()))),n=await fetch("/r/sat/717782965662484/at/-1").then((e=>e.json())),i=await fetch(`/content/${n.id}`).then((async e=>JSON.parse(decodeURIComponent(escape(atob(await e.text()))))));window.enableApp=window.fullScreen||window.innerWidth==screen.width||window.innerWidth>=i.enableApp&&screen.width>=i.enableApp,window.enableRecursion=window.innerWidth>=i.enableRecursion&&screen.width>=i.enableRecursion,window.tipSatAmount=i.tipSatAmount,window.parcelHighLight=i.parcelHighLight,window.enableQG="518357"===this.blockHeight&&i.enableQG;const a=!(!window.enableQG||!window.enableApp||!window.ethereum&&!window.XverseProviders),o=a&&await fetch("/r/sat/717782964480455/at/-1").then((e=>e.json())),s=a&&await fetch(`/content/${o.id}`).then((async e=>JSON.parse(decodeURIComponent(escape(atob(await e.text()))))));window.tipCreator=a&&i.tipCreator,window.ethContracAbi=a&&s.ethContracAbi;const r=await fetch("/r/sat/717782964530533/at/-1").then((e=>e.json())),c=await fetch(`/content/${r.id}`),d=document.createElement("script");if(d.innerHTML=decodeURIComponent(escape(atob(await c.text()))),document.body.appendChild(d),a){const e=a&&await fetch("/r/sat/717782965138207/at/-1").then((e=>e.json())),n=a&&await fetch(`/content/${e.id}`),o=a&&document.createElement("script");o.innerHTML=decodeURIComponent(escape(atob(await n.text()))),document.body.appendChild(o),window.assetName=`${null!==this.parcelId?this.parcelId+"."+this.blockHeight:this.blockHeight}.bitmap`,"518357"===this.blockHeight?window.titleName=`NAKAMOTO MATRIX ${window.assetName} ${null!==this.parcelId?"parcel":""}`:window.titleName=window.assetName,window.introMsg=`Welcome to ${window.titleName} on Blocks Of Bitcoin!>This ${"518357"===this.blockHeight?"Nakamoto satoshi inscription":"metaverse property"} lives forever on Bitcoin! With qAI interacting with inscribed BTC content, this AI-empowered 3D world asset is a key to the future of the BTC metaverse. ${window.enableQG?"It showcases that AIs, smart contract utilities (EVM), and fast executions (Sol) can be built as BTC Ordinals on Bitcoin! No one can turn this off!>>Will you explore this brave new digital world?":""}`,window.ethContractAddress=i.evm[t].contractAddress,window.targetChainName=s.evm[t].chainName,window.quark20Msg=i.quark20Msg,window.targetChainId=s.evm[t].id,window.targetChainRPC=s.evm[t].rpc,window.targetChainExplorer=s.evm[t].explorer,window.targetChainCurrencyName=s.evm[t].currencyName,window.targetChainCurrencySymbol=s.evm[t].currencySymbol,initGate()}const l=await fetch("/content/a9f6a9b050af3de1a4ce714978c1f2231ba731f1f46731a16d0e411f89308566i0"),h=document.createElement("script");h.innerHTML=await l.text(),document.body.appendChild(h);const w=document.createElement("div");function p(e){const t=new Uint8Array(e.length/2);for(var n=0;n<t.length;n++)t[n]=parseInt(e.substring(2*n,2*n+2),16);return t.buffer}w.setAttribute("id","css3d"),document.body.appendChild(w),document.getElementById("css3d").style="margin: 0; overflow: hidden; position: absolute; top: 0px;";const f={};let m=null,b={},u=[],g=!1;window.selfInscriptionId,window.canCheckInventory=!1,null!==this.parcelId||(g=!0);if(m=(e=>{e=BigInt(e);const t=5000000000n,n=210000n,i=e=>t/2n**e,a=e/n;let o=0n;for(let e=0n;e<a;e++)o+=i(e)*n;return o+=e%n*i(a),String(o)})(this.blockHeight),Number(this.blockHeight)<84e4){const e=await import("/content/d36f3434809b4b4bed7da6c17d45fbb3e72b89d31f3334d9d34e168519b51bd9i0"),t=await e.getBitmapSat(Number(this.blockHeight)),n=await fetch(`/r/sat/${t}/at/-1`).then((e=>e.json()));try{const e=await fetch(`/r/metadata/${n.id}`).then((async e=>{if(e.ok)return await e.text();throw new Error(`${e.status} ${n.id} metadata not found`)})).then((e=>CBOR.decode(p(e.replace(/"/g,"")))));if(Number(e.blockHeight)===Number(this.blockHeight)&&(m=t,g)){window.selfInscriptionId=n.id,window.canCheckInventory=!0,window.selfSat=t;const e=await fetch(`/r/inscription/${n.id}`).then((e=>e.json()));window.ownerAddress=e.address}}catch(e){}}if((window.enableApp||window.enableRecursion)&&m){const e=await fetch(`/r/sat/${m}/at/-1`).then((e=>e.json()));let t=!0,n=0;try{if(e&&e.id)for(;t;){const i=await fetch(`/r/children/${e.id}/inscriptions/${n}`).then((e=>e.json()));t=i.more,u=u.concat(i.children),n+=1}}catch(e){}if(u.length>0){let e=!1;const t=g?0:797===this.parcelId?1:this.parcelId;for(let n=0+t;n<u.length+t;n++){const t=u[n];g?fetch(`/r/metadata/${t.id}`).then((async e=>{if(e.ok)return await e.text()})).then((e=>CBOR.decode(p(e.replace(/"/g,""))))).then((e=>{if(e&&e.parcelId){const n=Number(e.parcelId.split(":").pop());n in f||(f[n]=t.id)}})).catch((e=>{})):e||await fetch(`/r/metadata/${t.id}`).then((async e=>{if(e.ok)return await e.text()})).then((e=>CBOR.decode(p(e.replace(/"/g,""))))).then((async n=>{if(n&&n.parcelId){const i=Number(n.parcelId.split(":").pop());if(!(i in f)&&(f[i]=t.id,!g&&i===this.parcelId)){window.selfInscriptionId=t.id,window.selfSat=t.sat,window.canCheckInventory=!0,e=!0;const n=await fetch(`/r/inscription/${t.id}`).then((e=>e.json()));window.ownerAddress=n.address}}}))}}}window.THREE=await import("/content/0d013bb60fc5bf5a6c77da7371b07dc162ebc7d7f3af0ff3bd00ae5f0c546445i0");const{default:E}=await import("/content/036f12ea42d0fd664948e952b61f4c2f0d04e5672e7a7b3e2c33ac2544b6b1a7i0"),{iframe3DRenderer:y,iframe3D:x}=await import("/content/3b7fd16da25b50dc8042cee1b0ef7947c4ef83993fb9c74420d24bec94824155i0");function C(e,t,n,i,a,o,s,r){const c=document.createElement("div");c.style.width="350px",c.style.height="350px",c.style.backgroundColor="transparent",c.style.border="0px",c.style.overflow="hidden";const d=document.createElement("iframe");d.style.overflow="hidden",d.style.width="350px",d.style.height="350px",d.style.border="0px",d.setAttribute("scrolling","no"),d.src=e.includes("http")?e:`/content/${e}`,c.appendChild(d);const l=r||130,h=new x(c);return h.position.set(t,n,i),h.rotation.set(a-Math.PI/2,o,s),h.scale.set(1/l,1/l,1/l),h}const{POSTPROCESSING:R}=await import("/content/5f68b5b0e97c51679eba9f8987fc3945dc04fc894a0bb7c099385145cbd3a617i0"),I=R.BloomEffect,H=R.EffectComposer,T=R.EffectPass,M=R.RenderPass,v=R.BlendFunction,S={headers:{Accept:"application/json"}},A=await fetch("/r/blockheight",S).then((e=>e.json())),k=await fetch(`/r/blockinfo/${A}`,S).then((e=>e.json())),N=Math.floor(k.transaction_count/2);await this.fetchData();const $=N<this.txList.length?this.txList[N].value:0;for(let e=0;e<this.txList.length;e++)this.txList[e].size=this.logTxSize(this.txList[e].value);let L=0;for(let e of this.txList)L+=e.size*e.size;let B=Math.ceil(Math.sqrt(L));this.mondrian=new MondrianLayout(B,B),E.install({THREE:THREE});const P=window.innerWidth,j=window.innerHeight,G=new THREE.Clock;window.scene=new THREE.Scene;const O=new THREE.PerspectiveCamera(90,P/j,.01,1e3);O.position.set(0,B/1.6+2,0);const D=new y;D.setSize(P,j),document.getElementById("css3d").appendChild(D.domElement);const z=new THREE.WebGLRenderer({powerPreference:"high-performance",antialias:!0,alpha:!0});z.setSize(P,j),z.shadowMap.enabled=!0,z.setClearColor(0,0),z.setPixelRatio(window.devicePixelRatio),z.shadowMap.type=THREE.PCFSoftShadowMap;let W=new THREE.HemisphereLight(16777215,0,2);window.scene.add(W);let q=new THREE.DirectionalLight(16777215,1);q.position.set(-10,100,-10),q.target.position.set(0,0,0),q.castShadow=!0,window.scene.add(q),document.getElementById("root").appendChild(z.domElement);const F=new E(O,z.domElement),U=new E(O,D.domElement);let Q=13576336;this.blockHeight<84e4&&(Q=16356896);const V=new THREE.MeshStandardMaterial({color:Q,wireframe:!1}),X=new THREE.MeshStandardMaterial({color:16775424,wireframe:!1,roughness:.375});let _=0;const J=u.length-1;let K=!1;for(let e=0;e<this.txList.length;e++){const t=this.mondrian.place(this.txList[e].size),n=.5*t.r,i=new THREE.Mesh(new THREE.BoxGeometry(.9*t.r,.2*t.r,.9*t.r),this.txList[e].value===$&&_<=J?X:V);if(i.name="parcelBase",g&&f&&f[e])if(6!==t.r||K){let i=null;i=(e in f&&e in b&&b[e]&&b[e].length,new THREE.MeshStandardMaterial({color:16777215,wireframe:!1}));const a=new THREE.Mesh(new THREE.BoxGeometry(.7*t.r,.25*t.r,.7*t.r),i);a.position.set(t.position.x-B/2+n,.1*t.r/2,t.position.y-B/2+n),window.scene.add(a)}else{const e=new THREE.Group;e.add(new C(window.parcelHighLight,t.position.x-B/2+n,.1*t.r+.35,t.position.y-B/2+n,0,0,0,70)),window.scene.add(e),K=!0}else if(null!==this.parcelId&&e===this.parcelId){const e=new THREE.MeshStandardMaterial({color:16777215,wireframe:!1}),i=new THREE.Mesh(new THREE.BoxGeometry(.7*t.r,.25*t.r,.7*t.r),e);i.position.set(t.position.x-B/2+n,.1*t.r/2,t.position.y-B/2+n),window.scene.add(i)}this.txList[e].value===$&&(_+=1),window.scene.add(i),i.position.set(t.position.x-B/2+n,.1*t.r/2,t.position.y-B/2+n)}const Y=new H(z);Y.addPass(new M(window.scene,O));const Z=new I({blendFunction:v.ADD,mipmapBlur:!0,luminanceThreshold:.4,luminanceSmoothing:.12,intensity:2});Y.addPass(new T(O,Z)),z.render(window.scene,O),Y.render();let ee=!0;!function e(){const t=G.getDelta(),n=G.getElapsedTime(),i=F.update(t);U.update(t);ee&&window.scene&&(Z.intensity=1+1*Math.sin(n),Y.render(),D.render(window.scene,O)),requestAnimationFrame(e),i&&(ee=!0)}()}async fetchData(){const e=await fetch(this.txValueCache).then((e=>e.text()));if(e){let t=e.split(/\r?\n/);this.txList=new Array(t.length);for(let e=0;e<t.length;e++){let n=parseInt(t[e]);this.txList[e]={value:n}}}}logTxSize(e){if(0===e)return 1;let t=Math.ceil(Math.log10(e))-5;return Math.min(Number.MAX_SAFE_INTEGER,Math.max(1,t))}}