ETH Price: $3,157.75 (+1.50%)

Token

Art Stars (ARTSTR)
 

Overview

Max Total Supply

3,853 ARTSTR

Holders

1,428

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 ARTSTR
0xd193fcf1172ede32f5d58995fc5b08b52e056679
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ArtStars

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Address {
  
    function isContract(address account) internal view returns (bool) {
       
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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


interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

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);
    event Mint(uint indexed index, address indexed minter);
    event Deposit(address indexed account, uint indexed amount);
    event Withdraw(address indexed account, uint indexed amount);
    event NewBid(address indexed bidder, uint indexed amount, uint indexed tokenId);
    event Trade(address indexed seller, address indexed buyer, uint indexed tokenId,uint amount);
    event SellNft(address indexed owner,uint indexed tokenId,uint indexed minPrice);
    event CancelSellNft(address indexed owner,uint indexed tokenId);
    event SaleIsStarted();

    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 IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

}

abstract contract ERC165 is IERC165 {
       function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

contract ERC721 is  Context, ERC165, AccessControl, IERC721, IERC721Metadata {
    using Address for address;
    using SafeMath for uint256;

    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");

    string private _name;
    string private _symbol;
    string internal baseURI;
    uint internal price = 5 * 10 ** 15;
    uint256 internal tokensSold = 0;
    bool public _startSale = false;

    uint256 constant MAX_SUPPLY = 10000;
    address public royalty;


    mapping (uint => ForSale) public nftForSale;
    mapping (uint256 => address) private _owners;
    mapping (address => uint256) private _balances;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    mapping (uint256 => string) private _tokenURIs;
    mapping (address => uint256[]) public tokensPerOwner;
    mapping(address => uint256[]) internal ownerToIds;
    mapping(uint256 => uint256) internal idToOwnerIndex;
   
    struct ForSale {
        uint nft_uid;
        address owner;
        address bidder;
        uint minValue;
        uint highestBid;
    }
   
    constructor (string memory name_, string memory symbol_,string memory baseURI_,address _royalty) {
        _name = name_;
        _symbol = symbol_;
        baseURI = baseURI_;
        royalty = _royalty;
    }
    

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165, AccessControl) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
            || interfaceId == type(IERC721Metadata).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return string(abi.encodePacked(_baseURI(), toString(tokenId)));
    }

    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }


    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    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);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }


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

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

    function _removeNFToken(address _from, uint256 _tokenId) internal {
        require(_owners[_tokenId] == _from, "Incorrect owner.");
        delete _owners[_tokenId];
        delete nftForSale[_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();
        emit CancelSellNft(_msgSender(),_tokenId);
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        tokensSold += 1;
        tokensPerOwner[to].push(tokenId);
        _addNFToken(to, tokenId);
        emit Mint(tokenId, to);
        emit Transfer(address(0), to, tokenId);
    }

    function devMint(uint count, address recipient) external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(tokensSold+count <=10000, "The tokens limit has reached.");
        for (uint i = 0; i < count; i++) {
            uint256 _tokenId = tokensSold + 1;
            _mint(recipient, _tokenId);
        }
    }


    
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];
        tokensPerOwner[owner].push(tokenId);
        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);
        
        _removeNFToken(from, tokenId);
        _addNFToken(to, tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        
        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}

contract ArtStars is ERC721  {
    using SafeMath for uint256;

    bool private lock = false;
    bool public contractPaused;
    uint256 constant CONTRACT_ROYALTY = 2;//Contract royalty in percent
    
    mapping (address => uint256) public ethBalance;



    constructor() ERC721("Art Stars", "ARTSTR", " https://unencrypted.digital/json/" ,address(0x4204BfFf4752E288f886F8FB06CEecb4c813929f)) {

        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    modifier nonReentrant {
        require(!lock, "ReentrancyGuard: reentrant call");
        lock = true;
        _;
        lock = false;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function pauseContract(bool _paused) external  {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to pause the contract");
        contractPaused = _paused;
    }

    function setBaseURI(string memory newURI) public returns (bool) {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        baseURI = newURI;
        return true;

    }

    function changeRoyaltyAddr(address _newRoyaltyAddr) public returns(bool){
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change royalty address");
        royalty = _newRoyaltyAddr;
        return true;
    }


    function getTokensByOwner(address _owner) public view returns (uint256[] memory){
        return ownerToIds[_owner];
    }

    function toSellNFT(uint tokenId, uint minPrice) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        nftForSale[tokenId] =ForSale(tokenId,_msgSender(),address(0),minPrice,0);
        emit SellNft(_msgSender(),tokenId,minPrice);
        return true;
    }

    function toCancelSaleOfNFT(uint tokenId) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        delete nftForSale[tokenId];
        emit CancelSellNft(_msgSender(),tokenId);
        return true;
    }


    function toMakeBid(uint tokenId) public payable nonReentrant returns(bool){
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(!_isApprovedOrOwner(_msgSender(), tokenId), "The owner can't make bid");
        if (order.bidder == _msgSender()){
            require(msg.value > 0,"Insufficient funds to make bid");
            order.highestBid = order.highestBid.add(msg.value);
        } else{
            require(msg.value >= order.minValue && msg.value > order.highestBid, "Insufficient funds to make bid");
            order.highestBid = msg.value;
            order.bidder = _msgSender();
        }
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value);
        nftForSale[tokenId] = order;
        emit Deposit(_msgSender(),msg.value);
        emit NewBid(_msgSender(),order.highestBid,tokenId);
        return true;
    }

    function toAcceptBid(uint tokenId) public nonReentrant returns(bool){
        require(!contractPaused);
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Only owner or approved can accept the bid");
        require(ethBalance[order.bidder] >= order.highestBid,"Insufficient funds of the bidder balance");
        delete nftForSale[tokenId];
        uint256 total_royalty = order.highestBid / 100 * CONTRACT_ROYALTY;
        ethBalance[order.bidder] = ethBalance[order.bidder].sub(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(total_royalty);
        (bool success, ) = royalty.call{value:total_royalty}("");
        require(success);
        _transfer(order.owner,order.bidder,tokenId);
        emit CancelSellNft(_msgSender(),tokenId);
        emit Trade(_msgSender(),order.bidder,order.highestBid,tokenId);
        emit Transfer(order.owner,order.bidder,tokenId);
        return true;
    }

    function startSale() external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(!_startSale);
        _startSale = true;
        emit SaleIsStarted();
    }



    function buyNFT()external payable nonReentrant returns(bool, uint){
        require(!contractPaused);
        require(_startSale, "The sale hasn't started.");
        require(tokensSold+1 <=10000, "The tokens limit has reached.");
        require(msg.value >= price, "Insufficient funds to purchase.");
        (bool success, ) = royalty.call{value:msg.value}("");
        require(success);
        uint _tokenId = tokensSold + 1;
        _mint(_msgSender(), _tokenId);        
        return (true,_tokenId);
    }

    function withdraw(uint amount) external nonReentrant {
        require(!contractPaused);
        require(amount <= ethBalance[_msgSender()],"Insufficient funds to withdraw.");
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(amount);
        (bool success, ) = msg.sender.call{value:amount}("");
        require(success);
        emit Withdraw(_msgSender(), amount);
    }

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


}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CancelSellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleIsStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"SellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","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":[],"name":"buyNFT","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRoyaltyAddr","type":"address"}],"name":"changeRoyaltyAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftForSale","outputs":[{"internalType":"uint256","name":"nft_uid","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"minValue","type":"uint256"},{"internalType":"uint256","name":"highestBid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toAcceptBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toCancelSaleOfNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toMakeBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"toSellNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensPerOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526611c37937e0800060045560006005556006805460ff199081169091556010805490911690553480156200003757600080fd5b506040518060400160405280600981526020016841727420537461727360b81b8152506040518060400160405280600681526020016520a92a29aa2960d11b815250604051806060016040528060228152602001620035e7602291398251734204bfff4752e288f886f8fb06ceecb4c813929f90620000be90600190602087019062000238565b508251620000d490600290602086019062000238565b508151620000ea90600390602085019062000238565b50600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200012a915060009050620001243390565b62000188565b620001567fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753362000188565b620001827f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000188565b6200031b565b62000194828262000198565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000194576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001f43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200024690620002de565b90600052602060002090601f0160209004810192826200026a5760008555620002b5565b82601f106200028557805160ff1916838001178555620002b5565b82800160010185558215620002b5579182015b82811115620002b557825182559160200191906001019062000298565b50620002c3929150620002c7565b5090565b5b80821115620002c35760008155600101620002c8565b600181811c90821680620002f357607f821691505b602082108114156200031557634e487b7160e01b600052602260045260246000fd5b50919050565b6132bc806200032b6000396000f3fe6080604052600436106102465760003560e01c80638a67456a11610139578063bff29cee116100b6578063d8f3790f1161007a578063d8f3790f1461072f578063e272b8921461075c578063e985e9c51461077c578063ef5793ce146107c5578063f6e4bba6146107e5578063f7932ab81461080557600080fd5b8063bff29cee146106a6578063c87b56dd146106c5578063d0e30db0146106e5578063d5391393146106ed578063d547741f1461070f57600080fd5b8063a217fddf116100fd578063a217fddf14610622578063a22cb46514610637578063b291850314610657578063b66a0e5d14610671578063b88d4fde1461068657600080fd5b80638a67456a14610524578063906f33301461054357806390ba7a321461056357806391d14854146105ed57806395d89b411461060d57600080fd5b80632f2ff15d116101c75780636352211e1161018b5780636352211e1461047d57806370a082311461049d57806375b238fc146104bd5780637ed0f281146104f15780637fc9b4a61461051157600080fd5b80632f2ff15d146103d057806336568abe146103f057806340398d671461041057806342842e0e1461043d57806355f804b31461045d57600080fd5b806323b872dd1161020e57806323b872dd1461031b578063248a9ca31461033b57806329ee566c1461036b5780632d1a12f6146103905780632e1a7d4d146103b057600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da57806318160ddd146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612e1d565b610825565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b50610295610836565b6040516102779190612f98565b3480156102ae57600080fd5b506102c26102bd366004612de3565b6108c8565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f5366004612da0565b610955565b005b34801561030857600080fd5b506005545b604051908152602001610277565b34801561032757600080fd5b506102fa610336366004612cc3565b610a6b565b34801561034757600080fd5b5061030d610356366004612de3565b60009081526020819052604090206001015490565b34801561037757600080fd5b506006546102c29061010090046001600160a01b031681565b34801561039c57600080fd5b506102fa6103ab366004612dfb565b610a9c565b3480156103bc57600080fd5b506102fa6103cb366004612de3565b610b6a565b3480156103dc57600080fd5b506102fa6103eb366004612dfb565b610cd5565b3480156103fc57600080fd5b506102fa61040b366004612dfb565b610d64565b34801561041c57600080fd5b5061043061042b366004612c77565b610dde565b6040516102779190612f54565b34801561044957600080fd5b506102fa610458366004612cc3565b610e4a565b34801561046957600080fd5b5061026b610478366004612e55565b610e65565b34801561048957600080fd5b506102c2610498366004612de3565b610eb7565b3480156104a957600080fd5b5061030d6104b8366004612c77565b610f2e565b3480156104c957600080fd5b5061030d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104fd57600080fd5b5061026b61050c366004612de3565b610fb5565b61026b61051f366004612de3565b61104e565b34801561053057600080fd5b5060105461026b90610100900460ff1681565b34801561054f57600080fd5b5061026b61055e366004612e9b565b6113c9565b34801561056f57600080fd5b506105b961057e366004612de3565b6007602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610277565b3480156105f957600080fd5b5061026b610608366004612dfb565b6114cd565b34801561061957600080fd5b506102956114f6565b34801561062e57600080fd5b5061030d600081565b34801561064357600080fd5b506102fa610652366004612d77565b611505565b34801561066357600080fd5b5060065461026b9060ff1681565b34801561067d57600080fd5b506102fa6115ca565b34801561069257600080fd5b506102fa6106a1366004612cfe565b611646565b6106ae61167d565b604080519215158352602083019190915201610277565b3480156106d157600080fd5b506102956106e0366004612de3565b611861565b6102fa611908565b3480156106f957600080fd5b5061030d60008051602061326783398151915281565b34801561071b57600080fd5b506102fa61072a366004612dfb565b611953565b34801561073b57600080fd5b5061030d61074a366004612c77565b60116020526000908152604090205481565b34801561076857600080fd5b506102fa610777366004612dc9565b6119d3565b34801561078857600080fd5b5061026b610797366004612c91565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b3480156107d157600080fd5b5061030d6107e0366004612da0565b611a69565b3480156107f157600080fd5b5061026b610800366004612de3565b611a9a565b34801561081157600080fd5b5061026b610820366004612c77565b611eff565b600061083082611fad565b92915050565b606060018054610845906131a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610871906131a1565b80156108be5780601f10610893576101008083540402835291602001916108be565b820191906000526020600020905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b60006108d382611fed565b6109395760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600a60205260409020546001600160a01b031690565b600061096082610eb7565b9050806001600160a01b0316836001600160a01b031614156109ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610930565b336001600160a01b03821614806109ea57506109ea8133610797565b610a5c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610930565b610a66838361200a565b505050565b610a753382612078565b610a915760405162461bcd60e51b81526004016109309061308b565b610a66838383612162565b610ab4600080516020613267833981519152336114cd565b610ad05760405162461bcd60e51b815260040161093090612ffd565b61271082600554610ae19190613113565b1115610b2f5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b60005b82811015610a665760006005546001610b4b9190613113565b9050610b5783826122fa565b5080610b62816131dc565b915050610b32565b60105460ff1615610b8d5760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615610bae57600080fd5b33600090815260116020526040902054811115610c0d5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e006044820152606401610930565b610c378160116000335b6001600160a01b0316815260208101919091526040016000205490612495565b3360008181526011602052604080822093909355915183908381818185875af1925050503d8060008114610c87576040519150601f19603f3d011682016040523d82523d6000602084013e610c8c565b606091505b5050905080610c9a57600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506010805460ff19169055565b600082815260208190526040902060010154610cf2905b336114cd565b610d565760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610930565b610d6082826124b5565b5050565b6001600160a01b0381163314610dd45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610930565b610d608282612539565b6001600160a01b0381166000908152600e6020908152604091829020805483518184028101840190945280845260609392830182828015610e3e57602002820191906000526020600020905b815481526020019060010190808311610e2a575b50505050509050919050565b610a6683838360405180602001604052806000815250611646565b6000610e7f600080516020613267833981519152336114cd565b610e9b5760405162461bcd60e51b815260040161093090612ffd565b8151610eae906003906020850190612b3c565b50600192915050565b6000818152600860205260408120546001600160a01b0316806108305760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610930565b60006001600160a01b038216610f995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610930565b506001600160a01b031660009081526009602052604090205490565b6000610fc2335b83612078565b610fde5760405162461bcd60e51b815260040161093090613048565b6000828152600760205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60105460009060ff16156110745760405162461bcd60e51b8152600401610930906130dc565b6010805460ff1916600117905561108a82611fed565b6110d15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261116d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611178335b84612078565b156111c55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b652062696400000000000000006044820152606401610930565b60408101516001600160a01b0316331415611243576000341161122a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b6080810151611239903461259e565b60808201526112b3565b8060600151341015801561125a5750806080015134115b6112a65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b3460808201523360408201525b6112dd3460116000335b6001600160a01b031681526020810191909152604001600020549061259e565b336000818152601160209081526040808320949094558682526007815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516113823390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506010805460ff1916905550600190565b60006113d433611172565b6113f05760405162461bcd60e51b815260040161093090613048565b6040518060a001604052808481526020016114083390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600782529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361148f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610845906131a1565b6001600160a01b03821633141561155e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610930565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115e2600080516020613267833981519152336114cd565b6115fe5760405162461bcd60e51b815260040161093090612ffd565b60065460ff161561160e57600080fd5b6006805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61164f33610fbc565b61166b5760405162461bcd60e51b81526004016109309061308b565b611677848484846125b9565b50505050565b601054600090819060ff16156116a55760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff16156116c657600080fd5b60065460ff166117185760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e00000000000000006044820152606401610930565b612710600554600161172a9190613113565b11156117785760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b6004543410156117ca5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610930565b60065460405160009161010090046001600160a01b03169034908381818185875af1925050503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b505090508061182f57600080fd5b600060055460016118409190613113565b905061184c33826122fa565b600193509150506010805460ff191690559091565b606061186c82611fed565b6118d05760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610930565b6118d86125ec565b6118e1836125fb565b6040516020016118f2929190612ee8565b6040516020818303038152906040529050919050565b6119163460116000336112bd565b3360008181526011602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b60008281526020819052604090206001015461196e90610cec565b610dd45760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610930565b6119eb600080516020613267833981519152336114cd565b611a4f5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b6064820152608401610930565b601080549115156101000261ff0019909216919091179055565b600d6020528160005260406000208181548110611a8557600080fd5b90600052602060002001600091509150505481565b60105460009060ff1615611ac05760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615611ae157600080fd5b611aea82611fed565b611b315760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611bcd5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611bd633611172565b611c345760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b6064820152608401610930565b60808101516040808301516001600160a01b03166000908152601160205220541015611cb35760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b6064820152608401610930565b60008381526007602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611d069060649061312b565b611d10919061313f565b60808301516040808501516001600160a01b0316600090815260116020522054919250611d3d9190612495565b6040808401516001600160a01b0316600090815260116020819052918120929092556080840151611d7192909190336112bd565b336000818152601160208190526040822093909355611d94928492909190610c17565b33600090815260116020526040808220929092556006549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611df8576040519150601f19603f3d011682016040523d82523d6000602084013e611dfd565b606091505b5050905080611e0b57600080fd5b611e1e8360200151846040015187612162565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611e9991815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506010805460ff1916905550600192915050565b6000611f19600080516020613267833981519152336114cd565b611f815760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b6064820152608401610930565b50600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b1480611fde57506001600160e01b03198216635b5e139f60e01b145b80610830575061083082612715565b6000908152600860205260409020546001600160a01b0316151590565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061203f82610eb7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208382611fed565b6120e45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610930565b60006120ef83610eb7565b9050806001600160a01b0316846001600160a01b0316148061212a5750836001600160a01b031661211f846108c8565b6001600160a01b0316145b8061215a57506001600160a01b038082166000908152600b602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661217582610eb7565b6001600160a01b0316146121dd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610930565b6001600160a01b03821661223f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610930565b61224a60008261200a565b612254838261274a565b61225e8282612960565b6001600160a01b038316600090815260096020526040812080546001929061228790849061315e565b90915550506001600160a01b03821660009081526009602052604081208054600192906122b5908490613113565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166123505760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610930565b61235981611fed565b156123a65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610930565b6001600160a01b03821660009081526009602052604081208054600192906123cf908490613113565b925050819055506001600560008282546123e99190613113565b90915550506001600160a01b0382166000908152600d60209081526040822080546001810182559083529120018190556124238282612960565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156124a457600080fd5b6124ae828461315e565b9392505050565b6124bf82826114cd565b610d60576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556124f53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61254382826114cd565b15610d60576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006125aa8284613113565b90508281101561083057600080fd5b6125c4848484612162565b6125d084848484612a2f565b6116775760405162461bcd60e51b815260040161093090612fab565b606060038054610845906131a1565b60608161261f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126495780612633816131dc565b91506126429050600a8361312b565b9150612623565b60008167ffffffffffffffff81111561267257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561269c576020820181803683370190505b5090505b841561215a576126b160018361315e565b91506126be600a866131f7565b6126c9906030613113565b60f81b8183815181106126ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061270e600a8661312b565b94506126a0565b60006001600160e01b03198216637965db0b60e01b148061083057506301ffc9a760e01b6001600160e01b0319831614610830565b6000818152600860205260409020546001600160a01b038381169116146127a65760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b6044820152606401610930565b600081815260086020908152604080832080546001600160a01b031990811690915560078352818420848155600181810180548416905560028201805490931690925560038101859055600401849055600f8352818420546001600160a01b0387168552600e9093529083205491929161281f91612495565b90508181146128d2576001600160a01b0384166000908152600e6020526040812080548390811061286057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600e6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106128b257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600f9052604090208290555b6001600160a01b0384166000908152600e6020526040902080548061290757634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055826129253390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600860205260409020546001600160a01b0316156129c55760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e0000000000006044820152606401610930565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600e83529083208054600181810183558286529385200185905592529054612a1c91612495565b6000918252600f60205260409091205550565b60006001600160a01b0384163b15612b3157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a73903390899088908890600401612f17565b602060405180830381600087803b158015612a8d57600080fd5b505af1925050508015612abd575060408051601f3d908101601f19168201909252612aba91810190612e39565b60015b612b17573d808015612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b508051612b0f5760405162461bcd60e51b815260040161093090612fab565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061215a565b506001949350505050565b828054612b48906131a1565b90600052602060002090601f016020900481019282612b6a5760008555612bb0565b82601f10612b8357805160ff1916838001178555612bb0565b82800160010185558215612bb0579182015b82811115612bb0578251825591602001919060010190612b95565b50612bbc929150612bc0565b5090565b5b80821115612bbc5760008155600101612bc1565b600067ffffffffffffffff80841115612bf057612bf0613237565b604051601f8501601f19908116603f01168101908282118183101715612c1857612c18613237565b81604052809350858152868686011115612c3157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c6257600080fd5b919050565b80358015158114612c6257600080fd5b600060208284031215612c88578081fd5b6124ae82612c4b565b60008060408385031215612ca3578081fd5b612cac83612c4b565b9150612cba60208401612c4b565b90509250929050565b600080600060608486031215612cd7578081fd5b612ce084612c4b565b9250612cee60208501612c4b565b9150604084013590509250925092565b60008060008060808587031215612d13578081fd5b612d1c85612c4b565b9350612d2a60208601612c4b565b925060408501359150606085013567ffffffffffffffff811115612d4c578182fd5b8501601f81018713612d5c578182fd5b612d6b87823560208401612bd5565b91505092959194509250565b60008060408385031215612d89578182fd5b612d9283612c4b565b9150612cba60208401612c67565b60008060408385031215612db2578182fd5b612dbb83612c4b565b946020939093013593505050565b600060208284031215612dda578081fd5b6124ae82612c67565b600060208284031215612df4578081fd5b5035919050565b60008060408385031215612e0d578182fd5b82359150612cba60208401612c4b565b600060208284031215612e2e578081fd5b81356124ae8161324d565b600060208284031215612e4a578081fd5b81516124ae8161324d565b600060208284031215612e66578081fd5b813567ffffffffffffffff811115612e7c578182fd5b8201601f81018413612e8c578182fd5b61215a84823560208401612bd5565b60008060408385031215612ead578182fd5b50508035926020909101359150565b60008151808452612ed4816020860160208601613175565b601f01601f19169290920160200192915050565b60008351612efa818460208801613175565b835190830190612f0e818360208801613175565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4a90830184612ebc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f8c57835183529284019291840191600101612f70565b50909695505050505050565b6020815260006124ae6020830184612ebc565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156131265761312661320b565b500190565b60008261313a5761313a613221565b500490565b60008160001904831182151516156131595761315961320b565b500290565b6000828210156131705761317061320b565b500390565b60005b83811015613190578181015183820152602001613178565b838111156116775750506000910152565b600181811c908216806131b557607f821691505b602082108114156131d657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131f0576131f061320b565b5060010190565b60008261320657613206613221565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461326357600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220ca5539928883c20377811d02461061aade6362756c71febb43e89df71272259664736f6c634300080400332068747470733a2f2f756e656e637279707465642e6469676974616c2f6a736f6e2f

Deployed Bytecode

0x6080604052600436106102465760003560e01c80638a67456a11610139578063bff29cee116100b6578063d8f3790f1161007a578063d8f3790f1461072f578063e272b8921461075c578063e985e9c51461077c578063ef5793ce146107c5578063f6e4bba6146107e5578063f7932ab81461080557600080fd5b8063bff29cee146106a6578063c87b56dd146106c5578063d0e30db0146106e5578063d5391393146106ed578063d547741f1461070f57600080fd5b8063a217fddf116100fd578063a217fddf14610622578063a22cb46514610637578063b291850314610657578063b66a0e5d14610671578063b88d4fde1461068657600080fd5b80638a67456a14610524578063906f33301461054357806390ba7a321461056357806391d14854146105ed57806395d89b411461060d57600080fd5b80632f2ff15d116101c75780636352211e1161018b5780636352211e1461047d57806370a082311461049d57806375b238fc146104bd5780637ed0f281146104f15780637fc9b4a61461051157600080fd5b80632f2ff15d146103d057806336568abe146103f057806340398d671461041057806342842e0e1461043d57806355f804b31461045d57600080fd5b806323b872dd1161020e57806323b872dd1461031b578063248a9ca31461033b57806329ee566c1461036b5780632d1a12f6146103905780632e1a7d4d146103b057600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da57806318160ddd146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612e1d565b610825565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b50610295610836565b6040516102779190612f98565b3480156102ae57600080fd5b506102c26102bd366004612de3565b6108c8565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f5366004612da0565b610955565b005b34801561030857600080fd5b506005545b604051908152602001610277565b34801561032757600080fd5b506102fa610336366004612cc3565b610a6b565b34801561034757600080fd5b5061030d610356366004612de3565b60009081526020819052604090206001015490565b34801561037757600080fd5b506006546102c29061010090046001600160a01b031681565b34801561039c57600080fd5b506102fa6103ab366004612dfb565b610a9c565b3480156103bc57600080fd5b506102fa6103cb366004612de3565b610b6a565b3480156103dc57600080fd5b506102fa6103eb366004612dfb565b610cd5565b3480156103fc57600080fd5b506102fa61040b366004612dfb565b610d64565b34801561041c57600080fd5b5061043061042b366004612c77565b610dde565b6040516102779190612f54565b34801561044957600080fd5b506102fa610458366004612cc3565b610e4a565b34801561046957600080fd5b5061026b610478366004612e55565b610e65565b34801561048957600080fd5b506102c2610498366004612de3565b610eb7565b3480156104a957600080fd5b5061030d6104b8366004612c77565b610f2e565b3480156104c957600080fd5b5061030d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104fd57600080fd5b5061026b61050c366004612de3565b610fb5565b61026b61051f366004612de3565b61104e565b34801561053057600080fd5b5060105461026b90610100900460ff1681565b34801561054f57600080fd5b5061026b61055e366004612e9b565b6113c9565b34801561056f57600080fd5b506105b961057e366004612de3565b6007602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610277565b3480156105f957600080fd5b5061026b610608366004612dfb565b6114cd565b34801561061957600080fd5b506102956114f6565b34801561062e57600080fd5b5061030d600081565b34801561064357600080fd5b506102fa610652366004612d77565b611505565b34801561066357600080fd5b5060065461026b9060ff1681565b34801561067d57600080fd5b506102fa6115ca565b34801561069257600080fd5b506102fa6106a1366004612cfe565b611646565b6106ae61167d565b604080519215158352602083019190915201610277565b3480156106d157600080fd5b506102956106e0366004612de3565b611861565b6102fa611908565b3480156106f957600080fd5b5061030d60008051602061326783398151915281565b34801561071b57600080fd5b506102fa61072a366004612dfb565b611953565b34801561073b57600080fd5b5061030d61074a366004612c77565b60116020526000908152604090205481565b34801561076857600080fd5b506102fa610777366004612dc9565b6119d3565b34801561078857600080fd5b5061026b610797366004612c91565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b3480156107d157600080fd5b5061030d6107e0366004612da0565b611a69565b3480156107f157600080fd5b5061026b610800366004612de3565b611a9a565b34801561081157600080fd5b5061026b610820366004612c77565b611eff565b600061083082611fad565b92915050565b606060018054610845906131a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610871906131a1565b80156108be5780601f10610893576101008083540402835291602001916108be565b820191906000526020600020905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b60006108d382611fed565b6109395760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600a60205260409020546001600160a01b031690565b600061096082610eb7565b9050806001600160a01b0316836001600160a01b031614156109ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610930565b336001600160a01b03821614806109ea57506109ea8133610797565b610a5c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610930565b610a66838361200a565b505050565b610a753382612078565b610a915760405162461bcd60e51b81526004016109309061308b565b610a66838383612162565b610ab4600080516020613267833981519152336114cd565b610ad05760405162461bcd60e51b815260040161093090612ffd565b61271082600554610ae19190613113565b1115610b2f5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b60005b82811015610a665760006005546001610b4b9190613113565b9050610b5783826122fa565b5080610b62816131dc565b915050610b32565b60105460ff1615610b8d5760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615610bae57600080fd5b33600090815260116020526040902054811115610c0d5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e006044820152606401610930565b610c378160116000335b6001600160a01b0316815260208101919091526040016000205490612495565b3360008181526011602052604080822093909355915183908381818185875af1925050503d8060008114610c87576040519150601f19603f3d011682016040523d82523d6000602084013e610c8c565b606091505b5050905080610c9a57600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506010805460ff19169055565b600082815260208190526040902060010154610cf2905b336114cd565b610d565760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610930565b610d6082826124b5565b5050565b6001600160a01b0381163314610dd45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610930565b610d608282612539565b6001600160a01b0381166000908152600e6020908152604091829020805483518184028101840190945280845260609392830182828015610e3e57602002820191906000526020600020905b815481526020019060010190808311610e2a575b50505050509050919050565b610a6683838360405180602001604052806000815250611646565b6000610e7f600080516020613267833981519152336114cd565b610e9b5760405162461bcd60e51b815260040161093090612ffd565b8151610eae906003906020850190612b3c565b50600192915050565b6000818152600860205260408120546001600160a01b0316806108305760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610930565b60006001600160a01b038216610f995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610930565b506001600160a01b031660009081526009602052604090205490565b6000610fc2335b83612078565b610fde5760405162461bcd60e51b815260040161093090613048565b6000828152600760205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60105460009060ff16156110745760405162461bcd60e51b8152600401610930906130dc565b6010805460ff1916600117905561108a82611fed565b6110d15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261116d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611178335b84612078565b156111c55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b652062696400000000000000006044820152606401610930565b60408101516001600160a01b0316331415611243576000341161122a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b6080810151611239903461259e565b60808201526112b3565b8060600151341015801561125a5750806080015134115b6112a65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b3460808201523360408201525b6112dd3460116000335b6001600160a01b031681526020810191909152604001600020549061259e565b336000818152601160209081526040808320949094558682526007815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516113823390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506010805460ff1916905550600190565b60006113d433611172565b6113f05760405162461bcd60e51b815260040161093090613048565b6040518060a001604052808481526020016114083390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600782529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361148f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610845906131a1565b6001600160a01b03821633141561155e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610930565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115e2600080516020613267833981519152336114cd565b6115fe5760405162461bcd60e51b815260040161093090612ffd565b60065460ff161561160e57600080fd5b6006805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61164f33610fbc565b61166b5760405162461bcd60e51b81526004016109309061308b565b611677848484846125b9565b50505050565b601054600090819060ff16156116a55760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff16156116c657600080fd5b60065460ff166117185760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e00000000000000006044820152606401610930565b612710600554600161172a9190613113565b11156117785760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b6004543410156117ca5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610930565b60065460405160009161010090046001600160a01b03169034908381818185875af1925050503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b505090508061182f57600080fd5b600060055460016118409190613113565b905061184c33826122fa565b600193509150506010805460ff191690559091565b606061186c82611fed565b6118d05760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610930565b6118d86125ec565b6118e1836125fb565b6040516020016118f2929190612ee8565b6040516020818303038152906040529050919050565b6119163460116000336112bd565b3360008181526011602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b60008281526020819052604090206001015461196e90610cec565b610dd45760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610930565b6119eb600080516020613267833981519152336114cd565b611a4f5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b6064820152608401610930565b601080549115156101000261ff0019909216919091179055565b600d6020528160005260406000208181548110611a8557600080fd5b90600052602060002001600091509150505481565b60105460009060ff1615611ac05760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615611ae157600080fd5b611aea82611fed565b611b315760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611bcd5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611bd633611172565b611c345760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b6064820152608401610930565b60808101516040808301516001600160a01b03166000908152601160205220541015611cb35760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b6064820152608401610930565b60008381526007602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611d069060649061312b565b611d10919061313f565b60808301516040808501516001600160a01b0316600090815260116020522054919250611d3d9190612495565b6040808401516001600160a01b0316600090815260116020819052918120929092556080840151611d7192909190336112bd565b336000818152601160208190526040822093909355611d94928492909190610c17565b33600090815260116020526040808220929092556006549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611df8576040519150601f19603f3d011682016040523d82523d6000602084013e611dfd565b606091505b5050905080611e0b57600080fd5b611e1e8360200151846040015187612162565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611e9991815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506010805460ff1916905550600192915050565b6000611f19600080516020613267833981519152336114cd565b611f815760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b6064820152608401610930565b50600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b1480611fde57506001600160e01b03198216635b5e139f60e01b145b80610830575061083082612715565b6000908152600860205260409020546001600160a01b0316151590565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061203f82610eb7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208382611fed565b6120e45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610930565b60006120ef83610eb7565b9050806001600160a01b0316846001600160a01b0316148061212a5750836001600160a01b031661211f846108c8565b6001600160a01b0316145b8061215a57506001600160a01b038082166000908152600b602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661217582610eb7565b6001600160a01b0316146121dd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610930565b6001600160a01b03821661223f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610930565b61224a60008261200a565b612254838261274a565b61225e8282612960565b6001600160a01b038316600090815260096020526040812080546001929061228790849061315e565b90915550506001600160a01b03821660009081526009602052604081208054600192906122b5908490613113565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166123505760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610930565b61235981611fed565b156123a65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610930565b6001600160a01b03821660009081526009602052604081208054600192906123cf908490613113565b925050819055506001600560008282546123e99190613113565b90915550506001600160a01b0382166000908152600d60209081526040822080546001810182559083529120018190556124238282612960565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156124a457600080fd5b6124ae828461315e565b9392505050565b6124bf82826114cd565b610d60576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556124f53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61254382826114cd565b15610d60576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006125aa8284613113565b90508281101561083057600080fd5b6125c4848484612162565b6125d084848484612a2f565b6116775760405162461bcd60e51b815260040161093090612fab565b606060038054610845906131a1565b60608161261f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126495780612633816131dc565b91506126429050600a8361312b565b9150612623565b60008167ffffffffffffffff81111561267257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561269c576020820181803683370190505b5090505b841561215a576126b160018361315e565b91506126be600a866131f7565b6126c9906030613113565b60f81b8183815181106126ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061270e600a8661312b565b94506126a0565b60006001600160e01b03198216637965db0b60e01b148061083057506301ffc9a760e01b6001600160e01b0319831614610830565b6000818152600860205260409020546001600160a01b038381169116146127a65760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b6044820152606401610930565b600081815260086020908152604080832080546001600160a01b031990811690915560078352818420848155600181810180548416905560028201805490931690925560038101859055600401849055600f8352818420546001600160a01b0387168552600e9093529083205491929161281f91612495565b90508181146128d2576001600160a01b0384166000908152600e6020526040812080548390811061286057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600e6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106128b257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600f9052604090208290555b6001600160a01b0384166000908152600e6020526040902080548061290757634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055826129253390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600860205260409020546001600160a01b0316156129c55760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e0000000000006044820152606401610930565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600e83529083208054600181810183558286529385200185905592529054612a1c91612495565b6000918252600f60205260409091205550565b60006001600160a01b0384163b15612b3157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a73903390899088908890600401612f17565b602060405180830381600087803b158015612a8d57600080fd5b505af1925050508015612abd575060408051601f3d908101601f19168201909252612aba91810190612e39565b60015b612b17573d808015612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b508051612b0f5760405162461bcd60e51b815260040161093090612fab565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061215a565b506001949350505050565b828054612b48906131a1565b90600052602060002090601f016020900481019282612b6a5760008555612bb0565b82601f10612b8357805160ff1916838001178555612bb0565b82800160010185558215612bb0579182015b82811115612bb0578251825591602001919060010190612b95565b50612bbc929150612bc0565b5090565b5b80821115612bbc5760008155600101612bc1565b600067ffffffffffffffff80841115612bf057612bf0613237565b604051601f8501601f19908116603f01168101908282118183101715612c1857612c18613237565b81604052809350858152868686011115612c3157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c6257600080fd5b919050565b80358015158114612c6257600080fd5b600060208284031215612c88578081fd5b6124ae82612c4b565b60008060408385031215612ca3578081fd5b612cac83612c4b565b9150612cba60208401612c4b565b90509250929050565b600080600060608486031215612cd7578081fd5b612ce084612c4b565b9250612cee60208501612c4b565b9150604084013590509250925092565b60008060008060808587031215612d13578081fd5b612d1c85612c4b565b9350612d2a60208601612c4b565b925060408501359150606085013567ffffffffffffffff811115612d4c578182fd5b8501601f81018713612d5c578182fd5b612d6b87823560208401612bd5565b91505092959194509250565b60008060408385031215612d89578182fd5b612d9283612c4b565b9150612cba60208401612c67565b60008060408385031215612db2578182fd5b612dbb83612c4b565b946020939093013593505050565b600060208284031215612dda578081fd5b6124ae82612c67565b600060208284031215612df4578081fd5b5035919050565b60008060408385031215612e0d578182fd5b82359150612cba60208401612c4b565b600060208284031215612e2e578081fd5b81356124ae8161324d565b600060208284031215612e4a578081fd5b81516124ae8161324d565b600060208284031215612e66578081fd5b813567ffffffffffffffff811115612e7c578182fd5b8201601f81018413612e8c578182fd5b61215a84823560208401612bd5565b60008060408385031215612ead578182fd5b50508035926020909101359150565b60008151808452612ed4816020860160208601613175565b601f01601f19169290920160200192915050565b60008351612efa818460208801613175565b835190830190612f0e818360208801613175565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4a90830184612ebc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f8c57835183529284019291840191600101612f70565b50909695505050505050565b6020815260006124ae6020830184612ebc565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156131265761312661320b565b500190565b60008261313a5761313a613221565b500490565b60008160001904831182151516156131595761315961320b565b500290565b6000828210156131705761317061320b565b500390565b60005b83811015613190578181015183820152602001613178565b838111156116775750506000910152565b600181811c908216806131b557607f821691505b602082108114156131d657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131f0576131f061320b565b5060010190565b60008261320657613206613221565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461326357600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220ca5539928883c20377811d02461061aade6362756c71febb43e89df71272259664736f6c63430008040033

Deployed Bytecode Sourcemap

17369:5967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18097:161;;;;;;;;;;-1:-1:-1;18097:161:0;;;;;:::i;:::-;;:::i;:::-;;;7899:14:1;;7892:22;7874:41;;7862:2;7847:18;18097:161:0;;;;;;;;9179:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10276:221::-;;;;;;;;;;-1:-1:-1;10276:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6557:32:1;;;6539:51;;6527:2;6512:18;10276:221:0;6494:102:1;9871:397:0;;;;;;;;;;-1:-1:-1;9871:397:0;;;;;:::i;:::-;;:::i;:::-;;9401:89;;;;;;;;;;-1:-1:-1;9472:10:0;;9401:89;;;8335:25:1;;;8323:2;8308:18;9401:89:0;8290:76:1;10980:252:0;;;;;;;;;;-1:-1:-1;10980:252:0;;;;;:::i;:::-;;:::i;5287:123::-;;;;;;;;;;-1:-1:-1;5287:123:0;;;;;:::i;:::-;5353:7;5380:12;;;;;;;;;;:22;;;;5287:123;7459:22;;;;;;;;;;-1:-1:-1;7459:22:0;;;;;;;-1:-1:-1;;;;;7459:22:0;;;14888:387;;;;;;;;;;-1:-1:-1;14888:387:0;;;;;:::i;:::-;;:::i;22758:394::-;;;;;;;;;;-1:-1:-1;22758:394:0;;;;;:::i;:::-;;:::i;5418:232::-;;;;;;;;;;-1:-1:-1;5418:232:0;;;;;:::i;:::-;;:::i;5901:218::-;;;;;;;;;;-1:-1:-1;5901:218:0;;;;;:::i;:::-;;:::i;18958:124::-;;;;;;;;;;-1:-1:-1;18958:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11240:151::-;;;;;;;;;;-1:-1:-1;11240:151:0;;;;;:::i;:::-;;:::i;18469:224::-;;;;;;;;;;-1:-1:-1;18469:224:0;;;;;:::i;:::-;;:::i;8932:239::-;;;;;;;;;;-1:-1:-1;8932:239:0;;;;;:::i;:::-;;:::i;8716:208::-;;;;;;;;;;-1:-1:-1;8716:208:0;;;;;:::i;:::-;;:::i;7144:60::-;;;;;;;;;;;;7181:23;7144:60;;19434:280;;;;;;;;;;-1:-1:-1;19434:280:0;;;;;:::i;:::-;;:::i;19724:1016::-;;;;;;:::i;:::-;;:::i;17472:26::-;;;;;;;;;;-1:-1:-1;17472:26:0;;;;;;;;;;;19090:336;;;;;;;;;;-1:-1:-1;19090:336:0;;;;;:::i;:::-;;:::i;7492:43::-;;;;;;;;;;-1:-1:-1;7492:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7492:43:0;;;;;;;;;;;;;;;22280:25:1;;;-1:-1:-1;;;;;22379:15:1;;;22374:2;22359:18;;22352:43;22431:15;;;;22411:18;;;22404:43;;;;22478:2;22463:18;;22456:34;22521:3;22506:19;;22499:35;22267:3;22252:19;7492:43:0;22234:306:1;5140:139:0;;;;;;;;;;-1:-1:-1;5140:139:0;;;;;:::i;:::-;;:::i;9287:104::-;;;;;;;;;;;;;:::i;4549:49::-;;;;;;;;;;-1:-1:-1;4549:49:0;4594:4;4549:49;;10505:295;;;;;;;;;;-1:-1:-1;10505:295:0;;;;;:::i;:::-;;:::i;7378:30::-;;;;;;;;;;-1:-1:-1;7378:30:0;;;;;;;;21984:229;;;;;;;;;;;;;:::i;11399:285::-;;;;;;;;;;-1:-1:-1;11399:285:0;;;;;:::i;:::-;;:::i;22225:525::-;;;:::i;:::-;;;;8119:14:1;;8112:22;8094:41;;8166:2;8151:18;;8144:34;;;;8067:18;22225:525:0;8049:135:1;9498:256:0;;;;;;;;;;-1:-1:-1;9498:256:0;;;;;:::i;:::-;;:::i;23160:169::-;;;:::i;7075:62::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7075:62:0;;5658:235;;;;;;;;;;-1:-1:-1;5658:235:0;;;;;:::i;:::-;;:::i;17584:46::-;;;;;;;;;;-1:-1:-1;17584:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;18266:195;;;;;;;;;;-1:-1:-1;18266:195:0;;;;;:::i;:::-;;:::i;10808:164::-;;;;;;;;;;-1:-1:-1;10808:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;10929:25:0;;;10905:4;10929:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10808:164;7838:52;;;;;;;;;;-1:-1:-1;7838:52:0;;;;;:::i;:::-;;:::i;20748:1228::-;;;;;;;;;;-1:-1:-1;20748:1228:0;;;;;:::i;:::-;;:::i;18701:247::-;;;;;;;;;;-1:-1:-1;18701:247:0;;;;;:::i;:::-;;:::i;18097:161::-;18190:4;18214:36;18238:11;18214:23;:36::i;:::-;18207:43;18097:161;-1:-1:-1;;18097:161:0:o;9179:100::-;9233:13;9266:5;9259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9179:100;:::o;10276:221::-;10352:7;10380:16;10388:7;10380;:16::i;:::-;10372:73;;;;-1:-1:-1;;;10372:73:0;;16207:2:1;10372:73:0;;;16189:21:1;16246:2;16226:18;;;16219:30;16285:34;16265:18;;;16258:62;-1:-1:-1;;;16336:18:1;;;16329:42;16388:19;;10372:73:0;;;;;;;;;-1:-1:-1;10465:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;10465:24:0;;10276:221::o;9871:397::-;9952:13;9968:23;9983:7;9968:14;:23::i;:::-;9952:39;;10016:5;-1:-1:-1;;;;;10010:11:0;:2;-1:-1:-1;;;;;10010:11:0;;;10002:57;;;;-1:-1:-1;;;10002:57:0;;20087:2:1;10002:57:0;;;20069:21:1;20126:2;20106:18;;;20099:30;20165:34;20145:18;;;20138:62;-1:-1:-1;;;20216:18:1;;;20209:31;20257:19;;10002:57:0;20059:223:1;10002:57:0;4083:10;-1:-1:-1;;;;;10080:21:0;;;;:62;;-1:-1:-1;10105:37:0;10122:5;4083:10;10808:164;:::i;10105:37::-;10072:154;;;;-1:-1:-1;;;10072:154:0;;14247:2:1;10072:154:0;;;14229:21:1;14286:2;14266:18;;;14259:30;14325:34;14305:18;;;14298:62;14396:26;14376:18;;;14369:54;14440:19;;10072:154:0;14219:246:1;10072:154:0;10239:21;10248:2;10252:7;10239:8;:21::i;:::-;9871:397;;;:::o;10980:252::-;11088:41;4083:10;11121:7;11088:18;:41::i;:::-;11080:103;;;;-1:-1:-1;;;11080:103:0;;;;;;;:::i;:::-;11196:28;11206:4;11212:2;11216:7;11196:9;:28::i;14888:387::-;14964:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;14964:34::-;14956:90;;;;-1:-1:-1;;;14956:90:0;;;;;;;:::i;:::-;15084:5;15076;15065:10;;:16;;;;:::i;:::-;:24;;15057:66;;;;-1:-1:-1;;;15057:66:0;;20907:2:1;15057:66:0;;;20889:21:1;20946:2;20926:18;;;20919:30;20985:31;20965:18;;;20958:59;21034:18;;15057:66:0;20879:179:1;15057:66:0;15139:6;15134:134;15155:5;15151:1;:9;15134:134;;;15182:16;15201:10;;15214:1;15201:14;;;;:::i;:::-;15182:33;;15230:26;15236:9;15247:8;15230:5;:26::i;:::-;-1:-1:-1;15162:3:0;;;;:::i;:::-;;;;15134:134;;22758:394;17986:4;;;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;;;;22831:14;::::1;18037:11:::0;22831:14:::1;22830:15;22822:24;;;::::0;::::1;;4083:10:::0;22875:24:::1;::::0;;;:10:::1;:24;::::0;;;;;22865:34;::::1;;22857:77;;;::::0;-1:-1:-1;;;22857:77:0;;17389:2:1;22857:77:0::1;::::0;::::1;17371:21:1::0;17428:2;17408:18;;;17401:30;17467:33;17447:18;;;17440:61;17518:18;;22857:77:0::1;17361:181:1::0;22857:77:0::1;22972:36;23001:6:::0;22972:10:::1;:24;4083:10:::0;22983:12:::1;-1:-1:-1::0;;;;;22972:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22972:24:0;;;:28:::1;:36::i;:::-;4083:10:::0;22945:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:63;;;;23038:33;;23060:6;;22945:24;23038:33;22945:24;23038:33;23060:6;4083:10;23038:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23019:52;;;23090:7;23082:16;;;::::0;::::1;;23114:30;::::0;23137:6;;4083:10;;23114:30:::1;::::0;;;::::1;-1:-1:-1::0;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;22758:394::o;5418:232::-;5353:7;5380:12;;;;;;;;;;:22;;;5511:41;;5519:18;4083:10;5140:139;:::i;5511:41::-;5503:101;;;;-1:-1:-1;;;5503:101:0;;8797:2:1;5503:101:0;;;8779:21:1;8836:2;8816:18;;;8809:30;8875:34;8855:18;;;8848:62;-1:-1:-1;;;8926:18:1;;;8919:45;8981:19;;5503:101:0;8769:237:1;5503:101:0;5617:25;5628:4;5634:7;5617:10;:25::i;:::-;5418:232;;:::o;5901:218::-;-1:-1:-1;;;;;5997:23:0;;4083:10;5997:23;5989:83;;;;-1:-1:-1;;;5989:83:0;;21625:2:1;5989:83:0;;;21607:21:1;21664:2;21644:18;;;21637:30;21703:34;21683:18;;;21676:62;-1:-1:-1;;;21754:18:1;;;21747:45;21809:19;;5989:83:0;21597:237:1;5989:83:0;6085:26;6097:4;6103:7;6085:11;:26::i;18958:124::-;-1:-1:-1;;;;;19056:18:0;;;;;;:10;:18;;;;;;;;;19049:25;;;;;;;;;;;;;;;;;19021:16;;19049:25;;;19056:18;19049:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18958:124;;;:::o;11240:151::-;11344:39;11361:4;11367:2;11371:7;11344:39;;;;;;;;;;;;:16;:39::i;18469:224::-;18527:4;18552:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;18552:34::-;18544:90;;;;-1:-1:-1;;;18544:90:0;;;;;;;:::i;:::-;18645:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;18679:4:0;;18469:224;-1:-1:-1;;18469:224:0:o;8932:239::-;9004:7;9040:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9040:16:0;9075:19;9067:73;;;;-1:-1:-1;;;9067:73:0;;15083:2:1;9067:73:0;;;15065:21:1;15122:2;15102:18;;;15095:30;15161:34;15141:18;;;15134:62;-1:-1:-1;;;15212:18:1;;;15205:39;15261:19;;9067:73:0;15055:231:1;8716:208:0;8788:7;-1:-1:-1;;;;;8816:19:0;;8808:74;;;;-1:-1:-1;;;8808:74:0;;14672:2:1;8808:74:0;;;14654:21:1;14711:2;14691:18;;;14684:30;14750:34;14730:18;;;14723:62;-1:-1:-1;;;14801:18:1;;;14794:40;14851:19;;8808:74:0;14644:232:1;8808:74:0;-1:-1:-1;;;;;;8900:16:0;;;;;:9;:16;;;;;;;8716:208::o;19434:280::-;19491:4;19515:41;4083:10;19534:12;19548:7;19515:18;:41::i;:::-;19507:89;;;;-1:-1:-1;;;19507:89:0;;;;;;;:::i;:::-;19614:19;;;;:10;:19;;;;;;19607:26;;;;;;;;-1:-1:-1;;;;;;19607:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19649:35;19614:19;;4083:10;;19649:35;;19614:19;19649:35;-1:-1:-1;19702:4:0;;19434:280;-1:-1:-1;19434:280:0:o;19724:1016::-;17986:4;;19793;;17986;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;19817:16:::1;19825:7:::0;19817::::1;:16::i;:::-;19809:53;;;::::0;-1:-1:-1;;;19809:53:0;;13477:2:1;19809:53:0::1;::::0;::::1;13459:21:1::0;13516:2;13496:18;;;13489:30;-1:-1:-1;;;13535:18:1;;;13528:54;13599:18;;19809:53:0::1;13449:174:1::0;19809:53:0::1;19873:20;19896:19:::0;;;:10:::1;:19;::::0;;;;;;;;19873:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;19873:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;19926:62:::1;;;::::0;-1:-1:-1;;;19926:62:0;;18984:2:1;19926:62:0::1;::::0;::::1;18966:21:1::0;19023:2;19003:18;;;18996:30;-1:-1:-1;;;19042:18:1;;;19035:55;19107:18;;19926:62:0::1;18956:175:1::0;19926:62:0::1;20008:41;4083:10:::0;20027:12:::1;20041:7;20008:18;:41::i;:::-;20007:42;19999:79;;;::::0;-1:-1:-1;;;19999:79:0;;15493:2:1;19999:79:0::1;::::0;::::1;15475:21:1::0;15532:2;15512:18;;;15505:30;15571:26;15551:18;;;15544:54;15615:18;;19999:79:0::1;15465:174:1::0;19999:79:0::1;20093:12;::::0;::::1;::::0;-1:-1:-1;;;;;20093:28:0::1;4083:10:::0;20093:28:::1;20089:399;;;20157:1;20145:9;:13;20137:55;;;::::0;-1:-1:-1;;;20137:55:0;;16620:2:1;20137:55:0::1;::::0;::::1;16602:21:1::0;16659:2;16639:18;;;16632:30;16698:32;16678:18;;;16671:60;16748:18;;20137:55:0::1;16592:180:1::0;20137:55:0::1;20226:16;::::0;::::1;::::0;:31:::1;::::0;20247:9:::1;20226:20;:31::i;:::-;20207:16;::::0;::::1;:50:::0;20089:399:::1;;;20310:5;:14;;;20297:9;:27;;:59;;;;;20340:5;:16;;;20328:9;:28;20297:59;20289:102;;;::::0;-1:-1:-1;;;20289:102:0;;16620:2:1;20289:102:0::1;::::0;::::1;16602:21:1::0;16659:2;16639:18;;;16632:30;16698:32;16678:18;;;16671:60;16748:18;;20289:102:0::1;16592:180:1::0;20289:102:0::1;20425:9;20406:16;::::0;::::1;:28:::0;4083:10;20449:12:::1;::::0;::::1;:27:::0;20089:399:::1;20525:39;20554:9;20525:10;:24;4083:10:::0;20536:12:::1;-1:-1:-1::0;;;;;20525:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20525:24:0;;;:28:::1;:39::i;:::-;4083:10:::0;20498:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:66;;;;20575:19;;;:10:::1;:19:::0;;;;;:27;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;20575:27:0;;::::1;-1:-1:-1::0;;;;;;20575:27:0;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;20618:31;;20639:9:::1;::::0;20618:31:::1;::::0;::::1;20702:7;20685:5;:16;;;20672:12;4083:10:::0;;4003:98;20672:12:::1;-1:-1:-1::0;;;;;20665:45:0::1;;;;;;;;;;;-1:-1:-1::0;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;-1:-1:-1;20728:4:0::1;::::0;19724:1016::o;19090:336::-;19154:4;19178:41;4083:10;19197:12;4003:98;19178:41;19170:89;;;;-1:-1:-1;;;19170:89:0;;;;;;;:::i;:::-;19291:51;;;;;;;;19299:7;19291:51;;;;19307:12;4083:10;;4003:98;19307:12;-1:-1:-1;;;;;19291:51:0;;;;;19328:1;19291:51;;;;;;;;;;;;;;;;;;;;;19270:19;;;:10;:19;;;;;;:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19270:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19331:8;19281:7;19366:12;4083:10;;4003:98;19366:12;-1:-1:-1;;;;;19358:38:0;;;;;;;;;;;-1:-1:-1;19414:4:0;19090:336;;;;:::o;5140:139::-;5218:4;5242:12;;;;;;;;;;;-1:-1:-1;;;;;5242:29:0;;;;;;;;;;;;;;;5140:139::o;9287:104::-;9343:13;9376:7;9369:14;;;;;:::i;10505:295::-;-1:-1:-1;;;;;10608:24:0;;4083:10;10608:24;;10600:62;;;;-1:-1:-1;;;10600:62:0;;11579:2:1;10600:62:0;;;11561:21:1;11618:2;11598:18;;;11591:30;11657:27;11637:18;;;11630:55;11702:18;;10600:62:0;11551:175:1;10600:62:0;4083:10;10675:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10675:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;10675:53:0;;;;;;;;;;10744:48;;7874:41:1;;;10675:42:0;;4083:10;10744:48;;7847:18:1;10744:48:0;;;;;;;10505:295;;:::o;21984:229::-;22033:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;22033:34::-;22025:90;;;;-1:-1:-1;;;22025:90:0;;;;;;;:::i;:::-;22135:10;;;;22134:11;22126:20;;;;;;22157:10;:17;;-1:-1:-1;;22157:17:0;22170:4;22157:17;;;22190:15;;;;22157:10;;22190:15;21984:229::o;11399:285::-;11531:41;4083:10;11550:12;4003:98;11531:41;11523:103;;;;-1:-1:-1;;;11523:103:0;;;;;;;:::i;:::-;11637:39;11651:4;11657:2;11661:7;11670:5;11637:13;:39::i;:::-;11399:285;;;;:::o;22225:525::-;17986:4;;22280;;;;17986;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;;;;22311:14;::::1;18037:11:::0;22311:14:::1;22310:15;22302:24;;;::::0;::::1;;22345:10;::::0;::::1;;22337:47;;;::::0;-1:-1:-1;;;22337:47:0;;10409:2:1;22337:47:0::1;::::0;::::1;10391:21:1::0;10448:2;10428:18;;;10421:30;10487:26;10467:18;;;10460:54;10531:18;;22337:47:0::1;10381:174:1::0;22337:47:0::1;22418:5;22403:10;;22414:1;22403:12;;;;:::i;:::-;:20;;22395:62;;;::::0;-1:-1:-1;;;22395:62:0;;20907:2:1;22395:62:0::1;::::0;::::1;20889:21:1::0;20946:2;20926:18;;;20919:30;20985:31;20965:18;;;20958:59;21034:18;;22395:62:0::1;20879:179:1::0;22395:62:0::1;22489:5;;22476:9;:18;;22468:62;;;::::0;-1:-1:-1;;;22468:62:0;;12288:2:1;22468:62:0::1;::::0;::::1;12270:21:1::0;12327:2;12307:18;;;12300:30;12366:33;12346:18;;;12339:61;12417:18;;22468:62:0::1;12260:181:1::0;22468:62:0::1;22560:7;::::0;:33:::1;::::0;22542:12:::1;::::0;22560:7:::1;::::0;::::1;-1:-1:-1::0;;;;;22560:7:0::1;::::0;22579:9:::1;::::0;22542:12;22560:33;22542:12;22560:33;22579:9;22560:7;:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22541:52;;;22612:7;22604:16;;;::::0;::::1;;22631:13;22647:10;;22660:1;22647:14;;;;:::i;:::-;22631:30:::0;-1:-1:-1;22672:29:0::1;4083:10:::0;22692:8:::1;22672:5;:29::i;:::-;22728:4;::::0;-1:-1:-1;22733:8:0;-1:-1:-1;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;22225:525;;:::o;9498:256::-;9571:13;9605:16;9613:7;9605;:16::i;:::-;9597:76;;;;-1:-1:-1;;;9597:76:0;;17749:2:1;9597:76:0;;;17731:21:1;17788:2;17768:18;;;17761:30;17827:34;17807:18;;;17800:62;-1:-1:-1;;;17878:18:1;;;17871:45;17933:19;;9597:76:0;17721:237:1;9597:76:0;9715:10;:8;:10::i;:::-;9727:17;9736:7;9727:8;:17::i;:::-;9698:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9684:62;;9498:256;;;:::o;23160:169::-;23234:39;23263:9;23234:10;:24;4083:10;23245:12;4003:98;23234:39;4083:10;23207:24;;;;:10;:24;;;;;;:66;;;;23289:32;;23311:9;;23289:32;;;23160:169::o;5658:235::-;5353:7;5380:12;;;;;;;;;;:22;;;5752:41;;5760:18;5287:123;5752:41;5744:102;;;;-1:-1:-1;;;5744:102:0;;13830:2:1;5744:102:0;;;13812:21:1;13869:2;13849:18;;;13842:30;13908:34;13888:18;;;13881:62;-1:-1:-1;;;13959:18:1;;;13952:46;14015:19;;5744:102:0;13802:238:1;18266:195:0;18332:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;18332:34::-;18324:94;;;;-1:-1:-1;;;18324:94:0;;13061:2:1;18324:94:0;;;13043:21:1;13100:2;13080:18;;;13073:30;13139:34;13119:18;;;13112:62;-1:-1:-1;;;13190:18:1;;;13183:45;13245:19;;18324:94:0;13033:237:1;18324:94:0;18429:14;:24;;;;;;;-1:-1:-1;;18429:24:0;;;;;;;;;18266:195::o;7838:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20748:1228::-;17986:4;;20811;;17986;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;;;;20836:14;::::1;18037:11:::0;20836:14:::1;20835:15;20827:24;;;::::0;::::1;;20870:16;20878:7;20870;:16::i;:::-;20862:53;;;::::0;-1:-1:-1;;;20862:53:0;;13477:2:1;20862:53:0::1;::::0;::::1;13459:21:1::0;13516:2;13496:18;;;13489:30;-1:-1:-1;;;13535:18:1;;;13528:54;13599:18;;20862:53:0::1;13449:174:1::0;20862:53:0::1;20926:20;20949:19:::0;;;:10:::1;:19;::::0;;;;;;;;20926:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;20926:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;20979:62:::1;;;::::0;-1:-1:-1;;;20979:62:0;;18984:2:1;20979:62:0::1;::::0;::::1;18966:21:1::0;19023:2;19003:18;;;18996:30;-1:-1:-1;;;19042:18:1;;;19035:55;19107:18;;20979:62:0::1;18956:175:1::0;20979:62:0::1;21060:41;4083:10:::0;21079:12:::1;4003:98:::0;21060:41:::1;21052:95;;;::::0;-1:-1:-1;;;21052:95:0;;18165:2:1;21052:95:0::1;::::0;::::1;18147:21:1::0;18204:2;18184:18;;;18177:30;18243:34;18223:18;;;18216:62;-1:-1:-1;;;18294:18:1;;;18287:39;18343:19;;21052:95:0::1;18137:231:1::0;21052:95:0::1;21194:16;::::0;::::1;::::0;21177:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21166:24:0::1;;::::0;;;:10:::1;:24;::::0;;;:44:::1;;21158:96;;;::::0;-1:-1:-1;;;21158:96:0;;18575:2:1;21158:96:0::1;::::0;::::1;18557:21:1::0;18614:2;18594:18;;;18587:30;18653:34;18633:18;;;18626:62;-1:-1:-1;;;18704:18:1;;;18697:38;18752:19;;21158:96:0::1;18547:230:1::0;21158:96:0::1;21272:19;::::0;;;:10:::1;:19;::::0;;;;21265:26;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;21265:26:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;21326:16:::1;::::0;::::1;::::0;:22:::1;::::0;21345:3:::1;::::0;21326:22:::1;:::i;:::-;:41;;;;:::i;:::-;21434:16;::::0;::::1;::::0;21416:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21405:24:0::1;;::::0;;;:10:::1;:24;::::0;;;21302:65;;-1:-1:-1;21405:46:0::1;::::0;:24;:28:::1;:46::i;:::-;21389:12;::::0;;::::1;::::0;-1:-1:-1;;;;;21378:24:0::1;;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21518:16:::1;::::0;::::1;::::0;21489:46:::1;::::0;21518:16;;21378:10;4083;21500:12:::1;4003:98:::0;21489:46:::1;4083:10:::0;21462:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21573:43:::1;::::0;21602:13;;21462:10;;:24;21584:12:::1;4003:98:::0;21573:43:::1;4083:10:::0;21546:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:70;;;;21646:7:::1;::::0;:37;;21546:24;;21646:7:::1;::::0;::::1;-1:-1:-1::0;;;;;21646:7:0::1;::::0;21665:13;;21546:24;21646:37;21546:24;21646:37;21665:13;21646:7;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21627:56;;;21702:7;21694:16;;;::::0;::::1;;21721:43;21731:5;:11;;;21743:5;:12;;;21756:7;21721:9;:43::i;:::-;21780:35;::::0;21807:7;;4083:10;;21780:35:::1;::::0;;;::::1;21863:16;::::0;::::1;::::0;21850:12:::1;::::0;::::1;::::0;-1:-1:-1;;;;;21831:57:0::1;4083:10:::0;-1:-1:-1;;;;;21831:57:0::1;;21880:7;21831:57;;;;8335:25:1::0;;8323:2;8308:18;;8290:76;21831:57:0::1;;;;;;;;21938:7;21925:5;:12;;;-1:-1:-1::0;;;;;21904:42:0::1;21913:5;:11;;;-1:-1:-1::0;;;;;21904:42:0::1;;;;;;;;;;;-1:-1:-1::0;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;-1:-1:-1;21964:4:0::1;::::0;20748:1228;-1:-1:-1;;20748:1228:0:o;18701:247::-;18768:4;18792:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;18792:34::-;18784:98;;;;-1:-1:-1;;;18784:98:0;;9989:2:1;18784:98:0;;;9971:21:1;10028:2;10008:18;;;10001:30;10067:34;10047:18;;;10040:62;-1:-1:-1;;;10118:18:1;;;10111:49;10177:19;;18784:98:0;9961:241:1;18784:98:0;-1:-1:-1;18893:7:0;:25;;-1:-1:-1;;;;;18893:25:0;;;;;-1:-1:-1;;;;;;18893:25:0;;;;;;;;;:7;;18701:247::o;8401:307::-;8518:4;-1:-1:-1;;;;;;8542:40:0;;-1:-1:-1;;;8542:40:0;;:105;;-1:-1:-1;;;;;;;8599:48:0;;-1:-1:-1;;;8599:48:0;8542:105;:158;;;;8664:36;8688:11;8664:23;:36::i;11972:127::-;12037:4;12061:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12061:16:0;:30;;;11972:127::o;16236:174::-;16311:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16311:29:0;-1:-1:-1;;;;;16311:29:0;;;;;;;;:24;;16365:23;16311:24;16365:14;:23::i;:::-;-1:-1:-1;;;;;16356:46:0;;;;;;;;;;;16236:174;;:::o;12107:348::-;12200:4;12225:16;12233:7;12225;:16::i;:::-;12217:73;;;;-1:-1:-1;;;12217:73:0;;12648:2:1;12217:73:0;;;12630:21:1;12687:2;12667:18;;;12660:30;12726:34;12706:18;;;12699:62;-1:-1:-1;;;12777:18:1;;;12770:42;12829:19;;12217:73:0;12620:234:1;12217:73:0;12301:13;12317:23;12332:7;12317:14;:23::i;:::-;12301:39;;12370:5;-1:-1:-1;;;;;12359:16:0;:7;-1:-1:-1;;;;;12359:16:0;;:51;;;;12403:7;-1:-1:-1;;;;;12379:31:0;:20;12391:7;12379:11;:20::i;:::-;-1:-1:-1;;;;;12379:31:0;;12359:51;:87;;;-1:-1:-1;;;;;;10929:25:0;;;10905:4;10929:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;12414:32;12351:96;12107:348;-1:-1:-1;;;;12107:348:0:o;15675:553::-;15800:4;-1:-1:-1;;;;;15773:31:0;:23;15788:7;15773:14;:23::i;:::-;-1:-1:-1;;;;;15773:31:0;;15765:85;;;;-1:-1:-1;;;15765:85:0;;16979:2:1;15765:85:0;;;16961:21:1;17018:2;16998:18;;;16991:30;17057:34;17037:18;;;17030:62;-1:-1:-1;;;17108:18:1;;;17101:39;17157:19;;15765:85:0;16951:231:1;15765:85:0;-1:-1:-1;;;;;15869:16:0;;15861:65;;;;-1:-1:-1;;;15861:65:0;;11174:2:1;15861:65:0;;;11156:21:1;11213:2;11193:18;;;11186:30;11252:34;11232:18;;;11225:62;-1:-1:-1;;;11303:18:1;;;11296:34;11347:19;;15861:65:0;11146:226:1;15861:65:0;15991:29;16008:1;16012:7;15991:8;:29::i;:::-;16041;16056:4;16062:7;16041:14;:29::i;:::-;16081:24;16093:2;16097:7;16081:11;:24::i;:::-;-1:-1:-1;;;;;16118:15:0;;;;;;:9;:15;;;;;:20;;16137:1;;16118:15;:20;;16137:1;;16118:20;:::i;:::-;;;;-1:-1:-1;;;;;;;16149:13:0;;;;;;:9;:13;;;;;:18;;16166:1;;16149:13;:18;;16166:1;;16149:18;:::i;:::-;;;;-1:-1:-1;;16193:27:0;;16212:7;;-1:-1:-1;;;;;16193:27:0;;;;;;;;;;;;;15675:553;;;:::o;14395:485::-;-1:-1:-1;;;;;14475:16:0;;14467:61;;;;-1:-1:-1;;;14467:61:0;;15846:2:1;14467:61:0;;;15828:21:1;;;15865:18;;;15858:30;15924:34;15904:18;;;15897:62;15976:18;;14467:61:0;15818:182:1;14467:61:0;14548:16;14556:7;14548;:16::i;:::-;14547:17;14539:58;;;;-1:-1:-1;;;14539:58:0;;9632:2:1;14539:58:0;;;9614:21:1;9671:2;9651:18;;;9644:30;9710;9690:18;;;9683:58;9758:18;;14539:58:0;9604:178:1;14539:58:0;-1:-1:-1;;;;;14668:13:0;;;;;;:9;:13;;;;;:18;;14685:1;;14668:13;:18;;14685:1;;14668:18;:::i;:::-;;;;;;;;14711:1;14697:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14723:18:0;;;;;;:14;:18;;;;;;;:32;;;;;;;;;;;;;;;;14766:24;14738:2;14747:7;14766:11;:24::i;:::-;14806:17;;-1:-1:-1;;;;;14806:17:0;;;14811:7;;14806:17;;;;;14839:33;;14864:7;;-1:-1:-1;;;;;14839:33:0;;;14856:1;;14839:33;;14856:1;;14839:33;14395:485;;:::o;1096:124::-;1154:7;1187:1;1182;:6;;1174:15;;;;;;1207:5;1211:1;1207;:5;:::i;:::-;1200:12;1096:124;-1:-1:-1;;;1096:124:0:o;6450:229::-;6525:22;6533:4;6539:7;6525;:22::i;:::-;6520:152;;6564:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6564:29:0;;;;;;;;;:36;;-1:-1:-1;;6564:36:0;6596:4;6564:36;;;6647:12;4083:10;;4003:98;6647:12;-1:-1:-1;;;;;6620:40:0;6638:7;-1:-1:-1;;;;;6620:40:0;6632:4;6620:40;;;;;;;;;;6450:229;;:::o;6687:230::-;6762:22;6770:4;6776:7;6762;:22::i;:::-;6758:152;;;6833:5;6801:12;;;;;;;;;;;-1:-1:-1;;;;;6801:29:0;;;;;;;;;;:37;;-1:-1:-1;;6801:37:0;;;6858:40;4083:10;;6801:12;;6858:40;;6833:5;6858:40;6687:230;;:::o;1295:142::-;1353:9;1379:5;1383:1;1379;:5;:::i;:::-;1375:9;;1408:1;1403;:6;;1395:15;;;;;11692:272;11806:28;11816:4;11822:2;11826:7;11806:9;:28::i;:::-;11853:48;11876:4;11882:2;11886:7;11895:5;11853:22;:48::i;:::-;11845:111;;;;-1:-1:-1;;;11845:111:0;;;;;;;:::i;9762:99::-;9813:13;9846:7;9839:14;;;;;:::i;12839:545::-;12895:13;12938:10;12934:53;;-1:-1:-1;;12965:10:0;;;;;;;;;;;;-1:-1:-1;;;12965:10:0;;;;;12839:545::o;12934:53::-;13012:5;12997:12;13053:78;13060:9;;13053:78;;13086:8;;;;:::i;:::-;;-1:-1:-1;13109:10:0;;-1:-1:-1;13117:2:0;13109:10;;:::i;:::-;;;13053:78;;;13141:19;13173:6;13163:17;;;;;;-1:-1:-1;;;13163:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13163:17:0;;13141:39;;13191:154;13198:10;;13191:154;;13225:11;13235:1;13225:11;;:::i;:::-;;-1:-1:-1;13294:10:0;13302:2;13294:5;:10;:::i;:::-;13281:24;;:2;:24;:::i;:::-;13268:39;;13251:6;13258;13251:14;;;;;;-1:-1:-1;;;13251:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;13251:56:0;;;;;;;;-1:-1:-1;13322:11:0;13331:2;13322:11;;:::i;:::-;;;13191:154;;4915:217;5000:4;-1:-1:-1;;;;;;5024:47:0;;-1:-1:-1;;;5024:47:0;;:100;;-1:-1:-1;;;;;;;;;;4265:40:0;;;5088:36;4156:157;13696:691;13781:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;13781:26:0;;;:17;;:26;13773:55;;;;-1:-1:-1;;;13773:55:0;;19338:2:1;13773:55:0;;;19320:21:1;19377:2;19357:18;;;19350:30;-1:-1:-1;;;19396:18:1;;;19389:46;19452:18;;13773:55:0;19310:166:1;13773:55:0;13846:17;;;;:7;:17;;;;;;;;13839:24;;-1:-1:-1;;;;;;13839:24:0;;;;;;13881:10;:20;;;;;13874:27;;;13839:24;13874:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13941:14;:24;;;;;;-1:-1:-1;;;;;14001:17:0;;;;:10;:17;;;;;;:24;13941;;13846:17;14001:31;;:28;:31::i;:::-;13976:56;;14067:18;14049:14;:36;14045:247;;-1:-1:-1;;;;;14122:17:0;;14102;14122;;;:10;:17;;;;;:33;;14140:14;;14122:33;;;;-1:-1:-1;;;14122:33:0;;;;;;;;;;;;;;;;;14102:53;;14210:9;14170:10;:17;14181:5;-1:-1:-1;;;;;14170:17:0;-1:-1:-1;;;;;14170:17:0;;;;;;;;;;;;14188:18;14170:37;;;;;;-1:-1:-1;;;14170:37:0;;;;;;;;;;;;;;;;;;;;:49;;;;14234:25;;;:14;:25;;;;;:46;;;14045:247;-1:-1:-1;;;;;14304:17:0;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;14304:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;14370:8;14357:12;4083:10;;4003:98;14357:12;-1:-1:-1;;;;;14343:36:0;;;;;;;;;;;13696:691;;;;:::o;13394:294::-;13503:1;13474:17;;;:7;:17;;;;;;-1:-1:-1;;;;;13474:17:0;:31;13466:70;;;;-1:-1:-1;;;13466:70:0;;11933:2:1;13466:70:0;;;11915:21:1;11972:2;11952:18;;;11945:30;12011:28;11991:18;;;11984:56;12057:18;;13466:70:0;11905:176:1;13466:70:0;13547:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;13547:23:0;-1:-1:-1;;;;;13547:23:0;;;;;;;;13583:15;;;:10;:15;;;;;:30;;-1:-1:-1;13583:30:0;;;;;;;;;;;;;;;13651:15;;:22;;:29;;:26;:29::i;:::-;13624:24;;;;:14;:24;;;;;;:56;-1:-1:-1;13394:294:0:o;16418:843::-;16539:4;-1:-1:-1;;;;;16565:13:0;;217:20;256:8;16561:693;;16601:72;;-1:-1:-1;;;16601:72:0;;-1:-1:-1;;;;;16601:36:0;;;;;:72;;4083:10;;16652:4;;16658:7;;16667:5;;16601:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16601:72:0;;;;;;;;-1:-1:-1;;16601:72:0;;;;;;;;;;;;:::i;:::-;;;16597:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16847:13:0;;16843:341;;16890:60;;-1:-1:-1;;;16890:60:0;;;;;;;:::i;16843:341::-;17134:6;17128:13;17119:6;17115:2;17111:15;17104:38;16597:602;-1:-1:-1;;;;;;16724:55:0;-1:-1:-1;;;16724:55:0;;-1:-1:-1;16717:62:0;;16561:693;-1:-1:-1;17238:4:0;16418:843;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:264::-;3509:6;3517;3570:2;3558:9;3549:7;3545:23;3541:32;3538:2;;;3591:6;3583;3576:22;3538:2;3632:9;3619:23;3609:33;;3661:38;3695:2;3684:9;3680:18;3661:38;:::i;3710:255::-;3768:6;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;3842:6;3834;3827:22;3789:2;3886:9;3873:23;3905:30;3929:5;3905:30;:::i;3970:259::-;4039:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:2;;;4113:6;4105;4098:22;4060:2;4150:9;4144:16;4169:30;4193:5;4169:30;:::i;4234:480::-;4303:6;4356:2;4344:9;4335:7;4331:23;4327:32;4324:2;;;4377:6;4369;4362:22;4324:2;4422:9;4409:23;4455:18;4447:6;4444:30;4441:2;;;4492:6;4484;4477:22;4441:2;4520:22;;4573:4;4565:13;;4561:27;-1:-1:-1;4551:2:1;;4607:6;4599;4592:22;4551:2;4635:73;4700:7;4695:2;4682:16;4677:2;4673;4669:11;4635:73;:::i;5183:258::-;5251:6;5259;5312:2;5300:9;5291:7;5287:23;5283:32;5280:2;;;5333:6;5325;5318:22;5280:2;-1:-1:-1;;5361:23:1;;;5431:2;5416:18;;;5403:32;;-1:-1:-1;5270:171:1:o;5446:257::-;5487:3;5525:5;5519:12;5552:6;5547:3;5540:19;5568:63;5624:6;5617:4;5612:3;5608:14;5601:4;5594:5;5590:16;5568:63;:::i;:::-;5685:2;5664:15;-1:-1:-1;;5660:29:1;5651:39;;;;5692:4;5647:50;;5495:208;-1:-1:-1;;5495:208:1:o;5708:470::-;5887:3;5925:6;5919:13;5941:53;5987:6;5982:3;5975:4;5967:6;5963:17;5941:53;:::i;:::-;6057:13;;6016:16;;;;6079:57;6057:13;6016:16;6113:4;6101:17;;6079:57;:::i;:::-;6152:20;;5895:283;-1:-1:-1;;;;5895:283:1:o;6601:488::-;-1:-1:-1;;;;;6870:15:1;;;6852:34;;6922:15;;6917:2;6902:18;;6895:43;6969:2;6954:18;;6947:34;;;7017:3;7012:2;6997:18;;6990:31;;;6795:4;;7038:45;;7063:19;;7055:6;7038:45;:::i;:::-;7030:53;6804:285;-1:-1:-1;;;;;;6804:285:1:o;7094:635::-;7265:2;7317:21;;;7387:13;;7290:18;;;7409:22;;;7236:4;;7265:2;7488:15;;;;7462:2;7447:18;;;7236:4;7534:169;7548:6;7545:1;7542:13;7534:169;;;7609:13;;7597:26;;7678:15;;;;7643:12;;;;7570:1;7563:9;7534:169;;;-1:-1:-1;7720:3:1;;7245:484;-1:-1:-1;;;;;;7245:484:1:o;8371:219::-;8520:2;8509:9;8502:21;8483:4;8540:44;8580:2;8569:9;8565:18;8557:6;8540:44;:::i;9011:414::-;9213:2;9195:21;;;9252:2;9232:18;;;9225:30;9291:34;9286:2;9271:18;;9264:62;-1:-1:-1;;;9357:2:1;9342:18;;9335:48;9415:3;9400:19;;9185:240::o;10560:407::-;10762:2;10744:21;;;10801:2;10781:18;;;10774:30;10840:34;10835:2;10820:18;;10813:62;-1:-1:-1;;;10906:2:1;10891:18;;10884:41;10957:3;10942:19;;10734:233::o;19481:399::-;19683:2;19665:21;;;19722:2;19702:18;;;19695:30;19761:34;19756:2;19741:18;;19734:62;-1:-1:-1;;;19827:2:1;19812:18;;19805:33;19870:3;19855:19;;19655:225::o;20287:413::-;20489:2;20471:21;;;20528:2;20508:18;;;20501:30;20567:34;20562:2;20547:18;;20540:62;-1:-1:-1;;;20633:2:1;20618:18;;20611:47;20690:3;20675:19;;20461:239::o;21063:355::-;21265:2;21247:21;;;21304:2;21284:18;;;21277:30;21343:33;21338:2;21323:18;;21316:61;21409:2;21394:18;;21237:181::o;22545:128::-;22585:3;22616:1;22612:6;22609:1;22606:13;22603:2;;;22622:18;;:::i;:::-;-1:-1:-1;22658:9:1;;22593:80::o;22678:120::-;22718:1;22744;22734:2;;22749:18;;:::i;:::-;-1:-1:-1;22783:9:1;;22724:74::o;22803:168::-;22843:7;22909:1;22905;22901:6;22897:14;22894:1;22891:21;22886:1;22879:9;22872:17;22868:45;22865:2;;;22916:18;;:::i;:::-;-1:-1:-1;22956:9:1;;22855:116::o;22976:125::-;23016:4;23044:1;23041;23038:8;23035:2;;;23049:18;;:::i;:::-;-1:-1:-1;23086:9:1;;23025:76::o;23106:258::-;23178:1;23188:113;23202:6;23199:1;23196:13;23188:113;;;23278:11;;;23272:18;23259:11;;;23252:39;23224:2;23217:10;23188:113;;;23319:6;23316:1;23313:13;23310:2;;;-1:-1:-1;;23354:1:1;23336:16;;23329:27;23159:205::o;23369:380::-;23448:1;23444:12;;;;23491;;;23512:2;;23566:4;23558:6;23554:17;23544:27;;23512:2;23619;23611:6;23608:14;23588:18;23585:38;23582:2;;;23665:10;23660:3;23656:20;23653:1;23646:31;23700:4;23697:1;23690:15;23728:4;23725:1;23718:15;23582:2;;23424:325;;;:::o;23754:135::-;23793:3;-1:-1:-1;;23814:17:1;;23811:2;;;23834:18;;:::i;:::-;-1:-1:-1;23881:1:1;23870:13;;23801:88::o;23894:112::-;23926:1;23952;23942:2;;23957:18;;:::i;:::-;-1:-1:-1;23991:9:1;;23932:74::o;24011:127::-;24072:10;24067:3;24063:20;24060:1;24053:31;24103:4;24100:1;24093:15;24127:4;24124:1;24117:15;24143:127;24204:10;24199:3;24195:20;24192:1;24185:31;24235:4;24232:1;24225:15;24259:4;24256:1;24249:15;24275:127;24336:10;24331:3;24327:20;24324:1;24317:31;24367:4;24364:1;24357:15;24391:4;24388:1;24381:15;24407:131;-1:-1:-1;;;;;;24481:32:1;;24471:43;;24461:2;;24528:1;24525;24518:12;24461:2;24451:87;:::o

Swarm Source

ipfs://ca5539928883c20377811d02461061aade6362756c71febb43e89df712722596
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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