ETH Price: $3,386.32 (-1.49%)
Gas: 1 Gwei

Token

Underground Workshop Banner (UWB)
 

Overview

Max Total Supply

1,000 UWB

Holders

549

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
0xjowi.eth
Balance
1 UWB
0x4ae94ba1bc6100bc6865f802c1492070e266521b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

An underground artist, we are not someone you should take too seriously.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Banner

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/[email protected]/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// 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: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

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

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

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

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

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/banner.sol

// Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721

pragma solidity ^0.8.0;






contract Banner is ERC721Enumerable, Ownable {
    using Strings for uint256;

    bool public _isSaleActive = false;
    bool public _isPublicSaleActive = false;
    bool public _revealed = false;

    // Constants
    uint256 public constant MAX_SUPPLY = 1000;
    uint256 public mintPrice = 0 ether;
    uint256 public maxBalance = 1;
    uint256 public maxMint = 1;

    string baseURI;
    string public notRevealedUri;
    string public baseExtension = ".json";

    mapping(uint256 => string) private _tokenURIs;
    mapping(address => uint256) public walletMints;

    bytes32 public root;


    constructor(string memory initBaseURI, string memory initNotRevealedUri, bytes32 _root)
        ERC721("Underground Workshop Banner", "UWB")
    {
        setBaseURI(initBaseURI);
        setNotRevealedURI(initNotRevealedUri);
        root = _root;

    }

    function mintBanner(uint256 tokenQuantity, bytes32[] memory proof) public payable {
        
        require(isValid(proof, keccak256(abi.encodePacked(msg.sender))), "Not a part of Allowlist");
        require( totalSupply() + tokenQuantity <= MAX_SUPPLY, "Sale would exceed max supply");
        require(_isSaleActive, "Sale must be active to mint Banner");
        require(walletMints[msg.sender] + tokenQuantity <= maxMint, "Can only mint 1 tokens at a time");

        walletMints[msg.sender] += tokenQuantity;
        _mintBanner(tokenQuantity);
    }

        function mintPublicBanner(uint256 tokenQuantity) public payable {
        
        require( totalSupply() + tokenQuantity <= MAX_SUPPLY-100, "Sale would exceed max supply");
        require(_isPublicSaleActive, "Public sale must be active to mint Banner");
        require(walletMints[msg.sender] + tokenQuantity <= maxMint+1, "Can only mint up to 2 tokens");
        

        walletMints[msg.sender] += tokenQuantity;
        _mintBanner(tokenQuantity);
    }

    function mintMine(uint256 tokenQuantity) public payable onlyOwner {
        require( totalSupply() + tokenQuantity <= MAX_SUPPLY, "Sale would exceed max supply");
        _mintBanner(tokenQuantity);
    }

    function _mintBanner(uint256 tokenQuantity) internal {
        for (uint256 i = 0; i < tokenQuantity; i++) {
            uint256 mintIndex = totalSupply();
            if (totalSupply() < MAX_SUPPLY) {
                _safeMint(msg.sender, mintIndex);
            }
        }
    }

    function isValid(bytes32[] memory proof, bytes32 leaf) public view returns (bool) {
        return MerkleProof.verify(proof, root, leaf);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (_revealed == false) {
            return notRevealedUri;
        }

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.
        return
            string(abi.encodePacked(base, tokenId.toString(), baseExtension));
    }

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

    //only owner
    function flipSaleActive() public onlyOwner {
        _isSaleActive = !_isSaleActive;
    }

    function flipPublicSaleActive() public onlyOwner {
        _isPublicSaleActive = !_isPublicSaleActive;
        _isSaleActive = !_isSaleActive;
    }

    function flipReveal() public onlyOwner {
        _revealed = !_revealed;
    }

    function setMintPrice(uint256 _mintPrice) public onlyOwner {
        mintPrice = _mintPrice;
    }

    function setRoot(bytes32 _root) public onlyOwner {
        root = _root;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

    function setMaxBalance(uint256 _maxBalance) public onlyOwner {
        maxBalance = _maxBalance;
    }

    function setMaxMint(uint256 _maxMint) public onlyOwner {
        maxMint = _maxMint;
    }

    function withdraw(address to) public onlyOwner {
        uint256 balance = address(this).balance;
        payable(to).transfer(balance);
    }

    function getMyWalletMints() public view returns (uint256) {
        return walletMints[msg.sender];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"initBaseURI","type":"string"},{"internalType":"string","name":"initNotRevealedUri","type":"string"},{"internalType":"bytes32","name":"_root","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyWalletMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintBanner","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mintMine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mintPublicBanner","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBalance","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff0219169083151502179055506000600a60166101000a81548160ff0219169083151502179055506000600b556001600c556001600d556040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060109080519060200190620000b1929190620003b8565b50348015620000bf57600080fd5b506040516200516b3803806200516b8339818101604052810190620000e59190620004f1565b6040518060400160405280601b81526020017f556e64657267726f756e6420576f726b73686f702042616e6e657200000000008152506040518060400160405280600381526020017f5557420000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000169929190620003b8565b50806001908051906020019062000182929190620003b8565b505050620001a562000199620001d760201b60201c565b620001df60201b60201c565b620001b683620002a560201b60201c565b620001c782620002d160201b60201c565b8060138190555050505062000790565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002b5620002fd60201b60201c565b80600e9080519060200190620002cd929190620003b8565b5050565b620002e1620002fd60201b60201c565b80600f9080519060200190620002f9929190620003b8565b5050565b6200030d620001d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003336200038e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200038c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038390620005a0565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003c69062000672565b90600052602060002090601f016020900481019282620003ea576000855562000436565b82601f106200040557805160ff191683800117855562000436565b8280016001018555821562000436579182015b828111156200043557825182559160200191906001019062000418565b5b50905062000445919062000449565b5090565b5b80821115620004645760008160009055506001016200044a565b5090565b60006200047f6200047984620005eb565b620005c2565b9050828152602081018484840111156200049857600080fd5b620004a58482856200063c565b509392505050565b600081519050620004be8162000776565b92915050565b600082601f830112620004d657600080fd5b8151620004e884826020860162000468565b91505092915050565b6000806000606084860312156200050757600080fd5b600084015167ffffffffffffffff8111156200052257600080fd5b6200053086828701620004c4565b935050602084015167ffffffffffffffff8111156200054e57600080fd5b6200055c86828701620004c4565b92505060406200056f86828701620004ad565b9150509250925092565b60006200058860208362000621565b915062000595826200074d565b602082019050919050565b60006020820190508181036000830152620005bb8162000579565b9050919050565b6000620005ce620005e1565b9050620005dc8282620006a8565b919050565b6000604051905090565b600067ffffffffffffffff8211156200060957620006086200070d565b5b62000614826200073c565b9050602081019050919050565b600082825260208201905092915050565b6000819050919050565b60005b838110156200065c5780820151818401526020810190506200063f565b838111156200066c576000848401525b50505050565b600060028204905060018216806200068b57607f821691505b60208210811415620006a257620006a1620006de565b5b50919050565b620006b3826200073c565b810181811067ffffffffffffffff82111715620006d557620006d46200070d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620007818162000632565b81146200078d57600080fd5b50565b6149cb80620007a06000396000f3fe60806040526004361061027d5760003560e01c80637080d6fc1161014f578063c6682862116100c1578063e985e9c51161007a578063e985e9c514610937578063ebf0c71714610974578063f0293fd31461099f578063f2c4ce1e146109dc578063f2fde38b14610a05578063f4a0a52814610a2e5761027d565b8063c66828621461083b578063c87b56dd14610866578063d41b7375146108a3578063da3ef23f146108ce578063dab5f340146108f7578063de8b51e1146109205761027d565b80638da5cb5b116101135780638da5cb5b1461072d57806395d89b41146107585780639d51d9b714610783578063a22cb465146107ac578063b88d4fde146107d5578063b8a20ed0146107fe5761027d565b80637080d6fc1461065857806370a0823114610683578063715018a6146106c057806373ad468a146106d75780637501f741146107025761027d565b80633b84d9c6116101f3578063547520fe116101ac578063547520fe1461055757806355f804b3146105805780636352211e146105a957806364df760d146105e65780636817c76c146106025780636ebeac851461062d5761027d565b80633b84d9c61461046a5780633f44beb21461048157806342842e0e1461049d5780634f6ccce7146104c6578063505168081461050357806351cff8d91461052e5761027d565b806318160ddd1161024557806318160ddd1461037b5780631b5cb7f3146103a657806323b872dd146103bd5780632f745c59146103e6578063314c544b1461042357806332cb6b0c1461043f5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063081c8c4414610327578063095ea7b314610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a491906135bc565b610a57565b6040516102b69190613c1a565b60405180910390f35b3480156102cb57600080fd5b506102d4610ad1565b6040516102e19190613c50565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061364f565b610b63565b60405161031e9190613bb3565b60405180910390f35b34801561033357600080fd5b5061033c610ba9565b6040516103499190613c50565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613503565b610c37565b005b34801561038757600080fd5b50610390610d4f565b60405161039d9190613f32565b60405180910390f35b3480156103b257600080fd5b506103bb610d5c565b005b3480156103c957600080fd5b506103e460048036038101906103df91906133fd565b610dba565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613503565b610e1a565b60405161041a9190613f32565b60405180910390f35b61043d6004803603810190610438919061364f565b610ebf565b005b34801561044b57600080fd5b5061045461106e565b6040516104619190613f32565b60405180910390f35b34801561047657600080fd5b5061047f611074565b005b61049b6004803603810190610496919061364f565b6110a8565b005b3480156104a957600080fd5b506104c460048036038101906104bf91906133fd565b611113565b005b3480156104d257600080fd5b506104ed60048036038101906104e8919061364f565b611133565b6040516104fa9190613f32565b60405180910390f35b34801561050f57600080fd5b506105186111ca565b6040516105259190613f32565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613398565b611211565b005b34801561056357600080fd5b5061057e6004803603810190610579919061364f565b611269565b005b34801561058c57600080fd5b506105a760048036038101906105a2919061360e565b61127b565b005b3480156105b557600080fd5b506105d060048036038101906105cb919061364f565b61129d565b6040516105dd9190613bb3565b60405180910390f35b61060060048036038101906105fb9190613678565b61134f565b005b34801561060e57600080fd5b50610617611556565b6040516106249190613f32565b60405180910390f35b34801561063957600080fd5b5061064261155c565b60405161064f9190613c1a565b60405180910390f35b34801561066457600080fd5b5061066d61156f565b60405161067a9190613c1a565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613398565b611582565b6040516106b79190613f32565b60405180910390f35b3480156106cc57600080fd5b506106d561163a565b005b3480156106e357600080fd5b506106ec61164e565b6040516106f99190613f32565b60405180910390f35b34801561070e57600080fd5b50610717611654565b6040516107249190613f32565b60405180910390f35b34801561073957600080fd5b5061074261165a565b60405161074f9190613bb3565b60405180910390f35b34801561076457600080fd5b5061076d611684565b60405161077a9190613c50565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a5919061364f565b611716565b005b3480156107b857600080fd5b506107d360048036038101906107ce91906134c7565b611728565b005b3480156107e157600080fd5b506107fc60048036038101906107f7919061344c565b61173e565b005b34801561080a57600080fd5b506108256004803603810190610820919061353f565b6117a0565b6040516108329190613c1a565b60405180910390f35b34801561084757600080fd5b506108506117b7565b60405161085d9190613c50565b60405180910390f35b34801561087257600080fd5b5061088d6004803603810190610888919061364f565b611845565b60405161089a9190613c50565b60405180910390f35b3480156108af57600080fd5b506108b8611a69565b6040516108c59190613c1a565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f0919061360e565b611a7c565b005b34801561090357600080fd5b5061091e60048036038101906109199190613593565b611a9e565b005b34801561092c57600080fd5b50610935611ab0565b005b34801561094357600080fd5b5061095e600480360381019061095991906133c1565b611ae4565b60405161096b9190613c1a565b60405180910390f35b34801561098057600080fd5b50610989611b78565b6040516109969190613c35565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613398565b611b7e565b6040516109d39190613f32565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe919061360e565b611b96565b005b348015610a1157600080fd5b50610a2c6004803603810190610a279190613398565b611bb8565b005b348015610a3a57600080fd5b50610a556004803603810190610a50919061364f565b611c3c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aca5750610ac982611c4e565b5b9050919050565b606060008054610ae0906141d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0c906141d3565b8015610b595780601f10610b2e57610100808354040283529160200191610b59565b820191906000526020600020905b815481529060010190602001808311610b3c57829003601f168201915b5050505050905090565b6000610b6e82611d30565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610bb6906141d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610be2906141d3565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b505050505081565b6000610c428261129d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613eb2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd2611d7b565b73ffffffffffffffffffffffffffffffffffffffff161480610d015750610d0081610cfb611d7b565b611ae4565b5b610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790613df2565b60405180910390fd5b610d4a8383611d83565b505050565b6000600880549050905090565b610d64611e3c565b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b610dcb610dc5611d7b565b82611eba565b610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190613f12565b60405180910390fd5b610e15838383611f4f565b505050565b6000610e2583611582565b8210610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90613c72565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60646103e8610ece91906140df565b81610ed7610d4f565b610ee19190614058565b1115610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613d12565b60405180910390fd5b600a60159054906101000a900460ff16610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613d32565b60405180910390fd5b6001600d54610f809190614058565b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcb9190614058565b111561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100390613e92565b60405180910390fd5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461105b9190614058565b9250508190555061106b816121b6565b50565b6103e881565b61107c611e3c565b600a60169054906101000a900460ff1615600a60166101000a81548160ff021916908315150217905550565b6110b0611e3c565b6103e8816110bc610d4f565b6110c69190614058565b1115611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613d12565b60405180910390fd5b611110816121b6565b50565b61112e8383836040518060200160405280600081525061173e565b505050565b600061113d610d4f565b821061117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590613ef2565b60405180910390fd5b600882815481106111b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b611219611e3c565b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611264573d6000803e3d6000fd5b505050565b611271611e3c565b80600d8190555050565b611283611e3c565b80600e9080519060200190611299929190613111565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90613e72565b60405180910390fd5b80915050919050565b61137f81336040516020016113649190613b43565b604051602081830303815290604052805190602001206117a0565b6113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613dd2565b60405180910390fd5b6103e8826113ca610d4f565b6113d49190614058565b1115611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613d12565b60405180910390fd5b600a60149054906101000a900460ff16611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613ed2565b60405180910390fd5b600d5482601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114b29190614058565b11156114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90613d92565b60405180910390fd5b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115429190614058565b92505081905550611552826121b6565b5050565b600b5481565b600a60169054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90613db2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611642611e3c565b61164c6000612201565b565b600c5481565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611693906141d3565b80601f01602080910402602001604051908101604052809291908181526020018280546116bf906141d3565b801561170c5780601f106116e15761010080835404028352916020019161170c565b820191906000526020600020905b8154815290600101906020018083116116ef57829003601f168201915b5050505050905090565b61171e611e3c565b80600c8190555050565b61173a611733611d7b565b83836122c7565b5050565b61174f611749611d7b565b83611eba565b61178e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178590613f12565b60405180910390fd5b61179a84848484612434565b50505050565b60006117af8360135484612490565b905092915050565b601080546117c4906141d3565b80601f01602080910402602001604051908101604052809291908181526020018280546117f0906141d3565b801561183d5780601f106118125761010080835404028352916020019161183d565b820191906000526020600020905b81548152906001019060200180831161182057829003601f168201915b505050505081565b6060611850826124a7565b61188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613e52565b60405180910390fd5b60001515600a60169054906101000a900460ff161515141561193d57600f80546118b8906141d3565b80601f01602080910402602001604051908101604052809291908181526020018280546118e4906141d3565b80156119315780601f1061190657610100808354040283529160200191611931565b820191906000526020600020905b81548152906001019060200180831161191457829003601f168201915b50505050509050611a64565b600060116000848152602001908152602001600020805461195d906141d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611989906141d3565b80156119d65780601f106119ab576101008083540402835291602001916119d6565b820191906000526020600020905b8154815290600101906020018083116119b957829003601f168201915b5050505050905060006119e7612513565b90506000815114156119fd578192505050611a64565b600082511115611a32578082604051602001611a1a929190613b5e565b60405160208183030381529060405292505050611a64565b80611a3c856125a5565b6010604051602001611a5093929190613b82565b604051602081830303815290604052925050505b919050565b600a60159054906101000a900460ff1681565b611a84611e3c565b8060109080519060200190611a9a929190613111565b5050565b611aa6611e3c565b8060138190555050565b611ab8611e3c565b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60135481565b60126020528060005260406000206000915090505481565b611b9e611e3c565b80600f9080519060200190611bb4929190613111565b5050565b611bc0611e3c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2790613cb2565b60405180910390fd5b611c3981612201565b50565b611c44611e3c565b80600b8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d295750611d2882612752565b5b9050919050565b611d39816124a7565b611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90613e72565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611df68361129d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e44611d7b565b73ffffffffffffffffffffffffffffffffffffffff16611e6261165a565b73ffffffffffffffffffffffffffffffffffffffff1614611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613e32565b60405180910390fd5b565b600080611ec68361129d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f085750611f078185611ae4565b5b80611f4657508373ffffffffffffffffffffffffffffffffffffffff16611f2e84610b63565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f6f8261129d565b73ffffffffffffffffffffffffffffffffffffffff1614611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc90613cd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90613d52565b60405180910390fd5b6120408383836127bc565b61204b600082611d83565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209b91906140df565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f29190614058565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121b18383836128d0565b505050565b60005b818110156121fd5760006121cb610d4f565b90506103e86121d8610d4f565b10156121e9576121e833826128d5565b5b5080806121f590614236565b9150506121b9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90613d72565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124279190613c1a565b60405180910390a3505050565b61243f848484611f4f565b61244b848484846128f3565b61248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248190613c92565b60405180910390fd5b50505050565b60008261249d8584612a8a565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600e8054612522906141d3565b80601f016020809104026020016040519081016040528092919081815260200182805461254e906141d3565b801561259b5780601f106125705761010080835404028352916020019161259b565b820191906000526020600020905b81548152906001019060200180831161257e57829003601f168201915b5050505050905090565b606060008214156125ed576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061274d565b600082905060005b6000821461261f57808061260890614236565b915050600a8261261891906140ae565b91506125f5565b60008167ffffffffffffffff811115612661577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126935781602001600182028036833780820191505090505b5090505b60008514612746576001826126ac91906140df565b9150600a856126bb91906142a3565b60306126c79190614058565b60f81b818381518110612703577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561273f91906140ae565b9450612697565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127c7838383612b25565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561280a5761280581612b2a565b612849565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612848576128478382612b73565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561288c5761288781612ce0565b6128cb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128ca576128c98282612e23565b5b5b505050565b505050565b6128ef828260405180602001604052806000815250612ea2565b5050565b60006129148473ffffffffffffffffffffffffffffffffffffffff16612efd565b15612a7d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261293d611d7b565b8786866040518563ffffffff1660e01b815260040161295f9493929190613bce565b602060405180830381600087803b15801561297957600080fd5b505af19250505080156129aa57506040513d601f19601f820116820180604052508101906129a791906135e5565b60015b612a2d573d80600081146129da576040519150601f19603f3d011682016040523d82523d6000602084013e6129df565b606091505b50600081511415612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1c90613c92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a82565b600190505b949350505050565b60008082905060005b8451811015612b1a576000858281518110612ad7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612af957612af28382612f20565b9250612b06565b612b038184612f20565b92505b508080612b1290614236565b915050612a93565b508091505092915050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8084611582565b612b8a91906140df565b9050600060076000848152602001908152602001600020549050818114612c6f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cf491906140df565b9050600060096000848152602001908152602001600020549050600060088381548110612d4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e2e83611582565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612eac8383612f37565b612eb960008484846128f3565b612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90613c92565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e90613e12565b60405180910390fd5b612fb0816124a7565b15612ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe790613cf2565b60405180910390fd5b612ffc600083836127bc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461304c9190614058565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461310d600083836128d0565b5050565b82805461311d906141d3565b90600052602060002090601f01602090048101928261313f5760008555613186565b82601f1061315857805160ff1916838001178555613186565b82800160010185558215613186579182015b8281111561318557825182559160200191906001019061316a565b5b5090506131939190613197565b5090565b5b808211156131b0576000816000905550600101613198565b5090565b60006131c76131c284613f72565b613f4d565b905080838252602082019050828560208602820111156131e657600080fd5b60005b8581101561321657816131fc88826132f0565b8452602084019350602083019250506001810190506131e9565b5050509392505050565b600061323361322e84613f9e565b613f4d565b90508281526020810184848401111561324b57600080fd5b613256848285614191565b509392505050565b600061327161326c84613fcf565b613f4d565b90508281526020810184848401111561328957600080fd5b613294848285614191565b509392505050565b6000813590506132ab81614922565b92915050565b600082601f8301126132c257600080fd5b81356132d28482602086016131b4565b91505092915050565b6000813590506132ea81614939565b92915050565b6000813590506132ff81614950565b92915050565b60008135905061331481614967565b92915050565b60008151905061332981614967565b92915050565b600082601f83011261334057600080fd5b8135613350848260208601613220565b91505092915050565b600082601f83011261336a57600080fd5b813561337a84826020860161325e565b91505092915050565b6000813590506133928161497e565b92915050565b6000602082840312156133aa57600080fd5b60006133b88482850161329c565b91505092915050565b600080604083850312156133d457600080fd5b60006133e28582860161329c565b92505060206133f38582860161329c565b9150509250929050565b60008060006060848603121561341257600080fd5b60006134208682870161329c565b93505060206134318682870161329c565b925050604061344286828701613383565b9150509250925092565b6000806000806080858703121561346257600080fd5b60006134708782880161329c565b94505060206134818782880161329c565b935050604061349287828801613383565b925050606085013567ffffffffffffffff8111156134af57600080fd5b6134bb8782880161332f565b91505092959194509250565b600080604083850312156134da57600080fd5b60006134e88582860161329c565b92505060206134f9858286016132db565b9150509250929050565b6000806040838503121561351657600080fd5b60006135248582860161329c565b925050602061353585828601613383565b9150509250929050565b6000806040838503121561355257600080fd5b600083013567ffffffffffffffff81111561356c57600080fd5b613578858286016132b1565b9250506020613589858286016132f0565b9150509250929050565b6000602082840312156135a557600080fd5b60006135b3848285016132f0565b91505092915050565b6000602082840312156135ce57600080fd5b60006135dc84828501613305565b91505092915050565b6000602082840312156135f757600080fd5b60006136058482850161331a565b91505092915050565b60006020828403121561362057600080fd5b600082013567ffffffffffffffff81111561363a57600080fd5b61364684828501613359565b91505092915050565b60006020828403121561366157600080fd5b600061366f84828501613383565b91505092915050565b6000806040838503121561368b57600080fd5b600061369985828601613383565b925050602083013567ffffffffffffffff8111156136b657600080fd5b6136c2858286016132b1565b9150509250929050565b6136d581614113565b82525050565b6136ec6136e782614113565b61427f565b82525050565b6136fb81614125565b82525050565b61370a81614131565b82525050565b600061371b82614015565b613725818561402b565b93506137358185602086016141a0565b61373e81614390565b840191505092915050565b600061375482614020565b61375e818561403c565b935061376e8185602086016141a0565b61377781614390565b840191505092915050565b600061378d82614020565b613797818561404d565b93506137a78185602086016141a0565b80840191505092915050565b600081546137c0816141d3565b6137ca818661404d565b945060018216600081146137e557600181146137f657613829565b60ff19831686528186019350613829565b6137ff85614000565b60005b8381101561382157815481890152600182019150602081019050613802565b838801955050505b50505092915050565b600061383f602b8361403c565b915061384a826143ae565b604082019050919050565b600061386260328361403c565b915061386d826143fd565b604082019050919050565b600061388560268361403c565b91506138908261444c565b604082019050919050565b60006138a860258361403c565b91506138b38261449b565b604082019050919050565b60006138cb601c8361403c565b91506138d6826144ea565b602082019050919050565b60006138ee601c8361403c565b91506138f982614513565b602082019050919050565b600061391160298361403c565b915061391c8261453c565b604082019050919050565b600061393460248361403c565b915061393f8261458b565b604082019050919050565b600061395760198361403c565b9150613962826145da565b602082019050919050565b600061397a60208361403c565b915061398582614603565b602082019050919050565b600061399d60298361403c565b91506139a88261462c565b604082019050919050565b60006139c060178361403c565b91506139cb8261467b565b602082019050919050565b60006139e3603e8361403c565b91506139ee826146a4565b604082019050919050565b6000613a0660208361403c565b9150613a11826146f3565b602082019050919050565b6000613a2960208361403c565b9150613a348261471c565b602082019050919050565b6000613a4c602f8361403c565b9150613a5782614745565b604082019050919050565b6000613a6f60188361403c565b9150613a7a82614794565b602082019050919050565b6000613a92601c8361403c565b9150613a9d826147bd565b602082019050919050565b6000613ab560218361403c565b9150613ac0826147e6565b604082019050919050565b6000613ad860228361403c565b9150613ae382614835565b604082019050919050565b6000613afb602c8361403c565b9150613b0682614884565b604082019050919050565b6000613b1e602e8361403c565b9150613b29826148d3565b604082019050919050565b613b3d81614187565b82525050565b6000613b4f82846136db565b60148201915081905092915050565b6000613b6a8285613782565b9150613b768284613782565b91508190509392505050565b6000613b8e8286613782565b9150613b9a8285613782565b9150613ba682846137b3565b9150819050949350505050565b6000602082019050613bc860008301846136cc565b92915050565b6000608082019050613be360008301876136cc565b613bf060208301866136cc565b613bfd6040830185613b34565b8181036060830152613c0f8184613710565b905095945050505050565b6000602082019050613c2f60008301846136f2565b92915050565b6000602082019050613c4a6000830184613701565b92915050565b60006020820190508181036000830152613c6a8184613749565b905092915050565b60006020820190508181036000830152613c8b81613832565b9050919050565b60006020820190508181036000830152613cab81613855565b9050919050565b60006020820190508181036000830152613ccb81613878565b9050919050565b60006020820190508181036000830152613ceb8161389b565b9050919050565b60006020820190508181036000830152613d0b816138be565b9050919050565b60006020820190508181036000830152613d2b816138e1565b9050919050565b60006020820190508181036000830152613d4b81613904565b9050919050565b60006020820190508181036000830152613d6b81613927565b9050919050565b60006020820190508181036000830152613d8b8161394a565b9050919050565b60006020820190508181036000830152613dab8161396d565b9050919050565b60006020820190508181036000830152613dcb81613990565b9050919050565b60006020820190508181036000830152613deb816139b3565b9050919050565b60006020820190508181036000830152613e0b816139d6565b9050919050565b60006020820190508181036000830152613e2b816139f9565b9050919050565b60006020820190508181036000830152613e4b81613a1c565b9050919050565b60006020820190508181036000830152613e6b81613a3f565b9050919050565b60006020820190508181036000830152613e8b81613a62565b9050919050565b60006020820190508181036000830152613eab81613a85565b9050919050565b60006020820190508181036000830152613ecb81613aa8565b9050919050565b60006020820190508181036000830152613eeb81613acb565b9050919050565b60006020820190508181036000830152613f0b81613aee565b9050919050565b60006020820190508181036000830152613f2b81613b11565b9050919050565b6000602082019050613f476000830184613b34565b92915050565b6000613f57613f68565b9050613f638282614205565b919050565b6000604051905090565b600067ffffffffffffffff821115613f8d57613f8c614361565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fb957613fb8614361565b5b613fc282614390565b9050602081019050919050565b600067ffffffffffffffff821115613fea57613fe9614361565b5b613ff382614390565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061406382614187565b915061406e83614187565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140a3576140a26142d4565b5b828201905092915050565b60006140b982614187565b91506140c483614187565b9250826140d4576140d3614303565b5b828204905092915050565b60006140ea82614187565b91506140f583614187565b925082821015614108576141076142d4565b5b828203905092915050565b600061411e82614167565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141be5780820151818401526020810190506141a3565b838111156141cd576000848401525b50505050565b600060028204905060018216806141eb57607f821691505b602082108114156141ff576141fe614332565b5b50919050565b61420e82614390565b810181811067ffffffffffffffff8211171561422d5761422c614361565b5b80604052505050565b600061424182614187565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614274576142736142d4565b5b600182019050919050565b600061428a82614291565b9050919050565b600061429c826143a1565b9050919050565b60006142ae82614187565b91506142b983614187565b9250826142c9576142c8614303565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f5075626c69632073616c65206d7573742062652061637469766520746f206d6960008201527f6e742042616e6e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f43616e206f6e6c79206d696e74203120746f6b656e7320617420612074696d65600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4e6f7420612070617274206f6620416c6c6f776c697374000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f43616e206f6e6c79206d696e7420757020746f203220746f6b656e7300000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742042616e6e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61492b81614113565b811461493657600080fd5b50565b61494281614125565b811461494d57600080fd5b50565b61495981614131565b811461496457600080fd5b50565b6149708161413b565b811461497b57600080fd5b50565b61498781614187565b811461499257600080fd5b5056fea264697066735822122023bd80f3df69d01a35150bcd9fa2bcdb8241c26fa018b4b8398962195c6c9a7864736f6c63430008010033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0b4e8c389559611d6d8c7fc452bf9d5eef37d8198e12212cee85d3ab0b6a5011d0000000000000000000000000000000000000000000000000000000000000024687474703a2f2f62616e6e65722e7567776f726b73686f702e636f6d2f62616e6e65722f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d636f464e6171394e33555a78664662473657575a7844514137726d634170587531676b66366e65525a756f310000000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c80637080d6fc1161014f578063c6682862116100c1578063e985e9c51161007a578063e985e9c514610937578063ebf0c71714610974578063f0293fd31461099f578063f2c4ce1e146109dc578063f2fde38b14610a05578063f4a0a52814610a2e5761027d565b8063c66828621461083b578063c87b56dd14610866578063d41b7375146108a3578063da3ef23f146108ce578063dab5f340146108f7578063de8b51e1146109205761027d565b80638da5cb5b116101135780638da5cb5b1461072d57806395d89b41146107585780639d51d9b714610783578063a22cb465146107ac578063b88d4fde146107d5578063b8a20ed0146107fe5761027d565b80637080d6fc1461065857806370a0823114610683578063715018a6146106c057806373ad468a146106d75780637501f741146107025761027d565b80633b84d9c6116101f3578063547520fe116101ac578063547520fe1461055757806355f804b3146105805780636352211e146105a957806364df760d146105e65780636817c76c146106025780636ebeac851461062d5761027d565b80633b84d9c61461046a5780633f44beb21461048157806342842e0e1461049d5780634f6ccce7146104c6578063505168081461050357806351cff8d91461052e5761027d565b806318160ddd1161024557806318160ddd1461037b5780631b5cb7f3146103a657806323b872dd146103bd5780632f745c59146103e6578063314c544b1461042357806332cb6b0c1461043f5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063081c8c4414610327578063095ea7b314610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a491906135bc565b610a57565b6040516102b69190613c1a565b60405180910390f35b3480156102cb57600080fd5b506102d4610ad1565b6040516102e19190613c50565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061364f565b610b63565b60405161031e9190613bb3565b60405180910390f35b34801561033357600080fd5b5061033c610ba9565b6040516103499190613c50565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613503565b610c37565b005b34801561038757600080fd5b50610390610d4f565b60405161039d9190613f32565b60405180910390f35b3480156103b257600080fd5b506103bb610d5c565b005b3480156103c957600080fd5b506103e460048036038101906103df91906133fd565b610dba565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613503565b610e1a565b60405161041a9190613f32565b60405180910390f35b61043d6004803603810190610438919061364f565b610ebf565b005b34801561044b57600080fd5b5061045461106e565b6040516104619190613f32565b60405180910390f35b34801561047657600080fd5b5061047f611074565b005b61049b6004803603810190610496919061364f565b6110a8565b005b3480156104a957600080fd5b506104c460048036038101906104bf91906133fd565b611113565b005b3480156104d257600080fd5b506104ed60048036038101906104e8919061364f565b611133565b6040516104fa9190613f32565b60405180910390f35b34801561050f57600080fd5b506105186111ca565b6040516105259190613f32565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613398565b611211565b005b34801561056357600080fd5b5061057e6004803603810190610579919061364f565b611269565b005b34801561058c57600080fd5b506105a760048036038101906105a2919061360e565b61127b565b005b3480156105b557600080fd5b506105d060048036038101906105cb919061364f565b61129d565b6040516105dd9190613bb3565b60405180910390f35b61060060048036038101906105fb9190613678565b61134f565b005b34801561060e57600080fd5b50610617611556565b6040516106249190613f32565b60405180910390f35b34801561063957600080fd5b5061064261155c565b60405161064f9190613c1a565b60405180910390f35b34801561066457600080fd5b5061066d61156f565b60405161067a9190613c1a565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613398565b611582565b6040516106b79190613f32565b60405180910390f35b3480156106cc57600080fd5b506106d561163a565b005b3480156106e357600080fd5b506106ec61164e565b6040516106f99190613f32565b60405180910390f35b34801561070e57600080fd5b50610717611654565b6040516107249190613f32565b60405180910390f35b34801561073957600080fd5b5061074261165a565b60405161074f9190613bb3565b60405180910390f35b34801561076457600080fd5b5061076d611684565b60405161077a9190613c50565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a5919061364f565b611716565b005b3480156107b857600080fd5b506107d360048036038101906107ce91906134c7565b611728565b005b3480156107e157600080fd5b506107fc60048036038101906107f7919061344c565b61173e565b005b34801561080a57600080fd5b506108256004803603810190610820919061353f565b6117a0565b6040516108329190613c1a565b60405180910390f35b34801561084757600080fd5b506108506117b7565b60405161085d9190613c50565b60405180910390f35b34801561087257600080fd5b5061088d6004803603810190610888919061364f565b611845565b60405161089a9190613c50565b60405180910390f35b3480156108af57600080fd5b506108b8611a69565b6040516108c59190613c1a565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f0919061360e565b611a7c565b005b34801561090357600080fd5b5061091e60048036038101906109199190613593565b611a9e565b005b34801561092c57600080fd5b50610935611ab0565b005b34801561094357600080fd5b5061095e600480360381019061095991906133c1565b611ae4565b60405161096b9190613c1a565b60405180910390f35b34801561098057600080fd5b50610989611b78565b6040516109969190613c35565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613398565b611b7e565b6040516109d39190613f32565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe919061360e565b611b96565b005b348015610a1157600080fd5b50610a2c6004803603810190610a279190613398565b611bb8565b005b348015610a3a57600080fd5b50610a556004803603810190610a50919061364f565b611c3c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aca5750610ac982611c4e565b5b9050919050565b606060008054610ae0906141d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0c906141d3565b8015610b595780601f10610b2e57610100808354040283529160200191610b59565b820191906000526020600020905b815481529060010190602001808311610b3c57829003601f168201915b5050505050905090565b6000610b6e82611d30565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610bb6906141d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610be2906141d3565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b505050505081565b6000610c428261129d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613eb2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd2611d7b565b73ffffffffffffffffffffffffffffffffffffffff161480610d015750610d0081610cfb611d7b565b611ae4565b5b610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790613df2565b60405180910390fd5b610d4a8383611d83565b505050565b6000600880549050905090565b610d64611e3c565b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b610dcb610dc5611d7b565b82611eba565b610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190613f12565b60405180910390fd5b610e15838383611f4f565b505050565b6000610e2583611582565b8210610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90613c72565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60646103e8610ece91906140df565b81610ed7610d4f565b610ee19190614058565b1115610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613d12565b60405180910390fd5b600a60159054906101000a900460ff16610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613d32565b60405180910390fd5b6001600d54610f809190614058565b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcb9190614058565b111561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100390613e92565b60405180910390fd5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461105b9190614058565b9250508190555061106b816121b6565b50565b6103e881565b61107c611e3c565b600a60169054906101000a900460ff1615600a60166101000a81548160ff021916908315150217905550565b6110b0611e3c565b6103e8816110bc610d4f565b6110c69190614058565b1115611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613d12565b60405180910390fd5b611110816121b6565b50565b61112e8383836040518060200160405280600081525061173e565b505050565b600061113d610d4f565b821061117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590613ef2565b60405180910390fd5b600882815481106111b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b611219611e3c565b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611264573d6000803e3d6000fd5b505050565b611271611e3c565b80600d8190555050565b611283611e3c565b80600e9080519060200190611299929190613111565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90613e72565b60405180910390fd5b80915050919050565b61137f81336040516020016113649190613b43565b604051602081830303815290604052805190602001206117a0565b6113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613dd2565b60405180910390fd5b6103e8826113ca610d4f565b6113d49190614058565b1115611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613d12565b60405180910390fd5b600a60149054906101000a900460ff16611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613ed2565b60405180910390fd5b600d5482601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114b29190614058565b11156114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90613d92565b60405180910390fd5b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115429190614058565b92505081905550611552826121b6565b5050565b600b5481565b600a60169054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90613db2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611642611e3c565b61164c6000612201565b565b600c5481565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611693906141d3565b80601f01602080910402602001604051908101604052809291908181526020018280546116bf906141d3565b801561170c5780601f106116e15761010080835404028352916020019161170c565b820191906000526020600020905b8154815290600101906020018083116116ef57829003601f168201915b5050505050905090565b61171e611e3c565b80600c8190555050565b61173a611733611d7b565b83836122c7565b5050565b61174f611749611d7b565b83611eba565b61178e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178590613f12565b60405180910390fd5b61179a84848484612434565b50505050565b60006117af8360135484612490565b905092915050565b601080546117c4906141d3565b80601f01602080910402602001604051908101604052809291908181526020018280546117f0906141d3565b801561183d5780601f106118125761010080835404028352916020019161183d565b820191906000526020600020905b81548152906001019060200180831161182057829003601f168201915b505050505081565b6060611850826124a7565b61188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613e52565b60405180910390fd5b60001515600a60169054906101000a900460ff161515141561193d57600f80546118b8906141d3565b80601f01602080910402602001604051908101604052809291908181526020018280546118e4906141d3565b80156119315780601f1061190657610100808354040283529160200191611931565b820191906000526020600020905b81548152906001019060200180831161191457829003601f168201915b50505050509050611a64565b600060116000848152602001908152602001600020805461195d906141d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611989906141d3565b80156119d65780601f106119ab576101008083540402835291602001916119d6565b820191906000526020600020905b8154815290600101906020018083116119b957829003601f168201915b5050505050905060006119e7612513565b90506000815114156119fd578192505050611a64565b600082511115611a32578082604051602001611a1a929190613b5e565b60405160208183030381529060405292505050611a64565b80611a3c856125a5565b6010604051602001611a5093929190613b82565b604051602081830303815290604052925050505b919050565b600a60159054906101000a900460ff1681565b611a84611e3c565b8060109080519060200190611a9a929190613111565b5050565b611aa6611e3c565b8060138190555050565b611ab8611e3c565b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60135481565b60126020528060005260406000206000915090505481565b611b9e611e3c565b80600f9080519060200190611bb4929190613111565b5050565b611bc0611e3c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2790613cb2565b60405180910390fd5b611c3981612201565b50565b611c44611e3c565b80600b8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d295750611d2882612752565b5b9050919050565b611d39816124a7565b611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90613e72565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611df68361129d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e44611d7b565b73ffffffffffffffffffffffffffffffffffffffff16611e6261165a565b73ffffffffffffffffffffffffffffffffffffffff1614611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613e32565b60405180910390fd5b565b600080611ec68361129d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f085750611f078185611ae4565b5b80611f4657508373ffffffffffffffffffffffffffffffffffffffff16611f2e84610b63565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f6f8261129d565b73ffffffffffffffffffffffffffffffffffffffff1614611fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc90613cd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90613d52565b60405180910390fd5b6120408383836127bc565b61204b600082611d83565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209b91906140df565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f29190614058565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121b18383836128d0565b505050565b60005b818110156121fd5760006121cb610d4f565b90506103e86121d8610d4f565b10156121e9576121e833826128d5565b5b5080806121f590614236565b9150506121b9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90613d72565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124279190613c1a565b60405180910390a3505050565b61243f848484611f4f565b61244b848484846128f3565b61248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248190613c92565b60405180910390fd5b50505050565b60008261249d8584612a8a565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600e8054612522906141d3565b80601f016020809104026020016040519081016040528092919081815260200182805461254e906141d3565b801561259b5780601f106125705761010080835404028352916020019161259b565b820191906000526020600020905b81548152906001019060200180831161257e57829003601f168201915b5050505050905090565b606060008214156125ed576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061274d565b600082905060005b6000821461261f57808061260890614236565b915050600a8261261891906140ae565b91506125f5565b60008167ffffffffffffffff811115612661577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126935781602001600182028036833780820191505090505b5090505b60008514612746576001826126ac91906140df565b9150600a856126bb91906142a3565b60306126c79190614058565b60f81b818381518110612703577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561273f91906140ae565b9450612697565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127c7838383612b25565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561280a5761280581612b2a565b612849565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612848576128478382612b73565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561288c5761288781612ce0565b6128cb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128ca576128c98282612e23565b5b5b505050565b505050565b6128ef828260405180602001604052806000815250612ea2565b5050565b60006129148473ffffffffffffffffffffffffffffffffffffffff16612efd565b15612a7d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261293d611d7b565b8786866040518563ffffffff1660e01b815260040161295f9493929190613bce565b602060405180830381600087803b15801561297957600080fd5b505af19250505080156129aa57506040513d601f19601f820116820180604052508101906129a791906135e5565b60015b612a2d573d80600081146129da576040519150601f19603f3d011682016040523d82523d6000602084013e6129df565b606091505b50600081511415612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1c90613c92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a82565b600190505b949350505050565b60008082905060005b8451811015612b1a576000858281518110612ad7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612af957612af28382612f20565b9250612b06565b612b038184612f20565b92505b508080612b1290614236565b915050612a93565b508091505092915050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8084611582565b612b8a91906140df565b9050600060076000848152602001908152602001600020549050818114612c6f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cf491906140df565b9050600060096000848152602001908152602001600020549050600060088381548110612d4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e2e83611582565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612eac8383612f37565b612eb960008484846128f3565b612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90613c92565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e90613e12565b60405180910390fd5b612fb0816124a7565b15612ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe790613cf2565b60405180910390fd5b612ffc600083836127bc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461304c9190614058565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461310d600083836128d0565b5050565b82805461311d906141d3565b90600052602060002090601f01602090048101928261313f5760008555613186565b82601f1061315857805160ff1916838001178555613186565b82800160010185558215613186579182015b8281111561318557825182559160200191906001019061316a565b5b5090506131939190613197565b5090565b5b808211156131b0576000816000905550600101613198565b5090565b60006131c76131c284613f72565b613f4d565b905080838252602082019050828560208602820111156131e657600080fd5b60005b8581101561321657816131fc88826132f0565b8452602084019350602083019250506001810190506131e9565b5050509392505050565b600061323361322e84613f9e565b613f4d565b90508281526020810184848401111561324b57600080fd5b613256848285614191565b509392505050565b600061327161326c84613fcf565b613f4d565b90508281526020810184848401111561328957600080fd5b613294848285614191565b509392505050565b6000813590506132ab81614922565b92915050565b600082601f8301126132c257600080fd5b81356132d28482602086016131b4565b91505092915050565b6000813590506132ea81614939565b92915050565b6000813590506132ff81614950565b92915050565b60008135905061331481614967565b92915050565b60008151905061332981614967565b92915050565b600082601f83011261334057600080fd5b8135613350848260208601613220565b91505092915050565b600082601f83011261336a57600080fd5b813561337a84826020860161325e565b91505092915050565b6000813590506133928161497e565b92915050565b6000602082840312156133aa57600080fd5b60006133b88482850161329c565b91505092915050565b600080604083850312156133d457600080fd5b60006133e28582860161329c565b92505060206133f38582860161329c565b9150509250929050565b60008060006060848603121561341257600080fd5b60006134208682870161329c565b93505060206134318682870161329c565b925050604061344286828701613383565b9150509250925092565b6000806000806080858703121561346257600080fd5b60006134708782880161329c565b94505060206134818782880161329c565b935050604061349287828801613383565b925050606085013567ffffffffffffffff8111156134af57600080fd5b6134bb8782880161332f565b91505092959194509250565b600080604083850312156134da57600080fd5b60006134e88582860161329c565b92505060206134f9858286016132db565b9150509250929050565b6000806040838503121561351657600080fd5b60006135248582860161329c565b925050602061353585828601613383565b9150509250929050565b6000806040838503121561355257600080fd5b600083013567ffffffffffffffff81111561356c57600080fd5b613578858286016132b1565b9250506020613589858286016132f0565b9150509250929050565b6000602082840312156135a557600080fd5b60006135b3848285016132f0565b91505092915050565b6000602082840312156135ce57600080fd5b60006135dc84828501613305565b91505092915050565b6000602082840312156135f757600080fd5b60006136058482850161331a565b91505092915050565b60006020828403121561362057600080fd5b600082013567ffffffffffffffff81111561363a57600080fd5b61364684828501613359565b91505092915050565b60006020828403121561366157600080fd5b600061366f84828501613383565b91505092915050565b6000806040838503121561368b57600080fd5b600061369985828601613383565b925050602083013567ffffffffffffffff8111156136b657600080fd5b6136c2858286016132b1565b9150509250929050565b6136d581614113565b82525050565b6136ec6136e782614113565b61427f565b82525050565b6136fb81614125565b82525050565b61370a81614131565b82525050565b600061371b82614015565b613725818561402b565b93506137358185602086016141a0565b61373e81614390565b840191505092915050565b600061375482614020565b61375e818561403c565b935061376e8185602086016141a0565b61377781614390565b840191505092915050565b600061378d82614020565b613797818561404d565b93506137a78185602086016141a0565b80840191505092915050565b600081546137c0816141d3565b6137ca818661404d565b945060018216600081146137e557600181146137f657613829565b60ff19831686528186019350613829565b6137ff85614000565b60005b8381101561382157815481890152600182019150602081019050613802565b838801955050505b50505092915050565b600061383f602b8361403c565b915061384a826143ae565b604082019050919050565b600061386260328361403c565b915061386d826143fd565b604082019050919050565b600061388560268361403c565b91506138908261444c565b604082019050919050565b60006138a860258361403c565b91506138b38261449b565b604082019050919050565b60006138cb601c8361403c565b91506138d6826144ea565b602082019050919050565b60006138ee601c8361403c565b91506138f982614513565b602082019050919050565b600061391160298361403c565b915061391c8261453c565b604082019050919050565b600061393460248361403c565b915061393f8261458b565b604082019050919050565b600061395760198361403c565b9150613962826145da565b602082019050919050565b600061397a60208361403c565b915061398582614603565b602082019050919050565b600061399d60298361403c565b91506139a88261462c565b604082019050919050565b60006139c060178361403c565b91506139cb8261467b565b602082019050919050565b60006139e3603e8361403c565b91506139ee826146a4565b604082019050919050565b6000613a0660208361403c565b9150613a11826146f3565b602082019050919050565b6000613a2960208361403c565b9150613a348261471c565b602082019050919050565b6000613a4c602f8361403c565b9150613a5782614745565b604082019050919050565b6000613a6f60188361403c565b9150613a7a82614794565b602082019050919050565b6000613a92601c8361403c565b9150613a9d826147bd565b602082019050919050565b6000613ab560218361403c565b9150613ac0826147e6565b604082019050919050565b6000613ad860228361403c565b9150613ae382614835565b604082019050919050565b6000613afb602c8361403c565b9150613b0682614884565b604082019050919050565b6000613b1e602e8361403c565b9150613b29826148d3565b604082019050919050565b613b3d81614187565b82525050565b6000613b4f82846136db565b60148201915081905092915050565b6000613b6a8285613782565b9150613b768284613782565b91508190509392505050565b6000613b8e8286613782565b9150613b9a8285613782565b9150613ba682846137b3565b9150819050949350505050565b6000602082019050613bc860008301846136cc565b92915050565b6000608082019050613be360008301876136cc565b613bf060208301866136cc565b613bfd6040830185613b34565b8181036060830152613c0f8184613710565b905095945050505050565b6000602082019050613c2f60008301846136f2565b92915050565b6000602082019050613c4a6000830184613701565b92915050565b60006020820190508181036000830152613c6a8184613749565b905092915050565b60006020820190508181036000830152613c8b81613832565b9050919050565b60006020820190508181036000830152613cab81613855565b9050919050565b60006020820190508181036000830152613ccb81613878565b9050919050565b60006020820190508181036000830152613ceb8161389b565b9050919050565b60006020820190508181036000830152613d0b816138be565b9050919050565b60006020820190508181036000830152613d2b816138e1565b9050919050565b60006020820190508181036000830152613d4b81613904565b9050919050565b60006020820190508181036000830152613d6b81613927565b9050919050565b60006020820190508181036000830152613d8b8161394a565b9050919050565b60006020820190508181036000830152613dab8161396d565b9050919050565b60006020820190508181036000830152613dcb81613990565b9050919050565b60006020820190508181036000830152613deb816139b3565b9050919050565b60006020820190508181036000830152613e0b816139d6565b9050919050565b60006020820190508181036000830152613e2b816139f9565b9050919050565b60006020820190508181036000830152613e4b81613a1c565b9050919050565b60006020820190508181036000830152613e6b81613a3f565b9050919050565b60006020820190508181036000830152613e8b81613a62565b9050919050565b60006020820190508181036000830152613eab81613a85565b9050919050565b60006020820190508181036000830152613ecb81613aa8565b9050919050565b60006020820190508181036000830152613eeb81613acb565b9050919050565b60006020820190508181036000830152613f0b81613aee565b9050919050565b60006020820190508181036000830152613f2b81613b11565b9050919050565b6000602082019050613f476000830184613b34565b92915050565b6000613f57613f68565b9050613f638282614205565b919050565b6000604051905090565b600067ffffffffffffffff821115613f8d57613f8c614361565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fb957613fb8614361565b5b613fc282614390565b9050602081019050919050565b600067ffffffffffffffff821115613fea57613fe9614361565b5b613ff382614390565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061406382614187565b915061406e83614187565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140a3576140a26142d4565b5b828201905092915050565b60006140b982614187565b91506140c483614187565b9250826140d4576140d3614303565b5b828204905092915050565b60006140ea82614187565b91506140f583614187565b925082821015614108576141076142d4565b5b828203905092915050565b600061411e82614167565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141be5780820151818401526020810190506141a3565b838111156141cd576000848401525b50505050565b600060028204905060018216806141eb57607f821691505b602082108114156141ff576141fe614332565b5b50919050565b61420e82614390565b810181811067ffffffffffffffff8211171561422d5761422c614361565b5b80604052505050565b600061424182614187565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614274576142736142d4565b5b600182019050919050565b600061428a82614291565b9050919050565b600061429c826143a1565b9050919050565b60006142ae82614187565b91506142b983614187565b9250826142c9576142c8614303565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f5075626c69632073616c65206d7573742062652061637469766520746f206d6960008201527f6e742042616e6e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f43616e206f6e6c79206d696e74203120746f6b656e7320617420612074696d65600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4e6f7420612070617274206f6620416c6c6f776c697374000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f43616e206f6e6c79206d696e7420757020746f203220746f6b656e7300000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742042616e6e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61492b81614113565b811461493657600080fd5b50565b61494281614125565b811461494d57600080fd5b50565b61495981614131565b811461496457600080fd5b50565b6149708161413b565b811461497b57600080fd5b50565b61498781614187565b811461499257600080fd5b5056fea264697066735822122023bd80f3df69d01a35150bcd9fa2bcdb8241c26fa018b4b8398962195c6c9a7864736f6c63430008010033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0b4e8c389559611d6d8c7fc452bf9d5eef37d8198e12212cee85d3ab0b6a5011d0000000000000000000000000000000000000000000000000000000000000024687474703a2f2f62616e6e65722e7567776f726b73686f702e636f6d2f62616e6e65722f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d636f464e6171394e33555a78664662473657575a7844514137726d634170587531676b66366e65525a756f310000000000000000000000

-----Decoded View---------------
Arg [0] : initBaseURI (string): http://banner.ugworkshop.com/banner/
Arg [1] : initNotRevealedUri (string): ipfs://QmcoFNaq9N3UZxfFbG6WWZxDQA7rmcApXu1gkf6neRZuo1
Arg [2] : _root (bytes32): 0xb4e8c389559611d6d8c7fc452bf9d5eef37d8198e12212cee85d3ab0b6a5011d

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : b4e8c389559611d6d8c7fc452bf9d5eef37d8198e12212cee85d3ab0b6a5011d
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [4] : 687474703a2f2f62616e6e65722e7567776f726b73686f702e636f6d2f62616e
Arg [5] : 6e65722f00000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [7] : 697066733a2f2f516d636f464e6171394e33555a78664662473657575a784451
Arg [8] : 4137726d634170587531676b66366e65525a756f310000000000000000000000


Deployed Bytecode Sourcemap

48698:5190:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42405:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29139:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30652:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49107:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30169:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43045:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52565:151;;;;;;;;;;;;;:::i;:::-;;31352:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42713:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50172:470;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48926:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52724:80;;;;;;;;;;;;;:::i;:::-;;50650:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31759:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43235:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53778:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53625:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53525:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53142:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28850:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49595:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48974:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48870:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48784:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28581:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7668:103;;;;;;;;;;;;;:::i;:::-;;49015:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49051:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7020:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29308:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30895:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32015:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51161:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49142:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51314:992;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48824:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53254:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52920:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52465:92;;;;;;;;;;;;;:::i;:::-;;31121:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49295:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49240:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53008:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7926:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52812:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42405:224;42507:4;42546:35;42531:50;;;:11;:50;;;;:90;;;;42585:36;42609:11;42585:23;:36::i;:::-;42531:90;42524:97;;42405:224;;;:::o;29139:100::-;29193:13;29226:5;29219:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29139:100;:::o;30652:171::-;30728:7;30748:23;30763:7;30748:14;:23::i;:::-;30791:15;:24;30807:7;30791:24;;;;;;;;;;;;;;;;;;;;;30784:31;;30652:171;;;:::o;49107:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30169:417::-;30250:13;30266:23;30281:7;30266:14;:23::i;:::-;30250:39;;30314:5;30308:11;;:2;:11;;;;30300:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30408:5;30392:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30417:37;30434:5;30441:12;:10;:12::i;:::-;30417:16;:37::i;:::-;30392:62;30370:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;30557:21;30566:2;30570:7;30557:8;:21::i;:::-;30169:417;;;:::o;43045:113::-;43106:7;43133:10;:17;;;;43126:24;;43045:113;:::o;52565:151::-;6906:13;:11;:13::i;:::-;52648:19:::1;;;;;;;;;;;52647:20;52625:19;;:42;;;;;;;;;;;;;;;;;;52695:13;;;;;;;;;;;52694:14;52678:13;;:30;;;;;;;;;;;;;;;;;;52565:151::o:0;31352:336::-;31547:41;31566:12;:10;:12::i;:::-;31580:7;31547:18;:41::i;:::-;31539:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31652:28;31662:4;31668:2;31672:7;31652:9;:28::i;:::-;31352:336;;;:::o;42713:256::-;42810:7;42846:23;42863:5;42846:16;:23::i;:::-;42838:5;:31;42830:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42935:12;:19;42948:5;42935:19;;;;;;;;;;;;;;;:26;42955:5;42935:26;;;;;;;;;;;;42928:33;;42713:256;;;;:::o;50172:470::-;50310:3;48963:4;50299:14;;;;:::i;:::-;50282:13;50266;:11;:13::i;:::-;:29;;;;:::i;:::-;:47;;50257:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;50365:19;;;;;;;;;;;50357:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50500:1;50492:7;;:9;;;;:::i;:::-;50475:13;50449:11;:23;50461:10;50449:23;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:52;;50441:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;50584:13;50557:11;:23;50569:10;50557:23;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;50608:26;50620:13;50608:11;:26::i;:::-;50172:470;:::o;48926:41::-;48963:4;48926:41;:::o;52724:80::-;6906:13;:11;:13::i;:::-;52787:9:::1;;;;;;;;;;;52786:10;52774:9;;:22;;;;;;;;;;;;;;;;;;52724:80::o:0;50650:207::-;6906:13;:11;:13::i;:::-;48963:4:::1;50752:13;50736;:11;:13::i;:::-;:29;;;;:::i;:::-;:43;;50727:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;50823:26;50835:13;50823:11;:26::i;:::-;50650:207:::0;:::o;31759:185::-;31897:39;31914:4;31920:2;31924:7;31897:39;;;;;;;;;;;;:16;:39::i;:::-;31759:185;;;:::o;43235:233::-;43310:7;43346:30;:28;:30::i;:::-;43338:5;:38;43330:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43443:10;43454:5;43443:17;;;;;;;;;;;;;;;;;;;;;;;;43436:24;;43235:233;;;:::o;53778:107::-;53827:7;53854:11;:23;53866:10;53854:23;;;;;;;;;;;;;;;;53847:30;;53778:107;:::o;53625:145::-;6906:13;:11;:13::i;:::-;53683:15:::1;53701:21;53683:39;;53741:2;53733:20;;:29;53754:7;53733:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6930:1;53625:145:::0;:::o;53525:92::-;6906:13;:11;:13::i;:::-;53601:8:::1;53591:7;:18;;;;53525:92:::0;:::o;53142:104::-;6906:13;:11;:13::i;:::-;53227:11:::1;53217:7;:21;;;;;;;;;;;;:::i;:::-;;53142:104:::0;:::o;28850:222::-;28922:7;28942:13;28958:7;:16;28966:7;28958:16;;;;;;;;;;;;;;;;;;;;;28942:32;;29010:1;28993:19;;:5;:19;;;;28985:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29059:5;29052:12;;;28850:222;;;:::o;49595:565::-;49706:55;49714:5;49748:10;49731:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49721:39;;;;;;49706:7;:55::i;:::-;49698:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;48963:4;49825:13;49809;:11;:13::i;:::-;:29;;;;:::i;:::-;:43;;49800:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;49904:13;;;;;;;;;;;49896:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;50018:7;;50001:13;49975:11;:23;49987:10;49975:23;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:50;;49967:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;50102:13;50075:11;:23;50087:10;50075:23;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;50126:26;50138:13;50126:11;:26::i;:::-;49595:565;;:::o;48974:34::-;;;;:::o;48870:29::-;;;;;;;;;;;;;:::o;48784:33::-;;;;;;;;;;;;;:::o;28581:207::-;28653:7;28698:1;28681:19;;:5;:19;;;;28673:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28764:9;:16;28774:5;28764:16;;;;;;;;;;;;;;;;28757:23;;28581:207;;;:::o;7668:103::-;6906:13;:11;:13::i;:::-;7733:30:::1;7760:1;7733:18;:30::i;:::-;7668:103::o:0;49015:29::-;;;;:::o;49051:26::-;;;;:::o;7020:87::-;7066:7;7093:6;;;;;;;;;;;7086:13;;7020:87;:::o;29308:104::-;29364:13;29397:7;29390:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29308:104;:::o;53413:::-;6906:13;:11;:13::i;:::-;53498:11:::1;53485:10;:24;;;;53413:104:::0;:::o;30895:155::-;30990:52;31009:12;:10;:12::i;:::-;31023:8;31033;30990:18;:52::i;:::-;30895:155;;:::o;32015:323::-;32189:41;32208:12;:10;:12::i;:::-;32222:7;32189:18;:41::i;:::-;32181:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32292:38;32306:4;32312:2;32316:7;32325:4;32292:13;:38::i;:::-;32015:323;;;;:::o;51161:145::-;51237:4;51261:37;51280:5;51287:4;;51293;51261:18;:37::i;:::-;51254:44;;51161:145;;;;:::o;49142:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51314:992::-;51432:13;51485:16;51493:7;51485;:16::i;:::-;51463:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;51606:5;51593:18;;:9;;;;;;;;;;;:18;;;51589:72;;;51635:14;51628:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51589:72;51673:23;51699:10;:19;51710:7;51699:19;;;;;;;;;;;51673:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51729:18;51750:10;:8;:10::i;:::-;51729:31;;51858:1;51842:4;51836:18;:23;51832:72;;;51883:9;51876:16;;;;;;51832:72;52034:1;52014:9;52008:23;:27;52004:108;;;52083:4;52089:9;52066:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52052:48;;;;;;52004:108;52257:4;52263:18;:7;:16;:18::i;:::-;52283:13;52240:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52213:85;;;;51314:992;;;;:::o;48824:39::-;;;;;;;;;;;;;:::o;53254:151::-;6906:13;:11;:13::i;:::-;53380:17:::1;53364:13;:33;;;;;;;;;;;;:::i;:::-;;53254:151:::0;:::o;52920:80::-;6906:13;:11;:13::i;:::-;52987:5:::1;52980:4;:12;;;;52920:80:::0;:::o;52465:92::-;6906:13;:11;:13::i;:::-;52536::::1;;;;;;;;;;;52535:14;52519:13;;:30;;;;;;;;;;;;;;;;;;52465:92::o:0;31121:164::-;31218:4;31242:18;:25;31261:5;31242:25;;;;;;;;;;;;;;;:35;31268:8;31242:35;;;;;;;;;;;;;;;;;;;;;;;;;31235:42;;31121:164;;;;:::o;49295:19::-;;;;:::o;49240:46::-;;;;;;;;;;;;;;;;;:::o;53008:126::-;6906:13;:11;:13::i;:::-;53111:15:::1;53094:14;:32;;;;;;;;;;;;:::i;:::-;;53008:126:::0;:::o;7926:201::-;6906:13;:11;:13::i;:::-;8035:1:::1;8015:22;;:8;:22;;;;8007:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8091:28;8110:8;8091:18;:28::i;:::-;7926:201:::0;:::o;52812:100::-;6906:13;:11;:13::i;:::-;52894:10:::1;52882:9;:22;;;;52812:100:::0;:::o;28212:305::-;28314:4;28366:25;28351:40;;;:11;:40;;;;:105;;;;28423:33;28408:48;;;:11;:48;;;;28351:105;:158;;;;28473:36;28497:11;28473:23;:36::i;:::-;28351:158;28331:178;;28212:305;;;:::o;38627:135::-;38709:16;38717:7;38709;:16::i;:::-;38701:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;38627:135;:::o;5571:98::-;5624:7;5651:10;5644:17;;5571:98;:::o;37906:174::-;38008:2;37981:15;:24;37997:7;37981:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38064:7;38060:2;38026:46;;38035:23;38050:7;38035:14;:23::i;:::-;38026:46;;;;;;;;;;;;37906:174;;:::o;7185:132::-;7260:12;:10;:12::i;:::-;7249:23;;:7;:5;:7::i;:::-;:23;;;7241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7185:132::o;34139:264::-;34232:4;34249:13;34265:23;34280:7;34265:14;:23::i;:::-;34249:39;;34318:5;34307:16;;:7;:16;;;:52;;;;34327:32;34344:5;34351:7;34327:16;:32::i;:::-;34307:52;:87;;;;34387:7;34363:31;;:20;34375:7;34363:11;:20::i;:::-;:31;;;34307:87;34299:96;;;34139:264;;;;:::o;37162:625::-;37321:4;37294:31;;:23;37309:7;37294:14;:23::i;:::-;:31;;;37286:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37400:1;37386:16;;:2;:16;;;;37378:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37456:39;37477:4;37483:2;37487:7;37456:20;:39::i;:::-;37560:29;37577:1;37581:7;37560:8;:29::i;:::-;37621:1;37602:9;:15;37612:4;37602:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37650:1;37633:9;:13;37643:2;37633:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37681:2;37662:7;:16;37670:7;37662:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37720:7;37716:2;37701:27;;37710:4;37701:27;;;;;;;;;;;;37741:38;37761:4;37767:2;37771:7;37741:19;:38::i;:::-;37162:625;;;:::o;50865:288::-;50934:9;50929:217;50953:13;50949:1;:17;50929:217;;;50988:17;51008:13;:11;:13::i;:::-;50988:33;;48963:4;51040:13;:11;:13::i;:::-;:26;51036:99;;;51087:32;51097:10;51109:9;51087;:32::i;:::-;51036:99;50929:217;50968:3;;;;;:::i;:::-;;;;50929:217;;;;50865:288;:::o;8287:191::-;8361:16;8380:6;;;;;;;;;;;8361:25;;8406:8;8397:6;;:17;;;;;;;;;;;;;;;;;;8461:8;8430:40;;8451:8;8430:40;;;;;;;;;;;;8287:191;;:::o;38223:315::-;38378:8;38369:17;;:5;:17;;;;38361:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38465:8;38427:18;:25;38446:5;38427:25;;;;;;;;;;;;;;;:35;38453:8;38427:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38511:8;38489:41;;38504:5;38489:41;;;38521:8;38489:41;;;;;;:::i;:::-;;;;;;;;38223:315;;;:::o;33219:313::-;33375:28;33385:4;33391:2;33395:7;33375:9;:28::i;:::-;33422:47;33445:4;33451:2;33455:7;33464:4;33422:22;:47::i;:::-;33414:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33219:313;;;;:::o;929:190::-;1054:4;1107;1078:25;1091:5;1098:4;1078:12;:25::i;:::-;:33;1071:40;;929:190;;;;;:::o;33845:127::-;33910:4;33962:1;33934:30;;:7;:16;33942:7;33934:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33927:37;;33845:127;;;:::o;52331:108::-;52391:13;52424:7;52417:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52331:108;:::o;2825:723::-;2881:13;3111:1;3102:5;:10;3098:53;;;3129:10;;;;;;;;;;;;;;;;;;;;;3098:53;3161:12;3176:5;3161:20;;3192:14;3217:78;3232:1;3224:4;:9;3217:78;;3250:8;;;;;:::i;:::-;;;;3281:2;3273:10;;;;;:::i;:::-;;;3217:78;;;3305:19;3337:6;3327:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3305:39;;3355:154;3371:1;3362:5;:10;3355:154;;3399:1;3389:11;;;;;:::i;:::-;;;3466:2;3458:5;:10;;;;:::i;:::-;3445:2;:24;;;;:::i;:::-;3432:39;;3415:6;3422;3415:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;3495:2;3486:11;;;;;:::i;:::-;;;3355:154;;;3533:6;3519:21;;;;;2825:723;;;;:::o;19874:157::-;19959:4;19998:25;19983:40;;;:11;:40;;;;19976:47;;19874:157;;;:::o;44081:589::-;44225:45;44252:4;44258:2;44262:7;44225:26;:45::i;:::-;44303:1;44287:18;;:4;:18;;;44283:187;;;44322:40;44354:7;44322:31;:40::i;:::-;44283:187;;;44392:2;44384:10;;:4;:10;;;44380:90;;44411:47;44444:4;44450:7;44411:32;:47::i;:::-;44380:90;44283:187;44498:1;44484:16;;:2;:16;;;44480:183;;;44517:45;44554:7;44517:36;:45::i;:::-;44480:183;;;44590:4;44584:10;;:2;:10;;;44580:83;;44611:40;44639:2;44643:7;44611:27;:40::i;:::-;44580:83;44480:183;44081:589;;;:::o;41262:125::-;;;;:::o;34745:110::-;34821:26;34831:2;34835:7;34821:26;;;;;;;;;;;;:9;:26::i;:::-;34745:110;;:::o;39326:853::-;39480:4;39501:15;:2;:13;;;:15::i;:::-;39497:675;;;39553:2;39537:36;;;39574:12;:10;:12::i;:::-;39588:4;39594:7;39603:4;39537:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39533:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39795:1;39778:6;:13;:18;39774:328;;;39821:60;;;;;;;;;;:::i;:::-;;;;;;;;39774:328;40052:6;40046:13;40037:6;40033:2;40029:15;40022:38;39533:584;39669:41;;;39659:51;;;:6;:51;;;;39652:58;;;;;39497:675;40156:4;40149:11;;39326:853;;;;;;;:::o;1481:675::-;1564:7;1584:20;1607:4;1584:27;;1627:9;1622:497;1646:5;:12;1642:1;:16;1622:497;;;1680:20;1703:5;1709:1;1703:8;;;;;;;;;;;;;;;;;;;;;;1680:31;;1746:12;1730;:28;1726:382;;1873:42;1888:12;1902;1873:14;:42::i;:::-;1858:57;;1726:382;;;2050:42;2065:12;2079;2050:14;:42::i;:::-;2035:57;;1726:382;1622:497;1660:3;;;;;:::i;:::-;;;;1622:497;;;;2136:12;2129:19;;;1481:675;;;;:::o;40751:126::-;;;;:::o;45393:164::-;45497:10;:17;;;;45470:15;:24;45486:7;45470:24;;;;;;;;;;;:44;;;;45525:10;45541:7;45525:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45393:164;:::o;46184:988::-;46450:22;46500:1;46475:22;46492:4;46475:16;:22::i;:::-;:26;;;;:::i;:::-;46450:51;;46512:18;46533:17;:26;46551:7;46533:26;;;;;;;;;;;;46512:47;;46680:14;46666:10;:28;46662:328;;46711:19;46733:12;:18;46746:4;46733:18;;;;;;;;;;;;;;;:34;46752:14;46733:34;;;;;;;;;;;;46711:56;;46817:11;46784:12;:18;46797:4;46784:18;;;;;;;;;;;;;;;:30;46803:10;46784:30;;;;;;;;;;;:44;;;;46934:10;46901:17;:30;46919:11;46901:30;;;;;;;;;;;:43;;;;46662:328;;47086:17;:26;47104:7;47086:26;;;;;;;;;;;47079:33;;;47130:12;:18;47143:4;47130:18;;;;;;;;;;;;;;;:34;47149:14;47130:34;;;;;;;;;;;47123:41;;;46184:988;;;;:::o;47467:1079::-;47720:22;47765:1;47745:10;:17;;;;:21;;;;:::i;:::-;47720:46;;47777:18;47798:15;:24;47814:7;47798:24;;;;;;;;;;;;47777:45;;48149:19;48171:10;48182:14;48171:26;;;;;;;;;;;;;;;;;;;;;;;;48149:48;;48235:11;48210:10;48221;48210:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48346:10;48315:15;:28;48331:11;48315:28;;;;;;;;;;;:41;;;;48487:15;:24;48503:7;48487:24;;;;;;;;;;;48480:31;;;48522:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47467:1079;;;;:::o;44971:221::-;45056:14;45073:20;45090:2;45073:16;:20::i;:::-;45056:37;;45131:7;45104:12;:16;45117:2;45104:16;;;;;;;;;;;;;;;:24;45121:6;45104:24;;;;;;;;;;;:34;;;;45178:6;45149:17;:26;45167:7;45149:26;;;;;;;;;;;:35;;;;44971:221;;;:::o;35082:319::-;35211:18;35217:2;35221:7;35211:5;:18::i;:::-;35262:53;35293:1;35297:2;35301:7;35310:4;35262:22;:53::i;:::-;35240:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;35082:319;;;:::o;9718:326::-;9778:4;10035:1;10013:7;:19;;;:23;10006:30;;9718:326;;;:::o;2164:224::-;2232:13;2295:1;2289:4;2282:15;2324:1;2318:4;2311:15;2365:4;2359;2349:21;2340:30;;2267:114;;;;:::o;35737:439::-;35831:1;35817:16;;:2;:16;;;;35809:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35890:16;35898:7;35890;:16::i;:::-;35889:17;35881:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35952:45;35981:1;35985:2;35989:7;35952:20;:45::i;:::-;36027:1;36010:9;:13;36020:2;36010:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36058:2;36039:7;:16;36047:7;36039:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36103:7;36099:2;36078:33;;36095:1;36078:33;;;;;;;;;;;;36124:44;36152:1;36156:2;36160:7;36124:19;:44::i;:::-;35737:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;653:343::-;;755:65;771:48;812:6;771:48;:::i;:::-;755:65;:::i;:::-;746:74;;843:6;836:5;829:21;881:4;874:5;870:16;919:3;910:6;905:3;901:16;898:25;895:2;;;936:1;933;926:12;895:2;949:41;983:6;978:3;973;949:41;:::i;:::-;736:260;;;;;;:::o;1002:345::-;;1105:66;1121:49;1163:6;1121:49;:::i;:::-;1105:66;:::i;:::-;1096:75;;1194:6;1187:5;1180:21;1232:4;1225:5;1221:16;1270:3;1261:6;1256:3;1252:16;1249:25;1246:2;;;1287:1;1284;1277:12;1246:2;1300:41;1334:6;1329:3;1324;1300:41;:::i;:::-;1086:261;;;;;;:::o;1353:139::-;;1437:6;1424:20;1415:29;;1453:33;1480:5;1453:33;:::i;:::-;1405:87;;;;:::o;1515:303::-;;1635:3;1628:4;1620:6;1616:17;1612:27;1602:2;;1653:1;1650;1643:12;1602:2;1693:6;1680:20;1718:94;1808:3;1800:6;1793:4;1785:6;1781:17;1718:94;:::i;:::-;1709:103;;1592:226;;;;;:::o;1824:133::-;;1905:6;1892:20;1883:29;;1921:30;1945:5;1921:30;:::i;:::-;1873:84;;;;:::o;1963:139::-;;2047:6;2034:20;2025:29;;2063:33;2090:5;2063:33;:::i;:::-;2015:87;;;;:::o;2108:137::-;;2191:6;2178:20;2169:29;;2207:32;2233:5;2207:32;:::i;:::-;2159:86;;;;:::o;2251:141::-;;2338:6;2332:13;2323:22;;2354:32;2380:5;2354:32;:::i;:::-;2313:79;;;;:::o;2411:271::-;;2515:3;2508:4;2500:6;2496:17;2492:27;2482:2;;2533:1;2530;2523:12;2482:2;2573:6;2560:20;2598:78;2672:3;2664:6;2657:4;2649:6;2645:17;2598:78;:::i;:::-;2589:87;;2472:210;;;;;:::o;2702:273::-;;2807:3;2800:4;2792:6;2788:17;2784:27;2774:2;;2825:1;2822;2815:12;2774:2;2865:6;2852:20;2890:79;2965:3;2957:6;2950:4;2942:6;2938:17;2890:79;:::i;:::-;2881:88;;2764:211;;;;;:::o;2981:139::-;;3065:6;3052:20;3043:29;;3081:33;3108:5;3081:33;:::i;:::-;3033:87;;;;:::o;3126:262::-;;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3250:1;3247;3240:12;3202:2;3293:1;3318:53;3363:7;3354:6;3343:9;3339:22;3318:53;:::i;:::-;3308:63;;3264:117;3192:196;;;;:::o;3394:407::-;;;3519:2;3507:9;3498:7;3494:23;3490:32;3487:2;;;3535:1;3532;3525:12;3487:2;3578:1;3603:53;3648:7;3639:6;3628:9;3624:22;3603:53;:::i;:::-;3593:63;;3549:117;3705:2;3731:53;3776:7;3767:6;3756:9;3752:22;3731:53;:::i;:::-;3721:63;;3676:118;3477:324;;;;;:::o;3807:552::-;;;;3949:2;3937:9;3928:7;3924:23;3920:32;3917:2;;;3965:1;3962;3955:12;3917:2;4008:1;4033:53;4078:7;4069:6;4058:9;4054:22;4033:53;:::i;:::-;4023:63;;3979:117;4135:2;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4106:118;4263:2;4289:53;4334:7;4325:6;4314:9;4310:22;4289:53;:::i;:::-;4279:63;;4234:118;3907:452;;;;;:::o;4365:809::-;;;;;4533:3;4521:9;4512:7;4508:23;4504:33;4501:2;;;4550:1;4547;4540:12;4501:2;4593:1;4618:53;4663:7;4654:6;4643:9;4639:22;4618:53;:::i;:::-;4608:63;;4564:117;4720:2;4746:53;4791:7;4782:6;4771:9;4767:22;4746:53;:::i;:::-;4736:63;;4691:118;4848:2;4874:53;4919:7;4910:6;4899:9;4895:22;4874:53;:::i;:::-;4864:63;;4819:118;5004:2;4993:9;4989:18;4976:32;5035:18;5027:6;5024:30;5021:2;;;5067:1;5064;5057:12;5021:2;5095:62;5149:7;5140:6;5129:9;5125:22;5095:62;:::i;:::-;5085:72;;4947:220;4491:683;;;;;;;:::o;5180:401::-;;;5302:2;5290:9;5281:7;5277:23;5273:32;5270:2;;;5318:1;5315;5308:12;5270:2;5361:1;5386:53;5431:7;5422:6;5411:9;5407:22;5386:53;:::i;:::-;5376:63;;5332:117;5488:2;5514:50;5556:7;5547:6;5536:9;5532:22;5514:50;:::i;:::-;5504:60;;5459:115;5260:321;;;;;:::o;5587:407::-;;;5712:2;5700:9;5691:7;5687:23;5683:32;5680:2;;;5728:1;5725;5718:12;5680:2;5771:1;5796:53;5841:7;5832:6;5821:9;5817:22;5796:53;:::i;:::-;5786:63;;5742:117;5898:2;5924:53;5969:7;5960:6;5949:9;5945:22;5924:53;:::i;:::-;5914:63;;5869:118;5670:324;;;;;:::o;6000:550::-;;;6150:2;6138:9;6129:7;6125:23;6121:32;6118:2;;;6166:1;6163;6156:12;6118:2;6237:1;6226:9;6222:17;6209:31;6267:18;6259:6;6256:30;6253:2;;;6299:1;6296;6289:12;6253:2;6327:78;6397:7;6388:6;6377:9;6373:22;6327:78;:::i;:::-;6317:88;;6180:235;6454:2;6480:53;6525:7;6516:6;6505:9;6501:22;6480:53;:::i;:::-;6470:63;;6425:118;6108:442;;;;;:::o;6556:262::-;;6664:2;6652:9;6643:7;6639:23;6635:32;6632:2;;;6680:1;6677;6670:12;6632:2;6723:1;6748:53;6793:7;6784:6;6773:9;6769:22;6748:53;:::i;:::-;6738:63;;6694:117;6622:196;;;;:::o;6824:260::-;;6931:2;6919:9;6910:7;6906:23;6902:32;6899:2;;;6947:1;6944;6937:12;6899:2;6990:1;7015:52;7059:7;7050:6;7039:9;7035:22;7015:52;:::i;:::-;7005:62;;6961:116;6889:195;;;;:::o;7090:282::-;;7208:2;7196:9;7187:7;7183:23;7179:32;7176:2;;;7224:1;7221;7214:12;7176:2;7267:1;7292:63;7347:7;7338:6;7327:9;7323:22;7292:63;:::i;:::-;7282:73;;7238:127;7166:206;;;;:::o;7378:375::-;;7496:2;7484:9;7475:7;7471:23;7467:32;7464:2;;;7512:1;7509;7502:12;7464:2;7583:1;7572:9;7568:17;7555:31;7613:18;7605:6;7602:30;7599:2;;;7645:1;7642;7635:12;7599:2;7673:63;7728:7;7719:6;7708:9;7704:22;7673:63;:::i;:::-;7663:73;;7526:220;7454:299;;;;:::o;7759:262::-;;7867:2;7855:9;7846:7;7842:23;7838:32;7835:2;;;7883:1;7880;7873:12;7835:2;7926:1;7951:53;7996:7;7987:6;7976:9;7972:22;7951:53;:::i;:::-;7941:63;;7897:117;7825:196;;;;:::o;8027:550::-;;;8177:2;8165:9;8156:7;8152:23;8148:32;8145:2;;;8193:1;8190;8183:12;8145:2;8236:1;8261:53;8306:7;8297:6;8286:9;8282:22;8261:53;:::i;:::-;8251:63;;8207:117;8391:2;8380:9;8376:18;8363:32;8422:18;8414:6;8411:30;8408:2;;;8454:1;8451;8444:12;8408:2;8482:78;8552:7;8543:6;8532:9;8528:22;8482:78;:::i;:::-;8472:88;;8334:236;8135:442;;;;;:::o;8583:118::-;8670:24;8688:5;8670:24;:::i;:::-;8665:3;8658:37;8648:53;;:::o;8707:157::-;8812:45;8832:24;8850:5;8832:24;:::i;:::-;8812:45;:::i;:::-;8807:3;8800:58;8790:74;;:::o;8870:109::-;8951:21;8966:5;8951:21;:::i;:::-;8946:3;8939:34;8929:50;;:::o;8985:118::-;9072:24;9090:5;9072:24;:::i;:::-;9067:3;9060:37;9050:53;;:::o;9109:360::-;;9223:38;9255:5;9223:38;:::i;:::-;9277:70;9340:6;9335:3;9277:70;:::i;:::-;9270:77;;9356:52;9401:6;9396:3;9389:4;9382:5;9378:16;9356:52;:::i;:::-;9433:29;9455:6;9433:29;:::i;:::-;9428:3;9424:39;9417:46;;9199:270;;;;;:::o;9475:364::-;;9591:39;9624:5;9591:39;:::i;:::-;9646:71;9710:6;9705:3;9646:71;:::i;:::-;9639:78;;9726:52;9771:6;9766:3;9759:4;9752:5;9748:16;9726:52;:::i;:::-;9803:29;9825:6;9803:29;:::i;:::-;9798:3;9794:39;9787:46;;9567:272;;;;;:::o;9845:377::-;;9979:39;10012:5;9979:39;:::i;:::-;10034:89;10116:6;10111:3;10034:89;:::i;:::-;10027:96;;10132:52;10177:6;10172:3;10165:4;10158:5;10154:16;10132:52;:::i;:::-;10209:6;10204:3;10200:16;10193:23;;9955:267;;;;;:::o;10252:845::-;;10392:5;10386:12;10421:36;10447:9;10421:36;:::i;:::-;10473:89;10555:6;10550:3;10473:89;:::i;:::-;10466:96;;10593:1;10582:9;10578:17;10609:1;10604:137;;;;10755:1;10750:341;;;;10571:520;;10604:137;10688:4;10684:9;10673;10669:25;10664:3;10657:38;10724:6;10719:3;10715:16;10708:23;;10604:137;;10750:341;10817:38;10849:5;10817:38;:::i;:::-;10877:1;10891:154;10905:6;10902:1;10899:13;10891:154;;;10979:7;10973:14;10969:1;10964:3;10960:11;10953:35;11029:1;11020:7;11016:15;11005:26;;10927:4;10924:1;10920:12;10915:17;;10891:154;;;11074:6;11069:3;11065:16;11058:23;;10757:334;;10571:520;;10359:738;;;;;;:::o;11103:366::-;;11266:67;11330:2;11325:3;11266:67;:::i;:::-;11259:74;;11342:93;11431:3;11342:93;:::i;:::-;11460:2;11455:3;11451:12;11444:19;;11249:220;;;:::o;11475:366::-;;11638:67;11702:2;11697:3;11638:67;:::i;:::-;11631:74;;11714:93;11803:3;11714:93;:::i;:::-;11832:2;11827:3;11823:12;11816:19;;11621:220;;;:::o;11847:366::-;;12010:67;12074:2;12069:3;12010:67;:::i;:::-;12003:74;;12086:93;12175:3;12086:93;:::i;:::-;12204:2;12199:3;12195:12;12188:19;;11993:220;;;:::o;12219:366::-;;12382:67;12446:2;12441:3;12382:67;:::i;:::-;12375:74;;12458:93;12547:3;12458:93;:::i;:::-;12576:2;12571:3;12567:12;12560:19;;12365:220;;;:::o;12591:366::-;;12754:67;12818:2;12813:3;12754:67;:::i;:::-;12747:74;;12830:93;12919:3;12830:93;:::i;:::-;12948:2;12943:3;12939:12;12932:19;;12737:220;;;:::o;12963:366::-;;13126:67;13190:2;13185:3;13126:67;:::i;:::-;13119:74;;13202:93;13291:3;13202:93;:::i;:::-;13320:2;13315:3;13311:12;13304:19;;13109:220;;;:::o;13335:366::-;;13498:67;13562:2;13557:3;13498:67;:::i;:::-;13491:74;;13574:93;13663:3;13574:93;:::i;:::-;13692:2;13687:3;13683:12;13676:19;;13481:220;;;:::o;13707:366::-;;13870:67;13934:2;13929:3;13870:67;:::i;:::-;13863:74;;13946:93;14035:3;13946:93;:::i;:::-;14064:2;14059:3;14055:12;14048:19;;13853:220;;;:::o;14079:366::-;;14242:67;14306:2;14301:3;14242:67;:::i;:::-;14235:74;;14318:93;14407:3;14318:93;:::i;:::-;14436:2;14431:3;14427:12;14420:19;;14225:220;;;:::o;14451:366::-;;14614:67;14678:2;14673:3;14614:67;:::i;:::-;14607:74;;14690:93;14779:3;14690:93;:::i;:::-;14808:2;14803:3;14799:12;14792:19;;14597:220;;;:::o;14823:366::-;;14986:67;15050:2;15045:3;14986:67;:::i;:::-;14979:74;;15062:93;15151:3;15062:93;:::i;:::-;15180:2;15175:3;15171:12;15164:19;;14969:220;;;:::o;15195:366::-;;15358:67;15422:2;15417:3;15358:67;:::i;:::-;15351:74;;15434:93;15523:3;15434:93;:::i;:::-;15552:2;15547:3;15543:12;15536:19;;15341:220;;;:::o;15567:366::-;;15730:67;15794:2;15789:3;15730:67;:::i;:::-;15723:74;;15806:93;15895:3;15806:93;:::i;:::-;15924:2;15919:3;15915:12;15908:19;;15713:220;;;:::o;15939:366::-;;16102:67;16166:2;16161:3;16102:67;:::i;:::-;16095:74;;16178:93;16267:3;16178:93;:::i;:::-;16296:2;16291:3;16287:12;16280:19;;16085:220;;;:::o;16311:366::-;;16474:67;16538:2;16533:3;16474:67;:::i;:::-;16467:74;;16550:93;16639:3;16550:93;:::i;:::-;16668:2;16663:3;16659:12;16652:19;;16457:220;;;:::o;16683:366::-;;16846:67;16910:2;16905:3;16846:67;:::i;:::-;16839:74;;16922:93;17011:3;16922:93;:::i;:::-;17040:2;17035:3;17031:12;17024:19;;16829:220;;;:::o;17055:366::-;;17218:67;17282:2;17277:3;17218:67;:::i;:::-;17211:74;;17294:93;17383:3;17294:93;:::i;:::-;17412:2;17407:3;17403:12;17396:19;;17201:220;;;:::o;17427:366::-;;17590:67;17654:2;17649:3;17590:67;:::i;:::-;17583:74;;17666:93;17755:3;17666:93;:::i;:::-;17784:2;17779:3;17775:12;17768:19;;17573:220;;;:::o;17799:366::-;;17962:67;18026:2;18021:3;17962:67;:::i;:::-;17955:74;;18038:93;18127:3;18038:93;:::i;:::-;18156:2;18151:3;18147:12;18140:19;;17945:220;;;:::o;18171:366::-;;18334:67;18398:2;18393:3;18334:67;:::i;:::-;18327:74;;18410:93;18499:3;18410:93;:::i;:::-;18528:2;18523:3;18519:12;18512:19;;18317:220;;;:::o;18543:366::-;;18706:67;18770:2;18765:3;18706:67;:::i;:::-;18699:74;;18782:93;18871:3;18782:93;:::i;:::-;18900:2;18895:3;18891:12;18884:19;;18689:220;;;:::o;18915:366::-;;19078:67;19142:2;19137:3;19078:67;:::i;:::-;19071:74;;19154:93;19243:3;19154:93;:::i;:::-;19272:2;19267:3;19263:12;19256:19;;19061:220;;;:::o;19287:118::-;19374:24;19392:5;19374:24;:::i;:::-;19369:3;19362:37;19352:53;;:::o;19411:256::-;;19538:75;19609:3;19600:6;19538:75;:::i;:::-;19638:2;19633:3;19629:12;19622:19;;19658:3;19651:10;;19527:140;;;;:::o;19673:435::-;;19875:95;19966:3;19957:6;19875:95;:::i;:::-;19868:102;;19987:95;20078:3;20069:6;19987:95;:::i;:::-;19980:102;;20099:3;20092:10;;19857:251;;;;;:::o;20114:589::-;;20361:95;20452:3;20443:6;20361:95;:::i;:::-;20354:102;;20473:95;20564:3;20555:6;20473:95;:::i;:::-;20466:102;;20585:92;20673:3;20664:6;20585:92;:::i;:::-;20578:99;;20694:3;20687:10;;20343:360;;;;;;:::o;20709:222::-;;20840:2;20829:9;20825:18;20817:26;;20853:71;20921:1;20910:9;20906:17;20897:6;20853:71;:::i;:::-;20807:124;;;;:::o;20937:640::-;;21170:3;21159:9;21155:19;21147:27;;21184:71;21252:1;21241:9;21237:17;21228:6;21184:71;:::i;:::-;21265:72;21333:2;21322:9;21318:18;21309:6;21265:72;:::i;:::-;21347;21415:2;21404:9;21400:18;21391:6;21347:72;:::i;:::-;21466:9;21460:4;21456:20;21451:2;21440:9;21436:18;21429:48;21494:76;21565:4;21556:6;21494:76;:::i;:::-;21486:84;;21137:440;;;;;;;:::o;21583:210::-;;21708:2;21697:9;21693:18;21685:26;;21721:65;21783:1;21772:9;21768:17;21759:6;21721:65;:::i;:::-;21675:118;;;;:::o;21799:222::-;;21930:2;21919:9;21915:18;21907:26;;21943:71;22011:1;22000:9;21996:17;21987:6;21943:71;:::i;:::-;21897:124;;;;:::o;22027:313::-;;22178:2;22167:9;22163:18;22155:26;;22227:9;22221:4;22217:20;22213:1;22202:9;22198:17;22191:47;22255:78;22328:4;22319:6;22255:78;:::i;:::-;22247:86;;22145:195;;;;:::o;22346:419::-;;22550:2;22539:9;22535:18;22527:26;;22599:9;22593:4;22589:20;22585:1;22574:9;22570:17;22563:47;22627:131;22753:4;22627:131;:::i;:::-;22619:139;;22517:248;;;:::o;22771:419::-;;22975:2;22964:9;22960:18;22952:26;;23024:9;23018:4;23014:20;23010:1;22999:9;22995:17;22988:47;23052:131;23178:4;23052:131;:::i;:::-;23044:139;;22942:248;;;:::o;23196:419::-;;23400:2;23389:9;23385:18;23377:26;;23449:9;23443:4;23439:20;23435:1;23424:9;23420:17;23413:47;23477:131;23603:4;23477:131;:::i;:::-;23469:139;;23367:248;;;:::o;23621:419::-;;23825:2;23814:9;23810:18;23802:26;;23874:9;23868:4;23864:20;23860:1;23849:9;23845:17;23838:47;23902:131;24028:4;23902:131;:::i;:::-;23894:139;;23792:248;;;:::o;24046:419::-;;24250:2;24239:9;24235:18;24227:26;;24299:9;24293:4;24289:20;24285:1;24274:9;24270:17;24263:47;24327:131;24453:4;24327:131;:::i;:::-;24319:139;;24217:248;;;:::o;24471:419::-;;24675:2;24664:9;24660:18;24652:26;;24724:9;24718:4;24714:20;24710:1;24699:9;24695:17;24688:47;24752:131;24878:4;24752:131;:::i;:::-;24744:139;;24642:248;;;:::o;24896:419::-;;25100:2;25089:9;25085:18;25077:26;;25149:9;25143:4;25139:20;25135:1;25124:9;25120:17;25113:47;25177:131;25303:4;25177:131;:::i;:::-;25169:139;;25067:248;;;:::o;25321:419::-;;25525:2;25514:9;25510:18;25502:26;;25574:9;25568:4;25564:20;25560:1;25549:9;25545:17;25538:47;25602:131;25728:4;25602:131;:::i;:::-;25594:139;;25492:248;;;:::o;25746:419::-;;25950:2;25939:9;25935:18;25927:26;;25999:9;25993:4;25989:20;25985:1;25974:9;25970:17;25963:47;26027:131;26153:4;26027:131;:::i;:::-;26019:139;;25917:248;;;:::o;26171:419::-;;26375:2;26364:9;26360:18;26352:26;;26424:9;26418:4;26414:20;26410:1;26399:9;26395:17;26388:47;26452:131;26578:4;26452:131;:::i;:::-;26444:139;;26342:248;;;:::o;26596:419::-;;26800:2;26789:9;26785:18;26777:26;;26849:9;26843:4;26839:20;26835:1;26824:9;26820:17;26813:47;26877:131;27003:4;26877:131;:::i;:::-;26869:139;;26767:248;;;:::o;27021:419::-;;27225:2;27214:9;27210:18;27202:26;;27274:9;27268:4;27264:20;27260:1;27249:9;27245:17;27238:47;27302:131;27428:4;27302:131;:::i;:::-;27294:139;;27192:248;;;:::o;27446:419::-;;27650:2;27639:9;27635:18;27627:26;;27699:9;27693:4;27689:20;27685:1;27674:9;27670:17;27663:47;27727:131;27853:4;27727:131;:::i;:::-;27719:139;;27617:248;;;:::o;27871:419::-;;28075:2;28064:9;28060:18;28052:26;;28124:9;28118:4;28114:20;28110:1;28099:9;28095:17;28088:47;28152:131;28278:4;28152:131;:::i;:::-;28144:139;;28042:248;;;:::o;28296:419::-;;28500:2;28489:9;28485:18;28477:26;;28549:9;28543:4;28539:20;28535:1;28524:9;28520:17;28513:47;28577:131;28703:4;28577:131;:::i;:::-;28569:139;;28467:248;;;:::o;28721:419::-;;28925:2;28914:9;28910:18;28902:26;;28974:9;28968:4;28964:20;28960:1;28949:9;28945:17;28938:47;29002:131;29128:4;29002:131;:::i;:::-;28994:139;;28892:248;;;:::o;29146:419::-;;29350:2;29339:9;29335:18;29327:26;;29399:9;29393:4;29389:20;29385:1;29374:9;29370:17;29363:47;29427:131;29553:4;29427:131;:::i;:::-;29419:139;;29317:248;;;:::o;29571:419::-;;29775:2;29764:9;29760:18;29752:26;;29824:9;29818:4;29814:20;29810:1;29799:9;29795:17;29788:47;29852:131;29978:4;29852:131;:::i;:::-;29844:139;;29742:248;;;:::o;29996:419::-;;30200:2;30189:9;30185:18;30177:26;;30249:9;30243:4;30239:20;30235:1;30224:9;30220:17;30213:47;30277:131;30403:4;30277:131;:::i;:::-;30269:139;;30167:248;;;:::o;30421:419::-;;30625:2;30614:9;30610:18;30602:26;;30674:9;30668:4;30664:20;30660:1;30649:9;30645:17;30638:47;30702:131;30828:4;30702:131;:::i;:::-;30694:139;;30592:248;;;:::o;30846:419::-;;31050:2;31039:9;31035:18;31027:26;;31099:9;31093:4;31089:20;31085:1;31074:9;31070:17;31063:47;31127:131;31253:4;31127:131;:::i;:::-;31119:139;;31017:248;;;:::o;31271:419::-;;31475:2;31464:9;31460:18;31452:26;;31524:9;31518:4;31514:20;31510:1;31499:9;31495:17;31488:47;31552:131;31678:4;31552:131;:::i;:::-;31544:139;;31442:248;;;:::o;31696:222::-;;31827:2;31816:9;31812:18;31804:26;;31840:71;31908:1;31897:9;31893:17;31884:6;31840:71;:::i;:::-;31794:124;;;;:::o;31924:129::-;;31985:20;;:::i;:::-;31975:30;;32014:33;32042:4;32034:6;32014:33;:::i;:::-;31965:88;;;:::o;32059:75::-;;32125:2;32119:9;32109:19;;32099:35;:::o;32140:311::-;;32307:18;32299:6;32296:30;32293:2;;;32329:18;;:::i;:::-;32293:2;32379:4;32371:6;32367:17;32359:25;;32439:4;32433;32429:15;32421:23;;32222:229;;;:::o;32457:307::-;;32608:18;32600:6;32597:30;32594:2;;;32630:18;;:::i;:::-;32594:2;32668:29;32690:6;32668:29;:::i;:::-;32660:37;;32752:4;32746;32742:15;32734:23;;32523:241;;;:::o;32770:308::-;;32922:18;32914:6;32911:30;32908:2;;;32944:18;;:::i;:::-;32908:2;32982:29;33004:6;32982:29;:::i;:::-;32974:37;;33066:4;33060;33056:15;33048:23;;32837:241;;;:::o;33084:141::-;;33156:3;33148:11;;33179:3;33176:1;33169:14;33213:4;33210:1;33200:18;33192:26;;33138:87;;;:::o;33231:98::-;;33316:5;33310:12;33300:22;;33289:40;;;:::o;33335:99::-;;33421:5;33415:12;33405:22;;33394:40;;;:::o;33440:168::-;;33557:6;33552:3;33545:19;33597:4;33592:3;33588:14;33573:29;;33535:73;;;;:::o;33614:169::-;;33732:6;33727:3;33720:19;33772:4;33767:3;33763:14;33748:29;;33710:73;;;;:::o;33789:148::-;;33928:3;33913:18;;33903:34;;;;:::o;33943:305::-;;34002:20;34020:1;34002:20;:::i;:::-;33997:25;;34036:20;34054:1;34036:20;:::i;:::-;34031:25;;34190:1;34122:66;34118:74;34115:1;34112:81;34109:2;;;34196:18;;:::i;:::-;34109:2;34240:1;34237;34233:9;34226:16;;33987:261;;;;:::o;34254:185::-;;34311:20;34329:1;34311:20;:::i;:::-;34306:25;;34345:20;34363:1;34345:20;:::i;:::-;34340:25;;34384:1;34374:2;;34389:18;;:::i;:::-;34374:2;34431:1;34428;34424:9;34419:14;;34296:143;;;;:::o;34445:191::-;;34505:20;34523:1;34505:20;:::i;:::-;34500:25;;34539:20;34557:1;34539:20;:::i;:::-;34534:25;;34578:1;34575;34572:8;34569:2;;;34583:18;;:::i;:::-;34569:2;34628:1;34625;34621:9;34613:17;;34490:146;;;;:::o;34642:96::-;;34708:24;34726:5;34708:24;:::i;:::-;34697:35;;34687:51;;;:::o;34744:90::-;;34821:5;34814:13;34807:21;34796:32;;34786:48;;;:::o;34840:77::-;;34906:5;34895:16;;34885:32;;;:::o;34923:149::-;;34999:66;34992:5;34988:78;34977:89;;34967:105;;;:::o;35078:126::-;;35155:42;35148:5;35144:54;35133:65;;35123:81;;;:::o;35210:77::-;;35276:5;35265:16;;35255:32;;;:::o;35293:154::-;35377:6;35372:3;35367;35354:30;35439:1;35430:6;35425:3;35421:16;35414:27;35344:103;;;:::o;35453:307::-;35521:1;35531:113;35545:6;35542:1;35539:13;35531:113;;;35630:1;35625:3;35621:11;35615:18;35611:1;35606:3;35602:11;35595:39;35567:2;35564:1;35560:10;35555:15;;35531:113;;;35662:6;35659:1;35656:13;35653:2;;;35742:1;35733:6;35728:3;35724:16;35717:27;35653:2;35502:258;;;;:::o;35766:320::-;;35847:1;35841:4;35837:12;35827:22;;35894:1;35888:4;35884:12;35915:18;35905:2;;35971:4;35963:6;35959:17;35949:27;;35905:2;36033;36025:6;36022:14;36002:18;35999:38;35996:2;;;36052:18;;:::i;:::-;35996:2;35817:269;;;;:::o;36092:281::-;36175:27;36197:4;36175:27;:::i;:::-;36167:6;36163:40;36305:6;36293:10;36290:22;36269:18;36257:10;36254:34;36251:62;36248:2;;;36316:18;;:::i;:::-;36248:2;36356:10;36352:2;36345:22;36135:238;;;:::o;36379:233::-;;36441:24;36459:5;36441:24;:::i;:::-;36432:33;;36487:66;36480:5;36477:77;36474:2;;;36557:18;;:::i;:::-;36474:2;36604:1;36597:5;36593:13;36586:20;;36422:190;;;:::o;36618:100::-;;36686:26;36706:5;36686:26;:::i;:::-;36675:37;;36665:53;;;:::o;36724:94::-;;36792:20;36806:5;36792:20;:::i;:::-;36781:31;;36771:47;;;:::o;36824:176::-;;36873:20;36891:1;36873:20;:::i;:::-;36868:25;;36907:20;36925:1;36907:20;:::i;:::-;36902:25;;36946:1;36936:2;;36951:18;;:::i;:::-;36936:2;36992:1;36989;36985:9;36980:14;;36858:142;;;;:::o;37006:180::-;37054:77;37051:1;37044:88;37151:4;37148:1;37141:15;37175:4;37172:1;37165:15;37192:180;37240:77;37237:1;37230:88;37337:4;37334:1;37327:15;37361:4;37358:1;37351:15;37378:180;37426:77;37423:1;37416:88;37523:4;37520:1;37513:15;37547:4;37544:1;37537:15;37564:180;37612:77;37609:1;37602:88;37709:4;37706:1;37699:15;37733:4;37730:1;37723:15;37750:102;;37842:2;37838:7;37833:2;37826:5;37822:14;37818:28;37808:38;;37798:54;;;:::o;37858:94::-;;37939:5;37935:2;37931:14;37910:35;;37900:52;;;:::o;37958:230::-;38098:34;38094:1;38086:6;38082:14;38075:58;38167:13;38162:2;38154:6;38150:15;38143:38;38064:124;:::o;38194:237::-;38334:34;38330:1;38322:6;38318:14;38311:58;38403:20;38398:2;38390:6;38386:15;38379:45;38300:131;:::o;38437:225::-;38577:34;38573:1;38565:6;38561:14;38554:58;38646:8;38641:2;38633:6;38629:15;38622:33;38543:119;:::o;38668:224::-;38808:34;38804:1;38796:6;38792:14;38785:58;38877:7;38872:2;38864:6;38860:15;38853:32;38774:118;:::o;38898:178::-;39038:30;39034:1;39026:6;39022:14;39015:54;39004:72;:::o;39082:178::-;39222:30;39218:1;39210:6;39206:14;39199:54;39188:72;:::o;39266:228::-;39406:34;39402:1;39394:6;39390:14;39383:58;39475:11;39470:2;39462:6;39458:15;39451:36;39372:122;:::o;39500:223::-;39640:34;39636:1;39628:6;39624:14;39617:58;39709:6;39704:2;39696:6;39692:15;39685:31;39606:117;:::o;39729:175::-;39869:27;39865:1;39857:6;39853:14;39846:51;39835:69;:::o;39910:182::-;40050:34;40046:1;40038:6;40034:14;40027:58;40016:76;:::o;40098:228::-;40238:34;40234:1;40226:6;40222:14;40215:58;40307:11;40302:2;40294:6;40290:15;40283:36;40204:122;:::o;40332:173::-;40472:25;40468:1;40460:6;40456:14;40449:49;40438:67;:::o;40511:249::-;40651:34;40647:1;40639:6;40635:14;40628:58;40720:32;40715:2;40707:6;40703:15;40696:57;40617:143;:::o;40766:182::-;40906:34;40902:1;40894:6;40890:14;40883:58;40872:76;:::o;40954:182::-;41094:34;41090:1;41082:6;41078:14;41071:58;41060:76;:::o;41142:234::-;41282:34;41278:1;41270:6;41266:14;41259:58;41351:17;41346:2;41338:6;41334:15;41327:42;41248:128;:::o;41382:174::-;41522:26;41518:1;41510:6;41506:14;41499:50;41488:68;:::o;41562:178::-;41702:30;41698:1;41690:6;41686:14;41679:54;41668:72;:::o;41746:220::-;41886:34;41882:1;41874:6;41870:14;41863:58;41955:3;41950:2;41942:6;41938:15;41931:28;41852:114;:::o;41972:221::-;42112:34;42108:1;42100:6;42096:14;42089:58;42181:4;42176:2;42168:6;42164:15;42157:29;42078:115;:::o;42199:231::-;42339:34;42335:1;42327:6;42323:14;42316:58;42408:14;42403:2;42395:6;42391:15;42384:39;42305:125;:::o;42436:233::-;42576:34;42572:1;42564:6;42560:14;42553:58;42645:16;42640:2;42632:6;42628:15;42621:41;42542:127;:::o;42675:122::-;42748:24;42766:5;42748:24;:::i;:::-;42741:5;42738:35;42728:2;;42787:1;42784;42777:12;42728:2;42718:79;:::o;42803:116::-;42873:21;42888:5;42873:21;:::i;:::-;42866:5;42863:32;42853:2;;42909:1;42906;42899:12;42853:2;42843:76;:::o;42925:122::-;42998:24;43016:5;42998:24;:::i;:::-;42991:5;42988:35;42978:2;;43037:1;43034;43027:12;42978:2;42968:79;:::o;43053:120::-;43125:23;43142:5;43125:23;:::i;:::-;43118:5;43115:34;43105:2;;43163:1;43160;43153:12;43105:2;43095:78;:::o;43179:122::-;43252:24;43270:5;43252:24;:::i;:::-;43245:5;43242:35;43232:2;;43291:1;43288;43281:12;43232:2;43222:79;:::o

Swarm Source

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