ETH Price: $2,923.84 (-3.73%)
Gas: 5 Gwei

Token

Panda Fight Club (PFC)
 

Overview

Max Total Supply

1,383 PFC

Holders

667

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 PFC
0xc30782464f06a98d9d1389bb87aa4f5f8801b60f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Panda Fight Club is the first NFT project to bridge video game wagering & blockchain

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PandaFightClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 10 of 12: PandaFightClub.sol
// SPDX-License-Identifier: None

pragma solidity ^0.8.4;

import "./Ownable.sol";
import "./ERC721.sol";
import "./SafeMath.sol";
import "./String.sol";

contract PandaFightClub is Ownable, ERC721 {
    using SafeMath for uint256;
    using Strings for uint256;
    
    //Sale and Supply
    uint256 public mintPrice = 0.0888 ether;
    uint256 public mintLimit = 18;
    uint256 public totalSupply = 0;
    uint256 public supplyLimit;
    uint256 public wallet1Share = 50;
    uint256 public wallet2Share = 29;
    uint256 public wallet3Share = 15;
    uint256 public wallet4Share = 5;
    uint256 public wallet5Share = 1;
    uint256 public namingPrice = 0 ether;
    uint8 public charLimit = 32;

    address public wallet1;
    address public wallet2;
    address public wallet3;
    address public wallet4;
    address public wallet5;

    string public baseURI = "";
    bool public namingAllowed = false;
    bool public saleActive = false;

    event wallet1AddressChanged(address _wallet1);
    event wallet2AddressChanged(address _wallet2);
    event wallet3AddressChanged(address _wallet3);
    event wallet4AddressChanged(address _wallet2);
    event wallet5AddressChanged(address _wallet3);
    event SaleStateChanged(bool _state);
    event SupplyLimitChanged(uint256 _supplyLimit);
    event MintLimitChanged(uint256 _mintLimit);
    event MintPriceChanged(uint256 _mintPrice);
    event ReservePandas(uint256 _numberOfTokens);
    event SharesChanged(uint256 _value1, uint256 _value2, uint256 _value3, uint256 _value4, uint256 _value5);
    event NameChanged(uint256 _tokenId, string _name);
    event NamingPriceChanged(uint256 _price);
    event BaseURIChanged(string _baseURI);
    event PandaMinted(address indexed _user, uint256 indexed _tokenId, string _tokenURI);
    event NamingStateChanged(bool _namingAllowed);

    constructor(
        uint256 tokenSupplyLimit,
        string memory _baseURI
    ) ERC721("Panda Fight Club", "PFC") {
        
        supplyLimit = tokenSupplyLimit;
        wallet1 = owner();
        wallet2 = owner();
        wallet3 = owner();
        wallet4 = owner();
        wallet5 = owner();
        
        baseURI = _baseURI;

        emit NamingPriceChanged(namingPrice);
        emit SupplyLimitChanged(supplyLimit);
        emit MintLimitChanged(mintLimit);
        emit MintPriceChanged(mintPrice);
        emit SharesChanged(wallet1Share, wallet2Share, wallet3Share, wallet4Share, wallet5Share);
        emit BaseURIChanged(_baseURI);
        emit NamingStateChanged(true);
        
    }
    
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return bytes(baseURI).length > 0 ? 
        string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    
    function buyToken(uint _numberOfTokens) external payable {
        require(saleActive, "Sale is not active.");
        require(_numberOfTokens <= mintLimit, "Too many tokens for one transaction.");
        require(msg.value >= mintPrice.mul(_numberOfTokens), "Insufficient payment.");
        
        _mintPandas(_numberOfTokens);
    }
    
    function _mintPandas(uint _numberOfTokens) internal {
        require(totalSupply.add(_numberOfTokens) <= supplyLimit, "Not enough tokens left.");

        uint256 newId = totalSupply;
        for(uint i = 0; i < _numberOfTokens; i++) {
            newId += 1;
            totalSupply = totalSupply.add(1);

            _safeMint(msg.sender, newId);
            emit PandaMinted(msg.sender, newId, tokenURI(newId));
        }
    }

    function toggleSaleActive() external onlyOwner {
        saleActive = !saleActive;
        emit SaleStateChanged(saleActive);
    }
    
    function changeSupplyLimit(uint256 _supplyLimit) external onlyOwner {
        require(_supplyLimit >= totalSupply, "Error 504");
        supplyLimit = _supplyLimit;
        emit SupplyLimitChanged(_supplyLimit);
    }
    
    function changeMintLimit(uint256 _mintLimit) external onlyOwner {
        mintLimit = _mintLimit;
        emit MintLimitChanged(_mintLimit);
    }
    
    function changeMintPrice(uint256 _mintPrice) external onlyOwner {
        mintPrice = _mintPrice;
        emit MintPriceChanged(_mintPrice);
    }
    
    function toggleNaming(bool _namingAllowed) external onlyOwner {
        namingAllowed = _namingAllowed;
        emit NamingStateChanged(_namingAllowed);
    }
    
    function setBaseURI(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        emit BaseURIChanged(_baseURI);
    }
    
    function setCharacterLimit(uint8 _charLimit) external onlyOwner {
        charLimit = _charLimit;
    }
    
    function reservePandas(uint256 _numberOfTokens) external onlyOwner {
        _mintPandas(_numberOfTokens);
        emit ReservePandas(_numberOfTokens);
    }
    
    function setWallet_1(address _address) external onlyOwner {
        wallet1 = _address;
        emit wallet1AddressChanged(_address);
    }
    
    function setWallet_2(address _address) external onlyOwner {
        wallet2 = _address;
        emit wallet2AddressChanged(_address);
    }

    function setWallet_3(address _address) external onlyOwner {
        wallet3 = _address;
        emit wallet3AddressChanged(_address);
    }
    
    function setWallet_4(address _address) external onlyOwner {
        wallet4 = _address;
        emit wallet4AddressChanged(_address);
    }

    function setWallet_5(address _address) external onlyOwner {
        wallet5 = _address;
        emit wallet5AddressChanged(_address);
    }
    
    function changeWalletShares(uint256 _value1, uint256 _value2, uint256 _value3, uint256 _value4, uint256 _value5) external onlyOwner {
        require(_value1 + _value2 + _value3 + _value4 + _value5 == 100, "Shares are not adding up to 100.");
        wallet1Share = _value1;
        wallet2Share = _value2;
        wallet3Share = _value3;
        wallet4Share = _value4;
        wallet5Share = _value5;
        emit SharesChanged(_value1, _value2, _value3, _value4, _value5);
    }
    
    function emergencyWithdraw() external onlyOwner {
        require(address(this).balance > 0, "No funds in smart Contract.");
        (bool success, ) = owner().call{value: address(this).balance}("");
        require(success, "Withdraw Failed.");
    }

    function withdrawAll() external onlyOwner {
        require(address(this).balance > 0, "No balance to withdraw.");
        uint256 _amount = address(this).balance;
        (bool wallet1Success, ) = wallet1.call{value: _amount.mul(wallet1Share).div(100)}("");
        (bool wallet2Success, ) = wallet2.call{value: _amount.mul(wallet2Share).div(100)}("");
        (bool wallet3Success, ) = wallet3.call{value: _amount.mul(wallet3Share).div(100)}("");
        (bool wallet4Success, ) = wallet4.call{value: _amount.mul(wallet4Share).div(100)}("");
        (bool wallet5Success, ) = wallet5.call{value: _amount.mul(wallet5Share).div(100)}("");

        require(wallet1Success && wallet2Success && wallet3Success && wallet4Success && wallet5Success, "Withdrawal failed.");
    }
    
    //Interact with NFT. Does not includ the dojo (other contract)
    function nameNFT(uint256 _tokenId, string memory _name) external payable {
        require(msg.value == namingPrice, "Incorrect price paid.");
        require(namingAllowed, "Naming is disabled.");
        require(ownerOf(_tokenId) == msg.sender, "Only owner of NFT can change name.");
        require(bytes(_name).length <= charLimit, "Name exceeds characters limit.");
        emit NameChanged(_tokenId, _name);
    }
    
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 12: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 3 of 12: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 4 of 12: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./String.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

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

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    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("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 5 of 12: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 6 of 12: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 7 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 8 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 9 of 12: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

File 11 of 12: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 12 of 12: String.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"tokenSupplyLimit","type":"uint256"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"MintLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"MintPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"_name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"}],"name":"NamingPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_namingAllowed","type":"bool"}],"name":"NamingStateChanged","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":"_user","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"_tokenURI","type":"string"}],"name":"PandaMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_numberOfTokens","type":"uint256"}],"name":"ReservePandas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_state","type":"bool"}],"name":"SaleStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value3","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value4","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value5","type":"uint256"}],"name":"SharesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_supplyLimit","type":"uint256"}],"name":"SupplyLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_wallet1","type":"address"}],"name":"wallet1AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_wallet2","type":"address"}],"name":"wallet2AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_wallet3","type":"address"}],"name":"wallet3AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_wallet2","type":"address"}],"name":"wallet4AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_wallet3","type":"address"}],"name":"wallet5AddressChanged","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"changeMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supplyLimit","type":"uint256"}],"name":"changeSupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value1","type":"uint256"},{"internalType":"uint256","name":"_value2","type":"uint256"},{"internalType":"uint256","name":"_value3","type":"uint256"},{"internalType":"uint256","name":"_value4","type":"uint256"},{"internalType":"uint256","name":"_value5","type":"uint256"}],"name":"changeWalletShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"nameNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"namingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"namingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"}],"name":"reservePandas","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":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_charLimit","type":"uint8"}],"name":"setCharacterLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setWallet_1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setWallet_2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setWallet_3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setWallet_4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setWallet_5","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyLimit","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":"bool","name":"_namingAllowed","type":"bool"}],"name":"toggleNaming","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet1Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet2Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet3Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet4Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet5Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

67013b7b21280e00006007556012600855600060098190556032600b55601d600c55600f600d8190556005600e556001905560108190556011805460ff1916602017905560a0604081905260808290526200005e9160169190620003b2565b506017805461ffff191690553480156200007757600080fd5b5060405162003d7738038062003d778339810160408190526200009a9162000458565b6040518060400160405280601081526020016f2830b73230902334b3b43a1021b63ab160811b8152506040518060400160405280600381526020016250464360e81b815250620000f9620000f36200035e60201b60201c565b62000362565b81516200010e906001906020850190620003b2565b50805162000124906002906020840190620003b2565b505050600a829055600054601180546101006001600160a01b03909316928302610100600160a81b0319909116179055601280546001600160a01b03199081168317909155601380548216831790556014805482168317905560158054909116909117905580516200019e906016906020840190620003b2565b507f4c9664b26dac29ad37dc5d246f6d23b260bd682a0179c9dd803e6643fc39ab96601054604051620001d391815260200190565b60405180910390a17f178f2d92de18f124251b08e25bacba56eda0716625c1e799fc6c8ed1ee7d1d07600a546040516200020f91815260200190565b60405180910390a17f9ae30a041b5f2244849dc754c675b09aef4ad230b48995476fd6e6415d1fe8ab6008546040516200024b91815260200190565b60405180910390a17f25b1f9f6b6e61dfca5575239769e4450ed2e49176670837f5d1a82a9a2fc693f6007546040516200028791815260200190565b60405180910390a1600b54600c54600d54600e54600f546040805195865260208601949094528484019290925260608401526080830152517f09097a79d53a76dee6930a82093529202861756585d6b50ae45ac2ee085be5f59181900360a00190a17f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516200031a91906200051d565b60405180910390a1604051600181527f83bbab4027fa9736c47ba53472f66ce0a0564aa42d70db3e3e3c11b2eb793d199060200160405180910390a15050620005d8565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620003c09062000585565b90600052602060002090601f016020900481019282620003e457600085556200042f565b82601f10620003ff57805160ff19168380011785556200042f565b828001600101855582156200042f579182015b828111156200042f57825182559160200191906001019062000412565b506200043d92915062000441565b5090565b5b808211156200043d576000815560010162000442565b600080604083850312156200046c57600080fd5b825160208401519092506001600160401b03808211156200048c57600080fd5b818501915085601f830112620004a157600080fd5b815181811115620004b657620004b6620005c2565b604051601f8201601f19908116603f01168101908382118183101715620004e157620004e1620005c2565b81604052828152886020848701011115620004fb57600080fd5b6200050e83602083016020880162000552565b80955050505050509250929050565b60208152600082518060208401526200053e81604085016020870162000552565b601f01601f19169190910160400192915050565b60005b838110156200056f57818101518382015260200162000555565b838111156200057f576000848401525b50505050565b600181811c908216806200059a57607f821691505b60208210811415620005bc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61378f80620005e86000396000f3fe60806040526004361061034a5760003560e01c80636817c76c116101bb5780639225de64116100f7578063c87b56dd11610095578063e985e9c51161006f578063e985e9c5146108f6578063ee8530391461093f578063f2fde38b1461095f578063f6dc39341461097f57600080fd5b8063c87b56dd146108a1578063d44e3573146108c1578063db2e21bc146108e157600080fd5b8063996517cf116100d1578063996517cf1461081f5780639a13a7ec14610835578063a22cb46514610861578063b88d4fde1461088157600080fd5b80639225de64146107d457806395d89b41146107f457806398ba54121461080957600080fd5b8063710b469a116101645780637673faf01161013e5780637673faf0146107615780637e0be6dc14610781578063853828b6146107a15780638da5cb5b146107b657600080fd5b8063710b469a14610716578063712ad5cc1461072c578063715018a61461074c57600080fd5b80636eddfde0116101955780636eddfde0146106cd5780636f5286d7146106e357806370a08231146106f657600080fd5b80636817c76c1461068357806368428a1b146106995780636c0360eb146106b857600080fd5b80632d296bf11161028a57806341ab7d0f1161023357806355f804b31161020d57806355f804b3146106135780635c0c370f146106335780636352211e1461064d57806365ffb4571461066d57600080fd5b806341ab7d0f146105b357806342842e0e146105d35780635325fafd146105f357600080fd5b806334259b5c1161026457806334259b5c146105535780633c918bae146105735780633fd173661461059357600080fd5b80632d296bf1146105155780632e2673fd146105285780633100a5351461053e57600080fd5b8063128cf3f8116102f75780631a026c96116102d15780631a026c961461049057806321822fed146104b557806323b872dd146104d557806324895acd146104f557600080fd5b8063128cf3f81461044457806318160ddd1461046457806319d1997a1461047a57600080fd5b8063081812fc11610328578063081812fc146103ca578063095ea7b3146104025780630b8d0a281461042457600080fd5b806301ffc9a71461034f578063051c0db41461038457806306fdde03146103a8575b600080fd5b34801561035b57600080fd5b5061036f61036a366004613249565b61099f565b60405190151581526020015b60405180910390f35b34801561039057600080fd5b5061039a600b5481565b60405190815260200161037b565b3480156103b457600080fd5b506103bd610a84565b60405161037b91906134f6565b3480156103d657600080fd5b506103ea6103e53660046132b8565b610b16565b6040516001600160a01b03909116815260200161037b565b34801561040e57600080fd5b5061042261041d366004613204565b610bc1565b005b34801561043057600080fd5b506012546103ea906001600160a01b031681565b34801561045057600080fd5b5061042261045f3660046130d4565b610cf3565b34801561047057600080fd5b5061039a60095481565b34801561048657600080fd5b5061039a600a5481565b34801561049c57600080fd5b506011546103ea9061010090046001600160a01b031681565b3480156104c157600080fd5b506104226104d03660046130d4565b610dba565b3480156104e157600080fd5b506104226104f0366004613122565b610e7a565b34801561050157600080fd5b506104226105103660046132b8565b610f01565b6104226105233660046132b8565b610f94565b34801561053457600080fd5b5061039a600e5481565b34801561054a57600080fd5b506104226110ca565b34801561055f57600080fd5b5061042261056e3660046132b8565b6111a3565b34801561057f57600080fd5b506013546103ea906001600160a01b031681565b34801561059f57600080fd5b506104226105ae3660046132b8565b611232565b3480156105bf57600080fd5b506015546103ea906001600160a01b031681565b3480156105df57600080fd5b506104226105ee366004613122565b6112c1565b3480156105ff57600080fd5b5061042261060e366004613353565b6112dc565b34801561061f57600080fd5b5061042261062e366004613283565b61136a565b34801561063f57600080fd5b5060175461036f9060ff1681565b34801561065957600080fd5b506103ea6106683660046132b8565b611407565b34801561067957600080fd5b5061039a600f5481565b34801561068f57600080fd5b5061039a60075481565b3480156106a557600080fd5b5060175461036f90610100900460ff1681565b3480156106c457600080fd5b506103bd611492565b3480156106d957600080fd5b5061039a60105481565b6104226106f13660046132d1565b611520565b34801561070257600080fd5b5061039a6107113660046130d4565b6116de565b34801561072257600080fd5b5061039a600d5481565b34801561073857600080fd5b5061042261074736600461322e565b611778565b34801561075857600080fd5b50610422611831565b34801561076d57600080fd5b506014546103ea906001600160a01b031681565b34801561078d57600080fd5b5061042261079c3660046130d4565b611897565b3480156107ad57600080fd5b50610422611957565b3480156107c257600080fd5b506000546001600160a01b03166103ea565b3480156107e057600080fd5b506104226107ef3660046130d4565b611ca6565b34801561080057600080fd5b506103bd611d6d565b34801561081557600080fd5b5061039a600c5481565b34801561082b57600080fd5b5061039a60085481565b34801561084157600080fd5b5060115461084f9060ff1681565b60405160ff909116815260200161037b565b34801561086d57600080fd5b5061042261087c3660046131da565b611d7c565b34801561088d57600080fd5b5061042261089c36600461315e565b611e5f565b3480156108ad57600080fd5b506103bd6108bc3660046132b8565b611eed565b3480156108cd57600080fd5b506104226108dc3660046132b8565b611fd6565b3480156108ed57600080fd5b506104226120b7565b34801561090257600080fd5b5061036f6109113660046130ef565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561094b57600080fd5b5061042261095a366004613318565b612204565b34801561096b57600080fd5b5061042261097a3660046130d4565b612347565b34801561098b57600080fd5b5061042261099a3660046130d4565b612426565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a3257507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a7e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060018054610a93906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf906135ce565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610ba55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610bcc82611407565b9050806001600160a01b0316836001600160a01b03161415610c565760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b336001600160a01b0382161480610c725750610c728133610911565b610ce45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b9c565b610cee83836124e6565b505050565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f9539f0adf432f6612656f7ec15ddf8a7e5835132bd4a474f39954885dbfc4554906020015b60405180910390a150565b6000546001600160a01b03163314610e145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fcfe8d0199cafb54be527f2e63b41b75a9ecf2d411b91b457f3ac20e38fbb921590602001610daf565b610e84338261256c565b610ef65760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b9c565b610cee838383612674565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b610f6481612859565b6040518181527f09e3f4470d4ab82735b5b8918a5babc9f825c10808941ac6d27f743a6336cd8590602001610daf565b601754610100900460ff16610feb5760405162461bcd60e51b815260206004820152601360248201527f53616c65206973206e6f74206163746976652e000000000000000000000000006044820152606401610b9c565b6008548111156110625760405162461bcd60e51b8152602060048201526024808201527f546f6f206d616e7920746f6b656e7320666f72206f6e65207472616e7361637460448201527f696f6e2e000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b60075461106f9082612941565b3410156110be5760405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e74207061796d656e742e00000000000000000000006044820152606401610b9c565b6110c781612859565b50565b6000546001600160a01b031633146111245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6017805460ff61010080830482161581027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90931692909217928390556040517fe333f8a36ee86e754548af2d6f50c73ff0d501e22e6c784662123dbbe493c602936111999390049091161515815260200190565b60405180910390a1565b6000546001600160a01b031633146111fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b60088190556040518181527f9ae30a041b5f2244849dc754c675b09aef4ad230b48995476fd6e6415d1fe8ab90602001610daf565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b60078190556040518181527f25b1f9f6b6e61dfca5575239769e4450ed2e49176670837f5d1a82a9a2fc693f90602001610daf565b610cee83838360405180602001604052806000815250611e5f565b6000546001600160a01b031633146113365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055565b6000546001600160a01b031633146113c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b80516113d7906016906020840190612f5b565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610daf91906134f6565b6000818152600360205260408120546001600160a01b031680610a7e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b9c565b6016805461149f906135ce565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb906135ce565b80156115185780601f106114ed57610100808354040283529160200191611518565b820191906000526020600020905b8154815290600101906020018083116114fb57829003601f168201915b505050505081565b60105434146115715760405162461bcd60e51b815260206004820152601560248201527f496e636f727265637420707269636520706169642e00000000000000000000006044820152606401610b9c565b60175460ff166115c35760405162461bcd60e51b815260206004820152601360248201527f4e616d696e672069732064697361626c65642e000000000000000000000000006044820152606401610b9c565b336115cd83611407565b6001600160a01b0316146116495760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79206f776e6572206f66204e46542063616e206368616e6765206e616d60448201527f652e0000000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b601154815160ff90911610156116a15760405162461bcd60e51b815260206004820152601e60248201527f4e616d6520657863656564732063686172616374657273206c696d69742e00006044820152606401610b9c565b7f8edfa912e70e283a8ef6d6f52cd1faef9690ff989eff2f11a134e8478ba7b28b82826040516116d2929190613509565b60405180910390a15050565b60006001600160a01b03821661175c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b9c565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146117d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f83bbab4027fa9736c47ba53472f66ce0a0564aa42d70db3e3e3c11b2eb793d1990602001610daf565b6000546001600160a01b0316331461188b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6118956000612954565b565b6000546001600160a01b031633146118f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fdb0adbaf411995223078ef9725ed8705a30c09025af139ee6070a73f12b5363a90602001610daf565b6000546001600160a01b031633146119b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b60004711611a015760405162461bcd60e51b815260206004820152601760248201527f4e6f2062616c616e636520746f2077697468647261772e0000000000000000006044820152606401610b9c565b601154600b5447916000916101009091046001600160a01b031690611a3490606490611a2e908690612941565b906129bc565b604051600081818185875af1925050503d8060008114611a70576040519150601f19603f3d011682016040523d82523d6000602084013e611a75565b606091505b5050601254600c549192506000916001600160a01b0390911690611aa190606490611a2e908790612941565b604051600081818185875af1925050503d8060008114611add576040519150601f19603f3d011682016040523d82523d6000602084013e611ae2565b606091505b5050601354600d549192506000916001600160a01b0390911690611b0e90606490611a2e908890612941565b604051600081818185875af1925050503d8060008114611b4a576040519150601f19603f3d011682016040523d82523d6000602084013e611b4f565b606091505b5050601454600e549192506000916001600160a01b0390911690611b7b90606490611a2e908990612941565b604051600081818185875af1925050503d8060008114611bb7576040519150601f19603f3d011682016040523d82523d6000602084013e611bbc565b606091505b5050601554600f549192506000916001600160a01b0390911690611be890606490611a2e908a90612941565b604051600081818185875af1925050503d8060008114611c24576040519150601f19603f3d011682016040523d82523d6000602084013e611c29565b606091505b50509050848015611c375750835b8015611c405750825b8015611c495750815b8015611c525750805b611c9e5760405162461bcd60e51b815260206004820152601260248201527f5769746864726177616c206661696c65642e00000000000000000000000000006044820152606401610b9c565b505050505050565b6000546001600160a01b03163314611d005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527f1354f2ed7ad63d510fe05b011c0f4585cc0503e5f2a9cf0ac0b2e7dc80127d5d90602001610daf565b606060028054610a93906135ce565b6001600160a01b038216331415611dd55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b9c565b3360008181526006602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611e69338361256c565b611edb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b9c565b611ee7848484846129c8565b50505050565b6000818152600360205260409020546060906001600160a01b0316611f7a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b9c565b600060168054611f89906135ce565b905011611fa55760405180602001604052806000815250610a7e565b6016611fb083612a51565b604051602001611fc19291906133dc565b60405160208183030381529060405292915050565b6000546001600160a01b031633146120305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6009548110156120825760405162461bcd60e51b815260206004820152600960248201527f4572726f722035303400000000000000000000000000000000000000000000006044820152606401610b9c565b600a8190556040518181527f178f2d92de18f124251b08e25bacba56eda0716625c1e799fc6c8ed1ee7d1d0790602001610daf565b6000546001600160a01b031633146121115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b600047116121615760405162461bcd60e51b815260206004820152601b60248201527f4e6f2066756e647320696e20736d61727420436f6e74726163742e00000000006044820152606401610b9c565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146121ae576040519150601f19603f3d011682016040523d82523d6000602084013e6121b3565b606091505b50509050806110c75760405162461bcd60e51b815260206004820152601060248201527f5769746864726177204661696c65642e000000000000000000000000000000006044820152606401610b9c565b6000546001600160a01b0316331461225e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b80828461226b8789613522565b6122759190613522565b61227f9190613522565b6122899190613522565b6064146122d85760405162461bcd60e51b815260206004820181905260248201527f53686172657320617265206e6f7420616464696e6720757020746f203130302e6044820152606401610b9c565b600b859055600c849055600d839055600e829055600f819055604080518681526020810186905290810184905260608101839052608081018290527f09097a79d53a76dee6930a82093529202861756585d6b50ae45ac2ee085be5f59060a00160405180910390a15050505050565b6000546001600160a01b031633146123a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6001600160a01b03811661241d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b9c565b6110c781612954565b6000546001600160a01b031633146124805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f89e6a58e4bc2c31cd8683e43e00e307d1dad49adef29ed929e68eb02a39c7d5d90602001610daf565b600081815260056020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061253382611407565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166125f65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b9c565b600061260183611407565b9050806001600160a01b0316846001600160a01b0316148061263c5750836001600160a01b031661263184610b16565b6001600160a01b0316145b8061266c57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661268782611407565b6001600160a01b0316146127035760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b9c565b6001600160a01b03821661277e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b6127896000826124e6565b6001600160a01b03831660009081526004602052604081208054600192906127b290849061358b565b90915550506001600160a01b03821660009081526004602052604081208054600192906127e0908490613522565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a546009546128699083612b83565b11156128b75760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f75676820746f6b656e73206c6566742e0000000000000000006044820152606401610b9c565b60095460005b82811015610cee576128d0600183613522565b6009549092506128e1906001612b83565b6009556128ee3383612b8f565b81337ff59c5f4e65419809f2f18a9ae8b1e339bb3ec172d98b761c49eed0e8779055ae61291a83611eed565b60405161292791906134f6565b60405180910390a38061293981613622565b9150506128bd565b600061294d828461354e565b9392505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061294d828461353a565b6129d3848484612674565b6129df84848484612bad565b611ee75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9c565b606081612a9157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612abb5780612aa581613622565b9150612ab49050600a8361353a565b9150612a95565b60008167ffffffffffffffff811115612ad657612ad66136fc565b6040519080825280601f01601f191660200182016040528015612b00576020820181803683370190505b5090505b841561266c57612b1560018361358b565b9150612b22600a8661365b565b612b2d906030613522565b60f81b818381518110612b4257612b426136cd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612b7c600a8661353a565b9450612b04565b600061294d8284613522565b612ba9828260405180602001604052806000815250612d78565b5050565b60006001600160a01b0384163b15612d6d576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612c0a9033908990889088906004016134ba565b602060405180830381600087803b158015612c2457600080fd5b505af1925050508015612c72575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c6f91810190613266565b60015b612d22573d808015612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b508051612d1a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061266c565b506001949350505050565b612d828383612e01565b612d8f6000848484612bad565b610cee5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9c565b6001600160a01b038216612e575760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b9c565b6000818152600360205260409020546001600160a01b031615612ebc5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b9c565b6001600160a01b0382166000908152600460205260408120805460019290612ee5908490613522565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612f67906135ce565b90600052602060002090601f016020900481019282612f895760008555612fcf565b82601f10612fa257805160ff1916838001178555612fcf565b82800160010185558215612fcf579182015b82811115612fcf578251825591602001919060010190612fb4565b50612fdb929150612fdf565b5090565b5b80821115612fdb5760008155600101612fe0565b600067ffffffffffffffff8084111561300f5761300f6136fc565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613055576130556136fc565b8160405280935085815286868601111561306e57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461309f57600080fd5b919050565b8035801515811461309f57600080fd5b600082601f8301126130c557600080fd5b61294d83833560208501612ff4565b6000602082840312156130e657600080fd5b61294d82613088565b6000806040838503121561310257600080fd5b61310b83613088565b915061311960208401613088565b90509250929050565b60008060006060848603121561313757600080fd5b61314084613088565b925061314e60208501613088565b9150604084013590509250925092565b6000806000806080858703121561317457600080fd5b61317d85613088565b935061318b60208601613088565b925060408501359150606085013567ffffffffffffffff8111156131ae57600080fd5b8501601f810187136131bf57600080fd5b6131ce87823560208401612ff4565b91505092959194509250565b600080604083850312156131ed57600080fd5b6131f683613088565b9150613119602084016130a4565b6000806040838503121561321757600080fd5b61322083613088565b946020939093013593505050565b60006020828403121561324057600080fd5b61294d826130a4565b60006020828403121561325b57600080fd5b813561294d8161372b565b60006020828403121561327857600080fd5b815161294d8161372b565b60006020828403121561329557600080fd5b813567ffffffffffffffff8111156132ac57600080fd5b61266c848285016130b4565b6000602082840312156132ca57600080fd5b5035919050565b600080604083850312156132e457600080fd5b82359150602083013567ffffffffffffffff81111561330257600080fd5b61330e858286016130b4565b9150509250929050565b600080600080600060a0868803121561333057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561336557600080fd5b813560ff8116811461294d57600080fd5b6000815180845261338e8160208601602086016135a2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081516133d28185602086016135a2565b9290920192915050565b600080845481600182811c9150808316806133f857607f831692505b6020808410821415613431577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156134455760018114613474576134a1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506134a1565b60008b81526020902060005b868110156134995781548b820152908501908301613480565b505084890196505b5050505050506134b181856133c0565b95945050505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526134ec6080830184613376565b9695505050505050565b60208152600061294d6020830184613376565b82815260406020820152600061266c6040830184613376565b600082198211156135355761353561366f565b500190565b6000826135495761354961369e565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135865761358661366f565b500290565b60008282101561359d5761359d61366f565b500390565b60005b838110156135bd5781810151838201526020016135a5565b83811115611ee75750506000910152565b600181811c908216806135e257607f821691505b6020821081141561361c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136545761365461366f565b5060010190565b60008261366a5761366a61369e565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146110c757600080fdfea26469706673582212208547211e7fe2622805ec2544ba1adb2c19c89195e10530ab98760d84ec909da264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000022b800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061034a5760003560e01c80636817c76c116101bb5780639225de64116100f7578063c87b56dd11610095578063e985e9c51161006f578063e985e9c5146108f6578063ee8530391461093f578063f2fde38b1461095f578063f6dc39341461097f57600080fd5b8063c87b56dd146108a1578063d44e3573146108c1578063db2e21bc146108e157600080fd5b8063996517cf116100d1578063996517cf1461081f5780639a13a7ec14610835578063a22cb46514610861578063b88d4fde1461088157600080fd5b80639225de64146107d457806395d89b41146107f457806398ba54121461080957600080fd5b8063710b469a116101645780637673faf01161013e5780637673faf0146107615780637e0be6dc14610781578063853828b6146107a15780638da5cb5b146107b657600080fd5b8063710b469a14610716578063712ad5cc1461072c578063715018a61461074c57600080fd5b80636eddfde0116101955780636eddfde0146106cd5780636f5286d7146106e357806370a08231146106f657600080fd5b80636817c76c1461068357806368428a1b146106995780636c0360eb146106b857600080fd5b80632d296bf11161028a57806341ab7d0f1161023357806355f804b31161020d57806355f804b3146106135780635c0c370f146106335780636352211e1461064d57806365ffb4571461066d57600080fd5b806341ab7d0f146105b357806342842e0e146105d35780635325fafd146105f357600080fd5b806334259b5c1161026457806334259b5c146105535780633c918bae146105735780633fd173661461059357600080fd5b80632d296bf1146105155780632e2673fd146105285780633100a5351461053e57600080fd5b8063128cf3f8116102f75780631a026c96116102d15780631a026c961461049057806321822fed146104b557806323b872dd146104d557806324895acd146104f557600080fd5b8063128cf3f81461044457806318160ddd1461046457806319d1997a1461047a57600080fd5b8063081812fc11610328578063081812fc146103ca578063095ea7b3146104025780630b8d0a281461042457600080fd5b806301ffc9a71461034f578063051c0db41461038457806306fdde03146103a8575b600080fd5b34801561035b57600080fd5b5061036f61036a366004613249565b61099f565b60405190151581526020015b60405180910390f35b34801561039057600080fd5b5061039a600b5481565b60405190815260200161037b565b3480156103b457600080fd5b506103bd610a84565b60405161037b91906134f6565b3480156103d657600080fd5b506103ea6103e53660046132b8565b610b16565b6040516001600160a01b03909116815260200161037b565b34801561040e57600080fd5b5061042261041d366004613204565b610bc1565b005b34801561043057600080fd5b506012546103ea906001600160a01b031681565b34801561045057600080fd5b5061042261045f3660046130d4565b610cf3565b34801561047057600080fd5b5061039a60095481565b34801561048657600080fd5b5061039a600a5481565b34801561049c57600080fd5b506011546103ea9061010090046001600160a01b031681565b3480156104c157600080fd5b506104226104d03660046130d4565b610dba565b3480156104e157600080fd5b506104226104f0366004613122565b610e7a565b34801561050157600080fd5b506104226105103660046132b8565b610f01565b6104226105233660046132b8565b610f94565b34801561053457600080fd5b5061039a600e5481565b34801561054a57600080fd5b506104226110ca565b34801561055f57600080fd5b5061042261056e3660046132b8565b6111a3565b34801561057f57600080fd5b506013546103ea906001600160a01b031681565b34801561059f57600080fd5b506104226105ae3660046132b8565b611232565b3480156105bf57600080fd5b506015546103ea906001600160a01b031681565b3480156105df57600080fd5b506104226105ee366004613122565b6112c1565b3480156105ff57600080fd5b5061042261060e366004613353565b6112dc565b34801561061f57600080fd5b5061042261062e366004613283565b61136a565b34801561063f57600080fd5b5060175461036f9060ff1681565b34801561065957600080fd5b506103ea6106683660046132b8565b611407565b34801561067957600080fd5b5061039a600f5481565b34801561068f57600080fd5b5061039a60075481565b3480156106a557600080fd5b5060175461036f90610100900460ff1681565b3480156106c457600080fd5b506103bd611492565b3480156106d957600080fd5b5061039a60105481565b6104226106f13660046132d1565b611520565b34801561070257600080fd5b5061039a6107113660046130d4565b6116de565b34801561072257600080fd5b5061039a600d5481565b34801561073857600080fd5b5061042261074736600461322e565b611778565b34801561075857600080fd5b50610422611831565b34801561076d57600080fd5b506014546103ea906001600160a01b031681565b34801561078d57600080fd5b5061042261079c3660046130d4565b611897565b3480156107ad57600080fd5b50610422611957565b3480156107c257600080fd5b506000546001600160a01b03166103ea565b3480156107e057600080fd5b506104226107ef3660046130d4565b611ca6565b34801561080057600080fd5b506103bd611d6d565b34801561081557600080fd5b5061039a600c5481565b34801561082b57600080fd5b5061039a60085481565b34801561084157600080fd5b5060115461084f9060ff1681565b60405160ff909116815260200161037b565b34801561086d57600080fd5b5061042261087c3660046131da565b611d7c565b34801561088d57600080fd5b5061042261089c36600461315e565b611e5f565b3480156108ad57600080fd5b506103bd6108bc3660046132b8565b611eed565b3480156108cd57600080fd5b506104226108dc3660046132b8565b611fd6565b3480156108ed57600080fd5b506104226120b7565b34801561090257600080fd5b5061036f6109113660046130ef565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561094b57600080fd5b5061042261095a366004613318565b612204565b34801561096b57600080fd5b5061042261097a3660046130d4565b612347565b34801561098b57600080fd5b5061042261099a3660046130d4565b612426565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a3257507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a7e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060018054610a93906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf906135ce565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610ba55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610bcc82611407565b9050806001600160a01b0316836001600160a01b03161415610c565760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b336001600160a01b0382161480610c725750610c728133610911565b610ce45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b9c565b610cee83836124e6565b505050565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f9539f0adf432f6612656f7ec15ddf8a7e5835132bd4a474f39954885dbfc4554906020015b60405180910390a150565b6000546001600160a01b03163314610e145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fcfe8d0199cafb54be527f2e63b41b75a9ecf2d411b91b457f3ac20e38fbb921590602001610daf565b610e84338261256c565b610ef65760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b9c565b610cee838383612674565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b610f6481612859565b6040518181527f09e3f4470d4ab82735b5b8918a5babc9f825c10808941ac6d27f743a6336cd8590602001610daf565b601754610100900460ff16610feb5760405162461bcd60e51b815260206004820152601360248201527f53616c65206973206e6f74206163746976652e000000000000000000000000006044820152606401610b9c565b6008548111156110625760405162461bcd60e51b8152602060048201526024808201527f546f6f206d616e7920746f6b656e7320666f72206f6e65207472616e7361637460448201527f696f6e2e000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b60075461106f9082612941565b3410156110be5760405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e74207061796d656e742e00000000000000000000006044820152606401610b9c565b6110c781612859565b50565b6000546001600160a01b031633146111245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6017805460ff61010080830482161581027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90931692909217928390556040517fe333f8a36ee86e754548af2d6f50c73ff0d501e22e6c784662123dbbe493c602936111999390049091161515815260200190565b60405180910390a1565b6000546001600160a01b031633146111fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b60088190556040518181527f9ae30a041b5f2244849dc754c675b09aef4ad230b48995476fd6e6415d1fe8ab90602001610daf565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b60078190556040518181527f25b1f9f6b6e61dfca5575239769e4450ed2e49176670837f5d1a82a9a2fc693f90602001610daf565b610cee83838360405180602001604052806000815250611e5f565b6000546001600160a01b031633146113365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055565b6000546001600160a01b031633146113c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b80516113d7906016906020840190612f5b565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610daf91906134f6565b6000818152600360205260408120546001600160a01b031680610a7e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b9c565b6016805461149f906135ce565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb906135ce565b80156115185780601f106114ed57610100808354040283529160200191611518565b820191906000526020600020905b8154815290600101906020018083116114fb57829003601f168201915b505050505081565b60105434146115715760405162461bcd60e51b815260206004820152601560248201527f496e636f727265637420707269636520706169642e00000000000000000000006044820152606401610b9c565b60175460ff166115c35760405162461bcd60e51b815260206004820152601360248201527f4e616d696e672069732064697361626c65642e000000000000000000000000006044820152606401610b9c565b336115cd83611407565b6001600160a01b0316146116495760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79206f776e6572206f66204e46542063616e206368616e6765206e616d60448201527f652e0000000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b601154815160ff90911610156116a15760405162461bcd60e51b815260206004820152601e60248201527f4e616d6520657863656564732063686172616374657273206c696d69742e00006044820152606401610b9c565b7f8edfa912e70e283a8ef6d6f52cd1faef9690ff989eff2f11a134e8478ba7b28b82826040516116d2929190613509565b60405180910390a15050565b60006001600160a01b03821661175c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b9c565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146117d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f83bbab4027fa9736c47ba53472f66ce0a0564aa42d70db3e3e3c11b2eb793d1990602001610daf565b6000546001600160a01b0316331461188b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6118956000612954565b565b6000546001600160a01b031633146118f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fdb0adbaf411995223078ef9725ed8705a30c09025af139ee6070a73f12b5363a90602001610daf565b6000546001600160a01b031633146119b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b60004711611a015760405162461bcd60e51b815260206004820152601760248201527f4e6f2062616c616e636520746f2077697468647261772e0000000000000000006044820152606401610b9c565b601154600b5447916000916101009091046001600160a01b031690611a3490606490611a2e908690612941565b906129bc565b604051600081818185875af1925050503d8060008114611a70576040519150601f19603f3d011682016040523d82523d6000602084013e611a75565b606091505b5050601254600c549192506000916001600160a01b0390911690611aa190606490611a2e908790612941565b604051600081818185875af1925050503d8060008114611add576040519150601f19603f3d011682016040523d82523d6000602084013e611ae2565b606091505b5050601354600d549192506000916001600160a01b0390911690611b0e90606490611a2e908890612941565b604051600081818185875af1925050503d8060008114611b4a576040519150601f19603f3d011682016040523d82523d6000602084013e611b4f565b606091505b5050601454600e549192506000916001600160a01b0390911690611b7b90606490611a2e908990612941565b604051600081818185875af1925050503d8060008114611bb7576040519150601f19603f3d011682016040523d82523d6000602084013e611bbc565b606091505b5050601554600f549192506000916001600160a01b0390911690611be890606490611a2e908a90612941565b604051600081818185875af1925050503d8060008114611c24576040519150601f19603f3d011682016040523d82523d6000602084013e611c29565b606091505b50509050848015611c375750835b8015611c405750825b8015611c495750815b8015611c525750805b611c9e5760405162461bcd60e51b815260206004820152601260248201527f5769746864726177616c206661696c65642e00000000000000000000000000006044820152606401610b9c565b505050505050565b6000546001600160a01b03163314611d005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527f1354f2ed7ad63d510fe05b011c0f4585cc0503e5f2a9cf0ac0b2e7dc80127d5d90602001610daf565b606060028054610a93906135ce565b6001600160a01b038216331415611dd55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b9c565b3360008181526006602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611e69338361256c565b611edb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b9c565b611ee7848484846129c8565b50505050565b6000818152600360205260409020546060906001600160a01b0316611f7a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b9c565b600060168054611f89906135ce565b905011611fa55760405180602001604052806000815250610a7e565b6016611fb083612a51565b604051602001611fc19291906133dc565b60405160208183030381529060405292915050565b6000546001600160a01b031633146120305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6009548110156120825760405162461bcd60e51b815260206004820152600960248201527f4572726f722035303400000000000000000000000000000000000000000000006044820152606401610b9c565b600a8190556040518181527f178f2d92de18f124251b08e25bacba56eda0716625c1e799fc6c8ed1ee7d1d0790602001610daf565b6000546001600160a01b031633146121115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b600047116121615760405162461bcd60e51b815260206004820152601b60248201527f4e6f2066756e647320696e20736d61727420436f6e74726163742e00000000006044820152606401610b9c565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146121ae576040519150601f19603f3d011682016040523d82523d6000602084013e6121b3565b606091505b50509050806110c75760405162461bcd60e51b815260206004820152601060248201527f5769746864726177204661696c65642e000000000000000000000000000000006044820152606401610b9c565b6000546001600160a01b0316331461225e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b80828461226b8789613522565b6122759190613522565b61227f9190613522565b6122899190613522565b6064146122d85760405162461bcd60e51b815260206004820181905260248201527f53686172657320617265206e6f7420616464696e6720757020746f203130302e6044820152606401610b9c565b600b859055600c849055600d839055600e829055600f819055604080518681526020810186905290810184905260608101839052608081018290527f09097a79d53a76dee6930a82093529202861756585d6b50ae45ac2ee085be5f59060a00160405180910390a15050505050565b6000546001600160a01b031633146123a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b6001600160a01b03811661241d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b9c565b6110c781612954565b6000546001600160a01b031633146124805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9c565b601480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f89e6a58e4bc2c31cd8683e43e00e307d1dad49adef29ed929e68eb02a39c7d5d90602001610daf565b600081815260056020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061253382611407565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166125f65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b9c565b600061260183611407565b9050806001600160a01b0316846001600160a01b0316148061263c5750836001600160a01b031661263184610b16565b6001600160a01b0316145b8061266c57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661268782611407565b6001600160a01b0316146127035760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b9c565b6001600160a01b03821661277e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b6127896000826124e6565b6001600160a01b03831660009081526004602052604081208054600192906127b290849061358b565b90915550506001600160a01b03821660009081526004602052604081208054600192906127e0908490613522565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a546009546128699083612b83565b11156128b75760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f75676820746f6b656e73206c6566742e0000000000000000006044820152606401610b9c565b60095460005b82811015610cee576128d0600183613522565b6009549092506128e1906001612b83565b6009556128ee3383612b8f565b81337ff59c5f4e65419809f2f18a9ae8b1e339bb3ec172d98b761c49eed0e8779055ae61291a83611eed565b60405161292791906134f6565b60405180910390a38061293981613622565b9150506128bd565b600061294d828461354e565b9392505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061294d828461353a565b6129d3848484612674565b6129df84848484612bad565b611ee75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9c565b606081612a9157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612abb5780612aa581613622565b9150612ab49050600a8361353a565b9150612a95565b60008167ffffffffffffffff811115612ad657612ad66136fc565b6040519080825280601f01601f191660200182016040528015612b00576020820181803683370190505b5090505b841561266c57612b1560018361358b565b9150612b22600a8661365b565b612b2d906030613522565b60f81b818381518110612b4257612b426136cd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612b7c600a8661353a565b9450612b04565b600061294d8284613522565b612ba9828260405180602001604052806000815250612d78565b5050565b60006001600160a01b0384163b15612d6d576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612c0a9033908990889088906004016134ba565b602060405180830381600087803b158015612c2457600080fd5b505af1925050508015612c72575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c6f91810190613266565b60015b612d22573d808015612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b508051612d1a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061266c565b506001949350505050565b612d828383612e01565b612d8f6000848484612bad565b610cee5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9c565b6001600160a01b038216612e575760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b9c565b6000818152600360205260409020546001600160a01b031615612ebc5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b9c565b6001600160a01b0382166000908152600460205260408120805460019290612ee5908490613522565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612f67906135ce565b90600052602060002090601f016020900481019282612f895760008555612fcf565b82601f10612fa257805160ff1916838001178555612fcf565b82800160010185558215612fcf579182015b82811115612fcf578251825591602001919060010190612fb4565b50612fdb929150612fdf565b5090565b5b80821115612fdb5760008155600101612fe0565b600067ffffffffffffffff8084111561300f5761300f6136fc565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613055576130556136fc565b8160405280935085815286868601111561306e57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461309f57600080fd5b919050565b8035801515811461309f57600080fd5b600082601f8301126130c557600080fd5b61294d83833560208501612ff4565b6000602082840312156130e657600080fd5b61294d82613088565b6000806040838503121561310257600080fd5b61310b83613088565b915061311960208401613088565b90509250929050565b60008060006060848603121561313757600080fd5b61314084613088565b925061314e60208501613088565b9150604084013590509250925092565b6000806000806080858703121561317457600080fd5b61317d85613088565b935061318b60208601613088565b925060408501359150606085013567ffffffffffffffff8111156131ae57600080fd5b8501601f810187136131bf57600080fd5b6131ce87823560208401612ff4565b91505092959194509250565b600080604083850312156131ed57600080fd5b6131f683613088565b9150613119602084016130a4565b6000806040838503121561321757600080fd5b61322083613088565b946020939093013593505050565b60006020828403121561324057600080fd5b61294d826130a4565b60006020828403121561325b57600080fd5b813561294d8161372b565b60006020828403121561327857600080fd5b815161294d8161372b565b60006020828403121561329557600080fd5b813567ffffffffffffffff8111156132ac57600080fd5b61266c848285016130b4565b6000602082840312156132ca57600080fd5b5035919050565b600080604083850312156132e457600080fd5b82359150602083013567ffffffffffffffff81111561330257600080fd5b61330e858286016130b4565b9150509250929050565b600080600080600060a0868803121561333057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561336557600080fd5b813560ff8116811461294d57600080fd5b6000815180845261338e8160208601602086016135a2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081516133d28185602086016135a2565b9290920192915050565b600080845481600182811c9150808316806133f857607f831692505b6020808410821415613431577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156134455760018114613474576134a1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506134a1565b60008b81526020902060005b868110156134995781548b820152908501908301613480565b505084890196505b5050505050506134b181856133c0565b95945050505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526134ec6080830184613376565b9695505050505050565b60208152600061294d6020830184613376565b82815260406020820152600061266c6040830184613376565b600082198211156135355761353561366f565b500190565b6000826135495761354961369e565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135865761358661366f565b500290565b60008282101561359d5761359d61366f565b500390565b60005b838110156135bd5781810151838201526020016135a5565b83811115611ee75750506000910152565b600181811c908216806135e257607f821691505b6020821081141561361c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136545761365461366f565b5060010190565b60008261366a5761366a61369e565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146110c757600080fdfea26469706673582212208547211e7fe2622805ec2544ba1adb2c19c89195e10530ab98760d84ec909da264736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000022b800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : tokenSupplyLimit (uint256): 8888
Arg [1] : _baseURI (string):

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000022b8
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

155:7522:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1430:300:3;;;;;;;;;;-1:-1:-1;1430:300:3;;;;;:::i;:::-;;:::i;:::-;;;8535:14:12;;8528:22;8510:41;;8498:2;8483:18;1430:300:3;;;;;;;;442:32:9;;;;;;;;;;;;;;;;;;;20327:25:12;;;20315:2;20300:18;442:32:9;20181:177:12;2348:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3859:217::-;;;;;;;;;;-1:-1:-1;3859:217:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7787:55:12;;;7769:74;;7757:2;7742:18;3859:217:3;7623:226:12;3397:401:3;;;;;;;;;;-1:-1:-1;3397:401:3;;;;;:::i;:::-;;:::i;:::-;;734:22:9;;;;;;;;;;-1:-1:-1;734:22:9;;;;-1:-1:-1;;;;;734:22:9;;;5066:139;;;;;;;;;;-1:-1:-1;5066:139:9;;;;;:::i;:::-;;:::i;374:30::-;;;;;;;;;;;;;;;;410:26;;;;;;;;;;;;;;;;706:22;;;;;;;;;;-1:-1:-1;706:22:9;;;;;;;-1:-1:-1;;;;;706:22:9;;;5211:139;;;;;;;;;;-1:-1:-1;5211:139:9;;;;;:::i;:::-;;:::i;4723:330:3:-;;;;;;;;;;-1:-1:-1;4723:330:3;;;;;:::i;:::-;;:::i;4750:157:9:-;;;;;;;;;;-1:-1:-1;4750:157:9;;;;;:::i;:::-;;:::i;2858:337::-;;;;;;:::i;:::-;;:::i;556:31::-;;;;;;;;;;;;;;;;3642:131;;;;;;;;;;;;;:::i;4010:146::-;;;;;;;;;;-1:-1:-1;4010:146:9;;;;;:::i;:::-;;:::i;762:22::-;;;;;;;;;;-1:-1:-1;762:22:9;;;;-1:-1:-1;;;;;762:22:9;;;4166:146;;;;;;;;;;-1:-1:-1;4166:146:9;;;;;:::i;:::-;;:::i;818:22::-;;;;;;;;;;-1:-1:-1;818:22:9;;;;-1:-1:-1;;;;;818:22:9;;;5119:179:3;;;;;;;;;;-1:-1:-1;5119:179:3;;;;;:::i;:::-;;:::i;4637:103:9:-;;;;;;;;;;-1:-1:-1;4637:103:9;;;;;:::i;:::-;;:::i;4490:137::-;;;;;;;;;;-1:-1:-1;4490:137:9;;;;;:::i;:::-;;:::i;879:33::-;;;;;;;;;;-1:-1:-1;879:33:9;;;;;;;;2051:235:3;;;;;;;;;;-1:-1:-1;2051:235:3;;;;;:::i;:::-;;:::i;593:31:9:-;;;;;;;;;;;;;;;;294:39;;;;;;;;;;;;;;;;918:30;;;;;;;;;;-1:-1:-1;918:30:9;;;;;;;;;;;847:26;;;;;;;;;;;;;:::i;630:36::-;;;;;;;;;;;;;;;;7251:419;;;;;;:::i;:::-;;:::i;1789:205:3:-;;;;;;;;;;-1:-1:-1;1789:205:3;;;;;:::i;:::-;;:::i;518:32:9:-;;;;;;;;;;;;;;;;4322:158;;;;;;;;;;-1:-1:-1;4322:158:9;;;;;:::i;:::-;;:::i;1598:92:8:-;;;;;;;;;;;;;:::i;790:22:9:-;;;;;;;;;;-1:-1:-1;790:22:9;;;;-1:-1:-1;;;;;790:22:9;;;5505:139;;;;;;;;;;-1:-1:-1;5505:139:9;;;;;:::i;:::-;;:::i;6402:772::-;;;;;;;;;;;;;:::i;966:85:8:-;;;;;;;;;;-1:-1:-1;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;966:85;;4917:139:9;;;;;;;;;;-1:-1:-1;4917:139:9;;;;;:::i;:::-;;:::i;2510:102:3:-;;;;;;;;;;;;;:::i;480:32:9:-;;;;;;;;;;;;;;;;339:29;;;;;;;;;;;;;;;;672:27;;;;;;;;;;-1:-1:-1;672:27:9;;;;;;;;;;;21298:4:12;21286:17;;;21268:36;;21256:2;21241:18;672:27:9;21126:184:12;4143:290:3;;;;;;;;;;-1:-1:-1;4143:290:3;;;;;:::i;:::-;;:::i;5364:320::-;;;;;;;;;;-1:-1:-1;5364:320:3;;;;;:::i;:::-;;:::i;2563:285:9:-;;;;;;;;;;-1:-1:-1;2563:285:9;;;;;:::i;:::-;;:::i;3783:217::-;;;;;;;;;;-1:-1:-1;3783:217:9;;;;;:::i;:::-;;:::i;6145:251::-;;;;;;;;;;;;;:::i;4499:162:3:-;;;;;;;;;;-1:-1:-1;4499:162:3;;;;;:::i;:::-;-1:-1:-1;;;;;4619:25:3;;;4596:4;4619:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4499:162;5654:481:9;;;;;;;;;;-1:-1:-1;5654:481:9;;;;;:::i;:::-;;:::i;1839:189:8:-;;;;;;;;;;-1:-1:-1;1839:189:8;;;;;:::i;:::-;;:::i;5360:139:9:-;;;;;;;;;;-1:-1:-1;5360:139:9;;;;;:::i;:::-;;:::i;1430:300:3:-;1532:4;1567:40;;;1582:25;1567:40;;:104;;-1:-1:-1;1623:48:3;;;1638:33;1623:48;1567:104;:156;;;-1:-1:-1;886:25:2;871:40;;;;1687:36:3;1548:175;1430:300;-1:-1:-1;;1430:300:3:o;2348:98::-;2402:13;2434:5;2427:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2348:98;:::o;3859:217::-;3935:7;7244:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7244:16:3;3954:73;;;;-1:-1:-1;;;3954:73:3;;15449:2:12;3954:73:3;;;15431:21:12;15488:2;15468:18;;;15461:30;15527:34;15507:18;;;15500:62;15598:14;15578:18;;;15571:42;15630:19;;3954:73:3;;;;;;;;;-1:-1:-1;4045:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4045:24:3;;3859:217::o;3397:401::-;3477:13;3493:23;3508:7;3493:14;:23::i;:::-;3477:39;;3540:5;-1:-1:-1;;;;;3534:11:3;:2;-1:-1:-1;;;;;3534:11:3;;;3526:57;;;;-1:-1:-1;;;3526:57:3;;17397:2:12;3526:57:3;;;17379:21:12;17436:2;17416:18;;;17409:30;17475:34;17455:18;;;17448:62;17546:3;17526:18;;;17519:31;17567:19;;3526:57:3;17195:397:12;3526:57:3;666:10:1;-1:-1:-1;;;;;3615:21:3;;;;:62;;-1:-1:-1;3640:37:3;3657:5;666:10:1;4499:162:3;:::i;3640:37::-;3594:165;;;;-1:-1:-1;;;3594:165:3;;13492:2:12;3594:165:3;;;13474:21:12;13531:2;13511:18;;;13504:30;13570:34;13550:18;;;13543:62;13641:26;13621:18;;;13614:54;13685:19;;3594:165:3;13290:420:12;3594:165:3;3770:21;3779:2;3783:7;3770:8;:21::i;:::-;3467:331;3397:401;;:::o;5066:139:9:-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;5134:7:9::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;5134:18:9;::::1;::::0;;::::1;::::0;;;5167:31:::1;::::0;7769:74:12;;;5167:31:9::1;::::0;7757:2:12;7742:18;5167:31:9::1;;;;;;;;5066:139:::0;:::o;5211:::-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;5279:7:9::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;5279:18:9;::::1;::::0;;::::1;::::0;;;5312:31:::1;::::0;7769:74:12;;;5312:31:9::1;::::0;7757:2:12;7742:18;5312:31:9::1;7623:226:12::0;4723:330:3;4912:41;666:10:1;4945:7:3;4912:18;:41::i;:::-;4904:103;;;;-1:-1:-1;;;4904:103:3;;18202:2:12;4904:103:3;;;18184:21:12;18241:2;18221:18;;;18214:30;18280:34;18260:18;;;18253:62;18351:19;18331:18;;;18324:47;18388:19;;4904:103:3;18000:413:12;4904:103:3;5018:28;5028:4;5034:2;5038:7;5018:9;:28::i;4750:157:9:-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;4827:28:9::1;4839:15;4827:11;:28::i;:::-;4870:30;::::0;20327:25:12;;;4870:30:9::1;::::0;20315:2:12;20300:18;4870:30:9::1;20181:177:12::0;2858:337:9;2933:10;;;;;;;2925:42;;;;-1:-1:-1;;;2925:42:9;;17049:2:12;2925:42:9;;;17031:21:12;17088:2;17068:18;;;17061:30;17127:21;17107:18;;;17100:49;17166:18;;2925:42:9;16847:343:12;2925:42:9;3004:9;;2985:15;:28;;2977:77;;;;-1:-1:-1;;;2977:77:9;;10860:2:12;2977:77:9;;;10842:21:12;10899:2;10879:18;;;10872:30;10938:34;10918:18;;;10911:62;11009:6;10989:18;;;10982:34;11033:19;;2977:77:9;10658:400:12;2977:77:9;3085:9;;:30;;3099:15;3085:13;:30::i;:::-;3072:9;:43;;3064:77;;;;-1:-1:-1;;;3064:77:9;;18620:2:12;3064:77:9;;;18602:21:12;18659:2;18639:18;;;18632:30;18698:23;18678:18;;;18671:51;18739:18;;3064:77:9;18418:345:12;3064:77:9;3160:28;3172:15;3160:11;:28::i;:::-;2858:337;:::o;3642:131::-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;3713:10:9::1;::::0;;::::1;;::::0;;::::1;::::0;::::1;3712:11;3699:24:::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;3738:28:::1;::::0;::::1;::::0;::::1;::::0;3755:10;::::1;::::0;;::::1;8535:14:12::0;8528:22;8510:41;;8498:2;8483:18;;8370:187;3738:28:9::1;;;;;;;;3642:131::o:0;4010:146::-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;4084:9:9::1;:22:::0;;;4121:28:::1;::::0;20327:25:12;;;4121:28:9::1;::::0;20315:2:12;20300:18;4121:28:9::1;20181:177:12::0;4166:146:9;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;4240:9:9::1;:22:::0;;;4277:28:::1;::::0;20327:25:12;;;4277:28:9::1;::::0;20315:2:12;20300:18;4277:28:9::1;20181:177:12::0;5119:179:3;5252:39;5269:4;5275:2;5279:7;5252:39;;;;;;;;;;;;:16;:39::i;4637:103:9:-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;4711:9:9::1;:22:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;4637:103::o;4490:137::-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;4563:18:9;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;4596:24;4611:8;4596:24;;;;;;:::i;2051:235:3:-:0;2123:7;2158:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2158:16:3;2192:19;2184:73;;;;-1:-1:-1;;;2184:73:3;;14328:2:12;2184:73:3;;;14310:21:12;14367:2;14347:18;;;14340:30;14406:34;14386:18;;;14379:62;14477:11;14457:18;;;14450:39;14506:19;;2184:73:3;14126:405:12;847:26:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7251:419::-;7355:11;;7342:9;:24;7334:58;;;;-1:-1:-1;;;7334:58:9;;14738:2:12;7334:58:9;;;14720:21:12;14777:2;14757:18;;;14750:30;14816:23;14796:18;;;14789:51;14857:18;;7334:58:9;14536:345:12;7334:58:9;7410:13;;;;7402:45;;;;-1:-1:-1;;;7402:45:9;;19331:2:12;7402:45:9;;;19313:21:12;19370:2;19350:18;;;19343:30;19409:21;19389:18;;;19382:49;19448:18;;7402:45:9;19129:343:12;7402:45:9;7486:10;7465:17;7473:8;7465:7;:17::i;:::-;-1:-1:-1;;;;;7465:31:9;;7457:78;;;;-1:-1:-1;;;7457:78:9;;17799:2:12;7457:78:9;;;17781:21:12;17838:2;17818:18;;;17811:30;17877:34;17857:18;;;17850:62;17948:4;17928:18;;;17921:32;17970:19;;7457:78:9;17597:398:12;7457:78:9;7576:9;;7553:19;;7576:9;;;;-1:-1:-1;7553:32:9;7545:75;;;;-1:-1:-1;;;7545:75:9;;20024:2:12;7545:75:9;;;20006:21:12;20063:2;20043:18;;;20036:30;20102:32;20082:18;;;20075:60;20152:18;;7545:75:9;19822:354:12;7545:75:9;7635:28;7647:8;7657:5;7635:28;;;;;;;:::i;:::-;;;;;;;;7251:419;;:::o;1789:205:3:-;1861:7;-1:-1:-1;;;;;1888:19:3;;1880:74;;;;-1:-1:-1;;;1880:74:3;;13917:2:12;1880:74:3;;;13899:21:12;13956:2;13936:18;;;13929:30;13995:34;13975:18;;;13968:62;14066:12;14046:18;;;14039:40;14096:19;;1880:74:3;13715:406:12;1880:74:3;-1:-1:-1;;;;;;1971:16:3;;;;;:9;:16;;;;;;;1789:205::o;4322:158:9:-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;4394:13:9::1;:30:::0;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;4439:34:::1;::::0;8510:41:12;;;4439:34:9::1;::::0;8498:2:12;8483:18;4439:34:9::1;8370:187:12::0;1598:92:8;1012:7;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;5505:139:9:-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;5573:7:9::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;5573:18:9;::::1;::::0;;::::1;::::0;;;5606:31:::1;::::0;7769:74:12;;;5606:31:9::1;::::0;7757:2:12;7742:18;5606:31:9::1;7623:226:12::0;6402:772:9;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;6486:1:9::1;6462:21;:25;6454:61;;;::::0;-1:-1:-1;;;6454:61:9;;10151:2:12;6454:61:9::1;::::0;::::1;10133:21:12::0;10190:2;10170:18;;;10163:30;10229:25;10209:18;;;10202:53;10272:18;;6454:61:9::1;9949:347:12::0;6454:61:9::1;6600:7;::::0;6632:12:::1;::::0;6543:21:::1;::::0;6525:15:::1;::::0;6600:7:::1;::::0;;::::1;-1:-1:-1::0;;;;;6600:7:9::1;::::0;6620:34:::1;::::0;6650:3:::1;::::0;6620:25:::1;::::0;6543:21;;6620:11:::1;:25::i;:::-;:29:::0;::::1;:34::i;:::-;6600:59;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;6695:7:9::1;::::0;6727:12:::1;::::0;6574:85;;-1:-1:-1;6670:19:9::1;::::0;-1:-1:-1;;;;;6695:7:9;;::::1;::::0;6715:34:::1;::::0;6745:3:::1;::::0;6715:25:::1;::::0;:7;;:11:::1;:25::i;:34::-;6695:59;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;6790:7:9::1;::::0;6822:12:::1;::::0;6669:85;;-1:-1:-1;6765:19:9::1;::::0;-1:-1:-1;;;;;6790:7:9;;::::1;::::0;6810:34:::1;::::0;6840:3:::1;::::0;6810:25:::1;::::0;:7;;:11:::1;:25::i;:34::-;6790:59;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;6885:7:9::1;::::0;6917:12:::1;::::0;6764:85;;-1:-1:-1;6860:19:9::1;::::0;-1:-1:-1;;;;;6885:7:9;;::::1;::::0;6905:34:::1;::::0;6935:3:::1;::::0;6905:25:::1;::::0;:7;;:11:::1;:25::i;:34::-;6885:59;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;6980:7:9::1;::::0;7012:12:::1;::::0;6859:85;;-1:-1:-1;6955:19:9::1;::::0;-1:-1:-1;;;;;6980:7:9;;::::1;::::0;7000:34:::1;::::0;7030:3:::1;::::0;7000:25:::1;::::0;:7;;:11:::1;:25::i;:34::-;6980:59;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6954:85;;;7058:14;:32;;;;;7076:14;7058:32;:50;;;;;7094:14;7058:50;:68;;;;;7112:14;7058:68;:86;;;;;7130:14;7058:86;7050:117;;;::::0;-1:-1:-1;;;7050:117:9;;12376:2:12;7050:117:9::1;::::0;::::1;12358:21:12::0;12415:2;12395:18;;;12388:30;12454:20;12434:18;;;12427:48;12492:18;;7050:117:9::1;12174:342:12::0;7050:117:9::1;6444:730;;;;;;6402:772::o:0;4917:139::-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;4985:7:9::1;:18:::0;;;::::1;;-1:-1:-1::0;;;;;4985:18:9;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;5018:31:::1;::::0;7769:74:12;;;5018:31:9::1;::::0;7757:2:12;7742:18;5018:31:9::1;7623:226:12::0;2510:102:3;2566:13;2598:7;2591:14;;;;;:::i;4143:290::-;-1:-1:-1;;;;;4245:24:3;;666:10:1;4245:24:3;;4237:62;;;;-1:-1:-1;;;4237:62:3;;12022:2:12;4237:62:3;;;12004:21:12;12061:2;12041:18;;;12034:30;12100:27;12080:18;;;12073:55;12145:18;;4237:62:3;11820:349:12;4237:62:3;666:10:1;4310:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4310:42:3;;;;;;;;;;;;:53;;;;;;;;;;;;;4378:48;;8510:41:12;;;4310:42:3;;666:10:1;4378:48:3;;8483:18:12;4378:48:3;;;;;;;4143:290;;:::o;5364:320::-;5533:41;666:10:1;5566:7:3;5533:18;:41::i;:::-;5525:103;;;;-1:-1:-1;;;5525:103:3;;18202:2:12;5525:103:3;;;18184:21:12;18241:2;18221:18;;;18214:30;18280:34;18260:18;;;18253:62;18351:19;18331:18;;;18324:47;18388:19;;5525:103:3;18000:413:12;5525:103:3;5638:39;5652:4;5658:2;5662:7;5671:5;5638:13;:39::i;:::-;5364:320;;;;:::o;2563:285:9:-;7221:4:3;7244:16;;;:7;:16;;;;;;2628:13:9;;-1:-1:-1;;;;;7244:16:3;2653:76:9;;;;-1:-1:-1;;;2653:76:9;;16633:2:12;2653:76:9;;;16615:21:12;16672:2;16652:18;;;16645:30;16711:34;16691:18;;;16684:62;16782:17;16762:18;;;16755:45;16817:19;;2653:76:9;16431:411:12;2653:76:9;2770:1;2752:7;2746:21;;;;;:::i;:::-;;;:25;:95;;;;;;;;;;;;;;;;;2807:7;2816:18;:7;:16;:18::i;:::-;2790:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2739:102;2563:285;-1:-1:-1;;2563:285:9:o;3783:217::-;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;3885:11:9::1;;3869:12;:27;;3861:49;;;::::0;-1:-1:-1;;;3861:49:9;;8988:2:12;3861:49:9::1;::::0;::::1;8970:21:12::0;9027:1;9007:18;;;9000:29;9065:11;9045:18;;;9038:39;9094:18;;3861:49:9::1;8786:332:12::0;3861:49:9::1;3920:11;:26:::0;;;3961:32:::1;::::0;20327:25:12;;;3961:32:9::1;::::0;20315:2:12;20300:18;3961:32:9::1;20181:177:12::0;6145:251:9;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;6235:1:9::1;6211:21;:25;6203:65;;;::::0;-1:-1:-1;;;6203:65:9;;13136:2:12;6203:65:9::1;::::0;::::1;13118:21:12::0;13175:2;13155:18;;;13148:30;13214:29;13194:18;;;13187:57;13261:18;;6203:65:9::1;12934:351:12::0;6203:65:9::1;6279:12;1038:6:8::0;;6297:46:9::1;::::0;-1:-1:-1;;;;;1038:6:8;;;;6317:21:9::1;::::0;6279:12;6297:46;6279:12;6297:46;6317:21;1038:6:8;6297:46:9::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6278:65;;;6361:7;6353:36;;;::::0;-1:-1:-1;;;6353:36:9;;19679:2:12;6353:36:9::1;::::0;::::1;19661:21:12::0;19718:2;19698:18;;;19691:30;19757:18;19737;;;19730:46;19793:18;;6353:36:9::1;19477:340:12::0;5654:481:9;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;5844:7:9;5834;5824;5804:17:::1;5814:7:::0;5804;:17:::1;:::i;:::-;:27;;;;:::i;:::-;:37;;;;:::i;:::-;:47;;;;:::i;:::-;5855:3;5804:54;5796:99;;;::::0;-1:-1:-1;;;5796:99:9;;18970:2:12;5796:99:9::1;::::0;::::1;18952:21:12::0;;;18989:18;;;18982:30;19048:34;19028:18;;;19021:62;19100:18;;5796:99:9::1;18768:356:12::0;5796:99:9::1;5905:12;:22:::0;;;5937:12:::1;:22:::0;;;5969:12:::1;:22:::0;;;6001:12:::1;:22:::0;;;6033:12:::1;:22:::0;;;6070:58:::1;::::0;;20917:25:12;;;20973:2;20958:18;;20951:34;;;21001:18;;;20994:34;;;21059:2;21044:18;;21037:34;;;21102:3;21087:19;;21080:35;;;6070:58:9::1;::::0;20904:3:12;20889:19;6070:58:9::1;;;;;;;5654:481:::0;;;;;:::o;1839:189:8:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;-1:-1:-1;;;;;1927:22:8;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:8;;9744:2:12;1919:73:8::1;::::0;::::1;9726:21:12::0;9783:2;9763:18;;;9756:30;9822:34;9802:18;;;9795:62;9893:8;9873:18;;;9866:36;9919:19;;1919:73:8::1;9542:402:12::0;1919:73:8::1;2002:19;2012:8;2002:9;:19::i;5360:139:9:-:0;1012:7:8;1038:6;-1:-1:-1;;;;;1038:6:8;666:10:1;1178:23:8;1170:68;;;;-1:-1:-1;;;1170:68:8;;15862:2:12;1170:68:8;;;15844:21:12;;;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;15992:18;;1170:68:8;15660:356:12;1170:68:8;5428:7:9::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;5428:18:9;::::1;::::0;;::::1;::::0;;;5461:31:::1;::::0;7769:74:12;;;5461:31:9::1;::::0;7757:2:12;7742:18;5461:31:9::1;7623:226:12::0;11007:171:3;11081:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;11081:29:3;;;;;;;;:24;;11134:23;11081:24;11134:14;:23::i;:::-;-1:-1:-1;;;;;11125:46:3;;;;;;;;;;;11007:171;;:::o;7439:344::-;7532:4;7244:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7244:16:3;7548:73;;;;-1:-1:-1;;;7548:73:3;;12723:2:12;7548:73:3;;;12705:21:12;12762:2;12742:18;;;12735:30;12801:34;12781:18;;;12774:62;12872:14;12852:18;;;12845:42;12904:19;;7548:73:3;12521:408:12;7548:73:3;7631:13;7647:23;7662:7;7647:14;:23::i;:::-;7631:39;;7699:5;-1:-1:-1;;;;;7688:16:3;:7;-1:-1:-1;;;;;7688:16:3;;:51;;;;7732:7;-1:-1:-1;;;;;7708:31:3;:20;7720:7;7708:11;:20::i;:::-;-1:-1:-1;;;;;7708:31:3;;7688:51;:87;;;-1:-1:-1;;;;;;4619:25:3;;;4596:4;4619:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7743:32;7680:96;7439:344;-1:-1:-1;;;;7439:344:3:o;10336:560::-;10490:4;-1:-1:-1;;;;;10463:31:3;:23;10478:7;10463:14;:23::i;:::-;-1:-1:-1;;;;;10463:31:3;;10455:85;;;;-1:-1:-1;;;10455:85:3;;16223:2:12;10455:85:3;;;16205:21:12;16262:2;16242:18;;;16235:30;16301:34;16281:18;;;16274:62;16372:11;16352:18;;;16345:39;16401:19;;10455:85:3;16021:405:12;10455:85:3;-1:-1:-1;;;;;10558:16:3;;10550:65;;;;-1:-1:-1;;;10550:65:3;;11617:2:12;10550:65:3;;;11599:21:12;11656:2;11636:18;;;11629:30;11695:34;11675:18;;;11668:62;11766:6;11746:18;;;11739:34;11790:19;;10550:65:3;11415:400:12;10550:65:3;10727:29;10744:1;10748:7;10727:8;:29::i;:::-;-1:-1:-1;;;;;10767:15:3;;;;;;:9;:15;;;;;:20;;10786:1;;10767:15;:20;;10786:1;;10767:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10797:13:3;;;;;;:9;:13;;;;;:18;;10814:1;;10797:13;:18;;10814:1;;10797:18;:::i;:::-;;;;-1:-1:-1;;10825:16:3;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;10825:21:3;;;;;;;;;10862:27;;10825:16;;10862:27;;;;;;;10336:560;;;:::o;3205:431:9:-;3311:11;;3275;;:32;;3291:15;3275;:32::i;:::-;:47;;3267:83;;;;-1:-1:-1;;;3267:83:9;;11265:2:12;3267:83:9;;;11247:21:12;11304:2;11284:18;;;11277:30;11343:25;11323:18;;;11316:53;11386:18;;3267:83:9;11063:347:12;3267:83:9;3377:11;;3361:13;3398:232;3418:15;3414:1;:19;3398:232;;;3454:10;3463:1;3454:10;;:::i;:::-;3492:11;;3454:10;;-1:-1:-1;3492:18:9;;3508:1;3492:15;:18::i;:::-;3478:11;:32;3525:28;3535:10;3547:5;3525:9;:28::i;:::-;3596:5;3584:10;3572:47;3603:15;3596:5;3603:8;:15::i;:::-;3572:47;;;;;;:::i;:::-;;;;;;;;3435:3;;;;:::i;:::-;;;;3398:232;;3382:96:10;3440:7;3466:5;3470:1;3466;:5;:::i;:::-;3459:12;3382:96;-1:-1:-1;;;3382:96:10:o;2034:169:8:-;2089:16;2108:6;;-1:-1:-1;;;;;2124:17:8;;;;;;;;;;2156:40;;2108:6;;;;;;;2156:40;;2089:16;2156:40;2079:124;2034:169;:::o;3767:96:10:-;3825:7;3851:5;3855:1;3851;:5;:::i;6546:307:3:-;6697:28;6707:4;6713:2;6717:7;6697:9;:28::i;:::-;6743:48;6766:4;6772:2;6776:7;6785:5;6743:22;:48::i;:::-;6735:111;;;;-1:-1:-1;;;6735:111:3;;9325:2:12;6735:111:3;;;9307:21:12;9364:2;9344:18;;;9337:30;9403:34;9383:18;;;9376:62;9474:20;9454:18;;;9447:48;9512:19;;6735:111:3;9123:414:12;275:703:11;331:13;548:10;544:51;;-1:-1:-1;;574:10:11;;;;;;;;;;;;;;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:11;;-1:-1:-1;720:2:11;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:11;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:11;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;919:11:11;928:2;919:11;;:::i;:::-;;;791:150;;2672:96:10;2730:7;2756:5;2760:1;2756;:5;:::i;8113:108:3:-;8188:26;8198:2;8202:7;8188:26;;;;;;;;;;;;:9;:26::i;:::-;8113:108;;:::o;11731:778::-;11881:4;-1:-1:-1;;;;;11901:13:3;;1034:20:0;1080:8;11897:606:3;;11936:72;;;;;-1:-1:-1;;;;;11936:36:3;;;;;:72;;666:10:1;;11987:4:3;;11993:7;;12002:5;;11936:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11936:72:3;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11932:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12175:13:3;;12171:266;;12217:60;;-1:-1:-1;;;12217:60:3;;9325:2:12;12217:60:3;;;9307:21:12;9364:2;9344:18;;;9337:30;9403:34;9383:18;;;9376:62;9474:20;9454:18;;;9447:48;9512:19;;12217:60:3;9123:414:12;12171:266:3;12389:6;12383:13;12374:6;12370:2;12366:15;12359:38;11932:519;12058:51;;12068:41;12058:51;;-1:-1:-1;12051:58:3;;11897:606;-1:-1:-1;12488:4:3;11731:778;;;;;;:::o;8442:311::-;8567:18;8573:2;8577:7;8567:5;:18::i;:::-;8616:54;8647:1;8651:2;8655:7;8664:5;8616:22;:54::i;:::-;8595:151;;;;-1:-1:-1;;;8595:151:3;;9325:2:12;8595:151:3;;;9307:21:12;9364:2;9344:18;;;9337:30;9403:34;9383:18;;;9376:62;9474:20;9454:18;;;9447:48;9512:19;;8595:151:3;9123:414:12;9075:372:3;-1:-1:-1;;;;;9154:16:3;;9146:61;;;;-1:-1:-1;;;9146:61:3;;15088:2:12;9146:61:3;;;15070:21:12;;;15107:18;;;15100:30;15166:34;15146:18;;;15139:62;15218:18;;9146:61:3;14886:356:12;9146:61:3;7221:4;7244:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7244:16:3;:30;9217:58;;;;-1:-1:-1;;;9217:58:3;;10503:2:12;9217:58:3;;;10485:21:12;10542:2;10522:18;;;10515:30;10581;10561:18;;;10554:58;10629:18;;9217:58:3;10301:352:12;9217:58:3;-1:-1:-1;;;;;9342:13:3;;;;;;:9;:13;;;;;:18;;9359:1;;9342:13;:18;;9359:1;;9342:18;:::i;:::-;;;;-1:-1:-1;;9370:16:3;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;9370:21:3;;;;;;;;9407:33;;9370:16;;;9407:33;;9370:16;;9407:33;9075:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:690:12;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;289:2;283:9;355:2;343:15;;194:66;339:24;;;365:2;335:33;331:42;319:55;;;389:18;;;409:22;;;386:46;383:72;;;435:18;;:::i;:::-;475:10;471:2;464:22;504:6;495:15;;534:6;526;519:22;574:3;565:6;560:3;556:16;553:25;550:45;;;591:1;588;581:12;550:45;641:6;636:3;629:4;621:6;617:17;604:44;696:1;689:4;680:6;672;668:19;664:30;657:41;;;;14:690;;;;;:::o;709:196::-;777:20;;-1:-1:-1;;;;;826:54:12;;816:65;;806:93;;895:1;892;885:12;806:93;709:196;;;:::o;910:160::-;975:20;;1031:13;;1024:21;1014:32;;1004:60;;1060:1;1057;1050:12;1075:221;1118:5;1171:3;1164:4;1156:6;1152:17;1148:27;1138:55;;1189:1;1186;1179:12;1138:55;1211:79;1286:3;1277:6;1264:20;1257:4;1249:6;1245:17;1211:79;:::i;1301:186::-;1360:6;1413:2;1401:9;1392:7;1388:23;1384:32;1381:52;;;1429:1;1426;1419:12;1381:52;1452:29;1471:9;1452:29;:::i;1492:260::-;1560:6;1568;1621:2;1609:9;1600:7;1596:23;1592:32;1589:52;;;1637:1;1634;1627:12;1589:52;1660:29;1679:9;1660:29;:::i;:::-;1650:39;;1708:38;1742:2;1731:9;1727:18;1708:38;:::i;:::-;1698:48;;1492:260;;;;;:::o;1757:328::-;1834:6;1842;1850;1903:2;1891:9;1882:7;1878:23;1874:32;1871:52;;;1919:1;1916;1909:12;1871:52;1942:29;1961:9;1942:29;:::i;:::-;1932:39;;1990:38;2024:2;2013:9;2009:18;1990:38;:::i;:::-;1980:48;;2075:2;2064:9;2060:18;2047:32;2037:42;;1757:328;;;;;:::o;2090:666::-;2185:6;2193;2201;2209;2262:3;2250:9;2241:7;2237:23;2233:33;2230:53;;;2279:1;2276;2269:12;2230:53;2302:29;2321:9;2302:29;:::i;:::-;2292:39;;2350:38;2384:2;2373:9;2369:18;2350:38;:::i;:::-;2340:48;;2435:2;2424:9;2420:18;2407:32;2397:42;;2490:2;2479:9;2475:18;2462:32;2517:18;2509:6;2506:30;2503:50;;;2549:1;2546;2539:12;2503:50;2572:22;;2625:4;2617:13;;2613:27;-1:-1:-1;2603:55:12;;2654:1;2651;2644:12;2603:55;2677:73;2742:7;2737:2;2724:16;2719:2;2715;2711:11;2677:73;:::i;:::-;2667:83;;;2090:666;;;;;;;:::o;2761:254::-;2826:6;2834;2887:2;2875:9;2866:7;2862:23;2858:32;2855:52;;;2903:1;2900;2893:12;2855:52;2926:29;2945:9;2926:29;:::i;:::-;2916:39;;2974:35;3005:2;2994:9;2990:18;2974:35;:::i;3020:254::-;3088:6;3096;3149:2;3137:9;3128:7;3124:23;3120:32;3117:52;;;3165:1;3162;3155:12;3117:52;3188:29;3207:9;3188:29;:::i;:::-;3178:39;3264:2;3249:18;;;;3236:32;;-1:-1:-1;;;3020:254:12:o;3279:180::-;3335:6;3388:2;3376:9;3367:7;3363:23;3359:32;3356:52;;;3404:1;3401;3394:12;3356:52;3427:26;3443:9;3427:26;:::i;3464:245::-;3522:6;3575:2;3563:9;3554:7;3550:23;3546:32;3543:52;;;3591:1;3588;3581:12;3543:52;3630:9;3617:23;3649:30;3673:5;3649:30;:::i;3714:249::-;3783:6;3836:2;3824:9;3815:7;3811:23;3807:32;3804:52;;;3852:1;3849;3842:12;3804:52;3884:9;3878:16;3903:30;3927:5;3903:30;:::i;3968:322::-;4037:6;4090:2;4078:9;4069:7;4065:23;4061:32;4058:52;;;4106:1;4103;4096:12;4058:52;4146:9;4133:23;4179:18;4171:6;4168:30;4165:50;;;4211:1;4208;4201:12;4165:50;4234;4276:7;4267:6;4256:9;4252:22;4234:50;:::i;4295:180::-;4354:6;4407:2;4395:9;4386:7;4382:23;4378:32;4375:52;;;4423:1;4420;4413:12;4375:52;-1:-1:-1;4446:23:12;;4295:180;-1:-1:-1;4295:180:12:o;4480:390::-;4558:6;4566;4619:2;4607:9;4598:7;4594:23;4590:32;4587:52;;;4635:1;4632;4625:12;4587:52;4671:9;4658:23;4648:33;;4732:2;4721:9;4717:18;4704:32;4759:18;4751:6;4748:30;4745:50;;;4791:1;4788;4781:12;4745:50;4814;4856:7;4847:6;4836:9;4832:22;4814:50;:::i;:::-;4804:60;;;4480:390;;;;;:::o;4875:454::-;4970:6;4978;4986;4994;5002;5055:3;5043:9;5034:7;5030:23;5026:33;5023:53;;;5072:1;5069;5062:12;5023:53;-1:-1:-1;;5095:23:12;;;5165:2;5150:18;;5137:32;;-1:-1:-1;5216:2:12;5201:18;;5188:32;;5267:2;5252:18;;5239:32;;-1:-1:-1;5318:3:12;5303:19;5290:33;;-1:-1:-1;4875:454:12;-1:-1:-1;4875:454:12:o;5334:269::-;5391:6;5444:2;5432:9;5423:7;5419:23;5415:32;5412:52;;;5460:1;5457;5450:12;5412:52;5499:9;5486:23;5549:4;5542:5;5538:16;5531:5;5528:27;5518:55;;5569:1;5566;5559:12;5608:316;5649:3;5687:5;5681:12;5714:6;5709:3;5702:19;5730:63;5786:6;5779:4;5774:3;5770:14;5763:4;5756:5;5752:16;5730:63;:::i;:::-;5838:2;5826:15;5843:66;5822:88;5813:98;;;;5913:4;5809:109;;5608:316;-1:-1:-1;;5608:316:12:o;5929:185::-;5971:3;6009:5;6003:12;6024:52;6069:6;6064:3;6057:4;6050:5;6046:16;6024:52;:::i;:::-;6092:16;;;;;5929:185;-1:-1:-1;;5929:185:12:o;6119:1289::-;6295:3;6324:1;6357:6;6351:13;6387:3;6409:1;6437:9;6433:2;6429:18;6419:28;;6497:2;6486:9;6482:18;6519;6509:61;;6563:4;6555:6;6551:17;6541:27;;6509:61;6589:2;6637;6629:6;6626:14;6606:18;6603:38;6600:222;;;6676:77;6671:3;6664:90;6777:4;6774:1;6767:15;6807:4;6802:3;6795:17;6600:222;6838:18;6865:162;;;;7041:1;7036:320;;;;6831:525;;6865:162;6913:66;6902:9;6898:82;6893:3;6886:95;7010:6;7005:3;7001:16;6994:23;;6865:162;;7036:320;21388:1;21381:14;;;21425:4;21412:18;;7131:1;7145:165;7159:6;7156:1;7153:13;7145:165;;;7237:14;;7224:11;;;7217:35;7280:16;;;;7174:10;;7145:165;;;7149:3;;7339:6;7334:3;7330:16;7323:23;;6831:525;;;;;;;7372:30;7398:3;7390:6;7372:30;:::i;:::-;7365:37;6119:1289;-1:-1:-1;;;;;6119:1289:12:o;7854:511::-;8048:4;-1:-1:-1;;;;;8158:2:12;8150:6;8146:15;8135:9;8128:34;8210:2;8202:6;8198:15;8193:2;8182:9;8178:18;8171:43;;8250:6;8245:2;8234:9;8230:18;8223:34;8293:3;8288:2;8277:9;8273:18;8266:31;8314:45;8354:3;8343:9;8339:19;8331:6;8314:45;:::i;:::-;8306:53;7854:511;-1:-1:-1;;;;;;7854:511:12:o;8562:219::-;8711:2;8700:9;8693:21;8674:4;8731:44;8771:2;8760:9;8756:18;8748:6;8731:44;:::i;20363:290::-;20540:6;20529:9;20522:25;20583:2;20578;20567:9;20563:18;20556:30;20503:4;20603:44;20643:2;20632:9;20628:18;20620:6;20603:44;:::i;21441:128::-;21481:3;21512:1;21508:6;21505:1;21502:13;21499:39;;;21518:18;;:::i;:::-;-1:-1:-1;21554:9:12;;21441:128::o;21574:120::-;21614:1;21640;21630:35;;21645:18;;:::i;:::-;-1:-1:-1;21679:9:12;;21574:120::o;21699:228::-;21739:7;21865:1;21797:66;21793:74;21790:1;21787:81;21782:1;21775:9;21768:17;21764:105;21761:131;;;21872:18;;:::i;:::-;-1:-1:-1;21912:9:12;;21699:228::o;21932:125::-;21972:4;22000:1;21997;21994:8;21991:34;;;22005:18;;:::i;:::-;-1:-1:-1;22042:9:12;;21932:125::o;22062:258::-;22134:1;22144:113;22158:6;22155:1;22152:13;22144:113;;;22234:11;;;22228:18;22215:11;;;22208:39;22180:2;22173:10;22144:113;;;22275:6;22272:1;22269:13;22266:48;;;-1:-1:-1;;22310:1:12;22292:16;;22285:27;22062:258::o;22325:437::-;22404:1;22400:12;;;;22447;;;22468:61;;22522:4;22514:6;22510:17;22500:27;;22468:61;22575:2;22567:6;22564:14;22544:18;22541:38;22538:218;;;22612:77;22609:1;22602:88;22713:4;22710:1;22703:15;22741:4;22738:1;22731:15;22538:218;;22325:437;;;:::o;22767:195::-;22806:3;22837:66;22830:5;22827:77;22824:103;;;22907:18;;:::i;:::-;-1:-1:-1;22954:1:12;22943:13;;22767:195::o;22967:112::-;22999:1;23025;23015:35;;23030:18;;:::i;:::-;-1:-1:-1;23064:9:12;;22967:112::o;23084:184::-;23136:77;23133:1;23126:88;23233:4;23230:1;23223:15;23257:4;23254:1;23247:15;23273:184;23325:77;23322:1;23315:88;23422:4;23419:1;23412:15;23446:4;23443:1;23436:15;23462:184;23514:77;23511:1;23504:88;23611:4;23608:1;23601:15;23635:4;23632:1;23625:15;23651:184;23703:77;23700:1;23693:88;23800:4;23797:1;23790:15;23824:4;23821:1;23814:15;23840:177;23925:66;23918:5;23914:78;23907:5;23904:89;23894:117;;24007:1;24004;23997:12

Swarm Source

ipfs://8547211e7fe2622805ec2544ba1adb2c19c89195e10530ab98760d84ec909da2
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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