Contract 0x7Bd29408f11D2bFC23c34f18275bBf23bB716Bc7 9

 

Contract Overview

Meebits: ⚇ Token
Balance:
226.‍068021 Ether

EtherValue:
$426,617.48 (@ $1,887.12/ETH)

Token:
Txn Hash
Method
Block
From
To
Value
0x6afa4fce52d6f728e162def579ffd4c9d85ac5be1c0d1288a44822ccf69737d4Set Approval For...153221842022-08-11 18:11:3547 mins ago0xe6c6e985b8624c2e7d4c27c58f9cd82ee1751f9e IN  Meebits: ⚇ Token0 Ether0.‍00108857 23.‍62555977
0x83da670d64d0f00349c0ad43b5b55e520af84b7c70049ef7d5ae2bbef87a35bdSet Approval For...153217492022-08-11 16:26:552 hrs 32 mins ago0x36e417e5adbc0da95d1e176ea719634c2646bcf9 IN  Meebits: ⚇ Token0 Ether0.‍00133414 28.‍91004607
0xc9aa61c43d06e21b1cfcee48904e1a72f7a7683b8ce3c1644e33a53982c0a005Set Approval For...153217152022-08-11 16:19:072 hrs 40 mins agoENS Name dymorega.eth IN  Meebits: ⚇ Token0 Ether0.‍00201048 43.‍63411549
0x7d824fadb88e4e9c33badbeccc641c7e6deef848c96ce214b89b4e70ee14ef32Set Approval For...153213712022-08-11 14:59:114 hrs agoENS Name mrussl.eth IN  Meebits: ⚇ Token0 Ether0.‍00104377 22.‍65334056
0xb8a7d574eef341daa34212773adacd847eb032e1a58be4924308fd0616f5eaf7Set Approval For...153212052022-08-11 14:23:444 hrs 35 mins ago0x9bd31de8ac61c4394826a6a910cfc8d920bd2fe7 IN  Meebits: ⚇ Token0 Ether0.‍00203631 44.‍19471362
0x22dfbd56080161c8d9e2fa2a0656c1201ed870acbf57a9caf62514dc95f487d7Transfer From153210742022-08-11 13:50:375 hrs 8 mins ago0x792f28e21912eea07c283b419405efc835279c74 IN  Meebits: ⚇ Token0 Ether0.‍00201237 24.‍63824305
0x3893b0a47e2c67749264dfa0e082c735d88b2c53dd5d1fe0c738e8d294fd3d77Set Approval For...153209942022-08-11 13:33:275 hrs 25 mins ago0xdaa8a78089ef0098a14af2148a8768cf7d104640 IN  Meebits: ⚇ Token0 Ether0.‍00182768 39.‍59454029
0xd0646276914792da32facc1922624e4bb31638c6046fd795fabd556180273a19Set Approval For...153208532022-08-11 12:58:536 hrs ago0x61f51c41ccfe60f9427254257e785e7a5b72d21a IN  Meebits: ⚇ Token0 Ether0.‍00075105 16.‍27493029
0xd20dd94fa79824aa2f7b6c1d901e7264fab5a9a50c4d85686d532d0aedea32eaSet Approval For...153203142022-08-11 10:59:208 hrs ago0x85a6fc05975818061826106c7660b60a1e78a23d IN  Meebits: ⚇ Token0 Ether0.‍00058286 12.‍63034115
0xed4c5fce6d16878adb79b2d5eb56311b6193a056f816915b4c0ddd54a63b9ec1Set Approval For...153203022022-08-11 10:56:318 hrs 2 mins ago0x491f16749918bc0c30d802a5b9b55f57dcaaa45d IN  Meebits: ⚇ Token0 Ether0.‍00057905 12.‍54782091
0x3869f3df4fd385902ce32845aca6b115855660ec605cd50df24608b580ce3f37Set Approval For...153202852022-08-11 10:52:278 hrs 6 mins agoENS Name soulllvision.eth IN  Meebits: ⚇ Token0 Ether0.‍0003905 16.‍10468038
0xefc633e768adf2c838e8f502d3345c313163df412ac07498565964a3d3ca13eaSet Approval For...153201632022-08-11 10:24:358 hrs 34 mins ago0x396ef3d57c2803d818a506f54e6a1791385ba100 IN  Meebits: ⚇ Token0 Ether0.‍00060569 13.‍14564399
0xb2b612a6a217b2f64a37ab57a2bacb6cda678c05a2d1d3c992c3da935d6e2126Set Approval For...153201522022-08-11 10:21:178 hrs 38 mins ago0x18699e1f703ae77359417fdce96fe99635b3a67a IN  Meebits: ⚇ Token0 Ether0.‍00051415 11.‍14132931
0xe76ad33f162faf4abdf60de75c5a246ae2f3afd4e13972866dbfb5370d328a0fSet Approval For...153201442022-08-11 10:19:328 hrs 39 mins ago0xe40c91caf8979c1c1f6033fad4a1a15deccb895b IN  Meebits: ⚇ Token0 Ether0.‍0004571 9.‍90530375
0xde7158a60836cc0cbd708ba391e9fed247de0032e4db3bafa27258df862c7ef0Set Approval For...153199092022-08-11 9:29:299 hrs 29 mins ago0x9cdc4389f4d5b15fa7e7939ac1fdb594ef2fdab1 IN  Meebits: ⚇ Token0 Ether0.‍00075112 16.‍27641142
0xf6ab5578fe5d41bafcc08bb5799b9d75c606650c9920ac318224b590a48088c9Set Approval For...153198622022-08-11 9:16:109 hrs 43 mins ago0x66652c91203c126ae8347fed1216fcfeadeb5228 IN  Meebits: ⚇ Token0 Ether0.‍00072829 15.‍78166406
0x8e69bb182187035455f60d7890828240d8317768904c3e79ba827149603380a8Set Approval For...153198522022-08-11 9:13:549 hrs 45 mins ago0xa8f6941d391efc885bd26e6ad6ef83ca4b6e09ee IN  Meebits: ⚇ Token0 Ether0.‍00087423 18.‍9442092
0x8f8ae2d263ac3803f722668ca27eb6713c64f91159b2bb53aafae7f98bfa1b94Set Approval For...153197872022-08-11 8:55:5610 hrs 3 mins ago0xa8a5e4a495de460e49e3d33069ba8a1e3eb06fb3 IN  Meebits: ⚇ Token0 Ether0.‍00083511 18.‍091679
0xc8dc054fdce359230e5da817a6be610b481d23bdd03c9edb89153534693909e9Set Approval For...153197862022-08-11 8:55:4410 hrs 3 mins ago0xa8a5e4a495de460e49e3d33069ba8a1e3eb06fb3 IN  Meebits: ⚇ Token0 Ether0.‍00082356 17.‍87408218
0xcfbd8772dcff5b7daf8d634d76927f9d38519cf5b7a347f49ea529c310ac2222Set Approval For...153197812022-08-11 8:55:1810 hrs 4 mins ago0xa8a5e4a495de460e49e3d33069ba8a1e3eb06fb3 IN  Meebits: ⚇ Token0 Ether0.‍00106227 23.‍01880982
0x61a2933584a8ac1e599d843b7b8fc1634d573d601e86a6794af159be3a46912aSet Approval For...153197132022-08-11 8:39:5310 hrs 19 mins ago0x89c064c7362883bc0031c7f28c6af3a2f3e2bb3a IN  Meebits: ⚇ Token0 Ether0.‍00183798 39.‍89018832
0xcb10a9feb344172d0ef3010cc1f1a7276f9ff1ea876cf9e99ad29f68d4f44468Set Approval For...153196082022-08-11 8:18:2510 hrs 40 mins ago0x85159f7ce11e739341f24ef94db447d23a6f2ef2 IN  Meebits: ⚇ Token0 Ether0.‍00075061 16.‍26548619
0x4bf34ba0836304df7c83502855eac6aa9c07b07ad43235e46845a7887d3372b6Set Approval For...153196002022-08-11 8:15:3110 hrs 43 mins ago0x70adace263f13339d453ce89a4537361842423f0 IN  Meebits: ⚇ Token0 Ether0.‍00080401 17.‍42242583
0x0759f6d66436351c2456bb1510f8eaa61ded4e021f4f37e4143ed71aa2649fd5Set Approval For...153195632022-08-11 8:04:2810 hrs 54 mins ago0x2b8351dbb51daeef3e82fa7824bf79a1dc1c1cb1 IN  Meebits: ⚇ Token0 Ether0.‍00070785 15.‍33471428
0x34a542b88a5c46cee75eb2382c2a96c7bf030d6bdea36111f2d89944814e5df1Set Approval For...153193492022-08-11 7:15:1711 hrs 44 mins ago0xb25fe5d21f8093f2291b4ad74ebae041544d73bc IN  Meebits: ⚇ Token0 Ether0.‍00073455 15.‍9174035
[ Download CSV Export 

OVERVIEW

20,000 generated unique 3D characters with a no fee trading marketplace.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x65485518fd924d2db330c145b44e13764fc06fe574f87a7ec9f5328458df30ff152306892022-07-28 11:14:1514 days 7 hrs ago Meebits: ⚇ TokenENS Name hlyz2020.eth0.‍02 Ether
0x95c2c1f56e19097fd7608d78585b4b039114e0cea3dc47a3dcacff0241017c02152284522022-07-28 3:06:4414 days 15 hrs ago Meebits: ⚇ Token0x20c3cc9e8869adc1b7efad187f10969a449653f55 Ether
0xb094743d91d062d062efa1b22dac13c0ecab43396cb9d6ffdd5bd55b5b6d3859151647822022-07-18 5:35:4124 days 13 hrs ago Meebits: ⚇ TokenENS Name hideinbush.eth5.‍25 Ether
0xf1889e39bcc24393aa94458ccbfaab3edecfdc40430db3bcba17597191c054e2151499622022-07-15 22:29:2026 days 20 hrs ago Meebits: ⚇ TokenENS Name 2670.eth5 Ether
0x285e4baf6b9ff8baa358baffff2472ad8962a985b41af30bd0fb15691175571d151470742022-07-15 11:51:5927 days 7 hrs ago Meebits: ⚇ TokenENS Name andyli.eth5 Ether
0x958573823e1bdeae2096b15df85a978a1e3b85c56bea09cecfdbcda5d5253287151429312022-07-14 20:22:2527 days 22 hrs ago Meebits: ⚇ Token0xb70c1a3242e363b4772b83acdc10df94e6c3fb0215.‍95 Ether
0xce9dbf70ba3a1bbf7e7614e6615a7a5533668ac8cfb24453978af485a925356f150512852022-06-30 16:20:2842 days 2 hrs ago Meebits: ⚇ TokenENS Name lookinrare.eth14 Ether
0xf0258ef80342a7662e622262315e4e9b78a2fc24a1de290e2a6c9f025febdc56148793742022-05-31 15:09:0772 days 3 hrs ago Meebits: ⚇ Token0x7c219173f54e3ad9cf02f440639316feff40946f4 Ether
0x498bd41be6e8d1934c599282e70890780d62e15fa8f6900851b94af7630cd71f148792772022-05-31 14:44:4072 days 4 hrs ago Meebits: ⚇ TokenENS Name qavap.eth4 Ether
0xca708223c5c0ab25999492706618ffa16743e465c279248491f62e4471b6874e148792612022-05-31 14:40:2972 days 4 hrs ago Meebits: ⚇ Token0x7c219173f54e3ad9cf02f440639316feff40946f28 Ether
0xea8cbecd8e2839fd70fbce82fb2e7f7047887d76aab1ab952bccbcf6308df200148791032022-05-31 14:05:4972 days 4 hrs ago Meebits: ⚇ Token0x7c219173f54e3ad9cf02f440639316feff40946f14 Ether
0x73e5526080a1531f9dd37b26ce99392b18ce02fc280519583d2e18589cd9ee9a148772022022-05-31 6:29:3872 days 12 hrs ago Meebits: ⚇ TokenENS Name qavap.eth2 Ether
0xedf06bbf93aa0f4da893046cd921149fcae3ceb397e944e2c71fb3419ca02c3b147557372022-05-11 15:49:5492 days 3 hrs ago Meebits: ⚇ Token0x18e278e935f951b6ac017e84c48dac2609f1fd5e90 Ether
0x938e4406b7131577f4bb284bfa2e4d2616ade83358e49192b955a62f7a5f6182147446912022-05-09 21:22:0393 days 21 hrs ago Meebits: ⚇ Token0xeaf5197941d3dea9c8bfb65db61c869910be2df01 Ether
0xdd384a79da83440be0a2c100107a1866cea5301d289b569ea202d20e1ae45408147035692022-05-03 8:22:53100 days 10 hrs ago Meebits: ⚇ Token0x5edca295ffa5736543594173f861e0fdcd41757c1.‍25 Ether
0x273a15b82eaa3908f896769c6b56e46965185854e922a5ba866be191d4fd8477146933732022-05-01 17:49:17102 days 1 hr ago Meebits: ⚇ Token0xc9483ccbd3b020cb52d30fd11b9c1d415e4b2a3b7.‍5 Ether
0x77deff1694f057febef9ef45d69b810a10f6f8f5a6e290f865377cfe0ef49338146862772022-04-30 15:02:28103 days 3 hrs ago Meebits: ⚇ TokenENS Name d0ndraper.eth17 Ether
0x8fe8978d7bd5d6693810d23dfd9aa245fd34a55069a80864b7dfa28756e02962146861612022-04-30 14:36:02103 days 4 hrs ago Meebits: ⚇ Token0x968fa02ec46c8f32807f28455dd4c96212c9c7bf6.‍5 Ether
0xd6375e1ef1b7e1c417293d7b36391ea756df1f6e22c63daeb3d50a58a3dcb4d4146701592022-04-28 2:14:50105 days 16 hrs ago Meebits: ⚇ Token0xb70c1a3242e363b4772b83acdc10df94e6c3fb026.‍6 Ether
0xbb043a3cd35087b8b1acb3e76131859c7998f7539e36b130d97c88286e7a8764146700092022-04-28 1:40:41105 days 17 hrs ago Meebits: ⚇ Token0x3924b7681c6110fcd3628164388c3307f79d10596 Ether
0x8da570d7b514a87784bc11585734aab630039a9c603f8709e4ffa0a80b56d853146668262022-04-27 13:47:13106 days 5 hrs ago Meebits: ⚇ Token0x4204bfff4752e288f886f8fb06ceecb4c813929f7 Ether
0xa819ac1de543d569b84d1f275a001b39747c846d3f6f474199bd79bb9ce171c0146646332022-04-27 5:27:14106 days 13 hrs ago Meebits: ⚇ TokenENS Name d0ndraper.eth12 Ether
0x2abac987d3af285bcd8efcfa9177e010c9ad180df7b8c96e0ba7b6618ac57586146643392022-04-27 4:21:26106 days 14 hrs ago Meebits: ⚇ Token0xa1b3d3efee069d10cc8a2dc537de9c9b2890a9f424 Ether
0x0f413ddf8dddbfa166f5734126934f7ff127c7b3fe8ddc6cb5f4edce0c20ddc4146549402022-04-25 16:51:48108 days 2 hrs ago Meebits: ⚇ Token0x3924b7681c6110fcd3628164388c3307f79d10596 Ether
0xa1aefa47fb06f13f1a4a6993c80db2c75f2159b4f4f7e04d55c64d2c1d92dbbc146535832022-04-25 11:39:07108 days 7 hrs ago Meebits: ⚇ Token0x1669773dfa86a16678c4f8191a25e3289d776b5c6 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Meebits

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-05
*/

pragma solidity 0.7.6;

/**
 *  __  __           _     _ _
 * |  \/  |         | |   (_) |
 * | \  / | ___  ___| |__  _| |_ ___
 * | |\/| |/ _ \/ _ \ '_ \| | __/ __|
 * | |  | |  __/  __/ |_) | | |_\__ \
 * |_|  |_|\___|\___|_.__/|_|\__|___/
 *
 * An NFT project from Larva Labs.
 *
 */
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

/**
 * Minimal interface to Cryptopunks for verifying ownership during Community Grant.
 */
interface Cryptopunks {
    function punkIndexToAddress(uint index) external view returns(address);
}

interface ERC721TokenReceiver
{
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a);
        return c;
    }
}

contract Meebits is IERC721 {

    using SafeMath for uint256;

    /**
     * Event emitted when minting a new NFT. "createdVia" is the index of the Cryptopunk/Autoglyph that was used to mint, or 0 if not applicable.
     */
    event Mint(uint indexed index, address indexed minter, uint createdVia);

    /**
     * Event emitted when a trade is executed.
     */
    event Trade(bytes32 indexed hash, address indexed maker, address taker, uint makerWei, uint[] makerIds, uint takerWei, uint[] takerIds);

    /**
     * Event emitted when ETH is deposited into the contract.
     */
    event Deposit(address indexed account, uint amount);

    /**
     * Event emitted when ETH is withdrawn from the contract.
     */
    event Withdraw(address indexed account, uint amount);

    /**
     * Event emitted when a trade offer is cancelled.
     */
    event OfferCancelled(bytes32 hash);

    /**
     * Event emitted when the public sale begins.
     */
    event SaleBegins();

    /**
     * Event emitted when the community grant period ends.
     */
    event CommunityGrantEnds();

    bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02;

    // IPFS Hash to the NFT content
    string public contentHash = "QmfXYgfX1qNfzQ6NRyFnupniZusasFPMeiWn5aaDnx7YXo";

    uint public constant TOKEN_LIMIT = 20000;
    uint public constant SALE_LIMIT = 9000;

    mapping(bytes4 => bool) internal supportedInterfaces;

    mapping (uint256 => address) internal idToOwner;

    mapping (uint256 => uint256) public creatorNftMints;

    mapping (uint256 => address) internal idToApproval;

    mapping (address => mapping (address => bool)) internal ownerToOperators;

    mapping(address => uint256[]) internal ownerToIds;

    mapping(uint256 => uint256) internal idToOwnerIndex;

    string internal nftName = "Meebits";
    string internal nftSymbol = unicode"⚇";

    uint internal numTokens = 0;
    uint internal numSales = 0;

    // Cryptopunks contract
    address internal punks;

    // Autoglyphs contract
    address internal glyphs;

    address payable internal deployer;
    address payable internal beneficiary;
    bool public communityGrant = true;
    bool public publicSale = false;
    uint private price;
    uint public saleStartTime;
    uint public saleDuration;

    //// Random index assignment
    uint internal nonce = 0;
    uint[TOKEN_LIMIT] internal indices;

    //// Market
    bool public marketPaused;
    bool public contractSealed;
    mapping (address => uint256) public ethBalance;
    mapping (bytes32 => bool) public cancelledOffers;

    modifier onlyDeployer() {
        require(msg.sender == deployer, "Only deployer.");
        _;
    }

    bool private reentrancyLock = false;

    /* Prevent a contract function from being reentrant-called. */
    modifier reentrancyGuard {
        if (reentrancyLock) {
            revert();
        }
        reentrancyLock = true;
        _;
        reentrancyLock = false;
    }

    modifier canOperate(uint256 _tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender], "Cannot operate.");
        _;
    }

    modifier canTransfer(uint256 _tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(
            tokenOwner == msg.sender
            || idToApproval[_tokenId] == msg.sender
            || ownerToOperators[tokenOwner][msg.sender], "Cannot transfer."
        );
        _;
    }

    modifier validNFToken(uint256 _tokenId) {
        require(idToOwner[_tokenId] != address(0), "Invalid token.");
        _;
    }

    constructor(address _punks, address _glyphs, address payable _beneficiary) {
        supportedInterfaces[0x01ffc9a7] = true; // ERC165
        supportedInterfaces[0x80ac58cd] = true; // ERC721
        supportedInterfaces[0x780e9d63] = true; // ERC721 Enumerable
        supportedInterfaces[0x5b5e139f] = true; // ERC721 Metadata
        deployer = msg.sender;
        punks = _punks;
        glyphs = _glyphs;
        beneficiary = _beneficiary;
    }

    function startSale(uint _price, uint _saleDuration) external onlyDeployer {
        require(!publicSale);
        price = _price;
        saleDuration = _saleDuration;
        saleStartTime = block.timestamp;
        publicSale = true;
        emit SaleBegins();
    }

    function endCommunityGrant() external onlyDeployer {
        require(communityGrant);
        communityGrant = false;
        emit CommunityGrantEnds();
    }

    function pauseMarket(bool _paused) external onlyDeployer {
        require(!contractSealed, "Contract sealed.");
        marketPaused = _paused;
    }

    function sealContract() external onlyDeployer {
        contractSealed = true;
    }

    //////////////////////////
    //// ERC 721 and 165  ////
    //////////////////////////

    function isContract(address _addr) internal view returns (bool addressCheck) {
        uint256 size;
        assembly { size := extcodesize(_addr) } // solhint-disable-line
        addressCheck = size > 0;
    }

    function supportsInterface(bytes4 _interfaceID) external view override returns (bool) {
        return supportedInterfaces[_interfaceID];
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata _data) external override {
        _safeTransferFrom(_from, _to, _tokenId, _data);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external override {
        _safeTransferFrom(_from, _to, _tokenId, "");
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) external override canTransfer(_tokenId) validNFToken(_tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(tokenOwner == _from, "Wrong from address.");
        require(_to != address(0), "Cannot send to 0x0.");
        _transfer(_to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) external override canOperate(_tokenId) validNFToken(_tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(_approved != tokenOwner);
        idToApproval[_tokenId] = _approved;
        emit Approval(tokenOwner, _approved, _tokenId);
    }

    function setApprovalForAll(address _operator, bool _approved) external override {
        ownerToOperators[msg.sender][_operator] = _approved;
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    function balanceOf(address _owner) external view override returns (uint256) {
        require(_owner != address(0));
        return _getOwnerNFTCount(_owner);
    }

    function ownerOf(uint256 _tokenId) external view override returns (address _owner) {
        require(idToOwner[_tokenId] != address(0));
        _owner = idToOwner[_tokenId];
    }

    function getApproved(uint256 _tokenId) external view override validNFToken(_tokenId) returns (address) {
        return idToApproval[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) external override view returns (bool) {
        return ownerToOperators[_owner][_operator];
    }

    function _transfer(address _to, uint256 _tokenId) internal {
        address from = idToOwner[_tokenId];
        _clearApproval(_tokenId);

        _removeNFToken(from, _tokenId);
        _addNFToken(_to, _tokenId);

        emit Transfer(from, _to, _tokenId);
    }

    function randomIndex() internal returns (uint) {
        uint totalSize = TOKEN_LIMIT - numTokens;
        uint index = uint(keccak256(abi.encodePacked(nonce, msg.sender, block.difficulty, block.timestamp))) % totalSize;
        uint value = 0;
        if (indices[index] != 0) {
            value = indices[index];
        } else {
            value = index;
        }

        // Move last value to selected position
        if (indices[totalSize - 1] == 0) {
            // Array position not initialized, so use position
            indices[index] = totalSize - 1;
        } else {
            // Array position holds a value so use that
            indices[index] = indices[totalSize - 1];
        }
        nonce++;
        // Don't allow a zero index, start counting at 1
        return value.add(1);
    }

    // Calculate the mint price
    function getPrice() public view returns (uint) {
        require(publicSale, "Sale not started.");
        uint elapsed = block.timestamp.sub(saleStartTime);
        if (elapsed >= saleDuration) {
            return 0;
        } else {
            return saleDuration.sub(elapsed).mul(price).div(saleDuration);
        }
    }

    // The deployer can mint in bulk without paying
    function devMint(uint quantity, address recipient) external onlyDeployer {
        for (uint i = 0; i < quantity; i++) {
            _mint(recipient, 0);
        }
    }

    function mintsRemaining() external view returns (uint) {
        return SALE_LIMIT.sub(numSales);
    }

    /**
     * Community grant minting.
     */
    function mintWithPunkOrGlyph(uint _createVia) external reentrancyGuard returns (uint) {
        require(communityGrant);
        require(!marketPaused);
        require(_createVia > 0 && _createVia <= 10512, "Invalid punk/glyph index.");
        require(creatorNftMints[_createVia] == 0, "Already minted with this punk/glyph");
        if (_createVia > 10000) {
            // It's a glyph
            // Compute the glyph ID
            uint glyphId = _createVia.sub(10000);
            // Make sure the sender owns the glyph
            require(IERC721(glyphs).ownerOf(glyphId) == msg.sender, "Not the owner of this glyph.");
        } else {
            // It's a punk
            // Compute the punk ID
            uint punkId = _createVia.sub(1);
            // Make sure the sender owns the punk
            require(Cryptopunks(punks).punkIndexToAddress(punkId) == msg.sender, "Not the owner of this punk.");
        }
        creatorNftMints[_createVia]++;
        return _mint(msg.sender, _createVia);
    }

    /**
     * Public sale minting.
     */
    function mint() external payable reentrancyGuard returns (uint) {
        require(publicSale, "Sale not started.");
        require(!marketPaused);
        require(numSales < SALE_LIMIT, "Sale limit reached.");
        uint salePrice = getPrice();
        require(msg.value >= salePrice, "Insufficient funds to purchase.");
        if (msg.value > salePrice) {
            msg.sender.transfer(msg.value.sub(salePrice));
        }
        beneficiary.transfer(salePrice);
        numSales++;
        return _mint(msg.sender, 0);
    }

    function _mint(address _to, uint createdVia) internal returns (uint) {
        require(_to != address(0), "Cannot mint to 0x0.");
        require(numTokens < TOKEN_LIMIT, "Token limit reached.");
        uint id = randomIndex();

        numTokens = numTokens + 1;
        _addNFToken(_to, id);

        emit Mint(id, _to, createdVia);
        emit Transfer(address(0), _to, id);
        return id;
    }

    function _addNFToken(address _to, uint256 _tokenId) internal {
        require(idToOwner[_tokenId] == address(0), "Cannot add, already owned.");
        idToOwner[_tokenId] = _to;

        ownerToIds[_to].push(_tokenId);
        idToOwnerIndex[_tokenId] = ownerToIds[_to].length.sub(1);
    }

    function _removeNFToken(address _from, uint256 _tokenId) internal {
        require(idToOwner[_tokenId] == _from, "Incorrect owner.");
        delete idToOwner[_tokenId];

        uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId];
        uint256 lastTokenIndex = ownerToIds[_from].length.sub(1);

        if (lastTokenIndex != tokenToRemoveIndex) {
            uint256 lastToken = ownerToIds[_from][lastTokenIndex];
            ownerToIds[_from][tokenToRemoveIndex] = lastToken;
            idToOwnerIndex[lastToken] = tokenToRemoveIndex;
        }

        ownerToIds[_from].pop();
    }

    function _getOwnerNFTCount(address _owner) internal view returns (uint256) {
        return ownerToIds[_owner].length;
    }

    function _safeTransferFrom(address _from,  address _to,  uint256 _tokenId,  bytes memory _data) private canTransfer(_tokenId) validNFToken(_tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(tokenOwner == _from, "Incorrect owner.");
        require(_to != address(0));

        _transfer(_to, _tokenId);

        if (isContract(_to)) {
            bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
            require(retval == MAGIC_ON_ERC721_RECEIVED);
        }
    }

    function _clearApproval(uint256 _tokenId) private {
        if (idToApproval[_tokenId] != address(0)) {
            delete idToApproval[_tokenId];
        }
    }

    //// Enumerable

    function totalSupply() public view returns (uint256) {
        return numTokens;
    }

    function tokenByIndex(uint256 index) public pure returns (uint256) {
        require(index >= 0 && index < TOKEN_LIMIT);
        return index + 1;
    }

    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256) {
        require(_index < ownerToIds[_owner].length);
        return ownerToIds[_owner][_index];
    }

    //// Metadata

    /**
      * @dev Converts a `uint256` to its ASCII `string` representation.
      */
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        uint256 index = digits - 1;
        temp = value;
        while (temp != 0) {
            buffer[index--] = bytes1(uint8(48 + temp % 10));
            temp /= 10;
        }
        return string(buffer);
    }

    /**
      * @dev Returns a descriptive name for a collection of NFTokens.
      * @return _name Representing name.
      */
    function name() external view returns (string memory _name) {
        _name = nftName;
    }

    /**
     * @dev Returns an abbreviated name for NFTokens.
     * @return _symbol Representing symbol.
     */
    function symbol() external view returns (string memory _symbol) {
        _symbol = nftSymbol;
    }

    /**
     * @dev A distinct URI (RFC 3986) for a given NFT.
     * @param _tokenId Id for which we want uri.
     * @return _tokenId URI of _tokenId.
     */
    function tokenURI(uint256 _tokenId) external view validNFToken(_tokenId) returns (string memory) {
        return string(abi.encodePacked("https://meebits.larvalabs.com/meebit/", toString(_tokenId)));
    }

    //// MARKET

    struct Offer {
        address maker;
        address taker;
        uint256 makerWei;
        uint256[] makerIds;
        uint256 takerWei;
        uint256[] takerIds;
        uint256 expiry;
        uint256 salt;
    }

    function hashOffer(Offer memory offer) private pure returns (bytes32){
        return keccak256(abi.encode(
                    offer.maker,
                    offer.taker,
                    offer.makerWei,
                    keccak256(abi.encodePacked(offer.makerIds)),
                    offer.takerWei,
                    keccak256(abi.encodePacked(offer.takerIds)),
                    offer.expiry,
                    offer.salt
                ));
    }

    function hashToSign(address maker, address taker, uint256 makerWei, uint256[] memory makerIds, uint256 takerWei, uint256[] memory takerIds, uint256 expiry, uint256 salt) public pure returns (bytes32) {
        Offer memory offer = Offer(maker, taker, makerWei, makerIds, takerWei, takerIds, expiry, salt);
        return hashOffer(offer);
    }

    function hashToVerify(Offer memory offer) private pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hashOffer(offer)));
    }

    function verify(address signer, bytes32 hash, bytes memory signature) internal pure returns (bool) {
        require(signer != address(0));
        require(signature.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;

        assembly {
            r := mload(add(signature, 32))
            s := mload(add(signature, 64))
            v := byte(0, mload(add(signature, 96)))
        }

        if (v < 27) {
            v += 27;
        }

        require(v == 27 || v == 28);

        return signer == ecrecover(hash, v, r, s);
    }

    function tradeValid(address maker, address taker, uint256 makerWei, uint256[] memory makerIds, uint256 takerWei, uint256[] memory takerIds, uint256 expiry, uint256 salt, bytes memory signature) view public returns (bool) {
        Offer memory offer = Offer(maker, taker, makerWei, makerIds, takerWei, takerIds, expiry, salt);
        // Check for cancellation
        bytes32 hash = hashOffer(offer);
        require(cancelledOffers[hash] == false, "Trade offer was cancelled.");
        // Verify signature
        bytes32 verifyHash = hashToVerify(offer);
        require(verify(offer.maker, verifyHash, signature), "Signature not valid.");
        // Check for expiry
        require(block.timestamp < offer.expiry, "Trade offer expired.");
        // Only one side should ever have to pay, not both
        require(makerWei == 0 || takerWei == 0, "Only one side of trade must pay.");
        // At least one side should offer tokens
        require(makerIds.length > 0 || takerIds.length > 0, "One side must offer tokens.");
        // Make sure the maker has funded the trade
        require(ethBalance[offer.maker] >= offer.makerWei, "Maker does not have sufficient balance.");
        // Ensure the maker owns the maker tokens
        for (uint i = 0; i < offer.makerIds.length; i++) {
            require(idToOwner[offer.makerIds[i]] == offer.maker, "At least one maker token doesn't belong to maker.");
        }
        // If the taker can be anybody, then there can be no taker tokens
        if (offer.taker == address(0)) {
            // If taker not specified, then can't specify IDs
            require(offer.takerIds.length == 0, "If trade is offered to anybody, cannot specify tokens from taker.");
        } else {
            // Ensure the taker owns the taker tokens
            for (uint i = 0; i < offer.takerIds.length; i++) {
                require(idToOwner[offer.takerIds[i]] == offer.taker, "At least one taker token doesn't belong to taker.");
            }
        }
        return true;
    }

    function cancelOffer(address maker, address taker, uint256 makerWei, uint256[] memory makerIds, uint256 takerWei, uint256[] memory takerIds, uint256 expiry, uint256 salt) external {
        require(maker == msg.sender, "Only the maker can cancel this offer.");
        Offer memory offer = Offer(maker, taker, makerWei, makerIds, takerWei, takerIds, expiry, salt);
        bytes32 hash = hashOffer(offer);
        cancelledOffers[hash] = true;
        emit OfferCancelled(hash);
    }

    function acceptTrade(address maker, address taker, uint256 makerWei, uint256[] memory makerIds, uint256 takerWei, uint256[] memory takerIds, uint256 expiry, uint256 salt, bytes memory signature) external payable reentrancyGuard {
        require(!marketPaused, "Market is paused.");
        require(msg.sender != maker, "Can't accept ones own trade.");
        Offer memory offer = Offer(maker, taker, makerWei, makerIds, takerWei, takerIds, expiry, salt);
        if (msg.value > 0) {
            ethBalance[msg.sender] = ethBalance[msg.sender].add(msg.value);
            emit Deposit(msg.sender, msg.value);
        }
        require(offer.taker == address(0) || offer.taker == msg.sender, "Not the recipient of this offer.");
        require(tradeValid(maker, taker, makerWei, makerIds, takerWei, takerIds, expiry, salt, signature), "Trade not valid.");
        require(ethBalance[msg.sender] >= offer.takerWei, "Insufficient funds to execute trade.");
        // Transfer ETH
        ethBalance[offer.maker] = ethBalance[offer.maker].sub(offer.makerWei);
        ethBalance[msg.sender] = ethBalance[msg.sender].add(offer.makerWei);
        ethBalance[msg.sender] = ethBalance[msg.sender].sub(offer.takerWei);
        ethBalance[offer.maker] = ethBalance[offer.maker].add(offer.takerWei);
        // Transfer maker ids to taker (msg.sender)
        for (uint i = 0; i < makerIds.length; i++) {
            _transfer(msg.sender, makerIds[i]);
        }
        // Transfer taker ids to maker
        for (uint i = 0; i < takerIds.length; i++) {
            _transfer(maker, takerIds[i]);
        }
        // Prevent a replay attack on this offer
        bytes32 hash = hashOffer(offer);
        cancelledOffers[hash] = true;
        emit Trade(hash, offer.maker, msg.sender, offer.makerWei, offer.makerIds, offer.takerWei, offer.takerIds);
    }

    function withdraw(uint amount) external reentrancyGuard {
        require(amount <= ethBalance[msg.sender]);
        ethBalance[msg.sender] = ethBalance[msg.sender].sub(amount);
        (bool success, ) = msg.sender.call{value:amount}("");
        require(success);
        emit Withdraw(msg.sender, amount);
    }

    function deposit() external payable {
        ethBalance[msg.sender] = ethBalance[msg.sender].add(msg.value);
        emit Deposit(msg.sender, msg.value);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_punks","type":"address"},{"internalType":"address","name":"_glyphs","type":"address"},{"internalType":"address payable","name":"_beneficiary","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[],"name":"CommunityGrantEnds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"createdVia","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"OfferCancelled","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleBegins","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"maker","type":"address"},{"indexed":false,"internalType":"address","name":"taker","type":"address"},{"indexed":false,"internalType":"uint256","name":"makerWei","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"makerIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"takerWei","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"takerIds","type":"uint256[]"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"SALE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"uint256","name":"makerWei","type":"uint256"},{"internalType":"uint256[]","name":"makerIds","type":"uint256[]"},{"internalType":"uint256","name":"takerWei","type":"uint256"},{"internalType":"uint256[]","name":"takerIds","type":"uint256[]"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"acceptTrade","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"uint256","name":"makerWei","type":"uint256"},{"internalType":"uint256[]","name":"makerIds","type":"uint256[]"},{"internalType":"uint256","name":"takerWei","type":"uint256"},{"internalType":"uint256[]","name":"takerIds","type":"uint256[]"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"cancelledOffers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityGrant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contentHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creatorNftMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endCommunityGrant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"uint256","name":"makerWei","type":"uint256"},{"internalType":"uint256[]","name":"makerIds","type":"uint256[]"},{"internalType":"uint256","name":"takerWei","type":"uint256"},{"internalType":"uint256[]","name":"takerIds","type":"uint256[]"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"}],"name":"hashToSign","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_createVia","type":"uint256"}],"name":"mintWithPunkOrGlyph","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sealContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_saleDuration","type":"uint256"}],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"uint256","name":"makerWei","type":"uint256"},{"internalType":"uint256[]","name":"makerIds","type":"uint256[]"},{"internalType":"uint256","name":"takerWei","type":"uint256"},{"internalType":"uint256[]","name":"takerIds","type":"uint256[]"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"tradeValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060600160405280602e81526020016200643f602e91396000908051906020019062000035929190620003dc565b506040518060400160405280600781526020017f4d656562697473000000000000000000000000000000000000000000000000008152506008908051906020019062000083929190620003dc565b506040518060400160405280600381526020017fe29a87000000000000000000000000000000000000000000000000000000000081525060099080519060200190620000d1929190620003dc565b506000600a556000600b556001600f60146101000a81548160ff0219169083151502179055506000600f60156101000a81548160ff02191690831515021790555060006013556000614e3760006101000a81548160ff0219169083151502179055503480156200014057600080fd5b506040516200646d3803806200646d833981810160405260608110156200016657600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060018060006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018060006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600180600063780e9d6360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001806000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000492565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000414576000855562000460565b82601f106200042f57805160ff191683800117855562000460565b8280016001018555821562000460579182015b828111156200045f57825182559160200191906001019062000442565b5b5090506200046f919062000473565b5090565b5b808211156200048e57600081600090555060010162000474565b5090565b615f9d80620004a26000396000f3fe60806040526004361061025c5760003560e01c80635ec390d811610144578063b88d4fde116100b6578063d357b01e1161007a578063d357b01e14611190578063d3d6c767146111a7578063d8f3790f14611416578063e985e9c51461147b578063f4f3122e14611502578063f592934c146115475761025c565b8063b88d4fde14610f64578063b9f7e21814611034578063c87b56dd14611083578063d09229a814611137578063d0e30db0146111865761025c565b80638a84fe00116101085780638a84fe0014610c0c57806395d89b4114610dce57806398d5fdca14610e5e5780639f7bf76214610e89578063a22cb46514610eda578063b650163714610f375761025c565b80635ec390d814610a5e5780636352211e14610a9b578063646c2e3314610b0057806368bd580e14610b9057806370a0823114610ba75761025c565b8063212e8f67116101dd57806333bc1c5c116101a157806333bc1c5c146108e45780633711d9fb146109115780633a283bd21461093c57806342842e0e1461096957806344c66be7146109e45780634f6ccce714610a0f5761025c565b8063212e8f671461073957806323b872dd146107645780632d1a12f6146107df5780632e1a7d4d1461083a5780632f745c59146108755761025c565b8063095ea7b311610224578063095ea7b31461041e5780630faadcf6146104795780631249c58b146106c557806318160ddd146106e35780631cbaee2d1461070e5761025c565b806301ffc9a714610261578063031bd4c4146102d15780630614a6ba146102fc57806306fdde0314610329578063081812fc146103b9575b600080fd5b34801561026d57600080fd5b506102b96004803603602081101561028457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061171d565b60405180821515815260200191505060405180910390f35b3480156102dd57600080fd5b506102e6611785565b6040518082815260200191505060405180910390f35b34801561030857600080fd5b5061031161178b565b60405180821515815260200191505060405180910390f35b34801561033557600080fd5b5061033e61179e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561037e578082015181840152602081019050610363565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c557600080fd5b506103f2600480360360208110156103dc57600080fd5b8101908080359060200190929190505050611840565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042a57600080fd5b506104776004803603604081101561044157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611955565b005b6106c3600480360361012081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156104f757600080fd5b82018360208201111561050957600080fd5b8035906020019184602083028401116401000000008311171561052b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460208302840111640100000000831117156105c957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cbd565b005b6106cd6125db565b6040518082815260200191505060405180910390f35b3480156106ef57600080fd5b506106f86128b6565b6040518082815260200191505060405180910390f35b34801561071a57600080fd5b506107236128c0565b6040518082815260200191505060405180910390f35b34801561074557600080fd5b5061074e6128c6565b6040518082815260200191505060405180910390f35b34801561077057600080fd5b506107dd6004803603606081101561078757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128cc565b005b3480156107eb57600080fd5b506108386004803603604081101561080257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d06565b005b34801561084657600080fd5b506108736004803603602081101561085d57600080fd5b8101908080359060200190929190505050612df2565b005b34801561088157600080fd5b506108ce6004803603604081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612fee565b6040518082815260200191505060405180910390f35b3480156108f057600080fd5b506108f961309b565b60405180821515815260200191505060405180910390f35b34801561091d57600080fd5b506109266130ae565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109516130b4565b60405180821515815260200191505060405180910390f35b34801561097557600080fd5b506109e26004803603606081101561098c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506130c8565b005b3480156109f057600080fd5b506109f96130e8565b6040518082815260200191505060405180910390f35b348015610a1b57600080fd5b50610a4860048036036020811015610a3257600080fd5b8101908080359060200190929190505050613106565b6040518082815260200191505060405180910390f35b348015610a6a57600080fd5b50610a9960048036036020811015610a8157600080fd5b8101908080351515906020019092919050505061312d565b005b348015610aa757600080fd5b50610ad460048036036020811015610abe57600080fd5b8101908080359060200190929190505050613292565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b0c57600080fd5b50610b1561333b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b55578082015181840152602081019050610b3a565b50505050905090810190601f168015610b825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b9c57600080fd5b50610ba56133d9565b005b348015610bb357600080fd5b50610bf660048036036020811015610bca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134ba565b6040518082815260200191505060405180910390f35b348015610c1857600080fd5b50610dcc6004803603610100811015610c3057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c9757600080fd5b820183602082011115610ca957600080fd5b80359060200191846020830284011164010000000083111715610ccb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190640100000000811115610d3557600080fd5b820183602082011115610d4757600080fd5b80359060200191846020830284011164010000000083111715610d6957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050613505565b005b348015610dda57600080fd5b50610de3613670565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e23578082015181840152602081019050610e08565b50505050905090810190601f168015610e505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6a57600080fd5b50610e73613712565b6040518082815260200191505060405180910390f35b348015610e9557600080fd5b50610ec260048036036020811015610eac57600080fd5b8101908080359060200190929190505050613806565b60405180821515815260200191505060405180910390f35b348015610ee657600080fd5b50610f3560048036036040811015610efd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613827565b005b348015610f4357600080fd5b50610f4c613926565b60405180821515815260200191505060405180910390f35b348015610f7057600080fd5b5061103260048036036080811015610f8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fee57600080fd5b82018360208201111561100057600080fd5b8035906020019184600183028401116401000000008311171561102257600080fd5b909192939192939050505061393a565b005b34801561104057600080fd5b5061106d6004803603602081101561105757600080fd5b8101908080359060200190929190505050613991565b6040518082815260200191505060405180910390f35b34801561108f57600080fd5b506110bc600480360360208110156110a657600080fd5b81019080803590602001909291905050506139a9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110fc5780820151818401526020810190506110e1565b50505050905090810190601f1680156111295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561114357600080fd5b506111706004803603602081101561115a57600080fd5b8101908080359060200190929190505050613b08565b6040518082815260200191505060405180910390f35b61118e613f94565b005b34801561119c57600080fd5b506111a561407b565b005b3480156111b357600080fd5b506113fe60048036036101208110156111cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561123257600080fd5b82018360208201111561124457600080fd5b8035906020019184602083028401116401000000008311171561126657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001906401000000008111156112d057600080fd5b8201836020820111156112e257600080fd5b8035906020019184602083028401116401000000008311171561130457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019064010000000081111561137857600080fd5b82018360208201111561138a57600080fd5b803590602001918460018302840111640100000000831117156113ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506141a0565b60405180821515815260200191505060405180910390f35b34801561142257600080fd5b506114656004803603602081101561143957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506147f0565b6040518082815260200191505060405180910390f35b34801561148757600080fd5b506114ea6004803603604081101561149e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614809565b60405180821515815260200191505060405180910390f35b34801561150e57600080fd5b506115456004803603604081101561152557600080fd5b81019080803590602001909291908035906020019092919050505061489d565b005b34801561155357600080fd5b50611707600480360361010081101561156b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156115d257600080fd5b8201836020820111156115e457600080fd5b8035906020019184602083028401116401000000008311171561160657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561167057600080fd5b82018360208201111561168257600080fd5b803590602001918460208302840111640100000000831117156116a457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291905050506149da565b6040518082815260200191505060405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b614e2081565b600f60149054906101000a900460ff1681565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118365780601f1061180b57610100808354040283529160200191611836565b820191906000526020600020905b81548152906001019060200180831161181957829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b6004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611a4e5750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ac0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f43616e6e6f74206f7065726174652e000000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611c0857600080fd5b856004600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b614e3760009054906101000a900460ff1615611cd857600080fd5b6001614e3760006101000a81548160ff021916908315150217905550614e3460009054906101000a900460ff1615611d78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4d61726b6574206973207061757365642e00000000000000000000000000000081525060200191505060405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e277420616363657074206f6e6573206f776e2074726164652e0000000081525060200191505060405180910390fd5b60006040518061010001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018781526020018681526020018581526020018481525090506000341115611f7357611ee034614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a25b600073ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161480611fe157503373ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16145b612053576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6f742074686520726563697069656e74206f662074686973206f666665722e81525060200191505060405180910390fd5b6120648a8a8a8a8a8a8a8a8a6141a0565b6120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616465206e6f742076616c69642e0000000000000000000000000000000081525060200191505060405180910390fd5b8060800151614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612173576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615e326024913960400191505060405180910390fd5b6121ce8160400151614e356000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a7790919063ffffffff16565b614e356000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061226d8160400151614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123088160800151614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a7790919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123a78160800151614e356000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e356000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b8751811015612425576124183389838151811061240b57fe5b6020026020010151614a91565b80806001019150506123f2565b5060005b855181101561245c5761244f8b87838151811061244257fe5b6020026020010151614a91565b8080600101915050612429565b50600061246882614b46565b90506001614e36600083815260200190815260200160002060006101000a81548160ff021916908315150217905550816000015173ffffffffffffffffffffffffffffffffffffffff16817f753d4db383bcac616c2e2651156bc71c1ec81c0d5509071a85e3f565568765a3338560400151866060015187608001518860a00151604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019060200280838360005b8381101561255857808201518184015260208101905061253d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561259a57808201518184015260208101905061257f565b5050505090500197505050505050505060405180910390a350506000614e3760006101000a81548160ff021916908315150217905550505050505050505050565b6000614e3760009054906101000a900460ff16156125f857600080fd5b6001614e3760006101000a81548160ff021916908315150217905550600f60159054906101000a900460ff16612696576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f53616c65206e6f7420737461727465642e00000000000000000000000000000081525060200191505060405180910390fd5b614e3460009054906101000a900460ff16156126b157600080fd5b612328600b541061272a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f53616c65206c696d697420726561636865642e0000000000000000000000000081525060200191505060405180910390fd5b6000612734613712565b9050803410156127ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e73756666696369656e742066756e647320746f2070757263686173652e0081525060200191505060405180910390fd5b8034111561280e573373ffffffffffffffffffffffffffffffffffffffff166108fc6127e18334614a7790919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561280c573d6000803e3d6000fd5b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612876573d6000803e3d6000fd5b50600b60008154809291906001019190505550612894336000614ca0565b9150506000614e3760006101000a81548160ff02191690831515021790555090565b6000600a54905090565b60115481565b61232881565b8060006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061299d57503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80612a2e5750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612c50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f57726f6e672066726f6d20616464726573732e0000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f742073656e6420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b612cfd8686614a91565b50505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b60005b82811015612ded57612ddf826000614ca0565b508080600101915050612dcc565b505050565b614e3760009054906101000a900460ff1615612e0d57600080fd5b6001614e3760006101000a81548160ff021916908315150217905550614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115612e7657600080fd5b612ec981614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a7790919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003373ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114612f6d576040519150601f19603f3d011682016040523d82523d6000602084013e612f72565b606091505b5050905080612f8057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040518082815260200191505060405180910390a2506000614e3760006101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050821061303e57600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061308857fe5b9060005260206000200154905092915050565b600f60159054906101000a900460ff1681565b60125481565b614e3460009054906101000a900460ff1681565b6130e383838360405180602001604052806000815250614e94565b505050565b6000613101600b54612328614a7790919063ffffffff16565b905090565b60008082101580156131195750614e2082105b61312257600080fd5b600182019050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b614e3460019054906101000a900460ff1615613274576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f436f6e7472616374207365616c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b80614e3460006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561330057600080fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133d15780601f106133a6576101008083540402835291602001916133d1565b820191906000526020600020905b8154815290600101906020018083116133b457829003601f168201915b505050505081565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461349c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b6001614e3460016101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f557600080fd5b6134fe82615402565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614613589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615f126025913960400191505060405180910390fd5b60006040518061010001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187815260200186815260200185815260200184815260200183815250905060006135fe82614b46565b90506001614e36600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f9cb69d022b6ec319f86f2df848bcce01f2fc51c9f86396779a8081cf6ca2ea816040518082815260200191505060405180910390a150505050505050505050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156137085780601f106136dd57610100808354040283529160200191613708565b820191906000526020600020905b8154815290600101906020018083116136eb57829003601f168201915b5050505050905090565b6000600f60159054906101000a900460ff16613796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f53616c65206e6f7420737461727465642e00000000000000000000000000000081525060200191505060405180910390fd5b60006137ad60115442614a7790919063ffffffff16565b905060125481106137c2576000915050613803565b6137ff6012546137f16010546137e385601254614a7790919063ffffffff16565b61544e90919063ffffffff16565b61548290919063ffffffff16565b9150505b90565b614e366020528060005260406000206000915054906101000a900460ff1681565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b614e3460019054906101000a900460ff1681565b61398a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614e94565b5050505050565b60036020528060005260406000206000915090505481565b606081600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b613a8b83615496565b6040516020018080615e0d6025913960250182805190602001908083835b60208310613acc5780518252602082019150602081019050602083039250613aa9565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052915050919050565b6000614e3760009054906101000a900460ff1615613b2557600080fd5b6001614e3760006101000a81548160ff021916908315150217905550600f60149054906101000a900460ff16613b5a57600080fd5b614e3460009054906101000a900460ff1615613b7557600080fd5b600082118015613b8757506129108211155b613bf9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e76616c69642070756e6b2f676c79706820696e6465782e0000000000000081525060200191505060405180910390fd5b6000600360008481526020019081526020016000205414613c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615e566023913960400191505060405180910390fd5b612710821115613ddc576000613c8661271084614a7790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613d1257600080fd5b505afa158015613d26573d6000803e3d6000fd5b505050506040513d6020811015613d3c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614613dd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e6f7420746865206f776e6572206f66207468697320676c7970682e0000000081525060200191505060405180910390fd5b50613f44565b6000613df2600184614a7790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166358178168836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613e7e57600080fd5b505afa158015613e92573d6000803e3d6000fd5b505050506040513d6020811015613ea857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614613f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e6f7420746865206f776e6572206f6620746869732070756e6b2e000000000081525060200191505060405180910390fd5b505b6003600083815260200190815260200160002060008154809291906001019190505550613f713383614ca0565b90506000614e3760006101000a81548160ff021916908315150217905550919050565b613fe734614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461413e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600f60149054906101000a900460ff1661415757600080fd5b6000600f60146101000a81548160ff0219169083151502179055507f5f00e567de9d29d9d36405c34b1164390da767fb97a1fb7d6bf3680ff90a3b2660405160405180910390a1565b6000806040518061010001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001878152602001868152602001858152509050600061421682614b46565b905060001515614e36600083815260200190815260200160002060009054906101000a900460ff161515146142b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5472616465206f66666572207761732063616e63656c6c65642e00000000000081525060200191505060405180910390fd5b60006142be836155dd565b90506142cf8360000151828761563d565b614341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5369676e6174757265206e6f742076616c69642e00000000000000000000000081525060200191505060405180910390fd5b8260c0015142106143ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5472616465206f6666657220657870697265642e00000000000000000000000081525060200191505060405180910390fd5b60008b14806143c95750600089145b61443b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f6e6c79206f6e652073696465206f66207472616465206d757374207061792e81525060200191505060405180910390fd5b60008a51118061444c575060008851115b6144be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6e652073696465206d757374206f6666657220746f6b656e732e000000000081525060200191505060405180910390fd5b8260400151614e356000856000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561455f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615eba6027913960400191505060405180910390fd5b60005b83606001515181101561464e57836000015173ffffffffffffffffffffffffffffffffffffffff16600260008660600151848151811061459e57fe5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615f376031913960400191505060405180910390fd5b8080600101915050614562565b50600073ffffffffffffffffffffffffffffffffffffffff16836020015173ffffffffffffffffffffffffffffffffffffffff1614156146eb5760008360a0015151146146e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180615e796041913960600191505060405180910390fd5b6147dc565b60005b8360a00151518110156147da57836020015173ffffffffffffffffffffffffffffffffffffffff16600260008660a00151848151811061472a57fe5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146147cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615ee16031913960400191505060405180910390fd5b80806001019150506146ee565b505b600193505050509998505050505050505050565b614e356020528060005260406000206000915090505481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600f60159054906101000a900460ff161561497a57600080fd5b8160108190555080601281905550426011819055506001600f60156101000a81548160ff0219169083151502179055507f771cfe172460b7d64cc46cca57a1e1f40f52b47cf1d16fe30c78a2935b3dd58060405160405180910390a15050565b6000806040518061010001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff168152602001898152602001888152602001878152602001868152602001858152602001848152509050614a4e81614b46565b91505098975050505050505050565b6000818301905082811015614a7157600080fd5b92915050565b600082821115614a8657600080fd5b818303905092915050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614ad282615772565b614adc8183615813565b614ae68383615ac6565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000816000015182602001518360400151846060015160405160200180828051906020019060200280838360005b83811015614b8f578082015181840152602081019050614b74565b505050509050019150506040516020818303038152906040528051906020012085608001518660a0015160405160200180828051906020019060200280838360005b83811015614bec578082015181840152602081019050614bd1565b50505050905001915050604051602081830303815290604052805190602001208760c001518860e00151604051602001808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186815260200185815260200184815260200183815260200182815260200198505050505050505050604051602081830303815290604052805190602001209050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614d44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f74206d696e7420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b614e20600a5410614dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f6b656e206c696d697420726561636865642e00000000000000000000000081525060200191505060405180910390fd5b6000614dc7615cc4565b90506001600a5401600a81905550614ddf8482615ac6565b8373ffffffffffffffffffffffffffffffffffffffff16817f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f6856040518082815260200191505060405180910390a3808473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48091505092915050565b8160006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480614f6557503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80614ff65750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b615068576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b83600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561513f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614615218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561525257600080fd5b61525c8787614a91565b61526587615df9565b156153f85760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156153195780820151818401526020810190506152fe565b50505050905090810190601f1680156153465780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561536857600080fd5b505af115801561537c573d6000803e3d6000fd5b505050506040513d602081101561539257600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146153f657600080fd5b505b5050505050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080831415615461576000905061547c565b81830290508183828161547057fe5b041461547b57600080fd5b5b92915050565b600081838161548d57fe5b04905092915050565b606060008214156154de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506155d8565b600082905060005b60008214615508578080600101915050600a828161550057fe5b0491506154e6565b60008167ffffffffffffffff8111801561552157600080fd5b506040519080825280601f01601f1916602001820160405280156155545781602001600182028036833780820191505090505b50905060006001830390508593505b600084146155d057600a848161557557fe5b0660300160f81b8282806001900393508151811061558f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84816155c857fe5b049350615563565b819450505050505b919050565b60006155e882614b46565b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561567857600080fd5b604182511461568657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156156b657601b810190505b601b8160ff1614806156cb5750601c8160ff16145b6156d457600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561572e573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161493505050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615810576004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146158e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600060076000838152602001908152602001600020549050600061598d6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050614a7790919063ffffffff16565b9050818114615a62576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106159e257fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110615a3a57fe5b9060005260206000200181905550826007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480615aaa57fe5b6001900381819060005260206000200160009055905550505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615b9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f43616e6e6f74206164642c20616c7265616479206f776e65642e00000000000081525060200191505060405180910390fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055615ca96001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050614a7790919063ffffffff16565b60076000838152602001908152602001600020819055505050565b600080600a54614e20039050600081601354334442604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c81615d3757fe5b069050600080601483614e208110615d4b57fe5b015414615d6957601482614e208110615d6057fe5b01549050615d6d565b8190505b6000601460018503614e208110615d8057fe5b01541415615da45760018303601483614e208110615d9a57fe5b0181905550615dcb565b601460018403614e208110615db557fe5b0154601483614e208110615dc557fe5b01819055505b601360008154809291906001019190505550615df1600182614a5d90919063ffffffff16565b935050505090565b600080823b90506000811191505091905056fe68747470733a2f2f6d6565626974732e6c617276616c6162732e636f6d2f6d65656269742f496e73756666696369656e742066756e647320746f20657865637574652074726164652e416c7265616479206d696e746564207769746820746869732070756e6b2f676c7970684966207472616465206973206f66666572656420746f20616e79626f64792c2063616e6e6f74207370656369667920746f6b656e732066726f6d2074616b65722e4d616b657220646f6573206e6f7420686176652073756666696369656e742062616c616e63652e4174206c65617374206f6e652074616b657220746f6b656e20646f65736e27742062656c6f6e6720746f2074616b65722e4f6e6c7920746865206d616b65722063616e2063616e63656c2074686973206f666665722e4174206c65617374206f6e65206d616b657220746f6b656e20646f65736e27742062656c6f6e6720746f206d616b65722ea26469706673582212208c6207b4011c283c186af7c3ff1174c8465f56c8edadff785faab511352d0c0464736f6c63430007060033516d66585967665831714e667a51364e5279466e75706e695a7573617346504d6569576e356161446e783759586f000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb000000000000000000000000d4e4078ca3495de5b1d4db434bebc5a986197782000000000000000000000000c352b534e8b987e036a93539fd6897f53488e56a

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb000000000000000000000000d4e4078ca3495de5b1d4db434bebc5a986197782000000000000000000000000c352b534e8b987e036a93539fd6897f53488e56a

-----Decoded View---------------
Arg [0] : _punks (address): 0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb
Arg [1] : _glyphs (address): 0xd4e4078ca3495de5b1d4db434bebc5a986197782
Arg [2] : _beneficiary (address): 0xc352b534e8b987e036a93539fd6897f53488e56a

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb
Arg [1] : 000000000000000000000000d4e4078ca3495de5b1d4db434bebc5a986197782
Arg [2] : 000000000000000000000000c352b534e8b987e036a93539fd6897f53488e56a


Deployed ByteCode Sourcemap

2999:21935:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8267:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4327:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5219:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17412:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10036:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9120:320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22553:1877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13350:545;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16138:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5321:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4374:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8765:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11915:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24438:320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16397:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5259:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5353:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5510;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8605:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12096:105;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16234:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7691:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9845:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4242:76;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7852:86;;;;;;;;;;;;;:::i;:::-;;9670:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22055:490;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17632:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11520:334;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5627:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9448:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5541:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8420:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4538:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17908:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12260:1035;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24766:163;;;:::i;:::-;;7521:162;;;;;;;;;;;;;:::i;:::-;;19991:2056;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5574:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10195:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7238:275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18865:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8267:145;8347:4;8371:19;:33;8391:12;8371:33;;;;;;;;;;;;;;;;;;;;;;;;;;;8364:40;;8267:145;;;:::o;4327:40::-;4362:5;4327:40;:::o;5219:33::-;;;;;;;;;;;;;:::o;17412:94::-;17451:19;17491:7;17483:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17412:94;:::o;10036:151::-;10130:7;10111:8;6721:1;6690:33;;:9;:19;6700:8;6690:19;;;;;;;;;;;;;;;;;;;;;:33;;;;6682:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10157:12:::1;:22;10170:8;10157:22;;;;;;;;;;;;;;;;;;;;;10150:29;;10036:151:::0;;;;:::o;9120:320::-;9203:8;6140:18;6161:9;:19;6171:8;6161:19;;;;;;;;;;;;;;;;;;;;;6140:40;;6213:10;6199:24;;:10;:24;;;:68;;;;6227:16;:28;6244:10;6227:28;;;;;;;;;;;;;;;:40;6256:10;6227:40;;;;;;;;;;;;;;;;;;;;;;;;;6199:68;6191:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9226:8:::1;6721:1;6690:33;;:9;:19;6700:8;6690:19;;;;;;;;;;;;;;;;;;;;;:33;;;;6682:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9247:18:::2;9268:9;:19;9278:8;9268:19;;;;;;;;;;;;;;;;;;;;;9247:40;;9319:10;9306:23;;:9;:23;;;;9298:32;;;::::0;::::2;;9366:9;9341:12;:22;9354:8;9341:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;9423:8;9412:9;9391:41;;9400:10;9391:41;;;;;;;;;;;;6753:1;6298::::1;9120:320:::0;;;;:::o;22553:1877::-;5948:14;;;;;;;;;;;5944:55;;;5979:8;;;5944:55;6026:4;6009:14;;:21;;;;;;;;;;;;;;;;;;22801:12:::1;;;;;;;;;;;22800:13;22792:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22868:5;22854:19;;:10;:19;;;;22846:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22917:18;22938:73;;;;;;;;22944:5;22938:73;;;;;;22951:5;22938:73;;;;;;22958:8;22938:73;;;;22968:8;22938:73;;;;22978:8;22938:73;;;;22988:8;22938:73;;;;22998:6;22938:73;;;;23006:4;22938:73;;::::0;22917:94:::1;;23038:1;23026:9;:13;23022:158;;;23081:37;23108:9;23081:10;:22;23092:10;23081:22;;;;;;;;;;;;;;;;:26;;:37;;;;:::i;:::-;23056:10;:22;23067:10;23056:22;;;;;;;;;;;;;;;:62;;;;23146:10;23138:30;;;23158:9;23138:30;;;;;;;;;;;;;;;;;;23022:158;23221:1;23198:25;;:5;:11;;;:25;;;:54;;;;23242:10;23227:25;;:5;:11;;;:25;;;23198:54;23190:99;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23308:89;23319:5;23326;23333:8;23343;23353;23363;23373:6;23381:4;23387:9;23308:10;:89::i;:::-;23300:118;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23463:5;:14;;;23437:10;:22;23448:10;23437:22;;;;;;;;;;;;;;;;:40;;23429:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23580:43;23608:5;:14;;;23580:10;:23;23591:5;:11;;;23580:23;;;;;;;;;;;;;;;;:27;;:43;;;;:::i;:::-;23554:10;:23;23565:5;:11;;;23554:23;;;;;;;;;;;;;;;:69;;;;23659:42;23686:5;:14;;;23659:10;:22;23670:10;23659:22;;;;;;;;;;;;;;;;:26;;:42;;;;:::i;:::-;23634:10;:22;23645:10;23634:22;;;;;;;;;;;;;;;:67;;;;23737:42;23764:5;:14;;;23737:10;:22;23748:10;23737:22;;;;;;;;;;;;;;;;:26;;:42;;;;:::i;:::-;23712:10;:22;23723:10;23712:22;;;;;;;;;;;;;;;:67;;;;23816:43;23844:5;:14;;;23816:10;:23;23827:5;:11;;;23816:23;;;;;;;;;;;;;;;;:27;;:43;;;;:::i;:::-;23790:10;:23;23801:5;:11;;;23790:23;;;;;;;;;;;;;;;:69;;;;23928:6;23923:104;23944:8;:15;23940:1;:19;23923:104;;;23981:34;23991:10;24003:8;24012:1;24003:11;;;;;;;;;;;;;;23981:9;:34::i;:::-;23961:3;;;;;;;23923:104;;;;24082:6;24077:99;24098:8;:15;24094:1;:19;24077:99;;;24135:29;24145:5;24152:8;24161:1;24152:11;;;;;;;;;;;;;;24135:9;:29::i;:::-;24115:3;;;;;;;24077:99;;;;24236:12;24251:16;24261:5;24251:9;:16::i;:::-;24236:31;;24302:4;24278:15;:21;24294:4;24278:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24334:5;:11;;;24322:100;;24328:4;24322:100;24347:10;24359:5;:14;;;24375:5;:14;;;24391:5;:14;;;24407:5;:14;;;24322:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6041:1;;6070:5:::0;6053:14;;:22;;;;;;;;;;;;;;;;;;22553:1877;;;;;;;;;:::o;13350:545::-;13408:4;5948:14;;;;;;;;;;;5944:55;;;5979:8;;;5944:55;6026:4;6009:14;;:21;;;;;;;;;;;;;;;;;;13433:10:::1;;;;;;;;;;;13425:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13485:12;;;;;;;;;;;13484:13;13476:22;;;::::0;::::1;;4408:4;13517:8;;:21;13509:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13573:14;13590:10;:8;:10::i;:::-;13573:27;;13632:9;13619;:22;;13611:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13704:9;13692;:21;13688:99;;;13730:10;:19;;:45;13750:24;13764:9;13750;:13;;:24;;;;:::i;:::-;13730:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13688:99;13797:11;;;;;;;;;;;:20;;:31;13818:9;13797:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13839:8;;:10;;;;;;;;;;;;;13867:20;13873:10;13885:1;13867:5;:20::i;:::-;13860:27;;;6070:5:::0;6053:14;;:22;;;;;;;;;;;;;;;;;;13350:545;:::o;16138:88::-;16182:7;16209:9;;16202:16;;16138:88;:::o;5321:25::-;;;;:::o;4374:38::-;4408:4;4374:38;:::o;8765:347::-;8863:8;6365:18;6386:9;:19;6396:8;6386:19;;;;;;;;;;;;;;;;;;;;;6365:40;;6452:10;6438:24;;:10;:24;;;:77;;;;6505:10;6479:36;;:12;:22;6492:8;6479:22;;;;;;;;;;;;;;;;;;;;;:36;;;6438:77;:134;;;;6532:16;:28;6549:10;6532:28;;;;;;;;;;;;;;;:40;6561:10;6532:40;;;;;;;;;;;;;;;;;;;;;;;;;6438:134;6416:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:8:::1;6721:1;6690:33;;:9;:19;6700:8;6690:19;;;;;;;;;;;;;;;;;;;;;:33;;;;6682:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8907:18:::2;8928:9;:19;8938:8;8928:19;;;;;;;;;;;;;;;;;;;;;8907:40;;8980:5;8966:19;;:10;:19;;;8958:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;9043:1;9028:17;;:3;:17;;;;9020:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;9080:24;9090:3;9095:8;9080:9;:24::i;:::-;6753:1;6614::::1;8765:347:::0;;;;;:::o;11915:173::-;5741:8;;;;;;;;;;;5727:22;;:10;:22;;;5719:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12004:6:::1;11999:82;12020:8;12016:1;:12;11999:82;;;12050:19;12056:9;12067:1;12050:5;:19::i;:::-;;12030:3;;;;;;;11999:82;;;;11915:173:::0;;:::o;24438:320::-;5948:14;;;;;;;;;;;5944:55;;;5979:8;;;5944:55;6026:4;6009:14;;:21;;;;;;;;;;;;;;;;;;24523:10:::1;:22;24534:10;24523:22;;;;;;;;;;;;;;;;24513:6;:32;;24505:41;;;::::0;::::1;;24582:34;24609:6;24582:10;:22;24593:10;24582:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;24557:10;:22;24568:10;24557:22;;;;;;;;;;;;;;;:59;;;;24628:12;24646:10;:15;;24668:6;24646:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24627:52;;;24698:7;24690:16;;;::::0;::::1;;24731:10;24722:28;;;24743:6;24722:28;;;;;;;;;;;;;;;;;;6041:1;6070:5:::0;6053:14;;:22;;;;;;;;;;;;;;;;;;24438:320;:::o;16397:199::-;16481:7;16518:10;:18;16529:6;16518:18;;;;;;;;;;;;;;;:25;;;;16509:6;:34;16501:43;;;;;;16562:10;:18;16573:6;16562:18;;;;;;;;;;;;;;;16581:6;16562:26;;;;;;;;;;;;;;;;16555:33;;16397:199;;;;:::o;5259:30::-;;;;;;;;;;;;;:::o;5353:24::-;;;;:::o;5510:::-;;;;;;;;;;;;;:::o;8605:152::-;8706:43;8724:5;8731:3;8736:8;8706:43;;;;;;;;;;;;:17;:43::i;:::-;8605:152;;;:::o;12096:105::-;12145:4;12169:24;12184:8;;4408:4;12169:14;;:24;;;;:::i;:::-;12162:31;;12096:105;:::o;16234:155::-;16292:7;16329:1;16320:5;:10;;:33;;;;;4362:5;16334;:19;16320:33;16312:42;;;;;;16380:1;16372:5;:9;16365:16;;16234:155;;;:::o;7691:153::-;5741:8;;;;;;;;;;;5727:22;;:10;:22;;;5719:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7768:14:::1;;;;;;;;;;;7767:15;7759:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;7829:7;7814:12;;:22;;;;;;;;;;;;;;;;;;7691:153:::0;:::o;9845:183::-;9912:14;9978:1;9947:33;;:9;:19;9957:8;9947:19;;;;;;;;;;;;;;;;;;;;;:33;;;;9939:42;;;;;;10001:9;:19;10011:8;10001:19;;;;;;;;;;;;;;;;;;;;;9992:28;;9845:183;;;:::o;4242:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7852:86::-;5741:8;;;;;;;;;;;5727:22;;:10;:22;;;5719:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7926:4:::1;7909:14;;:21;;;;;;;;;;;;;;;;;;7852:86::o:0;9670:167::-;9737:7;9783:1;9765:20;;:6;:20;;;;9757:29;;;;;;9804:25;9822:6;9804:17;:25::i;:::-;9797:32;;9670:167;;;:::o;22055:490::-;22263:10;22254:19;;:5;:19;;;22246:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22326:18;22347:73;;;;;;;;22353:5;22347:73;;;;;;22360:5;22347:73;;;;;;22367:8;22347:73;;;;22377:8;22347:73;;;;22387:8;22347:73;;;;22397:8;22347:73;;;;22407:6;22347:73;;;;22415:4;22347:73;;;22326:94;;22431:12;22446:16;22456:5;22446:9;:16::i;:::-;22431:31;;22497:4;22473:15;:21;22489:4;22473:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22517:20;22532:4;22517:20;;;;;;;;;;;;;;;;;;22055:490;;;;;;;;;;:::o;17632:102::-;17673:21;17717:9;17707:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17632:102;:::o;11520:334::-;11561:4;11586:10;;;;;;;;;;;11578:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11629:12;11644:34;11664:13;;11644:15;:19;;:34;;;;:::i;:::-;11629:49;;11704:12;;11693:7;:23;11689:158;;11740:1;11733:8;;;;;11689:158;11781:54;11822:12;;11781:36;11811:5;;11781:25;11798:7;11781:12;;:16;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;:40;;:54;;;;:::i;:::-;11774:61;;;11520:334;;:::o;5627:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;9448:214::-;9581:9;9539:16;:28;9556:10;9539:28;;;;;;;;;;;;;;;:39;9568:9;9539:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;9633:9;9606:48;;9621:10;9606:48;;;9644:9;9606:48;;;;;;;;;;;;;;;;;;;;9448:214;;:::o;5541:26::-;;;;;;;;;;;;;:::o;8420:177::-;8543:46;8561:5;8568:3;8573:8;8583:5;;8543:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;8420:177;;;;;:::o;4538:51::-;;;;;;;;;;;;;;;;;:::o;17908:208::-;17990:13;17971:8;6721:1;6690:33;;:9;:19;6700:8;6690:19;;;;;;;;;;;;;;;;;;;;;:33;;;;6682:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18088:18:::1;18097:8;18088;:18::i;:::-;18030:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18016:92;;17908:208:::0;;;;:::o;12260:1035::-;12340:4;5948:14;;;;;;;;;;;5944:55;;;5979:8;;;5944:55;6026:4;6009:14;;:21;;;;;;;;;;;;;;;;;;12365:14:::1;;;;;;;;;;;12357:23;;;::::0;::::1;;12400:12;;;;;;;;;;;12399:13;12391:22;;;::::0;::::1;;12445:1;12432:10;:14;:37;;;;;12464:5;12450:10;:19;;12432:37;12424:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12549:1;12518:15;:27;12534:10;12518:27;;;;;;;;;;;;:32;12510:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12618:5;12605:10;:18;12601:600;;;12706:12;12721:21;12736:5;12721:10;:14;;:21;;;;:::i;:::-;12706:36;;12853:10;12817:46;;12825:6;;;;;;;;;;;12817:23;;;12841:7;12817:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:46;;;12809:87;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12601:600;;;;12993:11;13007:17;13022:1;13007:10;:14;;:17;;;;:::i;:::-;12993:31;;13147:10;13098:59;;13110:5;;;;;;;;;;;13098:37;;;13136:6;13098:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:59;;;13090:99;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12601:600;;13211:15;:27;13227:10;13211:27;;;;;;;;;;;;:29;;;;;;;;;;;;;13258;13264:10;13276;13258:5;:29::i;:::-;13251:36;;6070:5:::0;6053:14;;:22;;;;;;;;;;;;;;;;;;12260:1035;;;:::o;24766:163::-;24838:37;24865:9;24838:10;:22;24849:10;24838:22;;;;;;;;;;;;;;;;:26;;:37;;;;:::i;:::-;24813:10;:22;24824:10;24813:22;;;;;;;;;;;;;;;:62;;;;24899:10;24891:30;;;24911:9;24891:30;;;;;;;;;;;;;;;;;;24766:163::o;7521:162::-;5741:8;;;;;;;;;;;5727:22;;:10;:22;;;5719:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7591:14:::1;;;;;;;;;;;7583:23;;;::::0;::::1;;7634:5;7617:14;;:22;;;;;;;;;;;;;;;;;;7655:20;;;;;;;;;;7521:162::o:0;19991:2056::-;20206:4;20223:18;20244:73;;;;;;;;20250:5;20244:73;;;;;;20257:5;20244:73;;;;;;20264:8;20244:73;;;;20274:8;20244:73;;;;20284:8;20244:73;;;;20294:8;20244:73;;;;20304:6;20244:73;;;;20312:4;20244:73;;;20223:94;;20363:12;20378:16;20388:5;20378:9;:16::i;:::-;20363:31;;20438:5;20413:30;;:15;:21;20429:4;20413:21;;;;;;;;;;;;;;;;;;;;;:30;;;20405:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20514:18;20535:19;20548:5;20535:12;:19::i;:::-;20514:40;;20573:42;20580:5;:11;;;20593:10;20605:9;20573:6;:42::i;:::-;20565:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20706:5;:12;;;20688:15;:30;20680:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20834:1;20822:8;:13;:30;;;;20851:1;20839:8;:13;20822:30;20814:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20976:1;20958:8;:15;:19;:42;;;;20999:1;20981:8;:15;:19;20958:42;20950:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21131:5;:14;;;21104:10;:23;21115:5;:11;;;21104:23;;;;;;;;;;;;;;;;:41;;21096:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21256:6;21251:181;21272:5;:14;;;:21;21268:1;:25;21251:181;;;21355:5;:11;;;21323:43;;:9;:28;21333:5;:14;;;21348:1;21333:17;;;;;;;;;;;;;;21323:28;;;;;;;;;;;;;;;;;;;;;:43;;;21315:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21295:3;;;;;;;21251:181;;;;21544:1;21521:25;;:5;:11;;;:25;;;21517:501;;;21659:1;21634:5;:14;;;:21;:26;21626:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21517:501;;;21823:6;21818:189;21839:5;:14;;;:21;21835:1;:25;21818:189;;;21926:5;:11;;;21894:43;;:9;:28;21904:5;:14;;;21919:1;21904:17;;;;;;;;;;;;;;21894:28;;;;;;;;;;;;;;;;;;;;;:43;;;21886:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21862:3;;;;;;;21818:189;;;;21517:501;22035:4;22028:11;;;;;19991:2056;;;;;;;;;;;:::o;5574:46::-;;;;;;;;;;;;;;;;;:::o;10195:160::-;10288:4;10312:16;:24;10329:6;10312:24;;;;;;;;;;;;;;;:35;10337:9;10312:35;;;;;;;;;;;;;;;;;;;;;;;;;10305:42;;10195:160;;;;:::o;7238:275::-;5741:8;;;;;;;;;;;5727:22;;:10;:22;;;5719:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7332:10:::1;;;;;;;;;;;7331:11;7323:20;;;::::0;::::1;;7362:6;7354:5;:14;;;;7394:13;7379:12;:28;;;;7434:15;7418:13;:31;;;;7473:4;7460:10;;:17;;;;;;;;;;;;;;;;;;7493:12;;;;;;;;;;7238:275:::0;;:::o;18865:347::-;19056:7;19076:18;19097:73;;;;;;;;19103:5;19097:73;;;;;;19110:5;19097:73;;;;;;19117:8;19097:73;;;;19127:8;19097:73;;;;19137:8;19097:73;;;;19147:8;19097:73;;;;19157:6;19097:73;;;;19165:4;19097:73;;;19076:94;;19188:16;19198:5;19188:9;:16::i;:::-;19181:23;;;18865:347;;;;;;;;;;:::o;2850:142::-;2908:9;2938:1;2934;:5;2930:9;;2963:1;2958;:6;;2950:15;;;;;;2850:142;;;;:::o;2651:124::-;2709:7;2742:1;2737;:6;;2729:15;;;;;;2766:1;2762;:5;2755:12;;2651:124;;;;:::o;10363:274::-;10433:12;10448:9;:19;10458:8;10448:19;;;;;;;;;;;;;;;;;;;;;10433:34;;10478:24;10493:8;10478:14;:24::i;:::-;10515:30;10530:4;10536:8;10515:14;:30::i;:::-;10556:26;10568:3;10573:8;10556:11;:26::i;:::-;10620:8;10615:3;10600:29;;10609:4;10600:29;;;;;;;;;;;;10363:274;;;:::o;18380:477::-;18441:7;18510:5;:11;;;18544:5;:11;;;18578:5;:14;;;18642:5;:14;;;18625:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18615:43;;;;;;18681:5;:14;;;18745:5;:14;;;18728:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18718:43;;;;;;18784:5;:12;;;18819:5;:10;;;18477:371;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18467:382;;;;;;18460:389;;18380:477;;;:::o;13903:415::-;13966:4;14006:1;13991:17;;:3;:17;;;;13983:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4362:5;14051:9;;:23;14043:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14110:7;14120:13;:11;:13::i;:::-;14110:23;;14170:1;14158:9;;:13;14146:9;:25;;;;14182:20;14194:3;14199:2;14182:11;:20::i;:::-;14229:3;14220:25;;14225:2;14220:25;14234:10;14220:25;;;;;;;;;;;;;;;;;;14287:2;14282:3;14261:29;;14278:1;14261:29;;;;;;;;;;;;14308:2;14301:9;;;13903:415;;;;:::o;15381:552::-;15497:8;6365:18;6386:9;:19;6396:8;6386:19;;;;;;;;;;;;;;;;;;;;;6365:40;;6452:10;6438:24;;:10;:24;;;:77;;;;6505:10;6479:36;;:12;:22;6492:8;6479:22;;;;;;;;;;;;;;;;;;;;;:36;;;6438:77;:134;;;;6532:16;:28;6549:10;6532:28;;;;;;;;;;;;;;;:40;6561:10;6532:40;;;;;;;;;;;;;;;;;;;;;;;;;6438:134;6416:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15520:8:::1;6721:1;6690:33;;:9;:19;6700:8;6690:19;;;;;;;;;;;;;;;;;;;;;:33;;;;6682:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15541:18:::2;15562:9;:19;15572:8;15562:19;;;;;;;;;;;;;;;;;;;;;15541:40;;15614:5;15600:19;;:10;:19;;;15592:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;15674:1;15659:17;;:3;:17;;;;15651:26;;;::::0;::::2;;15690:24;15700:3;15705:8;15690:9;:24::i;:::-;15731:15;15742:3;15731:10;:15::i;:::-;15727:199;;;15763:13;15799:3;15779:41;;;15821:10;15833:5;15840:8;15850:5;15779:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;15763:93;;4186:10;15889:24;;15879:34;;;:6;:34;;;;15871:43;;;::::0;::::2;;15727:199;;6753:1;6614::::1;15381:552:::0;;;;;;:::o;15247:126::-;15313:7;15340:10;:18;15351:6;15340:18;;;;;;;;;;;;;;;:25;;;;15333:32;;15247:126;;;:::o;1933:203::-;1991:9;2022:1;2017;:6;2013:47;;;2047:1;2040:8;;;;2013:47;2078:1;2074;:5;2070:9;;2107:1;2102;2098;:5;;;;;;:10;2090:19;;;;;;1933:203;;;;;:::o;2231:295::-;2289:7;2517:1;2513;:5;;;;;;2506:12;;2231:295;;;;:::o;16717:555::-;16773:13;16812:1;16803:5;:10;16799:53;;;16830:10;;;;;;;;;;;;;;;;;;;;;16799:53;16862:12;16877:5;16862:20;;16893:14;16918:78;16933:1;16925:4;:9;16918:78;;16951:8;;;;;;;16982:2;16974:10;;;;;;;;;16918:78;;;17006:19;17038:6;17028:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17006:39;;17056:13;17081:1;17072:6;:10;17056:26;;17100:5;17093:12;;17116:117;17131:1;17123:4;:9;17116:117;;17192:2;17185:4;:9;;;;;;17180:2;:14;17167:29;;17149:6;17156:7;;;;;;;17149:15;;;;;;;;;;;:47;;;;;;;;;;;17219:2;17211:10;;;;;;;;;17116:117;;;17257:6;17243:21;;;;;;16717:555;;;;:::o;19220:180::-;19284:7;19374:16;19384:5;19374:9;:16::i;:::-;19321:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19311:81;;;;;;19304:88;;19220:180;;;:::o;19408:575::-;19501:4;19544:1;19526:20;;:6;:20;;;;19518:29;;;;;;19586:2;19566:9;:16;:22;19558:31;;;;;;19602:9;19622;19642:7;19712:2;19701:9;19697:18;19691:25;19686:30;;19756:2;19745:9;19741:18;19735:25;19730:30;;19808:2;19797:9;19793:18;19787:25;19784:1;19779:34;19774:39;;19844:2;19840:1;:6;;;19836:46;;;19868:2;19863:7;;;;19836:46;19907:2;19902:1;:7;;;:18;;;;19918:2;19913:1;:7;;;19902:18;19894:27;;;;;;19951:24;19961:4;19967:1;19970;19973;19951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19941:34;;:6;:34;;;19934:41;;;;;19408:575;;;;;:::o;15941:166::-;16040:1;16006:36;;:12;:22;16019:8;16006:22;;;;;;;;;;;;;;;;;;;;;:36;;;16002:98;;16066:12;:22;16079:8;16066:22;;;;;;;;;;;;16059:29;;;;;;;;;;;16002:98;15941:166;:::o;14632:607::-;14740:5;14717:28;;:9;:19;14727:8;14717:19;;;;;;;;;;;;;;;;;;;;;:28;;;14709:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14784:9;:19;14794:8;14784:19;;;;;;;;;;;;14777:26;;;;;;;;;;;14816;14845:14;:24;14860:8;14845:24;;;;;;;;;;;;14816:53;;14880:22;14905:31;14934:1;14905:10;:17;14916:5;14905:17;;;;;;;;;;;;;;;:24;;;;:28;;:31;;;;:::i;:::-;14880:56;;14971:18;14953:14;:36;14949:247;;15006:17;15026:10;:17;15037:5;15026:17;;;;;;;;;;;;;;;15044:14;15026:33;;;;;;;;;;;;;;;;15006:53;;15114:9;15074:10;:17;15085:5;15074:17;;;;;;;;;;;;;;;15092:18;15074:37;;;;;;;;;;;;;;;:49;;;;15166:18;15138:14;:25;15153:9;15138:25;;;;;;;;;;;:46;;;;14949:247;;15208:10;:17;15219:5;15208:17;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;;;;;;;14632:607;;;;:::o;14326:298::-;14437:1;14406:33;;:9;:19;14416:8;14406:19;;;;;;;;;;;;;;;;;;;;;:33;;;14398:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14503:3;14481:9;:19;14491:8;14481:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;14519:10;:15;14530:3;14519:15;;;;;;;;;;;;;;;14540:8;14519:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14587:29;14614:1;14587:10;:15;14598:3;14587:15;;;;;;;;;;;;;;;:22;;;;:26;;:29;;;;:::i;:::-;14560:14;:24;14575:8;14560:24;;;;;;;;;;;:56;;;;14326:298;;:::o;10645:834::-;10686:4;10703:14;10734:9;;4362:5;10720:23;10703:40;;10754:10;10857:9;10799:5;;10806:10;10818:16;10836:15;10782:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10772:81;;;;;;10767:87;;:99;;;;;;10754:112;;10877:10;10924:1;10906:7;10914:5;10906:14;;;;;;;;;:19;10902:120;;10950:7;10958:5;10950:14;;;;;;;;;10942:22;;10902:120;;;11005:5;10997:13;;10902:120;11113:1;11087:7;11107:1;11095:9;:13;11087:22;;;;;;;;;:27;11083:283;;;11224:1;11212:9;:13;11195:7;11203:5;11195:14;;;;;;;;:30;;;;11083:283;;;11332:7;11352:1;11340:9;:13;11332:22;;;;;;;;;11315:7;11323:5;11315:14;;;;;;;;:39;;;;11083:283;11376:5;;:7;;;;;;;;;;;;;11459:12;11469:1;11459:5;:9;;:12;;;;:::i;:::-;11452:19;;;;;10645:834;:::o;8044:215::-;8102:17;8132:12;8186:5;8174:18;8166:26;;8250:1;8243:4;:8;8228:23;;8044:215;;;;:::o

Swarm Source

ipfs://8c6207b4011c283c186af7c3ff1174c8465f56c8edadff785faab511352d0c04
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.