PageSourceSearch

https://bitref.com/theme/js/scripts.js?v=67

js bitref.com collected 2026-10-01 11:40:49 UTC 85,294 bytes, 31 lines download raw bytes

1var old_confirmed_balance,old_unconfirmed_balance,check_changes_interval,audio_addr,newtxs,audio_tx,audio,server=document.currentScript.getAttribute("data-server");function search(e,t){var n=e.bitref_search.value;if(/^0{8}[a-fA-F0-9]{56}$/.test(n)){var a=new XMLHttpRequest;a.open("GET",server+"/block/header/"+n+"?key="+t,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){if(4==a.readyState){if(200==a.status){var e=JSON.parse(a.responseText).height;window.location.href="https://bitref.com/block/"+e}else alert("Invalid block hash!")}},a.send()}else/^[0-9]+$/.test(n)?window.location.href="https://bitref.com/block/"+n:/^[a-fA-F0-9]{64}$/.test(n)?window.location.href="https://bitref.com/tx/"+n:/^0[23][0-9a-f]{64}$|^04[0-9a-f]{128}$|^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$|^bc1q[ac-hj-np-z02-9]{38}$|^bc1[pq][ac-hj-np-z02-9]{58}$/.test(n)?window.location.href="https://bitref.com/"+n:alert("No results found!");return!1}function bitcoin_handler(){navigator.registerProtocolHandler("bitcoin","https://bitref.com/%s","Bitcoin handler")}function donate(){if(""==document.getElementById("sats").value)alert("Amount in SATS is required!"),document.getElementById("sats").focus();else{var e=document.getElementById("sats").value,t=new XMLHttpRequest;t.open("GET","https://www.bitref.net/lnd/invoice-new.php?value="+e+"&memo=BitRef_Donation",!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){if(4==t.readyState&&200==t.status){var e=JSON.parse(t.responseText);document.getElementById("payreq").innerText=e.payreq,document.getElementById("qrcode2").style.display="block",new QRious({element:document.getElementById("qrcode2"),size:300,value:e.payreq})}},t.send()}}function copyText(e){navigator.clipboard.writeText(e)}function timestamp2date(e){let t=new Date(e),n=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),r=String(t.getSeconds()).padStart(2,"0");return`${n}-${a}-${i} ${s}:${o}:${r}`}function initTooltips(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map(function(e){return new bootstrap.Tooltip(e)})}function formatRelTime(e){let t=[{label:"day",value:Math.floor(e/86400)},{label:"hour",value:Math.floor(e%86400/3600)},{label:"min",value:Math.floor(e%3600/60)},{label:"sec",value:e%60}].filter(e=>e.value>0).slice(0,2).map(e=>`${e.value} ${e.label}${1!==e.value?"s":""}`);return t.join(" ")}function feedback(e){var t=e.feedback_ta.value;return t=t.replace(/[^a-zA-Z0-9 .,!?]/g,""),_paq.push(["trackEvent","Feedback","Message",t]),alert("The message has been sent. Thank you for your feedback. We are taking all recommendations into account."),!1}function connLostStatus(){var e=document.getElementById("notifications");null!==e&&(e.innerHTML='<div class="alert alert-danger">The connection to the server was lost. Please <a href="javascript:location.reload();">reload the page</a> to reconnect and continue.</div>')}function stopAllIntervals(){var e=setInterval(()=>{},9999);for(let t=1;t<=e;t++)clearInterval(t)}function loadAside(e,t){var n=new XMLHttpRequest;n.open("GET",server+"/misc/aside?key="+e,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState){if(200==n.status){var e=JSON.parse(n.responseText);document.getElementById("block-height").textContent=e.block.height.toLocaleString("en-US"),document.getElementById("block-height").href="/block/"+e.block.height,document.getElementById("block-min").textContent=e.block.min,document.getElementById("fee-next").textContent=e.fee.toFixed(2),document.getElementById("fee-fiat").textContent=(140*e.fee/1e8*t).toFixed(2);var a=Math.round(e.diff.time_avg);document.getElementById("time-avg").textContent=`${Math.floor(a/60)} min ${a%60} sec`,document.getElementById("diff-curr").textContent=(e.diff.curr/1e12).toFixed(2),document.getElementById("hashrate").textContent=Math.round(4294967296*e.diff.curr/e.diff.time_avg/1e18),e.diff.percent>=0?(document.getElementById("diff-percent").textContent="+"+e.diff.percent.toFixed(2)+"%",document.getElementById("diff-percent").className="text-success"):(document.getElementById("diff-percent").textContent=e.diff.percent.toFixed(2)+"%",document.getElementById("diff-percent").className="text-danger")}else 400==n.status&&(connLostStatus(),stopAllIntervals())}},n.send()}function loadAsidePrice(){var e=new XMLHttpRequest;e.open("GET","/price/chart.json?period=0d",!0),e.setRequestHeader("Accept","application/json"),e.onreadystatechange=function(){if(4==e.readyState&&200==e.status){var t=JSON.parse(e.responseText),n=t[1],a=t[2];document.getElementById("price-course").textContent=n.toLocaleStr
1ing("en-US"),a>=0?(document.getElementById("price-percent").textContent="+"+a.toFixed(2)+"%",document.getElementById("price-percent").className="text-success"):(document.getElementById("price-percent").textContent=a.toFixed(2)+"%",document.getElementById("price-percent").className="text-danger")}},e.send()}function fill_and_focus(e){let t=document.querySelector('input[name="bitref_search"]');t&&(t.value=e.trim(),t.focus())}var transactions=[],offset=0,total_received=0,total_sent=0,balances_chart_dates=[],balances_chart_balances=[];function enable_audio_notify_addr(){(audio_addr=new Audio("/theme/js/notify.mp3")).load()}function getBalance(e,t,n){var a=new XMLHttpRequest;a.open("GET",server+"/address/balance/"+e+"?key="+t,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){if(4==a.readyState){var i=JSON.parse(a.responseText);200==a.status?(document.getElementById("confirmed_balance").textContent=(i.confirmed_balance/1e8).toFixed(8),document.getElementById("confirmed_balance_fiat").textContent=(i.confirmed_balance/1e8*n).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),document.getElementById("unconfirmed_balance").textContent=(i.unconfirmed_balance/1e8).toFixed(8),document.getElementById("unconfirmed_balance_fiat").textContent=(i.unconfirmed_balance/1e8*n).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),document.getElementById("total_balance").textContent=((i.confirmed_balance+i.unconfirmed_balance)/1e8).toFixed(8),document.getElementById("total_balance_fiat").textContent=((i.confirmed_balance+i.unconfirmed_balance)/1e8*n).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),old_confirmed_balance=i.confirmed_balance,old_unconfirmed_balance=i.unconfirmed_balance,check_changes_interval=setInterval(function(){checkBalanceChanged(e,t)},3e4),setTimeout(function(){void 0!==check_changes_interval&&(clearInterval(check_changes_interval),connLostStatus())},72e5),getHistory(e,t,n,i.confirmed_balance,i.unconfirmed_balance)):429==a.status?document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Error: Too Many Requests!</div>':document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Error: '+i.error+"</div>"}},a.send()}function checkBalanceChanged(e,t){if(void 0!==old_confirmed_balance&&void 0!==old_unconfirmed_balance&&offset<=10){var n=new XMLHttpRequest;n.open("GET",server+"/address/balance/"+e+"/?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState){if(200==n.status){var e=JSON.parse(n.responseText);(old_confirmed_balance!=e.confirmed_balance||old_unconfirmed_balance!=e.unconfirmed_balance)&&(audio_addr?(audio_addr.play().catch(e=>console.error("Audio playback failed:",e)),setTimeout(function(){location.reload()},1e3)):location.reload())}else 400==n.status&&(connLostStatus(),stopAllIntervals())}},n.send()}}function getHistory(e,t,n,a,i){var s=new XMLHttpRequest;s.open("GET",server+"/address/history/"+e+"?key="+t,!0),s.setRequestHeader("Accept","application/json"),s.onreadystatechange=function(){if(4==s.readyState){var o=JSON.parse(s.responseText);if(200==s.status){(a>0||i>0)&&0==o.tx_count&&(document.getElementById("notifications").innerHTML='<div class="alert alert-warning">This address has too many transactions and is overloading our system. We only show its balances.</div>'),document.getElementById("n_tx").textContent=o.tx_count>=1e3?"1000+":o.tx_count,transactions=o.transactions.map(e=>e.tx_hash).reverse(),o.tx_count>0?getTransactions(e,t,n):removeLoading();var r=document.createElement("meta");r.name="description",r.content="Confirmed Balance: "+(a/1e8).toFixed(8)+" BTC, Unconfirmed Balance: "+(i/1e8).toFixed(8)+" BTC, Total Balance: "+((a+i)/1e8).toFixed(8)+" BTC, Fiat Balance: "+((a+i)/1e8*n).toFixed(2)+" USD, Total Transactions: "+o.tx_count,document.getElementsByTagName("head")[0].appendChild(r);var l="The Bitcoin address <b>"+e+"</b> has a total balance of <b>"+((a+i)/1e8).toFixed(8)+" BTC</b>
1 ($"+((a+i)/1e8*n).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"), consisting of <b>"+(a/1e8).toFixed(8)+" BTC</b> ($"+(a/1e8*n).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+") confirmed and <b>"+(i/1e8).toFixed(8)+" BTC</b> ($"+(i/1e8*n).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+") unconfirmed (pending confirmation).";0==o.tx_count?l+=" There are no transactions associated with this Bitcoin address yet.":1==o.tx_count?l+=" This address has participated in one transaction.":o.tx_count>1&&o.tx_count<1e3?l+=" This address has been involved in "+o.tx_count+" transactions.":o.tx_count>=1e3&&(l+=" This address has been involved in over 1000 transactions.");var d=document.getElementById("summary");null!==d&&(d.innerHTML=l)}else 429==s.status?document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Error: Too Many Requests!</div>':document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Error: '+o.error+"</div>"}},s.send()}function getTransactions(e,t,n){offset>=10&&null!==(audioNotifyAddr=document.getElementById("audioNotifyAddr"))&&document.getElementById("audioNotifyAddr").remove();var a=transactions.slice(offset,offset+10),i=new XMLHttpRequest;i.open("POST",server+"/address/transactions/"+e+"?key="+t,!0),i.setRequestHeader("Accept","application/json"),i.onreadystatechange=function(){if(4==i.readyState){if(200==i.status){offset+=10;var a=JSON.parse(i.responseText);renderTransactions(a,e,t,n)}else document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Error: '+a.error+"</div>"}},i.send(JSON.stringify(a))}function renderTransactions(e,t,n,a){removeLoading(),removeLoadMore();for(var i="",s=0;s<e.length;s++){var o=e[s].txid,r=(1e8*e[s].fee/(e[s].weight/4)).toFixed(2),l=void 0!==e[s].confirmations?e[s].confirmations:0;if(l<6)var d="/theme/images/"+l+".png";else var d="/theme/images/6.png";if(l>0){var c=timestamp2date(1e3*e[s].time);balances_chart_dates.push(new Date(1e3*e[s].time));var u=""}else var c="Unconfirmed!",u=' &nbsp;<a href="https://bitaccelerate.com/premium/#'+e[s].txid+'" target="_blank" title="Accelerate this transaction" class="btn btn-outline-success btn-sm pt-0 pb-0 ps-1 text-nowrap topfix btn-pulse">\uD83D\uDE80 Accelerate</a>';var $=0;if(t.startsWith("0")){for(let p=0;p<e[s].vin.length;p++)void 0!==e[s]?.vin[p]?.prevout?.scriptPubKey?.asm&&e[s].vin[p].prevout.scriptPubKey.asm.split(" ")[0]==t&&($+=-1*e[s].vin[p].prevout.value,total_sent+=e[s].vin[p].prevout.value);for(let m=0;m<e[s].vout.length;m++)void 0!==e[s]?.vout[m]?.scriptPubKey?.asm&&e[s].vout[m].scriptPubKey.asm.split(" ")[0]==t&&($+=e[s].vout[m].value,total_received+=e[s].vout[m].value)}else{for(let f=0;f<e[s].vin.length;f++)void 0!==e[s]?.vin[f]?.prevout?.scriptPubKey?.address&&e[s].vin[f].prevout.scriptPubKey.address==t&&($+=-1*e[s].vin[f].prevout.value,total_sent+=e[s].vin[f].prevout.value);for(let g=0;g<e[s].vout.length;g++)void 0!==e[s]?.vout[g]?.scriptPubKey?.address&&e[s].vout[g].scriptPubKey.address==t&&($+=e[s].vout[g].value,total_received+=e[s].vout[g].value)}var v=$>=0?"text-success":"text-danger";if(l>0)var b='<a href="#" class="link-dark link-underline-info" title="Show value at time of transaction" onclick="event.preventDefault();historicPrice('+e[s].time+", "+Math.abs($)+');">$'+(Math.abs($)*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"</a>";else var b="$"+(Math.abs($)*a).toFixed(2);var y=$.toFixed(8);$>0&&(y="+"+y),l>0&&balances_chart_balances.push($),void 0!==e[s].from_cache&&e[s].from_cache&&(l="6+"),i+='<tr><td class="ps-0"><a href="https://bitref.com/tx/'+o+"#address:"+t+'" title="Confirmations: '+l+'; Click for more TX info" class="btn btn-light btn-sm pb-0 pt-0 topfix"><img src="'+d+'" width="16" height="16" alt="'+o+'" class="topfix"></a></td><td>'+c+u+'</td><td class="d-none d-md-table-cell text-end text-secondary">'+r+' sat/vB</td><td class="text-end '+v+'">'+y+'</td><td class="pe-0 text-end">'+b+"</td></tr>"}if(document.getElementById("txs").innerHTML+=i,transactions.length>offset){if(document.getElementById("txs").innerHTML+='<tr id="loadMore"><td colspan="5" class="text-center border-bottom-0"><button type="button" onclick="getTransactions(\''+t+"', '"+n+"', "+a+');this.disabled=true;this.textContent=\'Loading...\';" class="btn btn-outline-secondary">Load More Transactions</button></td></tr>',10==offset&&void 0!==balances_chart_dates[0]&&void 0!==balances_chart_balances[0]){var h=document.getElementById("summary");null!==h&&h.insertAdjacentHTML("beforeend"," The most recent confirmed transaction occurred on <b>"+timestamp2date(balances_chart_dates[0])+"</b> with a value of <b>"+balances_chart_balances[0].toFixed(8)+" BTC</b>
1 ($"+(balances_chart_balances[0]*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+").")}}else if(transactions.length>1&&1e3!=transactions.length){if(document.getElementById("txs").innerHTML+='<tr style="border-top: 2px solid #DEE2E6"><td>&nbsp;</td><td class="d-none d-md-table-cell"></td><td class="text-end"><b>Total Received:</b></td><td class="text-end"><span class="text-success">'+total_received.toFixed(8)+'</span></td><td class="pe-0 text-end">$'+(total_received*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"</td></tr>",document.getElementById("txs").innerHTML+='<tr><td>&nbsp;</td><td class="d-none d-md-table-cell"><td class="text-end"><b>Total Sent:</b></td><td class="text-end"><span class="text-danger">'+total_sent.toFixed(8)+'</span></td><td class="pe-0 text-end">$'+(total_sent*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"</td></tr>",balances_chart_balances.length>=3){balances_chart_dates=balances_chart_dates.reverse(),balances_chart_balances=balances_chart_balances.reverse();for(let x=1;x<balances_chart_balances.length;x++)balances_chart_balances[x]=balances_chart_balances[x]+balances_chart_balances[x-1],balances_chart_balances[x]<0&&(balances_chart_balances[x]=0);drawBalancesChart()}var h=document.getElementById("summary");null!==h&&h.insertAdjacentHTML("beforeend"," In total, the address has received <b>"+total_received.toFixed(8)+" BTC</b> ($"+(total_received*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+") and sent <b>"+total_sent.toFixed(8)+" BTC</b> ($"+(total_sent*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+").")}}function removeLoading(){var e=document.getElementById("loading");null!==e&&e.remove()}function removeLoadMore(){var e=document.getElementById("loadMore");null!==e&&e.remove()}function drawBalancesChart(){var e=document.getElementById("addrBalancesChart");e.classList.remove("d-none");let t=e.getContext("2d"),n={labels:balances_chart_dates,datasets:[{label:"Bitcoin Address Balance History",data:balances_chart_balances,borderColor:"rgba(25, 135, 84, 1)",backgroundColor:"rgba(25, 135, 84, 0.2)",fill:!0,tension:.1,stepped:!0}]};new Chart(t,{type:"line",data:n,options:{animation:!1,scales:{x:{type:"time",time:{},title:{display:!0,text:"Date and Time"}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"Bitcoin Balance (BTC)"}}},interaction:{mode:"index",intersect:!1},plugins:{tooltip:{enabled:!0,mode:"index",intersect:!1,callbacks:{label:function(e){let t=e.raw;return`Balance: ${t.toFixed(8)} BTC`}}}}}})}function historicPrice(e,t){var n=new XMLHttpRequest;n.open("GET","/price/history.json?timestamp="+e,!0),n.onreadystatechange=function(){if(4==n.readyState&&200==n.status){var e=JSON.parse(n.responseText);if(null!==e.usd){var a="<p>Value at the time of transaction: <b>$"+(historicValue=(e.usd*t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))+"</b></p>";a+="<p>Bitcoin price at transaction: <b>$"+e.usd.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"</b></p>"}else var a="<p>Value at the time of transaction: <b>Unknown</b> (too old)</p>";let i=document.getElementById("historicPriceModal");i.querySelector(".modal-body").innerHTML=a;let s=new bootstrap.Modal(i);s.show()}},n.send()}function loadOneTx(e,t,n){if(0==document.getElementById("stopButton").getAttribute("data-stopped")){if(e<newtxs.length){var a=newtxs[e].txid,i=a.substring(0,8)+"..."+a.slice(-8),s=newtxs[e].feerate.toFixed(2),o=newtxs[e].vsize,r=newtxs[e].rbf,l=timestamp2date(1e3*newtxs[e].time),d="<tr onclick=\"window.location='/tx/"+newtxs[e].txid+'\'"><td><a href="/tx/'+newtxs[e].txid+'">'+i+'</a></td><td class="d-none d-md-table-cell">'+l+"</td><td>"+s+" sat/vB</td><td>"+o+" Bytes</td><td>"+r+"</td></tr>",c=document.getElementById("txs");c.innerHTML=d+c.innerHTML,c.rows.length>10&&c.deleteRow(c.rows.length-1),setTimeout(function(){loadOneTx(++e,t,n)},t)}else loadLatestTxs(n)}}function loadLatestTxs(e){var t=new XMLHttpRequest;t.open("GET",server+"/misc/get/newtxs?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){if(4==t.readyState&&200==t.status){var n,a=JSON.parse(t.responseText);newtxs=a,document.getElementById("txs").innerHTML="";var i=a.length>=10?10:a.length;for(let s=0;s<i;s++){var o=a[s].txid,r=o.substring(0,8)+"..."+o.slice(-8),l=a[s].feerate.toFixed(2),d=a[s].vsize,c=a[s].rbf,u=timestamp2date(1e3*a[s].time);document.getElementById("txs").innerHTML+="<tr onclick=\"window.location='/tx/"+o+'\'"><td><a href="/tx/'+o+'">'+r+'</a></td><td class="d-none d-md-table-cell">'+u+"</td><td>"+l+" sat/vB</td><td>"+d+" Bytes</td><td>"+c+"</td></tr>"}if(a.length>10){loadOneTx(10,Math.round(60/(a.length-10)*1e3),e)}}},t.send()}let transactionChart;function drawTxRateChart(e){let t=new Date,n=[];for(let a=0;a<e.length;a++){let i=new Date(t.getTime()-6e4*a);n.unshift(i.getHours().toString().padStart(2,"0")+":"+i.getMinutes().toString().padStart(2,"0"))}if(transactionChart)transactionChart.data.labels=n,transactionChart.data.datasets[0].data=e,transactionChart.update(
1);else{let s=document.getElementById("transactionChart").getContext("2d");transactionChart=new Chart(s,{type:"bar",data:{labels:n,datasets:[{label:"Number of Transactions",data:e,backgroundColor:"rgba(75, 192, 192, 0.6)",borderColor:"rgba(75, 192, 192, 1)",borderWidth:1}]},options:{animation:!1,responsive:!0,plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){return"Transactions: "+e.parsed.y}}}},scales:{x:{display:!0},y:{beginAtZero:!0}}}})}}function loadLatestTxRate(e){var t=new XMLHttpRequest;t.open("GET",server+"/misc/get/newtxs_rate?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){4==t.readyState&&(200==t.status?drawTxRateChart(JSON.parse(t.responseText)):console.log("loadLatestTxRate failed"))},t.send()}function enable_audio_notify_tx(){(audio_tx=new Audio("/theme/js/notify-tx.mp3")).load()}var rawTxHex="",isConfirmed=null;function showResult(e,t,n,a,i){e.confirmations||document.getElementById("audioNotifyTx").classList.remove("d-none"),e.confirmations>=1&&!1===isConfirmed&&(audio_tx?(audio_tx.play().catch(e=>console.error("Audio playback failed:",e)),setTimeout(function(){location.reload()},1e3)):location.reload());var s=document.getElementById("status");null!==s&&(e.confirmations?(isConfirmed=!0,1==e.confirmations?(s.className="badge bg-warning",s.textContent="1 confirmation"):e.confirmations<6?(s.className="badge bg-info",s.textContent=e.confirmations+" confirmations"):(s.className="badge bg-success",s.textContent=e.confirmations+" confirmations")):(isConfirmed=!1,s.innerHTML='<span class="badge bg-danger d-inline-flex align-items-center gap-1"><span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>Unconfirmed</span>'));var o=document.getElementById("height");null!==o&&(void 0!==e.height?o.innerHTML='<a href="https://bitref.com/block/'+e.height+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+e.height.toLocaleString("en-US")+"</a>":o.parentNode.remove());var r=document.getElementById("blockhash");null!==r&&(void 0!==e.blockhash?r.innerHTML='<a href="https://bitref.com/block/'+e.height+'" title="'+e.blockhash+'" class="link-underline link-underline-opacity-0 link-underline-opacity-100-hover">...'+e.blockhash.slice(-12)+"</a>":r.parentNode.remove());var l=document.getElementById("blocktime");null!==l&&(e.confirmations?l.textContent=timestamp2date(1e3*e.blocktime):l.parentNode.remove());var d=document.getElementById("firstseen");null!==d&&(e.confirmations?d.parentNode.remove():d.textContent=timestamp2date(1e3*e.time));var c=document.getElementById("ancestors");if(null!==c&&(e.confirmations?c.parentNode.remove():(c.textContent=e.txAncestors.length,e.txAncestors.length>0?(c.textContent=e.txAncestors.length,c.setAttribute("href","#uaModal")):c.removeAttribute("href"))),document.getElementById("ancestors_list").innerHTML="",!e.confirmations)for(let u=0;u<e.txAncestors.length;u++)document.getElementById("ancestors_list").innerHTML+='<li><a href="https://bitref.com/tx/'+e.txAncestors[u]+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+e.txAncestors[u]+"</a></li>";var $=document.getElementById("descendants");if(null!==$&&(e.confirmations?$.parentNode.remove():($.textContent=e.txDescendants.length,e.txDescendants.length>0?($.textContent=e.txDescendants.length,$.setAttribute("href","#mdModal")):$.removeAttribute("href"))),document.getElementById("descendants_list").innerHTML="",!e.confirmations)for(let p=0;p<e.txDescendants.length;p++)document.getElementById("descendants_list").innerHTML+='<li><a href="https://bitref.com/tx/'+e.txDescendants[p]+'" class="link-underline link-underline-opacity-0 link-underline-opacity-100-hover">'+e.txDescendants[p]+"</a></li>";var m=document.getElementById("fee");null!==m&&(m.textContent=e.fee.toFixed(8)+" BTC");var f=document.getElementById("fee_fiat");null!==f&&(f.textContent=(e.fee*a).toFixed(2));var g=document.getElementById("feerate");null!==g&&(g.textContent=(1e8*e.fee/(e.weight/4)).toFixed(2)+" sat/vB");var v=document.getElementById("efee");null!==v&&(e.confirmations?v.parentNode.remove():v.textContent=(e.effectiveFeeRate/1e3).toFixed(2)+" sat/vB");var b=document.getElementById("tip");null!==b&&e.confirmations&&b.parentNode.remove();var y=document.getElementById("size");null!==y&&(y.textContent=e.size+" B | "+e.vsize+" vB");var h=document.getElementById("weight");null!==h&&(h.textContent=e.weight+" WU");var x=document.getElementById("version");null!==x&&(x.textContent=e.version),rawTxHex=e.hex;var _=document.getElementById("locktime");null!==_&&(_.textContent=e.locktime);var B=document.getElementById("rbf");null===B||(void 0!==e.rbf?e.rbf||(B.style.textDecoration="line-through"):B.remove());var E=document.getElementById("eta");null!==E&&e.confirmations&&E.parentNode.remove();var T=document.getElementById("acc");null!==T&&(e.confirmations?T.parentNode.remove():isAccelerated(t,e.effectiveFeeRate,i)),null===document.getElementById("taproot")||isTaproot(e)||(document.getElementById("taproot").style.textDecoration="line-through");var k=0,I="",C=e.vin,w=C.length;for(let S=0;S<w;S++){if(void 0!==C[S]?.prevout?.scriptPubKey?.address&&window.location.hash.endsWith("#address:"+C[S].prevout.scriptPubKey.address))var F=" bg-skyblue";else if(window.location.hash.endsWith("#input:"+S))var F=" bg-skyblue";else var F="";if(I+='<li class="list-group-item text-break'+F+'">',void 0!==C[S].coinbase)I+='Coinbase <span class="badge bg-light text-dark">'+hexToReadableText(C[S].coinbase)+"</span>";else{var H=C[S].txid,P=C[S].vout,D=void 0!==C[S]?.prevout?.value&&C[S].prevout.value,M=void 0!==C[S]?.prevout?.scriptPubKey?.address&&C[S].prevout.scriptPubKey.address;I+='<a href="https://bitref.com/tx/'+H+"#output:"+P+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+H+'<span class="text-secondary">:'+P+"</span></a>",M&&(I+='<br><b><a href="https://bitref.com/'+M+'" class="link-underline link-underline-opacity-0 link-underline-opacity-100-hover">'+M+"</a></b>"),D&&(I+='<br><span class="text-danger">'+D.toFixed(8)+' BTC</span> <span class="text-dark">(<a href="#" class="link-dark link-underline-info" title="Show value at time of transaction" onclick="event.preventDefault();historicPrice('+e.time+", "+Math.abs(D)+');">$'+(Math.abs(D)*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"</a>)</span>"),void 0!==C[S].txinwitness&&(k+=1)}I+="</li>"}document.getElementById("inputs").innerHTML=I,document.getElementById("inputsCount").textContent=w,0==k&&(document.getElementById("segwit").style.textDecoration="line-through");var A=0,R="",K=e.vout;for(let N=0;N<K.length;N++){if(window.location.hash.endsWith("#output:"+N))var F=" bg-skyblue";else if(void 0!==K[N]?.scriptPubKey?.address&&window.location.hash.endsWith("#address:"+K[N].scriptPubKey.address))var F=" bg-skyblue";else var F="";A+=K[N].value;var U=K[N].value,j=void 0!==K[N]?.scriptPubKey?.address&&K[N].scriptPubKey.address;!1===j&&void 0!==K[N]?.scriptPubKey?.type&&"pubkey"==K[N].scriptPubKey.type&&void 0!==K[N]?.scriptPubKey?.asm&&(j=K[N]?.scriptPubKey?.asm.split(" ")[0]),R+='<li id="output:'+N+'" class="list-group-item text-break'+F+'">',j?R+='<a href="https://bitref.com/'+j+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+j+"</a>":void 0!==K[N]?.scriptPubKey?.type&&"multisig"==K[N].scriptPubKey.type?R+='<span class="text-secondary">Multisig</span>':void 0!==K[N]?.scriptPubKey?.type&&"nulldata"==K[N].scriptPubKey.type?R+='<span class="text-secondary">OP_RETURN</span> <span class="bg-light text-dark d-inline-block text-break px-1 py-0 rounded">'+opReturnHexToText(K[N].scriptPubKey.hex)+"</span>":R+='<span class="text-secondary">Unable to decode output address</span>',R+='<br><span class="text-success">'+U.toFixed(8)+" BTC</span>",R+=' <span class="text-dark">(<a href="#" class="link-dark link-underline-info" title="Show value at time of transaction" onclick="event.preventDefault();historicPrice('+e.time+", "+Math.abs(U)+');">$'+(Math.abs(U)*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"</a>)</span>",K[N].spent?K[N].value>0&&(R+=' <button type="button" class="btn btn-outline-danger btn-sm pb-0 pt-0" onclick="spendingtxid(\''+t+"', "+N+", '"+i+'\')" title="Click to navigate to the spending transaction">spent</button>'):R+=' <span class="badge bg-success topfix">unspent</span>',R+="</li>"}document.getElementById("outputs").innerHTML=R,document.getElementById("outputsCount").textContent=K.length;var q=document.getElementById("totalInput");null!==q&&(q.textContent=(e.fee+A).toFixed(8)+" BTC");var O=document.getElementById("totalInput_fiat");null!==O&&(O.textContent=((e.fee+A)*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}));var G=document.getElementById("totalOutput");null!==G&&(G.textContent=A.toFixed(8)+" BTC");var z=document.getElementById("totalOutput_fiat");null!==z&&(z.textContent=(A*a).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})),e.confirmations||setTimeout(function(){checkTX(t,n,a,i)},3e4);var W=location.href.split("#");if(void 0!==W[1]){var X=W[1],V=document.getElementById(X);V&&V.scrollIntoView()}if(e.confirmations){var Q=document.createElement("meta");Q.name="description",Q.content="Confirmations: "+e.confirmations+"; Included in block #"+e.height+"; Block timestamp: "+timestamp2date(1e3*e.blocktime)+"; Fee: "+e.fee.toFixed(8)+" BTC; Fee rate: "+(1e8*e.fee/(e.weight/4)).toFixed(2)+" sat/vB; vSize: "+e.vsize+" vB",document.getElementsByTagName("head")[0].appendChild(Q)}if(e.confirmations){var Y,Z,J,ee,et,en=function e(t){if(1==t.vin.length&&void 0!==t.vin[0].coinbase)return!1;{let n=t.vin.map(e=>e.prevout.scriptPubKey.address);return 1===new Set(n).size}}(e),ea=!1;if(1==e.vin.length&&void 0!==e.vin[0].coinbase)document.getElementById("notifications").innerHTML='<div role="alert" class="alert alert-secondary"><p class="h6 alert-heading">Quick Transaction Overview</p><p class="text-break mb-0">This is the coinbase transaction for Bitcoin block #<a href="/block/'+e.height+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+e.height.toLocaleString("en-US")+"</a>. The miner's reward is <b>"+A.toFixed(8)+" BTC</b>. The block was found on <b>"+timestamp2date(1e3*e.time)+"</b>, with <b>"+e.confirmations.toLocaleString("en-US")+"</b> current block confirmation(s).</p></div>",ea=!0;else if(e.vout.some(e=>"nulldata"===e.scriptPubKey.type))document.getElementById("notifications").innerHTML='<div role="alert" class="alert alert-secondary"><p class="h6 alert-heading">Quick Transaction Overview</p><p class="text-break mb-0">This transaction writes data to the blockchain using <b>OP_RETURN</b>. The total transaction size is <b>'+e.vsize+" vB</b>. It was confirmed on <b>"+timestamp2date(1e3*e.time)+"</b>, with the sender spending <b>"+e.fee.toFixed(8)+" BTC</b> ($"+(e.fee*a).toFixed(2)+") in fees.</p></div>",ea=!0;else if((1==e.vin.length||en)&&1==e.vout.length&&void 0!==e.vin[0]?.prevout?.scriptPubKey?.address&&void 0!==e.vout[0]?.scriptPubKey?.address)es(e.vin[0].prevout.scriptPubKey.address,e.vout[0].scriptPubKey.address,e.vout[0].value,e.fee,e.time,a,"Single output. Possibly self-transfer"),ea=!0;else if((1==e.vin.length||en)&&2==e.vout.length&&void 0!==e.vin[0]?.prevout?.scriptPubKey?.address&&void 0!==e.vout[0]?.scriptPubKey?.address&&void 0!==e.vout[1]?.scriptPubKey?.address)e.vin[0].prevout.scriptPubKey.address==e.vout[1].scriptPubKey.address?(es(e.vin[0].prevout.scriptPubKey.address,e.vout[0].scriptPubKey.address,e.vout[0].value,e.fee,e.time,a,"Address reuse"),ea=!0):e.vin[0].prevout.scriptPubKey.address==e.vout[0].scriptPubKey.address?(es(e.vin[0].prevout.scriptPubKey.address,e.vout[1].scriptPubKey.address,e.vout[1].value,e.fee,e.time,a,"Address reuse"),ea=!0):e.vout[0].scriptPubKey.type!=e.vin[0].prevout.scriptPubKey.type&&e.vout[1].scriptPubKey.type==e.vin[0].prevout.scriptPubKey.type?(es(e.vin[0].prevout.scriptPubKey.address,e.vout[0].scriptPubKey.address,e.vout[0].value,e.fee,e.time,a,"Mixed address types"),ea=!0):e.vout[1].scriptPubKey.type!=e.vin[0].prevout.scriptPubKey.type&&e.vout[0].scriptPubKey.type==e.vin[0].prevout.scriptPubKey.type?(es(e.vin[0].prevout.scriptPubKey.address,e.vout[1].scriptPubKey.address,e.vout[1].value,e.fee,e.time,a,"Mixed address types"),ea=!0):5>=(e.vout[0].value.toString().split(".")[1]?.length||0)?(es(e.vin[0].prevout.scriptPubKey.address,e.vout[0].scriptPubKey.address,e.vout[0].value,e.fee,e.time,a,"Round payment amount"),ea=!0):5>=(e.vout[1].value.toString().split(".")[1]?.length||0)?(es(e.vin[0].prevout.scriptPubKey.address,e.vout[1].scriptPubKey.address,e.vout[1].value,e.fee,e.time,a,"Round payment amount"),ea=!0):e.vin[0].prevout.value/5>e.vout[0].value?(es(e.vin[0].prevout.scriptPubKey.address,e.vout[0].scriptPubKey.address,e.vout[0].value,e.fee,e.time,a,"Disproportion between outputs"),ea=!0):e.vin[0].prevout.value/5>e.vout[1].value&&(es(e.vin[0].prevout.scriptPubKey.address,e.vout[1].scriptPubKey.address,e.vout[1].value,e.fee,e.time,a,"Disproportion between outputs"),ea=!0);else if(e.vin.length>=5&&1==e.vout.length){Y=e.vout[0].scriptPubKey.address,Z=e.vout[0].value,J=e.fee,ee=e.time,et=a,document.getElementById("notifications").innerHTML='<div role="alert" class="alert alert-secondary"><p class="h6 alert-heading">Quick Transaction Overview</p><p class="text-break mb-0">Someone consolidated all their unspent outputs, totaling <b>'+Z.toFixed(8)+" BTC</b> ($"+(Z*et).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+'), to the address <a href="/'+Y+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+Y+"</a>. The transaction was confirmed on <b>"+timestamp2date(1e3*ee)+"</b> and incurred a fee of <b>"+J.toFixed(8)+" BTC</b> ($"+(J*et).toFixed(2)+").</p></div>",ea=!0}else if(1==e.vin.length&&e.vout.length>=3){var ei=e.vout.reduce((e,t,n,a)=>t.value>a[e].value?n:e,0);void 0!==e.vin[0]?.prevout?.scriptPubKey?.address&&(void 0!==e.vout[ei]?.scriptPubKey?.address&&e.vin[0].prevout.scriptPubKey.type==e.vout[ei].scriptPubKey.type?(eo(e.vin[0].prevout.scriptPubKey.address,e.vout[ei].scriptPubKey.address,e.vin[0].prevout.value,e.fee,e.time,a),ea=!0):(eo(e.vin[0].prevout.scriptPubKey.address,!1,e.vin[0].prevout.value,e.fee,e.time,a),ea=!0))}else e.vin.length>=2&&2==e.vout.length&&function e(t){if(1==t.vin.length&&void 0!==t.vin[0].coinbase)return!1;{let n=t.vin.map(e=>e.prevout.scriptPubKey.type);return 1===new Set(n).size}}(e)&&(e.vin[0].prevout.scriptPubKey.type!=e.vout[0].scriptPubKey.type&&e.vin[0].prevout.scriptPubKey.type==e.vout[1].scriptPubKey.type?(er(e.vout[0].scriptPubKey.address,e.vout[0].value,e.fee,e.time,a),ea=!0):e.vin[0].prevout.scriptPubKey.type!=e.vout[1].scriptPubKey.type&&e.vin[0].prevout.scriptPubKey.type==e.vout[0].scriptPubKey.type&&(er(e.vout[1].scriptPubKey.address,e.vout[1].value,e.fee,e.time,a),ea=!0));ea||(document.getElementById("notifications").innerHTML='<div role="alert" class="alert alert-secondary"><p class="h6 alert-heading">Quick Transaction Overview</p><p class="text-break mb-1">This transaction sends a total of <b>'+A.toFixed(8)+"</b> BTC to <b>"+e.vout.length+"</b> Bitcoin address(es). It was confirmed on <b>"+timestamp2date(1e3*e.time)+"</b>, with the sender paying <b>"+e.fee.toFixed(8)+" BTC</b> ($"+(e.fee*a).toFixed(2)+') in fees.</p><p class="mb-0"><b>No privacy leaks were found.</b></p></div>')}function es(e,t,n,a,i,s,o){document.getElementById("notifications").innerHTML='<div role="alert" class="alert alert-secondary"><p class="h6 alert-heading">Quick Transaction Overview</p><p class="text-break mb-1">The Bitcoin address <a href="/'+e+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+e+"</a> sent <b>"+n.toFixed(8)+" BTC</b> ($"+(n*s).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+') to <a href="/'+t+'" class="link-underline link-underline-opacity-0 link-underline-opacity-100-hover">'+t+"</a>. The transaction was confirmed on <b>"+timestamp2date(1e3*i)+"</b>, and the sender spent <b>"+a.toFixed(8)+" BTC</b> ($"+(a*s).toFixed(2)+') in fees.</p><p class="text-break mb-0"><i>Privacy leak: <b>'+o+".</b></i></p></div>"}function eo(e,t,n,a,i,s){var o;document.getElementById("notifications").innerHTML='<div role="alert" class="alert alert-secondary"><p class="h6 alert-heading">Quick Transaction Overview</p><p class="text-break mb-0">The Bitcoin address <a href="/'+e+'" class="link-underline link-underline-opacity-0 link-underline-opacity-100-hover">'+e+"</a> sent a batch payment totaling <b>"+n.toFixed(8)+" BTC</b> ($"+(n*s).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+"). "+(t?'The likely change address is <a href="/'+t+'" class="link-underline link-un
1derline-opacity-0 link-underline-opacity-100-hover">'+t+"</a>. ":"")+"The transaction was confirmed on <b>"+timestamp2date(1e3*i)+"</b>, and the sender spent <b>"+a.toFixed(8)+" BTC</b> ($"+(a*s).toFixed(2)+") in fees.</p></div>"}function er(e,t,n,a,i){document.getElementById("notifications").innerHTML='<div role="alert" class="alert alert-secondary"><p class="h6 alert-heading">Quick Transaction Overview</p><p class="text-break mb-1">Someone sent <b>'+t.toFixed(8)+" BTC</b> ($"+(t*i).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})+') to <a href="/'+e+'" class="link-underline link-underline-opacity-0 link-underline-opacity-100-hover">'+e+"</a>. The transaction was confirmed on <b>"+timestamp2date(1e3*a)+"</b>, and the sender spent <b>"+n.toFixed(8)+" BTC</b> ($"+(n*i).toFixed(2)+') in fees.</p><p class="text-break mb-0"><i>Privacy leak: <b>Mixed address types.</b></i></p></div>'}}function formatEta(e){var t=10*e,n=Math.floor(t/60),a=t%60;if(0===n)return a+(1==a?" minute":" minutes");var i=n+(1==n?" hour":" hours");return a>0&&(i+=" "+a+(1==a?" minute":" minutes")),i}function calcEta(e,t){var n=new XMLHttpRequest;n.open("GET",server+"/misc/get/fee_estimates?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState&&200==n.status){var t=JSON.parse(n.responseText).fee_by_block_target;for(let a in t)if(e>=t[a]){1==a&&(a=2),document.getElementById("eta").textContent=formatEta(a);break}}},n.send()}function calcTip(e,t,n=!1){var a=new XMLHttpRequest;a.open("GET",server+"/misc/get/histogram?key="+t,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){if(4==a.readyState&&200==a.status){for(var i=JSON.parse(a.responseText),s=0,o=0;o<i.length;o++)if(i[o][0]>=e/1e3)s+=i[o][1];else break;var r=(s/1e6).toFixed(2);document.getElementById("tip").textContent=r,r<=1?(document.getElementById("tip").className="text-success",document.getElementById("eta").textContent="10 minutes",n||(document.getElementById("notifications").innerHTML='<div class="alert alert-warning" role="alert"><p class="h6 alert-heading">Unconfirmed Transaction!</p><p class="mb-0">The transaction has a sufficient fee and is expected to be included in the next block. The system monitors the transaction until it\'s confirmed.</p></div>')):(document.getElementById("tip").className="text-danger",n||(document.getElementById("notifications").innerHTML='<div class="alert alert-danger" role="alert"><p class="h6 alert-heading">Unconfirmed Transaction!</p><p class="mb-0">The transaction fee is below the threshold required to be included in the next block. Click the \'Accelerate\' button to speed up the transaction.</p></div>'),calcEta(e,t))}},a.send()}function isAccelerated(e,t,n){var a=new XMLHttpRequest;a.open("GET","https://bitaccelerate.com/api/status.json?txid="+e,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){4==a.readyState&&200==a.status&&(JSON.parse(a.responseText).isAccelerated?(document.getElementById("acc").innerHTML="Yes! \uD83C\uDF89\uD83D\uDE80",document.getElementById("eta").textContent="10 minutes",document.getElementById("tip").className="text-success",document.getElementById("tip").textContent=0,document.getElementById("notifications").innerHTML='<div class="alert alert-warning" role="alert"><p class="h6 alert-heading">Unconfirmed Transaction!</p><p class="mb-0">This transaction has been prioritized and is expected to be mined within the next few blocks, likely in 10–20 minutes.</p></div>'):(document.getElementById("acc").innerHTML='No &nbsp;<a href="https://bitaccelerate.com/premium/#'+e+'" target="_blank" title="Accelerate this transaction" class="btn btn-outline-success btn-sm pt-0 pb-0 ps-1 text-nowrap topfix btn-pulse">\uD83D\uDE80 Accelerate</a>',calcTip(t,n)))},a.send()}function checkTX(e,t,n,a){var i=new XMLHttpRequest;i.open("GET",server+"/tx/info/"+e+"/true?key="+t,!0),i.setRequestHeader("Accept","application/json"),i.onreadystatechange=function(){if(4==i.readyState){if(200==i.status){var s=JSON.parse(i.responseText);showResult(s,e,t,n,a),s.confirmations&&s.vin.length<=50&&s.vout.length<=50&&(document.getElementById("flowChart").classList.remove("d-none"),initSankeyChart(s))}else 400==i.status?(connLostStatus(),stopAllIntervals()):429==i.status?document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Error: Too Many Requests!</div>':isReplaced(e)}},i.send()}function isReplaced(e){var t=new XMLHttpRequest;t.open("GET","https://mempool.space/api/v1/tx/"+e+"/rbf",!0),t.onreadystatechange=function(){if(4==t.readyState&&200==t.status){var e=JSON.parse(t.responseText);void 0!==e?.replacements?.tx?.txid?document.getElementById("notifications").innerHTML='<div class="alert alert-warning text-break fw-bold">The transaction has been replaced by: <a href="https://bitref.com/tx/'+e.replacements.tx.txid+'" target="_blank">'+e.replacements.tx.txid+"</a></div>":(document.getElementById("notifications").innerHTML='<div class="alert alert-warning">The transaction could not be found. Waiting for it to appear in the mempool...<br><div class="spinner-border" role="status"><span class="visually-hidden">Waiting...</span></div></div>',setTimeout(function(){location.reload()},2e4))}},t.send()}function isTaproot(e){return!!(e&&Array.isArray(e.vin))&&0!==e.vin.length&&e.vin.some(e=>{if(e.prevout?.scriptPubKey?.type)return"witness_v1_taproot"===e.prevout.scriptPubKey.type;let t=e.txinwitness;if(!Array.isArray(t))return!1;if(1===t.length&&"string"==typeof t[0]&&128===t[0].length)return!0;
1if(t.length>=2){let n=t[t.length-1];if("string"==typeof n&&(n.startsWith("c0")||n.startsWith("c1")))return!0}return!1})}function opReturnHexToText(e){let t=e.match(/.{1,2}/g).map(e=>parseInt(e,16));if(106!==t[0])throw Error("Not an OP_RETURN script");let n=1,a=[];for(;n<t.length;){let i=t[n];n++;let s;if(i<=75)s=i;else if(76===i)s=t[n],n+=1;else if(77===i)s=t[n]|t[n+1]<<8,n+=2;else if(78===i)s=t[n]|t[n+1]<<8|t[n+2]<<16|t[n+3]<<24,n+=4;else break;a.push(...t.slice(n,n+s)),n+=s}let o=new Uint8Array(a);try{return new TextDecoder("utf-8",{fatal:!0}).decode(o)}catch{return Array.from(o).map(e=>e>=32&&e<127?String.fromCharCode(e):".").join("")}}function initSankeyChart(e){var t=[],n={},a=1,i=0,s=e.vout;for(let o=0;o<s.length;o++)s[o].value>0&&(t.push({from:"Transaction",to:"Output #"+o,flow:s[o].value}),i+=s[o].value,n["Output #"+o]=a,a++);e.fee>0&&(t.push({from:"Transaction",to:"Fee",flow:e.fee}),n.Fee=a,a++);var r=e.vin;for(let l=0;l<r.length;l++)if(void 0!==r[l].coinbase){var d=i.toFixed(8);t.push({from:"Input (CoinBase)",to:"Transaction",flow:d}),n["Input (CoinBase)"]=a,a++}else{var d=void 0!==r[l]?.prevout?.value?r[l].prevout.value:0;t.push({from:"Input #"+l,to:"Transaction",flow:d}),n["Input #"+l]=a,a++}if(r.length>25||s.length>25)var c=1;else var c=2;drawSankeyChart(t,n,c)}function drawSankeyChart(e,t,n=2){let a=document.getElementById("utxoChart").getContext("2d");new Chart(a,{type:"sankey",data:{datasets:[{label:"Bitcoin Transaction UTXO Flow",data:e,priority:t,colorFrom:e=>e.dataset.data[e.dataIndex].from.includes("Input")?"rgba(247, 147, 26, 0.8)":"rgba(54, 162, 235, 1.0)",colorTo:e=>"Fee"===e.dataset.data[e.dataIndex].to?"rgba(220, 53, 69, 0.8)":e.dataset.data[e.dataIndex].to.includes("Output")?"rgba(39, 174, 96, 0.8)":"rgba(54, 162, 235, 1.0)",hoverColorFrom:e=>e.dataset.data[e.dataIndex].from.includes("Input")?"rgba(247, 147, 26, 1)":"rgba(54, 162, 235, 1.0)",hoverColorTo:e=>"Fee"===e.dataset.data[e.dataIndex].to?"rgba(220, 53, 69, 1)":e.dataset.data[e.dataIndex].to.includes("Output")?"rgba(39, 174, 96, 1)":"rgba(54, 162, 235, 1.0)",borderWidth:1,borderColor:"#aaa"}]},options:{aspectRatio:n,animation:!1,responsive:!0,plugins:{tooltip:{callbacks:{label:e=>`${e.raw.from} -> ${e.raw.to}: ${e.raw.flow} BTC`}}}}})}function spendingtxid(e,t,n){var a=new XMLHttpRequest;a.open("GET",server+"/tx/spendingtxid/"+e+"/"+t+"?key="+n,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){if(4==a.readyState){if(200==a.status){var e=JSON.parse(a.responseText);null!==e.spendingtxid&&(window.location="/tx/"+e.spendingtxid+"#input:"+e.input)}else alert("The system failed to locate the spending transaction ID")}},a.send()}var newBlocksCheckFlag=!0,latestHeight=null;function enable_audio_notify(){(audio=new Audio("/theme/js/notify.mp3")).load()}function checkNewBlocks(e){if(newBlocksCheckFlag){var t=new XMLHttpRequest;t.open("GET",server+"/block/tip?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){if(4==t.readyState){if(200==t.status){var e=JSON.parse(t.responseText).blockheight;null!==latestHeight&&e>latestHeight&&(audio?(audio.play().catch(e=>console.error("Audio playback failed:",e)),setTimeout(function(){location.reload()},1e3)):location.reload())}else 400==t.status&&(connLostStatus(),stopAllIntervals())}},t.send()}}function loadBlocks(e,t=null){var n=new XMLHttpRequest;n.open("GET",server+"/block/bulk/"+(t||"")+"?key="+e,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState){if(200==n.status){var a=document.getElementById("loadMore");a?a.remove():document.getElementById("blocks").innerHTML="";var i=JSON.parse(n.responseText);null===t&&(latestHeight=i[0].height);for(let s=0;s<i.length;s++){var o=i[s].height,r=timestamp2date(1e3*i[s].time),l=i[s].txs,d=(i[s].total_size/1e6).toFixed(2)+" MB",c=Math.round((i[s].total_weight/4/1e3+1)/10),u=((i[s].subsidy+i[s].totalfee)/1e8).toFixed(8);document.getElementById("blocks").innerHTML+="<tr onclick=\"window.location='/block/"+o+'\'"><td><a href="/block/'+o+'">
1'+o.toLocaleString("en-US")+"</a></td><td>"+r+"</td><td>"+l.toLocaleString("en-US")+"</td><td>"+d+'</td><td><div class="progress mt-1"><div class="progress-bar progress-bar-striped" role="progressbar" style="width: '+c+'%;" aria-valuenow="'+c+'" aria-valuemin="0" aria-valuemax="100">'+c+"%</div></div></td><td>"+u+"</td></tr>";var $=parseInt(o)-1}document.getElementById("blocks").innerHTML+='<tr id="loadMore" class="bg-white"><td colspan="6" class="text-center border-bottom-0"><button type="button" onclick="loadBlocks(\''+e+"',"+$+');this.disabled=true;" class="btn btn-outline-primary">Load More Blocks</button></td></tr>'}else alert("Loading blocks failed")}},n.send(),t&&(newBlocksCheckFlag=!1,null!==(audioNotify=document.getElementById("audioNotify"))&&document.getElementById("audioNotify").remove())}function show_percentiles(){document.getElementById("percentiles").classList.remove("d-none"),document.getElementById("calc").parentNode.style.borderBottomWidth=0}function show_cbtext(){document.getElementById("cbtext").classList.remove("d-none"),document.getElementById("cbbutton").parentNode.style.borderBottomWidth=0}var transactionsArr=[],nextTxStart=0,nTx=null;function loadBlock(e,t){var n=new XMLHttpRequest;n.open("GET",server+"/block/info/"+e+"?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState){if(200==n.status){var e=JSON.parse(n.responseText);if(1==e.confirmations){var t=document.getElementById("next");t.href="#",t.classList.add("disabled")}document.getElementById("hash").textContent=e.hash,document.getElementById("confirmations").textContent=e.confirmations;var a=timestamp2date(1e3*e.time);document.getElementById("time").textContent=a,document.getElementById("ntx").textContent=e.nTx.toLocaleString("en-US"),document.getElementById("ntx2").textContent=e.nTx.toLocaleString("en-US"),document.getElementById("swtxs").textContent=e.swtxs.toLocaleString("en-US")+" ("+(e.swtxs/e.nTx*100).toFixed(1)+"%)",document.getElementById("weight").textContent=(e.weight/1e6).toFixed(2),document.getElementById("minfeerate").textContent=e.minfeerate,document.getElementById("maxfeerate").textContent=e.maxfeerate,document.getElementById("percentiles").innerHTML="<p>10% of the transactions in the block has a feerate ≤ "+(e.feerate_percentiles[0]+1)+" sat/vB</p><p>25% of the transactions in the block has a feerate ≤ "+(e.feerate_percentiles[1]+1)+" sat/vB</p><p>50% of the transactions in the block has a feerate ≤ "+(e.feerate_percentiles[2]+1)+" sat/vB</p><p>75% of the transactions in the block has a feerate ≤ "+(e.feerate_percentiles[3]+1)+" sat/vB</p><p>90% of the transactions in the block has a feerate ≤ "+(e.feerate_percentiles[4]+1)+" sat/vB</p>",document.getElementById("avgfeerate").textContent=e.avgfeerate,document.getElementById("subsidy").textContent=(e.subsidy/1e8).toFixed(8),document.getElementById("totalfee").textContent=(e.totalfee/1e8).toFixed(8),document.getElementById("reward").textContent=((e.subsidy+e.totalfee)/1e8).toFixed(8),document.getElementById("total_size").textContent=(e.total_size/1e6).toFixed(2),document.getElementById("vsize").textContent=(e.weight/4/1e6).toFixed(2),document.getElementById("fillrate").textContent=Math.round(e.weight/4/1e3/10)+"%",document.getElementById("fillrate").style.width=Math.round(e.weight/4/1e3/10)+"%",document.getElementById("miner").textContent=e.miner,document.getElementById("difficulty").textContent=e.difficulty,document.getElementById("cbtext").textContent=hexToReadableText(e.coinbase_hex),transactionsArr=e.tx,nTx=e.nTx,document.getElementById("transactions").innerHTML="",showMoreTxs();var i=document.createElement("meta");i.name="description",i.content="Bitcoin Block #"+e.height+" mined by "+e.miner+" on "+a+". Contains "+e.nTx+" transactions, total size "+(e.total_size/1e3).toFixed(3)+" KB, average fee rate "+e.avgfeerate+" sat/vB.",document.getElementsByTagName("head")[0].appendChild(i)}else document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Block with that height not found!</div>'}},n.send()}function showMoreTxs(){if(nextTxStart+100<nTx)var e=nextTxStart+100,t=!0;else var e=nTx,t=!1;var n="";for(let a=nextTxStart;a<e;a++)n+='<li class="tx list-group-item text-break pe-1"><a href="https://bitref.com/tx/'+transactionsArr[a]+'" class="link-un
1derline link-underline-opacity-0 link-underline-opacity-100-hover">'+transactionsArr[a]+"</li>";document.getElementById("transactions").innerHTML+=n,t&&(document.getElementById("transactions").innerHTML+='<li class="list-group-item text-center"><button type="button" onclick="this.parentNode.remove();showMoreTxs();" class="btn btn-outline-primary">Show More Transactions</button></li>'),nextTxStart+=100}function hexToReadableText(e){let t=new Uint8Array(e.match(/.{1,2}/g).map(e=>parseInt(e,16)));try{let n=new TextDecoder("utf-8",{fatal:!0});return n.decode(t)}catch(a){return Array.from(t).map(e=>e>=32&&e<127?String.fromCharCode(e):".").join("")}}function get_visual_block(e){var t=document.getElementById("hash").textContent,n=new XMLHttpRequest;n.open("GET",server+"/block/view/"+t+"?key="+e,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState){if(200==n.status){var e=JSON.parse(n.responseText);document.getElementById("chartParent").innerHTML='<canvas id="blockmap"></canvas>',document.getElementById("legend").classList.remove("d-none"),draw_chart_4(e)}else alert("Block visualization failed")}},n.send()}function colorFind(e){var t=e.dataIndex,n=e.dataset.data[t];if(void 0!==n)switch(n._data.type){case"consolidation":return"#00E396";case"batch_payout":return"#775DD0";case"coinjoin":return"#FEB019";case"data":return"#DC3545";default:return"#008FFB"}}function draw_chart_2(e){var t=document.getElementById("blockmap").getContext("2d");new Chart(t,{type:"treemap",data:{datasets:[{tree:e,key:"vsize",spacing:.1,borderWidth:0,backgroundColor:e=>colorFind(e)}]},options:{parsing:!1,onClick:function(e,t){if(t[0]){var n=t[0]._index;txid=t[0]._chart.data.datasets[0].data[n]._data.txid,window.open("https://bitref.com/tx/"+txid)}},animation:!1,aspectRatio:1,maintainAspectRatio:!0,legend:{display:!1},tooltips:{bodySpacing:7,displayColors:!1,callbacks:{title:function(e,t){},label:function(e,t){var n=t.datasets[e.datasetIndex].data[e.index]._data;return["TxID: "+n.txid.substring(0,8)+"..."+n.txid.substring(56,64),"vSize: "+n.vsize+" Bytes","Fee: "+n.fee+" sat","Feerate: "+n.feerate.toFixed(2)+" sat/vB","Type: "+n.type,"Percent of the block: "+(1e-4*n.vsize).toFixed(3)+" %"]}}}}})}let chart4=null;function draw_chart_4(e){let t=document.getElementById("blockmap").getContext("2d");if(chart4){chart4.data.datasets[0].tree=e,chart4.update();return}chart4=new Chart(t,{type:"treemap",data:{datasets:[{tree:e,key:"vsize",spacing:.2,borderColor:"white",borderWidth:0,backgroundColor:e=>colorFind(e)}]},options:{parsing:!1,devicePixelRatio:2,onClick(e,t,n){if(t[0]){let a=t[0].index,i=n.data.datasets[0].data[a]._data.txid;window.open("https://bitref.com/tx/"+i,"_blank")}},animation:!1,aspectRatio:1,maintainAspectRatio:!0,plugins:{legend:{display:!1},tooltip:{bodySpacing:5,displayColors:!1,callbacks:{title:()=>null,label:function(e){let t=e.dataIndex,n=e.dataset.data[t],a=n._data;return["TxID: "+a.txid.substring(0,8)+"..."+a.txid.substring(56,64),"vSize: "+a.vsize+" Bytes","Fee: "+a.fee+" sat","Feerate: "+a.feerate.toFixed(2)+" sat/vB","Type: "+a.type,"Percent of the block: "+(1e-4*a.vsize).toFixed(3)+" %"]}}}}}})}function check_fee(e,t){var n=new XMLHttpRequest;n.open("GET",server+"/misc/get/fee_estimates?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState&&200==n.status){var t=JSON.parse(n.responseText);document.getElementById("output").textContent=t.fee_by_block_target[e]/1e3}},n.send()}function calc_fiat(e){var t=document.getElementById("success").textContent;document.getElementById("success-fiat").textContent=(140*t/1e8*e).toFixed(2);var n=document.getElementById("info").textContent;document.getElementById("info-fiat").textContent=(140*n/1e8*e).toFixed(2);var a=document.getElementById("warning").textContent;document.getElementById("warning-fiat").textContent=(140*a/1e8*e).toFixed(2)}function loadTransactions(e,t){var n=new XMLHttpRequest;n.open("GET",server+"/misc/get/bitcoinfees?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState){if(200==n.status){var t=JSON.parse(n.responseText);document.getElementById("success").textContent=Math.max(t.meta.success,t.meta.tip).toFixed(2),document.getElementById("info").textContent=t.meta.info.toFixed(2),document.getElementById("warning").textContent=t.meta.warning.toFixed(2),document.getElementById("tx_total").textContent=t.meta.tx_total,document.getElementById("tipfee").textContent=t.meta.tip.toFixed(2),calc_fiat(e);for(var a=t.txs,i=0,s="",o=!1,r=0;r<a.length;r++){var l=a[r].fee,d=a[r].count;d>i&&(i=d);var c=Math.round(d/i*100),u=a[r].color;switch(u){case"success":var $="20M";if(o)var p="";else{var p=" fw-bold";o=!0}break;case"info":var $="1H",p="";break;case"warning":var $="6H",p="";break;case"danger":var $="1D",p="";break;case"secondary":var $="∞",p=""}s+='<tr><td class="text-nowrap'+p+'">'+l+'</td><td><div class="progress"><div class="progress-bar bg-'+u+'" role="progressbar" style="width: '+c+'%" aria-valuenow="'+d+'" aria-valuemin="0" aria-valuemax="'+i+'" aria-label="Transactions">'+d+'</div></div></td><td class="text-end">'+$+"</td></tr>"}document.getElementById("txchart").innerHTML=s}else 400==n.status&&(connLostStatus(),stopAllIntervals())}},n.send()}function compact_histogram(e){let t={};for(let n=0;n<e.length;n++){let a=Math.round(e[n][0]).toString(),i=parseInt(e[n][1],10);t.hasOwnProperty(a)?t[a]+=i:t[a]=i}let s=[];for(let o in t)t.hasOwnProperty(o)&&s.push([parseInt(o),parseInt(t[o])]);return s.reverse(),s}function histogram(e){var t=parseFloat(document.getElementById("success").textContent),n=parseFloat(document.getElementById("info").textContent),a=parseFloat(document.getElementById("warning").textContent),i=new XMLHttpRequest;i.open("GET",server+"/misc/get/histogram?key="+e,!0),i.setRequestHeader("Accept","application/json"),i.onreadystatechange=function(){if(4==i.readyState){if(200==i.status){var e=JSON.parse(i.responseText);e=compact_histogram(e);for(var s=0,o=0,r=0,l=[],d=0;d<e.length;d++){if(d<e.length-1&&parseInt(e[d][0]-1)!=parseInt(e[d+1][0]))var c=parseInt(e[d+1][0]+1)+"-"+parseInt(e[d][0]);else var c=e[d][0];var u=e[d][1];o+=u,u>s&&(s=u),0==r&&o>=1e6&&(r=d),l.push([c,u])}document.getElementById("sum").textContent=(o/1e6).toFixed(2),l.reverse();for(var $="",p=!1,d=0;d<l.length;d++){var c=l[d][0],u=(l[d][1]/1e6).toFixed(4),m=Math.round(l[d][1]/s*100);if((feerate=-1==c.toString().indexOf("-")?c:c.split("-")[0])>=t){var f="20M",g="success";if(p)var v="";else{var v=" fw-bold";p=!0}}else if(feerate>=n)var f="1H",g="info",v="";else if(feerate>=a)var f="6H",g="warning",v="";else var f="∞",g="secondary",v="";$+='<tr><td class="text-nowrap'+v+'">'+c+'</td><td><div class="progress"><div class="progress-bar bg-'+g+'" role="progressbar" style="width: '+m+'%" aria-valuenow="'+u+'" aria-valuemin="0" aria-valuemax="'+s+'" aria-label="Transactions">'+u+'</div></div></td><td class="text-end">'+f+"</td></tr>"}document.getElementById("vbchart").innerHTML=$}else 400==i.status&&(connLostStatus(),stopAllIntervals())}},i.send()}function load_histogram(e){histogram(e),setInterval(function(){histogram(e)},6e4)}function get_next_block(e){var t=new XMLHttpRequest;t.open("GET",server+"/misc/get/block_template?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){4==t.readyState&&(200==t.status?draw_chart_4(JSON.parse(t.responseText)):400==t.status&&(connLostStatus(),stopAllIntervals()))},t.send()}function load_next_block(e){get_next_block(e),setInterval(function(){get_next_block(e)},6e4)}let tipChart;function drawTipFeeratesChart(e){let t=new Date,n=[];for(let a=0;a<e.length;a++){let i=new Date(t.getTime()-6e4*a);n.unshift(i.getHours().toString().padStart(2,"0")+":"+i.getMinutes().toString().padStart(2,"0"))}let s=e.map((t,n)=>n===e.length-1?"rgba(255, 99, 132, 0.6)":"rgba(75, 192, 192, 0.6)"),o=e.map((t,n)=>n===e.length-1?"rgba(255, 99, 132, 1)":"rgba(75, 192, 192, 1)");if(tipChart)tipChart.data.labels=n,tipChart.data.datasets[0].data=e,tipChart.data.datasets[0].backgroundColor=s,tipChart.data.datasets[0].borderColor=o,tipChart.update(
1);else{let r=document.getElementById("tipChart").getContext("2d");tipChart=new Chart(r,{type:"bar",data:{labels:n,datasets:[{label:"Fee rate",data:e,backgroundColor:s,borderColor:o,borderWidth:1}]},options:{animation:!1,responsive:!0,plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){return"Min (tip) fee rate: "+e.parsed.y+" sat/vB"}}}},scales:{x:{display:!0},y:{beginAtZero:!0}}}})}}function loadTipFeerates(e){var t=new XMLHttpRequest;t.open("GET",server+"/misc/get/tip_feerate?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){4==t.readyState&&(200==t.status?drawTipFeeratesChart(JSON.parse(t.responseText)):400==t.status&&(connLostStatus(),stopAllIntervals()))},t.send()}function loadPriceChart(e){var t=new XMLHttpRequest;t.open("GET","/price/chart.json?period="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){if(4==t.readyState&&200==t.status){var e=JSON.parse(t.responseText);renderPriceChart(e),periodChange(e)}},t.send()}function renderPriceChart(e){document.querySelector("#chart").innerHTML="";for(var t=[],n=0;n<e.length;n++){var a=e[n].t,i=e[n].p;t.push({x:new Date(1e3*a),y:i})}new ApexCharts(document.querySelector("#chart"),{series:[{name:"Price",data:t}],chart:{type:"area",stacked:!1,zoom:{type:"x",enabled:!0,autoScaleYaxis:!0},toolbar:{autoSelected:"zoom"}},dataLabels:{enabled:!1},markers:{size:0},title:{text:"BTC / USD",align:"left"},fill:{type:"gradient",gradient:{shadeIntensity:1,inverseColors:!1,opacityFrom:.5,opacityTo:0,stops:[0,90,100]}},yaxis:{labels:{formatter:function(e){return e.toFixed(0)}}},xaxis:{type:"datetime"},tooltip:{shared:!1,x:{format:"dd MMM yyyy HH:mm:ss"},y:{formatter:function(e){return e}}}}).render()}function load_price(e){cryto_to_fiat(1),document.getElementById("crypto").value=1,document.getElementById("price").innerText=e}function cryto_to_fiat(e){var t=course*e;document.getElementById("fiat").value=t.toFixed(2)}function fiat_to_crypto(e){var t=e/course;document.getElementById("crypto").value=t.toFixed(8)}function periodChange(e){var t=e[0].p,n=(100*(e[e.length-1].p-t)/t).toFixed(2);n>=0?(document.getElementById("percent").className="btn btn-outline-success",document.getElementById("percent").innerText="+"+n+"%"):(document.getElementById("percent").className="btn btn-outline-danger",document.getElementById("percent").innerText=n+"%")}function unlockPeriods(e){document.getElementById("total").textContent=0,"00X"==e?document.getElementById("period").innerHTML='<option value="0">7 days</option>':"70X"==e||"60X"==e||"50X"==e||"40X"==e?document.getElementById("period").innerHTML='<option value="" selected disabled>Please select</option><option value="1">1 month</option><option value="3">3 months</option><option value="6">6 months</option><option value="9">9 months</option><option value="12">1 year</option>':document.getElementById("period").innerHTML='<option value="" selected disabled>Please select</option><option value="3">3 months</option><option value="6">6 months</option><option value="9">9 months</option><option value="12">1 year</option>'}function calcPrice(e){var t=document.getElementById("limit").value;switch(t){case"00X":var n=0;break;case"10X":var n=10;break;case"20X":var n=20;break;case"30X":var n=50;break;case"40X":var n=100;break;case"50X":var n=200;break;case"60X":var n=500;break;case"70X":var n=1e3}document.getElementById("total").textContent=n*e}function orderPaid(e){var t=new Image(1,1);t.onload=function(){window.location.href="/account/dashboard/?success"},t.src="/account/paid.png?r="+e,"undefined"!=typeof checkBalanceInterval&&clearInterval(checkBalanceInterval)}function check_balance_new(e,t,n,a){var i=new XMLHttpRequest;i.open("GET",server+"/address/balance/"+e+"?key="+a,!0),i.setRequestHeader("Accept","application/json"),i.onreadystatechange=function(){if(4==i.readyState&&200==i.status){var a=JSON.parse(i.responseText);(a.confirmed_balance>0||a.unconfirmed_balance>0)&&(orderPaid(n),a.confirmed_balance+a.unconfirmed_balance<parseInt(1e8*t)&&status("danger","Warning! This order has been underpaid. We are unable to process orders that are only partially paid. Kindly ensure your payment is topped up to the full amount at our designated address.<br>Missing amount: <b>"+(t-(a.confirmed_balance+a.unconfirmed_balance)/1e8).toFixed(8)+" BTC</b><br>Our Bitcoin address: <b>"+e+"</b>"))}},i.send()}function check_balance_usdtt(e,t){var n=new XMLHttpRequest;n.open("GET","/api/usdtt-check.json?requested="+Math.round(1e6*e),!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){4==n.readyState&&200==n.status&&JSON.parse(n.responseText).settled&&orderPaid(t)},n.send()}function getBlockTip(e){var t=new XMLHttpRequest;
1t.open("GET",server+"/block/tip?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){if(4==t.readyState&&200==t.status){var e=parseInt(JSON.parse(t.responseText).blockheight);latestHeight=e,calcHalving(e)}},t.send()}function calcHalving(e){document.getElementById("currentBlock").textContent=e.toLocaleString("en-US");var t=Math.floor(e/21e4);document.getElementById("halvingsPast").textContent=t,document.getElementById("halvingsLeft").textContent=32-t;var n=(t+1)*21e4;document.getElementById("nextHalvingBlock").textContent=n.toLocaleString("en-US");var a=n-e;document.getElementById("blocksLeft").textContent=a.toLocaleString("en-US");var i=(21e4-a)*100/21e4;document.getElementById("progressPercent").textContent=i.toFixed(2),document.getElementById("progress_1").style.width=i+"%",document.getElementById("progress_1").title=21e4-a+" blocks passed",document.getElementById("progress_2").style.width=100-i+"%",document.getElementById("progress_2").title=a+" blocks left",initTooltips();var s=50/Math.pow(2,t);document.getElementById("currBlockReward").textContent=s,document.getElementById("minedPerDay").textContent=144*s;var o=s/2;document.getElementById("nextBlockReward").textContent=o,document.getElementById("nextPerDay").textContent=144*o;var r=calculateBitcoinSupply(e);document.getElementById("circSupply").textContent=Math.round(r).toLocaleString("en-US"),document.getElementById("leftSupply").textContent=Math.round(21e6-r).toLocaleString("en-US"),calcTimeRemaining(10*a),calcHalvingDate(10*a)}function calcTimeRemaining(e){let t=60*e;!function e(){let n=Math.floor(t/86400),a=t%86400,i=a%3600;document.getElementById("ct_days").textContent=n,document.getElementById("ct_hours").textContent=Math.floor(a/3600),document.getElementById("ct_min").textContent=Math.floor(i/60),document.getElementById("ct_sec").textContent=i%60,t--,setTimeout(e,1e3)}()}function calcHalvingDate(e){let t=new Date,n=new Date(t.getTime()+6e4*e);document.getElementById("halvingDate").textContent=timestamp2date(n).slice(0,-3)}function calculateBitcoinSupply(e){let t=0,n=50,a=Math.floor(e/21e4);for(let i=0;i<=a;i++)t+=(i<a?21e4:e%21e4+1)*n,n/=2;return t}function getDifficulty(e){var t=new XMLHttpRequest;t.open("GET",server+"/mining/difficulty?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){if(4==t.readyState&&200==t.status){var e=JSON.parse(t.responseText);document.getElementById("lastAdjustmentHeight").textContent=e.lastAdjustmentHeight.toLocaleString("en-US"),document.getElementById("currentHeight").textContent=e.currentHeight.toLocaleString("en-US"),document.getElementById("nextAdjustmentHeight").textContent=e.nextAdjustmentHeight.toLocaleString("en-US"),document.getElementById("currentDifficulty").textContent=formatDifficulty(e.currentDifficulty,2),document.getElementById("lastAdjustmentTime").textContent=timestamp2date(1e3*e.lastAdjustmentTime).slice(0,-3),document.getElementById("expectedBlocks").textContent=e.expectedBlocks.toLocaleString("en-US"),document.getElementById("minedBlocks").textContent=e.minedBlocks.toLocaleString("en-US"),e.blockDifference>=0?(document.getElementById("blockDifference").textContent="+"+e.blockDifference,document.getElementById("blockDifference").classList.add("text-success")):(document.getElementById("blockDifference").textContent=e.blockDifference,document.getElementById("blockDifference").classList.add("text-danger")),document.getElementById("remainingBlocks").textContent=e.remainingBlocks.toLocaleString("en-US"),document.getElementById("estimatedNextDifficulty").textContent=formatDifficulty(e.estimatedNextDifficulty,2),e.estimatedDifficultyChange>=0?(document.getElementById("estimatedDifficultyChange").textContent="+"+e.estimatedDifficultyChange.toFixed(1)+"%",document.getElementById("estimatedDifficultyChange").classList.add("text-success")):(document.getElementById("estimatedDifficultyChange").textContent=e.estimatedDifficultyChange.toFixed(1)+"%",document.getElementById("estimatedDifficultyChange").classList.add("text-danger")),document.getElementById("estimatedRetargetDate").textContent=timestamp2date(1e3*e.estimatedRetargetDate).slice(0,-3);var n=Math.round(e.timeAvg);document.getElementById("timeAvg").textContent=`${Math.floor(n/60)} min ${n%60} sec`,document.getElementById("hashRate").textContent=(4294967296*e.currentDifficulty/e.timeAvg/1e18).toFixed(2);var a=100*e.minedBlocks/2016,i=100*Math.abs(e.blockDifference)/2016;progress_1=Math.abs(a-i),document.getElementById("progress_1").style.width=progress_1+"%",e.blockDifference>=0?document.getElementById("progress_1").title=e.expectedBlocks+" blocks expected":document.getElementById("progress_1").title=e.minedBlocks+" blocks mined",document.getElementById("progress_2").style.width=i+"%",document.getElementById("progress_2").title=Math.abs(e.blockDifference)+" blocks "+(e.blockDifference>=0?"ahead":"behind"),document.getElementById("progress_3").style.width=100-a+"%",document.getElementById("progress_3").title=e.remainingBlocks+" blocks remaining",e.blockDifference>=0?document.getElementById("progress_2").classList.add("bg-success"):document.getElementById("progress_2").classList.add("bg-danger"),document.getElementById("epoch").textContent=Math.floor(e.currentHeight/2016),document.getElementById("progressPercent").textContent=e.progressPercent.toFixed(1),document.getElementById("timeLeft").textContent=formatRelTime(e.estimatedRetargetDate-Math.floor(Date.now()/1e3)),initTooltips()}},t.send()}function getDiffHistory(e,t=27){var n=[],a=[],i=[],s=new XMLHttpRequest;s.open("GET",server+"/mining/difficulty_adjustments?key="+e,!0),s.setRequestHeader("Accept","application/json"),s.onreadystatechange=function(){if(4==s.readyState&&200==s.status){var e=JSON.parse(s.responseText);e=e.slice(-1*t);for(var o=0;o<e.length;o++)n.push(e[o][2]),a.push(new Date(1e3*e[o][0])),i.push(e[o][1]);drawDiffHistoryChart(n,a),fillDiffHistoryTable(n,a,i)}},s.send()}let difficultyChartInstance=null;function drawDiffHistoryChart(e,t){let n=document.getElementById("difficultyChart"),a=n.getContext("2d");difficultyChartInstance?(difficultyChartInstance.data.labels=t,difficultyChartInstance.data.datasets[0].data=e,difficultyChartInstance.update(
1)):difficultyChartInstance=new Chart(a,{type:"line",data:{labels:t,datasets:[{label:"Bitcoin Difficulty Historic Chart",data:e,fill:!0,tension:.1,stepped:!0}]},options:{animation:!1,scales:{x:{type:"time",time:{},title:{display:!1,text:"Date"}},y:{beginAtZero:!0,min:0,title:{display:!1,text:"Bitcoin Difficulty"},ticks:{callback:function(e){return formatDifficulty(e)}}}},interaction:{mode:"index",intersect:!1},plugins:{tooltip:{enabled:!0,mode:"index",intersect:!1,callbacks:{label:function(e){let t=e.raw;return`Difficulty: ${t}`}}},legend:{display:!1}}}})}function fillDiffHistoryTable(e,t,n){var a=document.getElementById("diffHistoryData");a.innerHTML="";var i=Math.min(10,e.length-1);for(let s=e.length-1;s>e.length-1-i;s--){var o=t[s].toISOString().slice(0,10),r=e[s-1],l=e[s],d=((l-r)/r*100).toFixed(2),c=d>=0?"success":"danger",u=n[s];d>=0&&(d="+"+d);var $=document.createElement("tr");$.innerHTML=`
2			<td><a href="/block/${u}">${u.toLocaleString("en-US")}</a></td>
3			<td>${o}</td>
4			<td>${formatDifficulty(r,2)}</td>
5			<td>${formatDifficulty(l,2)}</td>
6			<td class="text-end fw-bold text-${c}">${d}%</td>
7		`,a.appendChild($)}}function formatDifficulty(e,t=0){if(e>=1e15)return(e/1e15).toFixed(t)+" P";if(e>=1e12)return(e/1e12).toFixed(t)+" T";if(e>=1e9)return(e/1e9).toFixed(t)+" G";if(e>=1e6)return(e/1e6).toFixed(t)+" M";if(e>=1e3)return(e/1e3).toFixed(t)+" K";else return e.toFixed(t)}function fetchPoolsData(e){let t=new XMLHttpRequest;t.open("GET",server+"/mining/pools?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onload=function(){if(200===t.status){let e=JSON.parse(t.responseText),n=calculateNetworkHashrate(e);document.getElementById("totalHashpower").textContent=n.toFixed(2);let a={};e.forEach(e=>{let t=e[2];a[t]=(a[t]||0)+1});let i=Object.entries(a).sort((e,t)=>t[1]-e[1]),s=i.map(e=>e[0]),o=i.map(e=>e[1]);drawPoolsChart(s,o),fillPoolTable(e,n)}},t.send()}function drawPoolsChart(e,t){new Chart(document.getElementById("poolsChart"),{type:"pie",data:{labels:e,datasets:[{data:t}]},options:{responsive:!0,animation:!1,plugins:{legend:{position:"bottom"},tooltip:{callbacks:{label:function(e){let t=e.dataset.data.reduce((e,t)=>e+t,0),n=e.raw,a=(n/t*100).toFixed(2);return`${e.label}: ${n} blocks (${a}%)`}}}}}})}function fillPoolTable(e,t){let n={};e.forEach(e=>{let[t,a,i,s,o]=e;n[i]||(n[i]={blocks:0,empty:0,reward:0,lastBlockHeight:0}),n[i].blocks++,1===s&&n[i].empty++,n[i].reward+=o,t>n[i].lastBlockHeight&&(n[i].lastBlockHeight=t)});let a=Object.entries(n).sort((e,t)=>t[1].blocks-e[1].blocks),i=e.length,s=document.getElementById("poolsTable").querySelector("tbody");s.innerHTML="",a.forEach(([e,n],a)=>{let o=n.blocks/i,r=n.reward.toFixed(2),l=`<tr>
8      <td>${a+1}</td>
9      <td>${e}</td>
10      <td>${n.blocks}</td>
11      <td>${(100*o).toFixed(2)}%</td>
12      <td>${(t*o).toFixed(2)}</td>
13      <td>${r}</td>
14      <td><a href="/block/${n.lastBlockHeight}">${n.lastBlockHeight.toLocaleString("en-US")}</a></td>
15      <td>${n.empty}</td>
16    </tr>`;s.insertAdjacentHTML("beforeend",l)})}function calculateNetworkHashrate(e){let[t,n,,,,a]=e[0],i=e.find(e=>e[0]%2016==0);i||(i=e[e.length-1]);let[s,o]=i,r=t-s;return 4294967296*a/(r<12?600:(n-o)/r)/1e18}function checkTxStatus(e,t,n){var a=new XMLHttpRequest;a.open("GET",server+"/tx/info/"+e+"?key="+t,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){4==a.readyState&&(200==a.status?showResultTxStatus(JSON.parse(a.responseText),e,t,n):429==a.status?(document.getElementById("notifications").innerHTML='<div class="alert alert-danger">Error: Too Many Requests!</div>',removeLoading()):(removeLoading(),isReplaced(e)))},a.send()}function showResultTxStatus(e,t,n,a){e.confirmations>=1&&!1===isConfirmed&&location.reload(),removeLoading(),null!==document.getElementById("maindata")&&document.getElementById("maindata").classList.remove("d-none");var i=document.getElementById("status");null!==i&&(e.confirmations?(isConfirmed=!0,document.querySelectorAll(".unconfirmed").forEach(e=>e.remove()),i.className="badge bg-success",1==e.confirmations?i.textContent="1 confirmation":i.textContent=e.confirmations+" confirmations"):(isConfirmed=!1,document.querySelectorAll(".confirmed").forEach(e
16=>e.remove()),i.innerHTML='<span class="badge bg-danger d-inline-flex align-items-center gap-1"><span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>Pending...</span>'));var s=document.getElementById("height");null!==s&&void 0!==e.height&&(s.innerHTML='<a href="https://bitref.com/block/'+e.height+'" target="_blank" class="link-underline link-underline-opacity-0 link-underline-opacity-100-hover">'+e.height+"</a>");var o=document.getElementById("blocktime");null!==o&&e.confirmations&&(o.textContent=timestamp2date(1e3*e.blocktime));var r=document.getElementById("firstseen");null===r||e.confirmations||(r.textContent=timestamp2date(1e3*e.time));var l=document.getElementById("feerate");null!==l&&(l.textContent=(1e8*e.fee/(e.weight/4)).toFixed(2)+" sat/vB");var d=document.getElementById("efee");null===d||e.confirmations||(d.textContent=(e.effectiveFeeRate/1e3).toFixed(2)+" sat/vB"),null===document.getElementById("tip")||e.confirmations||calcTip(e.effectiveFeeRate,a,!0);var c=document.getElementById("size");null!==c&&(c.textContent=e.size+" B / "+e.vsize+" vB"),e.confirmations||setTimeout(function(){checkTxStatus(t,n,a)},15e3)}function loadUnconfirmedExample(e){var t=new XMLHttpRequest;t.open("GET",server+"/misc/get/newtxs?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onreadystatechange=function(){if(4==t.readyState&&200==t.status){var e=JSON.parse(t.responseText).reduce((e,t)=>t.feerate>e.feerate?t:e).txid;document.getElementById("unconfirmed").src="https://bitref.com/tx-status/"+e}},t.send()}function accelerate(e){var t=e.txid.value;return/^[0-9a-fA-F]{64}$/.test(t)?window.location.href="https://bitaccelerate.com/#"+t:alert("Invalid transaction ID!"),!1}function fetchNodesData(e){let t=new XMLHttpRequest;t.open("GET",server+"/misc/get/nodes_clients?key="+e,!0),t.setRequestHeader("Accept","application/json"),t.onload=function(){if(200===t.status){let e=JSON.parse(t.responseText);document.getElementById("totalNodes").textContent=e.meta.total_nodes.toLocaleString("en-US"),document.getElementById("listeningNodes").textContent=e.meta.listening_nodes.toLocaleString("en-US"),document.getElementById("lastUpdated").textContent=Math.round((Math.floor(Date.now()/1e3)-e.meta.timestamp)/60/60),document.getElementById("ipv4nodes").textContent=e.meta.ipv4_nodes.toLocaleString("en-US"),document.getElementById("ipv4percent").textContent=(e.meta.ipv4_nodes/e.meta.listening_nodes*100).toFixed(2)+"%",document.getElementById("ipv6nodes").textContent=e.meta.ipv6_nodes.toLocaleString("en-US"),document.getElementById("ipv6percent").textContent=(e.meta.ipv6_nodes/e.meta.listening_nodes*100).toFixed(2)+"%",document.getElementById("torNodes").textContent=e.meta.tor_nodes.toLocaleString("en-US"),document.getElementById("torPercent").textContent=(e.meta.tor_nodes/e.meta.listening_nodes*100).toFixed(2)+"%";let n=e.labels.map((t,n)=>({label:t,value:e.data[n]})),a=n.findIndex(e=>"Other"===e.label),i=null;-1!==a&&(i=n.splice(a,1)[0]),n.sort((e,t)=>t.value-e.value),i&&n.push(i);let s=n.map(e=>e.label),o=n.map(e=>e.value);drawNodesChart(s,o),fillNodesTable(s,o)}},t.send()}function drawNodesChart(e,t){new Chart(document.getElementById("nodesChart"),{type:"pie",data:{labels:e,datasets:[{data:t}]},options:{responsive:!0,animation:!1,plugins:{legend:{position:"bottom"},tooltip:{callbacks:{label:function(e){let t=e.dataset.data.reduce((e,t)=>e+t,0),n=e.raw,a=(n/t*100).toFixed(2);return`${e.label}: ${n} nodes (${a}%)`}}}}}})}function fillNodesTable(e,t){let n=document.querySelector("#poolsTable tbody");n.innerHTML="";let a=t.reduce((e,t)=>e+t,0);e.forEach((e,i)=>{let s=t[i],o=(s/a*100).toFixed(2)+"%",r=document.createElement("tr");r.innerHTML=`
17			<td>${i+1}</td>
18			<td>${e}</td>
19			<td class="text-end">${s.toLocaleString("en-US")}</td>
20			<td class="text-end">${o}</td>
21		`,n.appendChild(r)})}function fetchNodesVersionsData(e=!1,t){let n=new XMLHttpRequest;n.open("GET",server+"/misc/get/nodes_versions?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onload=function(){if(200===n.status){let t=JSON.parse(n.responseText);fillVersionsTable(t,e)}},n.send()}function fillVersionsTable(e,t=!1){let n=document.querySelector("#ver
21sionsTable tbody");n.innerHTML="";let a=Object.entries(e);t||(a=a.slice(0,10));let i=Object.values(e).reduce((e,t)=>e+t,0);if(a.forEach(([e,t],a)=>{let s=(t/i*100).toFixed(2)+"%",o=document.createElement("tr");o.innerHTML=`
22			<td>${a+1}</td>
23			<td>${e}</td>
24			<td class="text-end">${t.toLocaleString("en-US")}</td>
25			<td class="text-end">${s}</td>
26		`,n.appendChild(o)}),!t){let s=document.createElement("tr"),o=document.createElement("td");o.setAttribute("colspan","4"),o.classList.add("text-center"),o.innerHTML='<button type="button" class="btn btn-outline-primary" onclick="fetchNodesVersionsData(true, gsk)">Show All</button>',s.appendChild(o),n.appendChild(s)}}function fetchNodesCountries(e=!1,t){let n=new XMLHttpRequest;n.open("GET",server+"/misc/get/nodes_countries?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onload=function(){if(200===n.status){let t=JSON.parse(n.responseText);fillCountriesTable(t,e)}},n.send()}function fillCountriesTable(e,t=!1){let n=document.querySelector("#countriesTable tbody");n.innerHTML="";let a=Object.entries(e);t||(a=a.slice(0,10));let i=Object.values(e).reduce((e,t)=>e+t,0);if(a.forEach(([e,t],a)=>{let s=(t/i*100).toFixed(2)+"%",o=document.createElement("tr");o.innerHTML=`
27			<td>${a+1}</td>
28			<td>${e}</td>
29			<td class="text-end">${t.toLocaleString("en-US")}</td>
30			<td class="text-end">${s}</td>
31		`,n.appendChild(o)}),!t){let s=document.createElement("tr"),o=document.createElement("td");o.setAttribute("colspan","4"),o.classList.add("text-center"),o.innerHTML='<button type="button" class="btn btn-outline-primary" onclick="fetchNodesCountries(true, gsk)">Show All</button>',s.appendChild(o),n.appendChild(s)}}function node_info(e,t){var n=e.host.value,a=parseInt(e.port.value),i="";i+='<p class="mb-1"><b>Live Status:</b> <span id="reachable"> <span role="status" class="spinner-border spinner-border-sm"><span class="visually-hidden">Loading...</span></span></span></p>',i+="<p><i>(Determine if port "+a+" is open or not)</i></p>",i+="<hr>",i+='<p class="h6 mb-3">Node data from the last crawl:</p>';let s=new XMLHttpRequest;return s.open("GET",server+"/node/info/"+n+"/"+a+"?key="+t,!0),s.setRequestHeader("Accept","application/json"),s.onload=function(){let n=JSON.parse(s.responseText);200===s.status?(i+='<p class="text-break"><b>Node Address:</b> '+n.label+"</p>",n.open?i+='<p><b>Reachable:</b> <span class="badge text-bg-success">Yes</span></p>':i+='<p><b>Reachable:</b> <span class="badge text-bg-danger">No</span></p>',i+="<p><b>User Agent:</b> "+n.ua+"</p>",i+="<p><b>Last Connected:</b> "+timestamp2date(1e3*n.time)+"</p>",i+="<p><b>Last Reachable:</b> "+n.last_open+"</p>",i+="<p><b>Last Dumped:</b> "+n.last_dumped+"</p>",i+="<p><b>Services:</b> "+decodeServiceFlags(n.services).toString().replaceAll(",",", ")+" ("+n.services+")</p>",n.country&&(i+="<p><b>Country:</b> "+n.country+"</p>"),n.city&&(i+="<p><b>City:</b> "+n.city+"</p>"),n.latitude&&n.longitude&&(i+="<p><b>Coordinates:</b> "+n.latitude+"&deg; N, "+n.longitude+"&deg; E</p>")):i+='<div class="alert alert-danger" role="alert">'+n.error+"</div>";let a=document.getElementById("nodeInfoModal");a.querySelector(".modal-body").innerHTML=i;let o=new bootstrap.Modal(a);o.show(),node_check(e,t)},s.send(),!1}function node_check(e,t){var n=e.host.value,a=e.port.value;let i=new XMLHttpRequest;return i.open("GET",server+"/node/check/"+n+"/"+a+"?key="+t,!0),i.setRequestHeader("Accept","application/json"),i.onload=function(){if(200===i.status){let e=JSON.parse(i.responseText);var t=e.reachable;!1!==t?(document.getElementById("reachable").textContent="Reachable "+t,document.getElementById("reachable").classList.add("badge","text-bg-success")):(document.getElementById("reachable").textContent="Not Reachable",document.getElementById("reachable").classList.add("badge","text-bg-danger"))}},i.send(),!1}function decodeServiceFlags(e){let t="bigint"==typeof e?e:BigInt(e),n=new Map([[0n,"NODE_NETWORK"],[2n,"NODE_BLOOM"],[3n,"NODE_WITNESS"],[6n,"NODE_COMPACT_FILTERS"],[10n,"NODE_NETWORK_LIMITED"],[11n,"NODE_P2P_V2"],]),a=[];for(let[i,s]of n)t&1n<<i&&a.push(s);return a}function initNodesMap(e){let t=L.map("map",{fullscreenControl:!0,fullscreenControlOptions:{position:"topleft"}}
31).setView([20,0],2);L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png").addTo(t);let n=L.markerClusterGroup();fetch(server+"/node/map?key="+e,{headers:{Accept:"application/json"}}).then(e=>e.json()).then(e=>{e.forEach(e=>{let t=L.marker([parseFloat(e.latitude),parseFloat(e.longitude)]);t.bindPopup(`<b>${e.label}</b>`),n.addLayer(t)}),t.addLayer(n)})}function verifymessage(e,t){document.getElementById("notifications").innerHTML="<p><progress></progress> ... please wait ...</p>";var n=new XMLHttpRequest;return n.open("POST",server+"/address/message?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onload=function(){if(200===n.status){var e=JSON.parse(n.responseText);e.error?document.getElementById("notifications").innerHTML='<div class="alert alert-danger mb-0" role="alert" style="word-break:break-word">Error: '+e.error+"</div>":e.verified?document.getElementById("notifications").innerHTML='<div class="alert alert-success mb-0" role="alert" style="word-break:break-word">✅ Signature is valid. The message was signed by the owner of this Bitcoin address.</div>':document.getElementById("notifications").innerHTML='<div class="alert alert-danger mb-0" role="alert" style="word-break:break-word">❌ Invalid signature. The message was NOT signed by this Bitcoin address.</div>'}},n.send(JSON.stringify({address:e.address.value,signature:e.signature.value,message:e.message.value})),!1}function validateaddress(e,t){document.getElementById("notifications").innerHTML="<p><progress></progress> ... please wait ...</p>";var n=new XMLHttpRequest;return n.open("GET",server+"/address/validate/"+e+"?key="+t,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState){var t=JSON.parse(n.responseText);if(400!=n.status){var a="";if(t.isvalid)a='<p class="h5 mb-3">✅ Valid Address</p>',t.hasOwnProperty("scriptPubKey")&&(a+='<p class="mb-1"><b>Output Script</b>: '+t.scriptPubKey+"</p>"),t.hasOwnProperty("isscript")&&(a+='<p class="mb-1"><b>Is Script</b>: '+(t.isscript?"Yes":"No")+"</p>"),t.hasOwnProperty("iswitness")&&(a+='<p class="mb-1"><b>SegWit Address</b>: '+(t.iswitness?"Yes":"No")+"</p>"),t.hasOwnProperty("witness_version")&&(a+='<p class="mb-1"><b>SegWit Version</b>: '+t.witness_version+(1==t.witness_version?" (Taproot)":"")+"</p>"),t.hasOwnProperty("witness_program")&&(a+='<p class="mb-1"><b>SegWit Program</b>: '+t.witness_program+"</p>"),a+='<p class="mb-0"><a href="/'+e+'" class="btn btn-outline-success mt-2">Check Balance and Transactions</a></p>',document.getElementById("notifications").innerHTML='<div class="alert alert-success mt-4 mb-0" role="alert" style="word-break:break-word">'+a+"</div>";else{if(a='<p class="h5 mb-3">❌ Invalid Address</p>',e.trim()!=e)a+='<p class="mb-1"><b>Warning</b>: Whitespace characters before or after the address!</p>';else if(t.hasOwnProperty("error_locations")&&t.error_locations.length>=1){let i=t.error_locations,s=e.split("");for(let o=i.length-1;o>=0;o--){let r=i[o];s[r]=`<b><u>${s[r]}</u></b>`}a+='<p class="mb-1"><b>Mismatched characters</b>: '+s.join("")+"</p>"}t.hasOwnProperty("error")&&(a+='<p class="mb-0"><b>Error</b>: '+t.error+"</p>"),document.getElementById("notifications").innerHTML='<div class="alert alert-danger mt-4 mb-0" role="alert" style="word-break:break-word">'+a+"</div>"}}else document.getElementById("notifications").innerHTML='<div class="alert alert-danger mt-4 mb-0" role="alert" style="word-break:break-word">Error: '+t.error+"</div>"}},n.send(),!1}

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.