1"use strict";(()=>{var ut="39ee2809cfbebffc3d74e5b28e8fc879",dt="wss://relay.walletconnect.com",z={"mainnet-beta":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",devnet:"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",testnet:"solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z"},P=null,A=null,u=null,S=null;function M(){return window.location.pathname.includes("devnet")?"devnet":"mainnet-beta"}function O(t){return z[t||M()]||z["mainnet-beta"]}function F(t){let e=t||M();return e==="devnet"?"https://api.devnet.solana.com":e==="testnet"?"https://api.testnet.solana.com":"https://walletdeploy.com/rpc"}function U(t,e){let n=e||M(),r=n==="mainnet-beta"?"":`?cluster=${n}`;return`https://explorer.solana.com/tx/${t}${r}`}function l(){return u}function _(){return S}async function K(){if(!window.solana?.isPhantom)throw new Error("Phantom not found. Install at phantom.app");return u=(await window.solana.connect()).publicKey.toString(),S="phantom",u}async function q(){if(!window.solflare?.isSolflare)throw new Error("Solflare not found. Install at solflare.com");return await window.solflare.connect(),u=window.solflare.publicKey.toString(),S="solflare",u}async function V(t,e,n){let r=window.SignClient||window.WalletConnectSignClient?.SignClient||window["@walletconnect/sign-client"]?.SignClient||window["@walletconnect/sign-client"];if(!r||!r.init&&!r.SignClient)throw new Error("SignClient not loaded");P=await(r.init?r:r.SignClient).init({projectId:ut,relayUrl:dt,metadata:{name:"WalletDeploy",description:"Solana program management tool for hardware wallets.",url:"https://walletdeploy.com",icons:["https://walletdeploy.com/favicon.ico"]}});let s=O(),{uri:c,approval:w}=await P.connect({requiredNamespaces:{solana:{methods:["solana_signTransaction"],chains:[s],events:[]}}});return c&&t&&(t.innerHTML="",new window.QRCode(t,{text:c,width:200,height:200})),A=await w(),u=A.namespaces.solana.accounts[0].split(":")[2],S="walletconnect",P.on("session_delete",()=>{A=null,u=null,S=null,n&&n()}),P.on("session_expire",()=>{A=null,u=null,S=null,n&&n()}),e&&e(),u}function gt(t){let e="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",n=BigInt(0);for(let a of t)n=n*BigInt(58)+BigInt(e.indexOf(a));let r=new Uint8Array(64);for(let a=63;a>=0;a--)r[a]=Number(n&BigInt(255)),n>>=BigInt(8);return r}async function H(t,e=!1){if(!u)throw new Error("No wallet connected");if(S==="phantom")if(e){let{signature:n}=await window.solana.signAndSendTransaction(t,{skipPreflight:!0});return`ALREADY_SENT:${n}`}else return(await window.solana.signTransaction(t)).serialize();if(S==="solflare")return(await window.solflare.signTransaction(t)).serialize();if(S==="walletconnect"){let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1}),r="";for(let s=0;s<n.length;s++)r+=String.fromCharCode(n[s]);let a=await P.request({topic:A.topic,chainId:O(),request:{method:"solana_signTransaction",params:{transaction:btoa(r)}}});if(a.signature){let{PublicKey:s}=window.solanaWeb3;return t.addSignature(new s(u),gt(a.signature)),t.serialize()}else if(a.transaction){let s=a.transaction;return s.match(/^[0-9a-fA-F]+$/)?new Uint8Array(s.match(/.{1,2}/g).map(c=>parseInt(c,16))):Uint8Array.from(atob(s),c=>c.charCodeAt(0))}throw new Error("Unexpected wallet response")}throw new Error("Unknown wallet type")}var mt="MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",yt="ComputeBudget111111111111111111111111111111";function C(){return window.solanaWeb3}function Y(){let{TransactionInstruction:t,PublicKey:e}=C(),n=new Uint8Array(9);return n[0]=3,new DataView(n.buffer).setBigUint64(1,BigInt(5e4),!0),new t({programId:new e(yt),keys:[],data:n})}function G(t,e){let{TransactionInstruction:n,PublicKey:r}=C();return new n({programId:new r(mt),keys:[{pubkey:e,isSigner:!0,isWritable:!1}],data:new TextEncoder().encode(t)})}function R(){let{Connection:t}=C();return new t(F(),"confirmed")}async function L(t,e,n=9e4){let r=Date.now();for(;Date.now()-r<n;){await new Promise(s=>setTimeout(s,2e3));let a=await t.getSignatureStatus(e,{searchTransactionHistory:!0});if(a?.value?.err)throw new Error("Transaction failed: "+JSON.stringify(a.value.err));if(a?.value?.confirmationStatus==="confirmed"||a?.value?.confirmationStatus==="finalized")return}throw new Error("Transaction confirmation timeout")}async function y(t,e,n){let{Transaction:r,PublicKey:a}=C(),s=R(),c=l();if(!c)throw new Error("No wallet connected");let w=new a(c),I=_(),m=e.useSignAndSend!==void 0?e.useSignAndSend:I==="phantom",{blockhash:E}=await s.getLatestBlockhash("confirmed"),B=new r({recentBlockhash:E,feePayer:w});B.add(Y()),e.description&&B.add(G(e.description,w));for(let b of t)B.add(b);n(e.statusId,"\u23F3 Approve in your wallet...","loading");let x=await H(B,m);
1if(typeof x=="string"&&x.startsWith("ALREADY_SENT:")){let b=x.slice(13);return n(e.statusId,"\u23F3 Confirming transaction...","loading"),await L(s,b),b}let it=x;for(let b=1;b<=3;b++)try{let h=await s.sendRawTransaction(it,{skipPreflight:!0,preflightCommitment:"confirmed"});return n(e.statusId,"\u23F3 Confirming transaction...","loading"),await L(s,h),h}catch(h){let ct=h.message&&(h.message.includes("block height exceeded")||h.message.includes("Blockhash not found"));if(h.message&&h.message.includes("already been processed"))return"";if(ct&&b<3){n(e.statusId,`\u23F3 Blockhash expired \u2014 retrying (${b+1}/3)...`,"loading");let{blockhash:lt}=await s.getLatestBlockhash("confirmed"),k=new r({recentBlockhash:lt,feePayer:w});k.add(Y()),e.description&&k.add(G(e.description,w));for(let W of t)k.add(W);n(e.statusId,"\u23F3 Approve again in your wallet...","loading");let v=await H(k,m);if(typeof v=="string"&&v.startsWith("ALREADY_SENT:")){let W=v.slice(13);return await L(s,W),W}let N=await s.sendRawTransaction(v,{skipPreflight:!0});return n(e.statusId,"\u23F3 Confirming transaction...","loading"),await L(s,N),N}throw h}throw new Error("Max retries exceeded")}var d="BPFLoaderUpgradeab1e11111111111111111111111";function g(){return window.solanaWeb3}function i(t){let{PublicKey:e}=g();return new e(t)}function T(t){let{PublicKey:e}=g(),[n]=e.findProgramAddressSync([new e(t).toBytes()],new e(d));return n}function J(t,e,n){let{TransactionInstruction:r}=g();return new r({programId:i(d),keys:[{pubkey:i(t),isSigner:!1,isWritable:!0},{pubkey:i(e),isSigner:!0,isWritable:!1},{pubkey:i(n),isSigner:!1,isWritable:!1}],data:new Uint8Array([4,0,0,0])})}function Q(t,e,n){let{TransactionInstruction:r}=g();return new r({programId:i(d),keys:[{pubkey:i(t),isSigner:!1,isWritable:!0},{pubkey:i(e),isSigner:!1,isWritable:!0},{pubkey:i(n),isSigner:!0,isWritable:!1}],data:new Uint8Array([5,0,0,0])})}function X(t,e,n){let{TransactionInstruction:r}=g(),a=T(t);return new r({programId:i(d),keys:[{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:i(e),isSigner:!0,isWritable:!1},{pubkey:i(n),isSigner:!1,isWritable:!1}],data:new Uint8Array([4,0,0,0])})}function Z(t,e,n){let{TransactionInstruction:r}=g(),a=T(t),s=new Uint8Array(8);return s[0]=6,new DataView(s.buffer).setUint32(4,e,!0),new r({programId:i(d),keys:[{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:i(t),isSigner:!1,isWritable:!0},{pubkey:i("11111111111111111111111111111111"),isSigner:!1,isWritable:!1},{pubkey:i(n),isSigner:!0,isWritable:!0}],data:s})}function j(t,e,n,r){let{TransactionInstruction:a}=g(),s=T(t);return new a({programId:i(d),keys:[{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i(t),isSigner:!1,isWritable:!0},{pubkey:i(e),isSigner:!1,isWritable:!0},{pubkey:i(n),isSigner:!1,isWritable:!0},{pubkey:i("SysvarRent111111111111111111111111111111111"),isSigner:!1,isWritable:!1},{pubkey:i("SysvarC1ock11111111111111111111111111111111"),isSigner:!1,isWritable:!1},{pubkey:i(r),isSigner:!0,isWritable:!1}],data:new Uint8Array([3,0,0,0])})}function tt(t,e,n){let{TransactionInstruction:r}=g(),a=T(t);return new r({programId:i(d),keys:[{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:i(e),isSigner:!1,isWritable:!0},{pubkey:i(n),isSigner:!0,isWritable:!1},{pubkey:i(t),isSigner:!1,isWritable:!0}],data:new Uint8Array([5,0,0,0])})}function et(t,e){let{TransactionInstruction:n}=g(),r=T(t);return new n({programId:i(d),keys:[{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i(e),isSigner:!0,isWritable:!1}],data:new Uint8Array([4,0,0,0,0])})}async function nt(t,e){let{PublicKey:n}=g(),r=new n(e),s=(await t.getProgramAccounts(i(d),{filters:[{memcmp:{offset:13,bytes:r.toBase58()}}]})).filter(({account:I})=>I.data[0]===3);if(s.length===0)return[];let c=await t.getProgramAccounts(i(d),{filters:[{memcmp:{offset:0,bytes:"3"}}]}),w=new Map;for(let{pubkey:I,account:m}of c)if(m.data[0]===2&&m.data.length>=36){let E=new n(m.data.slice(4,36)).toBase58();w.set(E,I.toBase58())}return s.map(({pubkey:I,account:m})=>{let E=I.toBase58(),B=w.get(E)||E,x=m.data[12];return{programId:B,programDataAddress:E,authority:x===1?new n(m.data.slice(13,45)).toBase58():null,dataSize:m.data.length-45,upgradeable:x===1}})}async function rt(t,e){let{PublicKey:n}=g(),r=new n(e);return(await t.getProgramAccounts(i(d),{filters:[{memcmp:{offset:5,bytes:r.toBase58()}}]})).filter(({account:s})=>s.data[0]===1&&s.lamports>0).map(({pubkey:s,account:c})=>({address:s.toBase58(),lamports:c.lamports,sol:c.lamports/1e9}))}function o(t,e,n){let r=document.getElementById(t);r&&(r.textContent=e,r.className="status show "+n)}function f(t,e,n){let r=document.getElementById(t);r&&(r.innerHTML=e,r.className="status show "+n)}function p(t){return` 2 3<a href="${U(t)}" target="_blank" rel="noopener noreferrer" style="color:var(--green);
3word-break:break-all;">View on Solana Explorer \u2192</a>`}function D(t,e){for(let n of t){let r=document.getElementById(n);r&&(r.disabled=e)}}function at(){return window.solanaWeb3}var st=window.location.pathname.includes("devnet");if(st){let t=document.createElement("div");t.style.cssText="background:rgba(255,153,0,0.15);border-bottom:2px solid rgba(255,153,0,0.5);padding:12px 40px;text-align:center;font-size:13px;font-weight:600;color:#ffaa33;",t.innerHTML='\u26A0\uFE0F DEVNET \u2014 Transactions have no real value. Safe to test. <a href="/app.html" style="color:#ffaa33;margin-left:16px;">Switch to Mainnet \u2192</a>',document.body.insertBefore(t,document.body.firstChild)}document.addEventListener("DOMContentLoaded",()=>{let t=document.querySelectorAll('a[href="/deploy.html"]');st&&t.forEach(e=>e.setAttribute("href","/deploy_devnet.html"))});var ot=["setBufBtn","closeBtn","authBtn","extendBtn","upgradeBtn","closeProgramBtn","freezeProgramBtn","killBtn","reactivateBtn"];function $(t){document.getElementById("qrcode").innerHTML="",document.getElementById("badge").style.display="inline-flex",document.getElementById("pk").textContent=t.slice(0,8)+"..."+t.slice(-8),document.getElementById("connectBtn").style.display="none",document.getElementById("phantomBtn").style.display="none",document.getElementById("solflareBtn").style.display="none",document.getElementById("orDivider").style.display="none",D(ot,!1);let e=["scanProgramWallet","scanWallet","setBufNewAuth","closeProgramRecipient"];for(let n of e){let r=document.getElementById(n);r&&!r.value&&(r.value=t)}}window.connectPhantom=async()=>{try{let t=await K();$(t)}catch(t){alert(t.message)}};window.connectSolflare=async()=>{try{let t=await q();$(t)}catch(t){alert(t.message)}};window.connectWallet=async()=>{document.getElementById("connectBtn").setAttribute("disabled","true");try{let t=document.getElementById("qrcode"),e=await V(t,void 0,()=>{document.getElementById("badge").style.display="none",document.getElementById("connectBtn").style.display="block",document.getElementById("connectBtn").removeAttribute("disabled"),document.getElementById("connectBtn").textContent="Reconnect Wallet \u2192",D(ot,!0)});$(e)}catch(t){document.getElementById("connectBtn").removeAttribute("disabled"),document.getElementById("connectBtn").textContent="Connect via WalletConnect",alert("Connect failed: "+t.message)}};window.setBufferAuthority=async()=>{let t=document.getElementById("setBufAddr").value.trim(),e=document.getElementById("setBufNewAuth").value.trim();if(!t||!e){o("setBufStatus","\u274C Fill in both fields","error");return}try{let n=J(t,l(),e),r=await y([n],{statusId:"setBufStatus",description:`SET-BUFFER-AUTHORITY | Buffer: ${t} | NewAuth: ${e}`},o);f("setBufStatus","\u2705 Buffer authority updated!"+p(r),"success")}catch(n){o("setBufStatus","\u274C "+n.message,"error")}};window.closeBuffer=async()=>{let t=document.getElementById("bufferAddr").value.trim(),e=document.getElementById("recipientAddr").value.trim();if(!t||!e){o("closeStatus","\u274C Fill in both fields","error");return}try{let n=Q(t,e,l()),r=await y([n],{statusId:"closeStatus",description:`RECOVER-SOL | Buffer: ${t} | Recipient: ${e}`},o);f("closeStatus","\u2705 SOL recovered!"+p(r),"success")}catch(n){o("closeStatus","\u274C "+n.message,"error")}};window.transferAuthority=async()=>{let t=document.getElementById("authProgramId").value.trim(),e=document.getElementById("newAuthority").value.trim();if(!t||!e){o("authStatus","\u274C Fill in both fields","error");return}try{let n=X(t,l(),e),r=await y([n],{statusId:"authStatus",description:`TRANSFER-AUTHORITY | Program: ${t} | NewAuth: ${e}`},o);f("authStatus","\u2705 Authority transferred!"+p(r),"success")}catch(n){o("authStatus","\u274C "+n.message,"error")}};window.extendProgram=async()=>{let t=document.getElementById("extendProgramId").value.trim(),e=parseInt(document.getElementById("extendBytes").value.trim());if(!t){o("extendStatus","\u274C Enter a program ID","error");return}try{let n=Z(t,e,l()),r=await y([n],{statusId:"extendStatus",description:`EXTEND-PROGRAM | Program: ${t} | Bytes: +${e}`},o);f("extendStatus","\u2705 Extended by "+e+" bytes!"+p(r),"success")}catch(n){o("extendStatus","\u274C "+n.message,"error")}};window.upgradeProgram=async()=>{let t=document.getElementById("upgradeProgramId").value.trim(),e=document.getElementById("upgradeBufferAddr").value.trim(),n=document.getElementById("spillAddr").value.trim();if(!t||!e||!n){o("upgradeStatus","\u274C Fill in all fields","error");return}try{let r=j(t,e,n,l()),a=await y([r],{statusId:"upgradeStatus",description:`UPGRADE-PROGRAM | Program: ${t} | Buffer: ${e}`},o);f("upgradeStatus","\u2705 Program upgraded!"+p(a),"success")}catch(r){o("upgradeStatus","\u274C "+r.message,"error")}};window.closeProgram=async()=>{let t=document.getElementById("closeProgramId").value.trim(),e=document.getElementById("closeProgramRecipient").value.trim();if(!t||!e){o("closeProgramStatus","\u274C Fill in both fields","error");return}if(confirm(`\u26A0\uFE0F IRREVERSIBLE: Close program ${t}? 4 5The Program ID will be gone forever.`))try{let n=tt(t,e,l()),r=await y([n],{statusId:"closeProgramStatus",description:`CLOSE-PROGRAM | Program: ${t} | Recipient: ${e}`},o);f("closeProgramStatus","\u2705 Program closed! SOL recovered."+p(r),"success")}catch(n){o("closeProgramStatus","\u274C "+n.message,"error")}};window.freezeProgram=async()=>{let t=document.getElementById("freezeProgramId").value.trim(),e=document.getElementById("freezeProgramConfirm").value.trim();if(!t){o("freezeProgramStatus","\u274C Enter a program ID","error");return}if(t!==e){o("freezeProgramStatus","\u274C Program IDs do not match","error");return}if(confirm(`\u26A0\uFE0F PERMANENT: Freeze ${t}? Nobody can ever upgrade it again.`))try{let n=et(t,l()),r=await y([n],{statusId:"freezeProgramStatus",description:`FREEZE-PROGRAM | Program: ${t} | Authority: REMOVED PERMANENTLY`},o);f("freezeProgramStatus","\u{1F512} Program frozen permanently."+p(r),"success")}catch(n){o("freezeProgramStatus","\u274C "+n.message,"error")}};window.emergencyShutdown=async()=>{let{TransactionInstruction:t,PublicKey:e}
5=at(),n=document.getElementById("killProgramId").value.trim(),r=document.getElementById("killSlaPda").value.trim();if(!n||!r){o("killStatus","\u274C Fill in both fields","error");return}try{let a=new t({programId:new e(n),keys:[{pubkey:new e(r),isSigner:!1,isWritable:!0},{pubkey:new e(l()),isSigner:!0,isWritable:!1}],data:new Uint8Array([149,156,208,90,232,60,100,98])}),s=await y([a],{statusId:"killStatus",description:`EMERGENCY-SHUTDOWN | Program: ${n} | PDA: ${r}`},o);f("killStatus","\u{1F6D1} Agent shut down!"+p(s),"success")}catch(a){o("killStatus","\u274C "+a.message,"error")}};window.reactivateAgent=async()=>{let{TransactionInstruction:t,PublicKey:e}=at(),n=document.getElementById("reactivateProgramId").value.trim(),r=document.getElementById("reactivateSlaPda").value.trim();if(!n||!r){o("reactivateStatus","\u274C Fill in both fields","error");return}try{let a=new t({programId:new e(n),keys:[{pubkey:new e(r),isSigner:!1,isWritable:!0},{pubkey:new e(l()),isSigner:!0,isWritable:!1}],data:new Uint8Array([100,223,14,150,51,57,87,66])}),s=await y([a],{statusId:"reactivateStatus",description:`REACTIVATE-AGENT | Program: ${n} | PDA: ${r}`},o);f("reactivateStatus","\u2705 Agent reactivated!"+p(s),"success")}catch(a){o("reactivateStatus","\u274C "+a.message,"error")}};window.scanPrograms=async()=>{let t=document.getElementById("scanProgramWallet").value.trim();if(!t){o("scanProgramStatus","\u274C Enter a wallet address","error");return}o("scanProgramStatus","\u{1F50D} Scanning...","loading");try{let e=R(),n=await nt(e,t);if(n.length===0){o("scanProgramStatus","\u2705 No programs found.","success");return}o("scanProgramStatus",`\u2705 Found ${n.length} program${n.length>1?"s":""}.`,"success");let r='<table class="inspector-table"><thead><tr><th>Program ID</th><th>Data Size</th><th>Status</th></tr></thead><tbody>';for(let a of n){let s=a.upgradeable?'<span style="color:var(--green)">Upgradeable</span>':'<span style="color:#ff6b6b">Frozen</span>';r+=`<tr><td style="font-family:monospace;font-size:11px;">${a.programId}</td><td>${(a.dataSize/1024).toFixed(0)} KB</td><td>${s}</td></tr>`}r+="</tbody></table>",document.getElementById("scanProgramResults").innerHTML=r}catch(e){o("scanProgramStatus","\u274C "+e.message,"error")}};window.scanBuffers=async()=>{let t=document.getElementById("scanWallet").value.trim();if(!t){o("scanStatus","\u274C Enter a wallet address","error");return}o("scanStatus","\u{1F50D} Scanning...","loading");try{let e=R(),n=await rt(e,t);if(n.length===0){o("scanStatus","\u2705 No locked buffers found.","success");return}o("scanStatus",`\u2705 Found ${n.length} buffer${n.length>1?"s":""}.`,"success");let r=0,a='<table class="inspector-table"><thead><tr><th>Buffer</th><th>SOL</th></tr></thead><tbody>';for(let s of n)r+=s.sol,a+=`<tr><td style="font-family:monospace;font-size:11px;">${s.address}</td><td style="color:var(--green);font-weight:700;">${s.sol.toFixed(4)}</td></tr>`;a+=`</tbody><tfoot><tr><td><strong>Total</strong></td><td style="color:var(--green);font-weight:700;">${r.toFixed(4)} SOL</td></tr></tfoot></table>`,document.getElementById("scanResults").innerHTML=a}catch(e){o("scanStatus","\u274C "+e.message,"error")}};})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.