ETH Price: $2,605.46 (+0.20%)
Gas: 1 Gwei

Token

The Treasures of Ancient Egypt Official (Treasure)
 

Overview

Max Total Supply

5,638 Treasure

Holders

910

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 Treasure
0x370790f2a86448a639d30c98952d6d87413560dd
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TheTreasuresofAncientEgyptOfficial

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/** 

  _                                                   __                       _            _     ______                  _    
 | |                                                 / _|     /\              (_)          | |   |  ____|                | |   
 | |_ _ __ ___  __ _ ___ _   _ _ __ ___  ___    ___ | |_     /  \   _ __   ___ _  ___ _ __ | |_  | |__   __ _ _   _ _ __ | |_  
 | __| '__/ _ \/ _` / __| | | | '__/ _ \/ __|  / _ \|  _|   / /\ \ | '_ \ / __| |/ _ \ '_ \| __| |  __| / _` | | | | '_ \| __| 
 | |_| | |  __/ (_| \__ \ |_| | | |  __/\__ \ | (_) | |    / ____ \| | | | (__| |  __/ | | | |_  | |___| (_| | |_| | |_) | |_  
  \__|_|  \___|\__,_|___/\__,_|_|  \___||___/  \___/|_|   /_/    \_\_| |_|\___|_|\___|_| |_|\__| |______\__, |\__, | .__/ \__| 
                                                                                                         __/ | __/ | |         
                                                                                                        |___/ |___/|_|         
                                                               
                                                                                                            

                                                                                                                          
*/

/**
 *Submitted for verification at Etherscan.io on
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: erc721a/contracts/IERC721A.sol

// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     *
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);

    // ==============================
    //            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);

    // ==============================
    //            IERC721
    // ==============================

    /**
     * @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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);

    // ==============================
    //        IERC721Metadata
    // ==============================

    /**
     * @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: erc721a/contracts/ERC721A.sol

// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev ERC721 token receiver interface.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;
    
    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The tokenId of the next token to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned.
    // See `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

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

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

    /**
     * @dev Returns the starting token ID. 
     * To change the starting token ID, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count. 
     * To get the total number of tokens minted, please see `_totalMinted`.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * @dev Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to `_startTokenId()`
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev Returns the total number of tokens burned.
     */
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_AUX);
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
        ownership.burned = packed & BITMASK_BURNED != 0;
    }

    /**
     * Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

    /**
     * @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 Casts the address to uint256 without masking.
     */
    function _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev Casts the boolean to uint256 without branching.
     */
    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = address(uint160(_packedOwnershipOf(tokenId)));
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), 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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.code.length != 0) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
            isApprovedForAll(from, _msgSenderERC721A()) ||
            getApproved(tokenId) == _msgSenderERC721A());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

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

        address from = address(uint160(prevOwnershipPacked));

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
                isApprovedForAll(from, _msgSenderERC721A()) ||
                getApproved(tokenId) == _msgSenderERC721A());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED | 
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), 
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length, 
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for { 
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp { 
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } { // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }
            
            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}

// File: nft.sol


pragma solidity ^0.8.7;


contract TheTreasuresofAncientEgyptOfficial is Ownable, ERC721A {
    uint256 public maxSupply                    = 7700;
    uint256 public maxFreeSupply                = 2000;
    
    uint256 public maxPerTxDuringMint           = 20;
    uint256 public maxPerAddressDuringMint      = 60;
    uint256 public maxPerAddressDuringFreeMint  = 5;
    
    uint256 public price                        = 0.002 ether;
    bool    public saleIsActive                 = true;

    address constant internal TEAM_ADDRESS = 0x33E8fce4ee1eB405E59E93c9E19AD8d0fFD9bc4e;

    string private _baseTokenURI="ipfs://QmXu8zUdGhvRAz2Z1xSQhwUfVfxst17HLH6Xx7V38ZsYCJ/";

    mapping(address => uint256) public freeMintedAmount;
    mapping(address => uint256) public mintedAmount;

    constructor() ERC721A("The Treasures of Ancient Egypt Official", "Treasure") {
        _safeMint(msg.sender, 50);
    }

    modifier mintCompliance() {
        require(saleIsActive, "Sale is not active yet.");
        require(tx.origin == msg.sender, "Caller cannot be a contract.");
        _;
    }

    function mint(uint256 _quantity) external payable mintCompliance() {
        require(
            msg.value >= price * _quantity,
            "GDZ: Insufficient Fund."
        );
        require(
            maxSupply >= totalSupply() + _quantity,
            "GDZ: Exceeds max supply."
        );
        uint256 _mintedAmount = mintedAmount[msg.sender];
        require(
            _mintedAmount + _quantity <= maxPerAddressDuringMint,
            "GDZ: Exceeds max mints per address!"
        );
        require(
            _quantity > 0 && _quantity <= maxPerTxDuringMint,
            "Invalid mint amount."
        );
        mintedAmount[msg.sender] = _mintedAmount + _quantity;
        _safeMint(msg.sender, _quantity);
    }

    function freeMint(uint256 _quantity) external mintCompliance() {
        require(
            maxFreeSupply >= totalSupply() + _quantity,
            "GDZ: Exceeds max free supply."
        );
        uint256 _freeMintedAmount = freeMintedAmount[msg.sender];
        require(
            _freeMintedAmount + _quantity <= maxPerAddressDuringFreeMint,
            "GDZ: Exceeds max free mints per address!"
        );
        freeMintedAmount[msg.sender] = _freeMintedAmount + _quantity;
        _safeMint(msg.sender, _quantity);
    }

    function setPrice(uint256 _price) external onlyOwner {
        price = _price;
    }

    function setMaxPerTx(uint256 _amount) external onlyOwner {
        maxPerTxDuringMint = _amount;
    }

    function setMaxPerAddress(uint256 _amount) external onlyOwner {
        maxPerAddressDuringMint = _amount;
    }

    function setMaxFreePerAddress(uint256 _amount) external onlyOwner {
        maxPerAddressDuringFreeMint = _amount;
    }

    function flipSale() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function cutMaxSupply(uint256 _amount) public onlyOwner {
        require(
            maxSupply +_amount >= 1, 
            "Supply cannot fall below minted tokens."
        );
        maxSupply += _amount;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

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

    function withdrawBalance() external payable onlyOwner {

        (bool success, ) = payable(TEAM_ADDRESS).call{
            value: address(this).balance
        }("");
        require(success, "transfer failed.");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"cutMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","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":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxFreePerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"withdrawBalance","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052611e146009556107d0600a556014600b55603c600c556005600d5566071afd498d0000600e556001600f60006101000a81548160ff02191690831515021790555060405180606001604052806036815260200162004106603691396010908051906020019062000076929190620006cf565b503480156200008457600080fd5b506040518060600160405280602781526020016200413c602791396040518060400160405280600881526020017f5472656173757265000000000000000000000000000000000000000000000000815250620000f5620000e96200015860201b60201c565b6200016060201b60201c565b81600390805190602001906200010d929190620006cf565b50806004908051906020019062000126929190620006cf565b50620001376200022460201b60201c565b6001819055505050620001523360326200022960201b60201c565b620009d0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b6200024b8282604051806020016040528060008152506200024f60201b60201c565b5050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620002be576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415620002fa576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200030f60008583866200053560201b60201c565b600160406001901b178302600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16200037c600185146200053b60201b60201c565b901b60a042901b62000394866200054560201b60201c565b1717600560008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14620004a5575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200045160008784806001019550876200054f60201b60201c565b62000488576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210620003da5782600154146200049f57600080fd5b62000511565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210620004a6575b8160018190555050506200052f6000858386620006c160201b60201c565b50505050565b50505050565b6000819050919050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200057d620006c760201b60201c565b8786866040518563ffffffff1660e01b8152600401620005a194939291906200082b565b602060405180830381600087803b158015620005bc57600080fd5b505af1925050508015620005f057506040513d601f19601f82011682018060405250810190620005ed919062000796565b60015b6200066e573d806000811462000623576040519150601f19603f3d011682016040523d82523d6000602084013e62000628565b606091505b5060008151141562000666576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b828054620006dd906200093b565b90600052602060002090601f0160209004810192826200070157600085556200074d565b82601f106200071c57805160ff19168380011785556200074d565b828001600101855582156200074d579182015b828111156200074c5782518255916020019190600101906200072f565b5b5090506200075c919062000760565b5090565b5b808211156200077b57600081600090555060010162000761565b5090565b6000815190506200079081620009b6565b92915050565b600060208284031215620007af57620007ae620009a0565b5b6000620007bf848285016200077f565b91505092915050565b620007d3816200089b565b82525050565b6000620007e6826200087f565b620007f281856200088a565b93506200080481856020860162000905565b6200080f81620009a5565b840191505092915050565b6200082581620008fb565b82525050565b6000608082019050620008426000830187620007c8565b620008516020830186620007c8565b6200086060408301856200081a565b8181036060830152620008748184620007d9565b905095945050505050565b600081519050919050565b600082825260208201905092915050565b6000620008a882620008db565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200092557808201518184015260208101905062000908565b8381111562000935576000848401525b50505050565b600060028204905060018216806200095457607f821691505b602082108114156200096b576200096a62000971565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b620009c181620008af565b8114620009cd57600080fd5b50565b61372680620009e06000396000f3fe60806040526004361061020f5760003560e01c80638bc35c2f11610118578063bbb64319116100a0578063d5abeb011161006f578063d5abeb0114610745578063e985e9c514610770578063eb8d2444146107ad578063f2fde38b146107d8578063fbbf8cc3146108015761020f565b8063bbb643191461068b578063c6f6f216146106b4578063c87b56dd146106dd578063d3464cbd1461071a5761020f565b806396b10201116100e757806396b10201146105b5578063a035b1fe146105f2578063a0712d681461061d578063a22cb46514610639578063b88d4fde146106625761020f565b80638bc35c2f1461050b5780638da5cb5b1461053657806391b7f5ed1461056157806395d89b411461058a5761020f565b8063475133341161019b57806370a082311161016a57806370a082311461044e578063715018a61461048b5780637ba5e621146104a25780637bddd65b146104b95780637c928fe9146104e25761020f565b806347513334146103b357806355f804b3146103de5780635fd8c710146104075780636352211e146104115761020f565b80631141df20116101e25780631141df20146102e257806318160ddd1461030b57806323b872dd146103365780632e0fd6eb1461035f57806342842e0e1461038a5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612b01565b61083e565b6040516102489190612f0c565b60405180910390f35b34801561025d57600080fd5b506102666108d0565b6040516102739190612f27565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612ba8565b610962565b6040516102b09190612ea5565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190612ac1565b6109de565b005b3480156102ee57600080fd5b5061030960048036038101906103049190612ba8565b610b85565b005b34801561031757600080fd5b50610320610c6e565b60405161032d91906130c9565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906129ab565b610c85565b005b34801561036b57600080fd5b50610374610c95565b60405161038191906130c9565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac91906129ab565b610c9b565b005b3480156103bf57600080fd5b506103c8610cbb565b6040516103d591906130c9565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190612b5b565b610cc1565b005b61040f610d53565b005b34801561041d57600080fd5b5061043860048036038101906104339190612ba8565b610e92565b6040516104459190612ea5565b60405180910390f35b34801561045a57600080fd5b506104756004803603810190610470919061293e565b610ea4565b60405161048291906130c9565b60405180910390f35b34801561049757600080fd5b506104a0610f5d565b005b3480156104ae57600080fd5b506104b7610fe5565b005b3480156104c557600080fd5b506104e060048036038101906104db9190612ba8565b61108d565b005b3480156104ee57600080fd5b5061050960048036038101906105049190612ba8565b611113565b005b34801561051757600080fd5b50610520611318565b60405161052d91906130c9565b60405180910390f35b34801561054257600080fd5b5061054b61131e565b6040516105589190612ea5565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612ba8565b611347565b005b34801561059657600080fd5b5061059f6113cd565b6040516105ac9190612f27565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d7919061293e565b61145f565b6040516105e991906130c9565b60405180910390f35b3480156105fe57600080fd5b50610607611477565b60405161061491906130c9565b60405180910390f35b61063760048036038101906106329190612ba8565b61147d565b005b34801561064557600080fd5b50610660600480360381019061065b9190612a81565b611723565b005b34801561066e57600080fd5b50610689600480360381019061068491906129fe565b61189b565b005b34801561069757600080fd5b506106b260048036038101906106ad9190612ba8565b61190e565b005b3480156106c057600080fd5b506106db60048036038101906106d69190612ba8565b611994565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190612ba8565b611a1a565b6040516107119190612f27565b60405180910390f35b34801561072657600080fd5b5061072f611ab9565b60405161073c91906130c9565b60405180910390f35b34801561075157600080fd5b5061075a611abf565b60405161076791906130c9565b60405180910390f35b34801561077c57600080fd5b506107976004803603810190610792919061296b565b611ac5565b6040516107a49190612f0c565b60405180910390f35b3480156107b957600080fd5b506107c2611b59565b6040516107cf9190612f0c565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa919061293e565b611b6c565b005b34801561080d57600080fd5b506108286004803603810190610823919061293e565b611c64565b60405161083591906130c9565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089957506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c95750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600380546108df906132ee565b80601f016020809104026020016040519081016040528092919081815260200182805461090b906132ee565b80156109585780601f1061092d57610100808354040283529160200191610958565b820191906000526020600020905b81548152906001019060200180831161093b57829003601f168201915b5050505050905090565b600061096d82611c7c565b6109a3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e982611cdb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a51576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a70611da9565b73ffffffffffffffffffffffffffffffffffffffff1614610ad357610a9c81610a97611da9565b611ac5565b610ad2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610b8d611db1565b73ffffffffffffffffffffffffffffffffffffffff16610bab61131e565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf8906130a9565b60405180910390fd5b600181600954610c119190613188565b1015610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990613029565b60405180910390fd5b8060096000828254610c649190613188565b9250508190555050565b6000610c78611db9565b6002546001540303905090565b610c90838383611dbe565b505050565b600d5481565b610cb68383836040518060200160405280600081525061189b565b505050565b600a5481565b610cc9611db1565b73ffffffffffffffffffffffffffffffffffffffff16610ce761131e565b73ffffffffffffffffffffffffffffffffffffffff1614610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d34906130a9565b60405180910390fd5b818160109190610d4e92919061276c565b505050565b610d5b611db1565b73ffffffffffffffffffffffffffffffffffffffff16610d7961131e565b73ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906130a9565b60405180910390fd5b60007333e8fce4ee1eb405e59e93c9e19ad8d0ffd9bc4e73ffffffffffffffffffffffffffffffffffffffff1647604051610e0990612e90565b60006040518083038185875af1925050503d8060008114610e46576040519150601f19603f3d011682016040523d82523d6000602084013e610e4b565b606091505b5050905080610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613049565b60405180910390fd5b50565b6000610e9d82611cdb565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610f65611db1565b73ffffffffffffffffffffffffffffffffffffffff16610f8361131e565b73ffffffffffffffffffffffffffffffffffffffff1614610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906130a9565b60405180910390fd5b610fe36000612168565b565b610fed611db1565b73ffffffffffffffffffffffffffffffffffffffff1661100b61131e565b73ffffffffffffffffffffffffffffffffffffffff1614611061576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611058906130a9565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b611095611db1565b73ffffffffffffffffffffffffffffffffffffffff166110b361131e565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906130a9565b60405180910390fd5b80600c8190555050565b600f60009054906101000a900460ff16611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990612fc9565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790612f89565b60405180910390fd5b806111d9610c6e565b6111e39190613188565b600a541015611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90612f69565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600d54828261127a9190613188565b11156112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290612fa9565b60405180910390fd5b81816112c79190613188565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611314338361222c565b5050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61134f611db1565b73ffffffffffffffffffffffffffffffffffffffff1661136d61131e565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130a9565b60405180910390fd5b80600e8190555050565b6060600480546113dc906132ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611408906132ee565b80156114555780601f1061142a57610100808354040283529160200191611455565b820191906000526020600020905b81548152906001019060200180831161143857829003601f168201915b5050505050905090565b60116020528060005260406000206000915090505481565b600e5481565b600f60009054906101000a900460ff166114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390612fc9565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190612f89565b60405180910390fd5b80600e5461154891906131de565b34101561158a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158190613089565b60405180910390fd5b80611593610c6e565b61159d9190613188565b60095410156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890612fe9565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600c5482826116349190613188565b1115611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613009565b60405180910390fd5b6000821180156116875750600b548211155b6116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613069565b60405180910390fd5b81816116d29190613188565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061171f338361222c565b5050565b61172b611da9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611790576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061179d611da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661184a611da9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188f9190612f0c565b60405180910390a35050565b6118a6848484611dbe565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611908576118d18484848461224a565b611907576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611916611db1565b73ffffffffffffffffffffffffffffffffffffffff1661193461131e565b73ffffffffffffffffffffffffffffffffffffffff161461198a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611981906130a9565b60405180910390fd5b80600d8190555050565b61199c611db1565b73ffffffffffffffffffffffffffffffffffffffff166119ba61131e565b73ffffffffffffffffffffffffffffffffffffffff1614611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a07906130a9565b60405180910390fd5b80600b8190555050565b6060611a2582611c7c565b611a5b576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a656123aa565b9050600081511415611a865760405180602001604052806000815250611ab1565b80611a908461243c565b604051602001611aa1929190612e6c565b6040516020818303038152906040525b915050919050565b600b5481565b60095481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b611b74611db1565b73ffffffffffffffffffffffffffffffffffffffff16611b9261131e565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906130a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90612f49565b60405180910390fd5b611c6181612168565b50565b60126020528060005260406000206000915090505481565b600081611c87611db9565b11158015611c96575060015482105b8015611cd4575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b60008082905080611cea611db9565b11611d7257600154811015611d715760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611d6f575b6000811415611d65576005600083600190039350838152602001908152602001600020549050611d3a565b8092505050611da4565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b600090565b6000611dc982611cdb565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e30576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611e51611da9565b73ffffffffffffffffffffffffffffffffffffffff161480611e805750611e7f85611e7a611da9565b611ac5565b5b80611ec55750611e8e611da9565b73ffffffffffffffffffffffffffffffffffffffff16611ead84610962565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611efe576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f65576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f728585856001612496565b6007600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61206f8661249c565b1717600560008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156120f95760006001840190506000600560008381526020019081526020016000205414156120f75760015481146120f6578260056000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216185858560016124a6565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122468282604051806020016040528060008152506124ac565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612270611da9565b8786866040518563ffffffff1660e01b81526004016122929493929190612ec0565b602060405180830381600087803b1580156122ac57600080fd5b505af19250505080156122dd57506040513d601f19601f820116820180604052508101906122da9190612b2e565b60015b612357573d806000811461230d576040519150601f19603f3d011682016040523d82523d6000602084013e612312565b606091505b5060008151141561234f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060601080546123b9906132ee565b80601f01602080910402602001604051908101604052809291908181526020018280546123e5906132ee565b80156124325780601f1061240757610100808354040283529160200191612432565b820191906000526020600020905b81548152906001019060200180831161241557829003601f168201915b5050505050905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561248257600183039250600a81066030018353600a81049050612462565b508181036020830392508083525050919050565b50505050565b6000819050919050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561251a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612555576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125626000858386612496565b600160406001901b178302600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16125c760018514612762565b901b60a042901b6125d78661249c565b1717600560008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146126db575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461268b600087848060010195508761224a565b6126c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061261c5782600154146126d657600080fd5b612746565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106126dc575b81600181905550505061275c60008583866124a6565b50505050565b6000819050919050565b828054612778906132ee565b90600052602060002090601f01602090048101928261279a57600085556127e1565b82601f106127b357803560ff19168380011785556127e1565b828001600101855582156127e1579182015b828111156127e05782358255916020019190600101906127c5565b5b5090506127ee91906127f2565b5090565b5b8082111561280b5760008160009055506001016127f3565b5090565b600061282261281d84613109565b6130e4565b90508281526020810184848401111561283e5761283d6133ed565b5b6128498482856132ac565b509392505050565b60008135905061286081613694565b92915050565b600081359050612875816136ab565b92915050565b60008135905061288a816136c2565b92915050565b60008151905061289f816136c2565b92915050565b600082601f8301126128ba576128b96133e3565b5b81356128ca84826020860161280f565b91505092915050565b60008083601f8401126128e9576128e86133e3565b5b8235905067ffffffffffffffff811115612906576129056133de565b5b602083019150836001820283011115612922576129216133e8565b5b9250929050565b600081359050612938816136d9565b92915050565b600060208284031215612954576129536133f7565b5b600061296284828501612851565b91505092915050565b60008060408385031215612982576129816133f7565b5b600061299085828601612851565b92505060206129a185828601612851565b9150509250929050565b6000806000606084860312156129c4576129c36133f7565b5b60006129d286828701612851565b93505060206129e386828701612851565b92505060406129f486828701612929565b9150509250925092565b60008060008060808587031215612a1857612a176133f7565b5b6000612a2687828801612851565b9450506020612a3787828801612851565b9350506040612a4887828801612929565b925050606085013567ffffffffffffffff811115612a6957612a686133f2565b5b612a75878288016128a5565b91505092959194509250565b60008060408385031215612a9857612a976133f7565b5b6000612aa685828601612851565b9250506020612ab785828601612866565b9150509250929050565b60008060408385031215612ad857612ad76133f7565b5b6000612ae685828601612851565b9250506020612af785828601612929565b9150509250929050565b600060208284031215612b1757612b166133f7565b5b6000612b258482850161287b565b91505092915050565b600060208284031215612b4457612b436133f7565b5b6000612b5284828501612890565b91505092915050565b60008060208385031215612b7257612b716133f7565b5b600083013567ffffffffffffffff811115612b9057612b8f6133f2565b5b612b9c858286016128d3565b92509250509250929050565b600060208284031215612bbe57612bbd6133f7565b5b6000612bcc84828501612929565b91505092915050565b612bde81613238565b82525050565b612bed8161324a565b82525050565b6000612bfe8261313a565b612c088185613150565b9350612c188185602086016132bb565b612c21816133fc565b840191505092915050565b6000612c3782613145565b612c41818561316c565b9350612c518185602086016132bb565b612c5a816133fc565b840191505092915050565b6000612c7082613145565b612c7a818561317d565b9350612c8a8185602086016132bb565b80840191505092915050565b6000612ca360268361316c565b9150612cae8261340d565b604082019050919050565b6000612cc6601d8361316c565b9150612cd18261345c565b602082019050919050565b6000612ce9601c8361316c565b9150612cf482613485565b602082019050919050565b6000612d0c60288361316c565b9150612d17826134ae565b604082019050919050565b6000612d2f60178361316c565b9150612d3a826134fd565b602082019050919050565b6000612d5260188361316c565b9150612d5d82613526565b602082019050919050565b6000612d7560238361316c565b9150612d808261354f565b604082019050919050565b6000612d9860278361316c565b9150612da38261359e565b604082019050919050565b6000612dbb60108361316c565b9150612dc6826135ed565b602082019050919050565b6000612dde60148361316c565b9150612de982613616565b602082019050919050565b6000612e0160178361316c565b9150612e0c8261363f565b602082019050919050565b6000612e2460208361316c565b9150612e2f82613668565b602082019050919050565b6000612e47600083613161565b9150612e5282613691565b600082019050919050565b612e66816132a2565b82525050565b6000612e788285612c65565b9150612e848284612c65565b91508190509392505050565b6000612e9b82612e3a565b9150819050919050565b6000602082019050612eba6000830184612bd5565b92915050565b6000608082019050612ed56000830187612bd5565b612ee26020830186612bd5565b612eef6040830185612e5d565b8181036060830152612f018184612bf3565b905095945050505050565b6000602082019050612f216000830184612be4565b92915050565b60006020820190508181036000830152612f418184612c2c565b905092915050565b60006020820190508181036000830152612f6281612c96565b9050919050565b60006020820190508181036000830152612f8281612cb9565b9050919050565b60006020820190508181036000830152612fa281612cdc565b9050919050565b60006020820190508181036000830152612fc281612cff565b9050919050565b60006020820190508181036000830152612fe281612d22565b9050919050565b6000602082019050818103600083015261300281612d45565b9050919050565b6000602082019050818103600083015261302281612d68565b9050919050565b6000602082019050818103600083015261304281612d8b565b9050919050565b6000602082019050818103600083015261306281612dae565b9050919050565b6000602082019050818103600083015261308281612dd1565b9050919050565b600060208201905081810360008301526130a281612df4565b9050919050565b600060208201905081810360008301526130c281612e17565b9050919050565b60006020820190506130de6000830184612e5d565b92915050565b60006130ee6130ff565b90506130fa8282613320565b919050565b6000604051905090565b600067ffffffffffffffff821115613124576131236133af565b5b61312d826133fc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613193826132a2565b915061319e836132a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131d3576131d2613351565b5b828201905092915050565b60006131e9826132a2565b91506131f4836132a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322d5761322c613351565b5b828202905092915050565b600061324382613282565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132d95780820151818401526020810190506132be565b838111156132e8576000848401525b50505050565b6000600282049050600182168061330657607f821691505b6020821081141561331a57613319613380565b5b50919050565b613329826133fc565b810181811067ffffffffffffffff82111715613348576133476133af565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f47445a3a2045786365656473206d6178206672656520737570706c792e000000600082015250565b7f43616c6c65722063616e6e6f74206265206120636f6e74726163742e00000000600082015250565b7f47445a3a2045786365656473206d61782066726565206d696e7473207065722060008201527f6164647265737321000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f7420616374697665207965742e000000000000000000600082015250565b7f47445a3a2045786365656473206d617820737570706c792e0000000000000000600082015250565b7f47445a3a2045786365656473206d6178206d696e74732070657220616464726560008201527f7373210000000000000000000000000000000000000000000000000000000000602082015250565b7f537570706c792063616e6e6f742066616c6c2062656c6f77206d696e7465642060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b7f7472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c6964206d696e7420616d6f756e742e000000000000000000000000600082015250565b7f47445a3a20496e73756666696369656e742046756e642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b61369d81613238565b81146136a857600080fd5b50565b6136b48161324a565b81146136bf57600080fd5b50565b6136cb81613256565b81146136d657600080fd5b50565b6136e2816132a2565b81146136ed57600080fd5b5056fea2646970667358221220203aa448b0a4eff4a6048c92112df7961b4a0b8b7ffc90d164424e8e252a224664736f6c63430008070033697066733a2f2f516d5875387a556447687652417a325a317853516877556656667873743137484c48365878375633385a7359434a2f54686520547265617375726573206f6620416e6369656e74204567797074204f6666696369616c

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80638bc35c2f11610118578063bbb64319116100a0578063d5abeb011161006f578063d5abeb0114610745578063e985e9c514610770578063eb8d2444146107ad578063f2fde38b146107d8578063fbbf8cc3146108015761020f565b8063bbb643191461068b578063c6f6f216146106b4578063c87b56dd146106dd578063d3464cbd1461071a5761020f565b806396b10201116100e757806396b10201146105b5578063a035b1fe146105f2578063a0712d681461061d578063a22cb46514610639578063b88d4fde146106625761020f565b80638bc35c2f1461050b5780638da5cb5b1461053657806391b7f5ed1461056157806395d89b411461058a5761020f565b8063475133341161019b57806370a082311161016a57806370a082311461044e578063715018a61461048b5780637ba5e621146104a25780637bddd65b146104b95780637c928fe9146104e25761020f565b806347513334146103b357806355f804b3146103de5780635fd8c710146104075780636352211e146104115761020f565b80631141df20116101e25780631141df20146102e257806318160ddd1461030b57806323b872dd146103365780632e0fd6eb1461035f57806342842e0e1461038a5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612b01565b61083e565b6040516102489190612f0c565b60405180910390f35b34801561025d57600080fd5b506102666108d0565b6040516102739190612f27565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612ba8565b610962565b6040516102b09190612ea5565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190612ac1565b6109de565b005b3480156102ee57600080fd5b5061030960048036038101906103049190612ba8565b610b85565b005b34801561031757600080fd5b50610320610c6e565b60405161032d91906130c9565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906129ab565b610c85565b005b34801561036b57600080fd5b50610374610c95565b60405161038191906130c9565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac91906129ab565b610c9b565b005b3480156103bf57600080fd5b506103c8610cbb565b6040516103d591906130c9565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190612b5b565b610cc1565b005b61040f610d53565b005b34801561041d57600080fd5b5061043860048036038101906104339190612ba8565b610e92565b6040516104459190612ea5565b60405180910390f35b34801561045a57600080fd5b506104756004803603810190610470919061293e565b610ea4565b60405161048291906130c9565b60405180910390f35b34801561049757600080fd5b506104a0610f5d565b005b3480156104ae57600080fd5b506104b7610fe5565b005b3480156104c557600080fd5b506104e060048036038101906104db9190612ba8565b61108d565b005b3480156104ee57600080fd5b5061050960048036038101906105049190612ba8565b611113565b005b34801561051757600080fd5b50610520611318565b60405161052d91906130c9565b60405180910390f35b34801561054257600080fd5b5061054b61131e565b6040516105589190612ea5565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612ba8565b611347565b005b34801561059657600080fd5b5061059f6113cd565b6040516105ac9190612f27565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d7919061293e565b61145f565b6040516105e991906130c9565b60405180910390f35b3480156105fe57600080fd5b50610607611477565b60405161061491906130c9565b60405180910390f35b61063760048036038101906106329190612ba8565b61147d565b005b34801561064557600080fd5b50610660600480360381019061065b9190612a81565b611723565b005b34801561066e57600080fd5b50610689600480360381019061068491906129fe565b61189b565b005b34801561069757600080fd5b506106b260048036038101906106ad9190612ba8565b61190e565b005b3480156106c057600080fd5b506106db60048036038101906106d69190612ba8565b611994565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190612ba8565b611a1a565b6040516107119190612f27565b60405180910390f35b34801561072657600080fd5b5061072f611ab9565b60405161073c91906130c9565b60405180910390f35b34801561075157600080fd5b5061075a611abf565b60405161076791906130c9565b60405180910390f35b34801561077c57600080fd5b506107976004803603810190610792919061296b565b611ac5565b6040516107a49190612f0c565b60405180910390f35b3480156107b957600080fd5b506107c2611b59565b6040516107cf9190612f0c565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa919061293e565b611b6c565b005b34801561080d57600080fd5b506108286004803603810190610823919061293e565b611c64565b60405161083591906130c9565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089957506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c95750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600380546108df906132ee565b80601f016020809104026020016040519081016040528092919081815260200182805461090b906132ee565b80156109585780601f1061092d57610100808354040283529160200191610958565b820191906000526020600020905b81548152906001019060200180831161093b57829003601f168201915b5050505050905090565b600061096d82611c7c565b6109a3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e982611cdb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a51576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a70611da9565b73ffffffffffffffffffffffffffffffffffffffff1614610ad357610a9c81610a97611da9565b611ac5565b610ad2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610b8d611db1565b73ffffffffffffffffffffffffffffffffffffffff16610bab61131e565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf8906130a9565b60405180910390fd5b600181600954610c119190613188565b1015610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990613029565b60405180910390fd5b8060096000828254610c649190613188565b9250508190555050565b6000610c78611db9565b6002546001540303905090565b610c90838383611dbe565b505050565b600d5481565b610cb68383836040518060200160405280600081525061189b565b505050565b600a5481565b610cc9611db1565b73ffffffffffffffffffffffffffffffffffffffff16610ce761131e565b73ffffffffffffffffffffffffffffffffffffffff1614610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d34906130a9565b60405180910390fd5b818160109190610d4e92919061276c565b505050565b610d5b611db1565b73ffffffffffffffffffffffffffffffffffffffff16610d7961131e565b73ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906130a9565b60405180910390fd5b60007333e8fce4ee1eb405e59e93c9e19ad8d0ffd9bc4e73ffffffffffffffffffffffffffffffffffffffff1647604051610e0990612e90565b60006040518083038185875af1925050503d8060008114610e46576040519150601f19603f3d011682016040523d82523d6000602084013e610e4b565b606091505b5050905080610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613049565b60405180910390fd5b50565b6000610e9d82611cdb565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610f65611db1565b73ffffffffffffffffffffffffffffffffffffffff16610f8361131e565b73ffffffffffffffffffffffffffffffffffffffff1614610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906130a9565b60405180910390fd5b610fe36000612168565b565b610fed611db1565b73ffffffffffffffffffffffffffffffffffffffff1661100b61131e565b73ffffffffffffffffffffffffffffffffffffffff1614611061576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611058906130a9565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b611095611db1565b73ffffffffffffffffffffffffffffffffffffffff166110b361131e565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906130a9565b60405180910390fd5b80600c8190555050565b600f60009054906101000a900460ff16611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990612fc9565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790612f89565b60405180910390fd5b806111d9610c6e565b6111e39190613188565b600a541015611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90612f69565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600d54828261127a9190613188565b11156112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290612fa9565b60405180910390fd5b81816112c79190613188565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611314338361222c565b5050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61134f611db1565b73ffffffffffffffffffffffffffffffffffffffff1661136d61131e565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130a9565b60405180910390fd5b80600e8190555050565b6060600480546113dc906132ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611408906132ee565b80156114555780601f1061142a57610100808354040283529160200191611455565b820191906000526020600020905b81548152906001019060200180831161143857829003601f168201915b5050505050905090565b60116020528060005260406000206000915090505481565b600e5481565b600f60009054906101000a900460ff166114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390612fc9565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190612f89565b60405180910390fd5b80600e5461154891906131de565b34101561158a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158190613089565b60405180910390fd5b80611593610c6e565b61159d9190613188565b60095410156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890612fe9565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600c5482826116349190613188565b1115611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90613009565b60405180910390fd5b6000821180156116875750600b548211155b6116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613069565b60405180910390fd5b81816116d29190613188565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061171f338361222c565b5050565b61172b611da9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611790576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061179d611da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661184a611da9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188f9190612f0c565b60405180910390a35050565b6118a6848484611dbe565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611908576118d18484848461224a565b611907576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611916611db1565b73ffffffffffffffffffffffffffffffffffffffff1661193461131e565b73ffffffffffffffffffffffffffffffffffffffff161461198a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611981906130a9565b60405180910390fd5b80600d8190555050565b61199c611db1565b73ffffffffffffffffffffffffffffffffffffffff166119ba61131e565b73ffffffffffffffffffffffffffffffffffffffff1614611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a07906130a9565b60405180910390fd5b80600b8190555050565b6060611a2582611c7c565b611a5b576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a656123aa565b9050600081511415611a865760405180602001604052806000815250611ab1565b80611a908461243c565b604051602001611aa1929190612e6c565b6040516020818303038152906040525b915050919050565b600b5481565b60095481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b611b74611db1565b73ffffffffffffffffffffffffffffffffffffffff16611b9261131e565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906130a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90612f49565b60405180910390fd5b611c6181612168565b50565b60126020528060005260406000206000915090505481565b600081611c87611db9565b11158015611c96575060015482105b8015611cd4575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b60008082905080611cea611db9565b11611d7257600154811015611d715760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611d6f575b6000811415611d65576005600083600190039350838152602001908152602001600020549050611d3a565b8092505050611da4565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b600090565b6000611dc982611cdb565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e30576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611e51611da9565b73ffffffffffffffffffffffffffffffffffffffff161480611e805750611e7f85611e7a611da9565b611ac5565b5b80611ec55750611e8e611da9565b73ffffffffffffffffffffffffffffffffffffffff16611ead84610962565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611efe576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f65576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f728585856001612496565b6007600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61206f8661249c565b1717600560008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156120f95760006001840190506000600560008381526020019081526020016000205414156120f75760015481146120f6578260056000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216185858560016124a6565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122468282604051806020016040528060008152506124ac565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612270611da9565b8786866040518563ffffffff1660e01b81526004016122929493929190612ec0565b602060405180830381600087803b1580156122ac57600080fd5b505af19250505080156122dd57506040513d601f19601f820116820180604052508101906122da9190612b2e565b60015b612357573d806000811461230d576040519150601f19603f3d011682016040523d82523d6000602084013e612312565b606091505b5060008151141561234f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060601080546123b9906132ee565b80601f01602080910402602001604051908101604052809291908181526020018280546123e5906132ee565b80156124325780601f1061240757610100808354040283529160200191612432565b820191906000526020600020905b81548152906001019060200180831161241557829003601f168201915b5050505050905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561248257600183039250600a81066030018353600a81049050612462565b508181036020830392508083525050919050565b50505050565b6000819050919050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561251a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612555576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125626000858386612496565b600160406001901b178302600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16125c760018514612762565b901b60a042901b6125d78661249c565b1717600560008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146126db575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461268b600087848060010195508761224a565b6126c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061261c5782600154146126d657600080fd5b612746565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106126dc575b81600181905550505061275c60008583866124a6565b50505050565b6000819050919050565b828054612778906132ee565b90600052602060002090601f01602090048101928261279a57600085556127e1565b82601f106127b357803560ff19168380011785556127e1565b828001600101855582156127e1579182015b828111156127e05782358255916020019190600101906127c5565b5b5090506127ee91906127f2565b5090565b5b8082111561280b5760008160009055506001016127f3565b5090565b600061282261281d84613109565b6130e4565b90508281526020810184848401111561283e5761283d6133ed565b5b6128498482856132ac565b509392505050565b60008135905061286081613694565b92915050565b600081359050612875816136ab565b92915050565b60008135905061288a816136c2565b92915050565b60008151905061289f816136c2565b92915050565b600082601f8301126128ba576128b96133e3565b5b81356128ca84826020860161280f565b91505092915050565b60008083601f8401126128e9576128e86133e3565b5b8235905067ffffffffffffffff811115612906576129056133de565b5b602083019150836001820283011115612922576129216133e8565b5b9250929050565b600081359050612938816136d9565b92915050565b600060208284031215612954576129536133f7565b5b600061296284828501612851565b91505092915050565b60008060408385031215612982576129816133f7565b5b600061299085828601612851565b92505060206129a185828601612851565b9150509250929050565b6000806000606084860312156129c4576129c36133f7565b5b60006129d286828701612851565b93505060206129e386828701612851565b92505060406129f486828701612929565b9150509250925092565b60008060008060808587031215612a1857612a176133f7565b5b6000612a2687828801612851565b9450506020612a3787828801612851565b9350506040612a4887828801612929565b925050606085013567ffffffffffffffff811115612a6957612a686133f2565b5b612a75878288016128a5565b91505092959194509250565b60008060408385031215612a9857612a976133f7565b5b6000612aa685828601612851565b9250506020612ab785828601612866565b9150509250929050565b60008060408385031215612ad857612ad76133f7565b5b6000612ae685828601612851565b9250506020612af785828601612929565b9150509250929050565b600060208284031215612b1757612b166133f7565b5b6000612b258482850161287b565b91505092915050565b600060208284031215612b4457612b436133f7565b5b6000612b5284828501612890565b91505092915050565b60008060208385031215612b7257612b716133f7565b5b600083013567ffffffffffffffff811115612b9057612b8f6133f2565b5b612b9c858286016128d3565b92509250509250929050565b600060208284031215612bbe57612bbd6133f7565b5b6000612bcc84828501612929565b91505092915050565b612bde81613238565b82525050565b612bed8161324a565b82525050565b6000612bfe8261313a565b612c088185613150565b9350612c188185602086016132bb565b612c21816133fc565b840191505092915050565b6000612c3782613145565b612c41818561316c565b9350612c518185602086016132bb565b612c5a816133fc565b840191505092915050565b6000612c7082613145565b612c7a818561317d565b9350612c8a8185602086016132bb565b80840191505092915050565b6000612ca360268361316c565b9150612cae8261340d565b604082019050919050565b6000612cc6601d8361316c565b9150612cd18261345c565b602082019050919050565b6000612ce9601c8361316c565b9150612cf482613485565b602082019050919050565b6000612d0c60288361316c565b9150612d17826134ae565b604082019050919050565b6000612d2f60178361316c565b9150612d3a826134fd565b602082019050919050565b6000612d5260188361316c565b9150612d5d82613526565b602082019050919050565b6000612d7560238361316c565b9150612d808261354f565b604082019050919050565b6000612d9860278361316c565b9150612da38261359e565b604082019050919050565b6000612dbb60108361316c565b9150612dc6826135ed565b602082019050919050565b6000612dde60148361316c565b9150612de982613616565b602082019050919050565b6000612e0160178361316c565b9150612e0c8261363f565b602082019050919050565b6000612e2460208361316c565b9150612e2f82613668565b602082019050919050565b6000612e47600083613161565b9150612e5282613691565b600082019050919050565b612e66816132a2565b82525050565b6000612e788285612c65565b9150612e848284612c65565b91508190509392505050565b6000612e9b82612e3a565b9150819050919050565b6000602082019050612eba6000830184612bd5565b92915050565b6000608082019050612ed56000830187612bd5565b612ee26020830186612bd5565b612eef6040830185612e5d565b8181036060830152612f018184612bf3565b905095945050505050565b6000602082019050612f216000830184612be4565b92915050565b60006020820190508181036000830152612f418184612c2c565b905092915050565b60006020820190508181036000830152612f6281612c96565b9050919050565b60006020820190508181036000830152612f8281612cb9565b9050919050565b60006020820190508181036000830152612fa281612cdc565b9050919050565b60006020820190508181036000830152612fc281612cff565b9050919050565b60006020820190508181036000830152612fe281612d22565b9050919050565b6000602082019050818103600083015261300281612d45565b9050919050565b6000602082019050818103600083015261302281612d68565b9050919050565b6000602082019050818103600083015261304281612d8b565b9050919050565b6000602082019050818103600083015261306281612dae565b9050919050565b6000602082019050818103600083015261308281612dd1565b9050919050565b600060208201905081810360008301526130a281612df4565b9050919050565b600060208201905081810360008301526130c281612e17565b9050919050565b60006020820190506130de6000830184612e5d565b92915050565b60006130ee6130ff565b90506130fa8282613320565b919050565b6000604051905090565b600067ffffffffffffffff821115613124576131236133af565b5b61312d826133fc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613193826132a2565b915061319e836132a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131d3576131d2613351565b5b828201905092915050565b60006131e9826132a2565b91506131f4836132a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322d5761322c613351565b5b828202905092915050565b600061324382613282565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132d95780820151818401526020810190506132be565b838111156132e8576000848401525b50505050565b6000600282049050600182168061330657607f821691505b6020821081141561331a57613319613380565b5b50919050565b613329826133fc565b810181811067ffffffffffffffff82111715613348576133476133af565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f47445a3a2045786365656473206d6178206672656520737570706c792e000000600082015250565b7f43616c6c65722063616e6e6f74206265206120636f6e74726163742e00000000600082015250565b7f47445a3a2045786365656473206d61782066726565206d696e7473207065722060008201527f6164647265737321000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f7420616374697665207965742e000000000000000000600082015250565b7f47445a3a2045786365656473206d617820737570706c792e0000000000000000600082015250565b7f47445a3a2045786365656473206d6178206d696e74732070657220616464726560008201527f7373210000000000000000000000000000000000000000000000000000000000602082015250565b7f537570706c792063616e6e6f742066616c6c2062656c6f77206d696e7465642060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b7f7472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c6964206d696e7420616d6f756e742e000000000000000000000000600082015250565b7f47445a3a20496e73756666696369656e742046756e642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b61369d81613238565b81146136a857600080fd5b50565b6136b48161324a565b81146136bf57600080fd5b50565b6136cb81613256565b81146136d657600080fd5b50565b6136e2816132a2565b81146136ed57600080fd5b5056fea2646970667358221220203aa448b0a4eff4a6048c92112df7961b4a0b8b7ffc90d164424e8e252a224664736f6c63430008070033

Deployed Bytecode Sourcemap

43247:3657:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17922:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22935:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25003:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24463:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46213:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16976:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25889:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43548:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26130:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43375:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46440:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46676:225;;;:::i;:::-;;22724:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18601:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4038:103;;;;;;;;;;;;;:::i;:::-;;46121:84;;;;;;;;;;;;;:::i;:::-;;45869:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45110:545;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43493:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3387:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45663:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23104:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43917:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43608:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44348:754;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25279:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26386:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45991:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45757:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23279:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43438:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43318:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25658:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43672:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4296:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43975:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17922:615;18007:4;18322:10;18307:25;;:11;:25;;;;:102;;;;18399:10;18384:25;;:11;:25;;;;18307:102;:179;;;;18476:10;18461:25;;:11;:25;;;;18307:179;18287:199;;17922:615;;;:::o;22935:100::-;22989:13;23022:5;23015:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22935:100;:::o;25003:204::-;25071:7;25096:16;25104:7;25096;:16::i;:::-;25091:64;;25121:34;;;;;;;;;;;;;;25091:64;25175:15;:24;25191:7;25175:24;;;;;;;;;;;;;;;;;;;;;25168:31;;25003:204;;;:::o;24463:474::-;24536:13;24568:27;24587:7;24568:18;:27::i;:::-;24536:61;;24618:5;24612:11;;:2;:11;;;24608:48;;;24632:24;;;;;;;;;;;;;;24608:48;24696:5;24673:28;;:19;:17;:19::i;:::-;:28;;;24669:175;;24721:44;24738:5;24745:19;:17;:19::i;:::-;24721:16;:44::i;:::-;24716:128;;24793:35;;;;;;;;;;;;;;24716:128;24669:175;24883:2;24856:15;:24;24872:7;24856:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24921:7;24917:2;24901:28;;24910:5;24901:28;;;;;;;;;;;;24525:412;24463:474;;:::o;46213:219::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46324:1:::1;46313:7;46302:9;;:18;;;;:::i;:::-;:23;;46280:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46417:7;46404:9;;:20;;;;;;;:::i;:::-;;;;;;;;46213:219:::0;:::o;16976:315::-;17029:7;17257:15;:13;:15::i;:::-;17242:12;;17226:13;;:28;:46;17219:53;;16976:315;:::o;25889:170::-;26023:28;26033:4;26039:2;26043:7;26023:9;:28::i;:::-;25889:170;;;:::o;43548:47::-;;;;:::o;26130:185::-;26268:39;26285:4;26291:2;26295:7;26268:39;;;;;;;;;;;;:16;:39::i;:::-;26130:185;;;:::o;43375:50::-;;;;:::o;46440:106::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46531:7:::1;;46515:13;:23;;;;;;;:::i;:::-;;46440:106:::0;;:::o;46676:225::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46744:12:::1;43772:42;46762:26;;46810:21;46762:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46743:103;;;46865:7;46857:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;46730:171;46676:225::o:0;22724:144::-;22788:7;22831:27;22850:7;22831:18;:27::i;:::-;22808:52;;22724:144;;;:::o;18601:224::-;18665:7;18706:1;18689:19;;:5;:19;;;18685:60;;;18717:28;;;;;;;;;;;;;;18685:60;13940:13;18763:18;:25;18782:5;18763:25;;;;;;;;;;;;;;;;:54;18756:61;;18601:224;;;:::o;4038:103::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4103:30:::1;4130:1;4103:18;:30::i;:::-;4038:103::o:0;46121:84::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46185:12:::1;;;;;;;;;;;46184:13;46169:12;;:28;;;;;;;;;;;;;;;;;;46121:84::o:0;45869:114::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45968:7:::1;45942:23;:33;;;;45869:114:::0;:::o;45110:545::-;44205:12;;;;;;;;;;;44197:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44277:10;44264:23;;:9;:23;;;44256:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45239:9:::1;45223:13;:11;:13::i;:::-;:25;;;;:::i;:::-;45206:13;;:42;;45184:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;45316:25;45344:16;:28;45361:10;45344:28;;;;;;;;;;;;;;;;45316:56;;45438:27;;45425:9;45405:17;:29;;;;:::i;:::-;:60;;45383:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;45595:9;45575:17;:29;;;;:::i;:::-;45544:16;:28;45561:10;45544:28;;;;;;;;;;;;;;;:60;;;;45615:32;45625:10;45637:9;45615;:32::i;:::-;45173:482;45110:545:::0;:::o;43493:48::-;;;;:::o;3387:87::-;3433:7;3460:6;;;;;;;;;;;3453:13;;3387:87;:::o;45663:86::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45735:6:::1;45727:5;:14;;;;45663:86:::0;:::o;23104:104::-;23160:13;23193:7;23186:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23104:104;:::o;43917:51::-;;;;;;;;;;;;;;;;;:::o;43608:57::-;;;;:::o;44348:754::-;44205:12;;;;;;;;;;;44197:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44277:10;44264:23;;:9;:23;;;44256:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44469:9:::1;44461:5;;:17;;;;:::i;:::-;44448:9;:30;;44426:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;44591:9;44575:13;:11;:13::i;:::-;:25;;;;:::i;:::-;44562:9;;:38;;44540:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;44663:21;44687:12;:24;44700:10;44687:24;;;;;;;;;;;;;;;;44663:48;;44773:23;;44760:9;44744:13;:25;;;;:::i;:::-;:52;;44722:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;44904:1;44892:9;:13;:48;;;;;44922:18;;44909:9;:31;;44892:48;44870:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;45042:9;45026:13;:25;;;;:::i;:::-;44999:12;:24;45012:10;44999:24;;;;;;;;;;;;;;;:52;;;;45062:32;45072:10;45084:9;45062;:32::i;:::-;44415:687;44348:754:::0;:::o;25279:308::-;25390:19;:17;:19::i;:::-;25378:31;;:8;:31;;;25374:61;;;25418:17;;;;;;;;;;;;;;25374:61;25500:8;25448:18;:39;25467:19;:17;:19::i;:::-;25448:39;;;;;;;;;;;;;;;:49;25488:8;25448:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;25560:8;25524:55;;25539:19;:17;:19::i;:::-;25524:55;;;25570:8;25524:55;;;;;;:::i;:::-;;;;;;;;25279:308;;:::o;26386:396::-;26553:28;26563:4;26569:2;26573:7;26553:9;:28::i;:::-;26614:1;26596:2;:14;;;:19;26592:183;;26635:56;26666:4;26672:2;26676:7;26685:5;26635:30;:56::i;:::-;26630:145;;26719:40;;;;;;;;;;;;;;26630:145;26592:183;26386:396;;;;:::o;45991:122::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46098:7:::1;46068:27;:37;;;;45991:122:::0;:::o;45757:104::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45846:7:::1;45825:18;:28;;;;45757:104:::0;:::o;23279:318::-;23352:13;23383:16;23391:7;23383;:16::i;:::-;23378:59;;23408:29;;;;;;;;;;;;;;23378:59;23450:21;23474:10;:8;:10::i;:::-;23450:34;;23527:1;23508:7;23502:21;:26;;:87;;;;;;;;;;;;;;;;;23555:7;23564:18;23574:7;23564:9;:18::i;:::-;23538:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23502:87;23495:94;;;23279:318;;;:::o;43438:48::-;;;;:::o;43318:50::-;;;;:::o;25658:164::-;25755:4;25779:18;:25;25798:5;25779:25;;;;;;;;;;;;;;;:35;25805:8;25779:35;;;;;;;;;;;;;;;;;;;;;;;;;25772:42;;25658:164;;;;:::o;43672:50::-;;;;;;;;;;;;;:::o;4296:201::-;3618:12;:10;:12::i;:::-;3607:23;;:7;:5;:7::i;:::-;:23;;;3599:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4405:1:::1;4385:22;;:8;:22;;;;4377:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4461:28;4480:8;4461:18;:28::i;:::-;4296:201:::0;:::o;43975:47::-;;;;;;;;;;;;;;;;;:::o;27037:273::-;27094:4;27150:7;27131:15;:13;:15::i;:::-;:26;;:66;;;;;27184:13;;27174:7;:23;27131:66;:152;;;;;27282:1;14710:8;27235:17;:26;27253:7;27235:26;;;;;;;;;;;;:43;:48;27131:152;27111:172;;27037:273;;;:::o;20239:1129::-;20306:7;20326:12;20341:7;20326:22;;20409:4;20390:15;:13;:15::i;:::-;:23;20386:915;;20443:13;;20436:4;:20;20432:869;;;20481:14;20498:17;:23;20516:4;20498:23;;;;;;;;;;;;20481:40;;20614:1;14710:8;20587:6;:23;:28;20583:699;;;21106:113;21123:1;21113:6;:11;21106:113;;;21166:17;:25;21184:6;;;;;;;21166:25;;;;;;;;;;;;21157:34;;21106:113;;;21252:6;21245:13;;;;;;20583:699;20458:843;20432:869;20386:915;21329:31;;;;;;;;;;;;;;20239:1129;;;;:::o;41019:105::-;41079:7;41106:10;41099:17;;41019:105;:::o;2115:98::-;2168:7;2195:10;2188:17;;2115:98;:::o;16499:92::-;16555:7;16499:92;:::o;32276:2515::-;32391:27;32421;32440:7;32421:18;:27::i;:::-;32391:57;;32506:4;32465:45;;32481:19;32465:45;;;32461:86;;32519:28;;;;;;;;;;;;;;32461:86;32560:22;32609:4;32586:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;32630:43;32647:4;32653:19;:17;:19::i;:::-;32630:16;:43::i;:::-;32586:87;:147;;;;32714:19;:17;:19::i;:::-;32690:43;;:20;32702:7;32690:11;:20::i;:::-;:43;;;32586:147;32560:174;;32752:17;32747:66;;32778:35;;;;;;;;;;;;;;32747:66;32842:1;32828:16;;:2;:16;;;32824:52;;;32853:23;;;;;;;;;;;;;;32824:52;32889:43;32911:4;32917:2;32921:7;32930:1;32889:21;:43::i;:::-;33005:15;:24;33021:7;33005:24;;;;;;;;;;;;32998:31;;;;;;;;;;;33397:18;:24;33416:4;33397:24;;;;;;;;;;;;;;;;33395:26;;;;;;;;;;;;33466:18;:22;33485:2;33466:22;;;;;;;;;;;;;;;;33464:24;;;;;;;;;;;14992:8;14594:3;33847:15;:41;;33805:21;33823:2;33805:17;:21::i;:::-;:84;:128;33759:17;:26;33777:7;33759:26;;;;;;;;;;;:174;;;;34103:1;14992:8;34053:19;:46;:51;34049:626;;;34125:19;34157:1;34147:7;:11;34125:33;;34314:1;34280:17;:30;34298:11;34280:30;;;;;;;;;;;;:35;34276:384;;;34418:13;;34403:11;:28;34399:242;;34598:19;34565:17;:30;34583:11;34565:30;;;;;;;;;;;:52;;;;34399:242;34276:384;34106:569;34049:626;34722:7;34718:2;34703:27;;34712:4;34703:27;;;;;;;;;;;;34741:42;34762:4;34768:2;34772:7;34781:1;34741:20;:42::i;:::-;32380:2411;;32276:2515;;;:::o;4657:191::-;4731:16;4750:6;;;;;;;;;;;4731:25;;4776:8;4767:6;;:17;;;;;;;;;;;;;;;;;;4831:8;4800:40;;4821:8;4800:40;;;;;;;;;;;;4720:128;4657:191;:::o;27394:104::-;27463:27;27473:2;27477:8;27463:27;;;;;;;;;;;;:9;:27::i;:::-;27394:104;;:::o;38488:716::-;38651:4;38697:2;38672:45;;;38718:19;:17;:19::i;:::-;38739:4;38745:7;38754:5;38672:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38668:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38972:1;38955:6;:13;:18;38951:235;;;39001:40;;;;;;;;;;;;;;38951:235;39144:6;39138:13;39129:6;39125:2;39121:15;39114:38;38668:529;38841:54;;;38831:64;;;:6;:64;;;;38824:71;;;38488:716;;;;;;:::o;46554:114::-;46614:13;46647;46640:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46554:114;:::o;41230:1959::-;41287:17;41708:3;41701:4;41695:11;41691:21;41684:28;;41799:3;41793:4;41786:17;41905:3;42362:5;42492:1;42487:3;42483:11;42476:18;;42629:2;42623:4;42619:13;42615:2;42611:22;42606:3;42598:36;42670:2;42664:4;42660:13;42652:21;;42253:682;42689:4;42253:682;;;42864:1;42859:3;42855:11;42848:18;;42915:2;42909:4;42905:13;42901:2;42897:22;42892:3;42884:36;42785:2;42779:4;42775:13;42767:21;;42253:682;;;42257:431;42986:3;42981;42977:13;43101:2;43096:3;43092:12;43085:19;;43164:6;43159:3;43152:19;41326:1856;;41230:1959;;;:::o;39852:159::-;;;;;:::o;24024:148::-;24088:14;24149:5;24139:15;;24024:148;;;:::o;40670:158::-;;;;;:::o;27871:2236::-;27994:20;28017:13;;27994:36;;28059:1;28045:16;;:2;:16;;;28041:48;;;28070:19;;;;;;;;;;;;;;28041:48;28116:1;28104:8;:13;28100:44;;;28126:18;;;;;;;;;;;;;;28100:44;28157:61;28187:1;28191:2;28195:12;28209:8;28157:21;:61::i;:::-;28761:1;14077:2;28732:1;:25;;28731:31;28719:8;:44;28693:18;:22;28712:2;28693:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;14857:3;29162:29;29189:1;29177:8;:13;29162:14;:29::i;:::-;:56;;14594:3;29099:15;:41;;29057:21;29075:2;29057:17;:21::i;:::-;:84;:162;29006:17;:31;29024:12;29006:31;;;;;;;;;;;:213;;;;29236:20;29259:12;29236:35;;29286:11;29315:8;29300:12;:23;29286:37;;29362:1;29344:2;:14;;;:19;29340:635;;29384:313;29440:12;29436:2;29415:38;;29432:1;29415:38;;;;;;;;;;;;29481:69;29520:1;29524:2;29528:14;;;;;;29544:5;29481:30;:69::i;:::-;29476:174;;29586:40;;;;;;;;;;;;;;29476:174;29692:3;29677:12;:18;29384:313;;29778:12;29761:13;;:29;29757:43;;29792:8;;;29757:43;29340:635;;;29841:119;29897:14;;;;;;29893:2;29872:40;;29889:1;29872:40;;;;;;;;;;;;29955:3;29940:12;:18;29841:119;;29340:635;30005:12;29989:13;:28;;;;28470:1559;;30039:60;30068:1;30072:2;30076:12;30090:8;30039:20;:60::i;:::-;27983:2124;27871:2236;;;:::o;24259:142::-;24317:14;24378:5;24368:15;;24259:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:118::-;7060:24;7078:5;7060:24;:::i;:::-;7055:3;7048:37;6973:118;;:::o;7097:109::-;7178:21;7193:5;7178:21;:::i;:::-;7173:3;7166:34;7097:109;;:::o;7212:360::-;7298:3;7326:38;7358:5;7326:38;:::i;:::-;7380:70;7443:6;7438:3;7380:70;:::i;:::-;7373:77;;7459:52;7504:6;7499:3;7492:4;7485:5;7481:16;7459:52;:::i;:::-;7536:29;7558:6;7536:29;:::i;:::-;7531:3;7527:39;7520:46;;7302:270;7212:360;;;;:::o;7578:364::-;7666:3;7694:39;7727:5;7694:39;:::i;:::-;7749:71;7813:6;7808:3;7749:71;:::i;:::-;7742:78;;7829:52;7874:6;7869:3;7862:4;7855:5;7851:16;7829:52;:::i;:::-;7906:29;7928:6;7906:29;:::i;:::-;7901:3;7897:39;7890:46;;7670:272;7578:364;;;;:::o;7948:377::-;8054:3;8082:39;8115:5;8082:39;:::i;:::-;8137:89;8219:6;8214:3;8137:89;:::i;:::-;8130:96;;8235:52;8280:6;8275:3;8268:4;8261:5;8257:16;8235:52;:::i;:::-;8312:6;8307:3;8303:16;8296:23;;8058:267;7948:377;;;;:::o;8331:366::-;8473:3;8494:67;8558:2;8553:3;8494:67;:::i;:::-;8487:74;;8570:93;8659:3;8570:93;:::i;:::-;8688:2;8683:3;8679:12;8672:19;;8331:366;;;:::o;8703:::-;8845:3;8866:67;8930:2;8925:3;8866:67;:::i;:::-;8859:74;;8942:93;9031:3;8942:93;:::i;:::-;9060:2;9055:3;9051:12;9044:19;;8703:366;;;:::o;9075:::-;9217:3;9238:67;9302:2;9297:3;9238:67;:::i;:::-;9231:74;;9314:93;9403:3;9314:93;:::i;:::-;9432:2;9427:3;9423:12;9416:19;;9075:366;;;:::o;9447:::-;9589:3;9610:67;9674:2;9669:3;9610:67;:::i;:::-;9603:74;;9686:93;9775:3;9686:93;:::i;:::-;9804:2;9799:3;9795:12;9788:19;;9447:366;;;:::o;9819:::-;9961:3;9982:67;10046:2;10041:3;9982:67;:::i;:::-;9975:74;;10058:93;10147:3;10058:93;:::i;:::-;10176:2;10171:3;10167:12;10160:19;;9819:366;;;:::o;10191:::-;10333:3;10354:67;10418:2;10413:3;10354:67;:::i;:::-;10347:74;;10430:93;10519:3;10430:93;:::i;:::-;10548:2;10543:3;10539:12;10532:19;;10191:366;;;:::o;10563:::-;10705:3;10726:67;10790:2;10785:3;10726:67;:::i;:::-;10719:74;;10802:93;10891:3;10802:93;:::i;:::-;10920:2;10915:3;10911:12;10904:19;;10563:366;;;:::o;10935:::-;11077:3;11098:67;11162:2;11157:3;11098:67;:::i;:::-;11091:74;;11174:93;11263:3;11174:93;:::i;:::-;11292:2;11287:3;11283:12;11276:19;;10935:366;;;:::o;11307:::-;11449:3;11470:67;11534:2;11529:3;11470:67;:::i;:::-;11463:74;;11546:93;11635:3;11546:93;:::i;:::-;11664:2;11659:3;11655:12;11648:19;;11307:366;;;:::o;11679:::-;11821:3;11842:67;11906:2;11901:3;11842:67;:::i;:::-;11835:74;;11918:93;12007:3;11918:93;:::i;:::-;12036:2;12031:3;12027:12;12020:19;;11679:366;;;:::o;12051:::-;12193:3;12214:67;12278:2;12273:3;12214:67;:::i;:::-;12207:74;;12290:93;12379:3;12290:93;:::i;:::-;12408:2;12403:3;12399:12;12392:19;;12051:366;;;:::o;12423:::-;12565:3;12586:67;12650:2;12645:3;12586:67;:::i;:::-;12579:74;;12662:93;12751:3;12662:93;:::i;:::-;12780:2;12775:3;12771:12;12764:19;;12423:366;;;:::o;12795:398::-;12954:3;12975:83;13056:1;13051:3;12975:83;:::i;:::-;12968:90;;13067:93;13156:3;13067:93;:::i;:::-;13185:1;13180:3;13176:11;13169:18;;12795:398;;;:::o;13199:118::-;13286:24;13304:5;13286:24;:::i;:::-;13281:3;13274:37;13199:118;;:::o;13323:435::-;13503:3;13525:95;13616:3;13607:6;13525:95;:::i;:::-;13518:102;;13637:95;13728:3;13719:6;13637:95;:::i;:::-;13630:102;;13749:3;13742:10;;13323:435;;;;;:::o;13764:379::-;13948:3;13970:147;14113:3;13970:147;:::i;:::-;13963:154;;14134:3;14127:10;;13764:379;;;:::o;14149:222::-;14242:4;14280:2;14269:9;14265:18;14257:26;;14293:71;14361:1;14350:9;14346:17;14337:6;14293:71;:::i;:::-;14149:222;;;;:::o;14377:640::-;14572:4;14610:3;14599:9;14595:19;14587:27;;14624:71;14692:1;14681:9;14677:17;14668:6;14624:71;:::i;:::-;14705:72;14773:2;14762:9;14758:18;14749:6;14705:72;:::i;:::-;14787;14855:2;14844:9;14840:18;14831:6;14787:72;:::i;:::-;14906:9;14900:4;14896:20;14891:2;14880:9;14876:18;14869:48;14934:76;15005:4;14996:6;14934:76;:::i;:::-;14926:84;;14377:640;;;;;;;:::o;15023:210::-;15110:4;15148:2;15137:9;15133:18;15125:26;;15161:65;15223:1;15212:9;15208:17;15199:6;15161:65;:::i;:::-;15023:210;;;;:::o;15239:313::-;15352:4;15390:2;15379:9;15375:18;15367:26;;15439:9;15433:4;15429:20;15425:1;15414:9;15410:17;15403:47;15467:78;15540:4;15531:6;15467:78;:::i;:::-;15459:86;;15239:313;;;;:::o;15558:419::-;15724:4;15762:2;15751:9;15747:18;15739:26;;15811:9;15805:4;15801:20;15797:1;15786:9;15782:17;15775:47;15839:131;15965:4;15839:131;:::i;:::-;15831:139;;15558:419;;;:::o;15983:::-;16149:4;16187:2;16176:9;16172:18;16164:26;;16236:9;16230:4;16226:20;16222:1;16211:9;16207:17;16200:47;16264:131;16390:4;16264:131;:::i;:::-;16256:139;;15983:419;;;:::o;16408:::-;16574:4;16612:2;16601:9;16597:18;16589:26;;16661:9;16655:4;16651:20;16647:1;16636:9;16632:17;16625:47;16689:131;16815:4;16689:131;:::i;:::-;16681:139;;16408:419;;;:::o;16833:::-;16999:4;17037:2;17026:9;17022:18;17014:26;;17086:9;17080:4;17076:20;17072:1;17061:9;17057:17;17050:47;17114:131;17240:4;17114:131;:::i;:::-;17106:139;;16833:419;;;:::o;17258:::-;17424:4;17462:2;17451:9;17447:18;17439:26;;17511:9;17505:4;17501:20;17497:1;17486:9;17482:17;17475:47;17539:131;17665:4;17539:131;:::i;:::-;17531:139;;17258:419;;;:::o;17683:::-;17849:4;17887:2;17876:9;17872:18;17864:26;;17936:9;17930:4;17926:20;17922:1;17911:9;17907:17;17900:47;17964:131;18090:4;17964:131;:::i;:::-;17956:139;;17683:419;;;:::o;18108:::-;18274:4;18312:2;18301:9;18297:18;18289:26;;18361:9;18355:4;18351:20;18347:1;18336:9;18332:17;18325:47;18389:131;18515:4;18389:131;:::i;:::-;18381:139;;18108:419;;;:::o;18533:::-;18699:4;18737:2;18726:9;18722:18;18714:26;;18786:9;18780:4;18776:20;18772:1;18761:9;18757:17;18750:47;18814:131;18940:4;18814:131;:::i;:::-;18806:139;;18533:419;;;:::o;18958:::-;19124:4;19162:2;19151:9;19147:18;19139:26;;19211:9;19205:4;19201:20;19197:1;19186:9;19182:17;19175:47;19239:131;19365:4;19239:131;:::i;:::-;19231:139;;18958:419;;;:::o;19383:::-;19549:4;19587:2;19576:9;19572:18;19564:26;;19636:9;19630:4;19626:20;19622:1;19611:9;19607:17;19600:47;19664:131;19790:4;19664:131;:::i;:::-;19656:139;;19383:419;;;:::o;19808:::-;19974:4;20012:2;20001:9;19997:18;19989:26;;20061:9;20055:4;20051:20;20047:1;20036:9;20032:17;20025:47;20089:131;20215:4;20089:131;:::i;:::-;20081:139;;19808:419;;;:::o;20233:::-;20399:4;20437:2;20426:9;20422:18;20414:26;;20486:9;20480:4;20476:20;20472:1;20461:9;20457:17;20450:47;20514:131;20640:4;20514:131;:::i;:::-;20506:139;;20233:419;;;:::o;20658:222::-;20751:4;20789:2;20778:9;20774:18;20766:26;;20802:71;20870:1;20859:9;20855:17;20846:6;20802:71;:::i;:::-;20658:222;;;;:::o;20886:129::-;20920:6;20947:20;;:::i;:::-;20937:30;;20976:33;21004:4;20996:6;20976:33;:::i;:::-;20886:129;;;:::o;21021:75::-;21054:6;21087:2;21081:9;21071:19;;21021:75;:::o;21102:307::-;21163:4;21253:18;21245:6;21242:30;21239:56;;;21275:18;;:::i;:::-;21239:56;21313:29;21335:6;21313:29;:::i;:::-;21305:37;;21397:4;21391;21387:15;21379:23;;21102:307;;;:::o;21415:98::-;21466:6;21500:5;21494:12;21484:22;;21415:98;;;:::o;21519:99::-;21571:6;21605:5;21599:12;21589:22;;21519:99;;;:::o;21624:168::-;21707:11;21741:6;21736:3;21729:19;21781:4;21776:3;21772:14;21757:29;;21624:168;;;;:::o;21798:147::-;21899:11;21936:3;21921:18;;21798:147;;;;:::o;21951:169::-;22035:11;22069:6;22064:3;22057:19;22109:4;22104:3;22100:14;22085:29;;21951:169;;;;:::o;22126:148::-;22228:11;22265:3;22250:18;;22126:148;;;;:::o;22280:305::-;22320:3;22339:20;22357:1;22339:20;:::i;:::-;22334:25;;22373:20;22391:1;22373:20;:::i;:::-;22368:25;;22527:1;22459:66;22455:74;22452:1;22449:81;22446:107;;;22533:18;;:::i;:::-;22446:107;22577:1;22574;22570:9;22563:16;;22280:305;;;;:::o;22591:348::-;22631:7;22654:20;22672:1;22654:20;:::i;:::-;22649:25;;22688:20;22706:1;22688:20;:::i;:::-;22683:25;;22876:1;22808:66;22804:74;22801:1;22798:81;22793:1;22786:9;22779:17;22775:105;22772:131;;;22883:18;;:::i;:::-;22772:131;22931:1;22928;22924:9;22913:20;;22591:348;;;;:::o;22945:96::-;22982:7;23011:24;23029:5;23011:24;:::i;:::-;23000:35;;22945:96;;;:::o;23047:90::-;23081:7;23124:5;23117:13;23110:21;23099:32;;23047:90;;;:::o;23143:149::-;23179:7;23219:66;23212:5;23208:78;23197:89;;23143:149;;;:::o;23298:126::-;23335:7;23375:42;23368:5;23364:54;23353:65;;23298:126;;;:::o;23430:77::-;23467:7;23496:5;23485:16;;23430:77;;;:::o;23513:154::-;23597:6;23592:3;23587;23574:30;23659:1;23650:6;23645:3;23641:16;23634:27;23513:154;;;:::o;23673:307::-;23741:1;23751:113;23765:6;23762:1;23759:13;23751:113;;;23850:1;23845:3;23841:11;23835:18;23831:1;23826:3;23822:11;23815:39;23787:2;23784:1;23780:10;23775:15;;23751:113;;;23882:6;23879:1;23876:13;23873:101;;;23962:1;23953:6;23948:3;23944:16;23937:27;23873:101;23722:258;23673:307;;;:::o;23986:320::-;24030:6;24067:1;24061:4;24057:12;24047:22;;24114:1;24108:4;24104:12;24135:18;24125:81;;24191:4;24183:6;24179:17;24169:27;;24125:81;24253:2;24245:6;24242:14;24222:18;24219:38;24216:84;;;24272:18;;:::i;:::-;24216:84;24037:269;23986:320;;;:::o;24312:281::-;24395:27;24417:4;24395:27;:::i;:::-;24387:6;24383:40;24525:6;24513:10;24510:22;24489:18;24477:10;24474:34;24471:62;24468:88;;;24536:18;;:::i;:::-;24468:88;24576:10;24572:2;24565:22;24355:238;24312:281;;:::o;24599:180::-;24647:77;24644:1;24637:88;24744:4;24741:1;24734:15;24768:4;24765:1;24758:15;24785:180;24833:77;24830:1;24823:88;24930:4;24927:1;24920:15;24954:4;24951:1;24944:15;24971:180;25019:77;25016:1;25009:88;25116:4;25113:1;25106:15;25140:4;25137:1;25130:15;25157:117;25266:1;25263;25256:12;25280:117;25389:1;25386;25379:12;25403:117;25512:1;25509;25502:12;25526:117;25635:1;25632;25625:12;25649:117;25758:1;25755;25748:12;25772:117;25881:1;25878;25871:12;25895:102;25936:6;25987:2;25983:7;25978:2;25971:5;25967:14;25963:28;25953:38;;25895:102;;;:::o;26003:225::-;26143:34;26139:1;26131:6;26127:14;26120:58;26212:8;26207:2;26199:6;26195:15;26188:33;26003:225;:::o;26234:179::-;26374:31;26370:1;26362:6;26358:14;26351:55;26234:179;:::o;26419:178::-;26559:30;26555:1;26547:6;26543:14;26536:54;26419:178;:::o;26603:227::-;26743:34;26739:1;26731:6;26727:14;26720:58;26812:10;26807:2;26799:6;26795:15;26788:35;26603:227;:::o;26836:173::-;26976:25;26972:1;26964:6;26960:14;26953:49;26836:173;:::o;27015:174::-;27155:26;27151:1;27143:6;27139:14;27132:50;27015:174;:::o;27195:222::-;27335:34;27331:1;27323:6;27319:14;27312:58;27404:5;27399:2;27391:6;27387:15;27380:30;27195:222;:::o;27423:226::-;27563:34;27559:1;27551:6;27547:14;27540:58;27632:9;27627:2;27619:6;27615:15;27608:34;27423:226;:::o;27655:166::-;27795:18;27791:1;27783:6;27779:14;27772:42;27655:166;:::o;27827:170::-;27967:22;27963:1;27955:6;27951:14;27944:46;27827:170;:::o;28003:173::-;28143:25;28139:1;28131:6;28127:14;28120:49;28003:173;:::o;28182:182::-;28322:34;28318:1;28310:6;28306:14;28299:58;28182:182;:::o;28370:114::-;;:::o;28490:122::-;28563:24;28581:5;28563:24;:::i;:::-;28556:5;28553:35;28543:63;;28602:1;28599;28592:12;28543:63;28490:122;:::o;28618:116::-;28688:21;28703:5;28688:21;:::i;:::-;28681:5;28678:32;28668:60;;28724:1;28721;28714:12;28668:60;28618:116;:::o;28740:120::-;28812:23;28829:5;28812:23;:::i;:::-;28805:5;28802:34;28792:62;;28850:1;28847;28840:12;28792:62;28740:120;:::o;28866:122::-;28939:24;28957:5;28939:24;:::i;:::-;28932:5;28929:35;28919:63;;28978:1;28975;28968:12;28919:63;28866:122;:::o

Swarm Source

ipfs://203aa448b0a4eff4a6048c92112df7961b4a0b8b7ffc90d164424e8e252a2246
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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