let msgMagicHashDigest,v_btc,r_btc,s_btc,sig,messageHash,btcPublicKey,ordAddress,provider,chainId,ethAddress,enableQG,tipCreator,ownerAddress,introMsg,ethContractAddress,targetChainName,ethMsg,quark20Msg,targetChainId,targetChainRPC,targetChainExplorer,targetChainCurrencyName,targetChainCurrencySymbol,enableApp,enableRecursion,tipSatAmount,parcelHighLight,selfInscriptions,sid,ethContracAbi,selfSat,characterCount=0,word="";const quarkLogoInscription="a0f1089d6871763d1368f60aeb7ccb60614e34f8595a39d85957ba30f999693ei0",ownerOverride=!1,initGate=async()=>{document.body.style="overflow: hidden;margin: 0 !important;padding: 0 !important;background-color: black;";const e=document.createElement("div");e.setAttribute("id","atomView");const t=document.createElement("div");t.setAttribute("id","overlay0"),t.style="position: absolute;width: 100% !important;height: 100% !important;display: block;z-index: 9;";const n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.setAttribute("viewBox","0 0 4096 4096");const r=document.createElementNS("http://www.w3.org/2000/svg","animateTransform");r.setAttribute("attributeType","xml"),r.setAttribute("attributeName","transform"),r.setAttribute("type","translate"),r.setAttribute("values","0,0; 0,5; 0,10; 0,5; 0,0"),r.setAttribute("keyTimes","0; 0.25; 0.5; 0.75; 1"),r.setAttribute("dur","7s"),r.setAttribute("repeatCount","indefinite"),r.setAttribute("calcMode","spline"),r.setAttribute("keySplines",".42 0 .58 1; .42 0 .58 1; .42 0 .58 1; .42 0 .58 1");const a=document.createElementNS("http://www.w3.org/2000/svg","g");a.setAttribute("transform","translate(520 500) scale(25 25)"),a.setAttribute("fill","#FEFFFE");const o=(e,t)=>{const n=document.createElementNS("http://www.w3.org/2000/svg","circle");n.setAttribute("cx",`${e}`),n.setAttribute("cy",`${t}`),n.setAttribute("r","2.5"),a.append(n)};o(70.7,66.8);for(let e=0;e<7;e++)o(20+10*e+10.7,26.8),o(30.7,30+10*e+6.8),o(90.7,30+10*e+6.8),o(20+10*e+10.7,96.8);const i=document.createElementNS("http://www.w3.org/2000/svg","g");i.setAttribute("transform","translate(520 500) scale(25 25)"),i.setAttribute("fill","#FEFFFE");const s=document.createElementNS("http://www.w3.org/2000/svg","circle");s.setAttribute("cx","80.7"),s.setAttribute("cy","66.8"),s.setAttribute("r","2.5"),i.append(s),s.append(r),n.append(a),n.append(i),t.append(n),e.append(t);const d=document.createElement("canvas");d.setAttribute("id","atomCanvas"),e.append(d),document.body.appendChild(e),document.getElementById("atomCanvas").width=window.innerWidth,document.getElementById("atomCanvas").height=window.innerHeight;const c=await fetch("/content/d94a775355aa322080db915da5eaee0b60fb5fd1464c170e67375e8487741a08i0"),l=document.createElement("script");l.innerHTML=decodeURIComponent(escape(atob(await c.text()))),document.body.appendChild(l),window.enableApp=window.fullScreen||window.innerWidth==screen.width||window.innerWidth>=1024&&screen.width>=1024,window.enableRecursion=window.innerWidth>=576&&screen.width>=576,maing(Math.floor(4*Math.random()),Math.floor(4*Math.random()),Math.floor(4*Math.random()),1337,Math.floor(4*Math.random()),Math.floor(40*Math.random())+10);const m=await fetch("/r/sat/717782965662484/at/-1").then((e=>e.json())),u=await fetch(`/content/${m.id}`).then((async e=>JSON.parse(decodeURIComponent(escape(atob(await e.text()))))));window.enableQG=!1;const h=!(!window.enableQG||!window.enableApp||!window.ethereum&&!window.XverseProviders);if(h){const e=h&&await fetch("/content/a9f6a9b050af3de1a4ce714978c1f2231ba731f1f46731a16d0e411f89308566i0"),t=document.createElement("script");t.innerHTML=await e.text(),document.body.appendChild(t);const n="";let r=!0,a=0,o=[];for(;n&&r;){const e=await fetch(`/r/children/${n}/inscriptions/${a}`).then((e=>e.json()));r=e.more,o=o.concat(e.children),a+=1}if(o.length>0){let e=!1;for(let t=0;t<o.length;t++){const n=o[t];e||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(hexStringToArrayBuffer(e.replace(/"/g,""))))).then((async t=>{if(t&&t.parcelId){const r=Number(t.parcelId.split(":").pop());if(!(r in childParcels)&&(childParcels[r]=n.id,!isParent&&r===this.parcelId)){window.selfInscriptionId=n.id,window.selfSat=n.sat,window.canCheckInventory=!0,e=!0;const t=await fetch(`/r/inscription/${n.id}`).then((e=>e.json()));return void(window.ownerAddress=t.address)}}})).catch((e=>{}))}}const i=h&&await fetch("/r/sat/717782964480455/at/-1").then((e=>e.json())),s=h&&await fetch(`/content/${i.id}`).then((async e=>JSON.parse(decodeURIComponent(escape(atob(await e.text())))))),d=await fetch("/r/sat/980154123863903/at/-1").then((e=>e.json())),c=await fetch(`/content/${d.id}`).then((e=>e.text()));enableQG=u.enableQG,tipCreator=u.tipCreator,ethContracAbi=s.ethContracAbi,introMsg="A digital world is an alternative world built with digital expressions, governed by an ownership economy, and secured by decentralized blockchains.>The Ordinal Theory provides an immutable foundation for building enduring digital expressions on Bitcoin.>To build on top of this foundation, we need additional ways to organize onchain apps with crosschain data.>>Quantum Gate presents a purely onchain approach to linking Bitcoin and Ethereum blockchains using their shared elliptic curve, SECP256K1.>By enabling access to Ethereum Smart Contracts within BTC ordinal inscriptions (like this),>Quantum Gate can bring more crosschain digital expressions for building the digital world."+(enableQG?">To explore this brave new world, mine your Quark20 ($Q)...>":""),ethContractAddress=u.evm[c].contractAddress,targetChainName=s.evm[c].chainName,ethMsg=`You are verified on Bitcoin. Verifying on ${targetChainName} via elliptic curve SECP256K1...`,quark20Msg=u.quark20Msg,targetChainId=s.evm[c].id,targetChainRPC=s.evm[c].rpc,targetChainExplorer=s.evm[c].explorer,targetChainCurrencyName=s.evm[c].currencyName,targetChainCurrencySymbol=s.evm[c].currencySymbol,enableApp=window.fullScreen||window.innerWidth==screen.width||window.innerWidth>=u.enableApp&&screen.width>=u.enableApp,enableRecursion=window.innerWidth>=u.enableRecursion&&screen.width>=u.enableRecursion,tipSatAmount=u.tipSatAmount,parcelHighLight=u.parcelHighLight,document.body.style="overflow: hidden;margin: 0 !important;padding: 0 !important;background-color: black;"}if(h&&(eth||xverse)){const e=await fetch("/content/10d92ec11b31ea21752ac46781d109bcf53bba04ae9b1044747057335c77ef9ci0"),t=document.createElement("script");t.innerHTML=await e.text(),document.body.appendChild(t);const n=await fetch("/content/d445cf76e59778e09e1cdaecd39bf741df91a32b83dea991efbbeb05d2258067i0"),r=document.createElement("script");r.innerHTML=await n.text(),document.body.appendChild(r),enableApp&&setTimeout((()=>{setup()}),2e3)}},xverse=window.XverseProviders,tsk=(new Date).toJSON().slice(0,16),quantumMsg=`Unlocking Quark20 on ${tsk}`,setup=async()=>{let e;selfInscriptions=[];const t=async()=>{document.getElementById("info0").innerHTML='<span style="color: white">Checking Quark20 on Ethereum via MetaMask...</span>';const e=await eth.request({method:"eth_requestAccounts"}).catch((e=>{document.getElementById("info0").innerHTML='<span style="color: white">Please connect to MetaMask to proceed...</span>',4001===e.code||(document.getElementById("btnEth").style.display="",console.error(e))}));ethAddress=e[0],document.getElementById("info0").innerHTML="Verifying Quark20 on Ethereum via MetaMask...",document.getElementById("btnEth").style.display="none",provider=new ethers.BrowserProvider(window.ethereum);const t=(await provider.getNetwork()).chainId;chainId=Number(t)},n=document.createElement("div");n.setAttribute("id","ordOsDiv0"),n.style="color: white; position: absolute;width: 100% !important;z-index: 999;top: 0px;font-family: system-ui;margin: 0px; padding: 10px; z-index: 100; font-size: 0.9em;line-height: 150%;",document.body.appendChild(n);const r=document.createElement("div");if(r.setAttribute("id","info0"),r.style.marginLeft="10px",r.style.marginBottom="20px",r.style.fontSize=".9em",n.appendChild(r),characterCount=0,setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),20),xverse||eth?enableQG?(document.getElementById("info0").innerHTML="",word=`${introMsg}>>Connect a ${xverse&&eth?"BTC":"ETH"} wallet to continue...>`):(document.getElementById("info0").innerHTML="",word=`${introMsg}`):(document.getElementById("info0").innerHTML="",word=">Xverse and MetaMask wallet required to continue>>"),xverse){const e=document.createElement("button");e.setAttribute("id","btnXverse"),e.style.padding="7px",e.style.color="#cccccc",e.style.cursor="pointer",e.style.fontSize=".9em",e.style.border="1px solid white",e.style.backgroundColor="transparent",e.style.marginLeft="10px",e.style.display="none",e.onclick=()=>(async()=>{document.getElementById("btnXverse").disable=!0,document.getElementById("btnXverse").style.display="none",document.getElementById("btnEth").style.display="none",document.getElementById("info0").innerHTML="<p>Connecting to Bitcoin via Xverse...</p>";const e=await xverse.BitcoinProvider.request("getAccounts",{purposes:["payment","ordinals"],message:"Quantum Gate"},xverse.BitcoinProvider);if(e.error&&(document.getElementById("btnXverse").style.display="",document.getElementById("info0").innerHTML="<p>Connect a BTC wallet to continue...</p>"),e.result){const t=e.result.find((e=>"ordinals"===e.purpose)),n=e.result.find((e=>"payment"===e.purpose));btcAddress=n?.address,ordAddress=t?.address,btcPublicKey=n?.publicKey,sid=Number(selfSat||"45000000000").toString(16).toUpperCase();const r=`${sid} ${quantumMsg} with BTC address ${btcAddress}`;document.getElementById("info0").innerHTML=`<span style="color: #999999">BTC Address: ${btcAddress}<br/><br/><span style="color: white">Sign a human-readable BTC message to verify:<br/>"${r}"</span></span>`,document.getElementById("btnXverse").style.display="none";const a=await(async e=>{try{const t=await xverse.BitcoinProvider.request("signMessage",{address:btcAddress,message:e},xverse.BitcoinProvider);if(t.result)return t.result}catch(e){return document.getElementById("info0").innerHTML='<p style="color: red">invalid signing attempt on BTC...</p>',setTimeout((()=>{location.reload()}),5e3),null}})(r);a&&a.address===btcAddress?ordAddress===ownerAddress?(document.getElementById("info0").innerHTML=`<span style="color: #999999">My BTC address: ${btcAddress}<br/>My Ordinals address: ${ordAddress}<br/>Owner address: ${ownerAddress}</span><p>${ethMsg}<br/><br/>Connect an ETH wallet to continue...</p>`,document.getElementById("btnEth").style.display="",messageHash=a.messageHash,msgMagicHashDigest=ethers.hexlify(ethers.decodeBase64(a.messageHash)),sig=ethers.decodeBase64(a.signature),v_btc=Number(ethers.dataSlice(sig,0,1))-27&!1?27:28,r_btc=ethers.zeroPadValue(ethers.dataSlice(sig,1,33),32),s_btc=ethers.zeroPadValue(ethers.dataSlice(sig,33,65),32)):(document.getElementById("info0").innerHTML=`<span style="color: #999999">My BTC address: ${btcAddress}<br/>My Ordinals address: ${ordAddress}`,ownerAddress?(document.getElementById("info0").innerHTML+=`<br/>Owner address: ${ownerAddress}</span><p>`,eth?(document.getElementById("btnEth").style.display="",document.getElementById("info0").innerHTML+="You do not own this BTC inscription. However, you can still mint some Quark20!</p>"):(tipRecipient=ownerAddress,document.getElementById("info0").innerHTML+="Quark20 is not available yet. How about tipping the owner?</p>",document.getElementById("btnXverseTip").style.display="")):eth?(document.getElementById("btnEth").style.display="",document.getElementById("info0").innerHTML="</span><p>You do not own this BTC inscription. However, you can still mint some Quark20!</p>"):(tipRecipient=tipCreator,document.getElementById("btnXverseTip").style.display="",document.getElementById("info0").innerHTML+="</span><p>Quark20 is not available yet...<br/><br/>Would you tip the creator?</p>")):(document.getElementById("info0").innerHTML='<p style="color: red">invalid BTC signature</p>',setTimeout((()=>{location.reload()}),5e3)),await(async()=>{let e=0,t=60;for(;t>=e;){const n=await xverse.BitcoinProvider.request("ord_getInscriptions",{offset:e,limit:60});if(e+=60,n.result&&n.result.inscriptions.length>0){const e=n.result;t=e.total,selfInscriptions=selfInscriptions.concat(e.inscriptions)}}})()}})(),e.innerHTML="Connect Xverse",n.appendChild(e),setTimeout((()=>{e.style.display=""}),Math.floor(22*word.length))}if(xverse){const e=document.createElement("button");e.setAttribute("id","btnXverseTip"),e.style.padding="7px",e.style.color="#cccccc",e.style.cursor="pointer",e.style.fontSize=".9em",e.style.border="1px solid white",e.style.backgroundColor="transparent",e.style.marginLeft="10px",e.style.display="none",e.onclick=()=>(async()=>{document.getElementById("btnXverseTip").disabled=!0,"success"===(await xverse.BitcoinProvider.request("sendTransfer",{recipients:[{address:tipRecipient,amount:Number(tipSatAmount)}]})).status||setTimeout((()=>{location.reload()}),5e3)})(),e.innerHTML=`Tip ${tipSatAmount} sats`,n.appendChild(e)}if(eth){const r=document.createElement("button");r.setAttribute("id","btnEth"),r.style.padding="7px",r.style.color="#cccccc",r.style.cursor="pointer",r.style.fontSize=".9em",r.style.border="1px solid white",r.style.backgroundColor="transparent",r.style.marginLeft="10px",r.style.display="none",r.onclick=async()=>{xverse&&eth&&ordAddress===ownerAddress?(async()=>{if(await t(),chainId!==targetChainId)document.getElementById("btnEth").style.display="",await switchEthNetwork();else{const t=await provider.getSigner();if(e=t,ethers.formatEther(await provider.getBalance(e))<.001)return void(document.getElementById("info0").innerHTML=`<span style="color: red">Not enough balance to proceed via ${targetChainName}</span>`);const n=new ethers.Contract(ethContractAddress,ethContracAbi,e),r=await n.balanceOf(e.address),a=Point.fromHex(`${btcPublicKey}`),o=ethers.computeAddress(`0x${a.toHex(!1)}`);let i,s,d,c;try{i=ethers.formatEther(await n.maxBtcSupply()),s=Number(await n.currentEpoch()),d=ethers.formatEther(await n.rewardsBtcSig(s)),c=ethers.formatEther(await n.totalBtcSupply())}catch(e){document.getElementById("info0").innerHTML='<span style="color: red">This chain is not supported yet.</span>',setTimeout((()=>{location.reload()}),1e4)}if(2*d+c<=i){const e=await n.getRemainTimeLocked(o);if(Number(e)>86400){let e;if(document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${ethAddress}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`,r_btc&&s_btc){let t;try{const e=await n.recoverEthAddressFromVRS(msgMagicHashDigest,27,r_btc,s_btc),r=await n.recoverEthAddressFromVRS(msgMagicHashDigest,28,r_btc,s_btc);o===e?(v_btc=27,t=e):o===r&&(v_btc=28,t=r)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">oops</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}if(v_btc&&t===o)try{e=await n.claim(`${sid} ${quantumMsg} with BTC address ${btcAddress}`,o,msgMagicHashDigest,v_btc,r_btc,s_btc)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">invalid claiming attempt...</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}else document.getElementById("info0").innerHTML='<p style="color: red">oops</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}e&&e.hash&&(document.getElementById("info0").innerHTML=`<span style="color: #999999">Verifying signed messages...<br/>Minting Quark20 tokens using BTC and ETH's elliptic curve SECP256K1 via ${targetChainName}...<br/>Just a moment...<br/>And, Good Luck!</span>`,await e.wait(),document.getElementById("info0").innerHTML=`<span style="color: #999999">TX: ${e.hash} via ${targetChainName}<br/><br/><b style="color: white">You successfully unlocked Quark20 ($Q) from BTC with ${targetChainName}!</b></span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3))}else{let t=0;document.getElementById("info0").innerHTML="",word=quark20Msg,characterCount=0;const n=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),n),document.getElementById("overlay0").style.display="none",setTimeout((()=>{setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(r)} $Q.<br/> Please wait ${86400-Number(e)-t} seconds for the next Quark20 claim. Be patient...</span>`,t++}),1e3)}),Math.floor(word.length*n))}}else document.getElementById("info0").innerHTML=`<span style="color: white">${quark20Msg}<br/>You currently own <b>${ethers.formatEther(r)}</b> $Q.</span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3)}})():(async()=>{if(await t(),chainId!==targetChainId)await switchEthNetwork();else{const t=await provider.getSigner();if(e=t,ethers.formatEther(await provider.getBalance(e))<.001)return void(document.getElementById("info0").innerHTML=`<span style="color: red">Not enough balance to proceed via ${targetChainName}</span>`);const n=`${Number(targetChainId).toString(16).toUpperCase()} ${quantumMsg} with ETH address ${e.address}`;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${ethAddress}<br/><br/><span style="color: white">Sign a human-readable ETH message to verify:<br/>"${n}"</span></span>`;const r=await(async e=>{try{const t=ethAddress,n=function(e){for(var t="",n=0;n<e.length;n++)t+=e.charCodeAt(n).toString(16);return t}(e);return await eth.request({method:"personal_sign",params:[n,t]})}catch(e){return document.getElementById("info0").innerHTML='<p style="color: red">invalid signing attempt on ETH...</p>',setTimeout((()=>{location.reload()}),5e3),null}})(n),a=ethers.verifyMessage(n,r),o=new ethers.Contract(ethContractAddress,ethContracAbi,e),i=await o.balanceOf(e.address);if(a.toLowerCase()===ethAddress.toLowerCase()){let t,a,s,d;try{t=ethers.formatEther(await o.maxEthSupply()),a=Number(await o.currentEpoch()),s=ethers.formatEther(await o.rewardsEthSig(a)),d=ethers.formatEther(await o.totalEthSupply())}catch(e){document.getElementById("info0").innerHTML='<span style="color: red">This chain is not supported yet.</span>',setTimeout((()=>{location.reload()}),1e4)}if(2*s+d<=t){const t=await o.getRemainTimeLocked(e.address);if(Number(t)>86400){let e;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${ethAddress}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`;try{e=await o.mint(n,r)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">invalid minting attempt...</p>',setTimeout((()=>{location.reload()}),1e4)}e&&e.hash&&(document.getElementById("info0").innerHTML=`<span style="color: #999999">Verifying signed messages...<br/>Minting Quark20 tokens using ETH's elliptic curve SECP256K1 via ${targetChainName}...<br/>Just a moment...<br/>And, Good Luck!</span>`,await e.wait(),document.getElementById("info0").innerHTML=`<span style="color: #999999">TX: ${e.hash} via ${targetChainName}<br/><br/><b style="color: white">You successfully unlocked Quark20 ($Q) from BTC with ${targetChainName}!</b></span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3))}else{let e=0;document.getElementById("info0").innerHTML="",word=quark20Msg,characterCount=0;const n=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),n),document.getElementById("overlay0").style.display="none",setTimeout((()=>{setTimeout((()=>{document.getElementById("btnAddQuark").style.display=""}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(i)} $Q.<br/> Please wait ${86400-Number(t)-e} seconds for the next Quark20 mint. Be patient...</span>`,e++}),1e3)}),Math.floor(word.length*n))}}}}})()},r.innerHTML="Connect Metamask",n.appendChild(r),enableQG&&(xverse&&eth||setTimeout((()=>{r.style.display=""}),Math.floor(22*word.length)))}if(eth){const e=document.createElement("button");e.setAttribute("id","btnAddQuark"),e.style.padding="7px",e.style.color="#cccccc",e.style.cursor="pointer",e.style.fontSize=".9em",e.style.border="1px solid white",e.style.backgroundColor="transparent",e.style.marginLeft="10px",e.style.display="none",e.onclick=async()=>{addQuark20ToMM()},e.innerHTML="Add Quark20 ($Q) to MetaMask",n.appendChild(e)}},eth=window.ethereum,switchEthNetwork=async()=>{if(document.getElementById("btnEth").style.display="none",targetChainId>1)try{await eth.request({method:"wallet_addEthereumChain",params:[{chainId:`0x${targetChainId.toString(16)}`,rpcUrls:[targetChainRPC],chainName:targetChainName,nativeCurrency:{name:targetChainCurrencyName,symbol:targetChainCurrencySymbol,decimals:18},blockExplorerUrls:[targetChainExplorer]}]}),setTimeout((()=>{location.reload()}),2e3)}catch(e){setTimeout((()=>{location.reload()}),2e3)}await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${targetChainId.toString(16)}`}]}),setTimeout((()=>{location.reload()}),2e3)},addQuark20ToMM=async()=>{await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${targetChainId.toString(16)}`}]});const e=ethContractAddress,t=`https://ordinals.com/content/${quarkLogoInscription}`;if(e)try{await ethereum.request({method:"wallet_watchAsset",params:{type:"ERC20",options:{address:e,symbol:"T",decimals:18,image:t}}})}catch(e){setTimeout((()=>{location.reload()}),1e4)}};