ETH Price: $3,386.03 (-1.50%)
Gas: 3 Gwei

Token

Cryptobots Presale Mint Pass (CPMP)
 

Overview

Max Total Supply

670 CPMP

Holders

101

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
jlieberman.eth
0xe757970b801e5b99ab24c5CD9b5152234Cff3001
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:
MintingPass

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 11: MintingPass.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

import "./ERC1155.sol";
import "./Ownable.sol";
import "./Strings.sol";

contract MintingPass is ERC1155, Ownable {
    struct MintingPassData {
        uint amount;
        uint minted;
        uint rate;
    }

    MintingPassData[] public mintingPasses;

    address payable public wallet;
    bool public isPaused = true;

    // Contract name
    string public name = "Cryptobots Presale Mint Pass";
    // Contract symbol
    string public symbol = "CPMP";

    constructor(address payable _wallet, string memory _uri) ERC1155(_uri) {
        require(_wallet != address(0), "MintingPass::constructor: _wallet address is 0");

        wallet = _wallet;

        addMintingPass(300, 0.03 ether);
        addMintingPass(150, 0.06 ether);
        addMintingPass(100, 0.09 ether);
        addMintingPass(75, 0.15 ether);
        addMintingPass(30, 0.3 ether);
        addMintingPass(15, 0.9 ether);
    }

    function mint(uint256 passId, uint256 amount) public payable returns (bool) {
        require(!isPaused, "MintingPass::mint: contract is paused");
        require(passId < mintingPasses.length, "MintingPass::mint: mintingPassId does not exist");
        require(msg.value == mintingPasses[passId].rate * amount, "MintingPass::mint: wrong ether amount");

        mintingPasses[passId].minted += amount;
        require(mintingPasses[passId].minted <= mintingPasses[passId].amount, "MintingPass::mint: not enough supply");

        _mint(msg.sender, passId, amount, "");

        wallet.transfer(msg.value);

        return true;
    }

    function _setPause(bool pause) external onlyOwner returns (bool) {
        isPaused = pause;

        return true;
    }

    function _setNewURI(string memory _newUri) external onlyOwner returns (bool) {
        _setURI(_newUri);

        return true;
    }

    function uri(uint256 _id) public view override returns (string memory) {
        return string(abi.encodePacked(super.uri(_id), Strings.toString(_id)));
    }

    function _setWallet(address payable _wallet) external onlyOwner returns (bool) {
        wallet = _wallet;

        return true;
    }

    function _setMintingPassData(uint passId, uint amount, uint rate) external onlyOwner returns (bool) {
        mintingPasses[passId].amount = amount;
        mintingPasses[passId].rate = rate;

        return true;
    }

    // rate in wei
    function _addMintingPasses(uint[] calldata amounts, uint[] calldata rates) public onlyOwner returns (bool) {
        require(amounts.length == rates.length, 'MintingPass::addMintingPasses: amounts length must be equal rates length');

        for(uint i = 0; i < amounts.length; i++) {
            addMintingPass(amounts[i], rates[i]);
        }

        return true;
    }

    function addMintingPass(uint amount, uint rate) internal returns (bool) {
        MintingPassData memory pass = MintingPassData({amount: amount, minted: 0, rate: rate});
        mintingPasses.push(pass);

        return true;
    }

    function getAllMintingPasses() public view returns (MintingPassData[] memory) {
        return mintingPasses;
    }

    function getMintingPassesLength() public view returns (uint) {
        return mintingPasses.length;
    }
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 11: Context.sol
// SPDX-License-Identifier: MIT
// 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 3 of 11: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 4 of 11: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 11: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 6 of 11: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 7 of 11: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 8 of 11: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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 11 of 11: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"},{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"name":"_addMintingPasses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"passId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"_setMintingPassData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newUri","type":"string"}],"name":"_setNewURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"pause","type":"bool"}],"name":"_setPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"}],"name":"_setWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMintingPasses","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"internalType":"struct MintingPass.MintingPassData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintingPassesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"passId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintingPasses","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"uint256","name":"rate","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6005805460ff60a01b1916600160a01b17905560c0604052601c60808190527f43727970746f626f74732050726573616c65204d696e7420506173730000000060a0908152620000539160069190620004e1565b5060408051808201909152600480825263043504d560e41b60209092019182526200008191600791620004e1565b503480156200008f57600080fd5b5060405162002c2838038062002c28833981016040819052620000b2916200059d565b80620000be8162000476565b50620000ca336200048f565b6001600160a01b0382166200013c5760405162461bcd60e51b815260206004820152602e60248201527f4d696e74696e67506173733a3a636f6e7374727563746f723a205f77616c6c6560448201526d074206164647265737320697320360941b606482015260840160405180910390fd5b600580546001600160a01b0319166001600160a01b038416179055620001da61012c666a94d74f43000060408051606081018252928352600060208401818152918401928352600480546001808201835591909252935160008051602062002c08833981519152600390920291820155905160008051602062002bc8833981519152820155905160008051602062002be88339815191529091015590565b506200025d609666d529ae9e86000060408051606081018252928352600060208401818152918401928352600480546001808201835591909252935160008051602062002c08833981519152600390920291820155905160008051602062002bc8833981519152820155905160008051602062002be88339815191529091015590565b50620002e1606467013fbe85edc9000060408051606081018252928352600060208401818152918401928352600480546001808201835591909252935160008051602062002c08833981519152600390920291820155905160008051602062002bc8833981519152820155905160008051602062002be88339815191529091015590565b5062000365604b670214e8348c4f000060408051606081018252928352600060208401818152918401928352600480546001808201835591909252935160008051602062002c08833981519152600390920291820155905160008051602062002bc8833981519152820155905160008051602062002be88339815191529091015590565b50620003e9601e670429d069189e000060408051606081018252928352600060208401818152918401928352600480546001808201835591909252935160008051602062002c08833981519152600390920291820155905160008051602062002bc8833981519152820155905160008051602062002be88339815191529091015590565b506200046d600f670c7d713b49da000060408051606081018252928352600060208401818152918401928352600480546001808201835591909252935160008051602062002c08833981519152600390920291820155905160008051602062002bc8833981519152820155905160008051602062002be88339815191529091015590565b505050620006da565b80516200048b906002906020840190620004e1565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620004ef906200069d565b90600052602060002090601f0160209004810192826200051357600085556200055e565b82601f106200052e57805160ff19168380011785556200055e565b828001600101855582156200055e579182015b828111156200055e57825182559160200191906001019062000541565b506200056c92915062000570565b5090565b5b808211156200056c576000815560010162000571565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215620005b157600080fd5b82516001600160a01b0381168114620005c957600080fd5b602084810151919350906001600160401b0380821115620005e957600080fd5b818601915086601f830112620005fe57600080fd5b81518181111562000613576200061362000587565b604051601f8201601f19908116603f011681019083821181831017156200063e576200063e62000587565b8160405282815289868487010111156200065757600080fd5b600093505b828410156200067b57848401860151818501870152928501926200065c565b828411156200068d5760008684830101525b8096505050505050509250929050565b600181811c90821680620006b257607f821691505b60208210811415620006d457634e487b7160e01b600052602260045260246000fd5b50919050565b6124de80620006ea6000396000f3fe60806040526004361061014a5760003560e01c8063715018a6116100b6578063c8b325341161006f578063c8b32534146103d4578063e3442a22146103e9578063e985e9c514610409578063f242432a14610452578063f2fde38b14610472578063f3f48df01461049257600080fd5b8063715018a6146103105780638da5cb5b1461032557806395d89b4114610343578063a22cb46514610358578063b040505414610378578063b187bd26146103b357600080fd5b80632eb2c2d6116101085780632eb2c2d6146102295780634e1273f41461024b578063521eb2731461027857806369cc2731146102b05780636a016710146102d05780636b088bbe146102f057600080fd5b8062fdd58e1461014f57806301ffc9a71461018257806306fdde03146101b25780630e89341c146101d45780631b2ef1ca146101f4578063212a6ce014610207575b600080fd5b34801561015b57600080fd5b5061016f61016a3660046119f7565b6104b2565b6040519081526020015b60405180910390f35b34801561018e57600080fd5b506101a261019d366004611a39565b610549565b6040519015158152602001610179565b3480156101be57600080fd5b506101c761059b565b6040516101799190611ab9565b3480156101e057600080fd5b506101c76101ef366004611acc565b610629565b6101a2610202366004611ae5565b610664565b34801561021357600080fd5b5061021c610900565b6040516101799190611b07565b34801561023557600080fd5b50610249610244366004611cb6565b61097d565b005b34801561025757600080fd5b5061026b610266366004611d64565b610a14565b6040516101799190611e6c565b34801561028457600080fd5b50600554610298906001600160a01b031681565b6040516001600160a01b039091168152602001610179565b3480156102bc57600080fd5b506101a26102cb366004611e8f565b610b3e565b3480156102dc57600080fd5b506101a26102eb366004611eaa565b610b8b565b3480156102fc57600080fd5b506101a261030b366004611ed6565b610c13565b34801561031c57600080fd5b50610249610c65565b34801561033157600080fd5b506003546001600160a01b0316610298565b34801561034f57600080fd5b506101c7610c9b565b34801561036457600080fd5b50610249610373366004611ef3565b610ca8565b34801561038457600080fd5b50610398610393366004611acc565b610cb7565b60408051938452602084019290925290820152606001610179565b3480156103bf57600080fd5b506005546101a290600160a01b900460ff1681565b3480156103e057600080fd5b5060045461016f565b3480156103f557600080fd5b506101a2610404366004611f74565b610cea565b34801561041557600080fd5b506101a2610424366004611fe0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561045e57600080fd5b5061024961046d366004612019565b610ea3565b34801561047e57600080fd5b5061024961048d366004611ed6565b610f2a565b34801561049e57600080fd5b506101a26104ad366004612082565b610fc5565b60006001600160a01b0383166105235760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061057a57506001600160e01b031982166303a24d0760e21b145b8061059557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600680546105a8906120cb565b80601f01602080910402602001604051908101604052809291908181526020018280546105d4906120cb565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b505050505081565b606061063482611003565b61063d83611097565b60405160200161064e929190612106565b6040516020818303038152906040529050919050565b600554600090600160a01b900460ff16156106cf5760405162461bcd60e51b815260206004820152602560248201527f4d696e74696e67506173733a3a6d696e743a20636f6e74726163742069732070604482015264185d5cd95960da1b606482015260840161051a565b60045483106107385760405162461bcd60e51b815260206004820152602f60248201527f4d696e74696e67506173733a3a6d696e743a206d696e74696e6750617373496460448201526e08191bd95cc81b9bdd08195e1a5cdd608a1b606482015260840161051a565b816004848154811061074c5761074c612135565b9060005260206000209060030201600201546107689190612161565b34146107c45760405162461bcd60e51b815260206004820152602560248201527f4d696e74696e67506173733a3a6d696e743a2077726f6e6720657468657220616044820152641b5bdd5b9d60da1b606482015260840161051a565b81600484815481106107d8576107d8612135565b906000526020600020906003020160010160008282546107f89190612180565b9091555050600480548490811061081157610811612135565b9060005260206000209060030201600001546004848154811061083657610836612135565b90600052602060002090600302016001015411156108a25760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e67506173733a3a6d696e743a206e6f7420656e6f75676820737560448201526370706c7960e01b606482015260840161051a565b6108bd3384846040518060200160405280600081525061119d565b6005546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156108f6573d6000803e3d6000fd5b5060019392505050565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156109745783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610924565b50505050905090565b6001600160a01b03851633148061099957506109998533610424565b610a005760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161051a565b610a0d85858585856112a7565b5050505050565b60608151835114610a795760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161051a565b6000835167ffffffffffffffff811115610a9557610a95611b60565b604051908082528060200260200182016040528015610abe578160200160208202803683370190505b50905060005b8451811015610b3657610b09858281518110610ae257610ae2612135565b6020026020010151858381518110610afc57610afc612135565b60200260200101516104b2565b828281518110610b1b57610b1b612135565b6020908102919091010152610b2f81612198565b9050610ac4565b509392505050565b6003546000906001600160a01b03163314610b6b5760405162461bcd60e51b815260040161051a906121b3565b506005805460ff60a01b1916600160a01b8315150217905560015b919050565b6003546000906001600160a01b03163314610bb85760405162461bcd60e51b815260040161051a906121b3565b8260048581548110610bcc57610bcc612135565b9060005260206000209060030201600001819055508160048581548110610bf557610bf5612135565b60009182526020909120600260039092020101555060019392505050565b6003546000906001600160a01b03163314610c405760405162461bcd60e51b815260040161051a906121b3565b50600580546001600160a01b0383166001600160a01b03199091161790556001919050565b6003546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161051a906121b3565b610c996000611484565b565b600780546105a8906120cb565b610cb33383836114d6565b5050565b60048181548110610cc757600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b6003546000906001600160a01b03163314610d175760405162461bcd60e51b815260040161051a906121b3565b838214610d9d5760405162461bcd60e51b815260206004820152604860248201527f4d696e74696e67506173733a3a6164644d696e74696e675061737365733a206160448201527f6d6f756e7473206c656e677468206d75737420626520657175616c20726174656064820152670e640d8cadccee8d60c31b608482015260a40161051a565b60005b84811015610e9757610e84868683818110610dbd57610dbd612135565b90506020020135858584818110610dd657610dd6612135565b905060200201356040805160608101825292835260006020840181815291840192835260048054600180820183559190925293517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b60039092029182015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d9091015590565b5080610e8f81612198565b915050610da0565b50600195945050505050565b6001600160a01b038516331480610ebf5750610ebf8533610424565b610f1d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161051a565b610a0d85858585856115b7565b6003546001600160a01b03163314610f545760405162461bcd60e51b815260040161051a906121b3565b6001600160a01b038116610fb95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051a565b610fc281611484565b50565b6003546000906001600160a01b03163314610ff25760405162461bcd60e51b815260040161051a906121b3565b610ffb826116d4565b506001919050565b606060028054611012906120cb565b80601f016020809104026020016040519081016040528092919081815260200182805461103e906120cb565b801561108b5780601f106110605761010080835404028352916020019161108b565b820191906000526020600020905b81548152906001019060200180831161106e57829003601f168201915b50505050509050919050565b6060816110bb5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156110e557806110cf81612198565b91506110de9050600a836121fe565b91506110bf565b60008167ffffffffffffffff81111561110057611100611b60565b6040519080825280601f01601f19166020018201604052801561112a576020820181803683370190505b5090505b84156111955761113f600183612212565b915061114c600a86612229565b611157906030612180565b60f81b81838151811061116c5761116c612135565b60200101906001600160f81b031916908160001a90535061118e600a866121fe565b945061112e565b949350505050565b6001600160a01b0384166111fd5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161051a565b336112178160008761120e886116e7565b610a0d886116e7565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611247908490612180565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610a0d81600087878787611732565b81518351146113095760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161051a565b6001600160a01b03841661132f5760405162461bcd60e51b815260040161051a9061223d565b3360005b845181101561141657600085828151811061135057611350612135565b60200260200101519050600085838151811061136e5761136e612135565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156113be5760405162461bcd60e51b815260040161051a90612282565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906113fb908490612180565b925050819055505050508061140f90612198565b9050611333565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114669291906122cc565b60405180910390a461147c81878787878761188e565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561154a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161051a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166115dd5760405162461bcd60e51b815260040161051a9061223d565b336115ed81878761120e886116e7565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561162e5760405162461bcd60e51b815260040161051a90612282565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061166b908490612180565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116cb828888888888611732565b50505050505050565b8051610cb3906002906020840190611949565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061172157611721612135565b602090810291909101015292915050565b6001600160a01b0384163b1561147c5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061177690899089908890889088906004016122fa565b6020604051808303816000875af19250505080156117b1575060408051601f3d908101601f191682019092526117ae9181019061233f565b60015b61185e576117bd61235c565b806308c379a014156117f757506117d2612378565b806117dd57506117f9565b8060405162461bcd60e51b815260040161051a9190611ab9565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161051a565b6001600160e01b0319811663f23a6e6160e01b146116cb5760405162461bcd60e51b815260040161051a90612402565b6001600160a01b0384163b1561147c5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118d2908990899088908890889060040161244a565b6020604051808303816000875af192505050801561190d575060408051601f3d908101601f1916820190925261190a9181019061233f565b60015b611919576117bd61235c565b6001600160e01b0319811663bc197c8160e01b146116cb5760405162461bcd60e51b815260040161051a90612402565b828054611955906120cb565b90600052602060002090601f01602090048101928261197757600085556119bd565b82601f1061199057805160ff19168380011785556119bd565b828001600101855582156119bd579182015b828111156119bd5782518255916020019190600101906119a2565b506119c99291506119cd565b5090565b5b808211156119c957600081556001016119ce565b6001600160a01b0381168114610fc257600080fd5b60008060408385031215611a0a57600080fd5b8235611a15816119e2565b946020939093013593505050565b6001600160e01b031981168114610fc257600080fd5b600060208284031215611a4b57600080fd5b8135611a5681611a23565b9392505050565b60005b83811015611a78578181015183820152602001611a60565b83811115611a87576000848401525b50505050565b60008151808452611aa5816020860160208601611a5d565b601f01601f19169290920160200192915050565b602081526000611a566020830184611a8d565b600060208284031215611ade57600080fd5b5035919050565b60008060408385031215611af857600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b82811015611b535781518051855286810151878601528501518585015260609093019290850190600101611b24565b5091979650505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611b9c57611b9c611b60565b6040525050565b600067ffffffffffffffff821115611bbd57611bbd611b60565b5060051b60200190565b600082601f830112611bd857600080fd5b81356020611be582611ba3565b604051611bf28282611b76565b83815260059390931b8501820192828101915086841115611c1257600080fd5b8286015b84811015611c2d5780358352918301918301611c16565b509695505050505050565b600067ffffffffffffffff831115611c5257611c52611b60565b604051611c69601f8501601f191660200182611b76565b809150838152848484011115611c7e57600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611ca757600080fd5b611a5683833560208501611c38565b600080600080600060a08688031215611cce57600080fd5b8535611cd9816119e2565b94506020860135611ce9816119e2565b9350604086013567ffffffffffffffff80821115611d0657600080fd5b611d1289838a01611bc7565b94506060880135915080821115611d2857600080fd5b611d3489838a01611bc7565b93506080880135915080821115611d4a57600080fd5b50611d5788828901611c96565b9150509295509295909350565b60008060408385031215611d7757600080fd5b823567ffffffffffffffff80821115611d8f57600080fd5b818501915085601f830112611da357600080fd5b81356020611db082611ba3565b604051611dbd8282611b76565b83815260059390931b8501820192828101915089841115611ddd57600080fd5b948201945b83861015611e04578535611df5816119e2565b82529482019490820190611de2565b96505086013592505080821115611e1a57600080fd5b50611e2785828601611bc7565b9150509250929050565b600081518084526020808501945080840160005b83811015611e6157815187529582019590820190600101611e45565b509495945050505050565b602081526000611a566020830184611e31565b80358015158114610b8657600080fd5b600060208284031215611ea157600080fd5b611a5682611e7f565b600080600060608486031215611ebf57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611ee857600080fd5b8135611a56816119e2565b60008060408385031215611f0657600080fd5b8235611f11816119e2565b9150611f1f60208401611e7f565b90509250929050565b60008083601f840112611f3a57600080fd5b50813567ffffffffffffffff811115611f5257600080fd5b6020830191508360208260051b8501011115611f6d57600080fd5b9250929050565b60008060008060408587031215611f8a57600080fd5b843567ffffffffffffffff80821115611fa257600080fd5b611fae88838901611f28565b90965094506020870135915080821115611fc757600080fd5b50611fd487828801611f28565b95989497509550505050565b60008060408385031215611ff357600080fd5b8235611ffe816119e2565b9150602083013561200e816119e2565b809150509250929050565b600080600080600060a0868803121561203157600080fd5b853561203c816119e2565b9450602086013561204c816119e2565b93506040860135925060608601359150608086013567ffffffffffffffff81111561207657600080fd5b611d5788828901611c96565b60006020828403121561209457600080fd5b813567ffffffffffffffff8111156120ab57600080fd5b8201601f810184136120bc57600080fd5b61119584823560208401611c38565b600181811c908216806120df57607f821691505b6020821081141561210057634e487b7160e01b600052602260045260246000fd5b50919050565b60008351612118818460208801611a5d565b83519083019061212c818360208801611a5d565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561217b5761217b61214b565b500290565b600082198211156121935761219361214b565b500190565b60006000198214156121ac576121ac61214b565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b60008261220d5761220d6121e8565b500490565b6000828210156122245761222461214b565b500390565b600082612238576122386121e8565b500690565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122df6040830185611e31565b82810360208401526122f18185611e31565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061233490830184611a8d565b979650505050505050565b60006020828403121561235157600080fd5b8151611a5681611a23565b600060033d11156123755760046000803e5060005160e01c5b90565b600060443d10156123865790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156123b657505050505090565b82850191508151818111156123ce5750505050505090565b843d87010160208285010111156123e85750505050505090565b6123f760208286010187611b76565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061247690830186611e31565b82810360608401526124888186611e31565b9050828103608084015261249c8185611a8d565b9897505050505050505056fea2646970667358221220cb7d197a97df6711e7a2594758fd416444ccd7681955c9b19ebe627485dfc8d964736f6c634300080a00338a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b00000000000000000000000077e42674e1cc459dd116bcab3d3be01409481f9d0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6170692e63727970746f626f74732e6d652f6170692f6d696e74706173732f00000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061014a5760003560e01c8063715018a6116100b6578063c8b325341161006f578063c8b32534146103d4578063e3442a22146103e9578063e985e9c514610409578063f242432a14610452578063f2fde38b14610472578063f3f48df01461049257600080fd5b8063715018a6146103105780638da5cb5b1461032557806395d89b4114610343578063a22cb46514610358578063b040505414610378578063b187bd26146103b357600080fd5b80632eb2c2d6116101085780632eb2c2d6146102295780634e1273f41461024b578063521eb2731461027857806369cc2731146102b05780636a016710146102d05780636b088bbe146102f057600080fd5b8062fdd58e1461014f57806301ffc9a71461018257806306fdde03146101b25780630e89341c146101d45780631b2ef1ca146101f4578063212a6ce014610207575b600080fd5b34801561015b57600080fd5b5061016f61016a3660046119f7565b6104b2565b6040519081526020015b60405180910390f35b34801561018e57600080fd5b506101a261019d366004611a39565b610549565b6040519015158152602001610179565b3480156101be57600080fd5b506101c761059b565b6040516101799190611ab9565b3480156101e057600080fd5b506101c76101ef366004611acc565b610629565b6101a2610202366004611ae5565b610664565b34801561021357600080fd5b5061021c610900565b6040516101799190611b07565b34801561023557600080fd5b50610249610244366004611cb6565b61097d565b005b34801561025757600080fd5b5061026b610266366004611d64565b610a14565b6040516101799190611e6c565b34801561028457600080fd5b50600554610298906001600160a01b031681565b6040516001600160a01b039091168152602001610179565b3480156102bc57600080fd5b506101a26102cb366004611e8f565b610b3e565b3480156102dc57600080fd5b506101a26102eb366004611eaa565b610b8b565b3480156102fc57600080fd5b506101a261030b366004611ed6565b610c13565b34801561031c57600080fd5b50610249610c65565b34801561033157600080fd5b506003546001600160a01b0316610298565b34801561034f57600080fd5b506101c7610c9b565b34801561036457600080fd5b50610249610373366004611ef3565b610ca8565b34801561038457600080fd5b50610398610393366004611acc565b610cb7565b60408051938452602084019290925290820152606001610179565b3480156103bf57600080fd5b506005546101a290600160a01b900460ff1681565b3480156103e057600080fd5b5060045461016f565b3480156103f557600080fd5b506101a2610404366004611f74565b610cea565b34801561041557600080fd5b506101a2610424366004611fe0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561045e57600080fd5b5061024961046d366004612019565b610ea3565b34801561047e57600080fd5b5061024961048d366004611ed6565b610f2a565b34801561049e57600080fd5b506101a26104ad366004612082565b610fc5565b60006001600160a01b0383166105235760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061057a57506001600160e01b031982166303a24d0760e21b145b8061059557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600680546105a8906120cb565b80601f01602080910402602001604051908101604052809291908181526020018280546105d4906120cb565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b505050505081565b606061063482611003565b61063d83611097565b60405160200161064e929190612106565b6040516020818303038152906040529050919050565b600554600090600160a01b900460ff16156106cf5760405162461bcd60e51b815260206004820152602560248201527f4d696e74696e67506173733a3a6d696e743a20636f6e74726163742069732070604482015264185d5cd95960da1b606482015260840161051a565b60045483106107385760405162461bcd60e51b815260206004820152602f60248201527f4d696e74696e67506173733a3a6d696e743a206d696e74696e6750617373496460448201526e08191bd95cc81b9bdd08195e1a5cdd608a1b606482015260840161051a565b816004848154811061074c5761074c612135565b9060005260206000209060030201600201546107689190612161565b34146107c45760405162461bcd60e51b815260206004820152602560248201527f4d696e74696e67506173733a3a6d696e743a2077726f6e6720657468657220616044820152641b5bdd5b9d60da1b606482015260840161051a565b81600484815481106107d8576107d8612135565b906000526020600020906003020160010160008282546107f89190612180565b9091555050600480548490811061081157610811612135565b9060005260206000209060030201600001546004848154811061083657610836612135565b90600052602060002090600302016001015411156108a25760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e67506173733a3a6d696e743a206e6f7420656e6f75676820737560448201526370706c7960e01b606482015260840161051a565b6108bd3384846040518060200160405280600081525061119d565b6005546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156108f6573d6000803e3d6000fd5b5060019392505050565b60606004805480602002602001604051908101604052809291908181526020016000905b828210156109745783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610924565b50505050905090565b6001600160a01b03851633148061099957506109998533610424565b610a005760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161051a565b610a0d85858585856112a7565b5050505050565b60608151835114610a795760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161051a565b6000835167ffffffffffffffff811115610a9557610a95611b60565b604051908082528060200260200182016040528015610abe578160200160208202803683370190505b50905060005b8451811015610b3657610b09858281518110610ae257610ae2612135565b6020026020010151858381518110610afc57610afc612135565b60200260200101516104b2565b828281518110610b1b57610b1b612135565b6020908102919091010152610b2f81612198565b9050610ac4565b509392505050565b6003546000906001600160a01b03163314610b6b5760405162461bcd60e51b815260040161051a906121b3565b506005805460ff60a01b1916600160a01b8315150217905560015b919050565b6003546000906001600160a01b03163314610bb85760405162461bcd60e51b815260040161051a906121b3565b8260048581548110610bcc57610bcc612135565b9060005260206000209060030201600001819055508160048581548110610bf557610bf5612135565b60009182526020909120600260039092020101555060019392505050565b6003546000906001600160a01b03163314610c405760405162461bcd60e51b815260040161051a906121b3565b50600580546001600160a01b0383166001600160a01b03199091161790556001919050565b6003546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161051a906121b3565b610c996000611484565b565b600780546105a8906120cb565b610cb33383836114d6565b5050565b60048181548110610cc757600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b6003546000906001600160a01b03163314610d175760405162461bcd60e51b815260040161051a906121b3565b838214610d9d5760405162461bcd60e51b815260206004820152604860248201527f4d696e74696e67506173733a3a6164644d696e74696e675061737365733a206160448201527f6d6f756e7473206c656e677468206d75737420626520657175616c20726174656064820152670e640d8cadccee8d60c31b608482015260a40161051a565b60005b84811015610e9757610e84868683818110610dbd57610dbd612135565b90506020020135858584818110610dd657610dd6612135565b905060200201356040805160608101825292835260006020840181815291840192835260048054600180820183559190925293517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b60039092029182015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d9091015590565b5080610e8f81612198565b915050610da0565b50600195945050505050565b6001600160a01b038516331480610ebf5750610ebf8533610424565b610f1d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161051a565b610a0d85858585856115b7565b6003546001600160a01b03163314610f545760405162461bcd60e51b815260040161051a906121b3565b6001600160a01b038116610fb95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051a565b610fc281611484565b50565b6003546000906001600160a01b03163314610ff25760405162461bcd60e51b815260040161051a906121b3565b610ffb826116d4565b506001919050565b606060028054611012906120cb565b80601f016020809104026020016040519081016040528092919081815260200182805461103e906120cb565b801561108b5780601f106110605761010080835404028352916020019161108b565b820191906000526020600020905b81548152906001019060200180831161106e57829003601f168201915b50505050509050919050565b6060816110bb5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156110e557806110cf81612198565b91506110de9050600a836121fe565b91506110bf565b60008167ffffffffffffffff81111561110057611100611b60565b6040519080825280601f01601f19166020018201604052801561112a576020820181803683370190505b5090505b84156111955761113f600183612212565b915061114c600a86612229565b611157906030612180565b60f81b81838151811061116c5761116c612135565b60200101906001600160f81b031916908160001a90535061118e600a866121fe565b945061112e565b949350505050565b6001600160a01b0384166111fd5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161051a565b336112178160008761120e886116e7565b610a0d886116e7565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611247908490612180565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610a0d81600087878787611732565b81518351146113095760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161051a565b6001600160a01b03841661132f5760405162461bcd60e51b815260040161051a9061223d565b3360005b845181101561141657600085828151811061135057611350612135565b60200260200101519050600085838151811061136e5761136e612135565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156113be5760405162461bcd60e51b815260040161051a90612282565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906113fb908490612180565b925050819055505050508061140f90612198565b9050611333565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114669291906122cc565b60405180910390a461147c81878787878761188e565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561154a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161051a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166115dd5760405162461bcd60e51b815260040161051a9061223d565b336115ed81878761120e886116e7565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561162e5760405162461bcd60e51b815260040161051a90612282565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061166b908490612180565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116cb828888888888611732565b50505050505050565b8051610cb3906002906020840190611949565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061172157611721612135565b602090810291909101015292915050565b6001600160a01b0384163b1561147c5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061177690899089908890889088906004016122fa565b6020604051808303816000875af19250505080156117b1575060408051601f3d908101601f191682019092526117ae9181019061233f565b60015b61185e576117bd61235c565b806308c379a014156117f757506117d2612378565b806117dd57506117f9565b8060405162461bcd60e51b815260040161051a9190611ab9565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161051a565b6001600160e01b0319811663f23a6e6160e01b146116cb5760405162461bcd60e51b815260040161051a90612402565b6001600160a01b0384163b1561147c5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118d2908990899088908890889060040161244a565b6020604051808303816000875af192505050801561190d575060408051601f3d908101601f1916820190925261190a9181019061233f565b60015b611919576117bd61235c565b6001600160e01b0319811663bc197c8160e01b146116cb5760405162461bcd60e51b815260040161051a90612402565b828054611955906120cb565b90600052602060002090601f01602090048101928261197757600085556119bd565b82601f1061199057805160ff19168380011785556119bd565b828001600101855582156119bd579182015b828111156119bd5782518255916020019190600101906119a2565b506119c99291506119cd565b5090565b5b808211156119c957600081556001016119ce565b6001600160a01b0381168114610fc257600080fd5b60008060408385031215611a0a57600080fd5b8235611a15816119e2565b946020939093013593505050565b6001600160e01b031981168114610fc257600080fd5b600060208284031215611a4b57600080fd5b8135611a5681611a23565b9392505050565b60005b83811015611a78578181015183820152602001611a60565b83811115611a87576000848401525b50505050565b60008151808452611aa5816020860160208601611a5d565b601f01601f19169290920160200192915050565b602081526000611a566020830184611a8d565b600060208284031215611ade57600080fd5b5035919050565b60008060408385031215611af857600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b82811015611b535781518051855286810151878601528501518585015260609093019290850190600101611b24565b5091979650505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611b9c57611b9c611b60565b6040525050565b600067ffffffffffffffff821115611bbd57611bbd611b60565b5060051b60200190565b600082601f830112611bd857600080fd5b81356020611be582611ba3565b604051611bf28282611b76565b83815260059390931b8501820192828101915086841115611c1257600080fd5b8286015b84811015611c2d5780358352918301918301611c16565b509695505050505050565b600067ffffffffffffffff831115611c5257611c52611b60565b604051611c69601f8501601f191660200182611b76565b809150838152848484011115611c7e57600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611ca757600080fd5b611a5683833560208501611c38565b600080600080600060a08688031215611cce57600080fd5b8535611cd9816119e2565b94506020860135611ce9816119e2565b9350604086013567ffffffffffffffff80821115611d0657600080fd5b611d1289838a01611bc7565b94506060880135915080821115611d2857600080fd5b611d3489838a01611bc7565b93506080880135915080821115611d4a57600080fd5b50611d5788828901611c96565b9150509295509295909350565b60008060408385031215611d7757600080fd5b823567ffffffffffffffff80821115611d8f57600080fd5b818501915085601f830112611da357600080fd5b81356020611db082611ba3565b604051611dbd8282611b76565b83815260059390931b8501820192828101915089841115611ddd57600080fd5b948201945b83861015611e04578535611df5816119e2565b82529482019490820190611de2565b96505086013592505080821115611e1a57600080fd5b50611e2785828601611bc7565b9150509250929050565b600081518084526020808501945080840160005b83811015611e6157815187529582019590820190600101611e45565b509495945050505050565b602081526000611a566020830184611e31565b80358015158114610b8657600080fd5b600060208284031215611ea157600080fd5b611a5682611e7f565b600080600060608486031215611ebf57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611ee857600080fd5b8135611a56816119e2565b60008060408385031215611f0657600080fd5b8235611f11816119e2565b9150611f1f60208401611e7f565b90509250929050565b60008083601f840112611f3a57600080fd5b50813567ffffffffffffffff811115611f5257600080fd5b6020830191508360208260051b8501011115611f6d57600080fd5b9250929050565b60008060008060408587031215611f8a57600080fd5b843567ffffffffffffffff80821115611fa257600080fd5b611fae88838901611f28565b90965094506020870135915080821115611fc757600080fd5b50611fd487828801611f28565b95989497509550505050565b60008060408385031215611ff357600080fd5b8235611ffe816119e2565b9150602083013561200e816119e2565b809150509250929050565b600080600080600060a0868803121561203157600080fd5b853561203c816119e2565b9450602086013561204c816119e2565b93506040860135925060608601359150608086013567ffffffffffffffff81111561207657600080fd5b611d5788828901611c96565b60006020828403121561209457600080fd5b813567ffffffffffffffff8111156120ab57600080fd5b8201601f810184136120bc57600080fd5b61119584823560208401611c38565b600181811c908216806120df57607f821691505b6020821081141561210057634e487b7160e01b600052602260045260246000fd5b50919050565b60008351612118818460208801611a5d565b83519083019061212c818360208801611a5d565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561217b5761217b61214b565b500290565b600082198211156121935761219361214b565b500190565b60006000198214156121ac576121ac61214b565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b60008261220d5761220d6121e8565b500490565b6000828210156122245761222461214b565b500390565b600082612238576122386121e8565b500690565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122df6040830185611e31565b82810360208401526122f18185611e31565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061233490830184611a8d565b979650505050505050565b60006020828403121561235157600080fd5b8151611a5681611a23565b600060033d11156123755760046000803e5060005160e01c5b90565b600060443d10156123865790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156123b657505050505090565b82850191508151818111156123ce5750505050505090565b843d87010160208285010111156123e85750505050505090565b6123f760208286010187611b76565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061247690830186611e31565b82810360608401526124888186611e31565b9050828103608084015261249c8185611a8d565b9897505050505050505056fea2646970667358221220cb7d197a97df6711e7a2594758fd416444ccd7681955c9b19ebe627485dfc8d964736f6c634300080a0033

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

00000000000000000000000077e42674e1cc459dd116bcab3d3be01409481f9d0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6170692e63727970746f626f74732e6d652f6170692f6d696e74706173732f00000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _wallet (address): 0x77E42674e1cC459dD116BcAb3D3BE01409481f9d
Arg [1] : _uri (string): https://api.cryptobots.me/api/mintpass/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000077e42674e1cc459dd116bcab3d3be01409481f9d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [3] : 68747470733a2f2f6170692e63727970746f626f74732e6d652f6170692f6d69
Arg [4] : 6e74706173732f00000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

131:3134:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:228:2;;;;;;;;;;-1:-1:-1;2115:228:2;;;;;:::i;:::-;;:::i;:::-;;;616:25:11;;;604:2;589:18;2115:228:2;;;;;;;;1166:305;;;;;;;;;;-1:-1:-1;1166:305:2;;;;;:::i;:::-;;:::i;:::-;;;1203:14:11;;1196:22;1178:41;;1166:2;1151:18;1166:305:2;1038:187:11;410:51:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1873:158::-;;;;;;;;;;-1:-1:-1;1873:158:8;;;;;:::i;:::-;;:::i;969:634::-;;;;;;:::i;:::-;;:::i;3037:115::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3990:430:2:-;;;;;;;;;;-1:-1:-1;3990:430:2;;;;;:::i;:::-;;:::i;:::-;;2500:508;;;;;;;;;;-1:-1:-1;2500:508:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;320:29:8:-;;;;;;;;;;-1:-1:-1;320:29:8;;;;-1:-1:-1;;;;;320:29:8;;;;;;-1:-1:-1;;;;;8528:32:11;;;8510:51;;8498:2;8483:18;320:29:8;8348:219:11;1609:120:8;;;;;;;;;;-1:-1:-1;1609:120:8;;;;;:::i;:::-;;:::i;2177:219::-;;;;;;;;;;-1:-1:-1;2177:219:8;;;;;:::i;:::-;;:::i;2037:134::-;;;;;;;;;;-1:-1:-1;2037:134:8;;;;;:::i;:::-;;:::i;1661:101:9:-;;;;;;;;;;;;;:::i;1029:85::-;;;;;;;;;;-1:-1:-1;1101:6:9;;-1:-1:-1;;;;;1101:6:9;1029:85;;490:29:8;;;;;;;;;;;;;:::i;3076:153:2:-;;;;;;;;;;-1:-1:-1;3076:153:2;;;;;:::i;:::-;;:::i;275:38:8:-;;;;;;;;;;-1:-1:-1;275:38:8;;;;;:::i;:::-;;:::i;:::-;;;;10233:25:11;;;10289:2;10274:18;;10267:34;;;;10317:18;;;10310:34;10221:2;10206:18;275:38:8;10031:319:11;355:27:8;;;;;;;;;;-1:-1:-1;355:27:8;;;;-1:-1:-1;;;355:27:8;;;;;;3158:105;;;;;;;;;;-1:-1:-1;3236:13:8;:20;3158:105;;2421:373;;;;;;;;;;-1:-1:-1;2421:373:8;;;;;:::i;:::-;;:::i;3296:166:2:-;;;;;;;;;;-1:-1:-1;3296:166:2;;;;;:::i;:::-;-1:-1:-1;;;;;3418:27:2;;;3395:4;3418:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3296:166;3529:389;;;;;;;;;;-1:-1:-1;3529:389:2;;;;;:::i;:::-;;:::i;1911:198:9:-;;;;;;;;;;-1:-1:-1;1911:198:9;;;;;:::i;:::-;;:::i;1735:132:8:-;;;;;;;;;;-1:-1:-1;1735:132:8;;;;;:::i;:::-;;:::i;2115:228:2:-;2201:7;-1:-1:-1;;;;;2228:21:2;;2220:77;;;;-1:-1:-1;;;2220:77:2;;13546:2:11;2220:77:2;;;13528:21:11;13585:2;13565:18;;;13558:30;13624:34;13604:18;;;13597:62;-1:-1:-1;;;13675:18:11;;;13668:41;13726:19;;2220:77:2;;;;;;;;;-1:-1:-1;2314:9:2;:13;;;;;;;;;;;-1:-1:-1;;;;;2314:22:2;;;;;;;;;;;;2115:228::o;1166:305::-;1268:4;-1:-1:-1;;;;;;1303:41:2;;-1:-1:-1;;;1303:41:2;;:109;;-1:-1:-1;;;;;;;1360:52:2;;-1:-1:-1;;;1360:52:2;1303:109;:161;;;-1:-1:-1;;;;;;;;;;937:40:3;;;1428:36:2;1284:180;1166:305;-1:-1:-1;;1166:305:2:o;410:51:8:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1873:158::-;1929:13;1985:14;1995:3;1985:9;:14::i;:::-;2001:21;2018:3;2001:16;:21::i;:::-;1968:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1954:70;;1873:158;;;:::o;969:634::-;1064:8;;1039:4;;-1:-1:-1;;;1064:8:8;;;;1063:9;1055:59;;;;-1:-1:-1;;;1055:59:8;;14818:2:11;1055:59:8;;;14800:21:11;14857:2;14837:18;;;14830:30;14896:34;14876:18;;;14869:62;-1:-1:-1;;;14947:18:11;;;14940:35;14992:19;;1055:59:8;14616:401:11;1055:59:8;1141:13;:20;1132:29;;1124:89;;;;-1:-1:-1;;;1124:89:8;;15224:2:11;1124:89:8;;;15206:21:11;15263:2;15243:18;;;15236:30;15302:34;15282:18;;;15275:62;-1:-1:-1;;;15353:18:11;;;15346:45;15408:19;;1124:89:8;15022:411:11;1124:89:8;1273:6;1244:13;1258:6;1244:21;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;;:35;;;;:::i;:::-;1231:9;:48;1223:98;;;;-1:-1:-1;;;1223:98:8;;16077:2:11;1223:98:8;;;16059:21:11;16116:2;16096:18;;;16089:30;16155:34;16135:18;;;16128:62;-1:-1:-1;;;16206:18:11;;;16199:35;16251:19;;1223:98:8;15875:401:11;1223:98:8;1364:6;1332:13;1346:6;1332:21;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;1420:13:8;:21;;1434:6;;1420:21;;;;;;:::i;:::-;;;;;;;;;;;:28;;;1388:13;1402:6;1388:21;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;;:60;;1380:109;;;;-1:-1:-1;;;1380:109:8;;16616:2:11;1380:109:8;;;16598:21:11;16655:2;16635:18;;;16628:30;16694:34;16674:18;;;16667:62;-1:-1:-1;;;16745:18:11;;;16738:34;16789:19;;1380:109:8;16414:400:11;1380:109:8;1500:37;1506:10;1518:6;1526;1500:37;;;;;;;;;;;;:5;:37::i;:::-;1548:6;;:26;;-1:-1:-1;;;;;1548:6:8;;;;1564:9;1548:26;;;;;:6;:26;:6;:26;1564:9;1548:6;:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1592:4:8;;969:634;-1:-1:-1;;;969:634:8:o;3037:115::-;3089:24;3132:13;3125:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3037:115;:::o;3990:430:2:-;-1:-1:-1;;;;;4215:20:2;;719:10:1;4215:20:2;;:60;;-1:-1:-1;4239:36:2;4256:4;719:10:1;3296:166:2;:::i;4239:36::-;4194:157;;;;-1:-1:-1;;;4194:157:2;;17021:2:11;4194:157:2;;;17003:21:11;17060:2;17040:18;;;17033:30;17099:34;17079:18;;;17072:62;-1:-1:-1;;;17150:18:11;;;17143:48;17208:19;;4194:157:2;16819:414:11;4194:157:2;4361:52;4384:4;4390:2;4394:3;4399:7;4408:4;4361:22;:52::i;:::-;3990:430;;;;;:::o;2500:508::-;2651:16;2710:3;:10;2691:8;:15;:29;2683:83;;;;-1:-1:-1;;;2683:83:2;;17440:2:11;2683:83:2;;;17422:21:11;17479:2;17459:18;;;17452:30;17518:34;17498:18;;;17491:62;-1:-1:-1;;;17569:18:11;;;17562:39;17618:19;;2683:83:2;17238:405:11;2683:83:2;2777:30;2824:8;:15;2810:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2810:30:2;;2777:63;;2856:9;2851:120;2875:8;:15;2871:1;:19;2851:120;;;2930:30;2940:8;2949:1;2940:11;;;;;;;;:::i;:::-;;;;;;;2953:3;2957:1;2953:6;;;;;;;;:::i;:::-;;;;;;;2930:9;:30::i;:::-;2911:13;2925:1;2911:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2892:3;;;:::i;:::-;;;2851:120;;;-1:-1:-1;2988:13:2;2500:508;-1:-1:-1;;;2500:508:2:o;1609:120:8:-;1101:6:9;;1668:4:8;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;1684:8:8::1;:16:::0;;-1:-1:-1;;;;1684:16:8::1;-1:-1:-1::0;;;1684:16:8;::::1;;;;::::0;;-1:-1:-1;1311:1:9::1;1609:120:8::0;;;:::o;2177:219::-;1101:6:9;;2271:4:8;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2318:6:8::1;2287:13;2301:6;2287:21;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;:37;;;;2363:4;2334:13;2348:6;2334:21;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:26:::1;:21;::::0;;::::1;;:26;:33:::0;-1:-1:-1;2385:4:8::1;2177:219:::0;;;;;:::o;2037:134::-;1101:6:9;;2110:4:8;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;2126:6:8::1;:16:::0;;-1:-1:-1;;;;;2126:16:8;::::1;-1:-1:-1::0;;;;;;2126:16:8;;::::1;;::::0;;;2037:134;;;:::o;1661:101:9:-;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;490:29:8:-;;;;;;;:::i;3076:153:2:-;3170:52;719:10:1;3203:8:2;3213;3170:18;:52::i;:::-;3076:153;;:::o;275:38:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;275:38:8;:::o;2421:373::-;1101:6:9;;2522:4:8;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2546:30:8;;::::1;2538:115;;;::::0;-1:-1:-1;;;2538:115:8;;18351:2:11;2538:115:8::1;::::0;::::1;18333:21:11::0;18390:2;18370:18;;;18363:30;18429:34;18409:18;;;18402:62;18500:34;18480:18;;;18473:62;-1:-1:-1;;;18551:19:11;;;18544:39;18600:19;;2538:115:8::1;18149:476:11::0;2538:115:8::1;2668:6;2664:102;2680:18:::0;;::::1;2664:102;;;2719:36;2734:7;;2742:1;2734:10;;;;;;;:::i;:::-;;;;;;;2746:5;;2752:1;2746:8;;;;;;;:::i;:::-;;;;;;;2912:56:::0;;;;;;;;;;;-1:-1:-1;2912:56:8;;;;;;;;;;;;2978:13;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2800:231;2719:36:::1;-1:-1:-1::0;2700:3:8;::::1;::::0;::::1;:::i;:::-;;;;2664:102;;;-1:-1:-1::0;2783:4:8::1;::::0;2421:373;-1:-1:-1;;;;;2421:373:8:o;3529:389:2:-;-1:-1:-1;;;;;3729:20:2;;719:10:1;3729:20:2;;:60;;-1:-1:-1;3753:36:2;3770:4;719:10:1;3296:166:2;:::i;3753:36::-;3708:148;;;;-1:-1:-1;;;3708:148:2;;18832:2:11;3708:148:2;;;18814:21:11;18871:2;18851:18;;;18844:30;18910:34;18890:18;;;18883:62;-1:-1:-1;;;18961:18:11;;;18954:39;19010:19;;3708:148:2;18630:405:11;3708:148:2;3866:45;3884:4;3890:2;3894;3898:6;3906:4;3866:17;:45::i;1911:198:9:-;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:9;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:9;;19242:2:11;1991:73:9::1;::::0;::::1;19224:21:11::0;19281:2;19261:18;;;19254:30;19320:34;19300:18;;;19293:62;-1:-1:-1;;;19371:18:11;;;19364:36;19417:19;;1991:73:9::1;19040:402:11::0;1991:73:9::1;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;1735:132:8:-;1101:6:9;;1806:4:8;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;1822:16:8::1;1830:7;1822;:16::i;:::-;-1:-1:-1::0;1856:4:8::1;1735:132:::0;;;:::o;1870:103:2:-;1930:13;1962:4;1955:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1870:103;;;:::o;328:703:10:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:10;;;;;;;;;;;;-1:-1:-1;;;627:10:10;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:10;;-1:-1:-1;773:2:10;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:10;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:10;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;902:56:10;;;;;;;;-1:-1:-1;972:11:10;981:2;972:11;;:::i;:::-;;;844:150;;;1017:6;328:703;-1:-1:-1;;;;328:703:10:o;8340:553:2:-;-1:-1:-1;;;;;8487:16:2;;8479:62;;;;-1:-1:-1;;;8479:62:2;;20153:2:11;8479:62:2;;;20135:21:11;20192:2;20172:18;;;20165:30;20231:34;20211:18;;;20204:62;-1:-1:-1;;;20282:18:11;;;20275:31;20323:19;;8479:62:2;19951:397:11;8479:62:2;719:10:1;8594:102:2;719:10:1;8552:16:2;8637:2;8641:21;8659:2;8641:17;:21::i;:::-;8664:25;8682:6;8664:17;:25::i;8594:102::-;8707:9;:13;;;;;;;;;;;-1:-1:-1;;;;;8707:17:2;;;;;;;;;:27;;8728:6;;8707:9;:27;;8728:6;;8707:27;:::i;:::-;;;;-1:-1:-1;;8749:52:2;;;20527:25:11;;;20583:2;20568:18;;20561:34;;;-1:-1:-1;;;;;8749:52:2;;;;8782:1;;8749:52;;;;;;20500:18:11;8749:52:2;;;;;;;8812:74;8843:8;8861:1;8865:2;8869;8873:6;8881:4;8812:30;:74::i;6013:1045::-;6233:7;:14;6219:3;:10;:28;6211:81;;;;-1:-1:-1;;;6211:81:2;;20808:2:11;6211:81:2;;;20790:21:11;20847:2;20827:18;;;20820:30;20886:34;20866:18;;;20859:62;-1:-1:-1;;;20937:18:11;;;20930:38;20985:19;;6211:81:2;20606:404:11;6211:81:2;-1:-1:-1;;;;;6310:16:2;;6302:66;;;;-1:-1:-1;;;6302:66:2;;;;;;;:::i;:::-;719:10:1;6379:16:2;6492:411;6516:3;:10;6512:1;:14;6492:411;;;6547:10;6560:3;6564:1;6560:6;;;;;;;;:::i;:::-;;;;;;;6547:19;;6580:14;6597:7;6605:1;6597:10;;;;;;;;:::i;:::-;;;;;;;;;;;;6622:19;6644:13;;;;;;;;;;-1:-1:-1;;;;;6644:19:2;;;;;;;;;;;;6597:10;;-1:-1:-1;6685:21:2;;;;6677:76;;;;-1:-1:-1;;;6677:76:2;;;;;;;:::i;:::-;6795:9;:13;;;;;;;;;;;-1:-1:-1;;;;;6795:19:2;;;;;;;;;;6817:20;;;6795:42;;6865:17;;;;;;;:27;;6817:20;;6795:9;6865:27;;6817:20;;6865:27;:::i;:::-;;;;;;;;6533:370;;;6528:3;;;;:::i;:::-;;;6492:411;;;;6948:2;-1:-1:-1;;;;;6918:47:2;6942:4;-1:-1:-1;;;;;6918:47:2;6932:8;-1:-1:-1;;;;;6918:47:2;;6952:3;6957:7;6918:47;;;;;;;:::i;:::-;;;;;;;;6976:75;7012:8;7022:4;7028:2;7032:3;7037:7;7046:4;6976:35;:75::i;:::-;6201:857;6013:1045;;;;;:::o;2263:187:9:-;2355:6;;;-1:-1:-1;;;;;2371:17:9;;;-1:-1:-1;;;;;;2371:17:9;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;12019:323:2:-;12169:8;-1:-1:-1;;;;;12160:17:2;:5;-1:-1:-1;;;;;12160:17:2;;;12152:71;;;;-1:-1:-1;;;12152:71:2;;22504:2:11;12152:71:2;;;22486:21:11;22543:2;22523:18;;;22516:30;22582:34;22562:18;;;22555:62;-1:-1:-1;;;22633:18:11;;;22626:39;22682:19;;12152:71:2;22302:405:11;12152:71:2;-1:-1:-1;;;;;12233:25:2;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;12233:46:2;;;;;;;;;;12294:41;;1178::11;;;12294::2;;1151:18:11;12294:41:2;;;;;;;12019:323;;;:::o;4870:797::-;-1:-1:-1;;;;;5051:16:2;;5043:66;;;;-1:-1:-1;;;5043:66:2;;;;;;;:::i;:::-;719:10:1;5162:96:2;719:10:1;5193:4:2;5199:2;5203:21;5221:2;5203:17;:21::i;5162:96::-;5269:19;5291:13;;;;;;;;;;;-1:-1:-1;;;;;5291:19:2;;;;;;;;;;5328:21;;;;5320:76;;;;-1:-1:-1;;;5320:76:2;;;;;;;:::i;:::-;5430:9;:13;;;;;;;;;;;-1:-1:-1;;;;;5430:19:2;;;;;;;;;;5452:20;;;5430:42;;5492:17;;;;;;;:27;;5452:20;;5430:9;5492:27;;5452:20;;5492:27;:::i;:::-;;;;-1:-1:-1;;5535:46:2;;;20527:25:11;;;20583:2;20568:18;;20561:34;;;-1:-1:-1;;;;;5535:46:2;;;;;;;;;;;;;;20500:18:11;5535:46:2;;;;;;;5592:68;5623:8;5633:4;5639:2;5643;5647:6;5655:4;5592:30;:68::i;:::-;5033:634;;4870:797;;;;;:::o;7881:86::-;7947:13;;;;:4;;:13;;;;;:::i;15025:193::-;15144:16;;;15158:1;15144:16;;;;;;;;;15091;;15119:22;;15144:16;;;;;;;;;;;;-1:-1:-1;15144:16:2;15119:41;;15181:7;15170:5;15176:1;15170:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;15206:5;15025:193;-1:-1:-1;;15025:193:2:o;13496:725::-;-1:-1:-1;;;;;13703:13:2;;1087:20:0;1133:8;13699:516:2;;13738:72;;-1:-1:-1;;;13738:72:2;;-1:-1:-1;;;;;13738:38:2;;;;;:72;;13777:8;;13787:4;;13793:2;;13797:6;;13805:4;;13738:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13738:72:2;;;;;;;;-1:-1:-1;;13738:72:2;;;;;;;;;;;;:::i;:::-;;;13734:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14081:6;14074:14;;-1:-1:-1;;;14074:14:2;;;;;;;;:::i;13734:471::-;;;14128:62;;-1:-1:-1;;;14128:62:2;;24594:2:11;14128:62:2;;;24576:21:11;24633:2;24613:18;;;24606:30;24672:34;24652:18;;;24645:62;-1:-1:-1;;;24723:18:11;;;24716:50;24783:19;;14128:62:2;24392:416:11;13734:471:2;-1:-1:-1;;;;;;13859:55:2;;-1:-1:-1;;;13859:55:2;13855:152;;13938:50;;-1:-1:-1;;;13938:50:2;;;;;;;:::i;14227:792::-;-1:-1:-1;;;;;14459:13:2;;1087:20:0;1133:8;14455:558:2;;14494:79;;-1:-1:-1;;;14494:79:2;;-1:-1:-1;;;;;14494:43:2;;;;;:79;;14538:8;;14548:4;;14554:3;;14559:7;;14568:4;;14494:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14494:79:2;;;;;;;;-1:-1:-1;;14494:79:2;;;;;;;;;;;;:::i;:::-;;;14490:513;;;;:::i;:::-;-1:-1:-1;;;;;;14652:60:2;;-1:-1:-1;;;14652:60:2;14648:157;;14736:50;;-1:-1:-1;;;14736:50:2;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:11;-1:-1:-1;;;;;89:31:11;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:11:o;652:131::-;-1:-1:-1;;;;;;726:32:11;;716:43;;706:71;;773:1;770;763:12;788:245;846:6;899:2;887:9;878:7;874:23;870:32;867:52;;;915:1;912;905:12;867:52;954:9;941:23;973:30;997:5;973:30;:::i;:::-;1022:5;788:245;-1:-1:-1;;;788:245:11:o;1230:258::-;1302:1;1312:113;1326:6;1323:1;1320:13;1312:113;;;1402:11;;;1396:18;1383:11;;;1376:39;1348:2;1341:10;1312:113;;;1443:6;1440:1;1437:13;1434:48;;;1478:1;1469:6;1464:3;1460:16;1453:27;1434:48;;1230:258;;;:::o;1493:::-;1535:3;1573:5;1567:12;1600:6;1595:3;1588:19;1616:63;1672:6;1665:4;1660:3;1656:14;1649:4;1642:5;1638:16;1616:63;:::i;:::-;1733:2;1712:15;-1:-1:-1;;1708:29:11;1699:39;;;;1740:4;1695:50;;1493:258;-1:-1:-1;;1493:258:11:o;1756:220::-;1905:2;1894:9;1887:21;1868:4;1925:45;1966:2;1955:9;1951:18;1943:6;1925:45;:::i;1981:180::-;2040:6;2093:2;2081:9;2072:7;2068:23;2064:32;2061:52;;;2109:1;2106;2099:12;2061:52;-1:-1:-1;2132:23:11;;1981:180;-1:-1:-1;1981:180:11:o;2166:248::-;2234:6;2242;2295:2;2283:9;2274:7;2270:23;2266:32;2263:52;;;2311:1;2308;2301:12;2263:52;-1:-1:-1;;2334:23:11;;;2404:2;2389:18;;;2376:32;;-1:-1:-1;2166:248:11:o;2419:859::-;2656:2;2708:21;;;2778:13;;2681:18;;;2800:22;;;2627:4;;2656:2;2841;;2859:18;;;;2900:15;;;2627:4;2943:309;2957:6;2954:1;2951:13;2943:309;;;3016:13;;3054:9;;3042:22;;3104:11;;;3098:18;3084:12;;;3077:40;3157:11;;3151:18;3137:12;;;3130:40;3199:4;3190:14;;;;3227:15;;;;2979:1;2972:9;2943:309;;;-1:-1:-1;3269:3:11;;2419:859;-1:-1:-1;;;;;;;2419:859:11:o;3283:127::-;3344:10;3339:3;3335:20;3332:1;3325:31;3375:4;3372:1;3365:15;3399:4;3396:1;3389:15;3415:249;3525:2;3506:13;;-1:-1:-1;;3502:27:11;3490:40;;3560:18;3545:34;;3581:22;;;3542:62;3539:88;;;3607:18;;:::i;:::-;3643:2;3636:22;-1:-1:-1;;3415:249:11:o;3669:183::-;3729:4;3762:18;3754:6;3751:30;3748:56;;;3784:18;;:::i;:::-;-1:-1:-1;3829:1:11;3825:14;3841:4;3821:25;;3669:183::o;3857:724::-;3911:5;3964:3;3957:4;3949:6;3945:17;3941:27;3931:55;;3982:1;3979;3972:12;3931:55;4018:6;4005:20;4044:4;4067:43;4107:2;4067:43;:::i;:::-;4139:2;4133:9;4151:31;4179:2;4171:6;4151:31;:::i;:::-;4217:18;;;4309:1;4305:10;;;;4293:23;;4289:32;;;4251:15;;;;-1:-1:-1;4333:15:11;;;4330:35;;;4361:1;4358;4351:12;4330:35;4397:2;4389:6;4385:15;4409:142;4425:6;4420:3;4417:15;4409:142;;;4491:17;;4479:30;;4529:12;;;;4442;;4409:142;;;-1:-1:-1;4569:6:11;3857:724;-1:-1:-1;;;;;;3857:724:11:o;4586:468::-;4650:5;4684:18;4676:6;4673:30;4670:56;;;4706:18;;:::i;:::-;4755:2;4749:9;4767:69;4824:2;4803:15;;-1:-1:-1;;4799:29:11;4830:4;4795:40;4749:9;4767:69;:::i;:::-;4854:6;4845:15;;4884:6;4876;4869:22;4924:3;4915:6;4910:3;4906:16;4903:25;4900:45;;;4941:1;4938;4931:12;4900:45;4991:6;4986:3;4979:4;4971:6;4967:17;4954:44;5046:1;5039:4;5030:6;5022;5018:19;5014:30;5007:41;;4586:468;;;;;:::o;5059:220::-;5101:5;5154:3;5147:4;5139:6;5135:17;5131:27;5121:55;;5172:1;5169;5162:12;5121:55;5194:79;5269:3;5260:6;5247:20;5240:4;5232:6;5228:17;5194:79;:::i;5284:1071::-;5438:6;5446;5454;5462;5470;5523:3;5511:9;5502:7;5498:23;5494:33;5491:53;;;5540:1;5537;5530:12;5491:53;5579:9;5566:23;5598:31;5623:5;5598:31;:::i;:::-;5648:5;-1:-1:-1;5705:2:11;5690:18;;5677:32;5718:33;5677:32;5718:33;:::i;:::-;5770:7;-1:-1:-1;5828:2:11;5813:18;;5800:32;5851:18;5881:14;;;5878:34;;;5908:1;5905;5898:12;5878:34;5931:61;5984:7;5975:6;5964:9;5960:22;5931:61;:::i;:::-;5921:71;;6045:2;6034:9;6030:18;6017:32;6001:48;;6074:2;6064:8;6061:16;6058:36;;;6090:1;6087;6080:12;6058:36;6113:63;6168:7;6157:8;6146:9;6142:24;6113:63;:::i;:::-;6103:73;;6229:3;6218:9;6214:19;6201:33;6185:49;;6259:2;6249:8;6246:16;6243:36;;;6275:1;6272;6265:12;6243:36;;6298:51;6341:7;6330:8;6319:9;6315:24;6298:51;:::i;:::-;6288:61;;;5284:1071;;;;;;;;:::o;6360:1277::-;6478:6;6486;6539:2;6527:9;6518:7;6514:23;6510:32;6507:52;;;6555:1;6552;6545:12;6507:52;6595:9;6582:23;6624:18;6665:2;6657:6;6654:14;6651:34;;;6681:1;6678;6671:12;6651:34;6719:6;6708:9;6704:22;6694:32;;6764:7;6757:4;6753:2;6749:13;6745:27;6735:55;;6786:1;6783;6776:12;6735:55;6822:2;6809:16;6844:4;6867:43;6907:2;6867:43;:::i;:::-;6939:2;6933:9;6951:31;6979:2;6971:6;6951:31;:::i;:::-;7017:18;;;7105:1;7101:10;;;;7093:19;;7089:28;;;7051:15;;;;-1:-1:-1;7129:19:11;;;7126:39;;;7161:1;7158;7151:12;7126:39;7185:11;;;;7205:217;7221:6;7216:3;7213:15;7205:217;;;7301:3;7288:17;7318:31;7343:5;7318:31;:::i;:::-;7362:18;;7238:12;;;;7400;;;;7205:217;;;7441:6;-1:-1:-1;;7485:18:11;;7472:32;;-1:-1:-1;;7516:16:11;;;7513:36;;;7545:1;7542;7535:12;7513:36;;7568:63;7623:7;7612:8;7601:9;7597:24;7568:63;:::i;:::-;7558:73;;;6360:1277;;;;;:::o;7642:435::-;7695:3;7733:5;7727:12;7760:6;7755:3;7748:19;7786:4;7815:2;7810:3;7806:12;7799:19;;7852:2;7845:5;7841:14;7873:1;7883:169;7897:6;7894:1;7891:13;7883:169;;;7958:13;;7946:26;;7992:12;;;;8027:15;;;;7919:1;7912:9;7883:169;;;-1:-1:-1;8068:3:11;;7642:435;-1:-1:-1;;;;;7642:435:11:o;8082:261::-;8261:2;8250:9;8243:21;8224:4;8281:56;8333:2;8322:9;8318:18;8310:6;8281:56;:::i;8572:160::-;8637:20;;8693:13;;8686:21;8676:32;;8666:60;;8722:1;8719;8712:12;8737:180;8793:6;8846:2;8834:9;8825:7;8821:23;8817:32;8814:52;;;8862:1;8859;8852:12;8814:52;8885:26;8901:9;8885:26;:::i;8922:316::-;8999:6;9007;9015;9068:2;9056:9;9047:7;9043:23;9039:32;9036:52;;;9084:1;9081;9074:12;9036:52;-1:-1:-1;;9107:23:11;;;9177:2;9162:18;;9149:32;;-1:-1:-1;9228:2:11;9213:18;;;9200:32;;8922:316;-1:-1:-1;8922:316:11:o;9243:255::-;9310:6;9363:2;9351:9;9342:7;9338:23;9334:32;9331:52;;;9379:1;9376;9369:12;9331:52;9418:9;9405:23;9437:31;9462:5;9437:31;:::i;9711:315::-;9776:6;9784;9837:2;9825:9;9816:7;9812:23;9808:32;9805:52;;;9853:1;9850;9843:12;9805:52;9892:9;9879:23;9911:31;9936:5;9911:31;:::i;:::-;9961:5;-1:-1:-1;9985:35:11;10016:2;10001:18;;9985:35;:::i;:::-;9975:45;;9711:315;;;;;:::o;10355:367::-;10418:8;10428:6;10482:3;10475:4;10467:6;10463:17;10459:27;10449:55;;10500:1;10497;10490:12;10449:55;-1:-1:-1;10523:20:11;;10566:18;10555:30;;10552:50;;;10598:1;10595;10588:12;10552:50;10635:4;10627:6;10623:17;10611:29;;10695:3;10688:4;10678:6;10675:1;10671:14;10663:6;10659:27;10655:38;10652:47;10649:67;;;10712:1;10709;10702:12;10649:67;10355:367;;;;;:::o;10727:773::-;10849:6;10857;10865;10873;10926:2;10914:9;10905:7;10901:23;10897:32;10894:52;;;10942:1;10939;10932:12;10894:52;10982:9;10969:23;11011:18;11052:2;11044:6;11041:14;11038:34;;;11068:1;11065;11058:12;11038:34;11107:70;11169:7;11160:6;11149:9;11145:22;11107:70;:::i;:::-;11196:8;;-1:-1:-1;11081:96:11;-1:-1:-1;11284:2:11;11269:18;;11256:32;;-1:-1:-1;11300:16:11;;;11297:36;;;11329:1;11326;11319:12;11297:36;;11368:72;11432:7;11421:8;11410:9;11406:24;11368:72;:::i;:::-;10727:773;;;;-1:-1:-1;11459:8:11;-1:-1:-1;;;;10727:773:11:o;11505:388::-;11573:6;11581;11634:2;11622:9;11613:7;11609:23;11605:32;11602:52;;;11650:1;11647;11640:12;11602:52;11689:9;11676:23;11708:31;11733:5;11708:31;:::i;:::-;11758:5;-1:-1:-1;11815:2:11;11800:18;;11787:32;11828:33;11787:32;11828:33;:::i;:::-;11880:7;11870:17;;;11505:388;;;;;:::o;11898:734::-;12002:6;12010;12018;12026;12034;12087:3;12075:9;12066:7;12062:23;12058:33;12055:53;;;12104:1;12101;12094:12;12055:53;12143:9;12130:23;12162:31;12187:5;12162:31;:::i;:::-;12212:5;-1:-1:-1;12269:2:11;12254:18;;12241:32;12282:33;12241:32;12282:33;:::i;:::-;12334:7;-1:-1:-1;12388:2:11;12373:18;;12360:32;;-1:-1:-1;12439:2:11;12424:18;;12411:32;;-1:-1:-1;12494:3:11;12479:19;;12466:33;12522:18;12511:30;;12508:50;;;12554:1;12551;12544:12;12508:50;12577:49;12618:7;12609:6;12598:9;12594:22;12577:49;:::i;12889:450::-;12958:6;13011:2;12999:9;12990:7;12986:23;12982:32;12979:52;;;13027:1;13024;13017:12;12979:52;13067:9;13054:23;13100:18;13092:6;13089:30;13086:50;;;13132:1;13129;13122:12;13086:50;13155:22;;13208:4;13200:13;;13196:27;-1:-1:-1;13186:55:11;;13237:1;13234;13227:12;13186:55;13260:73;13325:7;13320:2;13307:16;13302:2;13298;13294:11;13260:73;:::i;13756:380::-;13835:1;13831:12;;;;13878;;;13899:61;;13953:4;13945:6;13941:17;13931:27;;13899:61;14006:2;13998:6;13995:14;13975:18;13972:38;13969:161;;;14052:10;14047:3;14043:20;14040:1;14033:31;14087:4;14084:1;14077:15;14115:4;14112:1;14105:15;13969:161;;13756:380;;;:::o;14141:470::-;14320:3;14358:6;14352:13;14374:53;14420:6;14415:3;14408:4;14400:6;14396:17;14374:53;:::i;:::-;14490:13;;14449:16;;;;14512:57;14490:13;14449:16;14546:4;14534:17;;14512:57;:::i;:::-;14585:20;;14141:470;-1:-1:-1;;;;14141:470:11:o;15438:127::-;15499:10;15494:3;15490:20;15487:1;15480:31;15530:4;15527:1;15520:15;15554:4;15551:1;15544:15;15570:127;15631:10;15626:3;15622:20;15619:1;15612:31;15662:4;15659:1;15652:15;15686:4;15683:1;15676:15;15702:168;15742:7;15808:1;15804;15800:6;15796:14;15793:1;15790:21;15785:1;15778:9;15771:17;15767:45;15764:71;;;15815:18;;:::i;:::-;-1:-1:-1;15855:9:11;;15702:168::o;16281:128::-;16321:3;16352:1;16348:6;16345:1;16342:13;16339:39;;;16358:18;;:::i;:::-;-1:-1:-1;16394:9:11;;16281:128::o;17648:135::-;17687:3;-1:-1:-1;;17708:17:11;;17705:43;;;17728:18;;:::i;:::-;-1:-1:-1;17775:1:11;17764:13;;17648:135::o;17788:356::-;17990:2;17972:21;;;18009:18;;;18002:30;18068:34;18063:2;18048:18;;18041:62;18135:2;18120:18;;17788:356::o;19447:127::-;19508:10;19503:3;19499:20;19496:1;19489:31;19539:4;19536:1;19529:15;19563:4;19560:1;19553:15;19579:120;19619:1;19645;19635:35;;19650:18;;:::i;:::-;-1:-1:-1;19684:9:11;;19579:120::o;19704:125::-;19744:4;19772:1;19769;19766:8;19763:34;;;19777:18;;:::i;:::-;-1:-1:-1;19814:9:11;;19704:125::o;19834:112::-;19866:1;19892;19882:35;;19897:18;;:::i;:::-;-1:-1:-1;19931:9:11;;19834:112::o;21015:401::-;21217:2;21199:21;;;21256:2;21236:18;;;21229:30;21295:34;21290:2;21275:18;;21268:62;-1:-1:-1;;;21361:2:11;21346:18;;21339:35;21406:3;21391:19;;21015:401::o;21421:406::-;21623:2;21605:21;;;21662:2;21642:18;;;21635:30;21701:34;21696:2;21681:18;;21674:62;-1:-1:-1;;;21767:2:11;21752:18;;21745:40;21817:3;21802:19;;21421:406::o;21832:465::-;22089:2;22078:9;22071:21;22052:4;22115:56;22167:2;22156:9;22152:18;22144:6;22115:56;:::i;:::-;22219:9;22211:6;22207:22;22202:2;22191:9;22187:18;22180:50;22247:44;22284:6;22276;22247:44;:::i;:::-;22239:52;21832:465;-1:-1:-1;;;;;21832:465:11:o;22712:561::-;-1:-1:-1;;;;;23009:15:11;;;22991:34;;23061:15;;23056:2;23041:18;;23034:43;23108:2;23093:18;;23086:34;;;23151:2;23136:18;;23129:34;;;22971:3;23194;23179:19;;23172:32;;;22934:4;;23221:46;;23247:19;;23239:6;23221:46;:::i;:::-;23213:54;22712:561;-1:-1:-1;;;;;;;22712:561:11:o;23278:249::-;23347:6;23400:2;23388:9;23379:7;23375:23;23371:32;23368:52;;;23416:1;23413;23406:12;23368:52;23448:9;23442:16;23467:30;23491:5;23467:30;:::i;23532:179::-;23567:3;23609:1;23591:16;23588:23;23585:120;;;23655:1;23652;23649;23634:23;-1:-1:-1;23692:1:11;23686:8;23681:3;23677:18;23585:120;23532:179;:::o;23716:671::-;23755:3;23797:4;23779:16;23776:26;23773:39;;;23716:671;:::o;23773:39::-;23839:2;23833:9;-1:-1:-1;;23904:16:11;23900:25;;23897:1;23833:9;23876:50;23955:4;23949:11;23979:16;24014:18;24085:2;24078:4;24070:6;24066:17;24063:25;24058:2;24050:6;24047:14;24044:45;24041:58;;;24092:5;;;;;23716:671;:::o;24041:58::-;24129:6;24123:4;24119:17;24108:28;;24165:3;24159:10;24192:2;24184:6;24181:14;24178:27;;;24198:5;;;;;;23716:671;:::o;24178:27::-;24282:2;24263:16;24257:4;24253:27;24249:36;24242:4;24233:6;24228:3;24224:16;24220:27;24217:69;24214:82;;;24289:5;;;;;;23716:671;:::o;24214:82::-;24305:57;24356:4;24347:6;24339;24335:19;24331:30;24325:4;24305:57;:::i;:::-;-1:-1:-1;24378:3:11;;23716:671;-1:-1:-1;;;;;23716:671:11:o;24813:404::-;25015:2;24997:21;;;25054:2;25034:18;;;25027:30;25093:34;25088:2;25073:18;;25066:62;-1:-1:-1;;;25159:2:11;25144:18;;25137:38;25207:3;25192:19;;24813:404::o;25222:827::-;-1:-1:-1;;;;;25619:15:11;;;25601:34;;25671:15;;25666:2;25651:18;;25644:43;25581:3;25718:2;25703:18;;25696:31;;;25544:4;;25750:57;;25787:19;;25779:6;25750:57;:::i;:::-;25855:9;25847:6;25843:22;25838:2;25827:9;25823:18;25816:50;25889:44;25926:6;25918;25889:44;:::i;:::-;25875:58;;25982:9;25974:6;25970:22;25964:3;25953:9;25949:19;25942:51;26010:33;26036:6;26028;26010:33;:::i;:::-;26002:41;25222:827;-1:-1:-1;;;;;;;;25222:827:11:o

Swarm Source

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