MATIC Price: $1.01 (-0.17%)
Gas: 72 GWei
 

Overview

MATIC Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo2,433.643665 MATIC

MATIC Value

$2,448.81 (@ $1.01/MATIC)

Token Holdings

Transaction Hash
Method
Block
From
To
Value
Set Approval For...548913072024-03-20 21:18:258 days ago1710969505IN
0x320f537d...e3D176D3E
0 MATIC0.001697136.83278847
Safe Transfer Fr...547748932024-03-17 18:26:1411 days ago1710699974IN
0x320f537d...e3D176D3E
0 MATIC0.003490840
Safe Transfer Fr...547748222024-03-17 18:23:1611 days ago1710699796IN
0x320f537d...e3D176D3E
0 MATIC0.0034246436
Set Approval For...547663342024-03-17 12:48:0411 days ago1710679684IN
0x320f537d...e3D176D3E
0 MATIC0.0018042439.15791929
Set Approval For...547402892024-03-16 20:28:0512 days ago1710620885IN
0x320f537d...e3D176D3E
0 MATIC0.0023391250.76671386
Set Approval For...545422092024-03-11 19:46:0517 days ago1710186365IN
0x320f537d...e3D176D3E
0 MATIC0.0038740484.07955008
Set Approval For...544879682024-03-10 10:56:5618 days ago1710068216IN
0x320f537d...e3D176D3E
0 MATIC0.00475254103.14576512
Set Approval For...540169482024-02-27 11:07:1930 days ago1709032039IN
0x320f537d...e3D176D3E
0 MATIC0.0015518764
Set Approval For...540164642024-02-27 10:50:0830 days ago1709031008IN
0x320f537d...e3D176D3E
0 MATIC0.0015518764
Set Approval For...539847542024-02-26 15:35:5131 days ago1708961751IN
0x320f537d...e3D176D3E
0 MATIC0.00903089196
Set Approval For...536091212024-02-17 0:31:3440 days ago1708129894IN
0x320f537d...e3D176D3E
0 MATIC0.0018714540.54280076
Set Approval For...535777222024-02-16 5:23:4841 days ago1708061028IN
0x320f537d...e3D176D3E
0 MATIC0.0024851253.93542337
Transfer From531278572024-02-04 21:21:1153 days ago1707081671IN
0x320f537d...e3D176D3E
0 MATIC0.0062505174.00994617
Transfer From531175002024-02-04 14:49:4053 days ago1707058180IN
0x320f537d...e3D176D3E
0 MATIC0.0078957483.01346623
Set Approval For...529484442024-01-31 3:58:0757 days ago1706673487IN
0x320f537d...e3D176D3E
0 MATIC0.0016997936.89109782
Set Approval For...526865772024-01-24 6:50:2364 days ago1706079023IN
0x320f537d...e3D176D3E
0 MATIC0.0009456739
Set Approval For...525830792024-01-21 13:06:2567 days ago1705842385IN
0x320f537d...e3D176D3E
0 MATIC0.0017141837.13568394
Safe Transfer Fr...525822772024-01-21 12:35:4767 days ago1705840547IN
0x320f537d...e3D176D3E
0 MATIC0.0042574648.81406135
Safe Transfer Fr...525822652024-01-21 12:35:2167 days ago1705840521IN
0x320f537d...e3D176D3E
0 MATIC0.0050682851.78215917
Safe Transfer Fr...525822572024-01-21 12:35:0567 days ago1705840505IN
0x320f537d...e3D176D3E
0 MATIC0.0038576951.49224436
Safe Transfer Fr...525822492024-01-21 12:34:4767 days ago1705840487IN
0x320f537d...e3D176D3E
0 MATIC0.0040388453.91025184
Safe Transfer Fr...525822412024-01-21 12:34:3167 days ago1705840471IN
0x320f537d...e3D176D3E
0 MATIC0.0048585256.77367642
Safe Transfer Fr...525822342024-01-21 12:34:1567 days ago1705840455IN
0x320f537d...e3D176D3E
0 MATIC0.005053359.04979198
Safe Transfer Fr...525822292024-01-21 12:34:0167 days ago1705840441IN
0x320f537d...e3D176D3E
0 MATIC0.004909857.37291739
Safe Transfer Fr...525789442024-01-21 10:30:5967 days ago1705833059IN
0x320f537d...e3D176D3E
0 MATIC0.0026553231.02850171
View all transactions

Latest 25 internal transactions (View All)

Parent Txn Hash Block From To Value
315984342022-08-06 19:55:30600 days ago1659815730
0x320f537d...e3D176D3E
75 MATIC
252010832022-02-21 17:25:28766 days ago1645464328
0x320f537d...e3D176D3E
90 MATIC
233851542022-01-05 23:16:22812 days ago1641424582
0x320f537d...e3D176D3E
75 MATIC
232175572022-01-01 9:48:17817 days ago1641030497
0x320f537d...e3D176D3E
90 MATIC
228365082021-12-22 17:43:14827 days ago1640194994
0x320f537d...e3D176D3E
80 MATIC
226346712021-12-17 14:33:56832 days ago1639751636
0x320f537d...e3D176D3E
2 MATIC
224161052021-12-12 0:29:15837 days ago1639268955
0x320f537d...e3D176D3E
90 MATIC
220069932021-12-01 8:55:30848 days ago1638348930
0x320f537d...e3D176D3E
690 MATIC
217012202021-11-23 8:33:35856 days ago1637656415
0x320f537d...e3D176D3E
100 MATIC
215618002021-11-19 17:01:58860 days ago1637341318
0x320f537d...e3D176D3E
80 MATIC
215386332021-11-19 3:18:53860 days ago1637291933
0x320f537d...e3D176D3E
75 MATIC
215064612021-11-18 6:48:56861 days ago1637218136
0x320f537d...e3D176D3E
75 MATIC
211223142021-11-08 7:59:15871 days ago1636358355
0x320f537d...e3D176D3E
75 MATIC
210952692021-11-07 15:43:12872 days ago1636299792
0x320f537d...e3D176D3E
50 MATIC
210875122021-11-07 11:07:31872 days ago1636283251
0x320f537d...e3D176D3E
75 MATIC
208230012021-10-31 14:47:09879 days ago1635691629
0x320f537d...e3D176D3E
300 MATIC
204906592021-10-22 14:50:30888 days ago1634914230
0x320f537d...e3D176D3E
100 MATIC
203537042021-10-18 18:01:17892 days ago1634580077
0x320f537d...e3D176D3E
100 MATIC
203475352021-10-18 13:17:45892 days ago1634563065
0x320f537d...e3D176D3E
75 MATIC
201949582021-10-14 2:54:23896 days ago1634180063
0x320f537d...e3D176D3E
200 MATIC
196606932021-09-29 23:58:49910 days ago1632959929
0x320f537d...e3D176D3E
75 MATIC
194855792021-09-25 5:07:03915 days ago1632546423
0x320f537d...e3D176D3E
75 MATIC
194489742021-09-24 6:51:04916 days ago1632466264
0x320f537d...e3D176D3E
75 MATIC
194216962021-09-23 13:38:29917 days ago1632404309
0x320f537d...e3D176D3E
75 MATIC
194080202021-09-23 4:27:14917 days ago1632371234
0x320f537d...e3D176D3E
2 MATIC
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Polypunk

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-07-03
*/

/**
 *Submitted for verification at polygonscan.com on 2021-07-03
*/

pragma solidity 0.7.6;


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;
}

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 Polypunk is IERC721 {

    using SafeMath for uint256;

    event Mint(uint indexed index, address indexed minter);
    event PunkOffered(uint indexed punkIndex, uint minValue, address indexed toAddress);
    event PunkBidEntered(uint indexed punkIndex, uint value, address indexed fromAddress);
    event PunkBidWithdrawn(uint indexed punkIndex, uint value, address indexed fromAddress);
    event PunkBought(uint indexed punkIndex, uint value, address indexed fromAddress, address indexed toAddress);
    event PunkNoLongerForSale(uint indexed punkIndex);

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

    bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02;

    uint public constant TOKEN_LIMIT = 10000;

    mapping(bytes4 => bool) internal supportedInterfaces;

    mapping (uint256 => address) internal idToOwner;

    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 = "Polypunk";
    string internal nftSymbol = "Polypunk";

    // You can use this hash to verify the image file containing all the punks
    string public imageHash;

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

    address payable internal deployer;
    address payable internal marketer;
    address payable internal developer;
    bool public publicSale = false;
    uint private mintPrice = 75 ether;
    uint public saleStartTime;

    //// 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 payable _marketer, address payable _developer, string memory _imageHash) {
        supportedInterfaces[0x01ffc9a7] = true; // ERC165
        supportedInterfaces[0x80ac58cd] = true; // ERC721
        supportedInterfaces[0x780e9d63] = true; // ERC721 Enumerable
        supportedInterfaces[0x5b5e139f] = true; // ERC721 Metadata
        deployer = msg.sender;
        marketer = _marketer;
        developer = _developer;
        imageHash = _imageHash;
    }

    function startSale() external onlyDeployer {
        require(!publicSale);
        saleStartTime = block.timestamp;
        publicSale = true;
        emit SaleBegins();
    }

    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) public 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);
    }

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

    /**
     * Public sale minting.
     */
    function mint(uint256 numberOfNfts) external payable reentrancyGuard {
        require(publicSale, "Sale not started.");
        require(!marketPaused);
        require(numberOfNfts > 0, "numberOfNfts cannot be 0");
        require(numberOfNfts <= 20, "You can not buy more than 20 NFTs at once");
        require(totalSupply().add(numberOfNfts) <= TOKEN_LIMIT, "Exceeds TOKEN_LIMIT");
        require(mintPrice.mul(numberOfNfts) == msg.value, "eth value sent is not correct");
        
        marketer.transfer(msg.value.div(2));
        developer.transfer(msg.value.div(2));
        
        for (uint i = 0; i < numberOfNfts; i++) {
            numSales++;
            _mint(msg.sender);
        }
        
    }

    function _mint(address _to) 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);
        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 _safeTransfer(address _from,  address _to,  uint256 _tokenId,  bytes memory _data) private 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://polypunks.app/punks/", toString(_tokenId)));
    }

    //// MARKET
    
    struct Offer {
        bool isForSale;
        uint punkIndex;
        address seller;
        uint minValue;          // in ether
        address onlySellTo;     // specify to sell only to a specific person
    }

    struct Bid {
        bool hasBid;
        uint punkIndex;
        address bidder;
        uint value;
    }
    
    // A record of punks that are offered for sale at a specific minimum value, and perhaps to a specific person
    mapping (uint => Offer) public punksOfferedForSale;
    
    // A record of the highest punk bid
    mapping (uint => Bid) public punkBids;

    mapping (address => uint) public pendingWithdrawals;
    
    modifier onlyTokenOwner (uint256 _tokenId) {
        require(_tokenId < 10000, "punk number is wrong");
        require(ownerOf(_tokenId) == msg.sender, "Incorrect owner.");
        _;
    }
    
    function punkNoLongerForSale(uint punkIndex) public reentrancyGuard onlyTokenOwner(punkIndex) {
        _punkNoLongerForSale(punkIndex);
    }
    
    function _punkNoLongerForSale(uint punkIndex) private {
        punksOfferedForSale[punkIndex] = Offer(false, punkIndex, msg.sender, 0, address(0));
        emit PunkNoLongerForSale(punkIndex);
    }

    function offerPunkForSale(uint punkIndex, uint minSalePriceInWei) public reentrancyGuard onlyTokenOwner(punkIndex){
        require(marketPaused == false, 'Market Paused');
        punksOfferedForSale[punkIndex] = Offer(true, punkIndex, msg.sender, minSalePriceInWei, address(0));
        emit PunkOffered(punkIndex, minSalePriceInWei, address(0));
    }

    function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) public reentrancyGuard onlyTokenOwner(punkIndex){
        require(marketPaused == false, 'Market Paused');
        punksOfferedForSale[punkIndex] = Offer(true, punkIndex, msg.sender, minSalePriceInWei, toAddress);
        emit PunkOffered(punkIndex, minSalePriceInWei, toAddress);
    }

    function buyPunk(uint punkIndex) public payable reentrancyGuard{
        require(marketPaused == false, 'Market Paused');
        require(punkIndex < 10000, "punk number is wrong");
        Offer memory offer = punksOfferedForSale[punkIndex];
        require(offer.isForSale, "punk not actually for sale");
        require(offer.onlySellTo == address(0) || offer.onlySellTo == msg.sender, "punk not supposed to be sold to this user");
        require(msg.value >= offer.minValue, "Didn't send enough amount");
        require(ownerOf(punkIndex) == offer.seller, "Seller no longer owner of punk");

        address seller = offer.seller;
        
        _safeTransfer(seller, msg.sender, punkIndex, "");
        _punkNoLongerForSale(punkIndex);
        pendingWithdrawals[seller] += msg.value;
        emit PunkBought(punkIndex, msg.value, seller, msg.sender);

        // Check for the case where there is a bid from the new owner and refund it.
        // Any other bid can stay in place.
        Bid memory bid = punkBids[punkIndex];
        if (bid.bidder == msg.sender) {
            // Kill bid and refund value
            pendingWithdrawals[msg.sender] += bid.value;
            punkBids[punkIndex] = Bid(false, punkIndex, address(0), 0);
        }
    }

    function withdraw() public reentrancyGuard{
        uint amount = pendingWithdrawals[msg.sender];
        // Remember to zero the pending refund before
        // sending to prevent re-entrancy attacks
        pendingWithdrawals[msg.sender] = 0;
        msg.sender.transfer(amount);
    }

    function enterBidForPunk(uint punkIndex) public payable reentrancyGuard{
        require(marketPaused == false, 'Market Paused');
        require(punkIndex < 10000, "punk number is wrong");
        require(ownerOf(punkIndex) !=  msg.sender, 'you can not bid on your punk');
        require(msg.value > 0, 'bid can not be zero');
        Bid memory existing = punkBids[punkIndex];
        require(msg.value > existing.value, "you can not bid lower than last bid");
        if (existing.value > 0) {
            // Refund the failing bid
            pendingWithdrawals[existing.bidder] += existing.value;
        }
        punkBids[punkIndex] = Bid(true, punkIndex, msg.sender, msg.value);
        emit PunkBidEntered(punkIndex, msg.value, msg.sender);
    }

    function acceptBidForPunk(uint punkIndex, uint minPrice) public reentrancyGuard  onlyTokenOwner(punkIndex){
        require(marketPaused == false, 'Market Paused');
        address seller = msg.sender;
        Bid memory bid = punkBids[punkIndex];
        require(bid.value > 0, 'there is not any bid');
        require(bid.value >= minPrice, 'bid is lower than min price');
        
        _punkNoLongerForSale(punkIndex);
        _safeTransfer(seller, bid.bidder, punkIndex, "");
        
        uint amount = bid.value;
        punkBids[punkIndex] = Bid(false, punkIndex, address(0), 0);
        pendingWithdrawals[seller] += amount;
        emit PunkBought(punkIndex, bid.value, seller, bid.bidder);
    }

    function withdrawBidForPunk(uint punkIndex) public reentrancyGuard{
        require(punkIndex < 10000, "punk number is wrong");
        require(ownerOf(punkIndex) != msg.sender, "wrong action");
        require(punkBids[punkIndex].bidder == msg.sender, "Only bidder can withdraw");
        Bid memory bid = punkBids[punkIndex];
        emit PunkBidWithdrawn(punkIndex, bid.value, msg.sender);
        uint amount = bid.value;
        punkBids[punkIndex] = Bid(false, punkIndex, address(0), 0);
        // Refund the bid money
        msg.sender.transfer(amount);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_marketer","type":"address"},{"internalType":"address payable","name":"_developer","type":"address"},{"internalType":"string","name":"_imageHash","type":"string"}],"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":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"punkIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"PunkBidEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"punkIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"PunkBidWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"punkIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"PunkBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"punkIndex","type":"uint256"}],"name":"PunkNoLongerForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"punkIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minValue","type":"uint256"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"PunkOffered","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleBegins","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"},{"inputs":[],"name":"TOKEN_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"punkIndex","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"acceptBidForPunk","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"punkIndex","type":"uint256"}],"name":"buyPunk","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"cancelledOffers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"punkIndex","type":"uint256"}],"name":"enterBidForPunk","outputs":[],"stateMutability":"payable","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":"imageHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"numberOfNfts","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"punkIndex","type":"uint256"},{"internalType":"uint256","name":"minSalePriceInWei","type":"uint256"}],"name":"offerPunkForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"punkIndex","type":"uint256"},{"internalType":"uint256","name":"minSalePriceInWei","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"offerPunkForSaleToAddress","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"punkBids","outputs":[{"internalType":"bool","name":"hasBid","type":"bool"},{"internalType":"uint256","name":"punkIndex","type":"uint256"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"punkIndex","type":"uint256"}],"name":"punkNoLongerForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"punksOfferedForSale","outputs":[{"internalType":"bool","name":"isForSale","type":"bool"},{"internalType":"uint256","name":"punkIndex","type":"uint256"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"minValue","type":"uint256"},{"internalType":"address","name":"onlySellTo","type":"address"}],"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":"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":[],"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":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"punkIndex","type":"uint256"}],"name":"withdrawBidForPunk","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600881526020017f506f6c7970756e6b000000000000000000000000000000000000000000000000815250600690805190602001906200005192919062000424565b506040518060400160405280600881526020017f506f6c7970756e6b000000000000000000000000000000000000000000000000815250600790805190602001906200009f92919062000424565b5060006009556000600a556000600d60146101000a81548160ff021916908315150217905550680410d586a20a4c0000600e556000601055600061272460006101000a81548160ff0219169083151502179055503480156200010057600080fd5b506040516200649b3803806200649b833981810160405260608110156200012657600080fd5b810190808051906020019092919080519060200190929190805160405193929190846401000000008211156200015b57600080fd5b838201915060208201858111156200017257600080fd5b82518660018202830111640100000000821117156200019057600080fd5b8083526020830192505050908051906020019080838360005b83811015620001c6578082015181840152602081019050620001a9565b50505050905090810190601f168015620001f45780820380516001836020036101000a031916815260200191505b5060405250505060016000806301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000806380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008063780e9d6360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600080635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600890805190602001906200041a92919062000424565b50505050620004da565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200045c5760008555620004a8565b82601f106200047757805160ff1916838001178555620004a8565b82800160010185558215620004a8579182015b82811115620004a75782518255916020019190600101906200048a565b5b509050620004b79190620004bb565b5090565b5b80821115620004d6576000816000905550600101620004bc565b5090565b615fb180620004ea6000396000f3fe60806040526004361061023b5760003560e01c80636352211e1161012e578063b6501637116100ab578063c87b56dd1161006f578063c87b56dd14610d9a578063d8f3790f14610e4e578063e985e9c514610eb3578063f3f4370314610f3a578063f6eeff1e14610f9f5761023b565b8063b650163714610bdc578063b66a0e5d14610c09578063b88d4fde14610c20578063bf31196f14610cf0578063c44193c314610d555761023b565b806395d89b41116100f257806395d89b4114610a35578063979bc63814610ac55780639f7bf76214610b00578063a0712d6814610b51578063a22cb46514610b7f5761023b565b80636352211e146108aa57806368bd580e1461090f5780636e743fa91461092657806370a08231146109a25780638264fe9814610a075761023b565b806323b872dd116101bc57806342842e0e1161018057806342842e0e146106e857806344c66be7146107635780634f6ccce71461078e57806351605d80146107dd5780635ec390d81461086d5761023b565b806323b872dd1461058d5780632f745c591461060857806333bc1c5c146106775780633a283bd2146106a45780633ccfd60b146106d15761023b565b8063091dbfd211610203578063091dbfd214610469578063095ea7b31461049757806318160ddd146104f25780631cbaee2d1461051d57806323165b75146105485761023b565b806301ffc9a714610240578063031bd4c4146102b057806306fdde03146102db578063081812fc1461036b578063088f11f3146103d0575b600080fd5b34801561024c57600080fd5b506102986004803603602081101561026357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610fda565b60405180821515815260200191505060405180910390f35b3480156102bc57600080fd5b506102c5611041565b6040518082815260200191505060405180910390f35b3480156102e757600080fd5b506102f0611047565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610330578082015181840152602081019050610315565b50505050905090810190601f16801561035d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037757600080fd5b506103a46004803603602081101561038e57600080fd5b81019080803590602001909291905050506110e9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103dc57600080fd5b50610409600480360360208110156103f357600080fd5b81019080803590602001909291905050506111fe565b6040518086151581526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390f35b6104956004803603602081101561047f57600080fd5b8101908080359060200190929190505050611282565b005b3480156104a357600080fd5b506104f0600480360360408110156104ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061177d565b005b3480156104fe57600080fd5b50610507611ae5565b6040518082815260200191505060405180910390f35b34801561052957600080fd5b50610532611aef565b6040518082815260200191505060405180910390f35b34801561055457600080fd5b5061058b6004803603604081101561056b57600080fd5b810190808035906020019092919080359060200190929190505050611af5565b005b34801561059957600080fd5b50610606600480360360608110156105b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612057565b005b34801561061457600080fd5b506106616004803603604081101561062b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612491565b6040518082815260200191505060405180910390f35b34801561068357600080fd5b5061068c61253e565b60405180821515815260200191505060405180910390f35b3480156106b057600080fd5b506106b9612551565b60405180821515815260200191505060405180910390f35b3480156106dd57600080fd5b506106e6612565565b005b3480156106f457600080fd5b506107616004803603606081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061268d565b005b34801561076f57600080fd5b506107786126ad565b6040518082815260200191505060405180910390f35b34801561079a57600080fd5b506107c7600480360360208110156107b157600080fd5b81019080803590602001909291905050506126cb565b6040518082815260200191505060405180910390f35b3480156107e957600080fd5b506107f26126f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610832578082015181840152602081019050610817565b50505050905090810190601f16801561085f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561087957600080fd5b506108a86004803603602081101561089057600080fd5b81019080803515159060200190929190505050612790565b005b3480156108b657600080fd5b506108e3600480360360208110156108cd57600080fd5b81019080803590602001909291905050506128f5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091b57600080fd5b5061092461299e565b005b34801561093257600080fd5b5061095f6004803603602081101561094957600080fd5b8101908080359060200190929190505050612a7f565b6040518085151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b3480156109ae57600080fd5b506109f1600480360360208110156109c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612add565b6040518082815260200191505060405180910390f35b610a3360048036036020811015610a1d57600080fd5b8101908080359060200190929190505050612b28565b005b348015610a4157600080fd5b50610a4a6132c3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8a578082015181840152602081019050610a6f565b50505050905090810190601f168015610ab75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad157600080fd5b50610afe60048036036020811015610ae857600080fd5b8101908080359060200190929190505050613365565b005b348015610b0c57600080fd5b50610b3960048036036020811015610b2357600080fd5b81019080803590602001909291905050506137cf565b60405180821515815260200191505060405180910390f35b610b7d60048036036020811015610b6757600080fd5b81019080803590602001909291905050506137f0565b005b348015610b8b57600080fd5b50610bda60048036036040811015610ba257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613bfa565b005b348015610be857600080fd5b50610bf1613cf9565b60405180821515815260200191505060405180910390f35b348015610c1557600080fd5b50610c1e613d0d565b005b348015610c2c57600080fd5b50610cee60048036036080811015610c4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610caa57600080fd5b820183602082011115610cbc57600080fd5b80359060200191846001830284011164010000000083111715610cde57600080fd5b9091929391929390505050613e3a565b005b348015610cfc57600080fd5b50610d5360048036036060811015610d1357600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e91565b005b348015610d6157600080fd5b50610d9860048036036040811015610d7857600080fd5b810190808035906020019092919080359060200190929190505050614213565b005b348015610da657600080fd5b50610dd360048036036020811015610dbd57600080fd5b8101908080359060200190929190505050614596565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e13578082015181840152602081019050610df8565b50505050905090810190601f168015610e405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e5a57600080fd5b50610e9d60048036036020811015610e7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614712565b6040518082815260200191505060405180910390f35b348015610ebf57600080fd5b50610f2260048036036040811015610ed657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061472b565b60405180821515815260200191505060405180910390f35b348015610f4657600080fd5b50610f8960048036036020811015610f5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506147bf565b6040518082815260200191505060405180910390f35b348015610fab57600080fd5b50610fd860048036036020811015610fc257600080fd5b81019080803590602001909291905050506147d8565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b61271081565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110df5780601f106110b4576101008083540402835291602001916110df565b820191906000526020600020905b8154815290600101906020018083116110c257829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b6002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6127256020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b61272460009054906101000a900460ff161561129d57600080fd5b600161272460006101000a81548160ff0219169083151502179055506000151561272160009054906101000a900460ff16151514611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b61271081106113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166113da826128f5565b73ffffffffffffffffffffffffffffffffffffffff161415611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f796f752063616e206e6f7420626964206f6e20796f75722070756e6b0000000081525060200191505060405180910390fd5b600034116114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6269642063616e206e6f74206265207a65726f0000000000000000000000000081525060200191505060405180910390fd5b600061272660008381526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815250509050806060015134116115de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615f596023913960400191505060405180910390fd5b6000816060015111156116425780606001516127276000836040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b60405180608001604052806001151581526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200134815250612726600084815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050503373ffffffffffffffffffffffffffffffffffffffff16827f5b859394fabae0c1ba88baffe67e751ab5248d2e879028b8c8d6897b0519f56a346040518082815260200191505060405180910390a350600061272460006101000a81548160ff02191690831515021790555050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118765750600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6118e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f43616e6e6f74206f7065726174652e000000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156119bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611a3057600080fd5b856002600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b6000600954905090565b600f5481565b61272460009054906101000a900460ff1615611b1057600080fd5b600161272460006101000a81548160ff021916908315150217905550816127108110611ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611bc4826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6000151561272160009054906101000a900460ff16151514611cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6000339050600061272660008681526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090506000816060015111611dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f7468657265206973206e6f7420616e792062696400000000000000000000000081525060200191505060405180910390fd5b8381606001511015611e78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f626964206973206c6f776572207468616e206d696e207072696365000000000081525060200191505060405180910390fd5b611e8185614959565b611ea08282604001518760405180602001604052806000815250614aba565b6000816060015190506040518060800160405280600015158152602001878152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250612726600088815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050508061272760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816040015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16877f58e5d5a525e3b40bc15abaa38b5882678db1ee68befd2f60bafe3a7fd06db9e385606001516040518082815260200191505060405180910390a450505050600061272460006101000a81548160ff0219169083151502179055505050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061212857503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806121b95750600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61222b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612302576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f57726f6e672066726f6d20616464726573732e0000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561247e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f742073656e6420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b6124888686614e52565b50505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905082106124e157600080fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061252b57fe5b9060005260206000200154905092915050565b600d60149054906101000a900460ff1681565b61272160009054906101000a900460ff1681565b61272460009054906101000a900460ff161561258057600080fd5b600161272460006101000a81548160ff021916908315150217905550600061272760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061272760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561266d573d6000803e3d6000fd5b5050600061272460006101000a81548160ff021916908315150217905550565b6126a883838360405180602001604052806000815250614f07565b505050565b60006126c6600a5461271061547590919063ffffffff16565b905090565b60008082101580156126de575061271082105b6126e757600080fd5b600182019050919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127885780601f1061275d57610100808354040283529160200191612788565b820191906000526020600020905b81548152906001019060200180831161276b57829003601f168201915b505050505081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b61272160019054906101000a900460ff16156128d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f436f6e7472616374207365616c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b8061272160006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561296357600080fd5b6001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600161272160016101000a81548160ff021916908315150217905550565b6127266020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905084565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1857600080fd5b612b218261548f565b9050919050565b61272460009054906101000a900460ff1615612b4357600080fd5b600161272460006101000a81548160ff0219169083151502179055506000151561272160009054906101000a900460ff16151514612be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6127108110612c60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b600061272560008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508060000151612dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f70756e6b206e6f742061637475616c6c7920666f722073616c6500000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff161480612e4357503373ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff16145b612e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f076029913960400191505060405180910390fd5b8060600151341015612f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4469646e27742073656e6420656e6f75676820616d6f756e740000000000000081525060200191505060405180910390fd5b806040015173ffffffffffffffffffffffffffffffffffffffff16612f36836128f5565b73ffffffffffffffffffffffffffffffffffffffff1614612fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f53656c6c6572206e6f206c6f6e676572206f776e6572206f662070756e6b000081525060200191505060405180910390fd5b600081604001519050612fe381338560405180602001604052806000815250614aba565b612fec83614959565b3461272760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847f58e5d5a525e3b40bc15abaa38b5882678db1ee68befd2f60bafe3a7fd06db9e3346040518082815260200191505060405180910390a4600061272660008581526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614156132a157806060015161272760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506040518060800160405280600015158152602001858152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250612726600086815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050505b505050600061272460006101000a81548160ff02191690831515021790555050565b606060078054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561335b5780601f106133305761010080835404028352916020019161335b565b820191906000526020600020905b81548152906001019060200180831161333e57829003601f168201915b5050505050905090565b61272460009054906101000a900460ff161561338057600080fd5b600161272460006101000a81548160ff0219169083151502179055506127108110613413576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16613433826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614156134bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720616374696f6e000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16612726600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613595576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4f6e6c79206269646465722063616e207769746864726177000000000000000081525060200191505060405180910390fd5b600061272660008381526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090503373ffffffffffffffffffffffffffffffffffffffff16827f6f30e1ee4d81dcc7a8a478577f65d2ed2edb120565960ac45fe7c50551c8793283606001516040518082815260200191505060405180910390a36000816060015190506040518060800160405280600015158152602001848152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250612726600085815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137ad573d6000803e3d6000fd5b505050600061272460006101000a81548160ff02191690831515021790555050565b6127236020528060005260406000206000915054906101000a900460ff1681565b61272460009054906101000a900460ff161561380b57600080fd5b600161272460006101000a81548160ff021916908315150217905550600d60149054906101000a900460ff166138a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f53616c65206e6f7420737461727465642e00000000000000000000000000000081525060200191505060405180910390fd5b61272160009054906101000a900460ff16156138c457600080fd5b6000811161393a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d6265724f664e6674732063616e6e6f742062652030000000000000000081525060200191505060405180910390fd5b6014811115613994576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f306029913960400191505060405180910390fd5b6127106139b1826139a3611ae5565b6154db90919063ffffffff16565b1115613a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4578636565647320544f4b454e5f4c494d49540000000000000000000000000081525060200191505060405180910390fd5b34613a3b82600e546154f590919063ffffffff16565b14613aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6574682076616c75652073656e74206973206e6f7420636f727265637400000081525060200191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613afe60023461552990919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b29573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613b7a60023461552990919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613ba5573d6000803e3d6000fd5b5060005b81811015613bda57600a60008154809291906001019190505550613bcc3361553d565b508080600101915050613ba9565b50600061272460006101000a81548160ff02191690831515021790555050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61272160019054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600d60149054906101000a900460ff1615613dea57600080fd5b42600f819055506001600d60146101000a81548160ff0219169083151502179055507f771cfe172460b7d64cc46cca57a1e1f40f52b47cf1d16fe30c78a2935b3dd58060405160405180910390a1565b613e8a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614f07565b5050505050565b61272460009054906101000a900460ff1615613eac57600080fd5b600161272460006101000a81548160ff021916908315150217905550826127108110613f40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16613f60826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614613fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6000151561272160009054906101000a900460ff16151514614073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060a001604052806001151581526020018581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815250612725600086815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508173ffffffffffffffffffffffffffffffffffffffff16847f3c7b682d5da98001a9b8cbda6c647d2c63d698a4184fd1d55e2ce7b66f5d21eb856040518082815260200191505060405180910390a350600061272460006101000a81548160ff021916908315150217905550505050565b61272460009054906101000a900460ff161561422e57600080fd5b600161272460006101000a81548160ff0219169083151502179055508161271081106142c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166142e2826128f5565b73ffffffffffffffffffffffffffffffffffffffff161461436b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6000151561272160009054906101000a900460ff161515146143f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060a001604052806001151581526020018481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001838152602001600073ffffffffffffffffffffffffffffffffffffffff16815250612725600085815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600073ffffffffffffffffffffffffffffffffffffffff16837f3c7b682d5da98001a9b8cbda6c647d2c63d698a4184fd1d55e2ce7b66f5d21eb846040518082815260200191505060405180910390a350600061272460006101000a81548160ff0219169083151502179055505050565b606081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561466f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b61467883615725565b60405160200180807f68747470733a2f2f706f6c7970756e6b732e6170702f70756e6b732f00000000815250601c0182805190602001908083835b602083106146d657805182526020820191506020810190506020830392506146b3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052915050919050565b6127226020528060005260406000206000915090505481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127276020528060005260406000206000915090505481565b61272460009054906101000a900460ff16156147f357600080fd5b600161272460006101000a81548160ff021916908315150217905550806127108110614887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166148a7826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614614930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b61493982614959565b50600061272460006101000a81548160ff02191690831515021790555050565b6040518060a001604052806000151581526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815250612725600083815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050807fb0e0a660b4e50f26f0b7ce75c24655fc76cc66e3334a54ff410277229fa10bd460405160405180910390a250565b81600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415614ca457600080fd5b614cae8585614e52565b614cb78561586c565b15614e4a5760008573ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614d6b578082015181840152602081019050614d50565b50505050905090810190601f168015614d985780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015614dba57600080fd5b505af1158015614dce573d6000803e3d6000fd5b505050506040513d6020811015614de457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614e4857600080fd5b505b505050505050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614e938261587f565b614e9d8183615920565b614ea78383615bd3565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480614fd857503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806150695750600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6150db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b83600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156151b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461528b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156152c557600080fd5b6152cf8787614e52565b6152d88761586c565b1561546b5760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561538c578082015181840152602081019050615371565b50505050905090810190601f1680156153b95780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156153db57600080fd5b505af11580156153ef573d6000803e3d6000fd5b505050506040513d602081101561540557600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461546957600080fd5b505b5050505050505050565b60008282111561548457600080fd5b818303905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60008183019050828110156154ef57600080fd5b92915050565b6000808314156155085760009050615523565b81830290508183828161551757fe5b041461552257600080fd5b5b92915050565b600081838161553457fe5b04905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156155e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f74206d696e7420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b6127106009541061565a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f6b656e206c696d697420726561636865642e00000000000000000000000081525060200191505060405180910390fd5b6000615664615dd1565b905060016009540160098190555061567c8382615bd3565b8273ffffffffffffffffffffffffffffffffffffffff16817ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010260405160405180910390a3808373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480915050919050565b6060600082141561576d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050615867565b600082905060005b60008214615797578080600101915050600a828161578f57fe5b049150615775565b60008167ffffffffffffffff811180156157b057600080fd5b506040519080825280601f01601f1916602001820160405280156157e35781602001600182028036833780820191505090505b50905060006001830390508593505b6000841461585f57600a848161580457fe5b0660300160f81b8282806001900393508151811061581e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a848161585757fe5b0493506157f2565b819450505050505b919050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461591d576002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146159f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6001600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600560008381526020019081526020016000205490506000615a9a6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061547590919063ffffffff16565b9050818114615b6f576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110615aef57fe5b9060005260206000200154905080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110615b4757fe5b9060005260206000200181905550826005600083815260200190815260200160002081905550505b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480615bb757fe5b6001900381819060005260206000200160009055905550505050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f43616e6e6f74206164642c20616c7265616479206f776e65642e00000000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055615db66001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061547590919063ffffffff16565b60056000838152602001908152602001600020819055505050565b600080600954612710039050600081601054334442604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c81615e4457fe5b0690506000806011836127108110615e5857fe5b015414615e76576011826127108110615e6d57fe5b01549050615e7a565b8190505b60006011600185036127108110615e8d57fe5b01541415615eb157600183036011836127108110615ea757fe5b0181905550615ed8565b6011600184036127108110615ec257fe5b01546011836127108110615ed257fe5b01819055505b601060008154809291906001019190505550615efe6001826154db90919063ffffffff16565b93505050509056fe70756e6b206e6f7420737570706f73656420746f20626520736f6c6420746f20746869732075736572596f752063616e206e6f7420627579206d6f7265207468616e203230204e465473206174206f6e6365796f752063616e206e6f7420626964206c6f776572207468616e206c61737420626964a26469706673582212206365ce7d27e517e7fd10e2b943aabe7f40a8956ee15dc957bf850757c2a76a9464736f6c6343000706003300000000000000000000000050492711c39cda016774ed0ebb3125633e4125e2000000000000000000000000e199659366c5eb279434f1f6bee721a3ee1d202a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004061633339616634373933313139656534366262666633353164386362366235663233646136303232323132366164643432363865323631313939613239323162

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80636352211e1161012e578063b6501637116100ab578063c87b56dd1161006f578063c87b56dd14610d9a578063d8f3790f14610e4e578063e985e9c514610eb3578063f3f4370314610f3a578063f6eeff1e14610f9f5761023b565b8063b650163714610bdc578063b66a0e5d14610c09578063b88d4fde14610c20578063bf31196f14610cf0578063c44193c314610d555761023b565b806395d89b41116100f257806395d89b4114610a35578063979bc63814610ac55780639f7bf76214610b00578063a0712d6814610b51578063a22cb46514610b7f5761023b565b80636352211e146108aa57806368bd580e1461090f5780636e743fa91461092657806370a08231146109a25780638264fe9814610a075761023b565b806323b872dd116101bc57806342842e0e1161018057806342842e0e146106e857806344c66be7146107635780634f6ccce71461078e57806351605d80146107dd5780635ec390d81461086d5761023b565b806323b872dd1461058d5780632f745c591461060857806333bc1c5c146106775780633a283bd2146106a45780633ccfd60b146106d15761023b565b8063091dbfd211610203578063091dbfd214610469578063095ea7b31461049757806318160ddd146104f25780631cbaee2d1461051d57806323165b75146105485761023b565b806301ffc9a714610240578063031bd4c4146102b057806306fdde03146102db578063081812fc1461036b578063088f11f3146103d0575b600080fd5b34801561024c57600080fd5b506102986004803603602081101561026357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610fda565b60405180821515815260200191505060405180910390f35b3480156102bc57600080fd5b506102c5611041565b6040518082815260200191505060405180910390f35b3480156102e757600080fd5b506102f0611047565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610330578082015181840152602081019050610315565b50505050905090810190601f16801561035d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037757600080fd5b506103a46004803603602081101561038e57600080fd5b81019080803590602001909291905050506110e9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103dc57600080fd5b50610409600480360360208110156103f357600080fd5b81019080803590602001909291905050506111fe565b6040518086151581526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390f35b6104956004803603602081101561047f57600080fd5b8101908080359060200190929190505050611282565b005b3480156104a357600080fd5b506104f0600480360360408110156104ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061177d565b005b3480156104fe57600080fd5b50610507611ae5565b6040518082815260200191505060405180910390f35b34801561052957600080fd5b50610532611aef565b6040518082815260200191505060405180910390f35b34801561055457600080fd5b5061058b6004803603604081101561056b57600080fd5b810190808035906020019092919080359060200190929190505050611af5565b005b34801561059957600080fd5b50610606600480360360608110156105b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612057565b005b34801561061457600080fd5b506106616004803603604081101561062b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612491565b6040518082815260200191505060405180910390f35b34801561068357600080fd5b5061068c61253e565b60405180821515815260200191505060405180910390f35b3480156106b057600080fd5b506106b9612551565b60405180821515815260200191505060405180910390f35b3480156106dd57600080fd5b506106e6612565565b005b3480156106f457600080fd5b506107616004803603606081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061268d565b005b34801561076f57600080fd5b506107786126ad565b6040518082815260200191505060405180910390f35b34801561079a57600080fd5b506107c7600480360360208110156107b157600080fd5b81019080803590602001909291905050506126cb565b6040518082815260200191505060405180910390f35b3480156107e957600080fd5b506107f26126f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610832578082015181840152602081019050610817565b50505050905090810190601f16801561085f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561087957600080fd5b506108a86004803603602081101561089057600080fd5b81019080803515159060200190929190505050612790565b005b3480156108b657600080fd5b506108e3600480360360208110156108cd57600080fd5b81019080803590602001909291905050506128f5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091b57600080fd5b5061092461299e565b005b34801561093257600080fd5b5061095f6004803603602081101561094957600080fd5b8101908080359060200190929190505050612a7f565b6040518085151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b3480156109ae57600080fd5b506109f1600480360360208110156109c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612add565b6040518082815260200191505060405180910390f35b610a3360048036036020811015610a1d57600080fd5b8101908080359060200190929190505050612b28565b005b348015610a4157600080fd5b50610a4a6132c3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8a578082015181840152602081019050610a6f565b50505050905090810190601f168015610ab75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad157600080fd5b50610afe60048036036020811015610ae857600080fd5b8101908080359060200190929190505050613365565b005b348015610b0c57600080fd5b50610b3960048036036020811015610b2357600080fd5b81019080803590602001909291905050506137cf565b60405180821515815260200191505060405180910390f35b610b7d60048036036020811015610b6757600080fd5b81019080803590602001909291905050506137f0565b005b348015610b8b57600080fd5b50610bda60048036036040811015610ba257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613bfa565b005b348015610be857600080fd5b50610bf1613cf9565b60405180821515815260200191505060405180910390f35b348015610c1557600080fd5b50610c1e613d0d565b005b348015610c2c57600080fd5b50610cee60048036036080811015610c4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610caa57600080fd5b820183602082011115610cbc57600080fd5b80359060200191846001830284011164010000000083111715610cde57600080fd5b9091929391929390505050613e3a565b005b348015610cfc57600080fd5b50610d5360048036036060811015610d1357600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e91565b005b348015610d6157600080fd5b50610d9860048036036040811015610d7857600080fd5b810190808035906020019092919080359060200190929190505050614213565b005b348015610da657600080fd5b50610dd360048036036020811015610dbd57600080fd5b8101908080359060200190929190505050614596565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e13578082015181840152602081019050610df8565b50505050905090810190601f168015610e405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e5a57600080fd5b50610e9d60048036036020811015610e7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614712565b6040518082815260200191505060405180910390f35b348015610ebf57600080fd5b50610f2260048036036040811015610ed657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061472b565b60405180821515815260200191505060405180910390f35b348015610f4657600080fd5b50610f8960048036036020811015610f5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506147bf565b6040518082815260200191505060405180910390f35b348015610fab57600080fd5b50610fd860048036036020811015610fc257600080fd5b81019080803590602001909291905050506147d8565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b61271081565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110df5780601f106110b4576101008083540402835291602001916110df565b820191906000526020600020905b8154815290600101906020018083116110c257829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b6002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6127256020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b61272460009054906101000a900460ff161561129d57600080fd5b600161272460006101000a81548160ff0219169083151502179055506000151561272160009054906101000a900460ff16151514611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b61271081106113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166113da826128f5565b73ffffffffffffffffffffffffffffffffffffffff161415611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f796f752063616e206e6f7420626964206f6e20796f75722070756e6b0000000081525060200191505060405180910390fd5b600034116114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6269642063616e206e6f74206265207a65726f0000000000000000000000000081525060200191505060405180910390fd5b600061272660008381526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815250509050806060015134116115de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615f596023913960400191505060405180910390fd5b6000816060015111156116425780606001516127276000836040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b60405180608001604052806001151581526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200134815250612726600084815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050503373ffffffffffffffffffffffffffffffffffffffff16827f5b859394fabae0c1ba88baffe67e751ab5248d2e879028b8c8d6897b0519f56a346040518082815260200191505060405180910390a350600061272460006101000a81548160ff02191690831515021790555050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118765750600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6118e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f43616e6e6f74206f7065726174652e000000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156119bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611a3057600080fd5b856002600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b6000600954905090565b600f5481565b61272460009054906101000a900460ff1615611b1057600080fd5b600161272460006101000a81548160ff021916908315150217905550816127108110611ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611bc4826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6000151561272160009054906101000a900460ff16151514611cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6000339050600061272660008681526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090506000816060015111611dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f7468657265206973206e6f7420616e792062696400000000000000000000000081525060200191505060405180910390fd5b8381606001511015611e78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f626964206973206c6f776572207468616e206d696e207072696365000000000081525060200191505060405180910390fd5b611e8185614959565b611ea08282604001518760405180602001604052806000815250614aba565b6000816060015190506040518060800160405280600015158152602001878152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250612726600088815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050508061272760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816040015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16877f58e5d5a525e3b40bc15abaa38b5882678db1ee68befd2f60bafe3a7fd06db9e385606001516040518082815260200191505060405180910390a450505050600061272460006101000a81548160ff0219169083151502179055505050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061212857503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806121b95750600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61222b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612302576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f57726f6e672066726f6d20616464726573732e0000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561247e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f742073656e6420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b6124888686614e52565b50505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905082106124e157600080fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061252b57fe5b9060005260206000200154905092915050565b600d60149054906101000a900460ff1681565b61272160009054906101000a900460ff1681565b61272460009054906101000a900460ff161561258057600080fd5b600161272460006101000a81548160ff021916908315150217905550600061272760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061272760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561266d573d6000803e3d6000fd5b5050600061272460006101000a81548160ff021916908315150217905550565b6126a883838360405180602001604052806000815250614f07565b505050565b60006126c6600a5461271061547590919063ffffffff16565b905090565b60008082101580156126de575061271082105b6126e757600080fd5b600182019050919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127885780601f1061275d57610100808354040283529160200191612788565b820191906000526020600020905b81548152906001019060200180831161276b57829003601f168201915b505050505081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b61272160019054906101000a900460ff16156128d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f436f6e7472616374207365616c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b8061272160006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561296357600080fd5b6001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600161272160016101000a81548160ff021916908315150217905550565b6127266020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905084565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1857600080fd5b612b218261548f565b9050919050565b61272460009054906101000a900460ff1615612b4357600080fd5b600161272460006101000a81548160ff0219169083151502179055506000151561272160009054906101000a900460ff16151514612be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6127108110612c60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b600061272560008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508060000151612dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f70756e6b206e6f742061637475616c6c7920666f722073616c6500000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff161480612e4357503373ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff16145b612e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f076029913960400191505060405180910390fd5b8060600151341015612f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4469646e27742073656e6420656e6f75676820616d6f756e740000000000000081525060200191505060405180910390fd5b806040015173ffffffffffffffffffffffffffffffffffffffff16612f36836128f5565b73ffffffffffffffffffffffffffffffffffffffff1614612fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f53656c6c6572206e6f206c6f6e676572206f776e6572206f662070756e6b000081525060200191505060405180910390fd5b600081604001519050612fe381338560405180602001604052806000815250614aba565b612fec83614959565b3461272760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847f58e5d5a525e3b40bc15abaa38b5882678db1ee68befd2f60bafe3a7fd06db9e3346040518082815260200191505060405180910390a4600061272660008581526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614156132a157806060015161272760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506040518060800160405280600015158152602001858152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250612726600086815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050505b505050600061272460006101000a81548160ff02191690831515021790555050565b606060078054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561335b5780601f106133305761010080835404028352916020019161335b565b820191906000526020600020905b81548152906001019060200180831161333e57829003601f168201915b5050505050905090565b61272460009054906101000a900460ff161561338057600080fd5b600161272460006101000a81548160ff0219169083151502179055506127108110613413576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16613433826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614156134bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720616374696f6e000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16612726600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613595576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4f6e6c79206269646465722063616e207769746864726177000000000000000081525060200191505060405180910390fd5b600061272660008381526020019081526020016000206040518060800160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090503373ffffffffffffffffffffffffffffffffffffffff16827f6f30e1ee4d81dcc7a8a478577f65d2ed2edb120565960ac45fe7c50551c8793283606001516040518082815260200191505060405180910390a36000816060015190506040518060800160405280600015158152602001848152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250612726600085815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301559050503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137ad573d6000803e3d6000fd5b505050600061272460006101000a81548160ff02191690831515021790555050565b6127236020528060005260406000206000915054906101000a900460ff1681565b61272460009054906101000a900460ff161561380b57600080fd5b600161272460006101000a81548160ff021916908315150217905550600d60149054906101000a900460ff166138a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f53616c65206e6f7420737461727465642e00000000000000000000000000000081525060200191505060405180910390fd5b61272160009054906101000a900460ff16156138c457600080fd5b6000811161393a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d6265724f664e6674732063616e6e6f742062652030000000000000000081525060200191505060405180910390fd5b6014811115613994576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615f306029913960400191505060405180910390fd5b6127106139b1826139a3611ae5565b6154db90919063ffffffff16565b1115613a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4578636565647320544f4b454e5f4c494d49540000000000000000000000000081525060200191505060405180910390fd5b34613a3b82600e546154f590919063ffffffff16565b14613aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6574682076616c75652073656e74206973206e6f7420636f727265637400000081525060200191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613afe60023461552990919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b29573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613b7a60023461552990919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613ba5573d6000803e3d6000fd5b5060005b81811015613bda57600a60008154809291906001019190505550613bcc3361553d565b508080600101915050613ba9565b50600061272460006101000a81548160ff02191690831515021790555050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61272160019054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f6e6c79206465706c6f7965722e00000000000000000000000000000000000081525060200191505060405180910390fd5b600d60149054906101000a900460ff1615613dea57600080fd5b42600f819055506001600d60146101000a81548160ff0219169083151502179055507f771cfe172460b7d64cc46cca57a1e1f40f52b47cf1d16fe30c78a2935b3dd58060405160405180910390a1565b613e8a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614f07565b5050505050565b61272460009054906101000a900460ff1615613eac57600080fd5b600161272460006101000a81548160ff021916908315150217905550826127108110613f40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16613f60826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614613fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6000151561272160009054906101000a900460ff16151514614073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060a001604052806001151581526020018581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815250612725600086815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508173ffffffffffffffffffffffffffffffffffffffff16847f3c7b682d5da98001a9b8cbda6c647d2c63d698a4184fd1d55e2ce7b66f5d21eb856040518082815260200191505060405180910390a350600061272460006101000a81548160ff021916908315150217905550505050565b61272460009054906101000a900460ff161561422e57600080fd5b600161272460006101000a81548160ff0219169083151502179055508161271081106142c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166142e2826128f5565b73ffffffffffffffffffffffffffffffffffffffff161461436b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6000151561272160009054906101000a900460ff161515146143f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d61726b6574205061757365640000000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060a001604052806001151581526020018481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001838152602001600073ffffffffffffffffffffffffffffffffffffffff16815250612725600085815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600073ffffffffffffffffffffffffffffffffffffffff16837f3c7b682d5da98001a9b8cbda6c647d2c63d698a4184fd1d55e2ce7b66f5d21eb846040518082815260200191505060405180910390a350600061272460006101000a81548160ff0219169083151502179055505050565b606081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561466f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b61467883615725565b60405160200180807f68747470733a2f2f706f6c7970756e6b732e6170702f70756e6b732f00000000815250601c0182805190602001908083835b602083106146d657805182526020820191506020810190506020830392506146b3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052915050919050565b6127226020528060005260406000206000915090505481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127276020528060005260406000206000915090505481565b61272460009054906101000a900460ff16156147f357600080fd5b600161272460006101000a81548160ff021916908315150217905550806127108110614887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f70756e6b206e756d6265722069732077726f6e6700000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166148a7826128f5565b73ffffffffffffffffffffffffffffffffffffffff1614614930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b61493982614959565b50600061272460006101000a81548160ff02191690831515021790555050565b6040518060a001604052806000151581526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815250612725600083815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050807fb0e0a660b4e50f26f0b7ce75c24655fc76cc66e3334a54ff410277229fa10bd460405160405180910390a250565b81600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415614ca457600080fd5b614cae8585614e52565b614cb78561586c565b15614e4a5760008573ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614d6b578082015181840152602081019050614d50565b50505050905090810190601f168015614d985780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015614dba57600080fd5b505af1158015614dce573d6000803e3d6000fd5b505050506040513d6020811015614de457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614e4857600080fd5b505b505050505050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614e938261587f565b614e9d8183615920565b614ea78383615bd3565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480614fd857503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806150695750600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6150db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b83600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156151b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461528b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156152c557600080fd5b6152cf8787614e52565b6152d88761586c565b1561546b5760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561538c578082015181840152602081019050615371565b50505050905090810190601f1680156153b95780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156153db57600080fd5b505af11580156153ef573d6000803e3d6000fd5b505050506040513d602081101561540557600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461546957600080fd5b505b5050505050505050565b60008282111561548457600080fd5b818303905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60008183019050828110156154ef57600080fd5b92915050565b6000808314156155085760009050615523565b81830290508183828161551757fe5b041461552257600080fd5b5b92915050565b600081838161553457fe5b04905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156155e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f74206d696e7420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b6127106009541061565a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f6b656e206c696d697420726561636865642e00000000000000000000000081525060200191505060405180910390fd5b6000615664615dd1565b905060016009540160098190555061567c8382615bd3565b8273ffffffffffffffffffffffffffffffffffffffff16817ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010260405160405180910390a3808373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480915050919050565b6060600082141561576d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050615867565b600082905060005b60008214615797578080600101915050600a828161578f57fe5b049150615775565b60008167ffffffffffffffff811180156157b057600080fd5b506040519080825280601f01601f1916602001820160405280156157e35781602001600182028036833780820191505090505b50905060006001830390508593505b6000841461585f57600a848161580457fe5b0660300160f81b8282806001900393508151811061581e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a848161585757fe5b0493506157f2565b819450505050505b919050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461591d576002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146159f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6001600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600560008381526020019081526020016000205490506000615a9a6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061547590919063ffffffff16565b9050818114615b6f576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110615aef57fe5b9060005260206000200154905080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110615b4757fe5b9060005260206000200181905550826005600083815260200190815260200160002081905550505b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480615bb757fe5b6001900381819060005260206000200160009055905550505050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f43616e6e6f74206164642c20616c7265616479206f776e65642e00000000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055615db66001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061547590919063ffffffff16565b60056000838152602001908152602001600020819055505050565b600080600954612710039050600081601054334442604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c81615e4457fe5b0690506000806011836127108110615e5857fe5b015414615e76576011826127108110615e6d57fe5b01549050615e7a565b8190505b60006011600185036127108110615e8d57fe5b01541415615eb157600183036011836127108110615ea757fe5b0181905550615ed8565b6011600184036127108110615ec257fe5b01546011836127108110615ed257fe5b01819055505b601060008154809291906001019190505550615efe6001826154db90919063ffffffff16565b93505050509056fe70756e6b206e6f7420737570706f73656420746f20626520736f6c6420746f20746869732075736572596f752063616e206e6f7420627579206d6f7265207468616e203230204e465473206174206f6e6365796f752063616e206e6f7420626964206c6f776572207468616e206c61737420626964a26469706673582212206365ce7d27e517e7fd10e2b943aabe7f40a8956ee15dc957bf850757c2a76a9464736f6c63430007060033

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

00000000000000000000000050492711c39cda016774ed0ebb3125633e4125e2000000000000000000000000e199659366c5eb279434f1f6bee721a3ee1d202a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004061633339616634373933313139656534366262666633353164386362366235663233646136303232323132366164643432363865323631313939613239323162

-----Decoded View---------------
Arg [0] : _marketer (address): 0x50492711c39cDA016774ed0eBb3125633E4125e2
Arg [1] : _developer (address): 0xE199659366C5Eb279434f1f6beE721A3ee1d202a
Arg [2] : _imageHash (string): ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000050492711c39cda016774ed0ebb3125633e4125e2
Arg [1] : 000000000000000000000000e199659366c5eb279434f1f6bee721a3ee1d202a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [4] : 6163333961663437393331313965653436626266663335316438636236623566
Arg [5] : 3233646136303232323132366164643432363865323631313939613239323162


Deployed Bytecode Sourcemap

2598:18882:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6917:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3348:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15054:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8684:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16245:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19385:769;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7770:320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13780:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4241:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20162:725;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7415:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14039:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4164:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4399:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19083:294;;;;;;;;;;;;;:::i;:::-;;7255:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10135:106;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13876:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3942:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6341:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8495:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6502:86;;;;;;;;;;;;;:::i;:::-;;16349:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8320:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17789:1286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15274:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20895:578;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4516:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10296:732;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8098:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4430:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6153:180;;;;;;;;;;;;;:::i;:::-;;7070:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17397:384;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17031:358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15550:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4463:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8843:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16395:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16665:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6917:145;6997:4;7021:19;:33;7041:12;7021:33;;;;;;;;;;;;;;;;;;;;;;;;;;;7014:40;;6917:145;;;:::o;3348:40::-;3383:5;3348:40;:::o;15054:94::-;15093:19;15133:7;15125:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15054:94;:::o;8684:151::-;8778:7;8759:8;5610:1;5579:33;;:9;:19;5589:8;5579:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5571:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8805:12:::1;:22;8818:8;8805:22;;;;;;;;;;;;;;;;;;;;;8798:29;;8684:151:::0;;;;:::o;16245:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19385:769::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;19491:5:::1;19475:21;;:12;;;;;;;;;;;:21;;;19467:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19545:5;19533:9;:17;19525:50;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19617:10;19594:33;;:18;19602:9;19594:7;:18::i;:::-;:33;;;;19586:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19691:1;19679:9;:13;19671:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19727:19;19749:8;:19;19758:9;19749:19;;;;;;;;;;;19727:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;19799:8;:14;;;19787:9;:26;19779:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19885:1;19868:8;:14;;;:18;19864:143;;;19981:8;:14;;;19942:18;:35;19961:8;:15;;;19942:35;;;;;;;;;;;;;;;;:53;;;;;;;;;;;19864:143;20039:43;;;;;;;;20043:4;20039:43;;;;;;20049:9;20039:43;;;;20060:10;20039:43;;;;;;20072:9;20039:43;;::::0;20017:8:::1;:19;20026:9;20017:19;;;;;;;;;;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20135:10;20098:48;;20113:9;20098:48;20124:9;20098:48;;;;;;;;;;;;;;;;;;4930:1;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;19385:769;:::o;7770:320::-;7853:8;5029:18;5050:9;:19;5060:8;5050:19;;;;;;;;;;;;;;;;;;;;;5029:40;;5102:10;5088:24;;:10;:24;;;:68;;;;5116:16;:28;5133:10;5116:28;;;;;;;;;;;;;;;:40;5145:10;5116:40;;;;;;;;;;;;;;;;;;;;;;;;;5088:68;5080:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7876:8:::1;5610:1;5579:33;;:9;:19;5589:8;5579:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5571:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;7897:18:::2;7918:9;:19;7928:8;7918:19;;;;;;;;;;;;;;;;;;;;;7897:40;;7969:10;7956:23;;:9;:23;;;;7948:32;;;::::0;::::2;;8016:9;7991:12;:22;8004:8;7991:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;8073:8;8062:9;8041:41;;8050:10;8041:41;;;;;;;;;;;;5642:1;5187::::1;7770:320:::0;;;;:::o;13780:88::-;13824:7;13851:9;;13844:16;;13780:88;:::o;4241:25::-;;;;:::o;20162:725::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;20258:9:::1;16532:5;16521:8;:16;16513:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16602:10;16581:31;;:17;16589:8;16581:7;:17::i;:::-;:31;;;16573:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20303:5:::2;20287:21;;:12;;;;;;;;;;;:21;;;20279:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;20337:14;20354:10;20337:27;;20375:14;20392:8;:19;20401:9;20392:19;;;;;;;;;;;20375:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;20442:1;20430:3;:9;;;:13;20422:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;20500:8;20487:3;:9;;;:21;;20479:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;20561:31;20582:9;20561:20;:31::i;:::-;20603:48;20617:6;20625:3;:10;;;20637:9;20603:48;;;;;;;;;;;::::0;:13:::2;:48::i;:::-;20672:11;20686:3;:9;;;20672:23;;20728:36;;;;;;;;20732:5;20728:36;;;;;;20739:9;20728:36;;;;20758:1;20728:36;;;;;;20762:1;20728:36;;::::0;20706:8:::2;:19;20715:9;20706:19;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20805:6;20775:18;:26;20794:6;20775:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;20868:3;:10;;;20827:52;;20860:6;20827:52;;20838:9;20827:52;20849:3;:9;;;20827:52;;;;;;;;;;;;;;;;;;16644:1;;;4930::::1;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;20162:725;;:::o;7415:347::-;7513:8;5254:18;5275:9;:19;5285:8;5275:19;;;;;;;;;;;;;;;;;;;;;5254:40;;5341:10;5327:24;;:10;:24;;;:77;;;;5394:10;5368:36;;:12;:22;5381:8;5368:22;;;;;;;;;;;;;;;;;;;;;:36;;;5327:77;:134;;;;5421:16;:28;5438:10;5421:28;;;;;;;;;;;;;;;:40;5450:10;5421:40;;;;;;;;;;;;;;;;;;;;;;;;;5327:134;5305:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7536:8:::1;5610:1;5579:33;;:9;:19;5589:8;5579:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5571:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;7557:18:::2;7578:9;:19;7588:8;7578:19;;;;;;;;;;;;;;;;;;;;;7557:40;;7630:5;7616:19;;:10;:19;;;7608:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;7693:1;7678:17;;:3;:17;;;;7670:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;7730:24;7740:3;7745:8;7730:9;:24::i;:::-;5642:1;5503::::1;7415:347:::0;;;;;:::o;14039:199::-;14123:7;14160:10;:18;14171:6;14160:18;;;;;;;;;;;;;;;:25;;;;14151:6;:34;14143:43;;;;;;14204:10;:18;14215:6;14204:18;;;;;;;;;;;;;;;14223:6;14204:26;;;;;;;;;;;;;;;;14197:33;;14039:199;;;;:::o;4164:30::-;;;;;;;;;;;;;:::o;4399:24::-;;;;;;;;;;;;;:::o;19083:294::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;19136:11:::1;19150:18;:30;19169:10;19150:30;;;;;;;;;;;;;;;;19136:44;;19330:1;19297:18;:30;19316:10;19297:30;;;;;;;;;;;;;;;:34;;;;19342:10;:19;;:27;19362:6;19342:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4930:1;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;19083:294::o;7255:152::-;7356:43;7374:5;7381:3;7386:8;7356:43;;;;;;;;;;;;:17;:43::i;:::-;7255:152;;;:::o;10135:106::-;10184:4;10208:25;10224:8;;3383:5;10208:15;;:25;;;;:::i;:::-;10201:32;;10135:106;:::o;13876:155::-;13934:7;13971:1;13962:5;:10;;:33;;;;;3383:5;13976;:19;13962:33;13954:42;;;;;;14022:1;14014:5;:9;14007:16;;13876:155;;;:::o;3942:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6341:153::-;4630:8;;;;;;;;;;;4616:22;;:10;:22;;;4608:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6418:14:::1;;;;;;;;;;;6417:15;6409:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6479:7;6464:12;;:22;;;;;;;;;;;;;;;;;;6341:153:::0;:::o;8495:181::-;8560:14;8626:1;8595:33;;:9;:19;8605:8;8595:19;;;;;;;;;;;;;;;;;;;;;:33;;;;8587:42;;;;;;8649:9;:19;8659:8;8649:19;;;;;;;;;;;;;;;;;;;;;8640:28;;8495:181;;;:::o;6502:86::-;4630:8;;;;;;;;;;;4616:22;;:10;:22;;;4608:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6576:4:::1;6559:14;;:21;;;;;;;;;;;;;;;;;;6502:86::o:0;16349:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8320:167::-;8387:7;8433:1;8415:20;;:6;:20;;;;8407:29;;;;;;8454:25;8472:6;8454:17;:25::i;:::-;8447:32;;8320:167;;;:::o;17789:1286::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;17887:5:::1;17871:21;;:12;;;;;;;;;;;:21;;;17863:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17941:5;17929:9;:17;17921:50;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17982:18;18003:19;:30;18023:9;18003:30;;;;;;;;;;;17982:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;18052:5;:15;;;18044:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18145:1;18117:30;;:5;:16;;;:30;;;:64;;;;18171:10;18151:30;;:5;:16;;;:30;;;18117:64;18109:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18259:5;:14;;;18246:9;:27;;18238:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18344:5;:12;;;18322:34;;:18;18330:9;18322:7;:18::i;:::-;:34;;;18314:77;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18404:14;18421:5;:12;;;18404:29;;18454:48;18468:6;18476:10;18488:9;18454:48;;;;;;;;;;;::::0;:13:::1;:48::i;:::-;18513:31;18534:9;18513:20;:31::i;:::-;18585:9;18555:18;:26;18574:6;18555:26;;;;;;;;;;;;;;;;:39;;;;;;;;;;;18651:10;18610:52;;18643:6;18610:52;;18621:9;18610:52;18632:9;18610:52;;;;;;;;;;;;;;;;;;18806:14;18823:8;:19;18832:9;18823:19;;;;;;;;;;;18806:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;18871:10;18857:24;;:3;:10;;;:24;;;18853:215;;;18974:3;:9;;;18940:18;:30;18959:10;18940:30;;;;;;;;;;;;;;;;:43;;;;;;;;;;;19020:36;;;;;;;;19024:5;19020:36;;;;;;19031:9;19020:36;;;;19050:1;19020:36;;;;;;19054:1;19020:36;;::::0;18998:8:::1;:19;19007:9;18998:19;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18853:215;4930:1;;;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;17789:1286;:::o;15274:102::-;15315:21;15359:9;15349:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15274:102;:::o;20895:578::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;20992:5:::1;20980:9;:17;20972:50;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21063:10;21041:32;;:18;21049:9;21041:7;:18::i;:::-;:32;;;;21033:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21139:10;21109:40;;:8;:19;21118:9;21109:19;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;21101:77;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21189:14;21206:8;:19;21215:9;21206:19;;;;;;;;;;;21189:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;21280:10;21241:50;;21258:9;21241:50;21269:3;:9;;;21241:50;;;;;;;;;;;;;;;;;;21302:11;21316:3;:9;;;21302:23;;21358:36;;;;;;;;21362:5;21358:36;;;;;;21369:9;21358:36;;;;21388:1;21358:36;;;;;;21392:1;21358:36;;::::0;21336:8:::1;:19;21345:9;21336:19;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21438:10;:19;;:27;21458:6;21438:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4930:1;;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;20895:578;:::o;4516:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;10296:732::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;10384:10:::1;;;;;;;;;;;10376:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10436:12;;;;;;;;;;;10435:13;10427:22;;;::::0;::::1;;10483:1;10468:12;:16;10460:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10548:2;10532:12;:18;;10524:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3383:5;10615:31;10633:12;10615:13;:11;:13::i;:::-;:17;;:31;;;;:::i;:::-;:46;;10607:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10735:9;10704:27;10718:12;10704:9;;:13;;:27;;;;:::i;:::-;:40;10696:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10799:8;;;;;;;;;;;:17;;:35;10817:16;10831:1;10817:9;:13;;:16;;;;:::i;:::-;10799:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;10845:9;;;;;;;;;;;:18;;:36;10864:16;10878:1;10864:9;:13;;:16;;;;:::i;:::-;10845:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;10907:6;10902:109;10923:12;10919:1;:16;10902:109;;;10957:8;;:10;;;;;;;;;;;;;10982:17;10988:10;10982:5;:17::i;:::-;;10937:3;;;;;;;10902:109;;;;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;10296:732;:::o;8098:214::-;8231:9;8189:16;:28;8206:10;8189:28;;;;;;;;;;;;;;;:39;8218:9;8189:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;8283:9;8256:48;;8271:10;8256:48;;;8294:9;8256:48;;;;;;;;;;;;;;;;;;;;8098:214;;:::o;4430:26::-;;;;;;;;;;;;;:::o;6153:180::-;4630:8;;;;;;;;;;;4616:22;;:10;:22;;;4608:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6216:10:::1;;;;;;;;;;;6215:11;6207:20;;;::::0;::::1;;6254:15;6238:13;:31;;;;6293:4;6280:10;;:17;;;;;;;;;;;;;;;;;;6313:12;;;;;;;;;;6153:180::o:0;7070:177::-;7193:46;7211:5;7218:3;7223:8;7233:5;;7193:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;7070:177;;;;;:::o;17397:384::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;17529:9:::1;16532:5;16521:8;:16;16513:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16602:10;16581:31;;:17;16589:8;16581:7;:17::i;:::-;:31;;;16573:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17574:5:::2;17558:21;;:12;;;;;;;;;;;:21;;;17550:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;17641:64;;;;;;;;17647:4;17641:64;;;;;;17653:9;17641:64;;;;17664:10;17641:64;;;;;;17676:17;17641:64;;;;17695:9;17641:64;;;;::::0;17608:19:::2;:30;17628:9;17608:30;;;;;;;;;;;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17763:9;17721:52;;17733:9;17721:52;17744:17;17721:52;;;;;;;;;;;;;;;;;;4930:1:::1;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;17397:384;;;:::o;17031:358::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;17135:9:::1;16532:5;16521:8;:16;16513:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16602:10;16581:31;;:17;16589:8;16581:7;:17::i;:::-;:31;;;16573:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17180:5:::2;17164:21;;:12;;;;;;;;;;;:21;;;17156:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;17247:65;;;;;;;;17253:4;17247:65;;;;;;17259:9;17247:65;;;;17270:10;17247:65;;;;;;17282:17;17247:65;;;;17309:1;17247:65;;;;::::0;17214:19:::2;:30;17234:9;17214:30;;;;;;;;;;;:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17378:1;17328:53;;17340:9;17328:53;17351:17;17328:53;;;;;;;;;;;;;;;;;;4930:1:::1;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;17031:358;;:::o;15550:199::-;15632:13;15613:8;5610:1;5579:33;;:9;:19;5589:8;5579:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5571:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15721:18:::1;15730:8;15721;:18::i;:::-;15672:68;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15658:83;;15550:199:::0;;;;:::o;4463:46::-;;;;;;;;;;;;;;;;;:::o;8843:160::-;8936:4;8960:16;:24;8977:6;8960:24;;;;;;;;;;;;;;;:35;8985:9;8960:35;;;;;;;;;;;;;;;;;;;;;;;;;8953:42;;8843:160;;;;:::o;16395:51::-;;;;;;;;;;;;;;;;;:::o;16665:144::-;4837:14;;;;;;;;;;;4833:55;;;4868:8;;;4833:55;4915:4;4898:14;;:21;;;;;;;;;;;;;;;;;;16748:9:::1;16532:5;16521:8;:16;16513:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16602:10;16581:31;;:17;16589:8;16581:7;:17::i;:::-;:31;;;16573:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16770:31:::2;16791:9;16770:20;:31::i;:::-;4930:1:::1;4959:5:::0;4942:14;;:22;;;;;;;;;;;;;;;;;;16665:144;:::o;16821:202::-;16919:50;;;;;;;;16925:5;16919:50;;;;;;16932:9;16919:50;;;;16943:10;16919:50;;;;;;16955:1;16919:50;;;;16966:1;16919:50;;;;;16886:19;:30;16906:9;16886:30;;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17005:9;16985:30;;;;;;;;;;16821:202;:::o;13049:526::-;13162:8;5610:1;5579:33;;:9;:19;5589:8;5579:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5571:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13183:18:::1;13204:9;:19;13214:8;13204:19;;;;;;;;;;;;;;;;;;;;;13183:40;;13256:5;13242:19;;:10;:19;;;13234:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13316:1;13301:17;;:3;:17;;;;13293:26;;;::::0;::::1;;13332:24;13342:3;13347:8;13332:9;:24::i;:::-;13373:15;13384:3;13373:10;:15::i;:::-;13369:199;;;13405:13;13441:3;13421:41;;;13463:10;13475:5;13482:8;13492:5;13421:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13405:93;;3329:10;13531:24;;13521:34;;;:6;:34;;;;13513:43;;;::::0;::::1;;13369:199;;5642:1;13049:526:::0;;;;;:::o;9011:274::-;9081:12;9096:9;:19;9106:8;9096:19;;;;;;;;;;;;;;;;;;;;;9081:34;;9126:24;9141:8;9126:14;:24::i;:::-;9163:30;9178:4;9184:8;9163:14;:30::i;:::-;9204:26;9216:3;9221:8;9204:11;:26::i;:::-;9268:8;9263:3;9248:29;;9257:4;9248:29;;;;;;;;;;;;9011:274;;;:::o;12485:552::-;12601:8;5254:18;5275:9;:19;5285:8;5275:19;;;;;;;;;;;;;;;;;;;;;5254:40;;5341:10;5327:24;;:10;:24;;;:77;;;;5394:10;5368:36;;:12;:22;5381:8;5368:22;;;;;;;;;;;;;;;;;;;;;:36;;;5327:77;:134;;;;5421:16;:28;5438:10;5421:28;;;;;;;;;;;;;;;:40;5450:10;5421:40;;;;;;;;;;;;;;;;;;;;;;;;;5327:134;5305:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12624:8:::1;5610:1;5579:33;;:9;:19;5589:8;5579:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5571:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12645:18:::2;12666:9;:19;12676:8;12666:19;;;;;;;;;;;;;;;;;;;;;12645:40;;12718:5;12704:19;;:10;:19;;;12696:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;12778:1;12763:17;;:3;:17;;;;12755:26;;;::::0;::::2;;12794:24;12804:3;12809:8;12794:9;:24::i;:::-;12835:15;12846:3;12835:10;:15::i;:::-;12831:199;;;12867:13;12903:3;12883:41;;;12925:10;12937:5;12944:8;12954:5;12883:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;12867:93;;3329:10;12993:24;;12983:34;;;:6;:34;;;;12975:43;;;::::0;::::2;;12831:199;;5642:1;5503::::1;12485:552:::0;;;;;;:::o;2250:124::-;2308:7;2341:1;2336;:6;;2328:15;;;;;;2365:1;2361;:5;2354:12;;2250:124;;;;:::o;12351:126::-;12417:7;12444:10;:18;12455:6;12444:18;;;;;;;;;;;;;;;:25;;;;12437:32;;12351:126;;;:::o;2449:142::-;2507:9;2537:1;2533;:5;2529:9;;2562:1;2557;:6;;2549:15;;;;;;2449:142;;;;:::o;1532:203::-;1590:9;1621:1;1616;:6;1612:47;;;1646:1;1639:8;;;;1612:47;1677:1;1673;:5;1669:9;;1706:1;1701;1697;:5;;;;;;:10;1689:19;;;;;;1532:203;;;;;:::o;1830:295::-;1888:7;2116:1;2112;:5;;;;;;2105:12;;1830:295;;;;:::o;11036:386::-;11082:4;11122:1;11107:17;;:3;:17;;;;11099:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3383:5;11167:9;;:23;11159:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11226:7;11236:13;:11;:13::i;:::-;11226:23;;11286:1;11274:9;;:13;11262:9;:25;;;;11298:20;11310:3;11315:2;11298:11;:20::i;:::-;11345:3;11336:13;;11341:2;11336:13;;;;;;;;;;11391:2;11386:3;11365:29;;11382:1;11365:29;;;;;;;;;;;;11412:2;11405:9;;;11036:386;;;:::o;14359:555::-;14415:13;14454:1;14445:5;:10;14441:53;;;14472:10;;;;;;;;;;;;;;;;;;;;;14441:53;14504:12;14519:5;14504:20;;14535:14;14560:78;14575:1;14567:4;:9;14560:78;;14593:8;;;;;;;14624:2;14616:10;;;;;;;;;14560:78;;;14648:19;14680:6;14670:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14648:39;;14698:13;14723:1;14714:6;:10;14698:26;;14742:5;14735:12;;14758:117;14773:1;14765:4;:9;14758:117;;14834:2;14827:4;:9;;;;;;14822:2;:14;14809:29;;14791:6;14798:7;;;;;;;14791:15;;;;;;;;;;;:47;;;;;;;;;;;14861:2;14853:10;;;;;;;;;14758:117;;;14899:6;14885:21;;;;;;14359:555;;;;:::o;6694:215::-;6752:17;6782:12;6836:5;6824:18;6816:26;;6900:1;6893:4;:8;6878:23;;6694:215;;;;:::o;13583:166::-;13682:1;13648:36;;:12;:22;13661:8;13648:22;;;;;;;;;;;;;;;;;;;;;:36;;;13644:98;;13708:12;:22;13721:8;13708:22;;;;;;;;;;;;13701:29;;;;;;;;;;;13644:98;13583:166;:::o;11736:607::-;11844:5;11821:28;;:9;:19;11831:8;11821:19;;;;;;;;;;;;;;;;;;;;;:28;;;11813:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11888:9;:19;11898:8;11888:19;;;;;;;;;;;;11881:26;;;;;;;;;;;11920;11949:14;:24;11964:8;11949:24;;;;;;;;;;;;11920:53;;11984:22;12009:31;12038:1;12009:10;:17;12020:5;12009:17;;;;;;;;;;;;;;;:24;;;;:28;;:31;;;;:::i;:::-;11984:56;;12075:18;12057:14;:36;12053:247;;12110:17;12130:10;:17;12141:5;12130:17;;;;;;;;;;;;;;;12148:14;12130:33;;;;;;;;;;;;;;;;12110:53;;12218:9;12178:10;:17;12189:5;12178:17;;;;;;;;;;;;;;;12196:18;12178:37;;;;;;;;;;;;;;;:49;;;;12270:18;12242:14;:25;12257:9;12242:25;;;;;;;;;;;:46;;;;12053:247;;12312:10;:17;12323:5;12312:17;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;;;;;;;11736:607;;;;:::o;11430:298::-;11541:1;11510:33;;:9;:19;11520:8;11510:19;;;;;;;;;;;;;;;;;;;;;:33;;;11502:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11607:3;11585:9;:19;11595:8;11585:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;11623:10;:15;11634:3;11623:15;;;;;;;;;;;;;;;11644:8;11623:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11691:29;11718:1;11691:10;:15;11702:3;11691:15;;;;;;;;;;;;;;;:22;;;;:26;;:29;;;;:::i;:::-;11664:14;:24;11679:8;11664:24;;;;;;;;;;;:56;;;;11430:298;;:::o;9293:834::-;9334:4;9351:14;9382:9;;3383:5;9368:23;9351:40;;9402:10;9505:9;9447:5;;9454:10;9466:16;9484:15;9430:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9420:81;;;;;;9415:87;;:99;;;;;;9402:112;;9525:10;9572:1;9554:7;9562:5;9554:14;;;;;;;;;:19;9550:120;;9598:7;9606:5;9598:14;;;;;;;;;9590:22;;9550:120;;;9653:5;9645:13;;9550:120;9761:1;9735:7;9755:1;9743:9;:13;9735:22;;;;;;;;;:27;9731:283;;;9872:1;9860:9;:13;9843:7;9851:5;9843:14;;;;;;;;:30;;;;9731:283;;;9980:7;10000:1;9988:9;:13;9980:22;;;;;;;;;9963:7;9971:5;9963:14;;;;;;;;:39;;;;9731:283;10024:5;;:7;;;;;;;;;;;;;10107:12;10117:1;10107:5;:9;;:12;;;;:::i;:::-;10100:19;;;;;9293:834;:::o

Swarm Source

ipfs://6365ce7d27e517e7fd10e2b943aabe7f40a8956ee15dc957bf850757c2a76a94

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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