ETH Price: $3,111.73 (+0.45%)

Token

Meebits (⚇)
 

Overview

Max Total Supply

20,000

Holders

6,407

Market

Volume (24H)

1.0706 ETH

Min Price (24H)

$1,066.70 @ 0.342800 ETH

Max Price (24H)

$1,149.47 @ 0.369400 ETH
Filtered by Token Holder
kcmo.eth
Balance
7 ⚇
0xc52650d88793cf5fc0295bee9ae49284e67fecb1
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

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

# Exchange Pair Price  24H Volume % Volume

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

Deployed Bytecode

0x60806040526004361061025c5760003560e01c80635ec390d811610144578063b88d4fde116100b6578063d357b01e1161007a578063d357b01e14611190578063d3d6c767146111a7578063d8f3790f14611416578063e985e9c51461147b578063f4f3122e14611502578063f592934c146115475761025c565b8063b88d4fde14610f64578063b9f7e21814611034578063c87b56dd14611083578063d09229a814611137578063d0e30db0146111865761025c565b80638a84fe00116101085780638a84fe0014610c0c57806395d89b4114610dce57806398d5fdca14610e5e5780639f7bf76214610e89578063a22cb46514610eda578063b650163714610f375761025c565b80635ec390d814610a5e5780636352211e14610a9b578063646c2e3314610b0057806368bd580e14610b9057806370a0823114610ba75761025c565b8063212e8f67116101dd57806333bc1c5c116101a157806333bc1c5c146108e45780633711d9fb146109115780633a283bd21461093c57806342842e0e1461096957806344c66be7146109e45780634f6ccce714610a0f5761025c565b8063212e8f671461073957806323b872dd146107645780632d1a12f6146107df5780632e1a7d4d1461083a5780632f745c59146108755761025c565b8063095ea7b311610224578063095ea7b31461041e5780630faadcf6146104795780631249c58b146106c557806318160ddd146106e35780631cbaee2d1461070e5761025c565b806301ffc9a714610261578063031bd4c4146102d15780630614a6ba146102fc57806306fdde0314610329578063081812fc146103b9575b600080fd5b34801561026d57600080fd5b506102b96004803603602081101561028457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061171d565b60405180821515815260200191505060405180910390f35b3480156102dd57600080fd5b506102e6611785565b6040518082815260200191505060405180910390f35b34801561030857600080fd5b5061031161178b565b60405180821515815260200191505060405180910390f35b34801561033557600080fd5b5061033e61179e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561037e578082015181840152602081019050610363565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c557600080fd5b506103f2600480360360208110156103dc57600080fd5b8101908080359060200190929190505050611840565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042a57600080fd5b506104776004803603604081101561044157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611955565b005b6106c3600480360361012081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156104f757600080fd5b82018360208201111561050957600080fd5b8035906020019184602083028401116401000000008311171561052b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460208302840111640100000000831117156105c957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cbd565b005b6106cd6125db565b6040518082815260200191505060405180910390f35b3480156106ef57600080fd5b506106f86128b6565b6040518082815260200191505060405180910390f35b34801561071a57600080fd5b506107236128c0565b6040518082815260200191505060405180910390f35b34801561074557600080fd5b5061074e6128c6565b6040518082815260200191505060405180910390f35b34801561077057600080fd5b506107dd6004803603606081101561078757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128cc565b005b3480156107eb57600080fd5b506108386004803603604081101561080257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d06565b005b34801561084657600080fd5b506108736004803603602081101561085d57600080fd5b8101908080359060200190929190505050612df2565b005b34801561088157600080fd5b506108ce6004803603604081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612fee565b6040518082815260200191505060405180910390f35b3480156108f057600080fd5b506108f961309b565b60405180821515815260200191505060405180910390f35b34801561091d57600080fd5b506109266130ae565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109516130b4565b60405180821515815260200191505060405180910390f35b34801561097557600080fd5b506109e26004803603606081101561098c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506130c8565b005b3480156109f057600080fd5b506109f96130e8565b6040518082815260200191505060405180910390f35b348015610a1b57600080fd5b50610a4860048036036020811015610a3257600080fd5b8101908080359060200190929190505050613106565b6040518082815260200191505060405180910390f35b348015610a6a57600080fd5b50610a9960048036036020811015610a8157600080fd5b8101908080351515906020019092919050505061312d565b005b348015610aa757600080fd5b50610ad460048036036020811015610abe57600080fd5b8101908080359060200190929190505050613292565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b0c57600080fd5b50610b1561333b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b55578082015181840152602081019050610b3a565b50505050905090810190601f168015610b825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b9c57600080fd5b50610ba56133d9565b005b348015610bb357600080fd5b50610bf660048036036020811015610bca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134ba565b6040518082815260200191505060405180910390f35b348015610c1857600080fd5b50610dcc6004803603610100811015610c3057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c9757600080fd5b820183602082011115610ca957600080fd5b80359060200191846020830284011164010000000083111715610ccb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190640100000000811115610d3557600080fd5b820183602082011115610d4757600080fd5b80359060200191846020830284011164010000000083111715610d6957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050613505565b005b348015610dda57600080fd5b50610de3613670565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e23578082015181840152602081019050610e08565b50505050905090810190601f168015610e505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6a57600080fd5b50610e73613712565b6040518082815260200191505060405180910390f35b348015610e9557600080fd5b50610ec260048036036020811015610eac57600080fd5b8101908080359060200190929190505050613806565b60405180821515815260200191505060405180910390f35b348015610ee657600080fd5b50610f3560048036036040811015610efd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613827565b005b348015610f4357600080fd5b50610f4c613926565b60405180821515815260200191505060405180910390f35b348015610f7057600080fd5b5061103260048036036080811015610f8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fee57600080fd5b82018360208201111561100057600080fd5b8035906020019184600183028401116401000000008311171561102257600080fd5b909192939192939050505061393a565b005b34801561104057600080fd5b5061106d6004803603602081101561105757600080fd5b8101908080359060200190929190505050613991565b6040518082815260200191505060405180910390f35b34801561108f57600080fd5b506110bc600480360360208110156110a657600080fd5b81019080803590602001909291905050506139a9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110fc5780820151818401526020810190506110e1565b50505050905090810190601f1680156111295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561114357600080fd5b506111706004803603602081101561115a57600080fd5b8101908080359060200190929190505050613b08565b6040518082815260200191505060405180910390f35b61118e613f94565b005b34801561119c57600080fd5b506111a561407b565b005b3480156111b357600080fd5b506113fe60048036036101208110156111cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561123257600080fd5b82018360208201111561124457600080fd5b8035906020019184602083028401116401000000008311171561126657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001906401000000008111156112d057600080fd5b8201836020820111156112e257600080fd5b8035906020019184602083028401116401000000008311171561130457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019064010000000081111561137857600080fd5b82018360208201111561138a57600080fd5b803590602001918460018302840111640100000000831117156113ac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506141a0565b60405180821515815260200191505060405180910390f35b34801561142257600080fd5b506114656004803603602081101561143957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506147f0565b6040518082815260200191505060405180910390f35b34801561148757600080fd5b506114ea6004803603604081101561149e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614809565b60405180821515815260200191505060405180910390f35b34801561150e57600080fd5b506115456004803603604081101561152557600080fd5b81019080803590602001909291908035906020019092919050505061489d565b005b34801561155357600080fd5b50611707600480360361010081101561156b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156115d257600080fd5b8201836020820111156115e457600080fd5b8035906020019184602083028401116401000000008311171561160657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561167057600080fd5b82018360208201111561168257600080fd5b803590602001918460208302840111640100000000831117156116a457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291905050506149da565b6040518082815260200191505060405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b614e2081565b600f60149054906101000a900460ff1681565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118365780601f1061180b57610100808354040283529160200191611836565b820191906000526020600020905b81548152906001019060200180831161181957829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b6004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611a4e5750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ac0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f43616e6e6f74206f7065726174652e000000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611c0857600080fd5b856004600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b614e3760009054906101000a900460ff1615611cd857600080fd5b6001614e3760006101000a81548160ff021916908315150217905550614e3460009054906101000a900460ff1615611d78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4d61726b6574206973207061757365642e00000000000000000000000000000081525060200191505060405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e277420616363657074206f6e6573206f776e2074726164652e0000000081525060200191505060405180910390fd5b60006040518061010001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018781526020018681526020018581526020018481525090506000341115611f7357611ee034614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a25b600073ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161480611fe157503373ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16145b612053576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6f742074686520726563697069656e74206f662074686973206f666665722e81525060200191505060405180910390fd5b6120648a8a8a8a8a8a8a8a8a6141a0565b6120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616465206e6f742076616c69642e0000000000000000000000000000000081525060200191505060405180910390fd5b8060800151614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612173576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615e326024913960400191505060405180910390fd5b6121ce8160400151614e356000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a7790919063ffffffff16565b614e356000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061226d8160400151614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123088160800151614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a7790919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123a78160800151614e356000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e356000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b8751811015612425576124183389838151811061240b57fe5b6020026020010151614a91565b80806001019150506123f2565b5060005b855181101561245c5761244f8b87838151811061244257fe5b6020026020010151614a91565b8080600101915050612429565b50600061246882614b46565b90506001614e36600083815260200190815260200160002060006101000a81548160ff021916908315150217905550816000015173ffffffffffffffffffffffffffffffffffffffff16817f753d4db383bcac616c2e2651156bc71c1ec81c0d5509071a85e3f565568765a3338560400151866060015187608001518860a00151604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019060200280838360005b8381101561255857808201518184015260208101905061253d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561259a57808201518184015260208101905061257f565b5050505090500197505050505050505060405180910390a350506000614e3760006101000a81548160ff021916908315150217905550505050505050505050565b6000614e3760009054906101000a900460ff16156125f857600080fd5b6001614e3760006101000a81548160ff021916908315150217905550600f60159054906101000a900460ff16612696576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f53616c65206e6f7420737461727465642e00000000000000000000000000000081525060200191505060405180910390fd5b614e3460009054906101000a900460ff16156126b157600080fd5b612328600b541061272a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f53616c65206c696d697420726561636865642e0000000000000000000000000081525060200191505060405180910390fd5b6000612734613712565b9050803410156127ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e73756666696369656e742066756e647320746f2070757263686173652e0081525060200191505060405180910390fd5b8034111561280e573373ffffffffffffffffffffffffffffffffffffffff166108fc6127e18334614a7790919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561280c573d6000803e3d6000fd5b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612876573d6000803e3d6000fd5b50600b60008154809291906001019190505550612894336000614ca0565b9150506000614e3760006101000a81548160ff02191690831515021790555090565b6000600a54905090565b60115481565b61232881565b8060006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061299d57503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80612a2e5750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612c50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f57726f6e672066726f6d20616464726573732e0000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f742073656e6420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b612cfd8686614a91565b50505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b60005b82811015612ded57612ddf826000614ca0565b508080600101915050612dcc565b505050565b614e3760009054906101000a900460ff1615612e0d57600080fd5b6001614e3760006101000a81548160ff021916908315150217905550614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115612e7657600080fd5b612ec981614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a7790919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003373ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114612f6d576040519150601f19603f3d011682016040523d82523d6000602084013e612f72565b606091505b5050905080612f8057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040518082815260200191505060405180910390a2506000614e3760006101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050821061303e57600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061308857fe5b9060005260206000200154905092915050565b600f60159054906101000a900460ff1681565b60125481565b614e3460009054906101000a900460ff1681565b6130e383838360405180602001604052806000815250614e94565b505050565b6000613101600b54612328614a7790919063ffffffff16565b905090565b60008082101580156131195750614e2082105b61312257600080fd5b600182019050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b614e3460019054906101000a900460ff1615613274576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f436f6e7472616374207365616c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b80614e3460006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561330057600080fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133d15780601f106133a6576101008083540402835291602001916133d1565b820191906000526020600020905b8154815290600101906020018083116133b457829003601f168201915b505050505081565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461349c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b6001614e3460016101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f557600080fd5b6134fe82615402565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614613589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615f126025913960400191505060405180910390fd5b60006040518061010001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187815260200186815260200185815260200184815260200183815250905060006135fe82614b46565b90506001614e36600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f9cb69d022b6ec319f86f2df848bcce01f2fc51c9f86396779a8081cf6ca2ea816040518082815260200191505060405180910390a150505050505050505050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156137085780601f106136dd57610100808354040283529160200191613708565b820191906000526020600020905b8154815290600101906020018083116136eb57829003601f168201915b5050505050905090565b6000600f60159054906101000a900460ff16613796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f53616c65206e6f7420737461727465642e00000000000000000000000000000081525060200191505060405180910390fd5b60006137ad60115442614a7790919063ffffffff16565b905060125481106137c2576000915050613803565b6137ff6012546137f16010546137e385601254614a7790919063ffffffff16565b61544e90919063ffffffff16565b61548290919063ffffffff16565b9150505b90565b614e366020528060005260406000206000915054906101000a900460ff1681565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b614e3460019054906101000a900460ff1681565b61398a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614e94565b5050505050565b60036020528060005260406000206000915090505481565b606081600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b613a8b83615496565b6040516020018080615e0d6025913960250182805190602001908083835b60208310613acc5780518252602082019150602081019050602083039250613aa9565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052915050919050565b6000614e3760009054906101000a900460ff1615613b2557600080fd5b6001614e3760006101000a81548160ff021916908315150217905550600f60149054906101000a900460ff16613b5a57600080fd5b614e3460009054906101000a900460ff1615613b7557600080fd5b600082118015613b8757506129108211155b613bf9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e76616c69642070756e6b2f676c79706820696e6465782e0000000000000081525060200191505060405180910390fd5b6000600360008481526020019081526020016000205414613c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615e566023913960400191505060405180910390fd5b612710821115613ddc576000613c8661271084614a7790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613d1257600080fd5b505afa158015613d26573d6000803e3d6000fd5b505050506040513d6020811015613d3c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614613dd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e6f7420746865206f776e6572206f66207468697320676c7970682e0000000081525060200191505060405180910390fd5b50613f44565b6000613df2600184614a7790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166358178168836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613e7e57600080fd5b505afa158015613e92573d6000803e3d6000fd5b505050506040513d6020811015613ea857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614613f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e6f7420746865206f776e6572206f6620746869732070756e6b2e000000000081525060200191505060405180910390fd5b505b6003600083815260200190815260200160002060008154809291906001019190505550613f713383614ca0565b90506000614e3760006101000a81548160ff021916908315150217905550919050565b613fe734614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a5d90919063ffffffff16565b614e3560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461413e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600f60149054906101000a900460ff1661415757600080fd5b6000600f60146101000a81548160ff0219169083151502179055507f5f00e567de9d29d9d36405c34b1164390da767fb97a1fb7d6bf3680ff90a3b2660405160405180910390a1565b6000806040518061010001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a8152602001898152602001888152602001878152602001868152602001858152509050600061421682614b46565b905060001515614e36600083815260200190815260200160002060009054906101000a900460ff161515146142b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5472616465206f66666572207761732063616e63656c6c65642e00000000000081525060200191505060405180910390fd5b60006142be836155dd565b90506142cf8360000151828761563d565b614341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5369676e6174757265206e6f742076616c69642e00000000000000000000000081525060200191505060405180910390fd5b8260c0015142106143ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5472616465206f6666657220657870697265642e00000000000000000000000081525060200191505060405180910390fd5b60008b14806143c95750600089145b61443b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f6e6c79206f6e652073696465206f66207472616465206d757374207061792e81525060200191505060405180910390fd5b60008a51118061444c575060008851115b6144be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6e652073696465206d757374206f6666657220746f6b656e732e000000000081525060200191505060405180910390fd5b8260400151614e356000856000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561455f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615eba6027913960400191505060405180910390fd5b60005b83606001515181101561464e57836000015173ffffffffffffffffffffffffffffffffffffffff16600260008660600151848151811061459e57fe5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615f376031913960400191505060405180910390fd5b8080600101915050614562565b50600073ffffffffffffffffffffffffffffffffffffffff16836020015173ffffffffffffffffffffffffffffffffffffffff1614156146eb5760008360a0015151146146e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180615e796041913960600191505060405180910390fd5b6147dc565b60005b8360a00151518110156147da57836020015173ffffffffffffffffffffffffffffffffffffffff16600260008660a00151848151811061472a57fe5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146147cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615ee16031913960400191505060405180910390fd5b80806001019150506146ee565b505b600193505050509998505050505050505050565b614e356020528060005260406000206000915090505481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600f60159054906101000a900460ff161561497a57600080fd5b8160108190555080601281905550426011819055506001600f60156101000a81548160ff0219169083151502179055507f771cfe172460b7d64cc46cca57a1e1f40f52b47cf1d16fe30c78a2935b3dd58060405160405180910390a15050565b6000806040518061010001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff168152602001898152602001888152602001878152602001868152602001858152602001848152509050614a4e81614b46565b91505098975050505050505050565b6000818301905082811015614a7157600080fd5b92915050565b600082821115614a8657600080fd5b818303905092915050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614ad282615772565b614adc8183615813565b614ae68383615ac6565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000816000015182602001518360400151846060015160405160200180828051906020019060200280838360005b83811015614b8f578082015181840152602081019050614b74565b505050509050019150506040516020818303038152906040528051906020012085608001518660a0015160405160200180828051906020019060200280838360005b83811015614bec578082015181840152602081019050614bd1565b50505050905001915050604051602081830303815290604052805190602001208760c001518860e00151604051602001808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186815260200185815260200184815260200183815260200182815260200198505050505050505050604051602081830303815290604052805190602001209050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614d44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f74206d696e7420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b614e20600a5410614dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f6b656e206c696d697420726561636865642e00000000000000000000000081525060200191505060405180910390fd5b6000614dc7615cc4565b90506001600a5401600a81905550614ddf8482615ac6565b8373ffffffffffffffffffffffffffffffffffffffff16817f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f6856040518082815260200191505060405180910390a3808473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48091505092915050565b8160006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480614f6557503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80614ff65750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b615068576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b83600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561513f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614615218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561525257600080fd5b61525c8787614a91565b61526587615df9565b156153f85760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156153195780820151818401526020810190506152fe565b50505050905090810190601f1680156153465780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561536857600080fd5b505af115801561537c573d6000803e3d6000fd5b505050506040513d602081101561539257600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146153f657600080fd5b505b5050505050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080831415615461576000905061547c565b81830290508183828161547057fe5b041461547b57600080fd5b5b92915050565b600081838161548d57fe5b04905092915050565b606060008214156154de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506155d8565b600082905060005b60008214615508578080600101915050600a828161550057fe5b0491506154e6565b60008167ffffffffffffffff8111801561552157600080fd5b506040519080825280601f01601f1916602001820160405280156155545781602001600182028036833780820191505090505b50905060006001830390508593505b600084146155d057600a848161557557fe5b0660300160f81b8282806001900393508151811061558f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84816155c857fe5b049350615563565b819450505050505b919050565b60006155e882614b46565b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561567857600080fd5b604182511461568657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156156b657601b810190505b601b8160ff1614806156cb5750601c8160ff16145b6156d457600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561572e573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161493505050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615810576004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146158e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600060076000838152602001908152602001600020549050600061598d6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050614a7790919063ffffffff16565b9050818114615a62576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106159e257fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110615a3a57fe5b9060005260206000200181905550826007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480615aaa57fe5b6001900381819060005260206000200160009055905550505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615b9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f43616e6e6f74206164642c20616c7265616479206f776e65642e00000000000081525060200191505060405180910390fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055615ca96001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050614a7790919063ffffffff16565b60076000838152602001908152602001600020819055505050565b600080600a54614e20039050600081601354334442604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c81615d3757fe5b069050600080601483614e208110615d4b57fe5b015414615d6957601482614e208110615d6057fe5b01549050615d6d565b8190505b6000601460018503614e208110615d8057fe5b01541415615da45760018303601483614e208110615d9a57fe5b0181905550615dcb565b601460018403614e208110615db557fe5b0154601483614e208110615dc557fe5b01819055505b601360008154809291906001019190505550615df1600182614a5d90919063ffffffff16565b935050505090565b600080823b90506000811191505091905056fe68747470733a2f2f6d6565626974732e6c617276616c6162732e636f6d2f6d65656269742f496e73756666696369656e742066756e647320746f20657865637574652074726164652e416c7265616479206d696e746564207769746820746869732070756e6b2f676c7970684966207472616465206973206f66666572656420746f20616e79626f64792c2063616e6e6f74207370656369667920746f6b656e732066726f6d2074616b65722e4d616b657220646f6573206e6f7420686176652073756666696369656e742062616c616e63652e4174206c65617374206f6e652074616b657220746f6b656e20646f65736e27742062656c6f6e6720746f2074616b65722e4f6e6c7920746865206d616b65722063616e2063616e63656c2074686973206f666665722e4174206c65617374206f6e65206d616b657220746f6b656e20646f65736e27742062656c6f6e6720746f206d616b65722ea26469706673582212208c6207b4011c283c186af7c3ff1174c8465f56c8edadff785faab511352d0c0464736f6c63430007060033

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
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.