S Price: $0.48442 (+0.16%)

Coderative-A Collection (CAC)

Overview

TokenID

2

Total Transfers

-

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
CoderativeA

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at SonicScan.org on 2024-12-26
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/*
   11111111111           111111 
   11                       111
   11                       111
   11         11111111111   111
   11                       111
   11                       111
   11111111111              111
   
   CODERATIVE-1
*/

/*
 * DISCLAIMER: This contract is designed to encourage users to interact with blockchain technology 
 * on the Sonic network, demonstrating its speed and low costs. Users are urged to thoroughly review 
 * the contract and understand its mechanics before interacting. By using this contract, you agree
 * that you are solely responsible for any actions taken and their outcomes. Blockchain interactions
 * are inherently risky, and this contract provides no guarantees.
 * 
 * Official Website: https://coderativesonic.github.io/nft-art-generator/
 * Twitter: @0xcoderative
 */

/**
 * @dev Provides a set of functions to operate with Base64 strings.
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     * See sections 4 and 5 of https://datatracker.ietf.org/doc/html/rfc4648
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    string internal constant _TABLE_URL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        return _encode(data, _TABLE, true);
    }

    /**
     * @dev Converts a `bytes` to its Bytes64Url `string` representation.
     * Output is not padded with `=` as specified in https://www.rfc-editor.org/rfc/rfc4648[rfc4648].
     */
    function encodeURL(bytes memory data) internal pure returns (string memory) {
        return _encode(data, _TABLE_URL, false);
    }

    /**
     * @dev Internal table-agnostic conversion
     */
    function _encode(bytes memory data, string memory table, bool withPadding) private pure returns (string memory) {
        if (data.length == 0) return "";

        uint256 resultLength = withPadding ? 4 * ((data.length + 2) / 3) : (4 * data.length + 2) / 3;

        string memory result = new string(resultLength);

        assembly ("memory-safe") {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 0x20)
            let dataPtr := data
            let endPtr := add(data, mload(data))

            let afterPtr := add(endPtr, 0x20)
            let afterCache := mload(afterPtr)
            mstore(afterPtr, 0x00)

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

            mstore(afterPtr, afterCache)

            if withPadding {
                switch mod(mload(data), 3)
                case 1 {
                    mstore8(sub(resultPtr, 1), 0x3d)
                    mstore8(sub(resultPtr, 2), 0x3d)
                }
                case 2 {
                    mstore8(sub(resultPtr, 1), 0x3d)
                }
            }
        }

        return result;
    }
}

/**
 * @title ERC721 Standard Implementation
 * @notice Base implementation of ERC721 with added features for enumeration.
 */
contract ERC721 {
    // Events emitted for key actions in ERC721
    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);

    // Mapping to store the owners of tokens
    mapping(uint256 => address) private _owners;

    // Mapping to store balances of addresses
    mapping(address => uint256) private _balances;

    // Mapping for token approvals
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping for operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @notice Returns the balance of the given address.
     * @param owner The address to query.
     * @return uint256 The token balance.
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @notice Returns the owner of the specified token ID.
     * @param tokenId The token ID to query.
     * @return address The owner address.
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @notice Internal function to transfer ownership of a token.
     * @param from The current owner of the token.
     * @param to The new owner of the token.
     * @param tokenId The token ID to transfer.
     */
    function _transfer(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @notice Internal function to mint a new token.
     * @param to The address to receive the minted token.
     * @param tokenId The token ID to mint.
     */
    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @notice Checks if a token ID exists.
     * @param tokenId The token ID to check.
     * @return bool True if the token exists, false otherwise.
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Hook that is called before any token transfer.
     */
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer.
     */
    function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
}

/**
 * @title Ownable Contract
 * @notice Basic ownership functionality for the contract.
 */
contract Ownable {
    address private _owner;

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

    constructor(address initialOwner) {
        _transferOwnership(initialOwner);
    }

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

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function renounceOwnership() public onlyOwner {
        _transferOwnership(address(0));
    }

    function _transferOwnership(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @title ERC721Enumerable
 * @notice ERC721 implementation with token enumeration functionality.
 */
contract ERC721Enumerable is ERC721 {
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;
    mapping(address => uint256[]) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;

    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < _allTokens.length, "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokens[to].push(tokenId);
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length - 1;
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = _ownedTokens[from].length - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        _ownedTokens[from].pop();
        delete _ownedTokensIndex[tokenId];
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        _allTokens.pop();
        delete _allTokensIndex[tokenId];
    }
}

/**
 * @title CoderativeA
 * @notice Main contract for generative art NFTs on the Sonic network.
 */
contract CoderativeA is ERC721Enumerable, Ownable {
    uint256 private _tokenIds;
    mapping(address => bool) private _hasMinted;
    mapping(uint256 => string) public tokenData;

    uint256 private constant MAX_SUPPLY = 5000;

    string private _name = "Coderative-A Collection";
    string private _symbol = "CAC";

    event NFTMinted(address indexed minter, uint256 indexed tokenId, string data);

    error AlreadyMinted();
    error MaxSupplyReached();

    constructor() Ownable(msg.sender) {}

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

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

    function mint() external {
        if (_hasMinted[msg.sender]) revert AlreadyMinted();
        if (_tokenIds >= MAX_SUPPLY) revert MaxSupplyReached();

        _hasMinted[msg.sender] = true;

        uint256 tokenId = _tokenIds;
        _tokenIds++;

        string memory data = _generateArtData(msg.sender);
        tokenData[tokenId] = data;

        emit NFTMinted(msg.sender, tokenId, data);

        _mint(msg.sender, tokenId);
    }

    function _generateArtData(address minter) internal view returns (string memory) {
        bytes32 blockHash = blockhash(block.number - 1);
        uint256 gradientAngle = uint256(keccak256(abi.encodePacked(blockHash, minter))) % 360;
        uint256 noiseLevel = uint256(keccak256(abi.encodePacked(blockHash, minter, "noise"))) % 100;
        uint256 colorSeed = uint256(keccak256(abi.encodePacked(blockHash, minter, "colors")));

        return string(abi.encodePacked(
            "{",
            "\"name\":\"Coderative-A Token\",",
            "\"description\":\"A generative art NFT\",",
            "\"attributes\":{",
            "\"angle\":", _toString(gradientAngle), ",",
            "\"noise\":", _toString(noiseLevel), ",",
            "\"color\":", _toString(colorSeed),
            "}}"
        ));
    }

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

        string memory data = tokenData[tokenId];
        return string(abi.encodePacked("data:application/json;base64,", Base64.encode(bytes(data))));
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMinted","type":"error"},{"inputs":[],"name":"MaxSupplyReached","type":"error"},{"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":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"data","type":"string"}],"name":"NFTMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"uint256","name":"","type":"uint256"}],"name":"tokenData","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052601760809081527f436f64657261746976652d4120436f6c6c656374696f6e00000000000000000060a052600c906200003e90826200017a565b5060408051808201909152600381526243414360e81b6020820152600d906200006890826200017a565b5034801562000075575f80fd5b5033620000828162000089565b5062000242565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200010357607f821691505b6020821081036200012257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000175575f81815260208120601f850160051c81016020861015620001505750805b601f850160051c820191505b8181101562000171578281556001016200015c565b5050505b505050565b81516001600160401b03811115620001965762000196620000da565b620001ae81620001a78454620000ee565b8462000128565b602080601f831160018114620001e4575f8415620001cc5750858301515b5f19600386901b1c1916600185901b17855562000171565b5f85815260208120601f198616915b828110156200021457888601518255948401946001909101908401620001f3565b50858210156200023257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b61160980620002505f395ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806370a082311161008857806395d89b411161006357806395d89b4114610186578063b4b5b48f1461018e578063c87b56dd146101a1578063f2fde38b146101b4575f80fd5b806370a082311461015a578063715018a61461016d5780638da5cb5b14610175575f80fd5b806306fdde03146100cf5780631249c58b146100ed57806318160ddd146100f75780632f745c59146101095780634f6ccce71461011c5780636352211e1461012f575b5f80fd5b6100d76101c7565b6040516100e4919061114d565b60405180910390f35b6100f5610257565b005b6004545b6040519081526020016100e4565b6100fb61011736600461119a565b61034f565b6100fb61012a3660046111c2565b6103fb565b61014261013d3660046111c2565b610486565b6040516001600160a01b0390911681526020016100e4565b6100fb6101683660046111d9565b6104fc565b6100f5610581565b6008546001600160a01b0316610142565b6100d76105f5565b6100d761019c3660046111c2565b610604565b6100d76101af3660046111c2565b61069b565b6100f56101c23660046111d9565b6107df565b6060600c80546101d6906111f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610202906111f2565b801561024d5780601f106102245761010080835404028352916020019161024d565b820191905f5260205f20905b81548152906001019060200180831161023057829003601f168201915b5050505050905090565b335f908152600a602052604090205460ff161561028757604051631bbdf5c560e31b815260040160405180910390fd5b611388600954106102ab5760405163d05cb60960e01b815260040160405180910390fd5b335f908152600a60205260408120805460ff1916600117905560098054918291906102d58361123e565b91905055505f6102e4336108b9565b5f838152600b602052604090209091506102fe82826112b7565b5081336001600160a01b03167fd35bb95e09c04b219e35047ce7b7b300e3384264ef84a40456943dbc0fc17c1483604051610339919061114d565b60405180910390a361034b3383610a13565b5050565b5f610359836104fc565b82106103c05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084015b60405180910390fd5b6001600160a01b0383165f9081526006602052604090208054839081106103e9576103e9611373565b905f5260205f20015490505b92915050565b6004545f9082106104635760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016103b7565b6004828154811061047657610476611373565b905f5260205f2001549050919050565b5f818152602081905260408120546001600160a01b0316806103f55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103b7565b5f6001600160a01b0382166105665760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103b7565b506001600160a01b03165f9081526001602052604090205490565b336105946008546001600160a01b031690565b6001600160a01b0316146105ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b7565b6105f35f610b5f565b565b6060600d80546101d6906111f2565b600b6020525f90815260409020805461061c906111f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610648906111f2565b80156106935780601f1061066a57610100808354040283529160200191610693565b820191905f5260205f20905b81548152906001019060200180831161067657829003601f168201915b505050505081565b5f818152602081905260409020546060906001600160a01b03166107195760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016103b7565b5f828152600b602052604081208054610731906111f2565b80601f016020809104026020016040519081016040528092919081815260200182805461075d906111f2565b80156107a85780601f1061077f576101008083540402835291602001916107a8565b820191905f5260205f20905b81548152906001019060200180831161078b57829003601f168201915b505050505090506107b881610bb0565b6040516020016107c891906113a2565b604051602081830303815290604052915050919050565b336107f26008546001600160a01b031690565b6001600160a01b0316146108485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b7565b6001600160a01b0381166108ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b7565b6108b681610b5f565b50565b60605f6108c76001436113e6565b4090505f61016882856040516020016108f792919091825260601b6001600160601b031916602082015260340190565b604051602081830303815290604052805190602001205f1c610919919061140d565b90505f6064838660405160200161095592919091825260601b6001600160601b0319166020820152646e6f69736560d81b603482015260390190565b604051602081830303815290604052805190602001205f1c610977919061140d565b90505f83866040516020016109b292919091825260601b6001600160601b031916602082015265636f6c6f727360d01b6034820152603a0190565b604051602081830303815290604052805190602001205f1c90506109d583610bd6565b6109de83610bd6565b6109e783610bd6565b6040516020016109f993929190611420565b604051602081830303815290604052945050505050919050565b6001600160a01b038216610a695760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103b7565b5f818152602081905260409020546001600160a01b031615610acd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103b7565b610ad85f8383610cdb565b6001600160a01b0382165f9081526001602081905260408220805491929091610b02908490611542565b90915550505f8181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60606103f582604051806060016040528060408152602001611594604091396001610d97565b6060815f03610bfc5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115610c255780610c0f8161123e565b9150610c1e9050600a83611555565b9150610bff565b5f8167ffffffffffffffff811115610c3f57610c3f611256565b6040519080825280601f01601f191660200182016040528015610c69576020820181803683370190505b5090505b8415610cd357610c7e6001836113e6565b9150610c8b600a8661140d565b610c96906030611542565b60f81b818381518110610cab57610cab611373565b60200101906001600160f81b03191690815f1a905350610ccc600a86611555565b9450610c6d565b949350505050565b6001600160a01b038316610d3557610d3081600480545f838152600560205260408120829055600182018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0155565b610d58565b816001600160a01b0316836001600160a01b031614610d5857610d588382610f14565b6001600160a01b038216610d7457610d6f81611029565b505050565b826001600160a01b0316826001600160a01b031614610d6f57610d6f82826110dd565b606083515f03610db5575060408051602081019091525f8152610f0d565b5f82610de557600385516004610dcb9190611568565b610dd6906002611542565b610de09190611555565b610e0a565b600385516002610df59190611542565b610dff9190611555565b610e0a906004611568565b90505f8167ffffffffffffffff811115610e2657610e26611256565b6040519080825280601f01601f191660200182016040528015610e50576020820181803683370190505b509050600185016020820187885189016020810180515f82525b82841015610ec5576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610e6a565b905250508515610f0657600388510660018114610ee95760028114610efc57610f04565b603d6001830353603d6002830353610f04565b603d60018303535b505b5090925050505b9392505050565b6001600160a01b0382165f90815260066020526040812054610f38906001906113e6565b5f83815260076020526040902054909150808214610fd8576001600160a01b0384165f908152600660205260408120805484908110610f7957610f79611373565b905f5260205f20015490508060065f876001600160a01b03166001600160a01b031681526020019081526020015f208381548110610fb957610fb9611373565b5f91825260208083209091019290925591825260079052604090208190555b6001600160a01b0384165f908152600660205260409020805480610ffe57610ffe61157f565b5f828152602080822083015f1990810183905590920190925593815260079093525050604081205550565b6004545f9061103a906001906113e6565b5f838152600560205260408120546004805493945090928490811061106157611061611373565b905f5260205f2001549050806004838154811061108057611080611373565b5f91825260208083209091019290925582815260059091526040902082905560048054806110b0576110b061157f565b600190038181905f5260205f20015f9055905560055f8581526020019081526020015f205f905550505050565b6001600160a01b0382165f81815260066020908152604082208054600181810183558285529284200185905592909152905461111991906113e6565b5f918252600760205260409091205550565b5f5b8381101561114557818101518382015260200161112d565b50505f910152565b602081525f825180602084015261116b81604085016020870161112b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611195575f80fd5b919050565b5f80604083850312156111ab575f80fd5b6111b48361117f565b946020939093013593505050565b5f602082840312156111d2575f80fd5b5035919050565b5f602082840312156111e9575f80fd5b610f0d8261117f565b600181811c9082168061120657607f821691505b60208210810361122457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161124f5761124f61122a565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f821115610d6f575f81815260208120601f850160051c810160208610156112905750805b601f850160051c820191505b818110156112af5782815560010161129c565b505050505050565b815167ffffffffffffffff8111156112d1576112d1611256565b6112e5816112df84546111f2565b8461126a565b602080601f831160018114611318575f84156113015750858301515b5f19600386901b1c1916600185901b1785556112af565b5f85815260208120601f198616915b8281101561134657888601518255948401946001909101908401611327565b508582101561136357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b5f815161139881856020860161112b565b9290920192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f82516113d981601d85016020870161112b565b91909101601d0192915050565b818103818111156103f5576103f561122a565b634e487b7160e01b5f52601260045260245ffd5b5f8261141b5761141b6113f9565b500690565b607b60f81b81527f226e616d65223a22436f64657261746976652d4120546f6b656e222c0000000060018201527f226465736372697074696f6e223a22412067656e657261746976652061727420601d82015264139195088b60da1b603d8201526d2261747472696275746573223a7b60901b6042820152671130b733b632911d60c11b605082015283515f906114be81605885016020890161112b565b600b60fa1b60589184019182015267113737b4b9b2911d60c11b605982015284516114f081606184016020890161112b565b61153761152961152361150f606185870101600b60fa1b815260010190565b671131b7b637b9111d60c11b815260080190565b87611387565b617d7d60f01b815260020190565b979650505050505050565b808201808211156103f5576103f561122a565b5f82611563576115636113f9565b500490565b80820281158282048414176103f5576103f561122a565b634e487b7160e01b5f52603160045260245ffdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122099acd269aa6e441371c88628485e8023245cddc6f688193bd21cf37493f1cd9264736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806370a082311161008857806395d89b411161006357806395d89b4114610186578063b4b5b48f1461018e578063c87b56dd146101a1578063f2fde38b146101b4575f80fd5b806370a082311461015a578063715018a61461016d5780638da5cb5b14610175575f80fd5b806306fdde03146100cf5780631249c58b146100ed57806318160ddd146100f75780632f745c59146101095780634f6ccce71461011c5780636352211e1461012f575b5f80fd5b6100d76101c7565b6040516100e4919061114d565b60405180910390f35b6100f5610257565b005b6004545b6040519081526020016100e4565b6100fb61011736600461119a565b61034f565b6100fb61012a3660046111c2565b6103fb565b61014261013d3660046111c2565b610486565b6040516001600160a01b0390911681526020016100e4565b6100fb6101683660046111d9565b6104fc565b6100f5610581565b6008546001600160a01b0316610142565b6100d76105f5565b6100d761019c3660046111c2565b610604565b6100d76101af3660046111c2565b61069b565b6100f56101c23660046111d9565b6107df565b6060600c80546101d6906111f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610202906111f2565b801561024d5780601f106102245761010080835404028352916020019161024d565b820191905f5260205f20905b81548152906001019060200180831161023057829003601f168201915b5050505050905090565b335f908152600a602052604090205460ff161561028757604051631bbdf5c560e31b815260040160405180910390fd5b611388600954106102ab5760405163d05cb60960e01b815260040160405180910390fd5b335f908152600a60205260408120805460ff1916600117905560098054918291906102d58361123e565b91905055505f6102e4336108b9565b5f838152600b602052604090209091506102fe82826112b7565b5081336001600160a01b03167fd35bb95e09c04b219e35047ce7b7b300e3384264ef84a40456943dbc0fc17c1483604051610339919061114d565b60405180910390a361034b3383610a13565b5050565b5f610359836104fc565b82106103c05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084015b60405180910390fd5b6001600160a01b0383165f9081526006602052604090208054839081106103e9576103e9611373565b905f5260205f20015490505b92915050565b6004545f9082106104635760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016103b7565b6004828154811061047657610476611373565b905f5260205f2001549050919050565b5f818152602081905260408120546001600160a01b0316806103f55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103b7565b5f6001600160a01b0382166105665760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103b7565b506001600160a01b03165f9081526001602052604090205490565b336105946008546001600160a01b031690565b6001600160a01b0316146105ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b7565b6105f35f610b5f565b565b6060600d80546101d6906111f2565b600b6020525f90815260409020805461061c906111f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610648906111f2565b80156106935780601f1061066a57610100808354040283529160200191610693565b820191905f5260205f20905b81548152906001019060200180831161067657829003601f168201915b505050505081565b5f818152602081905260409020546060906001600160a01b03166107195760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016103b7565b5f828152600b602052604081208054610731906111f2565b80601f016020809104026020016040519081016040528092919081815260200182805461075d906111f2565b80156107a85780601f1061077f576101008083540402835291602001916107a8565b820191905f5260205f20905b81548152906001019060200180831161078b57829003601f168201915b505050505090506107b881610bb0565b6040516020016107c891906113a2565b604051602081830303815290604052915050919050565b336107f26008546001600160a01b031690565b6001600160a01b0316146108485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b7565b6001600160a01b0381166108ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b7565b6108b681610b5f565b50565b60605f6108c76001436113e6565b4090505f61016882856040516020016108f792919091825260601b6001600160601b031916602082015260340190565b604051602081830303815290604052805190602001205f1c610919919061140d565b90505f6064838660405160200161095592919091825260601b6001600160601b0319166020820152646e6f69736560d81b603482015260390190565b604051602081830303815290604052805190602001205f1c610977919061140d565b90505f83866040516020016109b292919091825260601b6001600160601b031916602082015265636f6c6f727360d01b6034820152603a0190565b604051602081830303815290604052805190602001205f1c90506109d583610bd6565b6109de83610bd6565b6109e783610bd6565b6040516020016109f993929190611420565b604051602081830303815290604052945050505050919050565b6001600160a01b038216610a695760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103b7565b5f818152602081905260409020546001600160a01b031615610acd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103b7565b610ad85f8383610cdb565b6001600160a01b0382165f9081526001602081905260408220805491929091610b02908490611542565b90915550505f8181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60606103f582604051806060016040528060408152602001611594604091396001610d97565b6060815f03610bfc5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115610c255780610c0f8161123e565b9150610c1e9050600a83611555565b9150610bff565b5f8167ffffffffffffffff811115610c3f57610c3f611256565b6040519080825280601f01601f191660200182016040528015610c69576020820181803683370190505b5090505b8415610cd357610c7e6001836113e6565b9150610c8b600a8661140d565b610c96906030611542565b60f81b818381518110610cab57610cab611373565b60200101906001600160f81b03191690815f1a905350610ccc600a86611555565b9450610c6d565b949350505050565b6001600160a01b038316610d3557610d3081600480545f838152600560205260408120829055600182018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0155565b610d58565b816001600160a01b0316836001600160a01b031614610d5857610d588382610f14565b6001600160a01b038216610d7457610d6f81611029565b505050565b826001600160a01b0316826001600160a01b031614610d6f57610d6f82826110dd565b606083515f03610db5575060408051602081019091525f8152610f0d565b5f82610de557600385516004610dcb9190611568565b610dd6906002611542565b610de09190611555565b610e0a565b600385516002610df59190611542565b610dff9190611555565b610e0a906004611568565b90505f8167ffffffffffffffff811115610e2657610e26611256565b6040519080825280601f01601f191660200182016040528015610e50576020820181803683370190505b509050600185016020820187885189016020810180515f82525b82841015610ec5576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610e6a565b905250508515610f0657600388510660018114610ee95760028114610efc57610f04565b603d6001830353603d6002830353610f04565b603d60018303535b505b5090925050505b9392505050565b6001600160a01b0382165f90815260066020526040812054610f38906001906113e6565b5f83815260076020526040902054909150808214610fd8576001600160a01b0384165f908152600660205260408120805484908110610f7957610f79611373565b905f5260205f20015490508060065f876001600160a01b03166001600160a01b031681526020019081526020015f208381548110610fb957610fb9611373565b5f91825260208083209091019290925591825260079052604090208190555b6001600160a01b0384165f908152600660205260409020805480610ffe57610ffe61157f565b5f828152602080822083015f1990810183905590920190925593815260079093525050604081205550565b6004545f9061103a906001906113e6565b5f838152600560205260408120546004805493945090928490811061106157611061611373565b905f5260205f2001549050806004838154811061108057611080611373565b5f91825260208083209091019290925582815260059091526040902082905560048054806110b0576110b061157f565b600190038181905f5260205f20015f9055905560055f8581526020019081526020015f205f905550505050565b6001600160a01b0382165f81815260066020908152604082208054600181810183558285529284200185905592909152905461111991906113e6565b5f918252600760205260409091205550565b5f5b8381101561114557818101518382015260200161112d565b50505f910152565b602081525f825180602084015261116b81604085016020870161112b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611195575f80fd5b919050565b5f80604083850312156111ab575f80fd5b6111b48361117f565b946020939093013593505050565b5f602082840312156111d2575f80fd5b5035919050565b5f602082840312156111e9575f80fd5b610f0d8261117f565b600181811c9082168061120657607f821691505b60208210810361122457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161124f5761124f61122a565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f821115610d6f575f81815260208120601f850160051c810160208610156112905750805b601f850160051c820191505b818110156112af5782815560010161129c565b505050505050565b815167ffffffffffffffff8111156112d1576112d1611256565b6112e5816112df84546111f2565b8461126a565b602080601f831160018114611318575f84156113015750858301515b5f19600386901b1c1916600185901b1785556112af565b5f85815260208120601f198616915b8281101561134657888601518255948401946001909101908401611327565b508582101561136357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b5f815161139881856020860161112b565b9290920192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f82516113d981601d85016020870161112b565b91909101601d0192915050565b818103818111156103f5576103f561122a565b634e487b7160e01b5f52601260045260245ffd5b5f8261141b5761141b6113f9565b500690565b607b60f81b81527f226e616d65223a22436f64657261746976652d4120546f6b656e222c0000000060018201527f226465736372697074696f6e223a22412067656e657261746976652061727420601d82015264139195088b60da1b603d8201526d2261747472696275746573223a7b60901b6042820152671130b733b632911d60c11b605082015283515f906114be81605885016020890161112b565b600b60fa1b60589184019182015267113737b4b9b2911d60c11b605982015284516114f081606184016020890161112b565b61153761152961152361150f606185870101600b60fa1b815260010190565b671131b7b637b9111d60c11b815260080190565b87611387565b617d7d60f01b815260020190565b979650505050505050565b808201808211156103f5576103f561122a565b5f82611563576115636113f9565b500490565b80820281158282048414176103f5576103f561122a565b634e487b7160e01b5f52603160045260245ffdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122099acd269aa6e441371c88628485e8023245cddc6f688193bd21cf37493f1cd9264736f6c63430008140033

Deployed Bytecode Sourcemap

11451:2882:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11978:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12164:454;;;:::i;:::-;;8879:96;8950:10;:17;8879:96;;;816:25:1;;;804:2;789:18;8879:96:0;670:177:1;8983:232:0;;;;;;:::i;:::-;;:::i;9223:203::-;;;;;;:::i;:::-;;:::i;5243:222::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1638:32:1;;;1620:51;;1608:2;1593:18;5243:222:0;1474:203:1;4876:191:0;;;;;;:::i;:::-;;:::i;8221:95::-;;;:::i;7807:79::-;7872:6;;-1:-1:-1;;;;;7872:6:0;7807:79;;12069:87;;;:::i;11590:43::-;;;;;;:::i;:::-;;:::i;14009:321::-;;;;;;:::i;:::-;;:::i;8020:193::-;;;;;;:::i;:::-;;:::i;11978:83::-;12015:13;12048:5;12041:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11978:83;:::o;12164:454::-;12215:10;12204:22;;;;:10;:22;;;;;;;;12200:50;;;12235:15;;-1:-1:-1;;;12235:15:0;;;;;;;;;;;12200:50;11680:4;12265:9;;:23;12261:54;;12297:18;;-1:-1:-1;;;12297:18:0;;;;;;;;;;;12261:54;12339:10;12328:22;;;;:10;:22;;;;;:29;;-1:-1:-1;;12328:29:0;12353:4;12328:29;;;12388:9;;;;;;;12408:11;12388:9;12408:11;:::i;:::-;;;;;;12432:18;12453:28;12470:10;12453:16;:28::i;:::-;12492:18;;;;:9;:18;;;;;12432:49;;-1:-1:-1;12492:25:0;12432:49;12492:18;:25;:::i;:::-;;12557:7;12545:10;-1:-1:-1;;;;;12535:36:0;;12566:4;12535:36;;;;;;:::i;:::-;;;;;;;;12584:26;12590:10;12602:7;12584:5;:26::i;:::-;12189:429;;12164:454::o;8983:232::-;9063:7;9099:16;9109:5;9099:9;:16::i;:::-;9091:5;:24;9083:80;;;;-1:-1:-1;;;9083:80:0;;5068:2:1;9083:80:0;;;5050:21:1;5107:2;5087:18;;;5080:30;5146:34;5126:18;;;5119:62;-1:-1:-1;;;5197:18:1;;;5190:41;5248:19;;9083:80:0;;;;;;;;;-1:-1:-1;;;;;9181:19:0;;;;;;:12;:19;;;;;:26;;9201:5;;9181:26;;;;;;:::i;:::-;;;;;;;;;9174:33;;8983:232;;;;;:::o;9223:203::-;9317:10;:17;9281:7;;9309:25;;9301:82;;;;-1:-1:-1;;;9301:82:0;;5612:2:1;9301:82:0;;;5594:21:1;5651:2;5631:18;;;5624:30;5690:34;5670:18;;;5663:62;-1:-1:-1;;;5741:18:1;;;5734:42;5793:19;;9301:82:0;5410:408:1;9301:82:0;9401:10;9412:5;9401:17;;;;;;;;:::i;:::-;;;;;;;;;9394:24;;9223:203;;;:::o;5243:222::-;5298:7;5334:16;;;;;;;;;;;-1:-1:-1;;;;;5334:16:0;;5361:73;;;;-1:-1:-1;;;5361:73:0;;6025:2:1;5361:73:0;;;6007:21:1;6064:2;6044:18;;;6037:30;6103:34;6083:18;;;6076:62;-1:-1:-1;;;6154:18:1;;;6147:39;6203:19;;5361:73:0;5823:405:1;4876:191:0;4931:7;-1:-1:-1;;;;;4959:19:0;;4951:74;;;;-1:-1:-1;;;4951:74:0;;6435:2:1;4951:74:0;;;6417:21:1;6474:2;6454:18;;;6447:30;6513:34;6493:18;;;6486:62;-1:-1:-1;;;6564:18:1;;;6557:40;6614:19;;4951:74:0;6233:406:1;4951:74:0;-1:-1:-1;;;;;;5043:16:0;;;;;:9;:16;;;;;;;4876:191::o;8221:95::-;7945:10;7934:7;7872:6;;-1:-1:-1;;;;;7872:6:0;;7807:79;7934:7;-1:-1:-1;;;;;7934:21:0;;7926:66;;;;-1:-1:-1;;;7926:66:0;;6846:2:1;7926:66:0;;;6828:21:1;;;6865:18;;;6858:30;6924:34;6904:18;;;6897:62;6976:18;;7926:66:0;6644:356:1;7926:66:0;8278:30:::1;8305:1;8278:18;:30::i;:::-;8221:95::o:0;12069:87::-;12108:13;12141:7;12134:14;;;;;:::i;11590:43::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14009:321::-;7046:4;7070:16;;;;;;;;;;;14065:13;;-1:-1:-1;;;;;7070:16:0;14091:76;;;;-1:-1:-1;;;14091:76:0;;7207:2:1;14091:76:0;;;7189:21:1;7246:2;7226:18;;;7219:30;7285:34;7265:18;;;7258:62;-1:-1:-1;;;7336:18:1;;;7329:45;7391:19;;14091:76:0;7005:411:1;14091:76:0;14180:18;14201;;;:9;:18;;;;;14180:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14294:26;14314:4;14294:13;:26::i;:::-;14244:77;;;;;;;;:::i;:::-;;;;;;;;;;;;;14230:92;;;14009:321;;;:::o;8020:193::-;7945:10;7934:7;7872:6;;-1:-1:-1;;;;;7872:6:0;;7807:79;7934:7;-1:-1:-1;;;;;7934:21:0;;7926:66;;;;-1:-1:-1;;;7926:66:0;;6846:2:1;7926:66:0;;;6828:21:1;;;6865:18;;;6858:30;6924:34;6904:18;;;6897:62;6976:18;;7926:66:0;6644:356:1;7926:66:0;-1:-1:-1;;;;;8101:22:0;::::1;8093:73;;;::::0;-1:-1:-1;;;8093:73:0;;8292:2:1;8093:73:0::1;::::0;::::1;8274:21:1::0;8331:2;8311:18;;;8304:30;8370:34;8350:18;;;8343:62;-1:-1:-1;;;8421:18:1;;;8414:36;8467:19;;8093:73:0::1;8090:402:1::0;8093:73:0::1;8177:28;8196:8;8177:18;:28::i;:::-;8020:193:::0;:::o;12626:834::-;12691:13;12717:17;12747:16;12762:1;12747:12;:16;:::i;:::-;12737:27;12717:47;;12775:21;12857:3;12834:9;12845:6;12817:35;;;;;;;;8787:19:1;;;8844:2;8840:15;-1:-1:-1;;;;;;8836:53:1;8831:2;8822:12;;8815:75;8915:2;8906:12;;8630:294;12817:35:0;;;;;;;;;;;;;12807:46;;;;;;12799:55;;:61;;;;:::i;:::-;12775:85;;12871:18;12959:3;12927:9;12938:6;12910:44;;;;;;;;9436:19:1;;;9493:2;9489:15;-1:-1:-1;;;;;;9485:53:1;9480:2;9471:12;;9464:75;-1:-1:-1;;;9564:2:1;9555:12;;9548:29;9602:2;9593:12;;9178:433;12910:44:0;;;;;;;;;;;;;12900:55;;;;;;12892:64;;:70;;;;:::i;:::-;12871:91;;12973:17;13028:9;13039:6;13011:45;;;;;;;;9874:19:1;;;9931:2;9927:15;-1:-1:-1;;;;;;9923:53:1;9918:2;9909:12;;9902:75;-1:-1:-1;;;10002:2:1;9993:12;;9986:30;10041:2;10032:12;;9616:434;13011:45:0;;;;;;;;;;;;;13001:56;;;;;;12993:65;;12973:85;;13288:24;13298:13;13288:9;:24::i;:::-;13346:21;13356:10;13346:9;:21::i;:::-;13401:20;13411:9;13401;:20::i;:::-;13085:366;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13071:381;;;;;;12626:834;;;:::o;6377:431::-;-1:-1:-1;;;;;6449:16:0;;6441:61;;;;-1:-1:-1;;;6441:61:0;;12825:2:1;6441:61:0;;;12807:21:1;;;12844:18;;;12837:30;12903:34;12883:18;;;12876:62;12955:18;;6441:61:0;12623:356:1;6441:61:0;7046:4;7070:16;;;;;;;;;;;-1:-1:-1;;;;;7070:16:0;:30;6513:58;;;;-1:-1:-1;;;6513:58:0;;13186:2:1;6513:58:0;;;13168:21:1;13225:2;13205:18;;;13198:30;13264;13244:18;;;13237:58;13312:18;;6513:58:0;12984:352:1;6513:58:0;6584:45;6613:1;6617:2;6621:7;6584:20;:45::i;:::-;-1:-1:-1;;;;;6642:13:0;;;;;;6659:1;6642:13;;;;;;;:18;;6659:1;;6642:13;;:18;;6659:1;;6642:18;:::i;:::-;;;;-1:-1:-1;;6671:7:0;:16;;;;;;;;;;;:21;;-1:-1:-1;;;;;;6671:21:0;-1:-1:-1;;;;;6671:21:0;;;;;;;;6710:33;;6671:16;;:7;6710:33;;6671:7;;6710:33;12189:429;;12164:454::o;8324:183::-;8409:6;;;-1:-1:-1;;;;;8426:17:0;;;-1:-1:-1;;;;;;8426:17:0;;;;;;;8459:40;;8409:6;;;8426:17;8409:6;;8459:40;;8390:16;;8459:40;8379:128;8324:183;:::o;1468:126::-;1526:13;1559:27;1567:4;1573:6;;;;;;;;;;;;;;;;;1581:4;1559:7;:27::i;13468:533::-;13525:13;13555:5;13564:1;13555:10;13551:53;;-1:-1:-1;;13582:10:0;;;;;;;;;;;;-1:-1:-1;;;13582:10:0;;;;;13468:533::o;13551:53::-;13629:5;13614:12;13670:78;13677:9;;13670:78;;13703:8;;;;:::i;:::-;;-1:-1:-1;13726:10:0;;-1:-1:-1;13734:2:0;13726:10;;:::i;:::-;;;13670:78;;;13758:19;13790:6;13780:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13780:17:0;;13758:39;;13808:154;13815:10;;13808:154;;13842:11;13852:1;13842:11;;:::i;:::-;;-1:-1:-1;13911:10:0;13919:2;13911:5;:10;:::i;:::-;13898:24;;:2;:24;:::i;:::-;13885:39;;13868:6;13875;13868:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;13868:56:0;;;;;;;;-1:-1:-1;13939:11:0;13948:2;13939:11;;:::i;:::-;;;13808:154;;;13986:6;13468:533;-1:-1:-1;;;;13468:533:0:o;9434:555::-;-1:-1:-1;;;;;9606:18:0;;9602:187;;9641:40;9673:7;10846:10;:17;;10819:24;;;;:15;:24;;;;;:44;;;10874:24;;;;;;;;;;;;10742:164;9641:40;9602:187;;;9711:2;-1:-1:-1;;;;;9703:10:0;:4;-1:-1:-1;;;;;9703:10:0;;9699:90;;9730:47;9763:4;9769:7;9730:32;:47::i;:::-;-1:-1:-1;;;;;9803:16:0;;9799:183;;9836:45;9873:7;9836:36;:45::i;:::-;9434:555;;;:::o;9799:183::-;9909:4;-1:-1:-1;;;;;9903:10:0;:2;-1:-1:-1;;;;;9903:10:0;;9899:83;;9930:40;9958:2;9962:7;9930:27;:40::i;2006:1808::-;2103:13;2133:4;:11;2148:1;2133:16;2129:31;;-1:-1:-1;2151:9:0;;;;;;;;;-1:-1:-1;2151:9:0;;;;2129:31;2173:20;2196:11;:69;;2264:1;2245:4;:11;2241:1;:15;;;;:::i;:::-;:19;;2259:1;2241:19;:::i;:::-;2240:25;;;;:::i;:::-;2196:69;;;2235:1;2216:4;:11;2230:1;2216:15;;;;:::i;:::-;2215:21;;;;:::i;:::-;2210:27;;:1;:27;:::i;:::-;2173:92;;2278:20;2312:12;2301:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2301:24:0;;2278:47;;2405:1;2398:5;2394:13;2450:4;2442:6;2438:17;2484:4;2532;2526:11;2520:4;2516:22;2582:4;2574:6;2570:17;2625:8;2619:15;2665:4;2655:8;2648:22;2686:697;2721:6;2712:7;2709:19;2686:697;;;2791:1;2782:7;2778:15;2767:26;;2830:7;2824:14;2917:4;2909:5;2905:2;2901:14;2897:25;2887:8;2883:40;2877:47;2866:9;2858:67;2971:1;2960:9;2956:17;2943:30;;3052:4;3044:5;3040:2;3036:14;3032:25;3022:8;3018:40;3012:47;3001:9;2993:67;3106:1;3095:9;3091:17;3078:30;;3186:4;3178:5;3175:1;3171:13;3167:24;3157:8;3153:39;3147:46;3136:9;3128:66;3240:1;3229:9;3225:17;3212:30;;3312:4;3305:5;3301:16;3291:8;3287:31;3281:38;3270:9;3262:58;;3366:1;3355:9;3351:17;3338:30;;2686:697;;;3399:28;;-1:-1:-1;;3443:327:0;;;;3501:1;3494:4;3488:11;3484:19;3526:1;3521:135;;;;3679:1;3674:81;;;;3477:278;;3521:135;3578:4;3574:1;3563:9;3559:17;3551:32;3632:4;3628:1;3617:9;3613:17;3605:32;3521:135;;3674:81;3731:4;3727:1;3716:9;3712:17;3704:32;3477:278;;3443:327;-1:-1:-1;3800:6:0;;-1:-1:-1;;;2006:1808:0;;;;;;:::o;10195:539::-;-1:-1:-1;;;;;10312:18:0;;10287:22;10312:18;;;:12;:18;;;;;:25;:29;;10340:1;;10312:29;:::i;:::-;10352:18;10373:26;;;:17;:26;;;;;;10287:54;;-1:-1:-1;10416:28:0;;;10412:234;;-1:-1:-1;;;;;10483:18:0;;10461:19;10483:18;;;:12;:18;;;;;:34;;10502:14;;10483:34;;;;;;:::i;:::-;;;;;;;;;10461:56;;10565:11;10532:12;:18;10545:4;-1:-1:-1;;;;;10532:18:0;-1:-1:-1;;;;;10532:18:0;;;;;;;;;;;;10551:10;10532:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:44;;;;10591:30;;;:17;:30;;;;;:43;;;10412:234;-1:-1:-1;;;;;10658:18:0;;;;;;:12;:18;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;10658:24:0;;;;;;;;;;;;10700:26;;;:17;:26;;;-1:-1:-1;;10700:26:0;;;10693:33;-1:-1:-1;10195:539:0:o;10914:425::-;11021:10;:17;10996:22;;11021:21;;11041:1;;11021:21;:::i;:::-;11053:18;11074:24;;;:15;:24;;;;;;11133:10;:26;;10996:46;;-1:-1:-1;11074:24:0;;10996:46;;11133:26;;;;;;:::i;:::-;;;;;;;;;11111:48;;11197:11;11172:10;11183;11172:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;11219:28;;;:15;:28;;;;;;:41;;;11273:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11307:15;:24;11323:7;11307:24;;;;;;;;;;;11300:31;;;10985:354;;;10914:425;:::o;9997:190::-;-1:-1:-1;;;;;10082:16:0;;;;;;:12;:16;;;;;;;:30;;;;;;;;;;;;;;;;;;10152:16;;;;:23;;:27;;10082:30;10152:27;:::i;:::-;10123:26;;;;:17;:26;;;;;;:56;-1:-1:-1;9997:190:0:o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;852:173::-;920:20;;-1:-1:-1;;;;;969:31:1;;959:42;;949:70;;1015:1;1012;1005:12;949:70;852:173;;;:::o;1030:254::-;1098:6;1106;1159:2;1147:9;1138:7;1134:23;1130:32;1127:52;;;1175:1;1172;1165:12;1127:52;1198:29;1217:9;1198:29;:::i;:::-;1188:39;1274:2;1259:18;;;;1246:32;;-1:-1:-1;;;1030:254:1:o;1289:180::-;1348:6;1401:2;1389:9;1380:7;1376:23;1372:32;1369:52;;;1417:1;1414;1407:12;1369:52;-1:-1:-1;1440:23:1;;1289:180;-1:-1:-1;1289:180:1:o;1682:186::-;1741:6;1794:2;1782:9;1773:7;1769:23;1765:32;1762:52;;;1810:1;1807;1800:12;1762:52;1833:29;1852:9;1833:29;:::i;1873:380::-;1952:1;1948:12;;;;1995;;;2016:61;;2070:4;2062:6;2058:17;2048:27;;2016:61;2123:2;2115:6;2112:14;2092:18;2089:38;2086:161;;2169:10;2164:3;2160:20;2157:1;2150:31;2204:4;2201:1;2194:15;2232:4;2229:1;2222:15;2086:161;;1873:380;;;:::o;2258:127::-;2319:10;2314:3;2310:20;2307:1;2300:31;2350:4;2347:1;2340:15;2374:4;2371:1;2364:15;2390:135;2429:3;2450:17;;;2447:43;;2470:18;;:::i;:::-;-1:-1:-1;2517:1:1;2506:13;;2390:135::o;2530:127::-;2591:10;2586:3;2582:20;2579:1;2572:31;2622:4;2619:1;2612:15;2646:4;2643:1;2636:15;2788:545;2890:2;2885:3;2882:11;2879:448;;;2926:1;2951:5;2947:2;2940:17;2996:4;2992:2;2982:19;3066:2;3054:10;3050:19;3047:1;3043:27;3037:4;3033:38;3102:4;3090:10;3087:20;3084:47;;;-1:-1:-1;3125:4:1;3084:47;3180:2;3175:3;3171:12;3168:1;3164:20;3158:4;3154:31;3144:41;;3235:82;3253:2;3246:5;3243:13;3235:82;;;3298:17;;;3279:1;3268:13;3235:82;;;3239:3;;;2788:545;;;:::o;3509:1352::-;3635:3;3629:10;3662:18;3654:6;3651:30;3648:56;;;3684:18;;:::i;:::-;3713:97;3803:6;3763:38;3795:4;3789:11;3763:38;:::i;:::-;3757:4;3713:97;:::i;:::-;3865:4;;3929:2;3918:14;;3946:1;3941:663;;;;4648:1;4665:6;4662:89;;;-1:-1:-1;4717:19:1;;;4711:26;4662:89;-1:-1:-1;;3466:1:1;3462:11;;;3458:24;3454:29;3444:40;3490:1;3486:11;;;3441:57;4764:81;;3911:944;;3941:663;2735:1;2728:14;;;2772:4;2759:18;;-1:-1:-1;;3977:20:1;;;4095:236;4109:7;4106:1;4103:14;4095:236;;;4198:19;;;4192:26;4177:42;;4290:27;;;;4258:1;4246:14;;;;4125:19;;4095:236;;;4099:3;4359:6;4350:7;4347:19;4344:201;;;4420:19;;;4414:26;-1:-1:-1;;4503:1:1;4499:14;;;4515:3;4495:24;4491:37;4487:42;4472:58;4457:74;;4344:201;-1:-1:-1;;;;;4591:1:1;4575:14;;;4571:22;4558:36;;-1:-1:-1;3509:1352:1:o;5278:127::-;5339:10;5334:3;5330:20;5327:1;5320:31;5370:4;5367:1;5360:15;5394:4;5391:1;5384:15;7421:198;7463:3;7501:5;7495:12;7516:65;7574:6;7569:3;7562:4;7555:5;7551:16;7516:65;:::i;:::-;7597:16;;;;;7421:198;-1:-1:-1;;7421:198:1:o;7624:461::-;7886:31;7881:3;7874:44;7856:3;7947:6;7941:13;7963:75;8031:6;8026:2;8021:3;8017:12;8010:4;8002:6;7998:17;7963:75;:::i;:::-;8058:16;;;;8076:2;8054:25;;7624:461;-1:-1:-1;;7624:461:1:o;8497:128::-;8564:9;;;8585:11;;;8582:37;;;8599:18;;:::i;8929:127::-;8990:10;8985:3;8981:20;8978:1;8971:31;9021:4;9018:1;9011:15;9045:4;9042:1;9035:15;9061:112;9093:1;9119;9109:35;;9124:18;;:::i;:::-;-1:-1:-1;9158:9:1;;9061:112::o;10438:2180::-;-1:-1:-1;;;11693:16:1;;11738:66;11734:1;11725:11;;11718:87;11835:66;11830:2;11821:12;;11814:88;-1:-1:-1;;;11927:2:1;11918:12;;11911:44;-1:-1:-1;;;11980:2:1;11971:12;;11964:62;-1:-1:-1;;;12051:2:1;12042:12;;12035:50;12108:13;;-1:-1:-1;;12130:73:1;12108:13;12191:2;12182:12;;12177:2;12165:15;;12130:73;:::i;:::-;-1:-1:-1;;;12262:2:1;12222:16;;;12254:11;;;12247:24;-1:-1:-1;;;12295:2:1;12287:11;;12280:49;12354:13;;12376:74;12354:13;12436:2;12428:11;;12423:2;12411:15;;12376:74;:::i;:::-;12466:146;12496:115;12522:88;12552:57;12605:2;12594:8;12590:2;12586:17;12582:26;-1:-1:-1;;;10120:16:1;;10161:1;10152:11;;10055:114;12552:57;-1:-1:-1;;;10239:41:1;;10305:1;10296:11;;10174:139;12522:88;12514:6;12496:115;:::i;:::-;-1:-1:-1;;;10383:17:1;;10425:1;10416:11;;10318:115;12466:146;12459:153;10438:2180;-1:-1:-1;;;;;;;10438:2180:1:o;13341:125::-;13406:9;;;13427:10;;;13424:36;;;13440:18;;:::i;13471:120::-;13511:1;13537;13527:35;;13542:18;;:::i;:::-;-1:-1:-1;13576:9:1;;13471:120::o;13596:168::-;13669:9;;;13700;;13717:15;;;13711:22;;13697:37;13687:71;;13738:18;;:::i;13769:127::-;13830:10;13825:3;13821:20;13818:1;13811:31;13861:4;13858:1;13851:15;13885:4;13882:1;13875:15

Swarm Source

ipfs://99acd269aa6e441371c88628485e8023245cddc6f688193bd21cf37493f1cd92
[ 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.