{"sources":{"AgentGoats.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\n/// @title Agent Goats - 2,222 fully on-chain pixel goats for Binance .ai agents\ninterface IERC721Bal { function balanceOf(address) external view returns (uint256); }\ninterface IReceiver { function onERC721Received(address,address,uint256,bytes calldata) external returns (bytes4); }\n\ncontract AgentGoats {\n    string public constant name = \"Agent Goats\";\n    string public constant symbol = \"AGOAT\";\n    uint256 public constant MAX_SUPPLY = 2222;\n    uint256 public constant FREE_SUPPLY = 1111;\n    uint256 public constant MAX_PER_WALLET = 5;\n    uint96 public constant ROYALTY_BPS = 500;\n    IERC721Bal public constant AGENT_ID = IERC721Bal(0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F);\n    string private constant DESC = \"Agent Goats are 2,222 pixel goats living 100% on BNB Chain - every pixel is drawn by the smart contract, no IPFS, nothing can rug the art. Only wallets holding a Binance .ai Agent ID can mint. Traits include Laser Eyes, Galaxy and Gold fur, Wizard Hats, Crowns and BTC collars. First mint free for the first 1,111 agents.\";\n\n    address public owner;\n    address public immutable payout;\n    uint256 public price = 0.0002 ether;\n    bool public mintOpen = true;\n    uint256 public totalSupply;\n    uint256 public freeClaimed;\n\n    mapping(uint256 => address) private _owners;\n    mapping(address => uint256) private _balances;\n    mapping(uint256 => address) public getApproved;\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\n    mapping(address => uint256) public mintedBy;\n    mapping(uint256 => uint256) private _seed;\n\n    event Transfer(address indexed from, address indexed to, uint256 indexed id);\n    event Approval(address indexed o, address indexed s, uint256 indexed id);\n    event ApprovalForAll(address indexed o, address indexed op, bool ok);\n    event OwnershipTransferred(address indexed prev, address indexed next);\n\n    constructor(address _owner, address _payout) {\n        owner = _owner; payout = _payout;\n        emit OwnershipTransferred(address(0), _owner);\n    }\n\n    modifier onlyOwner() { require(msg.sender == owner, \"owner\"); _; }\n\n    // ---------------- mint ----------------\n    function cost(address who, uint256 qty) public view returns (uint256) {\n        if (qty == 0) return 0;\n        bool free = mintedBy[who] == 0 && freeClaimed < FREE_SUPPLY;\n        return price * (free ? qty - 1 : qty);\n    }\n\n    function mint(uint256 qty) external payable {\n        require(mintOpen, \"closed\");\n        require(qty > 0 && mintedBy[msg.sender] + qty <= MAX_PER_WALLET, \"limit\");\n        require(totalSupply + qty <= MAX_SUPPLY, \"sold out\");\n        require(AGENT_ID.balanceOf(msg.sender) > 0, \"need .ai Agent ID\");\n        uint256 c = cost(msg.sender, qty);\n        require(msg.value >= c, \"price\");\n        if (mintedBy[msg.sender] == 0 && freeClaimed < FREE_SUPPLY) freeClaimed++;\n        mintedBy[msg.sender] += qty;\n        for (uint256 i; i < qty; i++) {\n            uint256 id = ++totalSupply;\n            _seed[id] = uint256(keccak256(abi.encode(id, msg.sender, block.prevrandao, block.timestamp)));\n            _owners[id] = msg.sender;\n            _balances[msg.sender]++;\n            emit Transfer(address(0), msg.sender, id);\n        }\n        if (msg.value > c) payable(msg.sender).transfer(msg.value - c);\n    }\n\n    function withdraw() external { payable(payout).transfer(address(this).balance); }\n    function setPrice(uint256 p) external onlyOwner { price = p; }\n    function setMintOpen(bool o) external onlyOwner { mintOpen = o; }\n    function transferOwnership(address n) external onlyOwner { emit OwnershipTransferred(owner, n); owner = n; }\n\n    // ---------------- ERC721 ----------------\n    function balanceOf(address a) external view returns (uint256) { require(a != address(0)); return _balances[a]; }\n    function ownerOf(uint256 id) public view returns (address o) { o = _owners[id]; require(o != address(0), \"none\"); }\n    function approve(address s, uint256 id) external {\n        address o = ownerOf(id);\n        require(msg.sender == o || isApprovedForAll[o][msg.sender], \"auth\");\n        getApproved[id] = s; emit Approval(o, s, id);\n    }\n    function setApprovalForAll(address op, bool ok) external { isApprovedForAll[msg.sender][op] = ok; emit ApprovalForAll(msg.sender, op, ok); }\n    function transferFrom(address f, address t, uint256 id) public {\n        require(f == ownerOf(id), \"from\");\n        require(t != address(0), \"to\");\n        require(msg.sender == f || isApprovedForAll[f][msg.sender] || msg.sender == getApproved[id], \"auth\");\n        _balances[f]--; _balances[t]++; _owners[id] = t; delete getApproved[id];\n        emit Transfer(f, t, id);\n    }\n    function safeTransferFrom(address f, address t, uint256 id) external { safeTransferFrom(f, t, id, \"\"); }\n    function safeTransferFrom(address f, address t, uint256 id, bytes memory d) public {\n        transferFrom(f, t, id);\n        if (t.code.length > 0) require(IReceiver(t).onERC721Received(msg.sender, f, id, d) == IReceiver.onERC721Received.selector, \"recv\");\n    }\n    function supportsInterface(bytes4 i) external pure returns (bool) {\n        return i == 0x01ffc9a7 || i == 0x80ac58cd || i == 0x5b5e139f || i == 0x2a55205a;\n    }\n    function royaltyInfo(uint256, uint256 sale) external view returns (address, uint256) { return (payout, sale * ROYALTY_BPS / 10000); }\n\n    // ---------------- traits ----------------\n    function _pick(uint256 r, uint8[8] memory cum, uint256 n) private pure returns (uint256) {\n        r = (r & 0xffff) % 100;\n        for (uint256 i; i < n; i++) if (r < cum[i]) return i;\n        return n - 1;\n    }\n    function _traits(uint256 s) private pure returns (uint256[7] memory t) {\n        t[0] = (s & 0xff) % 8;                                                   // background\n        t[1] = _pick(s >> 8, [uint8(20), 38, 54, 68, 80, 90, 97, 100], 8);       // fur\n        t[2] = _pick(s >> 24, [uint8(40), 65, 82, 100, 100, 100, 100, 100], 4);  // pattern\n        t[3] = _pick(s >> 40, [uint8(24), 44, 58, 70, 81, 90, 96, 100], 8);      // eyes\n        t[4] = _pick(s >> 56, [uint8(30), 44, 57, 69, 80, 88, 94, 100], 8);      // headwear\n        t[5] = _pick(s >> 72, [uint8(32), 56, 76, 90, 100, 100, 100, 100], 5);   // mouth\n        t[6] = _pick(s >> 88, [uint8(45), 70, 84, 95, 100, 100, 100, 100], 5);   // collar\n    }\n    function _bgC(uint256 i) private pure returns (string memory) {\n        return [\"#F6C1C7\",\"#F0B90B\",\"#1E2026\",\"#8EC5E8\",\"#9ED9A0\",\"#B9A2E8\",\"#F5E6CC\",\"#E26D5C\"][i];\n    }\n    function _furC(uint256 i) private pure returns (string memory) {\n        return [\"#F4F4F4\",\"#9AA3AD\",\"#3A3A3A\",\"#8D5524\",\"#E8C9A0\",\"#D8C3A5\",\"#F0B90B\",\"#5B3FA8\"][i];\n    }\n    function _bgN(uint256 i) private pure returns (string memory) {\n        return [\"Pink\",\"BNB Yellow\",\"Night\",\"Sky\",\"Mint\",\"Lavender\",\"Cream\",\"Sunset\"][i];\n    }\n    function _furN(uint256 i) private pure returns (string memory) {\n        return [\"White\",\"Grey\",\"Black\",\"Brown\",\"Cream\",\"Tan\",\"Gold\",\"Galaxy\"][i];\n    }\n    function _patN(uint256 i) private pure returns (string memory) { return [\"None\",\"Blaze\",\"Spots\",\"Mask\"][i]; }\n    function _eyesN(uint256 i) private pure returns (string memory) {\n        return [\"Goat\",\"Blue\",\"Sleepy\",\"Shades\",\"Heart Eyes\",\"BNB Eyes\",\"Laser Eyes\",\"Diamond Eyes\"][i];\n    }\n    function _headN(uint256 i) private pure returns (string memory) {\n        return [\"None\",\"Cap\",\"Beanie\",\"Bow\",\"Headphones\",\"Halo\",\"Wizard Hat\",\"Crown\"][i];\n    }\n    function _mouthN(uint256 i) private pure returns (string memory) { return [\"Smile\",\"Tongue\",\"Pipe\",\"Gold Grill\",\"Big Beard\"][i]; }\n    function _collarN(uint256 i) private pure returns (string memory) {\n        return [\"None\",\"Bell Collar\",\"Gold Chain\",\"BTC Chain\",\"Diamond Chain\"][i];\n    }\n\n    // ---------------- art ----------------\n    function _base(string memory f) private pure returns (string memory) {\n        return string.concat(\n            string.concat('<rect x=\"1\" y=\"1\" width=\"4\" height=\"5\" fill=\"#111\"/>', '<rect x=\"19\" y=\"1\" width=\"4\" height=\"5\" fill=\"#111\"/>', '<rect x=\"2\" y=\"2\" width=\"2\" height=\"3\" fill=\"#E8DCC8\"/>', '<rect x=\"20\" y=\"2\" width=\"2\" height=\"3\" fill=\"#E8DCC8\"/>'),\n            string.concat('<rect x=\"1\" y=\"8\" width=\"3\" height=\"3\" fill=\"#111\"/>', '<rect x=\"20\" y=\"8\" width=\"3\" height=\"3\" fill=\"#111\"/>', string.concat('<rect x=\"2\" y=\"9\" width=\"1\" height=\"1\" fill=\"', f, '\"/>'), string.concat('<rect x=\"21\" y=\"9\" width=\"1\" height=\"1\" fill=\"', f, '\"/>')),\n            string.concat('<rect x=\"4\" y=\"5\" width=\"16\" height=\"15\" fill=\"#111\"/>', string.concat('<rect x=\"5\" y=\"6\" width=\"14\" height=\"13\" fill=\"', f, '\"/>')),\n            string.concat('<rect x=\"10\" y=\"20\" width=\"4\" height=\"1\" fill=\"#111\"/>', '<rect x=\"11\" y=\"20\" width=\"2\" height=\"2\" fill=\"#F4F4F4\"/>')\n        );\n    }\n    function _pattern(uint256 k) private pure returns (string memory) {\n        if (k == 0) return \"\";\n        if (k == 1) return string.concat('<g fill-opacity=\".5\">', '<rect x=\"11\" y=\"6\" width=\"2\" height=\"5\" fill=\"#FFFFFF\"/>', '</g>');\n        if (k == 2) return string.concat('<g fill-opacity=\".25\">', '<rect x=\"6\" y=\"8\" width=\"2\" height=\"2\" fill=\"#000\"/>', '<rect x=\"16\" y=\"15\" width=\"2\" height=\"2\" fill=\"#000\"/>', '<rect x=\"15\" y=\"8\" width=\"1\" height=\"1\" fill=\"#000\"/>', '<rect x=\"7\" y=\"16\" width=\"1\" height=\"1\" fill=\"#000\"/>', '</g>');\n        return string.concat('<g fill-opacity=\".25\">', '<rect x=\"5\" y=\"8\" width=\"6\" height=\"6\" fill=\"#000\"/>', '<rect x=\"13\" y=\"8\" width=\"6\" height=\"6\" fill=\"#000\"/>', '</g>');\n    }\n    function _eyes(uint256 k) private pure returns (string memory) {\n        if (k == 0) return string.concat('<rect x=\"7\" y=\"10\" width=\"3\" height=\"2\" fill=\"#E8A33D\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"2\" fill=\"#E8A33D\"/>', '<rect x=\"7\" y=\"10\" width=\"3\" height=\"1\" fill=\"#111\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"1\" fill=\"#111\"/>');\n        if (k == 1) return string.concat('<rect x=\"7\" y=\"10\" width=\"3\" height=\"2\" fill=\"#4FB3FF\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"2\" fill=\"#4FB3FF\"/>', '<rect x=\"7\" y=\"10\" width=\"3\" height=\"1\" fill=\"#111\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"1\" fill=\"#111\"/>');\n        if (k == 2) return string.concat('<rect x=\"7\" y=\"11\" width=\"3\" height=\"1\" fill=\"#111\"/>', '<rect x=\"14\" y=\"11\" width=\"3\" height=\"1\" fill=\"#111\"/>');\n        if (k == 3) return string.concat('<rect x=\"6\" y=\"10\" width=\"12\" height=\"1\" fill=\"#111\"/>', '<rect x=\"6\" y=\"11\" width=\"5\" height=\"1\" fill=\"#111\"/>', '<rect x=\"13\" y=\"11\" width=\"5\" height=\"1\" fill=\"#111\"/>');\n        if (k == 4) return string.concat('<rect x=\"7\" y=\"10\" width=\"1\" height=\"1\" fill=\"#E63946\"/>', '<rect x=\"9\" y=\"10\" width=\"1\" height=\"1\" fill=\"#E63946\"/>', '<rect x=\"7\" y=\"11\" width=\"3\" height=\"1\" fill=\"#E63946\"/>', '<rect x=\"14\" y=\"10\" width=\"1\" height=\"1\" fill=\"#E63946\"/>', '<rect x=\"16\" y=\"10\" width=\"1\" height=\"1\" fill=\"#E63946\"/>', '<rect x=\"14\" y=\"11\" width=\"3\" height=\"1\" fill=\"#E63946\"/>');\n        if (k == 5) return string.concat('<rect x=\"7\" y=\"10\" width=\"3\" height=\"2\" fill=\"#F0B90B\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"2\" fill=\"#F0B90B\"/>', '<rect x=\"7\" y=\"10\" width=\"3\" height=\"1\" fill=\"#111\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"1\" fill=\"#111\"/>');\n        if (k == 6) return string.concat('<rect x=\"7\" y=\"10\" width=\"3\" height=\"2\" fill=\"#FF3B30\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"2\" fill=\"#FF3B30\"/>', '<rect x=\"0\" y=\"10\" width=\"7\" height=\"1\" fill=\"#FF3B30\"/>', '<rect x=\"17\" y=\"10\" width=\"7\" height=\"1\" fill=\"#FF3B30\"/>');\n        return string.concat('<rect x=\"7\" y=\"10\" width=\"3\" height=\"2\" fill=\"#9BE7FF\"/>', '<rect x=\"14\" y=\"10\" width=\"3\" height=\"2\" fill=\"#9BE7FF\"/>', '<rect x=\"7\" y=\"10\" width=\"1\" height=\"1\" fill=\"#FFFFFF\"/>', '<rect x=\"14\" y=\"10\" width=\"1\" height=\"1\" fill=\"#FFFFFF\"/>');\n    }\n    function _face() private pure returns (string memory) {\n        return string.concat('<rect x=\"9\" y=\"14\" width=\"6\" height=\"4\" fill=\"#FFFFFF\" fill-opacity=\".35\"/>', '<rect x=\"10\" y=\"15\" width=\"1\" height=\"1\" fill=\"#111\"/>', '<rect x=\"13\" y=\"15\" width=\"1\" height=\"1\" fill=\"#111\"/>');\n    }\n    function _mouth(uint256 k) private pure returns (string memory) {\n        string memory m = string.concat('<rect x=\"11\" y=\"17\" width=\"2\" height=\"1\" fill=\"#111\"/>');\n        if (k == 0) return m;\n        if (k == 1) return string.concat(m, '<rect x=\"11\" y=\"18\" width=\"2\" height=\"1\" fill=\"#F25F8C\"/>');\n        if (k == 2) return string.concat(m, '<rect x=\"13\" y=\"18\" width=\"4\" height=\"1\" fill=\"#6B3E26\"/>', '<rect x=\"16\" y=\"16\" width=\"2\" height=\"2\" fill=\"#6B3E26\"/>');\n        if (k == 3) return string.concat('<rect x=\"10\" y=\"17\" width=\"4\" height=\"1\" fill=\"#FFD700\"/>');\n        return string.concat(m, '<rect x=\"10\" y=\"20\" width=\"4\" height=\"1\" fill=\"#F4F4F4\"/>', '<rect x=\"10\" y=\"21\" width=\"4\" height=\"1\" fill=\"#F4F4F4\"/>', '<rect x=\"11\" y=\"22\" width=\"2\" height=\"1\" fill=\"#F4F4F4\"/>');\n    }\n    function _head(uint256 k, string memory acc) private pure returns (string memory) {\n        if (k == 0) return \"\";\n        if (k == 1) return string.concat(string.concat('<rect x=\"5\" y=\"4\" width=\"14\" height=\"3\" fill=\"', acc, '\"/>'), string.concat('<rect x=\"16\" y=\"6\" width=\"6\" height=\"1\" fill=\"', acc, '\"/>'), '<rect x=\"5\" y=\"7\" width=\"14\" height=\"1\" fill=\"#111\"/>');\n        if (k == 2) return string.concat(string.concat('<rect x=\"5\" y=\"3\" width=\"14\" height=\"4\" fill=\"', acc, '\"/>'), '<rect x=\"5\" y=\"6\" width=\"14\" height=\"1\" fill=\"#111\"/>', '<rect x=\"11\" y=\"1\" width=\"2\" height=\"2\" fill=\"#fff\"/>');\n        if (k == 3) return string.concat('<rect x=\"14\" y=\"5\" width=\"2\" height=\"3\" fill=\"#E63946\"/>', '<rect x=\"18\" y=\"5\" width=\"2\" height=\"3\" fill=\"#E63946\"/>', '<rect x=\"16\" y=\"6\" width=\"2\" height=\"1\" fill=\"#B0202C\"/>');\n        if (k == 4) return string.concat('<rect x=\"5\" y=\"3\" width=\"14\" height=\"1\" fill=\"#111\"/>', string.concat('<rect x=\"1\" y=\"9\" width=\"3\" height=\"6\" fill=\"', acc, '\"/>'), string.concat('<rect x=\"20\" y=\"9\" width=\"3\" height=\"6\" fill=\"', acc, '\"/>'));\n        if (k == 5) return '<rect x=\"8\" y=\"0\" width=\"8\" height=\"1\" fill=\"#FFE066\"/>';\n        if (k == 6) return string.concat('<rect x=\"10\" y=\"0\" width=\"4\" height=\"2\" fill=\"#3B2A8C\"/>', '<rect x=\"8\" y=\"2\" width=\"8\" height=\"2\" fill=\"#3B2A8C\"/>', '<rect x=\"5\" y=\"4\" width=\"14\" height=\"2\" fill=\"#3B2A8C\"/>', '<rect x=\"11\" y=\"2\" width=\"1\" height=\"1\" fill=\"#FFE066\"/>', '<rect x=\"14\" y=\"4\" width=\"1\" height=\"1\" fill=\"#FFE066\"/>');\n        return string.concat('<rect x=\"6\" y=\"1\" width=\"12\" height=\"4\" fill=\"#111\"/>', '<rect x=\"7\" y=\"2\" width=\"10\" height=\"2\" fill=\"#FFD700\"/>', '<rect x=\"7\" y=\"0\" width=\"2\" height=\"2\" fill=\"#FFD700\"/>', '<rect x=\"11\" y=\"0\" width=\"2\" height=\"2\" fill=\"#FFD700\"/>', '<rect x=\"15\" y=\"0\" width=\"2\" height=\"2\" fill=\"#FFD700\"/>', '<rect x=\"11\" y=\"2\" width=\"2\" height=\"1\" fill=\"#E63946\"/>');\n    }\n    function _collar(uint256 k) private pure returns (string memory) {\n        if (k == 0) return \"\";\n        if (k == 1) return string.concat('<rect x=\"6\" y=\"19\" width=\"12\" height=\"1\" fill=\"#E63946\"/>', '<rect x=\"11\" y=\"20\" width=\"2\" height=\"2\" fill=\"#FFD700\"/>');\n        if (k == 2) return '<rect x=\"7\" y=\"20\" width=\"10\" height=\"1\" fill=\"#F0B90B\"/>';\n        if (k == 3) return string.concat('<rect x=\"7\" y=\"20\" width=\"10\" height=\"1\" fill=\"#C0C0C0\"/>', '<rect x=\"11\" y=\"21\" width=\"2\" height=\"2\" fill=\"#F7931A\"/>');\n        return string.concat('<rect x=\"7\" y=\"20\" width=\"10\" height=\"1\" fill=\"#9BE7FF\"/>', '<rect x=\"11\" y=\"21\" width=\"2\" height=\"1\" fill=\"#fff\"/>');\n    }\n    function _svg(uint256 s) private pure returns (string memory) {\n        return _draw(_traits(s), (s >> 104) % 8);\n    }\n    function _draw(uint256[7] memory t, uint256 a) private pure returns (string memory) {\n        string memory acc = [\"#E63946\",\"#2F80ED\",\"#111111\",\"#F0B90B\",\"#7B2CBF\",\"#2A9D8F\",\"#F4A261\",\"#FFFFFF\"][a];\n        return string.concat(\n            '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" shape-rendering=\"crispEdges\">',\n            string.concat('<rect x=\"0\" y=\"0\" width=\"24\" height=\"24\" fill=\"', _bgC(t[0]), '\"/>'), _base(_furC(t[1])), _pattern(t[2]),\n            string.concat(_face(), _eyes(t[3]), _mouth(t[5]), _collar(t[6]), _head(t[4], acc)),\n            '</svg>'\n        );\n    }\n    function tokenURI(uint256 id) external view returns (string memory) {\n        ownerOf(id);\n        uint256 s = _seed[id];\n        uint256[7] memory t = _traits(s);\n        string memory attrs = string.concat(\n            string.concat('[{\"trait_type\":\"Background\",\"value\":\"', _bgN(t[0]), '\"},{\"trait_type\":\"Fur\",\"value\":\"', _furN(t[1]), '\"},{\"trait_type\":\"Pattern\",\"value\":\"', _patN(t[2])),\n            string.concat('\"},{\"trait_type\":\"Eyes\",\"value\":\"', _eyesN(t[3]), '\"},{\"trait_type\":\"Headwear\",\"value\":\"', _headN(t[4])),\n            string.concat('\"},{\"trait_type\":\"Mouth\",\"value\":\"', _mouthN(t[5]), '\"},{\"trait_type\":\"Collar\",\"value\":\"', _collarN(t[6]), '\"}]')\n        );\n        string memory json = string.concat(\n            '{\"name\":\"Agent Goat #', _str(id), '\",\"description\":\"', DESC,\n            '\",\"image\":\"data:image/svg+xml;base64,', _b64(bytes(_svg(s))), '\",\"attributes\":', attrs, '}'\n        );\n        return string.concat(\"data:application/json;base64,\", _b64(bytes(json)));\n    }\n    function contractURI() external view returns (string memory) {\n        string memory json = string.concat(\n            '{\"name\":\"Agent Goats\",\"description\":\"', DESC,\n            '\",\"image\":\"data:image/svg+xml;base64,', _b64(bytes(_draw([uint256(1), 6, 0, 6, 7, 4, 2], 0))),\n            '\",\"seller_fee_basis_points\":500,\"fee_recipient\":\"', _hex(payout), '\"}'\n        );\n        return string.concat(\"data:application/json;base64,\", _b64(bytes(json)));\n    }\n\n    // ---------------- utils ----------------\n    function _hex(address a) private pure returns (string memory) {\n        bytes memory h = \"0123456789abcdef\"; bytes memory r = new bytes(42);\n        r[0] = \"0\"; r[1] = \"x\";\n        for (uint256 i; i < 20; i++) {\n            uint8 b = uint8(uint160(a) >> (8 * (19 - i)));\n            r[2 + i * 2] = h[b >> 4]; r[3 + i * 2] = h[b & 15];\n        }\n        return string(r);\n    }\n    function _str(uint256 v) private pure returns (string memory) {\n        if (v == 0) return \"0\";\n        uint256 l; for (uint256 t = v; t > 0; t /= 10) l++;\n        bytes memory b = new bytes(l);\n        while (v > 0) { b[--l] = bytes1(uint8(48 + v % 10)); v /= 10; }\n        return string(b);\n    }\n    function _b64(bytes memory data) private pure returns (string memory) {\n        bytes memory T = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n        uint256 len = data.length; if (len == 0) return \"\";\n        bytes memory r = new bytes(4 * ((len + 2) / 3));\n        uint256 j;\n        for (uint256 i; i < len; i += 3) {\n            uint256 a = uint8(data[i]);\n            uint256 b = i + 1 < len ? uint8(data[i + 1]) : 0;\n            uint256 c = i + 2 < len ? uint8(data[i + 2]) : 0;\n            uint256 n = (a << 16) | (b << 8) | c;\n            r[j++] = T[(n >> 18) & 63]; r[j++] = T[(n >> 12) & 63];\n            r[j++] = i + 1 < len ? T[(n >> 6) & 63] : bytes1(\"=\");\n            r[j++] = i + 2 < len ? T[n & 63] : bytes1(\"=\");\n        }\n        return string(r);\n    }\n}\n"}},"abi":[{"type":"constructor","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_payout","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"name":"Approval","type":"event","inputs":[{"name":"o","type":"address","indexed":true,"internalType":"address"},{"name":"s","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"ApprovalForAll","type":"event","inputs":[{"name":"o","type":"address","indexed":true,"internalType":"address"},{"name":"op","type":"address","indexed":true,"internalType":"address"},{"name":"ok","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"prev","type":"address","indexed":true,"internalType":"address"},{"name":"next","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"AGENT_ID","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC721Bal"}],"stateMutability":"view"},{"name":"FREE_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_PER_WALLET","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"ROYALTY_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint96","internalType":"uint96"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"s","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"a","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"contractURI","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"cost","type":"function","inputs":[{"name":"who","type":"address","internalType":"address"},{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"freeClaimed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"getApproved","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"isApprovedForAll","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"mint","type":"function","inputs":[{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"name":"mintOpen","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"mintedBy","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"ownerOf","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"o","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"payout","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"price","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"royaltyInfo","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"sale","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"safeTransferFrom","type":"function","inputs":[{"name":"f","type":"address","internalType":"address"},{"name":"t","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"safeTransferFrom","type":"function","inputs":[{"name":"f","type":"address","internalType":"address"},{"name":"t","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"d","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setApprovalForAll","type":"function","inputs":[{"name":"op","type":"address","internalType":"address"},{"name":"ok","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setMintOpen","type":"function","inputs":[{"name":"o","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setPrice","type":"function","inputs":[{"name":"p","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"supportsInterface","type":"function","inputs":[{"name":"i","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"tokenURI","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transferFrom","type":"function","inputs":[{"name":"f","type":"address","internalType":"address"},{"name":"t","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"transferOwnership","type":"function","inputs":[{"name":"n","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"withdraw","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"}],"matchId":"58421313","creationMatch":"match","runtimeMatch":"match","verifiedAt":"2026-11-04T22:59:39Z","match":"match","chainId":"56","address":"0x0E9E0a3B46dC0d36A1Ab64f553Dd8A0693E6aAa6"}