ETH Price: $1,791.16 (-1.44%)

Untitled Token (UT)
 

Overview

TokenID

26

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
UntitledToken

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-20
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
pragma solidity >=0.6.0;

library Base64 {
    string internal constant TABLE_ENCODE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    bytes internal constant TABLE_DECODE =
        hex"0000000000000000000000000000000000000000000000000000000000000000"
        hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000"
        hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000"
        hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";
        string memory table = TABLE_ENCODE;
        uint256 encodedLen = 4 * ((data.length + 2) / 3);
        string memory result = new string(encodedLen + 32);
        assembly {
            mstore(result, encodedLen)
            let tablePtr := add(table, 1)
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))
            let resultPtr := add(result, 32)
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)
                mstore8(
                    resultPtr,
                    mload(add(tablePtr, and(shr(18, input), 0x3F)))
                )
                resultPtr := add(resultPtr, 1)
                mstore8(
                    resultPtr,
                    mload(add(tablePtr, and(shr(12, input), 0x3F)))
                )
                resultPtr := add(resultPtr, 1)
                mstore8(
                    resultPtr,
                    mload(add(tablePtr, and(shr(6, input), 0x3F)))
                )
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1)
            }
            switch mod(mload(data), 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
        }

        return result;
    }
}

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

interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

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

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

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

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

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount);
        (bool success, ) = recipient.call{value: amount}("");
        require(success);
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0);
        return string(buffer);
    }
}

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    using Counters for Counters.Counter;

    uint256 internal counter;
    string private _name;
    string private _symbol;

    string[] public _names;
    uint32[] public _nameChanges;

    string internal __baseURI = "https://metadata.untitledtoken.io/";

    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    mapping(uint256 => address[]) internal _owners;
    mapping(uint256 => uint32) internal _ownerCount;

    mapping(uint256 => uint256) private _mintBlockNumbers;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        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));
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(_ownerCount[tokenId] != 0);
        address owner = _owners[tokenId][_ownerCount[tokenId] - 1];
        return owner;
    }

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

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

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId));

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

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner);
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()));
        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(_exists(tokenId));

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender());

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

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId));
        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId));
        _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));
    }

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

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(_exists(tokenId));
        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));
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0));
        require(!_exists(tokenId));

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

        _names.push(
            string(
                abi.encodePacked("Untitled Token #", Strings.toString(tokenId))
            )
        );
        _nameChanges.push(0);

        _balances[to] += 1;
        _ownerCount[tokenId] += 1;
        _owners[tokenId].push(to);
        _mintBlockNumbers[tokenId] = block.number;
        counter++;
        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        _approve(address(0), tokenId);
        _balances[owner] -= 1;
        delete _owners[tokenId];
        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from);
        require(to != address(0));
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _ownerCount[tokenId] += 1;
        _owners[tokenId].push(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 getBlockNumber(uint256 tokenId) public view returns (uint256) {
        return _mintBlockNumbers[tokenId];
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert();
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function ownerCount(uint256 tokenId) public view returns (uint32) {
        return _ownerCount[tokenId];
    }

    function ownerAtIndex(uint256 tokenId, uint32 index)
        public
        view
        returns (address)
    {
        return _owners[tokenId][index];
    }

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

contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    constructor() payable {}

    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    function release(address payable account) public virtual {
        require(_shares[account] > 0);

        uint256 totalReceived = address(this).balance + _totalReleased;
        uint256 payment = (totalReceived * _shares[account]) /
            _totalShares -
            _released[account];

        require(payment != 0);

        _released[account] = _released[account] + payment;
        _totalReleased = _totalReleased + payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    function _addPayee(address account, uint256 shares_) internal {
        require(account != address(0));
        require(shares_ > 0);
        require(_shares[account] == 0);

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

library Counters {
    struct Counter {
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) public view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) public {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) public {
        uint256 value = counter._value;
        require(value > 0);
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) public {
        counter._value = 0;
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender());
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0));
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract UntitledToken is ERC721, Ownable, PaymentSplitter {
    using Strings for uint256;
    uint256 TOKEN_PRICE = 0.06 * 1e18;
    uint256 constant TOKEN_COUNT = 8888;
    uint256 constant MAX_PRESALE_COUNT = 2;
    bool public mintEnabled = false;
    bool public premintEnabled = false;

    address constant DEV_ADDRESS = 0x73124518c6a1e9f63D5867a0C06161963501D2Bf;
    address constant PRIMARY_ADDRESS =
        0xc64Beb85e2A546Bffb8A2eE61C4ae0f06C8E1409;

    constructor() ERC721("Untitled Token", "UT") PaymentSplitter() {
        _addPayee(PRIMARY_ADDRESS, 80);
        _addPayee(DEV_ADDRESS, 20);
    }

    function mintMany(uint256 amount)
        public
        payable
        costs(TOKEN_PRICE * amount)
        onMint
    {
        require(totalSupply() + amount <= TOKEN_COUNT);
        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function mint() public payable costs(TOKEN_PRICE) onMint {
        require(totalSupply() < TOKEN_COUNT);
        _safeMint(msg.sender, totalSupply());
    }

    function mintOwner() public onlyOwner {
        require(totalSupply() < TOKEN_COUNT);
        _safeMint(msg.sender, totalSupply());
    }

    function mintOwnerMany(uint256 amount) public onlyOwner {
        require(totalSupply() + amount <= TOKEN_COUNT);
        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function setMintEnabled(bool enabled) public onlyOwner {
        mintEnabled = enabled;
    }

    function setPremintEnabled(bool enabled) public onlyOwner {
        premintEnabled = enabled;
    }

    function setTokenPrice(uint256 tokenPrice) public onlyOwner {
        TOKEN_PRICE = tokenPrice;
    }

    modifier owns(uint256 id) {
        require(ownerOf(id) == msg.sender);
        _;
    }
    modifier costs(uint256 price) {
        require(msg.value == price);
        _;
    }
    modifier onMint() {
        require(mintEnabled);
        _;
    }
    modifier onPremint() {
        require(premintEnabled);
        _;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function setBaseURI(string memory uri) public onlyOwner {
        __baseURI = uri;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId));
        string memory base = _baseURI();
        return
            string(
                abi.encodePacked(
                    base,
                    Strings.toString(tokenId),
                    ".json?nameChanges=",
                    Strings.toString(_nameChanges[tokenId]),
                    "&nameB64=",
                    Base64.encode(bytes(_names[tokenId]))
                )
            );
    }

    function changeName(uint256 tokenId, string memory name)
        public
        payable
        owns(tokenId)
        costs(nameChangePrice())
    {
        _nameChanges[tokenId] += 1;
        _names[tokenId] = name;
    }

    function nameChangePrice() public pure returns (uint256) {
        return 0.01 * 1e18;
    }

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

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

    function tokenByIndex(uint256 index) public view virtual returns (uint256) {
        require(index < totalSupply());
        return index;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        returns (uint256 tokenId)
    {
        require(index < balanceOf(owner));

        uint256 count;
        for (uint256 i; i < totalSupply(); i++) {
            if (owner == _owners[i][_ownerCount[i] - 1]) {
                if (count == index) return i;
                else count++;
            }
        }

        revert();
    }

    function presaleMintMany(uint256 amount, bytes memory signature)
        public
        payable
        costs(TOKEN_PRICE * amount)
        onPremint
    {
        require(totalSupply() + amount <= TOKEN_COUNT);
        require(balanceOf(msg.sender) + amount <= MAX_PRESALE_COUNT);
        require(verify(abi.encodePacked(msg.sender), signature));
        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function presaleMint(bytes memory signature)
        public
        payable
        costs(TOKEN_PRICE)
        onPremint
    {
        require(totalSupply() < TOKEN_COUNT);
        require(balanceOf(msg.sender) < MAX_PRESALE_COUNT);
        require(verify(abi.encodePacked(msg.sender), signature));
        _safeMint(msg.sender, totalSupply());
    }

    address constant VERIFY_ADDRESS =
        0xb997ADc54278348FDD86A5543c0250774F55c729;

    function verify(bytes memory h, bytes memory signature)
        internal
        pure
        returns (bool)
    {
        return recover(signature, getSignedMessageHash(h)) == VERIFY_ADDRESS;
    }

    function recover(bytes memory signature, bytes32 h)
        internal
        pure
        returns (address)
    {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(signature);

        return ecrecover(h, v, r, s);
    }

    function getSignedMessageHash(bytes memory message)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked(
                    "\x19Ethereum Signed Message:\n",
                    uint2str(message.length),
                    message
                )
            );
    }

    function splitSignature(bytes memory sig)
        internal
        pure
        returns (
            bytes32 r,
            bytes32 s,
            uint8 v
        )
    {
        require(sig.length == 65);

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

    function uint2str(uint256 _i)
        internal
        pure
        returns (string memory _uintAsString)
    {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint256 k = len;
        while (_i != 0) {
            k = k - 1;
            uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_nameChanges","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_names","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"name","type":"string"}],"name":"changeName","outputs":[],"stateMutability":"payable","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":"getBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintOwnerMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nameChangePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint32","name":"index","type":"uint32"}],"name":"ownerAtIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"presaleMintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPremintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052602260808181529062002ae060a0398051620000299160059160209091019062000268565b5066d529ae9e8600006012556013805461ffff191690553480156200004d57600080fd5b50604080518082018252600e81526d2ab73a34ba3632b2102a37b5b2b760911b602080830191825283518085019094526002845261155560f21b9084015281519192916200009e9160019162000268565b508051620000b490600290602084019062000268565b505050620000d1620000cb6200011960201b60201c565b6200011d565b620000f273c64beb85e2a546bffb8a2ee61c4ae0f06c8e140960506200016f565b620001137373124518c6a1e9f63d5867a0c06161963501d2bf60146200016f565b62000372565b3390565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200018357600080fd5b600081116200019157600080fd5b6001600160a01b0382166000908152600f602052604090205415620001b557600080fd5b60118054600181019091557f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0384169081179091556000908152600f60205260409020819055600d546200021f9082906200030e565b600d55604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b828054620002769062000335565b90600052602060002090601f0160209004810192826200029a5760008555620002e5565b82601f10620002b557805160ff1916838001178555620002e5565b82800160010185558215620002e5579182015b82811115620002e5578251825591602001919060010190620002c8565b50620002f3929150620002f7565b5090565b5b80821115620002f35760008155600101620002f8565b600082198211156200033057634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200034a57607f821691505b602082108114156200036c57634e487b7160e01b600052602260045260246000fd5b50919050565b61275e80620003826000396000f3fe60806040526004361061026b5760003560e01c8063715018a611610144578063c87b56dd116100b6578063d34aef4e1161007a578063d34aef4e14610783578063e33b7de3146107a3578063e985e9c5146107b8578063ef6c875414610801578063f2fde38b14610821578063f46a04eb1461084157600080fd5b8063c87b56dd146106de578063ce7c2ac2146106fe578063cecb06d014610734578063cf42dd4f14610749578063d12397301461076957600080fd5b8063937dd90d11610108578063937dd90d1461062057806395d89b41146106405780639852595c14610655578063a22cb4651461068b578063b88d4fde146106ab578063c39cbef1146106cb57600080fd5b8063715018a61461057257806389708f42146105875780638b83209b146105cf5780638da5cb5b146105ef5780639333b1e31461060d57600080fd5b80632f745c59116101dd57806350c0fbe4116101a157806350c0fbe4146104a657806355f804b3146104d35780635cb4712c146104f35780636352211e146105125780636a61e5fc1461053257806370a082311461055257600080fd5b80632f745c59146104175780633a98ef391461043757806342842e0e1461044c57806345ca77381461046c5780634f6ccce71461048657600080fd5b80631249c58b1161022f5780631249c58b1461037d57806318160ddd1461038557806319165587146103a457806323b872dd146103c457806325c5aa06146103e45780632b2e6f2d1461040457600080fd5b806301ffc9a7146102b9578063059513a6146102ee57806306fdde0314610303578063081812fc14610325578063095ea7b31461035d57600080fd5b366102b4577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156102c557600080fd5b506102d96102d4366004612051565b610861565b60405190151581526020015b60405180910390f35b6103016102fc366004612075565b61088c565b005b34801561030f57600080fd5b5061031861090b565b6040516102e591906120e6565b34801561033157600080fd5b50610345610340366004612075565b61099d565b6040516001600160a01b0390911681526020016102e5565b34801561036957600080fd5b5061030161037836600461210e565b6109d7565b610301610a32565b34801561039157600080fd5b506000545b6040519081526020016102e5565b3480156103b057600080fd5b506103016103bf36600461213a565b610a76565b3480156103d057600080fd5b506103016103df366004612157565b610b9e565b3480156103f057600080fd5b506103186103ff366004612075565b610bbc565b61030161041236600461223b565b610c68565b34801561042357600080fd5b5061039661043236600461210e565b610d4a565b34801561044357600080fd5b50600d54610396565b34801561045857600080fd5b50610301610467366004612157565b610e06565b34801561047857600080fd5b50662386f26fc10000610396565b34801561049257600080fd5b506103966104a1366004612075565b610e21565b3480156104b257600080fd5b506103966104c1366004612075565b6000908152600b602052604090205490565b3480156104df57600080fd5b506103016104ee366004612282565b610e34565b3480156104ff57600080fd5b506013546102d990610100900460ff1681565b34801561051e57600080fd5b5061034561052d366004612075565b610e62565b34801561053e57600080fd5b5061030161054d366004612075565b610edd565b34801561055e57600080fd5b5061039661056d36600461213a565b610ef9565b34801561057e57600080fd5b50610301610f2a565b34801561059357600080fd5b506105ba6105a2366004612075565b6000908152600a602052604090205463ffffffff1690565b60405163ffffffff90911681526020016102e5565b3480156105db57600080fd5b506103456105ea366004612075565b610f4d565b3480156105fb57600080fd5b50600c546001600160a01b0316610345565b61030161061b366004612282565b610f7d565b34801561062c57600080fd5b5061030161063b366004612075565b611008565b34801561064c57600080fd5b5061031861106b565b34801561066157600080fd5b5061039661067036600461213a565b6001600160a01b031660009081526010602052604090205490565b34801561069757600080fd5b506103016106a63660046122cc565b61107a565b3480156106b757600080fd5b506103016106c6366004612301565b6110fc565b6103016106d936600461223b565b61111b565b3480156106ea57600080fd5b506103186106f9366004612075565b6111eb565b34801561070a57600080fd5b5061039661071936600461213a565b6001600160a01b03166000908152600f602052604090205490565b34801561074057600080fd5b50610301611339565b34801561075557600080fd5b5061030161076436600461236d565b611373565b34801561077557600080fd5b506013546102d99060ff1681565b34801561078f57600080fd5b506105ba61079e366004612075565b6113a4565b3480156107af57600080fd5b50600e54610396565b3480156107c457600080fd5b506102d96107d3366004612388565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561080d57600080fd5b5061034561081c3660046123c1565b6113de565b34801561082d57600080fd5b5061030161083c36600461213a565b611404565b34801561084d57600080fd5b5061030161085c36600461236d565b611437565b60006001600160e01b0319821663780e9d6360e01b1480610886575061088682611461565b92915050565b8060125461089a9190612405565b8034146108a657600080fd5b60135460ff166108b557600080fd5b6122b8826108c260005490565b6108cc9190612424565b11156108d757600080fd5b60005b82811015610906576108f4336108ef60005490565b6114b1565b806108fe8161243c565b9150506108da565b505050565b60606001805461091a90612457565b80601f016020809104026020016040519081016040528092919081815260200182805461094690612457565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b6000818152600a602052604081205463ffffffff166109bb57600080fd5b506000908152600760205260409020546001600160a01b031690565b60006109e282610e62565b9050806001600160a01b0316836001600160a01b03161415610a0357600080fd5b336001600160a01b0382161480610a1f5750610a1f81336107d3565b610a2857600080fd5b61090683836114cb565b601254803414610a4157600080fd5b60135460ff16610a5057600080fd5b6122b8610a5c60005490565b10610a6657600080fd5b610a73336108ef60005490565b50565b6001600160a01b0381166000908152600f6020526040902054610a9857600080fd5b6000600e5447610aa89190612424565b6001600160a01b038316600090815260106020908152604080832054600d54600f909352908320549394509192610adf9085612405565b610ae991906124a8565b610af391906124bc565b905080610aff57600080fd5b6001600160a01b038316600090815260106020526040902054610b23908290612424565b6001600160a01b038416600090815260106020526040902055600e54610b4a908290612424565b600e55610b578382611539565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b610ba833826115a6565b610bb157600080fd5b610906838383611642565b60038181548110610bcc57600080fd5b906000526020600020016000915090508054610be790612457565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390612457565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b505050505081565b81601254610c769190612405565b803414610c8257600080fd5b601354610100900460ff16610c9657600080fd5b6122b883610ca360005490565b610cad9190612424565b1115610cb857600080fd5b600283610cc433610ef9565b610cce9190612424565b1115610cd957600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610d11906034015b60405160208183030381529060405283611797565b610d1a57600080fd5b60005b83811015610d4457610d32336108ef60005490565b80610d3c8161243c565b915050610d1d565b50505050565b6000610d5583610ef9565b8210610d6057600080fd5b6000805b600054811015610e00576000818152600960209081526040808320600a90925290912054610d9a9060019063ffffffff166124d3565b63ffffffff1681548110610db057610db06124f8565b6000918252602090912001546001600160a01b0386811691161415610dee5783821415610de05791506108869050565b81610dea8161243c565b9250505b80610df88161243c565b915050610d64565b50600080fd5b610906838383604051806020016040528060008152506110fc565b600080548210610e3057600080fd5b5090565b600c546001600160a01b03163314610e4b57600080fd5b8051610e5e906005906020840190611fab565b5050565b6000818152600a602052604081205463ffffffff16610e8057600080fd5b6000828152600960209081526040808320600a909252822054610eab9060019063ffffffff166124d3565b63ffffffff1681548110610ec157610ec16124f8565b6000918252602090912001546001600160a01b03169392505050565b600c546001600160a01b03163314610ef457600080fd5b601255565b60006001600160a01b038216610f0e57600080fd5b506001600160a01b031660009081526006602052604090205490565b600c546001600160a01b03163314610f4157600080fd5b610f4b60006117d1565b565b600060118281548110610f6257610f626124f8565b6000918252602090912001546001600160a01b031692915050565b601254803414610f8c57600080fd5b601354610100900460ff16610fa057600080fd5b6122b8610fac60005490565b10610fb657600080fd5b6002610fc133610ef9565b10610fcb57600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610ff290603401610cfc565b610ffb57600080fd5b610e5e336108ef60005490565b600c546001600160a01b0316331461101f57600080fd5b6122b88161102c60005490565b6110369190612424565b111561104157600080fd5b60005b81811015610e5e57611059336108ef60005490565b806110638161243c565b915050611044565b60606002805461091a90612457565b6001600160a01b03821633141561109057600080fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61110633836115a6565b61110f57600080fd5b610d4484848484611823565b813361112682610e62565b6001600160a01b03161461113957600080fd5b662386f26fc1000080341461114d57600080fd5b600160048581548110611162576111626124f8565b90600052602060002090600891828204019190066004028282829054906101000a900463ffffffff16611195919061250e565b92506101000a81548163ffffffff021916908363ffffffff16021790555082600385815481106111c7576111c76124f8565b9060005260206000200190805190602001906111e4929190611fab565b5050505050565b6000818152600a602052604090205460609063ffffffff1661120c57600080fd5b6000611216611843565b90508061122284611852565b61126160048681548110611238576112386124f8565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16611852565b61130f60038781548110611277576112776124f8565b90600052602060002001805461128c90612457565b80601f01602080910402602001604051908101604052809291908181526020018280546112b890612457565b80156113055780601f106112da57610100808354040283529160200191611305565b820191906000526020600020905b8154815290600101906020018083116112e857829003601f168201915b5050505050611950565b6040516020016113229493929190612536565b604051602081830303815290604052915050919050565b600c546001600160a01b0316331461135057600080fd5b6122b861135c60005490565b1061136657600080fd5b610f4b336108ef60005490565b600c546001600160a01b0316331461138a57600080fd5b601380549115156101000261ff0019909216919091179055565b600481815481106113b457600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b6000828152600960205260408120805463ffffffff8416908110610ec157610ec16124f8565b600c546001600160a01b0316331461141b57600080fd5b6001600160a01b03811661142e57600080fd5b610a73816117d1565b600c546001600160a01b0316331461144e57600080fd5b6013805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b148061149257506001600160e01b03198216635b5e139f60e01b145b8061088657506301ffc9a760e01b6001600160e01b0319831614610886565b610e5e828260405180602001604052806000815250611ab6565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150082610e62565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8047101561154657600080fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b505090508061090657600080fd5b6000818152600a602052604081205463ffffffff166115c457600080fd5b60006115cf83610e62565b9050806001600160a01b0316846001600160a01b0316148061160a5750836001600160a01b03166115ff8461099d565b6001600160a01b0316145b8061163a57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661165582610e62565b6001600160a01b03161461166857600080fd5b6001600160a01b03821661167b57600080fd5b6116866000826114cb565b6001600160a01b03831660009081526006602052604081208054600192906116af9084906124bc565b90915550506001600160a01b03821660009081526006602052604081208054600192906116dd908490612424565b90915550506000818152600a6020526040812080546001929061170790849063ffffffff1661250e565b825463ffffffff9182166101009390930a9283029190920219909116179055506000818152600960209081526040808320805460018101825590845291832090910180546001600160a01b038087166001600160a01b0319909216821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600073b997adc54278348fdd86a5543c0250774f55c7296117c0836117bb86611ad6565b611b11565b6001600160a01b0316149392505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61182e848484611642565b61183a84848484611b90565b610d4457600080fd5b60606005805461091a90612457565b6060816118765750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118a0578061188a8161243c565b91506118999050600a836124a8565b915061187a565b60008167ffffffffffffffff8111156118bb576118bb612198565b6040519080825280601f01601f1916602001820160405280156118e5576020820181803683370190505b5090505b841561163a576118fa6001836124bc565b9150611907600a866125c2565b611912906030612424565b60f81b818381518110611927576119276124f8565b60200101906001600160f81b031916908160001a905350611949600a866124a8565b94506118e9565b606081516000141561197057505060408051602081019091526000815290565b60006040518060600160405280604081526020016126e9604091399050600060038451600261199f9190612424565b6119a991906124a8565b6119b4906004612405565b905060006119c3826020612424565b67ffffffffffffffff8111156119db576119db612198565b6040519080825280601f01601f191660200182016040528015611a05576020820181803683370190505b509050818152600183018586518101602084015b81831015611a71576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101611a19565b600389510660018114611a8b5760028114611a9c57611aa8565b613d3d60f01b600119830152611aa8565b603d60f81b6000198301525b509398975050505050505050565b611ac08383611c7b565b611acd6000848484611b90565b61090657600080fd5b6000611ae28251611e51565b82604051602001611af49291906125d6565b604051602081830303815290604052805190602001209050919050565b600080600080611b2086611f7a565b6040805160008152602081018083528a905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611b7b573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0384163b15611c7057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bd4903390899088908890600401612631565b6020604051808303816000875af1925050508015611c0f575060408051601f3d908101601f19168201909252611c0c9181019061266e565b60015b611c56573d808015611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b606091505b508051611c4e57600080fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061163a565b506001949350505050565b6001600160a01b038216611c8e57600080fd5b6000818152600a602052604090205463ffffffff1615611cad57600080fd5b6003611cb882611852565b604051602001611cc8919061268b565b60408051601f19818403018152919052815460018101835560009283526020928390208251611cfd9491909201920190611fab565b5060048054600180820183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6008830401805460079093169093026101000a63ffffffff02199091169091556001600160a01b03831660009081526006602052604081208054909190611d72908490612424565b90915550506000818152600a60205260408120805460019290611d9c90849063ffffffff1661250e565b82546101009290920a63ffffffff81810219909316919092169190910217905550600081815260096020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038716179055838352600b909152812043905580549080611e108361243c565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606081611e755750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e9f5780611e898161243c565b9150611e989050600a836124a8565b9150611e79565b60008167ffffffffffffffff811115611eba57611eba612198565b6040519080825280601f01601f191660200182016040528015611ee4576020820181803683370190505b509050815b8515611f7157611efa6001826124bc565b90506000611f09600a886124a8565b611f1490600a612405565b611f1e90886124bc565b611f299060306126c3565b905060008160f81b905080848481518110611f4657611f466124f8565b60200101906001600160f81b031916908160001a905350611f68600a896124a8565b97505050611ee9565b50949350505050565b60008060008351604114611f8d57600080fd5b50505060208101516040820151606090920151909260009190911a90565b828054611fb790612457565b90600052602060002090601f016020900481019282611fd9576000855561201f565b82601f10611ff257805160ff191683800117855561201f565b8280016001018555821561201f579182015b8281111561201f578251825591602001919060010190612004565b50610e309291505b80821115610e305760008155600101612027565b6001600160e01b031981168114610a7357600080fd5b60006020828403121561206357600080fd5b813561206e8161203b565b9392505050565b60006020828403121561208757600080fd5b5035919050565b60005b838110156120a9578181015183820152602001612091565b83811115610d445750506000910152565b600081518084526120d281602086016020860161208e565b601f01601f19169290920160200192915050565b60208152600061206e60208301846120ba565b6001600160a01b0381168114610a7357600080fd5b6000806040838503121561212157600080fd5b823561212c816120f9565b946020939093013593505050565b60006020828403121561214c57600080fd5b813561206e816120f9565b60008060006060848603121561216c57600080fd5b8335612177816120f9565b92506020840135612187816120f9565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126121bf57600080fd5b813567ffffffffffffffff808211156121da576121da612198565b604051601f8301601f19908116603f0116810190828211818310171561220257612202612198565b8160405283815286602085880101111561221b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561224e57600080fd5b82359150602083013567ffffffffffffffff81111561226c57600080fd5b612278858286016121ae565b9150509250929050565b60006020828403121561229457600080fd5b813567ffffffffffffffff8111156122ab57600080fd5b61163a848285016121ae565b803580151581146122c757600080fd5b919050565b600080604083850312156122df57600080fd5b82356122ea816120f9565b91506122f8602084016122b7565b90509250929050565b6000806000806080858703121561231757600080fd5b8435612322816120f9565b93506020850135612332816120f9565b925060408501359150606085013567ffffffffffffffff81111561235557600080fd5b612361878288016121ae565b91505092959194509250565b60006020828403121561237f57600080fd5b61206e826122b7565b6000806040838503121561239b57600080fd5b82356123a6816120f9565b915060208301356123b6816120f9565b809150509250929050565b600080604083850312156123d457600080fd5b82359150602083013563ffffffff811681146123b657600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561241f5761241f6123ef565b500290565b60008219821115612437576124376123ef565b500190565b6000600019821415612450576124506123ef565b5060010190565b600181811c9082168061246b57607f821691505b6020821081141561248c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b6000826124b7576124b7612492565b500490565b6000828210156124ce576124ce6123ef565b500390565b600063ffffffff838116908316818110156124f0576124f06123ef565b039392505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681851680830382111561252d5761252d6123ef565b01949350505050565b60008551612548818460208a0161208e565b85519083019061255c818360208a0161208e565b712e6a736f6e3f6e616d654368616e6765733d60701b9101908152845161258a81601284016020890161208e565b68266e616d654236343d60b81b6012929091019182015283516125b481601b84016020880161208e565b01601b019695505050505050565b6000826125d1576125d1612492565b500690565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526000835161260e81601a85016020880161208e565b83519083019061262581601a84016020880161208e565b01601a01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612664908301846120ba565b9695505050505050565b60006020828403121561268057600080fd5b815161206e8161203b565b6f556e7469746c656420546f6b656e202360801b8152600082516126b681601085016020870161208e565b9190910160100192915050565b600060ff821660ff84168060ff038211156126e0576126e06123ef565b01939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bfe2091eab73271d8570f1e94e517c2045e3e186d12bbc54b30a1a7e19175fa564736f6c634300080a003368747470733a2f2f6d657461646174612e756e7469746c6564746f6b656e2e696f2f

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063715018a611610144578063c87b56dd116100b6578063d34aef4e1161007a578063d34aef4e14610783578063e33b7de3146107a3578063e985e9c5146107b8578063ef6c875414610801578063f2fde38b14610821578063f46a04eb1461084157600080fd5b8063c87b56dd146106de578063ce7c2ac2146106fe578063cecb06d014610734578063cf42dd4f14610749578063d12397301461076957600080fd5b8063937dd90d11610108578063937dd90d1461062057806395d89b41146106405780639852595c14610655578063a22cb4651461068b578063b88d4fde146106ab578063c39cbef1146106cb57600080fd5b8063715018a61461057257806389708f42146105875780638b83209b146105cf5780638da5cb5b146105ef5780639333b1e31461060d57600080fd5b80632f745c59116101dd57806350c0fbe4116101a157806350c0fbe4146104a657806355f804b3146104d35780635cb4712c146104f35780636352211e146105125780636a61e5fc1461053257806370a082311461055257600080fd5b80632f745c59146104175780633a98ef391461043757806342842e0e1461044c57806345ca77381461046c5780634f6ccce71461048657600080fd5b80631249c58b1161022f5780631249c58b1461037d57806318160ddd1461038557806319165587146103a457806323b872dd146103c457806325c5aa06146103e45780632b2e6f2d1461040457600080fd5b806301ffc9a7146102b9578063059513a6146102ee57806306fdde0314610303578063081812fc14610325578063095ea7b31461035d57600080fd5b366102b4577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156102c557600080fd5b506102d96102d4366004612051565b610861565b60405190151581526020015b60405180910390f35b6103016102fc366004612075565b61088c565b005b34801561030f57600080fd5b5061031861090b565b6040516102e591906120e6565b34801561033157600080fd5b50610345610340366004612075565b61099d565b6040516001600160a01b0390911681526020016102e5565b34801561036957600080fd5b5061030161037836600461210e565b6109d7565b610301610a32565b34801561039157600080fd5b506000545b6040519081526020016102e5565b3480156103b057600080fd5b506103016103bf36600461213a565b610a76565b3480156103d057600080fd5b506103016103df366004612157565b610b9e565b3480156103f057600080fd5b506103186103ff366004612075565b610bbc565b61030161041236600461223b565b610c68565b34801561042357600080fd5b5061039661043236600461210e565b610d4a565b34801561044357600080fd5b50600d54610396565b34801561045857600080fd5b50610301610467366004612157565b610e06565b34801561047857600080fd5b50662386f26fc10000610396565b34801561049257600080fd5b506103966104a1366004612075565b610e21565b3480156104b257600080fd5b506103966104c1366004612075565b6000908152600b602052604090205490565b3480156104df57600080fd5b506103016104ee366004612282565b610e34565b3480156104ff57600080fd5b506013546102d990610100900460ff1681565b34801561051e57600080fd5b5061034561052d366004612075565b610e62565b34801561053e57600080fd5b5061030161054d366004612075565b610edd565b34801561055e57600080fd5b5061039661056d36600461213a565b610ef9565b34801561057e57600080fd5b50610301610f2a565b34801561059357600080fd5b506105ba6105a2366004612075565b6000908152600a602052604090205463ffffffff1690565b60405163ffffffff90911681526020016102e5565b3480156105db57600080fd5b506103456105ea366004612075565b610f4d565b3480156105fb57600080fd5b50600c546001600160a01b0316610345565b61030161061b366004612282565b610f7d565b34801561062c57600080fd5b5061030161063b366004612075565b611008565b34801561064c57600080fd5b5061031861106b565b34801561066157600080fd5b5061039661067036600461213a565b6001600160a01b031660009081526010602052604090205490565b34801561069757600080fd5b506103016106a63660046122cc565b61107a565b3480156106b757600080fd5b506103016106c6366004612301565b6110fc565b6103016106d936600461223b565b61111b565b3480156106ea57600080fd5b506103186106f9366004612075565b6111eb565b34801561070a57600080fd5b5061039661071936600461213a565b6001600160a01b03166000908152600f602052604090205490565b34801561074057600080fd5b50610301611339565b34801561075557600080fd5b5061030161076436600461236d565b611373565b34801561077557600080fd5b506013546102d99060ff1681565b34801561078f57600080fd5b506105ba61079e366004612075565b6113a4565b3480156107af57600080fd5b50600e54610396565b3480156107c457600080fd5b506102d96107d3366004612388565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561080d57600080fd5b5061034561081c3660046123c1565b6113de565b34801561082d57600080fd5b5061030161083c36600461213a565b611404565b34801561084d57600080fd5b5061030161085c36600461236d565b611437565b60006001600160e01b0319821663780e9d6360e01b1480610886575061088682611461565b92915050565b8060125461089a9190612405565b8034146108a657600080fd5b60135460ff166108b557600080fd5b6122b8826108c260005490565b6108cc9190612424565b11156108d757600080fd5b60005b82811015610906576108f4336108ef60005490565b6114b1565b806108fe8161243c565b9150506108da565b505050565b60606001805461091a90612457565b80601f016020809104026020016040519081016040528092919081815260200182805461094690612457565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b6000818152600a602052604081205463ffffffff166109bb57600080fd5b506000908152600760205260409020546001600160a01b031690565b60006109e282610e62565b9050806001600160a01b0316836001600160a01b03161415610a0357600080fd5b336001600160a01b0382161480610a1f5750610a1f81336107d3565b610a2857600080fd5b61090683836114cb565b601254803414610a4157600080fd5b60135460ff16610a5057600080fd5b6122b8610a5c60005490565b10610a6657600080fd5b610a73336108ef60005490565b50565b6001600160a01b0381166000908152600f6020526040902054610a9857600080fd5b6000600e5447610aa89190612424565b6001600160a01b038316600090815260106020908152604080832054600d54600f909352908320549394509192610adf9085612405565b610ae991906124a8565b610af391906124bc565b905080610aff57600080fd5b6001600160a01b038316600090815260106020526040902054610b23908290612424565b6001600160a01b038416600090815260106020526040902055600e54610b4a908290612424565b600e55610b578382611539565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b610ba833826115a6565b610bb157600080fd5b610906838383611642565b60038181548110610bcc57600080fd5b906000526020600020016000915090508054610be790612457565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390612457565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b505050505081565b81601254610c769190612405565b803414610c8257600080fd5b601354610100900460ff16610c9657600080fd5b6122b883610ca360005490565b610cad9190612424565b1115610cb857600080fd5b600283610cc433610ef9565b610cce9190612424565b1115610cd957600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610d11906034015b60405160208183030381529060405283611797565b610d1a57600080fd5b60005b83811015610d4457610d32336108ef60005490565b80610d3c8161243c565b915050610d1d565b50505050565b6000610d5583610ef9565b8210610d6057600080fd5b6000805b600054811015610e00576000818152600960209081526040808320600a90925290912054610d9a9060019063ffffffff166124d3565b63ffffffff1681548110610db057610db06124f8565b6000918252602090912001546001600160a01b0386811691161415610dee5783821415610de05791506108869050565b81610dea8161243c565b9250505b80610df88161243c565b915050610d64565b50600080fd5b610906838383604051806020016040528060008152506110fc565b600080548210610e3057600080fd5b5090565b600c546001600160a01b03163314610e4b57600080fd5b8051610e5e906005906020840190611fab565b5050565b6000818152600a602052604081205463ffffffff16610e8057600080fd5b6000828152600960209081526040808320600a909252822054610eab9060019063ffffffff166124d3565b63ffffffff1681548110610ec157610ec16124f8565b6000918252602090912001546001600160a01b03169392505050565b600c546001600160a01b03163314610ef457600080fd5b601255565b60006001600160a01b038216610f0e57600080fd5b506001600160a01b031660009081526006602052604090205490565b600c546001600160a01b03163314610f4157600080fd5b610f4b60006117d1565b565b600060118281548110610f6257610f626124f8565b6000918252602090912001546001600160a01b031692915050565b601254803414610f8c57600080fd5b601354610100900460ff16610fa057600080fd5b6122b8610fac60005490565b10610fb657600080fd5b6002610fc133610ef9565b10610fcb57600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610ff290603401610cfc565b610ffb57600080fd5b610e5e336108ef60005490565b600c546001600160a01b0316331461101f57600080fd5b6122b88161102c60005490565b6110369190612424565b111561104157600080fd5b60005b81811015610e5e57611059336108ef60005490565b806110638161243c565b915050611044565b60606002805461091a90612457565b6001600160a01b03821633141561109057600080fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61110633836115a6565b61110f57600080fd5b610d4484848484611823565b813361112682610e62565b6001600160a01b03161461113957600080fd5b662386f26fc1000080341461114d57600080fd5b600160048581548110611162576111626124f8565b90600052602060002090600891828204019190066004028282829054906101000a900463ffffffff16611195919061250e565b92506101000a81548163ffffffff021916908363ffffffff16021790555082600385815481106111c7576111c76124f8565b9060005260206000200190805190602001906111e4929190611fab565b5050505050565b6000818152600a602052604090205460609063ffffffff1661120c57600080fd5b6000611216611843565b90508061122284611852565b61126160048681548110611238576112386124f8565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16611852565b61130f60038781548110611277576112776124f8565b90600052602060002001805461128c90612457565b80601f01602080910402602001604051908101604052809291908181526020018280546112b890612457565b80156113055780601f106112da57610100808354040283529160200191611305565b820191906000526020600020905b8154815290600101906020018083116112e857829003601f168201915b5050505050611950565b6040516020016113229493929190612536565b604051602081830303815290604052915050919050565b600c546001600160a01b0316331461135057600080fd5b6122b861135c60005490565b1061136657600080fd5b610f4b336108ef60005490565b600c546001600160a01b0316331461138a57600080fd5b601380549115156101000261ff0019909216919091179055565b600481815481106113b457600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b6000828152600960205260408120805463ffffffff8416908110610ec157610ec16124f8565b600c546001600160a01b0316331461141b57600080fd5b6001600160a01b03811661142e57600080fd5b610a73816117d1565b600c546001600160a01b0316331461144e57600080fd5b6013805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b148061149257506001600160e01b03198216635b5e139f60e01b145b8061088657506301ffc9a760e01b6001600160e01b0319831614610886565b610e5e828260405180602001604052806000815250611ab6565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150082610e62565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8047101561154657600080fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b505090508061090657600080fd5b6000818152600a602052604081205463ffffffff166115c457600080fd5b60006115cf83610e62565b9050806001600160a01b0316846001600160a01b0316148061160a5750836001600160a01b03166115ff8461099d565b6001600160a01b0316145b8061163a57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661165582610e62565b6001600160a01b03161461166857600080fd5b6001600160a01b03821661167b57600080fd5b6116866000826114cb565b6001600160a01b03831660009081526006602052604081208054600192906116af9084906124bc565b90915550506001600160a01b03821660009081526006602052604081208054600192906116dd908490612424565b90915550506000818152600a6020526040812080546001929061170790849063ffffffff1661250e565b825463ffffffff9182166101009390930a9283029190920219909116179055506000818152600960209081526040808320805460018101825590845291832090910180546001600160a01b038087166001600160a01b0319909216821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600073b997adc54278348fdd86a5543c0250774f55c7296117c0836117bb86611ad6565b611b11565b6001600160a01b0316149392505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61182e848484611642565b61183a84848484611b90565b610d4457600080fd5b60606005805461091a90612457565b6060816118765750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118a0578061188a8161243c565b91506118999050600a836124a8565b915061187a565b60008167ffffffffffffffff8111156118bb576118bb612198565b6040519080825280601f01601f1916602001820160405280156118e5576020820181803683370190505b5090505b841561163a576118fa6001836124bc565b9150611907600a866125c2565b611912906030612424565b60f81b818381518110611927576119276124f8565b60200101906001600160f81b031916908160001a905350611949600a866124a8565b94506118e9565b606081516000141561197057505060408051602081019091526000815290565b60006040518060600160405280604081526020016126e9604091399050600060038451600261199f9190612424565b6119a991906124a8565b6119b4906004612405565b905060006119c3826020612424565b67ffffffffffffffff8111156119db576119db612198565b6040519080825280601f01601f191660200182016040528015611a05576020820181803683370190505b509050818152600183018586518101602084015b81831015611a71576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101611a19565b600389510660018114611a8b5760028114611a9c57611aa8565b613d3d60f01b600119830152611aa8565b603d60f81b6000198301525b509398975050505050505050565b611ac08383611c7b565b611acd6000848484611b90565b61090657600080fd5b6000611ae28251611e51565b82604051602001611af49291906125d6565b604051602081830303815290604052805190602001209050919050565b600080600080611b2086611f7a565b6040805160008152602081018083528a905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611b7b573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0384163b15611c7057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bd4903390899088908890600401612631565b6020604051808303816000875af1925050508015611c0f575060408051601f3d908101601f19168201909252611c0c9181019061266e565b60015b611c56573d808015611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b606091505b508051611c4e57600080fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061163a565b506001949350505050565b6001600160a01b038216611c8e57600080fd5b6000818152600a602052604090205463ffffffff1615611cad57600080fd5b6003611cb882611852565b604051602001611cc8919061268b565b60408051601f19818403018152919052815460018101835560009283526020928390208251611cfd9491909201920190611fab565b5060048054600180820183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6008830401805460079093169093026101000a63ffffffff02199091169091556001600160a01b03831660009081526006602052604081208054909190611d72908490612424565b90915550506000818152600a60205260408120805460019290611d9c90849063ffffffff1661250e565b82546101009290920a63ffffffff81810219909316919092169190910217905550600081815260096020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038716179055838352600b909152812043905580549080611e108361243c565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606081611e755750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e9f5780611e898161243c565b9150611e989050600a836124a8565b9150611e79565b60008167ffffffffffffffff811115611eba57611eba612198565b6040519080825280601f01601f191660200182016040528015611ee4576020820181803683370190505b509050815b8515611f7157611efa6001826124bc565b90506000611f09600a886124a8565b611f1490600a612405565b611f1e90886124bc565b611f299060306126c3565b905060008160f81b905080848481518110611f4657611f466124f8565b60200101906001600160f81b031916908160001a905350611f68600a896124a8565b97505050611ee9565b50949350505050565b60008060008351604114611f8d57600080fd5b50505060208101516040820151606090920151909260009190911a90565b828054611fb790612457565b90600052602060002090601f016020900481019282611fd9576000855561201f565b82601f10611ff257805160ff191683800117855561201f565b8280016001018555821561201f579182015b8281111561201f578251825591602001919060010190612004565b50610e309291505b80821115610e305760008155600101612027565b6001600160e01b031981168114610a7357600080fd5b60006020828403121561206357600080fd5b813561206e8161203b565b9392505050565b60006020828403121561208757600080fd5b5035919050565b60005b838110156120a9578181015183820152602001612091565b83811115610d445750506000910152565b600081518084526120d281602086016020860161208e565b601f01601f19169290920160200192915050565b60208152600061206e60208301846120ba565b6001600160a01b0381168114610a7357600080fd5b6000806040838503121561212157600080fd5b823561212c816120f9565b946020939093013593505050565b60006020828403121561214c57600080fd5b813561206e816120f9565b60008060006060848603121561216c57600080fd5b8335612177816120f9565b92506020840135612187816120f9565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126121bf57600080fd5b813567ffffffffffffffff808211156121da576121da612198565b604051601f8301601f19908116603f0116810190828211818310171561220257612202612198565b8160405283815286602085880101111561221b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561224e57600080fd5b82359150602083013567ffffffffffffffff81111561226c57600080fd5b612278858286016121ae565b9150509250929050565b60006020828403121561229457600080fd5b813567ffffffffffffffff8111156122ab57600080fd5b61163a848285016121ae565b803580151581146122c757600080fd5b919050565b600080604083850312156122df57600080fd5b82356122ea816120f9565b91506122f8602084016122b7565b90509250929050565b6000806000806080858703121561231757600080fd5b8435612322816120f9565b93506020850135612332816120f9565b925060408501359150606085013567ffffffffffffffff81111561235557600080fd5b612361878288016121ae565b91505092959194509250565b60006020828403121561237f57600080fd5b61206e826122b7565b6000806040838503121561239b57600080fd5b82356123a6816120f9565b915060208301356123b6816120f9565b809150509250929050565b600080604083850312156123d457600080fd5b82359150602083013563ffffffff811681146123b657600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561241f5761241f6123ef565b500290565b60008219821115612437576124376123ef565b500190565b6000600019821415612450576124506123ef565b5060010190565b600181811c9082168061246b57607f821691505b6020821081141561248c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b6000826124b7576124b7612492565b500490565b6000828210156124ce576124ce6123ef565b500390565b600063ffffffff838116908316818110156124f0576124f06123ef565b039392505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681851680830382111561252d5761252d6123ef565b01949350505050565b60008551612548818460208a0161208e565b85519083019061255c818360208a0161208e565b712e6a736f6e3f6e616d654368616e6765733d60701b9101908152845161258a81601284016020890161208e565b68266e616d654236343d60b81b6012929091019182015283516125b481601b84016020880161208e565b01601b019695505050505050565b6000826125d1576125d1612492565b500690565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526000835161260e81601a85016020880161208e565b83519083019061262581601a84016020880161208e565b01601a01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612664908301846120ba565b9695505050505050565b60006020828403121561268057600080fd5b815161206e8161203b565b6f556e7469746c656420546f6b656e202360801b8152600082516126b681601085016020870161208e565b9190910160100192915050565b600060ff821660ff84168060ff038211156126e0576126e06123ef565b01939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bfe2091eab73271d8570f1e94e517c2045e3e186d12bbc54b30a1a7e19175fa564736f6c634300080a0033

Deployed Bytecode Sourcemap

18862:7215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15812:40;4749:10;15812:40;;;-1:-1:-1;;;;;206:32:1;;;188:51;;15842:9:0;270:2:1;255:18;;248:34;161:18;15812:40:0;;;;;;;18862:7215;;;;;22289:283;;;;;;;;;;-1:-1:-1;22289:283:0;;;;;:::i;:::-;;:::i;:::-;;;844:14:1;;837:22;819:41;;807:2;792:18;22289:283:0;;;;;;;;19500:300;;;;;;:::i;:::-;;:::i;:::-;;8647:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9645:223::-;;;;;;;;;;-1:-1:-1;9645:223:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1971:32:1;;;1953:51;;1941:2;1926:18;9645:223:0;1807:203:1;9364:273:0;;;;;;;;;;-1:-1:-1;9364:273:0;;;;;:::i;:::-;;:::i;19808:159::-;;;:::i;22580:86::-;;;;;;;;;;-1:-1:-1;22624:7:0;22651;22580:86;;;2617:25:1;;;2605:2;2590:18;22580:86:0;2471:177:1;16408:550:0;;;;;;;;;;-1:-1:-1;16408:550:0;;;;;:::i;:::-;;:::i;10404:231::-;;;;;;;;;;-1:-1:-1;10404:231:0;;;;;:::i;:::-;;:::i;7156:22::-;;;;;;;;;;-1:-1:-1;7156:22:0;;;;;:::i;:::-;;:::i;23297:472::-;;;;;;:::i;:::-;;:::i;22829:460::-;;;;;;;;;;-1:-1:-1;22829:460:0;;;;;:::i;:::-;;:::i;15868:91::-;;;;;;;;;;-1:-1:-1;15939:12:0;;15868:91;;10643:185;;;;;;;;;;-1:-1:-1;10643:185:0;;;;;:::i;:::-;;:::i;22187:94::-;;;;;;;;;;-1:-1:-1;22262:11:0;22187:94;;22674:147;;;;;;;;;;-1:-1:-1;22674:147:0;;;;;:::i;:::-;;:::i;13860:123::-;;;;;;;;;;-1:-1:-1;13860:123:0;;;;;:::i;:::-;13922:7;13949:26;;;:17;:26;;;;;;;13860:123;21239:90;;;;;;;;;;-1:-1:-1;21239:90:0;;;;;:::i;:::-;;:::i;19125:34::-;;;;;;;;;;-1:-1:-1;19125:34:0;;;;;;;;;;;8363:276;;;;;;;;;;-1:-1:-1;8363:276:0;;;;;:::i;:::-;;:::i;20574:103::-;;;;;;;;;;-1:-1:-1;20574:103:0;;;;;:::i;:::-;;:::i;8143:212::-;;;;;;;;;;-1:-1:-1;8143:212:0;;;;;:::i;:::-;;:::i;18408:94::-;;;;;;;;;;;;;:::i;14879:112::-;;;;;;;;;;-1:-1:-1;14879:112:0;;;;;:::i;:::-;14937:6;14963:20;;;:11;:20;;;;;;;;;14879:112;;;;5374:10:1;5362:23;;;5344:42;;5332:2;5317:18;14879:112:0;5200:192:1;16300:100:0;;;;;;;;;;-1:-1:-1;16300:100:0;;;;;:::i;:::-;;:::i;18221:87::-;;;;;;;;;;-1:-1:-1;18294:6:0;;-1:-1:-1;;;;;18294:6:0;18221:87;;23777:360;;;;;;:::i;:::-;;:::i;20123:231::-;;;;;;;;;;-1:-1:-1;20123:231:0;;;;;:::i;:::-;;:::i;8755:104::-;;;;;;;;;;;;;:::i;16183:109::-;;;;;;;;;;-1:-1:-1;16183:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;16266:18:0;16239:7;16266:18;;;:9;:18;;;;;;;16183:109;9876:298;;;;;;;;;;-1:-1:-1;9876:298:0;;;;;:::i;:::-;;:::i;10836:275::-;;;;;;;;;;-1:-1:-1;10836:275:0;;;;;:::i;:::-;;:::i;21949:230::-;;;;;;:::i;:::-;;:::i;21337:604::-;;;;;;;;;;-1:-1:-1;21337:604:0;;;;;:::i;:::-;;:::i;16070:105::-;;;;;;;;;;-1:-1:-1;16070:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;16151:16:0;16124:7;16151:16;;;:7;:16;;;;;;;16070:105;19975:140;;;;;;;;;;;;;:::i;20465:101::-;;;;;;;;;;-1:-1:-1;20465:101:0;;;;;:::i;:::-;;:::i;19087:31::-;;;;;;;;;;-1:-1:-1;19087:31:0;;;;;;;;7185:28;;;;;;;;;;-1:-1:-1;7185:28:0;;;;;:::i;:::-;;:::i;15967:95::-;;;;;;;;;;-1:-1:-1;16040:14:0;;15967:95;;10182:214;;;;;;;;;;-1:-1:-1;10182:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;10353:25:0;;;10324:4;10353:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10182:214;14999:164;;;;;;;;;;-1:-1:-1;14999:164:0;;;;;:::i;:::-;;:::i;18510:::-;;;;;;;;;;-1:-1:-1;18510:164:0;;;;;:::i;:::-;;:::i;20362:95::-;;;;;;;;;;-1:-1:-1;20362:95:0;;;;;:::i;:::-;;:::i;22289:283::-;22419:4;-1:-1:-1;;;;;;22461:50:0;;-1:-1:-1;;;22461:50:0;;:103;;;22528:36;22552:11;22528:23;:36::i;:::-;22441:123;22289:283;-1:-1:-1;;22289:283:0:o;19500:300::-;19596:6;19582:11;;:20;;;;:::i;:::-;20844:5;20831:9;:18;20823:27;;;;;;20913:11:::1;::::0;::::1;;20905:20;;;::::0;::::1;;19031:4:::2;19660:6;19644:13;22624:7:::0;22651;;22580:86;19644:13:::2;:22;;;;:::i;:::-;:37;;19636:46;;;::::0;::::2;;19698:9;19693:100;19717:6;19713:1;:10;19693:100;;;19745:36;19755:10;19767:13;22624:7:::0;22651;;22580:86;19767:13:::2;19745:9;:36::i;:::-;19725:3:::0;::::2;::::0;::::2;:::i;:::-;;;;19693:100;;;;19500:300:::0;;:::o;8647:100::-;8701:13;8734:5;8727:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8647:100;:::o;9645:223::-;9766:7;11477:20;;;:11;:20;;;;;;;;9791:25;;;;;;-1:-1:-1;9836:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;9836:24:0;;9645:223::o;9364:273::-;9445:13;9461:23;9476:7;9461:14;:23::i;:::-;9445:39;;9509:5;-1:-1:-1;;;;;9503:11:0;:2;-1:-1:-1;;;;;9503:11:0;;;9495:20;;;;;;4749:10;-1:-1:-1;;;;;9534:21:0;;;;:62;;-1:-1:-1;9559:37:0;9576:5;4749:10;10182:214;:::i;9559:37::-;9526:71;;;;;;9608:21;9617:2;9621:7;9608:8;:21::i;19808:159::-;19845:11;;20844:5;20831:9;:18;20823:27;;;;;;20913:11:::1;::::0;::::1;;20905:20;;;::::0;::::1;;19031:4:::2;19884:13;22624:7:::0;22651;;22580:86;19884:13:::2;:27;19876:36;;;::::0;::::2;;19923;19933:10;19945:13;22624:7:::0;22651;;22580:86;19923:36:::2;19808:159:::0;:::o;16408:550::-;-1:-1:-1;;;;;16484:16:0;;16503:1;16484:16;;;:7;:16;;;;;;16476:29;;;;;;16518:21;16566:14;;16542:21;:38;;;;:::i;:::-;-1:-1:-1;;;;;16687:18:0;;16591:15;16687:18;;;:9;:18;;;;;;;;;16659:12;;16626:7;:16;;;;;;;16518:62;;-1:-1:-1;16591:15:0;;16610:32;;16518:62;16610:32;:::i;:::-;16609:62;;;;:::i;:::-;:96;;;;:::i;:::-;16591:114;-1:-1:-1;16726:12:0;16718:21;;;;;;-1:-1:-1;;;;;16773:18:0;;;;;;:9;:18;;;;;;:28;;16794:7;;16773:28;:::i;:::-;-1:-1:-1;;;;;16752:18:0;;;;;;:9;:18;;;;;:49;16829:14;;:24;;16846:7;;16829:24;:::i;:::-;16812:14;:41;16866:35;16884:7;16893;16866:17;:35::i;:::-;16917:33;;;-1:-1:-1;;;;;206:32:1;;188:51;;270:2;255:18;;248:34;;;16917:33:0;;161:18:1;16917:33:0;;;;;;;16465:493;;16408:550;:::o;10404:231::-;10546:41;4749:10;10579:7;10546:18;:41::i;:::-;10538:50;;;;;;10599:28;10609:4;10615:2;10619:7;10599:9;:28::i;7156:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23297:472::-;23424:6;23410:11;;:20;;;;:::i;:::-;20844:5;20831:9;:18;20823:27;;;;;;20991:14:::1;::::0;::::1;::::0;::::1;;;20983:23;;;::::0;::::1;;19031:4:::2;23491:6;23475:13;22624:7:::0;22651;;22580:86;23475:13:::2;:22;;;;:::i;:::-;:37;;23467:46;;;::::0;::::2;;19079:1;23556:6;23532:21;23542:10;23532:9;:21::i;:::-;:30;;;;:::i;:::-;:51;;23524:60;;;::::0;::::2;;23610:28;::::0;-1:-1:-1;;23627:10:0::2;9984:2:1::0;9980:15;9976:53;23610:28:0::2;::::0;::::2;9964:66:1::0;23603:47:0::2;::::0;10046:12:1;;23610:28:0::2;;;;;;;;;;;;;23640:9;23603:6;:47::i;:::-;23595:56;;;::::0;::::2;;23667:9;23662:100;23686:6;23682:1;:10;23662:100;;;23714:36;23724:10;23736:13;22624:7:::0;22651;;22580:86;23714:36:::2;23694:3:::0;::::2;::::0;::::2;:::i;:::-;;;;23662:100;;;;23297:472:::0;;;:::o;22829:460::-;22953:15;23002:16;23012:5;23002:9;:16::i;:::-;22994:5;:24;22986:33;;;;;;23032:13;23061:9;23056:205;22624:7;22651;23072:1;:17;23056:205;;;23124:10;;;;:7;:10;;;;;;;;23135:11;:14;;;;;;;:18;;23152:1;;23135:14;;:18;:::i;:::-;23124:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23115:39:0;;;23124:30;;23115:39;23111:139;;;23188:5;23179;:14;23175:59;;;23202:1;-1:-1:-1;23195:8:0;;-1:-1:-1;23195:8:0;23175:59;23227:7;;;;:::i;:::-;;;;23175:59;23091:3;;;;:::i;:::-;;;;23056:205;;;;23273:8;;;10643:185;10781:39;10798:4;10804:2;10808:7;10781:39;;;;;;;;;;;;:16;:39::i;22674:147::-;22740:7;22651;;22768:5;:21;22760:30;;;;;;-1:-1:-1;22808:5:0;22674:147::o;21239:90::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;21306:15;;::::1;::::0;:9:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;:::-;;21239:90:::0;:::o;8363:276::-;8480:7;8513:20;;;:11;:20;;;;;;;;8505:34;;;;;;8550:13;8566:16;;;:7;:16;;;;;;;;8583:11;:20;;;;;;:24;;8606:1;;8583:20;;:24;:::i;:::-;8566:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;8566:42:0;;8363:276;-1:-1:-1;;;8363:276:0:o;20574:103::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;20645:11:::1;:24:::0;20574:103::o;8143:212::-;8260:7;-1:-1:-1;;;;;8293:19:0;;8285:28;;;;;;-1:-1:-1;;;;;;8331:16:0;;;;;:9;:16;;;;;;;8143:212::o;18408:94::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;18473:21:::1;18491:1;18473:9;:21::i;:::-;18408:94::o:0;16300:100::-;16351:7;16378;16386:5;16378:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16378:14:0;;16300:100;-1:-1:-1;;16300:100:0:o;23777:360::-;23870:11;;20844:5;20831:9;:18;20823:27;;;;;;20991:14:::1;::::0;::::1;::::0;::::1;;;20983:23;;;::::0;::::1;;19031:4:::2;23926:13;22624:7:::0;22651;;22580:86;23926:13:::2;:27;23918:36;;;::::0;::::2;;19079:1;23973:21;23983:10;23973:9;:21::i;:::-;:41;23965:50;;;::::0;::::2;;24041:28;::::0;-1:-1:-1;;24058:10:0::2;9984:2:1::0;9980:15;9976:53;24041:28:0::2;::::0;::::2;9964:66:1::0;24034:47:0::2;::::0;10046:12:1;;24041:28:0::2;9835:229:1::0;24034:47:0::2;24026:56;;;::::0;::::2;;24093:36;24103:10;24115:13;22624:7:::0;22651;;22580:86;20123:231;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;19031:4:::1;20214:6;20198:13;22624:7:::0;22651;;22580:86;20198:13:::1;:22;;;;:::i;:::-;:37;;20190:46;;;::::0;::::1;;20252:9;20247:100;20271:6;20267:1;:10;20247:100;;;20299:36;20309:10;20321:13;22624:7:::0;22651;;22580:86;20299:36:::1;20279:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20247:100;;8755:104:::0;8811:13;8844:7;8837:14;;;;;:::i;9876:298::-;-1:-1:-1;;;;;10011:24:0;;4749:10;10011:24;;10003:33;;;;;;4749:10;10049:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10049:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;10049:53:0;;;;;;;;;;10118:48;;819:41:1;;;10049:42:0;;4749:10;10118:48;;792:18:1;10118:48:0;;;;;;;9876:298;;:::o;10836:275::-;11011:41;4749:10;11044:7;11011:18;:41::i;:::-;11003:50;;;;;;11064:39;11078:4;11084:2;11088:7;11097:5;11064:13;:39::i;21949:230::-;22053:7;20745:10;20730:11;22053:7;20730;:11::i;:::-;-1:-1:-1;;;;;20730:25:0;;20722:34;;;;;;22262:11;20844:5:::1;20831:9;:18;20823:27;;;::::0;::::1;;22137:1:::2;22112:12;22125:7;22112:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22167:4;22149:6;22156:7;22149:15;;;;;;;;:::i;:::-;;;;;;;;:22;;;;;;;;;;;;:::i;:::-;;20767:1:::1;21949:230:::0;;;:::o;21337:604::-;11453:4;11477:20;;;:11;:20;;;;;;21455:13;;11477:20;;21486:25;;;;;;21522:18;21543:10;:8;:10::i;:::-;21522:31;;21648:4;21675:25;21692:7;21675:16;:25::i;:::-;21766:39;21783:12;21796:7;21783:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;21766:16;:39::i;:::-;21862:37;21882:6;21889:7;21882:15;;;;;;;;:::i;:::-;;;;;;;;21862:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:37::i;:::-;21609:309;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21564:369;;;21337:604;;;:::o;19975:140::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;19031:4:::1;20032:13;22624:7:::0;22651;;22580:86;20032:13:::1;:27;20024:36;;;::::0;::::1;;20071;20081:10;20093:13;22624:7:::0;22651;;22580:86;20465:101;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;20534:14:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;20534:24:0;;::::1;::::0;;;::::1;::::0;;20465:101::o;7185:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14999:164::-;15100:7;15132:16;;;:7;:16;;;;;:23;;;;;;;;;;;;:::i;18510:164::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;-1:-1:-1;;;;;18613:22:0;::::1;18591:45;;;::::0;::::1;;18647:19;18657:8;18647:9;:19::i;20362:95::-:0;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;20428:11:::1;:21:::0;;-1:-1:-1;;20428:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20362:95::o;7780:355::-;7927:4;-1:-1:-1;;;;;;7969:40:0;;-1:-1:-1;;;7969:40:0;;:105;;-1:-1:-1;;;;;;;8026:48:0;;-1:-1:-1;;;8026:48:0;7969:105;:158;;;-1:-1:-1;;;;;;;;;;6836:40:0;;;8091:36;6677:207;11893:110;11969:26;11979:2;11983:7;11969:26;;;;;;;;;;;;:9;:26::i;13678:174::-;13753:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;13753:29:0;-1:-1:-1;;;;;13753:29:0;;;;;;;;:24;;13807:23;13753:24;13807:14;:23::i;:::-;-1:-1:-1;;;;;13798:46:0;;;;;;;;;;;13678:174;;:::o;4409:220::-;4524:6;4499:21;:31;;4491:40;;;;;;4543:12;4561:9;-1:-1:-1;;;;;4561:14:0;4583:6;4561:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:52;;;4613:7;4605:16;;;;;11518:367;11647:4;11477:20;;;:11;:20;;;;;;;;11669:25;;;;;;11705:13;11721:23;11736:7;11721:14;:23::i;:::-;11705:39;;11774:5;-1:-1:-1;;;;;11763:16:0;:7;-1:-1:-1;;;;;11763:16:0;;:64;;;;11820:7;-1:-1:-1;;;;;11796:31:0;:20;11808:7;11796:11;:20::i;:::-;-1:-1:-1;;;;;11796:31:0;;11763:64;:113;;;-1:-1:-1;;;;;;10353:25:0;;;10324:4;10353:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;11844:32;11755:122;11518:367;-1:-1:-1;;;;11518:367:0:o;13197:473::-;13356:4;-1:-1:-1;;;;;13329:31:0;:23;13344:7;13329:14;:23::i;:::-;-1:-1:-1;;;;;13329:31:0;;13321:40;;;;;;-1:-1:-1;;;;;13380:16:0;;13372:25;;;;;;13458:29;13475:1;13479:7;13458:8;:29::i;:::-;-1:-1:-1;;;;;13498:15:0;;;;;;:9;:15;;;;;:20;;13517:1;;13498:15;:20;;13517:1;;13498:20;:::i;:::-;;;;-1:-1:-1;;;;;;;13529:13:0;;;;;;:9;:13;;;;;:18;;13546:1;;13529:13;:18;;13546:1;;13529:18;:::i;:::-;;;;-1:-1:-1;;13558:20:0;;;;:11;:20;;;;;:25;;13582:1;;13558:20;:25;;13582:1;;13558:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13594:16:0;;;:7;:16;;;;;;;;:25;;-1:-1:-1;13594:25:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13594:25:0;;;-1:-1:-1;;;;;;13594:25:0;;;;;;;;13635:27;;13602:7;;13635:27;;;;;;;13197:473;;;:::o;24239:204::-;24345:4;24188:42;24374:43;24382:9;24393:23;24414:1;24393:20;:23::i;:::-;24374:7;:43::i;:::-;-1:-1:-1;;;;;24374:61:0;;;24239:204;-1:-1:-1;;;24239:204:0:o;18682:173::-;18757:6;;;-1:-1:-1;;;;;18774:17:0;;;-1:-1:-1;;;;;;18774:17:0;;;;;;;18807:40;;18757:6;;;18774:17;18757:6;;18807:40;;18738:16;;18807:40;18727:128;18682:173;:::o;11119:261::-;11276:28;11286:4;11292:2;11296:7;11276:9;:28::i;:::-;11323:48;11346:4;11352:2;11356:7;11365:5;11323:22;:48::i;:::-;11315:57;;;;;9255:101;9306:13;9339:9;9332:16;;;;;:::i;4973:532::-;5029:13;5059:10;5055:53;;-1:-1:-1;;5086:10:0;;;;;;;;;;;;-1:-1:-1;;;5086:10:0;;;;;4973:532::o;5055:53::-;5133:5;5118:12;5174:78;5181:9;;5174:78;;5207:8;;;;:::i;:::-;;-1:-1:-1;5230:10:0;;-1:-1:-1;5238:2:0;5230:10;;:::i;:::-;;;5174:78;;;5262:19;5294:6;5284:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5284:17:0;;5262:39;;5312:154;5319:10;;5312:154;;5346:11;5356:1;5346:11;;:::i;:::-;;-1:-1:-1;5415:10:0;5423:2;5415:5;:10;:::i;:::-;5402:24;;:2;:24;:::i;:::-;5389:39;;5372:6;5379;5372:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5372:56:0;;;;;;;;-1:-1:-1;5443:11:0;5452:2;5443:11;;:::i;:::-;;;5312:154;;593:1680;651:13;681:4;:11;696:1;681:16;677:31;;;-1:-1:-1;;699:9:0;;;;;;;;;-1:-1:-1;699:9:0;;;593:1680::o;677:31::-;719:19;741:12;;;;;;;;;;;;;;;;;719:34;;764:18;810:1;791:4;:11;805:1;791:15;;;;:::i;:::-;790:21;;;;:::i;:::-;785:27;;:1;:27;:::i;:::-;764:48;-1:-1:-1;823:20:0;857:15;764:48;870:2;857:15;:::i;:::-;846:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;846:27:0;;823:50;;923:10;915:6;908:26;975:1;968:5;964:13;1006:4;1057;1051:11;1042:7;1038:25;1106:2;1098:6;1094:15;1123:872;1158:6;1149:7;1146:19;1123:872;;;1228:1;1219:7;1215:15;1204:26;;1267:7;1261:14;1395:4;1387:5;1383:2;1379:14;1375:25;1365:8;1361:40;1355:47;1323:9;1293:128;1467:1;1456:9;1452:17;1439:30;;1589:4;1581:5;1577:2;1573:14;1569:25;1559:8;1555:40;1549:47;1517:9;1487:128;1661:1;1650:9;1646:17;1633:30;;1782:4;1774:5;1771:1;1767:13;1763:24;1753:8;1749:39;1743:46;1711:9;1681:127;1854:1;1843:9;1839:17;1826:30;;1924:4;1917:5;1913:16;1903:8;1899:31;1893:38;1882:9;1874:58;-1:-1:-1;1978:1:0;1963:17;1123:872;;;2033:1;2026:4;2020:11;2016:19;2054:1;2049:84;;;;2152:1;2147:82;;;;2009:220;;2049:84;-1:-1:-1;;;;;2082:17:0;;2075:43;2049:84;;2147:82;-1:-1:-1;;;;;2180:17:0;;2173:41;2009:220;-1:-1:-1;2259:6:0;;593:1680;-1:-1:-1;;;;;;;;593:1680:0:o;12011:230::-;12141:18;12147:2;12151:7;12141:5;:18::i;:::-;12178:54;12209:1;12213:2;12217:7;12226:5;12178:22;:54::i;:::-;12170:63;;;;;24694:365;24796:7;24963:24;24972:7;:14;24963:8;:24::i;:::-;25010:7;24869:167;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24841:210;;;;;;24821:230;;24694:365;;;:::o;24451:235::-;24553:7;24579:9;24590;24601:7;24612:25;24627:9;24612:14;:25::i;:::-;24657:21;;;;;;;;;;;;13062:25:1;;;13135:4;13123:17;;13103:18;;;13096:45;;;;13157:18;;;13150:34;;;13200:18;;;13193:34;;;24578:59:0;;-1:-1:-1;24578:59:0;;-1:-1:-1;24578:59:0;-1:-1:-1;24657:21:0;;13034:19:1;;24657:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24657:21:0;;-1:-1:-1;;24657:21:0;;;24451:235;-1:-1:-1;;;;;;;24451:235:0:o;13991:880::-;14146:4;-1:-1:-1;;;;;14167:13:0;;4337:20;4385:8;14163:701;;14220:175;;-1:-1:-1;;;14220:175:0;;-1:-1:-1;;;;;14220:36:0;;;;;:175;;4749:10;;14314:4;;14341:7;;14371:5;;14220:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14220:175:0;;;;;;;;-1:-1:-1;;14220:175:0;;;;;;;;;;;;:::i;:::-;;;14199:610;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14578:13:0;;14574:220;;14621:8;;;14574:220;14744:6;14738:13;14729:6;14725:2;14721:15;14714:38;14199:610;-1:-1:-1;;;;;;14459:51:0;-1:-1:-1;;;14459:51:0;;-1:-1:-1;14452:58:0;;14163:701;-1:-1:-1;14848:4:0;13991:880;;;;;;:::o;12249:608::-;-1:-1:-1;;;;;12329:16:0;;12321:25;;;;;;11453:4;11477:20;;;:11;:20;;;;;;;;:25;12357:26;;;;;;12454:6;12542:25;12559:7;12542:16;:25::i;:::-;12505:63;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12505:63:0;;;;;;;;;12454:140;;;;;;;-1:-1:-1;12454:140:0;;;12505:63;12454:140;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12605:12:0;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12638:13:0;;-1:-1:-1;12638:13:0;;;:9;12605:20;12638:13;;;;:18;;:13;;-1:-1:-1;12638:18:0;;12605:20;;12638:18;:::i;:::-;;;;-1:-1:-1;;12667:20:0;;;;:11;:20;;;;;:25;;12691:1;;12667:20;:25;;12691:1;;12667:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12703:16:0;;;:7;:16;;;;;;;;:25;;-1:-1:-1;12703:25:0;;;;;;;;;;;;;-1:-1:-1;;;;;;12703:25:0;-1:-1:-1;;;;;12703:25:0;;;;;12739:26;;;:17;:26;;;;;12768:12;12739:41;;12791:9;;;-1:-1:-1;12791:9:0;;;:::i;:::-;;;;-1:-1:-1;;12816:33:0;;12841:7;;-1:-1:-1;;;;;12816:33:0;;;12833:1;;12816:33;;12833:1;;12816:33;12249:608;;:::o;25453:621::-;25533:27;25582:7;25578:50;;-1:-1:-1;;25606:10:0;;;;;;;;;;;;-1:-1:-1;;;25606:10:0;;;;;25453:621::o;25578:50::-;25650:2;25638:9;25685:69;25692:6;;25685:69;;25715:5;;;;:::i;:::-;;-1:-1:-1;25735:7:0;;-1:-1:-1;25740:2:0;25735:7;;:::i;:::-;;;25685:69;;;25764:17;25794:3;25784:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25784:14:0;-1:-1:-1;25764:34:0;-1:-1:-1;25821:3:0;25835:202;25842:7;;25835:202;;25870:5;25874:1;25870;:5;:::i;:::-;25866:9;-1:-1:-1;25890:10:0;25921:7;25926:2;25921;:7;:::i;:::-;25920:14;;25932:2;25920:14;:::i;:::-;25915:19;;:2;:19;:::i;:::-;25904:31;;:2;:31;:::i;:::-;25890:46;;25951:9;25970:4;25963:12;;25951:24;;26000:2;25990:4;25995:1;25990:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;25990:12:0;;;;;;;;-1:-1:-1;26017:8:0;26023:2;26017:8;;:::i;:::-;;;25851:186;;25835:202;;;-1:-1:-1;26061:4:0;25453:621;-1:-1:-1;;;;25453:621:0:o;25067:378::-;25173:9;25197;25221:7;25264:3;:10;25278:2;25264:16;25256:25;;;;;;-1:-1:-1;;;25338:2:0;25329:12;;25323:19;25376:2;25367:12;;25361:19;25422:2;25413:12;;;25407:19;25323;;25404:1;25399:28;;;;;25067:378::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;293:131:1;-1:-1:-1;;;;;;367:32:1;;357:43;;347:71;;414:1;411;404:12;429:245;487:6;540:2;528:9;519:7;515:23;511:32;508:52;;;556:1;553;546:12;508:52;595:9;582:23;614:30;638:5;614:30;:::i;:::-;663:5;429:245;-1:-1:-1;;;429:245:1:o;871:180::-;930:6;983:2;971:9;962:7;958:23;954:32;951:52;;;999:1;996;989:12;951:52;-1:-1:-1;1022:23:1;;871:180;-1:-1:-1;871:180:1:o;1056:258::-;1128:1;1138:113;1152:6;1149:1;1146:13;1138:113;;;1228:11;;;1222:18;1209:11;;;1202:39;1174:2;1167:10;1138:113;;;1269:6;1266:1;1263:13;1260:48;;;-1:-1:-1;;1304:1:1;1286:16;;1279:27;1056:258::o;1319:::-;1361:3;1399:5;1393:12;1426:6;1421:3;1414:19;1442:63;1498:6;1491:4;1486:3;1482:14;1475:4;1468:5;1464:16;1442:63;:::i;:::-;1559:2;1538:15;-1:-1:-1;;1534:29:1;1525:39;;;;1566:4;1521:50;;1319:258;-1:-1:-1;;1319:258:1:o;1582:220::-;1731:2;1720:9;1713:21;1694:4;1751:45;1792:2;1781:9;1777:18;1769:6;1751:45;:::i;2015:131::-;-1:-1:-1;;;;;2090:31:1;;2080:42;;2070:70;;2136:1;2133;2126:12;2151:315;2219:6;2227;2280:2;2268:9;2259:7;2255:23;2251:32;2248:52;;;2296:1;2293;2286:12;2248:52;2335:9;2322:23;2354:31;2379:5;2354:31;:::i;:::-;2404:5;2456:2;2441:18;;;;2428:32;;-1:-1:-1;;;2151:315:1:o;2653:255::-;2720:6;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2828:9;2815:23;2847:31;2872:5;2847:31;:::i;2913:456::-;2990:6;2998;3006;3059:2;3047:9;3038:7;3034:23;3030:32;3027:52;;;3075:1;3072;3065:12;3027:52;3114:9;3101:23;3133:31;3158:5;3133:31;:::i;:::-;3183:5;-1:-1:-1;3240:2:1;3225:18;;3212:32;3253:33;3212:32;3253:33;:::i;:::-;2913:456;;3305:7;;-1:-1:-1;;;3359:2:1;3344:18;;;;3331:32;;2913:456::o;3374:127::-;3435:10;3430:3;3426:20;3423:1;3416:31;3466:4;3463:1;3456:15;3490:4;3487:1;3480:15;3506:718;3548:5;3601:3;3594:4;3586:6;3582:17;3578:27;3568:55;;3619:1;3616;3609:12;3568:55;3655:6;3642:20;3681:18;3718:2;3714;3711:10;3708:36;;;3724:18;;:::i;:::-;3799:2;3793:9;3767:2;3853:13;;-1:-1:-1;;3849:22:1;;;3873:2;3845:31;3841:40;3829:53;;;3897:18;;;3917:22;;;3894:46;3891:72;;;3943:18;;:::i;:::-;3983:10;3979:2;3972:22;4018:2;4010:6;4003:18;4064:3;4057:4;4052:2;4044:6;4040:15;4036:26;4033:35;4030:55;;;4081:1;4078;4071:12;4030:55;4145:2;4138:4;4130:6;4126:17;4119:4;4111:6;4107:17;4094:54;4192:1;4185:4;4180:2;4172:6;4168:15;4164:26;4157:37;4212:6;4203:15;;;;;;3506:718;;;;:::o;4229:388::-;4306:6;4314;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4419:9;4406:23;4396:33;;4480:2;4469:9;4465:18;4452:32;4507:18;4499:6;4496:30;4493:50;;;4539:1;4536;4529:12;4493:50;4562:49;4603:7;4594:6;4583:9;4579:22;4562:49;:::i;:::-;4552:59;;;4229:388;;;;;:::o;4622:321::-;4691:6;4744:2;4732:9;4723:7;4719:23;4715:32;4712:52;;;4760:1;4757;4750:12;4712:52;4800:9;4787:23;4833:18;4825:6;4822:30;4819:50;;;4865:1;4862;4855:12;4819:50;4888:49;4929:7;4920:6;4909:9;4905:22;4888:49;:::i;5722:160::-;5787:20;;5843:13;;5836:21;5826:32;;5816:60;;5872:1;5869;5862:12;5816:60;5722:160;;;:::o;5887:315::-;5952:6;5960;6013:2;6001:9;5992:7;5988:23;5984:32;5981:52;;;6029:1;6026;6019:12;5981:52;6068:9;6055:23;6087:31;6112:5;6087:31;:::i;:::-;6137:5;-1:-1:-1;6161:35:1;6192:2;6177:18;;6161:35;:::i;:::-;6151:45;;5887:315;;;;;:::o;6207:665::-;6302:6;6310;6318;6326;6379:3;6367:9;6358:7;6354:23;6350:33;6347:53;;;6396:1;6393;6386:12;6347:53;6435:9;6422:23;6454:31;6479:5;6454:31;:::i;:::-;6504:5;-1:-1:-1;6561:2:1;6546:18;;6533:32;6574:33;6533:32;6574:33;:::i;:::-;6626:7;-1:-1:-1;6680:2:1;6665:18;;6652:32;;-1:-1:-1;6735:2:1;6720:18;;6707:32;6762:18;6751:30;;6748:50;;;6794:1;6791;6784:12;6748:50;6817:49;6858:7;6849:6;6838:9;6834:22;6817:49;:::i;:::-;6807:59;;;6207:665;;;;;;;:::o;7271:180::-;7327:6;7380:2;7368:9;7359:7;7355:23;7351:32;7348:52;;;7396:1;7393;7386:12;7348:52;7419:26;7435:9;7419:26;:::i;7456:388::-;7524:6;7532;7585:2;7573:9;7564:7;7560:23;7556:32;7553:52;;;7601:1;7598;7591:12;7553:52;7640:9;7627:23;7659:31;7684:5;7659:31;:::i;:::-;7709:5;-1:-1:-1;7766:2:1;7751:18;;7738:32;7779:33;7738:32;7779:33;:::i;:::-;7831:7;7821:17;;;7456:388;;;;;:::o;7849:344::-;7916:6;7924;7977:2;7965:9;7956:7;7952:23;7948:32;7945:52;;;7993:1;7990;7983:12;7945:52;8029:9;8016:23;8006:33;;8089:2;8078:9;8074:18;8061:32;8133:10;8126:5;8122:22;8115:5;8112:33;8102:61;;8159:1;8156;8149:12;8198:127;8259:10;8254:3;8250:20;8247:1;8240:31;8290:4;8287:1;8280:15;8314:4;8311:1;8304:15;8330:168;8370:7;8436:1;8432;8428:6;8424:14;8421:1;8418:21;8413:1;8406:9;8399:17;8395:45;8392:71;;;8443:18;;:::i;:::-;-1:-1:-1;8483:9:1;;8330:168::o;8503:128::-;8543:3;8574:1;8570:6;8567:1;8564:13;8561:39;;;8580:18;;:::i;:::-;-1:-1:-1;8616:9:1;;8503:128::o;8636:135::-;8675:3;-1:-1:-1;;8696:17:1;;8693:43;;;8716:18;;:::i;:::-;-1:-1:-1;8763:1:1;8752:13;;8636:135::o;8776:380::-;8855:1;8851:12;;;;8898;;;8919:61;;8973:4;8965:6;8961:17;8951:27;;8919:61;9026:2;9018:6;9015:14;8995:18;8992:38;8989:161;;;9072:10;9067:3;9063:20;9060:1;9053:31;9107:4;9104:1;9097:15;9135:4;9132:1;9125:15;8989:161;;8776:380;;;:::o;9161:127::-;9222:10;9217:3;9213:20;9210:1;9203:31;9253:4;9250:1;9243:15;9277:4;9274:1;9267:15;9293:120;9333:1;9359;9349:35;;9364:18;;:::i;:::-;-1:-1:-1;9398:9:1;;9293:120::o;9418:125::-;9458:4;9486:1;9483;9480:8;9477:34;;;9491:18;;:::i;:::-;-1:-1:-1;9528:9:1;;9418:125::o;10069:221::-;10108:4;10137:10;10197;;;;10167;;10219:12;;;10216:38;;;10234:18;;:::i;:::-;10271:13;;10069:221;-1:-1:-1;;;10069:221:1:o;10295:127::-;10356:10;10351:3;10347:20;10344:1;10337:31;10387:4;10384:1;10377:15;10411:4;10408:1;10401:15;10427:228;10466:3;10494:10;10531:2;10528:1;10524:10;10561:2;10558:1;10554:10;10592:3;10588:2;10584:12;10579:3;10576:21;10573:47;;;10600:18;;:::i;:::-;10636:13;;10427:228;-1:-1:-1;;;;10427:228:1:o;10660:1163::-;11137:3;11175:6;11169:13;11191:53;11237:6;11232:3;11225:4;11217:6;11213:17;11191:53;:::i;:::-;11307:13;;11266:16;;;;11329:57;11307:13;11266:16;11363:4;11351:17;;11329:57;:::i;:::-;-1:-1:-1;;;11408:20:1;;11437:35;;;11497:13;;11519:66;11497:13;11571:2;11560:14;;11553:4;11541:17;;11519:66;:::i;:::-;-1:-1:-1;;;11648:2:1;11604:20;;;;11640:11;;;11633:32;11690:13;;11712:63;11690:13;11761:2;11753:11;;11746:4;11734:17;;11712:63;:::i;:::-;11795:17;11814:2;11791:26;;10660:1163;-1:-1:-1;;;;;;10660:1163:1:o;12038:112::-;12070:1;12096;12086:35;;12101:18;;:::i;:::-;-1:-1:-1;12135:9:1;;12038:112::o;12155:675::-;12463:66;12458:3;12451:79;12433:3;12559:6;12553:13;12575:62;12630:6;12625:2;12620:3;12616:12;12609:4;12601:6;12597:17;12575:62;:::i;:::-;12697:13;;12656:16;;;;12719:63;12697:13;12768:2;12760:11;;12753:4;12741:17;;12719:63;:::i;:::-;12802:17;12821:2;12798:26;;12155:675;-1:-1:-1;;;;12155:675:1:o;13238:489::-;-1:-1:-1;;;;;13507:15:1;;;13489:34;;13559:15;;13554:2;13539:18;;13532:43;13606:2;13591:18;;13584:34;;;13654:3;13649:2;13634:18;;13627:31;;;13432:4;;13675:46;;13701:19;;13693:6;13675:46;:::i;:::-;13667:54;13238:489;-1:-1:-1;;;;;;13238:489:1:o;13732:249::-;13801:6;13854:2;13842:9;13833:7;13829:23;13825:32;13822:52;;;13870:1;13867;13860:12;13822:52;13902:9;13896:16;13921:30;13945:5;13921:30;:::i;13986:435::-;-1:-1:-1;;;14243:3:1;14236:31;14218:3;14296:6;14290:13;14312:62;14367:6;14362:2;14357:3;14353:12;14346:4;14338:6;14334:17;14312:62;:::i;:::-;14394:16;;;;14412:2;14390:25;;13986:435;-1:-1:-1;;13986:435:1:o;14426:204::-;14464:3;14500:4;14497:1;14493:12;14532:4;14529:1;14525:12;14567:3;14561:4;14557:14;14552:3;14549:23;14546:49;;;14575:18;;:::i;:::-;14611:13;;14426:204;-1:-1:-1;;;14426:204:1:o

Swarm Source

ipfs://bfe2091eab73271d8570f1e94e517c2045e3e186d12bbc54b30a1a7e19175fa5
Loading...
Loading
Loading...
Loading
[ 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.