ETH Price: $3,648.38 (+1.92%)

Token

ERC-20: Mirror Editions V3 (EDITIONS_V3)
 

Overview

Max Total Supply

0 EDITIONS_V3

Holders

3,972

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
joshuavial.eth
Balance
1 EDITIONS_V3
0x330A1b029a0C41b749B43274c992D535d714Bf2c
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:
SingletonEditions

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface IERC721 {
    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 IERC721Events {
    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
    );
}

interface IERC721Metadata {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

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

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

/**
 * Based on: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol
 */
contract ERC721 is ERC165, IERC721, IERC721Events {
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        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 tokenURI(uint256 tokenId)
        public
        view
        virtual
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId))
                : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "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 != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, 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 {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(msg.sender, 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(msg.sender, 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 _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[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");

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        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 (isContract(to)) {
            try
                IERC721Receiver(to).onERC721Received(
                    msg.sender,
                    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;
        }
    }

    // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/7f6a1666fac8ecff5dd467d0938069bc221ea9e0/contracts/utils/Address.sol
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}

interface ITreasuryConfig {
    function treasury() external returns (address payable);

    function distributionModel() external returns (address);
}

interface IMirrorTreasury {
    function transferFunds(address payable to, uint256 value) external;

    function transferERC20(
        address token,
        address to,
        uint256 value
    ) external;

    function contributeWithTributary(address tributary) external payable;

    function contribute(uint256 amount) external payable;
}

contract Ownable {
    address public owner;
    address private nextOwner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    // modifiers

    modifier onlyOwner() {
        require(isOwner(), "caller is not the owner.");
        _;
    }

    modifier onlyNextOwner() {
        require(isNextOwner(), "current owner must set caller as next owner.");
        _;
    }

    /**
     * @dev Initialize contract by setting transaction submitter as initial owner.
     */
    constructor(address owner_) {
        owner = owner_;
        emit OwnershipTransferred(address(0), owner);
    }

    /**
     * @dev Initiate ownership transfer by setting nextOwner.
     */
    function transferOwnership(address nextOwner_) external onlyOwner {
        require(nextOwner_ != address(0), "Next owner is the zero address.");

        nextOwner = nextOwner_;
    }

    /**
     * @dev Cancel ownership transfer by deleting nextOwner.
     */
    function cancelOwnershipTransfer() external onlyOwner {
        delete nextOwner;
    }

    /**
     * @dev Accepts ownership transfer by setting owner.
     */
    function acceptOwnership() external onlyNextOwner {
        delete nextOwner;

        owner = msg.sender;

        emit OwnershipTransferred(owner, msg.sender);
    }

    /**
     * @dev Renounce ownership by setting owner to zero address.
     */
    function renounceOwnership() external onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(owner, address(0));
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == owner;
    }

    /**
     * @dev Returns true if the caller is the next owner.
     */
    function isNextOwner() public view returns (bool) {
        return msg.sender == nextOwner;
    }
}

interface IGovernable {
    function changeGovernor(address governor_) external;

    function isGovernor() external view returns (bool);

    function governor() external view returns (address);
}

contract Governable is Ownable, IGovernable {
    // ============ Mutable Storage ============

    // Mirror governance contract.
    address public override governor;

    // ============ Modifiers ============

    modifier onlyGovernance() {
        require(isOwner() || isGovernor(), "caller is not governance");
        _;
    }

    modifier onlyGovernor() {
        require(isGovernor(), "caller is not governor");
        _;
    }

    // ============ Constructor ============

    constructor(address owner_) Ownable(owner_) {}

    // ============ Administration ============

    function changeGovernor(address governor_) public override onlyGovernance {
        governor = governor_;
    }

    // ============ Utility Functions ============

    function isGovernor() public view override returns (bool) {
        return msg.sender == governor;
    }
}

/**
 * @title SingletonEditions
 * @author MirrorXYZ
 */
contract SingletonEditions is ERC721, Governable {
    // ============ Constants ============

    string public constant name = "Mirror Editions V3";
    string public constant symbol = "EDITIONS_V3";

    uint256 internal constant REENTRANCY_NOT_ENTERED = 1;
    uint256 internal constant REENTRANCY_ENTERED = 2;

    // ============ Immutable Storage ============

    address public immutable treasuryConfig;
    uint256 public immutable feePercent = 250;

    // ============ Structs ============

    struct Edition {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        // The account that will receive sales revenue.
        address payable fundingRecipient;
        // The number of tokens sold so far.
        uint256 numSold;
        // The content hash of the image being presented.
        bytes32 contentHash;
    }

    // A subset of Edition, for efficient production of multiple editions.
    struct EditionTier {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        bytes32 contentHash;
    }

    mapping(address => uint256) public fundingBalance;

    // ============ Mutable Storage ============

    string internal baseURI;
    // Mapping of edition id to descriptive data.
    mapping(uint256 => Edition) public editions;
    // Mapping of token id to edition id.
    mapping(uint256 => uint256) public tokenToEdition;
    // The amount of funds that have already been withdrawn for a given edition.
    mapping(uint256 => uint256) public withdrawnForEdition;
    // `nextTokenId` increments with each token purchased, globally across all editions.
    uint256 private nextTokenId;
    // Editions start at 1, in order that unsold tokens don't map to the first edition.
    uint256 private nextEditionId = 1;
    // Reentrancy
    uint256 internal reentrancyStatus;

    // ============ Events ============

    event EditionCreated(
        uint256 quantity,
        uint256 price,
        address fundingRecipient,
        uint256 indexed editionId,
        bytes32 contentHash
    );

    event EditionPurchased(
        uint256 indexed editionId,
        uint256 indexed tokenId,
        // `numSold` at time of purchase represents the "serial number" of the NFT.
        uint256 numSold,
        uint256 amountPaid,
        // The account that paid for and received the NFT.
        address indexed buyer
    );

    event FundsWithdrawn(
        address fundingRecipient,
        uint256 amountWithdrawn,
        uint256 feeAmount
    );

    // ============ Modifiers ============

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(reentrancyStatus != REENTRANCY_ENTERED, "Reentrant call");
        // Any calls to nonReentrant after this point will fail
        reentrancyStatus = REENTRANCY_ENTERED;
        _;
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        reentrancyStatus = REENTRANCY_NOT_ENTERED;
    }

    // ============ Constructor ============

    constructor(
        string memory baseURI_,
        address owner_,
        address treasuryConfig_
    ) Governable(owner_) {
        baseURI = baseURI_;
        owner = owner_;
        treasuryConfig = treasuryConfig_;
    }

    // ============ Edition Methods ============

    function createEditionTiers(
        EditionTier[] memory tiers,
        address payable fundingRecipient
    ) external nonReentrant {
        // Execute a loop that creates editions.
        for (uint8 i = 0; i < tiers.length; i++) {
            uint256 quantity = tiers[i].quantity;
            uint256 price = tiers[i].price;
            bytes32 contentHash_ = tiers[i].contentHash;

            editions[nextEditionId] = Edition({
                quantity: quantity,
                price: price,
                fundingRecipient: fundingRecipient,
                numSold: 0,
                contentHash: contentHash_
            });

            emit EditionCreated(
                quantity,
                price,
                fundingRecipient,
                nextEditionId,
                contentHash_
            );

            nextEditionId++;
        }
    }

    function createEdition(
        // The number of tokens that can be minted and sold.
        uint256 quantity,
        // The price to purchase a token.
        uint256 price,
        // The account that should receive the revenue.
        address payable fundingRecipient,
        // Content hash is emitted in the event, for UI convenience.
        bytes32 contentHash_
    ) external nonReentrant {
        editions[nextEditionId] = Edition({
            quantity: quantity,
            price: price,
            fundingRecipient: fundingRecipient,
            numSold: 0,
            contentHash: contentHash_
        });

        emit EditionCreated(
            quantity,
            price,
            fundingRecipient,
            nextEditionId,
            contentHash_
        );

        nextEditionId++;
    }

    function buyEdition(uint256 editionId) external payable nonReentrant {
        // Check that the edition exists. Note: this is redundant
        // with the next check, but it is useful for clearer error messaging.
        require(editions[editionId].quantity > 0, "Edition does not exist");
        // Check that there are still tokens available to purchase.
        require(
            editions[editionId].numSold < editions[editionId].quantity,
            "This edition is already sold out."
        );
        // Check that the sender is paying the correct amount.
        require(
            msg.value >= editions[editionId].price,
            "Must send enough to purchase the edition."
        );
        // Increment the number of tokens sold for this edition.
        editions[editionId].numSold++;
        fundingBalance[editions[editionId].fundingRecipient] += msg.value;
        // Mint a new token for the sender, using the `nextTokenId`.
        _mint(msg.sender, nextTokenId);
        // Store the mapping of token id to the edition being purchased.
        tokenToEdition[nextTokenId] = editionId;

        emit EditionPurchased(
            editionId,
            nextTokenId,
            editions[editionId].numSold,
            msg.value,
            msg.sender
        );

        nextTokenId++;
    }

    // ============ Operational Methods ============

    function withdrawFunds(address payable fundingRecipient)
        external
        nonReentrant
    {
        uint256 balance = fundingBalance[fundingRecipient];
        fundingBalance[fundingRecipient] = 0;

        // Send the amount that was remaining for the edition, to the funding recipient.
        uint256 fee = computeFee(balance);
        balance -= fee;
        // Send fee to the treasury.
        IMirrorTreasury(ITreasuryConfig(treasuryConfig).treasury())
            .contributeWithTributary{value: fee}(fundingRecipient);
        // Send the remainder to the funding recipient.
        _sendFunds(fundingRecipient, balance);
        emit FundsWithdrawn(fundingRecipient, balance, fee);
    }

    function computeFee(uint256 _amount) public pure returns (uint256) {
        return (_amount * feePercent) / 10000;
    }

    // ============ Admin Methods ============

    function changeBaseURI(string memory baseURI_) public onlyGovernance {
        baseURI = baseURI_;
    }

    // ============ NFT Methods ============

    // Returns e.g. https://mirror-api.com/editions/[editionId]/[tokenId]
    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        // If the token does not map to an edition, it'll be 0.
        require(tokenToEdition[tokenId] > 0, "Token has not been sold yet");
        // Concatenate the components, baseURI, editionId and tokenId, to create URI.
        return
            string(
                abi.encodePacked(
                    baseURI,
                    _toString(tokenToEdition[tokenId]),
                    "/",
                    _toString(tokenId)
                )
            );
    }

    // The hash of the given content for the NFT. Can be used
    // for IPFS storage, verifying authenticity, etc.
    function contentHash(uint256 tokenId) public view returns (bytes32) {
        // If the token does not map to an edition, it'll be 0.
        require(tokenToEdition[tokenId] > 0, "Token has not been sold yet");
        // Concatenate the components, baseURI, editionId and tokenId, to create URI.
        return editions[tokenToEdition[tokenId]].contentHash;
    }

    // Returns e.g. https://mirror-api.com/editions/metadata
    function contractURI() public view returns (string memory) {
        // Concatenate the components, baseURI, editionId and tokenId, to create URI.
        return string(abi.encodePacked(baseURI, "metadata"));
    }

    function getRoyaltyRecipient(uint256 tokenId)
        public
        view
        returns (address)
    {
        require(tokenToEdition[tokenId] > 0, "Token has not been minted yet");
        return editions[tokenToEdition[tokenId]].fundingRecipient;
    }

    function setRoyaltyRecipient(
        uint256 editionId,
        address payable newFundingRecipient
    ) public {
        require(
            editions[editionId].fundingRecipient == msg.sender,
            "Only current fundingRecipient can modify its value"
        );

        editions[editionId].fundingRecipient = newFundingRecipient;
    }

    // ============ Private Methods ============

    function _sendFunds(address payable recipient, uint256 amount) private {
        require(
            address(this).balance >= amount,
            "Insufficient balance for send"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Unable to send value: recipient may have reverted");
    }

    // From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol
    function _toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"treasuryConfig_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"fundingRecipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"editionId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"name":"EditionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"editionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"}],"name":"EditionPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fundingRecipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountWithdrawn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"editionId","type":"uint256"}],"name":"buyEdition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"computeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"contentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address payable","name":"fundingRecipient","type":"address"},{"internalType":"bytes32","name":"contentHash_","type":"bytes32"}],"name":"createEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"internalType":"struct SingletonEditions.EditionTier[]","name":"tiers","type":"tuple[]"},{"internalType":"address payable","name":"fundingRecipient","type":"address"}],"name":"createEditionTiers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"editions","outputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address payable","name":"fundingRecipient","type":"address"},{"internalType":"uint256","name":"numSold","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fundingBalance","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":"uint256","name":"tokenId","type":"uint256"}],"name":"getRoyaltyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNextOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"editionId","type":"uint256"},{"internalType":"address payable","name":"newFundingRecipient","type":"address"}],"name":"setRoyaltyRecipient","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":"","type":"uint256"}],"name":"tokenToEdition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"address","name":"nextOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryConfig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"fundingRecipient","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawnForEdition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c060405260fa60a0526001600d553480156200001b57600080fd5b50604051620031b1380380620031b18339810160408190526200003e916200019e565b600480546001600160a01b0319166001600160a01b038416908117909155604051839182916000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350508251620000a2906008906020860190620000db565b50600480546001600160a01b0319166001600160a01b03939093169290921790915560601b6001600160601b03191660805250620002f4565b828054620000e990620002a1565b90600052602060002090601f0160209004810192826200010d576000855562000158565b82601f106200012857805160ff191683800117855562000158565b8280016001018555821562000158579182015b82811115620001585782518255916020019190600101906200013b565b50620001669291506200016a565b5090565b5b808211156200016657600081556001016200016b565b80516001600160a01b03811681146200019957600080fd5b919050565b600080600060608486031215620001b457600080fd5b83516001600160401b0380821115620001cc57600080fd5b818601915086601f830112620001e157600080fd5b815181811115620001f657620001f6620002de565b604051601f8201601f19908116603f01168101908382118183101715620002215762000221620002de565b816040528281526020935089848487010111156200023e57600080fd5b600091505b8282101562000262578482018401518183018501529083019062000243565b82821115620002745760008484830101525b96506200028691505086820162000181565b93505050620002986040850162000181565b90509250925092565b600181811c90821680620002b657607f821691505b60208210811415620002d857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160601c60a051612e866200032b60003960008181610580015261198e01526000818161075d0152610e590152612e866000f3fe6080604052600436106102a05760003560e01c806395d89b411161016e578063cfd7b0df116100cb578063e8a3d4851161007f578063ed459df211610064578063ed459df21461086a578063f2fde38b1461088a578063f3e0c290146108aa57600080fd5b8063e8a3d4851461080c578063e985e9c51461082157600080fd5b8063e1bf9c08116100b0578063e1bf9c08146107ac578063e33a5934146107cc578063e4c0aaf4146107ec57600080fd5b8063cfd7b0df1461074b578063d3bb05281461077f57600080fd5b8063b88d4fde11610122578063c7af335211610107578063c7af3352146106eb578063c7c2ade91461070b578063c87b56dd1461072b57600080fd5b8063b88d4fde146106b8578063bd8616ec146106d857600080fd5b8063a015a3d811610153578063a015a3d81461064b578063a22cb4651461066b578063aa0ff6801461068b57600080fd5b806395d89b41146105e25780639e6d134d1461062b57600080fd5b806342842e0e1161021c578063715018a6116101d05780637fd6f15c116101b55780637fd6f15c1461056e5780638da5cb5b146105a25780638f32d59b146105c257600080fd5b8063715018a61461054457806379ba50971461055957600080fd5b80636352211e116102015780636352211e146104e457806368742da61461050457806370a082311461052457600080fd5b806342842e0e14610489578063602787ed146104a957600080fd5b80630c340a241161027357806323b872dd1161025857806323b872dd146103bf578063279c806e146103df57806339a0c6f91461046957600080fd5b80630c340a241461038a57806323452b9c146103aa57600080fd5b806301ffc9a7146102a557806306fdde03146102da578063081812fc14610330578063095ea7b314610368575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612990565b6108ca565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b506103236040518060400160405280601281526020017f4d6972726f722045646974696f6e73205633000000000000000000000000000081525081565b6040516102d19190612c2d565b34801561033c57600080fd5b5061035061034b366004612a13565b6109af565b6040516001600160a01b0390911681526020016102d1565b34801561037457600080fd5b50610388610383366004612878565b610a5a565b005b34801561039657600080fd5b50600654610350906001600160a01b031681565b3480156103b657600080fd5b50610388610baa565b3480156103cb57600080fd5b506103886103da366004612784565b610c16565b3480156103eb57600080fd5b506104336103fa366004612a13565b60096020526000908152604090208054600182015460028301546003840154600490940154929391926001600160a01b03909116919085565b6040805195865260208601949094526001600160a01b03909216928401929092526060830191909152608082015260a0016102d1565b34801561047557600080fd5b506103886104843660046129ca565b610c9d565b34801561049557600080fd5b506103886104a4366004612784565b610d23565b3480156104b557600080fd5b506104d66104c4366004612a13565b600a6020526000908152604090205481565b6040519081526020016102d1565b3480156104f057600080fd5b506103506104ff366004612a13565b610d3e565b34801561051057600080fd5b5061038861051f36600461270a565b610dc9565b34801561053057600080fd5b506104d661053f36600461270a565b610fc0565b34801561055057600080fd5b5061038861105a565b34801561056557600080fd5b506103886110f3565b34801561057a57600080fd5b506104d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ae57600080fd5b50600454610350906001600160a01b031681565b3480156105ce57600080fd5b506004546001600160a01b031633146102c5565b3480156105ee57600080fd5b506103236040518060400160405280600b81526020017f45444954494f4e535f563300000000000000000000000000000000000000000081525081565b34801561063757600080fd5b50610388610646366004612a2c565b6111be565b34801561065757600080fd5b50610350610666366004612a13565b61127e565b34801561067757600080fd5b50610388610686366004612845565b611305565b34801561069757600080fd5b506104d66106a636600461270a565b60076020526000908152604090205481565b3480156106c457600080fd5b506103886106d33660046127c5565b6113ca565b6103886106e6366004612a13565b611458565b3480156106f757600080fd5b506006546001600160a01b031633146102c5565b34801561071757600080fd5b506103886107263660046128a4565b611709565b34801561073757600080fd5b50610323610746366004612a13565b6118da565b34801561075757600080fd5b506103507f000000000000000000000000000000000000000000000000000000000000000081565b34801561078b57600080fd5b506104d661079a366004612a13565b600b6020526000908152604090205481565b3480156107b857600080fd5b506104d66107c7366004612a13565b611984565b3480156107d857600080fd5b506103886107e7366004612a51565b6119bd565b3480156107f857600080fd5b5061038861080736600461270a565b611afd565b34801561081857600080fd5b50610323611b8e565b34801561082d57600080fd5b506102c561083c36600461274b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b34801561087657600080fd5b506005546001600160a01b031633146102c5565b34801561089657600080fd5b506103886108a536600461270a565b611bb6565b3480156108b657600080fd5b506104d66108c5366004612a13565b611c88565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061095d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109a957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000818152602081905260408120546001600160a01b0316610a3e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610a6582610d3e565b9050806001600160a01b0316836001600160a01b03161415610aef5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610a35565b336001600160a01b0382161480610b2957506001600160a01b038116600090815260036020908152604080832033845290915290205460ff165b610b9b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a35565b610ba58383611d06565b505050565b6004546001600160a01b03163314610c045760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610a35565b600580546001600160a01b0319169055565b610c203382611d74565b610c925760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a35565b610ba5838383611e7c565b6004546001600160a01b0316331480610cc057506006546001600160a01b031633145b610d0c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610a35565b8051610d1f906008906020840190612609565b5050565b610ba5838383604051806020016040528060008152506113ca565b6000818152602081905260408120546001600160a01b0316806109a95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610a35565b6002600e541415610e1c5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e556001600160a01b038116600090815260076020526040812080549082905590610e4982611984565b9050610e558183612ce5565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eea919061272e565b6040517fe75cb3020000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152919091169063e75cb3029083906024016000604051808303818588803b158015610f4957600080fd5b505af1158015610f5d573d6000803e3d6000fd5b5050505050610f6c838361204d565b604080516001600160a01b0385168152602081018490529081018290527ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49060600160405180910390a150506001600e5550565b60006001600160a01b03821661103e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610a35565b506001600160a01b031660009081526001602052604090205490565b6004546001600160a01b031633146110b45760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610a35565b600480546001600160a01b031916905560405160009081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6005546001600160a01b031633146111735760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401610a35565b600580546001600160a01b0319908116909155600480543392168217905560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3565b6000828152600960205260409020600201546001600160a01b0316331461124d5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c792063757272656e742066756e64696e67526563697069656e7420636160448201527f6e206d6f64696679206974732076616c756500000000000000000000000000006064820152608401610a35565b60009182526009602052604090912060020180546001600160a01b0319166001600160a01b03909216919091179055565b6000818152600a60205260408120546112d95760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e20686173206e6f74206265656e206d696e746564207965740000006044820152606401610a35565b506000908152600a6020908152604080832054835260099091529020600201546001600160a01b031690565b6001600160a01b03821633141561135e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a35565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113d43383611d74565b6114465760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a35565b61145284848484612166565b50505050565b6002600e5414156114ab5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e5560008181526009602052604090205461150b5760405162461bcd60e51b815260206004820152601660248201527f45646974696f6e20646f6573206e6f74206578697374000000000000000000006044820152606401610a35565b60008181526009602052604090208054600390910154106115945760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f757460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610a35565b60008181526009602052604090206001015434101561161b5760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f2070757263686173652074686560448201527f2065646974696f6e2e00000000000000000000000000000000000000000000006064820152608401610a35565b600081815260096020526040812060030180549161163883612d63565b90915550506000818152600960209081526040808320600201546001600160a01b03168352600790915281208054349290611674908490612c9a565b9250508190555061168733600c546121ef565b600c80546000908152600a60209081526040808320859055925484835260098252918390206003015483519081523491810191909152339284917f23e6d1a59ae9923eb7b39939b8259c796bc664751ba6b6f64f93027895e9994c910160405180910390a4600c80549060006116fc83612d63565b90915550506001600e5550565b6002600e54141561175c5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e5560005b82518160ff1610156118d0576000838260ff168151811061178757611787612dde565b60200260200101516000015190506000848360ff16815181106117ac576117ac612dde565b60200260200101516020015190506000858460ff16815181106117d1576117d1612dde565b602090810291909101810151604090810151815160a0810183528681528084018681526001600160a01b038a81168386018181526000606080870182815260808089018a8152600d8054865260098e52948c902099518a55975160018a015593516002890180546001600160a01b0319169190971617909555935160038701559351600490950194909455915485518a815296870189905294860191909152840182905290935090917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600d80549060006118b583612d63565b919050555050505080806118c890612d7e565b915050611764565b50506001600e5550565b6000818152600a60205260409020546060906119385760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610a35565b6000828152600a602052604090205460089061195390612333565b61195c84612333565b60405160200161196e93929190612b56565b6040516020818303038152906040529050919050565b60006127106119b37f000000000000000000000000000000000000000000000000000000000000000084612cc6565b6109a99190612cb2565b6002600e541415611a105760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e8190556040805160a08101825286815260208082018781526001600160a01b03878116848601818152600060608088018281526080808a018d8152600d8054865260098b52948c90209a518b55975160018b015593519a890180546001600160a01b0319169b9096169a909a17909455975160038701559251600490950194909455945484518a81529283018990529382019290925292830184905290917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600d8054906000611aed83612d63565b90915550506001600e5550505050565b6004546001600160a01b0316331480611b2057506006546001600160a01b031633145b611b6c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610a35565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60606008604051602001611ba29190612bb8565b604051602081830303815290604052905090565b6004546001600160a01b03163314611c105760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610a35565b6001600160a01b038116611c665760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401610a35565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a6020526040812054611ce35760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610a35565b506000908152600a60209081526040808320548352600990915290206004015490565b600081815260026020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d3b82610d3e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152602081905260408120546001600160a01b0316611dfe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610a35565b6000611e0983610d3e565b9050806001600160a01b0316846001600160a01b03161480611e445750836001600160a01b0316611e39846109af565b6001600160a01b0316145b80611e7457506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e8f82610d3e565b6001600160a01b031614611f0b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610a35565b6001600160a01b038216611f865760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a35565b611f91600082611d06565b6001600160a01b03831660009081526001602081905260408220805491929091611fbc908490612ce5565b90915550506001600160a01b03821660009081526001602081905260408220805491929091611fec908490612c9a565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8047101561209d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e640000006044820152606401610a35565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120ea576040519150601f19603f3d011682016040523d82523d6000602084013e6120ef565b606091505b5050905080610ba55760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d617920686176652072657665727465640000000000000000000000000000006064820152608401610a35565b612171848484611e7c565b61217d84848484612465565b6114525760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a35565b6001600160a01b0382166122455760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a35565b6000818152602081905260409020546001600160a01b0316156122aa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a35565b6001600160a01b038216600090815260016020819052604082208054919290916122d5908490612c9a565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161237357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561239d578061238781612d63565b91506123969050600a83612cb2565b9150612377565b60008167ffffffffffffffff8111156123b8576123b8612df4565b6040519080825280601f01601f1916602001820160405280156123e2576020820181803683370190505b5090505b8415611e74576123f7600183612ce5565b9150612404600a86612d9e565b61240f906030612c9a565b60f81b81838151811061242457612424612dde565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061245e600a86612cb2565b94506123e6565b6000833b156125fe576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906124b9903390899088908890600401612bf1565b602060405180830381600087803b1580156124d357600080fd5b505af1925050508015612503575060408051601f3d908101601f19168201909252612500918101906129ad565b60015b6125b3573d808015612531576040519150601f19603f3d011682016040523d82523d6000602084013e612536565b606091505b5080516125ab5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a35565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611e74565b506001949350505050565b82805461261590612d28565b90600052602060002090601f016020900481019282612637576000855561267d565b82601f1061265057805160ff191683800117855561267d565b8280016001018555821561267d579182015b8281111561267d578251825591602001919060010190612662565b5061268992915061268d565b5090565b5b80821115612689576000815560010161268e565b600067ffffffffffffffff8311156126bc576126bc612df4565b6126cf6020601f19601f86011601612c69565b90508281528383830111156126e357600080fd5b828260208301376000602084830101529392505050565b803561270581612e0a565b919050565b60006020828403121561271c57600080fd5b813561272781612e0a565b9392505050565b60006020828403121561274057600080fd5b815161272781612e0a565b6000806040838503121561275e57600080fd5b823561276981612e0a565b9150602083013561277981612e0a565b809150509250929050565b60008060006060848603121561279957600080fd5b83356127a481612e0a565b925060208401356127b481612e0a565b929592945050506040919091013590565b600080600080608085870312156127db57600080fd5b84356127e681612e0a565b935060208501356127f681612e0a565b925060408501359150606085013567ffffffffffffffff81111561281957600080fd5b8501601f8101871361282a57600080fd5b612839878235602084016126a2565b91505092959194509250565b6000806040838503121561285857600080fd5b823561286381612e0a565b91506020830135801515811461277957600080fd5b6000806040838503121561288b57600080fd5b823561289681612e0a565b946020939093013593505050565b60008060408084860312156128b857600080fd5b833567ffffffffffffffff808211156128d057600080fd5b818601915086601f8301126128e457600080fd5b81356020828211156128f8576128f8612df4565b612906818360051b01612c69565b82815281810193508482016060808502870184018c101561292657600080fd5b60009650865b858110156129705781838e031215612942578788fd5b61294a612c40565b833581528584013586820152898401358a8201528752958401959181019160010161292c565b505050809750506129828189016126fa565b955050505050509250929050565b6000602082840312156129a257600080fd5b813561272781612e22565b6000602082840312156129bf57600080fd5b815161272781612e22565b6000602082840312156129dc57600080fd5b813567ffffffffffffffff8111156129f357600080fd5b8201601f81018413612a0457600080fd5b611e74848235602084016126a2565b600060208284031215612a2557600080fd5b5035919050565b60008060408385031215612a3f57600080fd5b82359150602083013561277981612e0a565b60008060008060808587031215612a6757600080fd5b84359350602085013592506040850135612a8081612e0a565b9396929550929360600135925050565b60008151808452612aa8816020860160208601612cfc565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612ad657607f831692505b6020808410821415612af857634e487b7160e01b600052602260045260246000fd5b818015612b0c5760018114612b1d57612b4a565b60ff19861689528489019650612b4a565b60008881526020902060005b86811015612b425781548b820152908501908301612b29565b505084890196505b50505050505092915050565b6000612b628286612abc565b8451612b72818360208901612cfc565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612bab816001840160208801612cfc565b0160010195945050505050565b6000612bc48284612abc565b7f6d6574616461746100000000000000000000000000000000000000000000000081526008019392505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612c236080830184612a90565b9695505050505050565b6020815260006127276020830184612a90565b6040516060810167ffffffffffffffff81118282101715612c6357612c63612df4565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612c9257612c92612df4565b604052919050565b60008219821115612cad57612cad612db2565b500190565b600082612cc157612cc1612dc8565b500490565b6000816000190483118215151615612ce057612ce0612db2565b500290565b600082821015612cf757612cf7612db2565b500390565b60005b83811015612d17578181015183820152602001612cff565b838111156114525750506000910152565b600181811c90821680612d3c57607f821691505b60208210811415612d5d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d7757612d77612db2565b5060010190565b600060ff821660ff811415612d9557612d95612db2565b60010192915050565b600082612dad57612dad612dc8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e1f57600080fd5b50565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612e1f57600080fdfea26469706673582212206fba883d1cab0cdd74d51f8a0af43c1bcc16d3841fa60781ef19fa254758872464736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000600000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b5700000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f6d6972726f722d6170692e636f6d2f73696e676c65746f6e2d65646974696f6e732f76332f00000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102a05760003560e01c806395d89b411161016e578063cfd7b0df116100cb578063e8a3d4851161007f578063ed459df211610064578063ed459df21461086a578063f2fde38b1461088a578063f3e0c290146108aa57600080fd5b8063e8a3d4851461080c578063e985e9c51461082157600080fd5b8063e1bf9c08116100b0578063e1bf9c08146107ac578063e33a5934146107cc578063e4c0aaf4146107ec57600080fd5b8063cfd7b0df1461074b578063d3bb05281461077f57600080fd5b8063b88d4fde11610122578063c7af335211610107578063c7af3352146106eb578063c7c2ade91461070b578063c87b56dd1461072b57600080fd5b8063b88d4fde146106b8578063bd8616ec146106d857600080fd5b8063a015a3d811610153578063a015a3d81461064b578063a22cb4651461066b578063aa0ff6801461068b57600080fd5b806395d89b41146105e25780639e6d134d1461062b57600080fd5b806342842e0e1161021c578063715018a6116101d05780637fd6f15c116101b55780637fd6f15c1461056e5780638da5cb5b146105a25780638f32d59b146105c257600080fd5b8063715018a61461054457806379ba50971461055957600080fd5b80636352211e116102015780636352211e146104e457806368742da61461050457806370a082311461052457600080fd5b806342842e0e14610489578063602787ed146104a957600080fd5b80630c340a241161027357806323b872dd1161025857806323b872dd146103bf578063279c806e146103df57806339a0c6f91461046957600080fd5b80630c340a241461038a57806323452b9c146103aa57600080fd5b806301ffc9a7146102a557806306fdde03146102da578063081812fc14610330578063095ea7b314610368575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612990565b6108ca565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b506103236040518060400160405280601281526020017f4d6972726f722045646974696f6e73205633000000000000000000000000000081525081565b6040516102d19190612c2d565b34801561033c57600080fd5b5061035061034b366004612a13565b6109af565b6040516001600160a01b0390911681526020016102d1565b34801561037457600080fd5b50610388610383366004612878565b610a5a565b005b34801561039657600080fd5b50600654610350906001600160a01b031681565b3480156103b657600080fd5b50610388610baa565b3480156103cb57600080fd5b506103886103da366004612784565b610c16565b3480156103eb57600080fd5b506104336103fa366004612a13565b60096020526000908152604090208054600182015460028301546003840154600490940154929391926001600160a01b03909116919085565b6040805195865260208601949094526001600160a01b03909216928401929092526060830191909152608082015260a0016102d1565b34801561047557600080fd5b506103886104843660046129ca565b610c9d565b34801561049557600080fd5b506103886104a4366004612784565b610d23565b3480156104b557600080fd5b506104d66104c4366004612a13565b600a6020526000908152604090205481565b6040519081526020016102d1565b3480156104f057600080fd5b506103506104ff366004612a13565b610d3e565b34801561051057600080fd5b5061038861051f36600461270a565b610dc9565b34801561053057600080fd5b506104d661053f36600461270a565b610fc0565b34801561055057600080fd5b5061038861105a565b34801561056557600080fd5b506103886110f3565b34801561057a57600080fd5b506104d67f00000000000000000000000000000000000000000000000000000000000000fa81565b3480156105ae57600080fd5b50600454610350906001600160a01b031681565b3480156105ce57600080fd5b506004546001600160a01b031633146102c5565b3480156105ee57600080fd5b506103236040518060400160405280600b81526020017f45444954494f4e535f563300000000000000000000000000000000000000000081525081565b34801561063757600080fd5b50610388610646366004612a2c565b6111be565b34801561065757600080fd5b50610350610666366004612a13565b61127e565b34801561067757600080fd5b50610388610686366004612845565b611305565b34801561069757600080fd5b506104d66106a636600461270a565b60076020526000908152604090205481565b3480156106c457600080fd5b506103886106d33660046127c5565b6113ca565b6103886106e6366004612a13565b611458565b3480156106f757600080fd5b506006546001600160a01b031633146102c5565b34801561071757600080fd5b506103886107263660046128a4565b611709565b34801561073757600080fd5b50610323610746366004612a13565b6118da565b34801561075757600080fd5b506103507f00000000000000000000000021a93be569666527dae0fdbfbe7715299dec120281565b34801561078b57600080fd5b506104d661079a366004612a13565b600b6020526000908152604090205481565b3480156107b857600080fd5b506104d66107c7366004612a13565b611984565b3480156107d857600080fd5b506103886107e7366004612a51565b6119bd565b3480156107f857600080fd5b5061038861080736600461270a565b611afd565b34801561081857600080fd5b50610323611b8e565b34801561082d57600080fd5b506102c561083c36600461274b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b34801561087657600080fd5b506005546001600160a01b031633146102c5565b34801561089657600080fd5b506103886108a536600461270a565b611bb6565b3480156108b657600080fd5b506104d66108c5366004612a13565b611c88565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061095d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109a957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000818152602081905260408120546001600160a01b0316610a3e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610a6582610d3e565b9050806001600160a01b0316836001600160a01b03161415610aef5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610a35565b336001600160a01b0382161480610b2957506001600160a01b038116600090815260036020908152604080832033845290915290205460ff165b610b9b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a35565b610ba58383611d06565b505050565b6004546001600160a01b03163314610c045760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610a35565b600580546001600160a01b0319169055565b610c203382611d74565b610c925760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a35565b610ba5838383611e7c565b6004546001600160a01b0316331480610cc057506006546001600160a01b031633145b610d0c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610a35565b8051610d1f906008906020840190612609565b5050565b610ba5838383604051806020016040528060008152506113ca565b6000818152602081905260408120546001600160a01b0316806109a95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610a35565b6002600e541415610e1c5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e556001600160a01b038116600090815260076020526040812080549082905590610e4982611984565b9050610e558183612ce5565b91507f00000000000000000000000021a93be569666527dae0fdbfbe7715299dec12026001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eea919061272e565b6040517fe75cb3020000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152919091169063e75cb3029083906024016000604051808303818588803b158015610f4957600080fd5b505af1158015610f5d573d6000803e3d6000fd5b5050505050610f6c838361204d565b604080516001600160a01b0385168152602081018490529081018290527ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49060600160405180910390a150506001600e5550565b60006001600160a01b03821661103e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610a35565b506001600160a01b031660009081526001602052604090205490565b6004546001600160a01b031633146110b45760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610a35565b600480546001600160a01b031916905560405160009081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6005546001600160a01b031633146111735760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401610a35565b600580546001600160a01b0319908116909155600480543392168217905560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3565b6000828152600960205260409020600201546001600160a01b0316331461124d5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c792063757272656e742066756e64696e67526563697069656e7420636160448201527f6e206d6f64696679206974732076616c756500000000000000000000000000006064820152608401610a35565b60009182526009602052604090912060020180546001600160a01b0319166001600160a01b03909216919091179055565b6000818152600a60205260408120546112d95760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e20686173206e6f74206265656e206d696e746564207965740000006044820152606401610a35565b506000908152600a6020908152604080832054835260099091529020600201546001600160a01b031690565b6001600160a01b03821633141561135e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a35565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113d43383611d74565b6114465760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a35565b61145284848484612166565b50505050565b6002600e5414156114ab5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e5560008181526009602052604090205461150b5760405162461bcd60e51b815260206004820152601660248201527f45646974696f6e20646f6573206e6f74206578697374000000000000000000006044820152606401610a35565b60008181526009602052604090208054600390910154106115945760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f757460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610a35565b60008181526009602052604090206001015434101561161b5760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f2070757263686173652074686560448201527f2065646974696f6e2e00000000000000000000000000000000000000000000006064820152608401610a35565b600081815260096020526040812060030180549161163883612d63565b90915550506000818152600960209081526040808320600201546001600160a01b03168352600790915281208054349290611674908490612c9a565b9250508190555061168733600c546121ef565b600c80546000908152600a60209081526040808320859055925484835260098252918390206003015483519081523491810191909152339284917f23e6d1a59ae9923eb7b39939b8259c796bc664751ba6b6f64f93027895e9994c910160405180910390a4600c80549060006116fc83612d63565b90915550506001600e5550565b6002600e54141561175c5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e5560005b82518160ff1610156118d0576000838260ff168151811061178757611787612dde565b60200260200101516000015190506000848360ff16815181106117ac576117ac612dde565b60200260200101516020015190506000858460ff16815181106117d1576117d1612dde565b602090810291909101810151604090810151815160a0810183528681528084018681526001600160a01b038a81168386018181526000606080870182815260808089018a8152600d8054865260098e52948c902099518a55975160018a015593516002890180546001600160a01b0319169190971617909555935160038701559351600490950194909455915485518a815296870189905294860191909152840182905290935090917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600d80549060006118b583612d63565b919050555050505080806118c890612d7e565b915050611764565b50506001600e5550565b6000818152600a60205260409020546060906119385760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610a35565b6000828152600a602052604090205460089061195390612333565b61195c84612333565b60405160200161196e93929190612b56565b6040516020818303038152906040529050919050565b60006127106119b37f00000000000000000000000000000000000000000000000000000000000000fa84612cc6565b6109a99190612cb2565b6002600e541415611a105760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610a35565b6002600e8190556040805160a08101825286815260208082018781526001600160a01b03878116848601818152600060608088018281526080808a018d8152600d8054865260098b52948c90209a518b55975160018b015593519a890180546001600160a01b0319169b9096169a909a17909455975160038701559251600490950194909455945484518a81529283018990529382019290925292830184905290917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600d8054906000611aed83612d63565b90915550506001600e5550505050565b6004546001600160a01b0316331480611b2057506006546001600160a01b031633145b611b6c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610a35565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60606008604051602001611ba29190612bb8565b604051602081830303815290604052905090565b6004546001600160a01b03163314611c105760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610a35565b6001600160a01b038116611c665760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401610a35565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a6020526040812054611ce35760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610a35565b506000908152600a60209081526040808320548352600990915290206004015490565b600081815260026020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d3b82610d3e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152602081905260408120546001600160a01b0316611dfe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610a35565b6000611e0983610d3e565b9050806001600160a01b0316846001600160a01b03161480611e445750836001600160a01b0316611e39846109af565b6001600160a01b0316145b80611e7457506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e8f82610d3e565b6001600160a01b031614611f0b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610a35565b6001600160a01b038216611f865760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a35565b611f91600082611d06565b6001600160a01b03831660009081526001602081905260408220805491929091611fbc908490612ce5565b90915550506001600160a01b03821660009081526001602081905260408220805491929091611fec908490612c9a565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8047101561209d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e640000006044820152606401610a35565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120ea576040519150601f19603f3d011682016040523d82523d6000602084013e6120ef565b606091505b5050905080610ba55760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d617920686176652072657665727465640000000000000000000000000000006064820152608401610a35565b612171848484611e7c565b61217d84848484612465565b6114525760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a35565b6001600160a01b0382166122455760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a35565b6000818152602081905260409020546001600160a01b0316156122aa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a35565b6001600160a01b038216600090815260016020819052604082208054919290916122d5908490612c9a565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161237357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561239d578061238781612d63565b91506123969050600a83612cb2565b9150612377565b60008167ffffffffffffffff8111156123b8576123b8612df4565b6040519080825280601f01601f1916602001820160405280156123e2576020820181803683370190505b5090505b8415611e74576123f7600183612ce5565b9150612404600a86612d9e565b61240f906030612c9a565b60f81b81838151811061242457612424612dde565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061245e600a86612cb2565b94506123e6565b6000833b156125fe576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906124b9903390899088908890600401612bf1565b602060405180830381600087803b1580156124d357600080fd5b505af1925050508015612503575060408051601f3d908101601f19168201909252612500918101906129ad565b60015b6125b3573d808015612531576040519150601f19603f3d011682016040523d82523d6000602084013e612536565b606091505b5080516125ab5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a35565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611e74565b506001949350505050565b82805461261590612d28565b90600052602060002090601f016020900481019282612637576000855561267d565b82601f1061265057805160ff191683800117855561267d565b8280016001018555821561267d579182015b8281111561267d578251825591602001919060010190612662565b5061268992915061268d565b5090565b5b80821115612689576000815560010161268e565b600067ffffffffffffffff8311156126bc576126bc612df4565b6126cf6020601f19601f86011601612c69565b90508281528383830111156126e357600080fd5b828260208301376000602084830101529392505050565b803561270581612e0a565b919050565b60006020828403121561271c57600080fd5b813561272781612e0a565b9392505050565b60006020828403121561274057600080fd5b815161272781612e0a565b6000806040838503121561275e57600080fd5b823561276981612e0a565b9150602083013561277981612e0a565b809150509250929050565b60008060006060848603121561279957600080fd5b83356127a481612e0a565b925060208401356127b481612e0a565b929592945050506040919091013590565b600080600080608085870312156127db57600080fd5b84356127e681612e0a565b935060208501356127f681612e0a565b925060408501359150606085013567ffffffffffffffff81111561281957600080fd5b8501601f8101871361282a57600080fd5b612839878235602084016126a2565b91505092959194509250565b6000806040838503121561285857600080fd5b823561286381612e0a565b91506020830135801515811461277957600080fd5b6000806040838503121561288b57600080fd5b823561289681612e0a565b946020939093013593505050565b60008060408084860312156128b857600080fd5b833567ffffffffffffffff808211156128d057600080fd5b818601915086601f8301126128e457600080fd5b81356020828211156128f8576128f8612df4565b612906818360051b01612c69565b82815281810193508482016060808502870184018c101561292657600080fd5b60009650865b858110156129705781838e031215612942578788fd5b61294a612c40565b833581528584013586820152898401358a8201528752958401959181019160010161292c565b505050809750506129828189016126fa565b955050505050509250929050565b6000602082840312156129a257600080fd5b813561272781612e22565b6000602082840312156129bf57600080fd5b815161272781612e22565b6000602082840312156129dc57600080fd5b813567ffffffffffffffff8111156129f357600080fd5b8201601f81018413612a0457600080fd5b611e74848235602084016126a2565b600060208284031215612a2557600080fd5b5035919050565b60008060408385031215612a3f57600080fd5b82359150602083013561277981612e0a565b60008060008060808587031215612a6757600080fd5b84359350602085013592506040850135612a8081612e0a565b9396929550929360600135925050565b60008151808452612aa8816020860160208601612cfc565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612ad657607f831692505b6020808410821415612af857634e487b7160e01b600052602260045260246000fd5b818015612b0c5760018114612b1d57612b4a565b60ff19861689528489019650612b4a565b60008881526020902060005b86811015612b425781548b820152908501908301612b29565b505084890196505b50505050505092915050565b6000612b628286612abc565b8451612b72818360208901612cfc565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612bab816001840160208801612cfc565b0160010195945050505050565b6000612bc48284612abc565b7f6d6574616461746100000000000000000000000000000000000000000000000081526008019392505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612c236080830184612a90565b9695505050505050565b6020815260006127276020830184612a90565b6040516060810167ffffffffffffffff81118282101715612c6357612c63612df4565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612c9257612c92612df4565b604052919050565b60008219821115612cad57612cad612db2565b500190565b600082612cc157612cc1612dc8565b500490565b6000816000190483118215151615612ce057612ce0612db2565b500290565b600082821015612cf757612cf7612db2565b500390565b60005b83811015612d17578181015183820152602001612cff565b838111156114525750506000910152565b600181811c90821680612d3c57607f821691505b60208210811415612d5d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d7757612d77612db2565b5060010190565b600060ff821660ff811415612d9557612d95612db2565b60010192915050565b600082612dad57612dad612dc8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e1f57600080fd5b50565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612e1f57600080fdfea26469706673582212206fba883d1cab0cdd74d51f8a0af43c1bcc16d3841fa60781ef19fa254758872464736f6c63430008060033

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

00000000000000000000000000000000000000000000000000000000000000600000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b5700000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f6d6972726f722d6170692e636f6d2f73696e676c65746f6e2d65646974696f6e732f76332f00000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://mirror-api.com/singleton-editions/v3/
Arg [1] : owner_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57
Arg [2] : treasuryConfig_ (address): 0x21A93bE569666527dAe0FDBFbe7715299dEC1202

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57
Arg [2] : 00000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
Arg [3] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [4] : 68747470733a2f2f6d6972726f722d6170692e636f6d2f73696e676c65746f6e
Arg [5] : 2d65646974696f6e732f76332f00000000000000000000000000000000000000


Deployed Bytecode Sourcemap

14486:11315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2661:338;;;;;;;;;;-1:-1:-1;2661:338:0;;;;;:::i;:::-;;:::i;:::-;;;11384:14:1;;11377:22;11359:41;;11347:2;11332:18;2661:338:0;;;;;;;;14588:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4737:308::-;;;;;;;;;;-1:-1:-1;4737:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10016:55:1;;;9998:74;;9986:2;9971:18;4737:308:0;9953:125:1;4322:407:0;;;;;;;;;;-1:-1:-1;4322:407:0;;;;;:::i;:::-;;:::i;:::-;;13660:32;;;;;;;;;;-1:-1:-1;13660:32:0;;;;-1:-1:-1;;;;;13660:32:0;;;12364:89;;;;;;;;;;;;;:::i;5604:374::-;;;;;;;;;;-1:-1:-1;5604:374:0;;;;;:::i;:::-;;:::i;15981:43::-;;;;;;;;;;-1:-1:-1;15981:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15981:43:0;;;;;;;;;;;23072:25:1;;;23128:2;23113:18;;23106:34;;;;-1:-1:-1;;;;;23176:55:1;;;23156:18;;;23149:83;;;;23263:2;23248:18;;23241:34;;;;23306:3;23291:19;;23284:35;23059:3;23044:19;15981:43:0;23026:299:1;22278:106:0;;;;;;;;;;-1:-1:-1;22278:106:0;;;;;:::i;:::-;;:::i;5986:185::-;;;;;;;;;;-1:-1:-1;5986:185:0;;;;;:::i;:::-;;:::i;16074:49::-;;;;;;;;;;-1:-1:-1;16074:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11557:25:1;;;11545:2;11530:18;16074:49:0;11512:76:1;3310:326:0;;;;;;;;;;-1:-1:-1;3310:326:0;;;;;:::i;:::-;;:::i;21367:722::-;;;;;;;;;;-1:-1:-1;21367:722:0;;;;;:::i;:::-;;:::i;3007:295::-;;;;;;;;;;-1:-1:-1;3007:295:0;;;;;:::i;:::-;;:::i;12802:142::-;;;;;;;;;;;;;:::i;12537:173::-;;;;;;;;;;;;;:::i;14915:41::-;;;;;;;;;;;;;;;11343:20;;;;;;;;;;-1:-1:-1;11343:20:0;;;;-1:-1:-1;;;;;11343:20:0;;;13032:91;;;;;;;;;;-1:-1:-1;13110:5:0;;-1:-1:-1;;;;;13110:5:0;13096:10;:19;13032:91;;14645:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24196:357;;;;;;;;;;-1:-1:-1;24196:357:0;;;;;:::i;:::-;;:::i;23924:264::-;;;;;;;;;;-1:-1:-1;23924:264:0;;;;;:::i;:::-;;:::i;5053:321::-;;;;;;;;;;-1:-1:-1;5053:321:0;;;;;:::i;:::-;;:::i;15790:49::-;;;;;;;;;;-1:-1:-1;15790:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;6179:363;;;;;;;;;;-1:-1:-1;6179:363:0;;;;;:::i;:::-;;:::i;19948:1355::-;;;;;;:::i;:::-;;:::i;14312:106::-;;;;;;;;;;-1:-1:-1;14402:8:0;;-1:-1:-1;;;;;14402:8:0;14388:10;:22;14312:106;;18179:905;;;;;;;;;;-1:-1:-1;18179:905:0;;;;;:::i;:::-;;:::i;22515:619::-;;;;;;;;;;-1:-1:-1;22515:619:0;;;;;:::i;:::-;;:::i;14869:39::-;;;;;;;;;;;;;;;16212:54;;;;;;;;;;-1:-1:-1;16212:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;22097:123;;;;;;;;;;-1:-1:-1;22097:123:0;;;;;:::i;:::-;;:::i;19092:848::-;;;;;;;;;;-1:-1:-1;19092:848:0;;;;;:::i;:::-;;:::i;14137:113::-;;;;;;;;;;-1:-1:-1;14137:113:0;;;;;:::i;:::-;;:::i;23699:217::-;;;;;;;;;;;;;:::i;5382:214::-;;;;;;;;;;-1:-1:-1;5382:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;5553:25:0;;;5524:4;5553:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;5382:214;13208:99;;;;;;;;;;-1:-1:-1;13290:9:0;;-1:-1:-1;;;;;13290:9:0;13276:10;:23;13208:99;;12088:188;;;;;;;;;;-1:-1:-1;12088:188:0;;;;;:::i;:::-;;:::i;23260:369::-;;;;;;;;;;-1:-1:-1;23260:369:0;;;;;:::i;:::-;;:::i;2661:338::-;2791:4;2833:40;;;2848:25;2833:40;;:105;;-1:-1:-1;2890:48:0;;;2905:33;2890:48;2833:105;:158;;;-1:-1:-1;2199:25:0;2184:40;;;;2955:36;2813:178;2661:338;-1:-1:-1;;2661:338:0:o;4737:308::-;4858:7;6999:16;;;;;;;;;;;-1:-1:-1;;;;;6999:16:0;4883:110;;;;-1:-1:-1;;;4883:110:0;;18186:2:1;4883:110:0;;;18168:21:1;18225:2;18205:18;;;18198:30;18264:34;18244:18;;;18237:62;18335:14;18315:18;;;18308:42;18367:19;;4883:110:0;;;;;;;;;-1:-1:-1;5013:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;5013:24:0;;4737:308::o;4322:407::-;4403:13;4419:23;4434:7;4419:14;:23::i;:::-;4403:39;;4467:5;-1:-1:-1;;;;;4461:11:0;:2;-1:-1:-1;;;;;4461:11:0;;;4453:57;;;;-1:-1:-1;;;4453:57:0;;19821:2:1;4453:57:0;;;19803:21:1;19860:2;19840:18;;;19833:30;19899:34;19879:18;;;19872:62;19970:3;19950:18;;;19943:31;19991:19;;4453:57:0;19793:223:1;4453:57:0;4545:10;-1:-1:-1;;;;;4545:19:0;;;;:58;;-1:-1:-1;;;;;;5553:25:0;;5524:4;5553:25;;;:18;:25;;;;;;;;4592:10;5553:35;;;;;;;;;;4568;4523:164;;;;-1:-1:-1;;;4523:164:0;;16223:2:1;4523:164:0;;;16205:21:1;16262:2;16242:18;;;16235:30;16301:34;16281:18;;;16274:62;16372:26;16352:18;;;16345:54;16416:19;;4523:164:0;16195:246:1;4523:164:0;4700:21;4709:2;4713:7;4700:8;:21::i;:::-;4392:337;4322:407;;:::o;12364:89::-;13110:5;;-1:-1:-1;;;;;13110:5:0;13096:10;:19;11573:46;;;;-1:-1:-1;;;11573:46:0;;12792:2:1;11573:46:0;;;12774:21:1;12831:2;12811:18;;;12804:30;12870:26;12850:18;;;12843:54;12914:18;;11573:46:0;12764:174:1;11573:46:0;12436:9:::1;12429:16:::0;;-1:-1:-1;;;;;;12429:16:0::1;::::0;;12364:89::o;5604:374::-;5813:39;5832:10;5844:7;5813:18;:39::i;:::-;5791:138;;;;-1:-1:-1;;;5791:138:0;;20924:2:1;5791:138:0;;;20906:21:1;20963:2;20943:18;;;20936:30;21002:34;20982:18;;;20975:62;21073:19;21053:18;;;21046:47;21110:19;;5791:138:0;20896:239:1;5791:138:0;5942:28;5952:4;5958:2;5962:7;5942:9;:28::i;22278:106::-;13110:5;;-1:-1:-1;;;;;13110:5:0;13096:10;:19;13792:25;;;-1:-1:-1;14402:8:0;;-1:-1:-1;;;;;14402:8:0;14388:10;:22;13805:12;13784:62;;;;-1:-1:-1;;;13784:62:0;;14279:2:1;13784:62:0;;;14261:21:1;14318:2;14298:18;;;14291:30;14357:26;14337:18;;;14330:54;14401:18;;13784:62:0;14251:174:1;13784:62:0;22358:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;22278:106:::0;:::o;5986:185::-;6124:39;6141:4;6147:2;6151:7;6124:39;;;;;;;;;;;;:16;:39::i;3310:326::-;3427:7;3468:16;;;;;;;;;;;-1:-1:-1;;;;;3468:16:0;3517:19;3495:110;;;;-1:-1:-1;;;3495:110:0;;17059:2:1;3495:110:0;;;17041:21:1;17098:2;17078:18;;;17071:30;17137:34;17117:18;;;17110:62;17208:11;17188:18;;;17181:39;17237:19;;3495:110:0;17031:231:1;21367:722:0;14805:1;17452:16;;:38;;17444:65;;;;-1:-1:-1;;;17444:65:0;;20223:2:1;17444:65:0;;;20205:21:1;20262:2;20242:18;;;20235:30;20301:16;20281:18;;;20274:44;20335:18;;17444:65:0;20195:164:1;17444:65:0;14805:1;17585:16;:37;-1:-1:-1;;;;;21498:32:0;::::1;21480:15;21498:32:::0;;;:14:::1;:32;::::0;;;;;;21541:36;;;;21498:32;21694:19:::1;21498:32:::0;21694:10:::1;:19::i;:::-;21680:33:::0;-1:-1:-1;21724:14:0::1;21680:33:::0;21724:14;::::1;:::i;:::-;;;21819;-1:-1:-1::0;;;;;21803:40:0::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21787:127;::::0;;;;-1:-1:-1;;;;;10016:55:1;;;21787:127:0::1;::::0;::::1;9998:74:1::0;21787:97:0;;;::::1;::::0;::::1;::::0;21892:3;;9971:18:1;;21787:127:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;21982:37;21993:16;22011:7;21982:10;:37::i;:::-;22035:46;::::0;;-1:-1:-1;;;;;10550:55:1;;10532:74;;10637:2;10622:18;;10615:34;;;10665:18;;;10658:34;;;22035:46:0::1;::::0;10520:2:1;10505:18;22035:46:0::1;;;;;;;-1:-1:-1::0;;14750:1:0;17779:16;:41;-1:-1:-1;21367:722:0:o;3007:295::-;3124:7;-1:-1:-1;;;;;3171:19:0;;3149:111;;;;-1:-1:-1;;;3149:111:0;;16648:2:1;3149:111:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;16797:12;16777:18;;;16770:40;16827:19;;3149:111:0;16620:232:1;3149:111:0;-1:-1:-1;;;;;;3278:16:0;;;;;:9;:16;;;;;;;3007:295::o;12802:142::-;13110:5;;-1:-1:-1;;;;;13110:5:0;13096:10;:19;11573:46;;;;-1:-1:-1;;;11573:46:0;;12792:2:1;11573:46:0;;;12774:21:1;12831:2;12811:18;;;12804:30;12870:26;12850:18;;;12843:54;12914:18;;11573:46:0;12764:174:1;11573:46:0;12861:5:::1;:18:::0;;-1:-1:-1;;;;;;12861:18:0::1;::::0;;12897:39:::1;::::0;12877:1:::1;::::0;;;12897:39:::1;::::0;12877:1;;12897:39:::1;12802:142::o:0;12537:173::-;13290:9;;-1:-1:-1;;;;;13290:9:0;13276:10;:23;11683:70;;;;-1:-1:-1;;;11683:70:0;;12019:2:1;11683:70:0;;;12001:21:1;12058:2;12038:18;;;12031:30;12097:34;12077:18;;;12070:62;12168:14;12148:18;;;12141:42;12200:19;;11683:70:0;11991:234:1;11683:70:0;12605:9:::1;12598:16:::0;;-1:-1:-1;;;;;;12598:16:0;;::::1;::::0;;;12627:5:::1;:18:::0;;12635:10:::1;12627:18:::0;::::1;::::0;::::1;::::0;;12663:39:::1;::::0;12635:10;;12663:39:::1;::::0;-1:-1:-1;;12663:39:0::1;12537:173::o:0;24196:357::-;24346:19;;;;:8;:19;;;;;:36;;;-1:-1:-1;;;;;24346:36:0;24386:10;24346:50;24324:150;;;;-1:-1:-1;;;24324:150:0;;15804:2:1;24324:150:0;;;15786:21:1;15843:2;15823:18;;;15816:30;15882:34;15862:18;;;15855:62;15953:20;15933:18;;;15926:48;15991:19;;24324:150:0;15776:240:1;24324:150:0;24487:19;;;;:8;:19;;;;;;:36;;:58;;-1:-1:-1;;;;;;24487:58:0;-1:-1:-1;;;;;24487:58:0;;;;;;;;;24196:357::o;23924:264::-;24018:7;24051:23;;;:14;:23;;;;;;24043:69;;;;-1:-1:-1;;;24043:69:0;;20566:2:1;24043:69:0;;;20548:21:1;20605:2;20585:18;;;20578:30;20644:31;20624:18;;;20617:59;20693:18;;24043:69:0;20538:179:1;24043:69:0;-1:-1:-1;24130:33:0;24139:23;;;:14;:23;;;;;;;;;24130:33;;:8;:33;;;;;:50;;;-1:-1:-1;;;;;24130:50:0;;23924:264::o;5053:321::-;-1:-1:-1;;;;;5188:22:0;;5200:10;5188:22;;5180:60;;;;-1:-1:-1;;;5180:60:0;;15037:2:1;5180:60:0;;;15019:21:1;15076:2;15056:18;;;15049:30;15115:27;15095:18;;;15088:55;15160:18;;5180:60:0;15009:175:1;5180:60:0;5272:10;5253:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;5253:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;5253:51:0;;;;;;;;;;5320:46;;11359:41:1;;;5253:40:0;;5272:10;5320:46;;11332:18:1;5320:46:0;;;;;;;5053:321;;:::o;6179:363::-;6368:39;6387:10;6399:7;6368:18;:39::i;:::-;6346:138;;;;-1:-1:-1;;;6346:138:0;;20924:2:1;6346:138:0;;;20906:21:1;20963:2;20943:18;;;20936:30;21002:34;20982:18;;;20975:62;21073:19;21053:18;;;21046:47;21110:19;;6346:138:0;20896:239:1;6346:138:0;6495:39;6509:4;6515:2;6519:7;6528:5;6495:13;:39::i;:::-;6179:363;;;;:::o;19948:1355::-;14805:1;17452:16;;:38;;17444:65;;;;-1:-1:-1;;;17444:65:0;;20223:2:1;17444:65:0;;;20205:21:1;20262:2;20242:18;;;20235:30;20301:16;20281:18;;;20274:44;20335:18;;17444:65:0;20195:164:1;17444:65:0;14805:1;17585:16;:37;20213:1:::1;20182:19:::0;;;:8:::1;:19;::::0;;;;:28;20174:67:::1;;;::::0;-1:-1:-1;;;20174:67:0;;21760:2:1;20174:67:0::1;::::0;::::1;21742:21:1::0;21799:2;21779:18;;;21772:30;21838:24;21818:18;;;21811:52;21880:18;;20174:67:0::1;21732:172:1::0;20174:67:0::1;20373:19;::::0;;;:8:::1;:19;::::0;;;;:28;;20343:27:::1;::::0;;::::1;::::0;:58:::1;20321:141;;;::::0;-1:-1:-1;;;20321:141:0;;18599:2:1;20321:141:0::1;::::0;::::1;18581:21:1::0;18638:2;18618:18;;;18611:30;18677:34;18657:18;;;18650:62;18748:3;18728:18;;;18721:31;18769:19;;20321:141:0::1;18571:223:1::0;20321:141:0::1;20572:19;::::0;;;:8:::1;:19;::::0;;;;:25:::1;;::::0;20559:9:::1;:38;;20537:129;;;::::0;-1:-1:-1;;;20537:129:0;;19411:2:1;20537:129:0::1;::::0;::::1;19393:21:1::0;19450:2;19430:18;;;19423:30;19489:34;19469:18;;;19462:62;19560:11;19540:18;;;19533:39;19589:19;;20537:129:0::1;19383:231:1::0;20537:129:0::1;20743:19;::::0;;;:8:::1;:19;::::0;;;;:27:::1;;:29:::0;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;20783:52:0::1;20798:19:::0;;;:8:::1;:19;::::0;;;;;;;:36:::1;;::::0;-1:-1:-1;;;;;20798:36:0::1;20783:52:::0;;:14:::1;:52:::0;;;;;:65;;20839:9:::1;::::0;20783:52;:65:::1;::::0;20839:9;;20783:65:::1;:::i;:::-;;;;;;;;20929:30;20935:10;20947:11;;20929:5;:30::i;:::-;21059:11;::::0;;21044:27:::1;::::0;;;:14:::1;:27;::::0;;;;;;;:39;;;21156:11;;21182:19;;;:8:::1;:19:::0;;;;;;:27:::1;;::::0;21101:168;;22265:25:1;;;21224:9:0::1;22306:18:1::0;;;22299:34;;;;21248:10:0::1;::::0;21044:39;;21101:168:::1;::::0;22238:18:1;21101:168:0::1;;;;;;;21282:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;14750:1:0;17779:16;:41;-1:-1:-1;19948:1355:0:o;18179:905::-;14805:1;17452:16;;:38;;17444:65;;;;-1:-1:-1;;;17444:65:0;;20223:2:1;17444:65:0;;;20205:21:1;20262:2;20242:18;;;20235:30;20301:16;20281:18;;;20274:44;20335:18;;17444:65:0;20195:164:1;17444:65:0;14805:1;17585:16;:37;18382:7:::1;18377:700;18399:5;:12;18395:1;:16;;;18377:700;;;18433:16;18452:5;18458:1;18452:8;;;;;;;;;;:::i;:::-;;;;;;;:17;;;18433:36;;18484:13;18500:5;18506:1;18500:8;;;;;;;;;;:::i;:::-;;;;;;;:14;;;18484:30;;18529:20;18552:5;18558:1;18552:8;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;:20:::1;::::0;;::::1;::::0;18615:218;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;-1:-1:-1;;;;;18615:218:0;;::::1;::::0;;;;;;-1:-1:-1;18615:218:0;;;;;;;;;;;;;;18598:13:::1;::::0;;18589:23;;:8:::1;:23:::0;;;;;;:244;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;18589:244:0::1;::::0;;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;18974:13;;18855:178;;22583:25:1;;;22624:18;;;22617:34;;;22667:18;;;22660:83;;;;22759:18;;22752:34;;;18552:20:0;;-1:-1:-1;18974:13:0;;18855:178:::1;::::0;22555:19:1;18855:178:0::1;;;;;;;19050:13;:15:::0;;;:13:::1;:15;::::0;::::1;:::i;:::-;;;;;;18418:659;;;18413:3;;;;;:::i;:::-;;;;18377:700;;;-1:-1:-1::0;;14750:1:0;17779:16;:41;-1:-1:-1;18179:905:0:o;22515:619::-;22746:1;22720:23;;;:14;:23;;;;;;22616:13;;22712:67;;;;-1:-1:-1;;;22712:67:0;;17830:2:1;22712:67:0;;;17812:21:1;17869:2;17849:18;;;17842:30;17908:29;17888:18;;;17881:57;17955:18;;22712:67:0;17802:177:1;22712:67:0;23001:23;;;;:14;:23;;;;;;22961:7;;22991:34;;:9;:34::i;:::-;23074:18;23084:7;23074:9;:18::i;:::-;22922:189;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22877:249;;22515:619;;;:::o;22097:123::-;22155:7;22207:5;22183:20;22193:10;22183:7;:20;:::i;:::-;22182:30;;;;:::i;19092:848::-;14805:1;17452:16;;:38;;17444:65;;;;-1:-1:-1;;;17444:65:0;;20223:2:1;17444:65:0;;;20205:21:1;20262:2;20242:18;;;20235:30;20301:16;20281:18;;;20274:44;20335:18;;17444:65:0;20195:164:1;17444:65:0;14805:1;17585:16;:37;;;19538:194:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;19538:194:0;;::::1;::::0;;;;;;-1:-1:-1;19538:194:0;;;;;;;;;;;;;;19521:13:::1;::::0;;19512:23;;:8:::1;:23:::0;;;;;;:220;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;19512:220:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;19853:13;;19750:154;;22583:25:1;;;22624:18;;;22617:34;;;22667:18;;;22660:83;;;;22759:18;;;22752:34;;;19853:13:0;;19750:154:::1;::::0;22555:19:1;19750:154:0::1;;;;;;;19917:13;:15:::0;;;:13:::1;:15;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;14750:1:0;17779:16;:41;-1:-1:-1;;;;19092:848:0:o;14137:113::-;13110:5;;-1:-1:-1;;;;;13110:5:0;13096:10;:19;13792:25;;;-1:-1:-1;14402:8:0;;-1:-1:-1;;;;;14402:8:0;14388:10;:22;13805:12;13784:62;;;;-1:-1:-1;;;13784:62:0;;14279:2:1;13784:62:0;;;14261:21:1;14318:2;14298:18;;;14291:30;14357:26;14337:18;;;14330:54;14401:18;;13784:62:0;14251:174:1;13784:62:0;14222:8:::1;:20:::0;;-1:-1:-1;;;;;;14222:20:0::1;-1:-1:-1::0;;;;;14222:20:0;;;::::1;::::0;;;::::1;::::0;;14137:113::o;23699:217::-;23743:13;23887:7;23870:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;23856:52;;23699:217;:::o;12088:188::-;13110:5;;-1:-1:-1;;;;;13110:5:0;13096:10;:19;11573:46;;;;-1:-1:-1;;;11573:46:0;;12792:2:1;11573:46:0;;;12774:21:1;12831:2;12811:18;;;12804:30;12870:26;12850:18;;;12843:54;12914:18;;11573:46:0;12764:174:1;11573:46:0;-1:-1:-1;;;;;12173:24:0;::::1;12165:68;;;::::0;-1:-1:-1;;;12165:68:0;;12432:2:1;12165:68:0::1;::::0;::::1;12414:21:1::0;12471:2;12451:18;;;12444:30;12510:33;12490:18;;;12483:61;12561:18;;12165:68:0::1;12404:181:1::0;12165:68:0::1;12246:9;:22:::0;;-1:-1:-1;;;;;;12246:22:0::1;-1:-1:-1::0;;;;;12246:22:0;;;::::1;::::0;;;::::1;::::0;;12088:188::o;23260:369::-;23319:7;23412:23;;;:14;:23;;;;;;23404:67;;;;-1:-1:-1;;;23404:67:0;;17830:2:1;23404:67:0;;;17812:21:1;17869:2;17849:18;;;17842:30;17908:29;17888:18;;;17881:57;17955:18;;23404:67:0;17802:177:1;23404:67:0;-1:-1:-1;23576:33:0;23585:23;;;:14;:23;;;;;;;;;23576:33;;:8;:33;;;;;:45;;;;23260:369::o;9162:174::-;9237:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;9237:29:0;-1:-1:-1;;;;;9237:29:0;;;;;;;;:24;;9291:23;9237:24;9291:14;:23::i;:::-;-1:-1:-1;;;;;9282:46:0;;;;;;;;;;;9162:174;;:::o;7045:452::-;7174:4;6999:16;;;;;;;;;;;-1:-1:-1;;;;;6999:16:0;7196:110;;;;-1:-1:-1;;;7196:110:0;;15391:2:1;7196:110:0;;;15373:21:1;15430:2;15410:18;;;15403:30;15469:34;15449:18;;;15442:62;15540:14;15520:18;;;15513:42;15572:19;;7196:110:0;15363:234:1;7196:110:0;7317:13;7333:23;7348:7;7333:14;:23::i;:::-;7317:39;;7386:5;-1:-1:-1;;;;;7375:16:0;:7;-1:-1:-1;;;;;7375:16:0;;:64;;;;7432:7;-1:-1:-1;;;;;7408:31:0;:20;7420:7;7408:11;:20::i;:::-;-1:-1:-1;;;;;7408:31:0;;7375:64;:113;;;-1:-1:-1;;;;;;5553:25:0;;;5524:4;5553:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7456:32;7367:122;7045:452;-1:-1:-1;;;;7045:452:0:o;8591:563::-;8764:4;-1:-1:-1;;;;;8737:31:0;:23;8752:7;8737:14;:23::i;:::-;-1:-1:-1;;;;;8737:31:0;;8715:122;;;;-1:-1:-1;;;8715:122:0;;19001:2:1;8715:122:0;;;18983:21:1;19040:2;19020:18;;;19013:30;19079:34;19059:18;;;19052:62;19150:11;19130:18;;;19123:39;19179:19;;8715:122:0;18973:231:1;8715:122:0;-1:-1:-1;;;;;8856:16:0;;8848:65;;;;-1:-1:-1;;;8848:65:0;;14632:2:1;8848:65:0;;;14614:21:1;14671:2;14651:18;;;14644:30;14710:34;14690:18;;;14683:62;14781:6;14761:18;;;14754:34;14805:19;;8848:65:0;14604:226:1;8848:65:0;8978:29;8995:1;8999:7;8978:8;:29::i;:::-;-1:-1:-1;;;;;9020:15:0;;;;;;9039:1;9020:15;;;;;;;:20;;9039:1;;9020:15;;:20;;9039:1;;9020:20;:::i;:::-;;;;-1:-1:-1;;;;;;;9051:13:0;;;;;;9068:1;9051:13;;;;;;;:18;;9068:1;;9051:13;;:18;;9068:1;;9051:18;:::i;:::-;;;;-1:-1:-1;;9080:7:0;:16;;;;;;;;;;;:21;;-1:-1:-1;;;;;;9080:21:0;-1:-1:-1;;;;;9080:21:0;;;;;;;;;9119:27;;9080:16;;9119:27;;;;;;;8591:563;;;:::o;24613:345::-;24742:6;24717:21;:31;;24695:110;;;;-1:-1:-1;;;24695:110:0;;13564:2:1;24695:110:0;;;13546:21:1;13603:2;13583:18;;;13576:30;13642:31;13622:18;;;13615:59;13691:18;;24695:110:0;13536:179:1;24695:110:0;24819:12;24837:9;-1:-1:-1;;;;;24837:14:0;24859:6;24837:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24818:52;;;24889:7;24881:69;;;;-1:-1:-1;;;24881:69:0;;21342:2:1;24881:69:0;;;21324:21:1;21381:2;21361:18;;;21354:30;21420:34;21400:18;;;21393:62;21491:19;21471:18;;;21464:47;21528:19;;24881:69:0;21314:239:1;6550:352:0;6707:28;6717:4;6723:2;6727:7;6707:9;:28::i;:::-;6768:48;6791:4;6797:2;6801:7;6810:5;6768:22;:48::i;:::-;6746:148;;;;-1:-1:-1;;;6746:148:0;;13145:2:1;6746:148:0;;;13127:21:1;13184:2;13164:18;;;13157:30;13223:34;13203:18;;;13196:62;13294:20;13274:18;;;13267:48;13332:19;;6746:148:0;13117:240:1;7952:324:0;-1:-1:-1;;;;;8032:16:0;;8024:61;;;;-1:-1:-1;;;8024:61:0;;17469:2:1;8024:61:0;;;17451:21:1;;;17488:18;;;17481:30;17547:34;17527:18;;;17520:62;17599:18;;8024:61:0;17441:182:1;8024:61:0;6975:4;6999:16;;;;;;;;;;;-1:-1:-1;;;;;6999:16:0;:30;8096:58;;;;-1:-1:-1;;;8096:58:0;;13922:2:1;8096:58:0;;;13904:21:1;13961:2;13941:18;;;13934:30;14000;13980:18;;;13973:58;14048:18;;8096:58:0;13894:178:1;8096:58:0;-1:-1:-1;;;;;8167:13:0;;;;;;8184:1;8167:13;;;;;;;:18;;8184:1;;8167:13;;:18;;8184:1;;8167:18;:::i;:::-;;;;-1:-1:-1;;8196:7:0;:16;;;;;;;;;;;:21;;-1:-1:-1;;;;;;8196:21:0;-1:-1:-1;;;;;8196:21:0;;;;;;;;8235:33;;8196:16;;:7;8235:33;;8196:7;;8235:33;7952:324;;:::o;25074:724::-;25131:13;25352:10;25348:53;;-1:-1:-1;;25379:10:0;;;;;;;;;;;;;;;;;;25074:724::o;25348:53::-;25426:5;25411:12;25467:78;25474:9;;25467:78;;25500:8;;;;:::i;:::-;;-1:-1:-1;25523:10:0;;-1:-1:-1;25531:2:0;25523:10;;:::i;:::-;;;25467:78;;;25555:19;25587:6;25577:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25577:17:0;;25555:39;;25605:154;25612:10;;25605:154;;25639:11;25649:1;25639:11;;:::i;:::-;;-1:-1:-1;25708:10:0;25716:2;25708:5;:10;:::i;:::-;25695:24;;:2;:24;:::i;:::-;25682:39;;25665:6;25672;25665:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;25736:11:0;25745:2;25736:11;;:::i;:::-;;;25605:154;;9344:1050;9499:4;10728:20;;10776:8;9516:871;;9572:173;;;;;-1:-1:-1;;;;;9572:36:0;;;;;:173;;9631:10;;9664:4;;9691:7;;9721:5;;9572:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9572:173:0;;;;;;;;-1:-1:-1;;9572:173:0;;;;;;;;;;;;:::i;:::-;;;9551:781;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9932:13:0;;9928:389;;9975:108;;-1:-1:-1;;;9975:108:0;;13145:2:1;9975:108:0;;;13127:21:1;13184:2;13164:18;;;13157:30;13223:34;13203:18;;;13196:62;13294:20;13274:18;;;13267:48;13332:19;;9975:108:0;13117:240:1;9928:389:0;10267:6;10261:13;10252:6;10248:2;10244:15;10237:38;9551:781;9809:55;;9819:45;9809:55;;-1:-1:-1;9802:62:0;;9516:871;-1:-1:-1;10371:4:0;9344:1050;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:465:1;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:116;282:4;-1:-1:-1;;208:2:1;200:6;196:15;192:88;188:99;172:116;:::i;:::-;163:125;;311:6;304:5;297:21;351:3;342:6;337:3;333:16;330:25;327:2;;;368:1;365;358:12;327:2;417:6;412:3;405:4;398:5;394:16;381:43;471:1;464:4;455:6;448:5;444:18;440:29;433:40;88:391;;;;;:::o;484:142::-;560:20;;589:31;560:20;589:31;:::i;:::-;541:85;;;:::o;631:247::-;690:6;743:2;731:9;722:7;718:23;714:32;711:2;;;759:1;756;749:12;711:2;798:9;785:23;817:31;842:5;817:31;:::i;:::-;867:5;701:177;-1:-1:-1;;;701:177:1:o;1143:259::-;1221:6;1274:2;1262:9;1253:7;1249:23;1245:32;1242:2;;;1290:1;1287;1280:12;1242:2;1322:9;1316:16;1341:31;1366:5;1341:31;:::i;1407:388::-;1475:6;1483;1536:2;1524:9;1515:7;1511:23;1507:32;1504:2;;;1552:1;1549;1542:12;1504:2;1591:9;1578:23;1610:31;1635:5;1610:31;:::i;:::-;1660:5;-1:-1:-1;1717:2:1;1702:18;;1689:32;1730:33;1689:32;1730:33;:::i;:::-;1782:7;1772:17;;;1494:301;;;;;:::o;1800:456::-;1877:6;1885;1893;1946:2;1934:9;1925:7;1921:23;1917:32;1914:2;;;1962:1;1959;1952:12;1914:2;2001:9;1988:23;2020:31;2045:5;2020:31;:::i;:::-;2070:5;-1:-1:-1;2127:2:1;2112:18;;2099:32;2140:33;2099:32;2140:33;:::i;:::-;1904:352;;2192:7;;-1:-1:-1;;;2246:2:1;2231:18;;;;2218:32;;1904:352::o;2261:794::-;2356:6;2364;2372;2380;2433:3;2421:9;2412:7;2408:23;2404:33;2401:2;;;2450:1;2447;2440:12;2401:2;2489:9;2476:23;2508:31;2533:5;2508:31;:::i;:::-;2558:5;-1:-1:-1;2615:2:1;2600:18;;2587:32;2628:33;2587:32;2628:33;:::i;:::-;2680:7;-1:-1:-1;2734:2:1;2719:18;;2706:32;;-1:-1:-1;2789:2:1;2774:18;;2761:32;2816:18;2805:30;;2802:2;;;2848:1;2845;2838:12;2802:2;2871:22;;2924:4;2916:13;;2912:27;-1:-1:-1;2902:2:1;;2953:1;2950;2943:12;2902:2;2976:73;3041:7;3036:2;3023:16;3018:2;3014;3010:11;2976:73;:::i;:::-;2966:83;;;2391:664;;;;;;;:::o;3060:416::-;3125:6;3133;3186:2;3174:9;3165:7;3161:23;3157:32;3154:2;;;3202:1;3199;3192:12;3154:2;3241:9;3228:23;3260:31;3285:5;3260:31;:::i;:::-;3310:5;-1:-1:-1;3367:2:1;3352:18;;3339:32;3409:15;;3402:23;3390:36;;3380:2;;3440:1;3437;3430:12;3481:315;3549:6;3557;3610:2;3598:9;3589:7;3585:23;3581:32;3578:2;;;3626:1;3623;3616:12;3578:2;3665:9;3652:23;3684:31;3709:5;3684:31;:::i;:::-;3734:5;3786:2;3771:18;;;;3758:32;;-1:-1:-1;;;3568:228:1:o;3801:1403::-;3931:6;3939;3970:2;4013;4001:9;3992:7;3988:23;3984:32;3981:2;;;4029:1;4026;4019:12;3981:2;4069:9;4056:23;4098:18;4139:2;4131:6;4128:14;4125:2;;;4155:1;4152;4145:12;4125:2;4193:6;4182:9;4178:22;4168:32;;4238:7;4231:4;4227:2;4223:13;4219:27;4209:2;;4260:1;4257;4250:12;4209:2;4296;4283:16;4318:4;4341:2;4337;4334:10;4331:2;;;4347:18;;:::i;:::-;4387:36;4419:2;4414;4411:1;4407:10;4403:19;4387:36;:::i;:::-;4457:15;;;4488:12;;;;-1:-1:-1;4520:11:1;;;4550:4;4581:11;;;4573:20;;4569:29;;4566:42;-1:-1:-1;4563:2:1;;;4621:1;4618;4611:12;4563:2;4643:1;4634:10;;4664:1;4674:435;4690:2;4685:3;4682:11;4674:435;;;4765:2;4759:3;4750:7;4746:17;4742:26;4739:2;;;4781:1;4778;4771:12;4739:2;4811:22;;:::i;:::-;4860:17;;4846:32;;4927:12;;;4914:26;4898:14;;;4891:50;4990:12;;;4977:26;4961:14;;;4954:50;5017:18;;5055:12;;;;5087;;;;4712:1;4703:11;4674:435;;;4678:3;;;5128:5;5118:15;;;5152:46;5194:2;5183:9;5179:18;5152:46;:::i;:::-;5142:56;;;;;;;3950:1254;;;;;:::o;5209:245::-;5267:6;5320:2;5308:9;5299:7;5295:23;5291:32;5288:2;;;5336:1;5333;5326:12;5288:2;5375:9;5362:23;5394:30;5418:5;5394:30;:::i;5459:249::-;5528:6;5581:2;5569:9;5560:7;5556:23;5552:32;5549:2;;;5597:1;5594;5587:12;5549:2;5629:9;5623:16;5648:30;5672:5;5648:30;:::i;5713:450::-;5782:6;5835:2;5823:9;5814:7;5810:23;5806:32;5803:2;;;5851:1;5848;5841:12;5803:2;5891:9;5878:23;5924:18;5916:6;5913:30;5910:2;;;5956:1;5953;5946:12;5910:2;5979:22;;6032:4;6024:13;;6020:27;-1:-1:-1;6010:2:1;;6061:1;6058;6051:12;6010:2;6084:73;6149:7;6144:2;6131:16;6126:2;6122;6118:11;6084:73;:::i;6168:180::-;6227:6;6280:2;6268:9;6259:7;6255:23;6251:32;6248:2;;;6296:1;6293;6286:12;6248:2;-1:-1:-1;6319:23:1;;6238:110;-1:-1:-1;6238:110:1:o;6353:323::-;6429:6;6437;6490:2;6478:9;6469:7;6465:23;6461:32;6458:2;;;6506:1;6503;6496:12;6458:2;6542:9;6529:23;6519:33;;6602:2;6591:9;6587:18;6574:32;6615:31;6640:5;6615:31;:::i;6681:460::-;6775:6;6783;6791;6799;6852:3;6840:9;6831:7;6827:23;6823:33;6820:2;;;6869:1;6866;6859:12;6820:2;6905:9;6892:23;6882:33;;6962:2;6951:9;6947:18;6934:32;6924:42;;7016:2;7005:9;7001:18;6988:32;7029:31;7054:5;7029:31;:::i;:::-;6810:331;;;;-1:-1:-1;7079:5:1;;7131:2;7116:18;7103:32;;-1:-1:-1;;6810:331:1:o;7146:316::-;7187:3;7225:5;7219:12;7252:6;7247:3;7240:19;7268:63;7324:6;7317:4;7312:3;7308:14;7301:4;7294:5;7290:16;7268:63;:::i;:::-;7376:2;7364:15;-1:-1:-1;;7360:88:1;7351:98;;;;7451:4;7347:109;;7195:267;-1:-1:-1;;7195:267:1:o;7467:1088::-;7552:12;;7517:3;;7607:1;7627:18;;;;7680;;;;7707:2;;7761:4;7753:6;7749:17;7739:27;;7707:2;7787;7835;7827:6;7824:14;7804:18;7801:38;7798:2;;;-1:-1:-1;;;7869:1:1;7862:88;7973:4;7970:1;7963:15;8001:4;7998:1;7991:15;7798:2;8032:18;8059:162;;;;8235:1;8230:319;;;;8025:524;;8059:162;-1:-1:-1;;8096:9:1;8092:82;8087:3;8080:95;8204:6;8199:3;8195:16;8188:23;;8059:162;;8230:319;24000:1;23993:14;;;24037:4;24024:18;;8324:1;8338:165;8352:6;8349:1;8346:13;8338:165;;;8430:14;;8417:11;;;8410:35;8473:16;;;;8367:10;;8338:165;;;8342:3;;8532:6;8527:3;8523:16;8516:23;;8025:524;;;;;;;7525:1030;;;;:::o;8560:714::-;8885:3;8913:38;8947:3;8939:6;8913:38;:::i;:::-;8980:6;8974:13;8996:52;9041:6;9037:2;9030:4;9022:6;9018:17;8996:52;:::i;:::-;9108:3;9070:15;;9094:18;;;9137:13;;9159:65;9137:13;9211:1;9200:13;;9193:4;9181:17;;9159:65;:::i;:::-;9244:20;9266:1;9240:28;;8893:381;-1:-1:-1;;;;;8893:381:1:o;9279:358::-;9508:3;9536:38;9570:3;9562:6;9536:38;:::i;:::-;9594:10;9583:22;;9629:1;9621:10;;9516:121;-1:-1:-1;;;9516:121:1:o;10703:511::-;10897:4;-1:-1:-1;;;;;11007:2:1;10999:6;10995:15;10984:9;10977:34;11059:2;11051:6;11047:15;11042:2;11031:9;11027:18;11020:43;;11099:6;11094:2;11083:9;11079:18;11072:34;11142:3;11137:2;11126:9;11122:18;11115:31;11163:45;11203:3;11192:9;11188:19;11180:6;11163:45;:::i;:::-;11155:53;10906:308;-1:-1:-1;;;;;;10906:308:1:o;11593:219::-;11742:2;11731:9;11724:21;11705:4;11762:44;11802:2;11791:9;11787:18;11779:6;11762:44;:::i;23330:253::-;23402:2;23396:9;23444:4;23432:17;;23479:18;23464:34;;23500:22;;;23461:62;23458:2;;;23526:18;;:::i;:::-;23562:2;23555:22;23376:207;:::o;23588:334::-;23659:2;23653:9;23715:2;23705:13;;-1:-1:-1;;23701:86:1;23689:99;;23818:18;23803:34;;23839:22;;;23800:62;23797:2;;;23865:18;;:::i;:::-;23901:2;23894:22;23633:289;;-1:-1:-1;23633:289:1:o;24053:128::-;24093:3;24124:1;24120:6;24117:1;24114:13;24111:2;;;24130:18;;:::i;:::-;-1:-1:-1;24166:9:1;;24101:80::o;24186:120::-;24226:1;24252;24242:2;;24257:18;;:::i;:::-;-1:-1:-1;24291:9:1;;24232:74::o;24311:228::-;24351:7;24477:1;-1:-1:-1;;24405:74:1;24402:1;24399:81;24394:1;24387:9;24380:17;24376:105;24373:2;;;24484:18;;:::i;:::-;-1:-1:-1;24524:9:1;;24363:176::o;24544:125::-;24584:4;24612:1;24609;24606:8;24603:2;;;24617:18;;:::i;:::-;-1:-1:-1;24654:9:1;;24593:76::o;24674:258::-;24746:1;24756:113;24770:6;24767:1;24764:13;24756:113;;;24846:11;;;24840:18;24827:11;;;24820:39;24792:2;24785:10;24756:113;;;24887:6;24884:1;24881:13;24878:2;;;-1:-1:-1;;24922:1:1;24904:16;;24897:27;24727:205::o;24937:437::-;25016:1;25012:12;;;;25059;;;25080:2;;25134:4;25126:6;25122:17;25112:27;;25080:2;25187;25179:6;25176:14;25156:18;25153:38;25150:2;;;-1:-1:-1;;;25221:1:1;25214:88;25325:4;25322:1;25315:15;25353:4;25350:1;25343:15;25150:2;;24992:382;;;:::o;25379:195::-;25418:3;-1:-1:-1;;25442:5:1;25439:77;25436:2;;;25519:18;;:::i;:::-;-1:-1:-1;25566:1:1;25555:13;;25426:148::o;25579:175::-;25616:3;25660:4;25653:5;25649:16;25689:4;25680:7;25677:17;25674:2;;;25697:18;;:::i;:::-;25746:1;25733:15;;25624:130;-1:-1:-1;;25624:130:1:o;25759:112::-;25791:1;25817;25807:2;;25822:18;;:::i;:::-;-1:-1:-1;25856:9:1;;25797:74::o;25876:184::-;-1:-1:-1;;;25925:1:1;25918:88;26025:4;26022:1;26015:15;26049:4;26046:1;26039:15;26065:184;-1:-1:-1;;;26114:1:1;26107:88;26214:4;26211:1;26204:15;26238:4;26235:1;26228:15;26254:184;-1:-1:-1;;;26303:1:1;26296:88;26403:4;26400:1;26393:15;26427:4;26424:1;26417:15;26443:184;-1:-1:-1;;;26492:1:1;26485:88;26592:4;26589:1;26582:15;26616:4;26613:1;26606:15;26632:154;-1:-1:-1;;;;;26711:5:1;26707:54;26700:5;26697:65;26687:2;;26776:1;26773;26766:12;26687:2;26677:109;:::o;26791:177::-;26876:66;26869:5;26865:78;26858:5;26855:89;26845:2;;26958:1;26955;26948:12

Swarm Source

ipfs://6fba883d1cab0cdd74d51f8a0af43c1bcc16d3841fa60781ef19fa2547588724
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.