ETH Price: $3,407.39 (+1.12%)

Token

Bored Breakfast Club (BBC)
 

Overview

Max Total Supply

5,000 BBC

Holders

2,508

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BBC
0xb0ca2e19356f763721110b2e0b318883df844cbc
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Bored Breakfast Club consists of 5,000 unique breakfast scenes, living as NFTs on the Ethereum blockchain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BoredBreakfastClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-08
*/

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


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;


/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

// File: @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 v4.4.1 (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: balance query for the zero address");
        return _balances[owner];
    }

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

// File: contracts/BBC_Mint.sol



//  ______                        _
// (____  \                      | |
//  ____)  ) ___   ____ _____  __| |
// |  __  ( / _ \ / ___) ___ |/ _  |
// | |__)  ) |_| | |   | ____( (_| |
// |______/ \___/|_|   |_____)\____|

//  ______                    _        ___
// (____  \                  | |      / __)             _
//  ____)  ) ____ _____ _____| |  _ _| |__ _____  ___ _| |_
// |  __  ( / ___) ___ (____ | |_/ |_   __|____ |/___|_   _)
// | |__)  ) |   | ____/ ___ |  _ (  | |  / ___ |___ | | |_
// |______/|_|   |_____)_____|_| \_) |_|  \_____(___/   \__)

//  _______ _        _
// (_______) |      | |
//  _      | | _   _| |__
// | |     | || | | |  _ \
// | |_____| || |_| | |_) )
//  \______)\_)____/|____/


pragma solidity 0.8.7;





contract BoredBreakfastClub is ERC721, Ownable {
    using Strings for uint256;
    using Counters for Counters.Counter;
    Counters.Counter private _nextTokenId;
    Counters.Counter private _nextReservationId;

    address private _signerAddress;
    address payable public bbc_address;

    bool public isSaleActive = false;
    bool public locked;

    string public _tokenBaseURI;
    string public _contractURI;

    uint256 public RESERVED = 100;
    uint256 public PUBLIC = 9900;
    uint256 public MAX_TOKENS = RESERVED + PUBLIC;
    uint256 public PRICE = 0.08 ether;
    uint256 public MAX_PER_MINT = 3;

    mapping(string => bool) public _usedNonce;

    event Redeemed(address ownerOfToken, uint256 quantity, uint256 totalSupply);

    constructor(string memory name, string memory symbol, address _bbc_address)
    ERC721(name, symbol) {
        _nextTokenId.increment();
        _nextReservationId.increment();
        bbc_address = payable(_bbc_address);
    }

    modifier notLocked {
        require(!locked, "Contract metadata methods are locked");
        _;
    }

    function redeemReserved(address _receiver, uint256 quantity) external onlyOwner
    {
        require(totalReserved() + quantity <= RESERVED, "RESERVATIONS_ARE_CLOSED");
        for(uint256 i = 0; i < quantity; i++) {
            _nextTokenId.increment();
            _nextReservationId.increment();
            _safeMint(_receiver, totalSupply());
        }
        emit Redeemed(_receiver, quantity, totalSupply());
    }

    function redeem(uint256 quantity, string calldata nonce, bytes calldata signature)
    external payable
    {
        require(isSaleActive, "BREAKFAST_HAS_NOT_STARTED");
        require(quantity <= MAX_PER_MINT, "DON'T_BE_GREEDY_WITH_THE_BACON");
        require(!_usedNonce[nonce], "BREAKFAST_TICKET_USED");
        require(totalSupply() + quantity <= MAX_TOKENS, "BREAKFAST_HAS_BEEN_SERVED");
        require(_verify(_hash(msg.sender, quantity, nonce), signature), "INVALID_SIGNATURE");
        require(PRICE * quantity <= msg.value, "INSUFFICIENT_ETH");

        _usedNonce[nonce] = true;
        for(uint256 i = 0; i < quantity; i++) {
            _nextTokenId.increment();
            _safeMint(msg.sender, totalSupply());
        }
        emit Redeemed(msg.sender, quantity, totalSupply());
    }

    function _hash(address account, uint256 quantity, string calldata nonce)
    private pure returns (bytes32)
    {
        return ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(quantity, account, nonce)));
    }

    function _verify(bytes32 digest, bytes calldata signature)
    private view returns (bool)
    {
        return _signerAddress == ECDSA.recover(digest, signature);
    }

    // Setters
    function setSaleActive() external onlyOwner {
        isSaleActive = !isSaleActive;
    }

    function setSignerAddress(address _signer) external onlyOwner {
        _signerAddress = _signer;
    }

    function setMaxTokenQty(uint256 _token_qty) external onlyOwner {
        MAX_PER_MINT = _token_qty;
    }

    function setMintPrice(uint256 _mint_price) external onlyOwner {
        PRICE = _mint_price;
    }

    function setContractURI(string calldata _uri) external onlyOwner {
        _contractURI = _uri;
    }

    function setTokenBaseURI(string calldata _uri) external onlyOwner notLocked {
        _tokenBaseURI = _uri;
    }

    function totalSupply() public view returns (uint256) {
        return _nextTokenId.current() - 1;
    }

    function totalReserved() public view returns (uint256) {
        return _nextReservationId.current() - 1;
    }

    // Metadata
    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) {
        require(_exists(tokenId), "Cannot query non-existent token");

        return string(abi.encodePacked(_tokenBaseURI, tokenId.toString()));
    }

    // Administrative
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = bbc_address.call{value: balance}("");
        require(success, "Failed to send Ether");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"_bbc_address","type":"address"}],"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":false,"internalType":"address","name":"ownerOfToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"Redeemed","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_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"_usedNonce","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":"bbc_address","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"string","name":"nonce","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"redeem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"redeemReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_qty","type":"uint256"}],"name":"setMaxTokenQty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mint_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setTokenBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a60146101000a81548160ff0219169083151502179055506064600d556126ac600e55600e54600d546200003c919062000473565b600f5567011c37937e08000060105560036011553480156200005d57600080fd5b506040516200546a3803806200546a83398181016040528101906200008391906200037a565b828281600090805190602001906200009d92919062000235565b508060019080519060200190620000b692919062000235565b505050620000d9620000cd6200015160201b60201c565b6200015960201b60201c565b620000f060076200021f60201b62001d761760201c565b6200010760086200021f60201b62001d761760201c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200067c565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b828054620002439062000544565b90600052602060002090601f016020900481019282620002675760008555620002b3565b82601f106200028257805160ff1916838001178555620002b3565b82800160010185558215620002b3579182015b82811115620002b257825182559160200191906001019062000295565b5b509050620002c29190620002c6565b5090565b5b80821115620002e1576000816000905550600101620002c7565b5090565b6000620002fc620002f6846200043d565b62000414565b9050828152602081018484840111156200031b576200031a62000642565b5b620003288482856200050e565b509392505050565b600081519050620003418162000662565b92915050565b600082601f8301126200035f576200035e6200063d565b5b815162000371848260208601620002e5565b91505092915050565b6000806000606084860312156200039657620003956200064c565b5b600084015167ffffffffffffffff811115620003b757620003b662000647565b5b620003c58682870162000347565b935050602084015167ffffffffffffffff811115620003e957620003e862000647565b5b620003f78682870162000347565b92505060406200040a8682870162000330565b9150509250925092565b60006200042062000433565b90506200042e82826200057a565b919050565b6000604051905090565b600067ffffffffffffffff8211156200045b576200045a6200060e565b5b620004668262000651565b9050602081019050919050565b6000620004808262000504565b91506200048d8362000504565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004c557620004c4620005b0565b5b828201905092915050565b6000620004dd82620004e4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200052e57808201518184015260208101905062000511565b838111156200053e576000848401525b50505050565b600060028204905060018216806200055d57607f821691505b60208210811415620005745762000573620005df565b5b50919050565b620005858262000651565b810181811067ffffffffffffffff82111715620005a757620005a66200060e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066d81620004d0565b81146200067957600080fd5b50565b614dde806200068c6000396000f3fe6080604052600436106102305760003560e01c80638d859f3e1161012e578063c1179a7f116100ab578063e8a3d4851161006f578063e8a3d485146107f8578063e985e9c514610823578063f2fde38b14610860578063f47c84c514610889578063f4a0a528146108b457610230565b8063c1179a7f1461070f578063c71b0e1c1461073a578063c87b56dd14610765578063cf309012146107a2578063e2c93623146107cd57610230565b8063a22cb465116100f2578063a22cb4651461063e578063aa592f2514610667578063ade753ff14610692578063b88d4fde146106bb578063c0e72740146106e457610230565b80638d859f3e1461056b5780638da5cb5b146105965780638ef79e91146105c1578063938e3d7b146105ea57806395d89b411461061357610230565b8063261f5a97116101bc578063564566a811610180578063564566a8146104935780635e5455ec146104be5780636352211e146104da57806370a0823114610517578063715018a61461055457610230565b8063261f5a97146103d45780633ca4fb76146103eb5780633ccfd60b1461041657806342842e0e1461042d578063446186d21461045657610230565b8063095ea7b311610203578063095ea7b31461030357806309d42b301461032c57806318160ddd146103575780631cef13ce1461038257806323b872dd146103ab57610230565b806301ffc9a714610235578063046dc1661461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906133a0565b6108dd565b6040516102699190613ce1565b60405180910390f35b34801561027e57600080fd5b50610299600480360381019061029491906131dd565b6109bf565b005b3480156102a757600080fd5b506102b0610a7f565b6040516102bd9190613d41565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613490565b610b11565b6040516102fa9190613c28565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613360565b610b96565b005b34801561033857600080fd5b50610341610cae565b60405161034e9190614103565b60405180910390f35b34801561036357600080fd5b5061036c610cb4565b6040516103799190614103565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613490565b610cd1565b005b3480156103b757600080fd5b506103d260048036038101906103cd919061324a565b610d57565b005b3480156103e057600080fd5b506103e9610db7565b005b3480156103f757600080fd5b50610400610e5f565b60405161040d9190613d41565b60405180910390f35b34801561042257600080fd5b5061042b610eed565b005b34801561043957600080fd5b50610454600480360381019061044f919061324a565b611040565b005b34801561046257600080fd5b5061047d60048036038101906104789190613447565b611060565b60405161048a9190613ce1565b60405180910390f35b34801561049f57600080fd5b506104a8611096565b6040516104b59190613ce1565b60405180910390f35b6104d860048036038101906104d391906134bd565b6110a9565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613490565b611363565b60405161050e9190613c28565b60405180910390f35b34801561052357600080fd5b5061053e600480360381019061053991906131dd565b611415565b60405161054b9190614103565b60405180910390f35b34801561056057600080fd5b506105696114cd565b005b34801561057757600080fd5b50610580611555565b60405161058d9190614103565b60405180910390f35b3480156105a257600080fd5b506105ab61155b565b6040516105b89190613c28565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e391906133fa565b611585565b005b3480156105f657600080fd5b50610611600480360381019061060c91906133fa565b611667565b005b34801561061f57600080fd5b506106286116f9565b6040516106359190613d41565b60405180910390f35b34801561064a57600080fd5b5061066560048036038101906106609190613320565b61178b565b005b34801561067357600080fd5b5061067c6117a1565b6040516106899190614103565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613360565b6117a7565b005b3480156106c757600080fd5b506106e260048036038101906106dd919061329d565b611904565b005b3480156106f057600080fd5b506106f9611966565b6040516107069190613d41565b60405180910390f35b34801561071b57600080fd5b506107246119f4565b6040516107319190614103565b60405180910390f35b34801561074657600080fd5b5061074f6119fa565b60405161075c9190614103565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613490565b611a17565b6040516107999190613d41565b60405180910390f35b3480156107ae57600080fd5b506107b7611a93565b6040516107c49190613ce1565b60405180910390f35b3480156107d957600080fd5b506107e2611aa6565b6040516107ef9190613c43565b60405180910390f35b34801561080457600080fd5b5061080d611acc565b60405161081a9190613d41565b60405180910390f35b34801561082f57600080fd5b5061084a6004803603810190610845919061320a565b611b5e565b6040516108579190613ce1565b60405180910390f35b34801561086c57600080fd5b50610887600480360381019061088291906131dd565b611bf2565b005b34801561089557600080fd5b5061089e611cea565b6040516108ab9190614103565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613490565b611cf0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b857506109b782611d8c565b5b9050919050565b6109c7611df6565b73ffffffffffffffffffffffffffffffffffffffff166109e561155b565b73ffffffffffffffffffffffffffffffffffffffff1614610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290613fc3565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610a8e906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906143fc565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6000610b1c82611dfe565b610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290613fa3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba182611363565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906140a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c31611df6565b73ffffffffffffffffffffffffffffffffffffffff161480610c605750610c5f81610c5a611df6565b611b5e565b5b610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690613f03565b60405180910390fd5b610ca98383611e6a565b505050565b60115481565b60006001610cc26007611f23565b610ccc91906142e9565b905090565b610cd9611df6565b73ffffffffffffffffffffffffffffffffffffffff16610cf761155b565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613fc3565b60405180910390fd5b8060118190555050565b610d68610d62611df6565b82611f31565b610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e906140c3565b60405180910390fd5b610db283838361200f565b505050565b610dbf611df6565b73ffffffffffffffffffffffffffffffffffffffff16610ddd61155b565b73ffffffffffffffffffffffffffffffffffffffff1614610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a90613fc3565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b600b8054610e6c906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610e98906143fc565b8015610ee55780601f10610eba57610100808354040283529160200191610ee5565b820191906000526020600020905b815481529060010190602001808311610ec857829003601f168201915b505050505081565b610ef5611df6565b73ffffffffffffffffffffffffffffffffffffffff16610f1361155b565b73ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090613fc3565b60405180910390fd5b60004790506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610fb690613bd8565b60006040518083038185875af1925050503d8060008114610ff3576040519150601f19603f3d011682016040523d82523d6000602084013e610ff8565b606091505b505090508061103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613e43565b60405180910390fd5b5050565b61105b83838360405180602001604052806000815250611904565b505050565b6012818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b600a60149054906101000a900460ff166110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613dc3565b60405180910390fd5b60115485111561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614083565b60405180910390fd5b6012848460405161114f929190613b75565b908152602001604051809103902060009054906101000a900460ff16156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290614023565b60405180910390fd5b600f54856111b7610cb4565b6111c19190614208565b1115611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613e23565b60405180910390fd5b6112186112113387878761226b565b83836122ac565b611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90613ee3565b60405180910390fd5b3485601054611266919061428f565b11156112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e906140e3565b60405180910390fd5b6001601285856040516112bb929190613b75565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060005b85811015611319576112f56007611d76565b61130633611301610cb4565b612355565b80806113119061445f565b9150506112e3565b507ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2623386611345610cb4565b60405161135493929190613caa565b60405180910390a15050505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390613f43565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613f23565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d5611df6565b73ffffffffffffffffffffffffffffffffffffffff166114f361155b565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090613fc3565b60405180910390fd5b6115536000612373565b565b60105481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61158d611df6565b73ffffffffffffffffffffffffffffffffffffffff166115ab61155b565b73ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890613fc3565b60405180910390fd5b600a60159054906101000a900460ff1615611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890614043565b60405180910390fd5b8181600b9190611662929190612f45565b505050565b61166f611df6565b73ffffffffffffffffffffffffffffffffffffffff1661168d61155b565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90613fc3565b60405180910390fd5b8181600c91906116f4929190612f45565b505050565b606060018054611708906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611734906143fc565b80156117815780601f1061175657610100808354040283529160200191611781565b820191906000526020600020905b81548152906001019060200180831161176457829003601f168201915b5050505050905090565b61179d611796611df6565b8383612439565b5050565b600d5481565b6117af611df6565b73ffffffffffffffffffffffffffffffffffffffff166117cd61155b565b73ffffffffffffffffffffffffffffffffffffffff1614611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613fc3565b60405180910390fd5b600d548161182f6119fa565b6118399190614208565b111561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613fe3565b60405180910390fd5b60005b818110156118bd5761188f6007611d76565b6118996008611d76565b6118aa836118a5610cb4565b612355565b80806118b59061445f565b91505061187d565b507ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec26282826118e9610cb4565b6040516118f893929190613caa565b60405180910390a15050565b61191561190f611df6565b83611f31565b611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b906140c3565b60405180910390fd5b611960848484846125a6565b50505050565b600c8054611973906143fc565b80601f016020809104026020016040519081016040528092919081815260200182805461199f906143fc565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b505050505081565b600e5481565b60006001611a086008611f23565b611a1291906142e9565b905090565b6060611a2282611dfe565b611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890614063565b60405180910390fd5b600b611a6c83612602565b604051602001611a7d929190613b8e565b6040516020818303038152906040529050919050565b600a60159054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c8054611adb906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611b07906143fc565b8015611b545780601f10611b2957610100808354040283529160200191611b54565b820191906000526020600020905b815481529060010190602001808311611b3757829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bfa611df6565b73ffffffffffffffffffffffffffffffffffffffff16611c1861155b565b73ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613fc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590613de3565b60405180910390fd5b611ce781612373565b50565b600f5481565b611cf8611df6565b73ffffffffffffffffffffffffffffffffffffffff16611d1661155b565b73ffffffffffffffffffffffffffffffffffffffff1614611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390613fc3565b60405180910390fd5b8060108190555050565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611edd83611363565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611f3c82611dfe565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613ec3565b60405180910390fd5b6000611f8683611363565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff557508373ffffffffffffffffffffffffffffffffffffffff16611fdd84610b11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061200657506120058185611b5e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661202f82611363565b73ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90614003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90613e63565b60405180910390fd5b612100838383612763565b61210b600082611e6a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215b91906142e9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b29190614208565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006122a2848685856040516020016122879493929190613bed565b60405160208183030381529060405280519060200120612768565b9050949350505050565b60006122fc8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612798565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b61236f8282604051806020016040528060008152506127bf565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613e83565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125999190613ce1565b60405180910390a3505050565b6125b184848461200f565b6125bd8484848461281a565b6125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390613da3565b60405180910390fd5b50505050565b6060600082141561264a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061275e565b600082905060005b6000821461267c5780806126659061445f565b915050600a82612675919061425e565b9150612652565b60008167ffffffffffffffff811115612698576126976145fc565b5b6040519080825280601f01601f1916602001820160405280156126ca5781602001600182028036833780820191505090505b5090505b60008514612757576001826126e391906142e9565b9150600a856126f291906144e0565b60306126fe9190614208565b60f81b818381518110612714576127136145cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612750919061425e565b94506126ce565b8093505050505b919050565b505050565b60008160405160200161277b9190613bb2565b604051602081830303815290604052805190602001209050919050565b60008060006127a785856129b1565b915091506127b481612a34565b819250505092915050565b6127c98383612c09565b6127d6600084848461281a565b612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90613da3565b60405180910390fd5b505050565b600061283b8473ffffffffffffffffffffffffffffffffffffffff16612dd7565b156129a4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612864611df6565b8786866040518563ffffffff1660e01b81526004016128869493929190613c5e565b602060405180830381600087803b1580156128a057600080fd5b505af19250505080156128d157506040513d601f19601f820116820180604052508101906128ce91906133cd565b60015b612954573d8060008114612901576040519150601f19603f3d011682016040523d82523d6000602084013e612906565b606091505b5060008151141561294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294390613da3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129a9565b600190505b949350505050565b6000806041835114156129f35760008060006020860151925060408601519150606086015160001a90506129e787828585612dea565b94509450505050612a2d565b604083511415612a24576000806020850151915060408501519050612a19868383612ef7565b935093505050612a2d565b60006002915091505b9250929050565b60006004811115612a4857612a4761456f565b5b816004811115612a5b57612a5a61456f565b5b1415612a6657612c06565b60016004811115612a7a57612a7961456f565b5b816004811115612a8d57612a8c61456f565b5b1415612ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac590613d63565b60405180910390fd5b60026004811115612ae257612ae161456f565b5b816004811115612af557612af461456f565b5b1415612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d90613d83565b60405180910390fd5b60036004811115612b4a57612b4961456f565b5b816004811115612b5d57612b5c61456f565b5b1415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9590613ea3565b60405180910390fd5b600480811115612bb157612bb061456f565b5b816004811115612bc457612bc361456f565b5b1415612c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90613f63565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7090613f83565b60405180910390fd5b612c8281611dfe565b15612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990613e03565b60405180910390fd5b612cce60008383612763565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1e9190614208565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612e25576000600391509150612eee565b601b8560ff1614158015612e3d5750601c8560ff1614155b15612e4f576000600491509150612eee565b600060018787878760405160008152602001604052604051612e749493929190613cfc565b6020604051602081039080840390855afa158015612e96573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ee557600060019250925050612eee565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612f3787828885612dea565b935093505050935093915050565b828054612f51906143fc565b90600052602060002090601f016020900481019282612f735760008555612fba565b82601f10612f8c57803560ff1916838001178555612fba565b82800160010185558215612fba579182015b82811115612fb9578235825591602001919060010190612f9e565b5b509050612fc79190612fcb565b5090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000612ffb612ff684614143565b61411e565b9050828152602081018484840111156130175761301661463a565b5b6130228482856143ba565b509392505050565b600061303d61303884614174565b61411e565b9050828152602081018484840111156130595761305861463a565b5b6130648482856143ba565b509392505050565b60008135905061307b81614d4c565b92915050565b60008135905061309081614d63565b92915050565b6000813590506130a581614d7a565b92915050565b6000815190506130ba81614d7a565b92915050565b60008083601f8401126130d6576130d5614630565b5b8235905067ffffffffffffffff8111156130f3576130f261462b565b5b60208301915083600182028301111561310f5761310e614635565b5b9250929050565b600082601f83011261312b5761312a614630565b5b813561313b848260208601612fe8565b91505092915050565b60008083601f84011261315a57613159614630565b5b8235905067ffffffffffffffff8111156131775761317661462b565b5b60208301915083600182028301111561319357613192614635565b5b9250929050565b600082601f8301126131af576131ae614630565b5b81356131bf84826020860161302a565b91505092915050565b6000813590506131d781614d91565b92915050565b6000602082840312156131f3576131f2614644565b5b60006132018482850161306c565b91505092915050565b6000806040838503121561322157613220614644565b5b600061322f8582860161306c565b92505060206132408582860161306c565b9150509250929050565b60008060006060848603121561326357613262614644565b5b60006132718682870161306c565b93505060206132828682870161306c565b9250506040613293868287016131c8565b9150509250925092565b600080600080608085870312156132b7576132b6614644565b5b60006132c58782880161306c565b94505060206132d68782880161306c565b93505060406132e7878288016131c8565b925050606085013567ffffffffffffffff8111156133085761330761463f565b5b61331487828801613116565b91505092959194509250565b6000806040838503121561333757613336614644565b5b60006133458582860161306c565b925050602061335685828601613081565b9150509250929050565b6000806040838503121561337757613376614644565b5b60006133858582860161306c565b9250506020613396858286016131c8565b9150509250929050565b6000602082840312156133b6576133b5614644565b5b60006133c484828501613096565b91505092915050565b6000602082840312156133e3576133e2614644565b5b60006133f1848285016130ab565b91505092915050565b6000806020838503121561341157613410614644565b5b600083013567ffffffffffffffff81111561342f5761342e61463f565b5b61343b85828601613144565b92509250509250929050565b60006020828403121561345d5761345c614644565b5b600082013567ffffffffffffffff81111561347b5761347a61463f565b5b6134878482850161319a565b91505092915050565b6000602082840312156134a6576134a5614644565b5b60006134b4848285016131c8565b91505092915050565b6000806000806000606086880312156134d9576134d8614644565b5b60006134e7888289016131c8565b955050602086013567ffffffffffffffff8111156135085761350761463f565b5b61351488828901613144565b9450945050604086013567ffffffffffffffff8111156135375761353661463f565b5b613543888289016130c0565b92509250509295509295909350565b61355b8161432f565b82525050565b61356a8161431d565b82525050565b61358161357c8261431d565b6144a8565b82525050565b61359081614341565b82525050565b61359f8161434d565b82525050565b6135b66135b18261434d565b6144ba565b82525050565b60006135c7826141ba565b6135d181856141d0565b93506135e18185602086016143c9565b6135ea81614649565b840191505092915050565b600061360183856141fd565b935061360e8385846143ba565b82840190509392505050565b6000613625826141c5565b61362f81856141ec565b935061363f8185602086016143c9565b61364881614649565b840191505092915050565b600061365e826141c5565b61366881856141fd565b93506136788185602086016143c9565b80840191505092915050565b60008154613691816143fc565b61369b81866141fd565b945060018216600081146136b657600181146136c7576136fa565b60ff198316865281860193506136fa565b6136d0856141a5565b60005b838110156136f2578154818901526001820191506020810190506136d3565b838801955050505b50505092915050565b60006137106018836141ec565b915061371b82614667565b602082019050919050565b6000613733601f836141ec565b915061373e82614690565b602082019050919050565b6000613756601c836141fd565b9150613761826146b9565b601c82019050919050565b60006137796032836141ec565b9150613784826146e2565b604082019050919050565b600061379c6019836141ec565b91506137a782614731565b602082019050919050565b60006137bf6026836141ec565b91506137ca8261475a565b604082019050919050565b60006137e2601c836141ec565b91506137ed826147a9565b602082019050919050565b60006138056019836141ec565b9150613810826147d2565b602082019050919050565b60006138286014836141ec565b9150613833826147fb565b602082019050919050565b600061384b6024836141ec565b915061385682614824565b604082019050919050565b600061386e6019836141ec565b915061387982614873565b602082019050919050565b60006138916022836141ec565b915061389c8261489c565b604082019050919050565b60006138b4602c836141ec565b91506138bf826148eb565b604082019050919050565b60006138d76011836141ec565b91506138e28261493a565b602082019050919050565b60006138fa6038836141ec565b915061390582614963565b604082019050919050565b600061391d602a836141ec565b9150613928826149b2565b604082019050919050565b60006139406029836141ec565b915061394b82614a01565b604082019050919050565b60006139636022836141ec565b915061396e82614a50565b604082019050919050565b60006139866020836141ec565b915061399182614a9f565b602082019050919050565b60006139a9602c836141ec565b91506139b482614ac8565b604082019050919050565b60006139cc6020836141ec565b91506139d782614b17565b602082019050919050565b60006139ef6017836141ec565b91506139fa82614b40565b602082019050919050565b6000613a126029836141ec565b9150613a1d82614b69565b604082019050919050565b6000613a356015836141ec565b9150613a4082614bb8565b602082019050919050565b6000613a586024836141ec565b9150613a6382614be1565b604082019050919050565b6000613a7b601f836141ec565b9150613a8682614c30565b602082019050919050565b6000613a9e601e836141ec565b9150613aa982614c59565b602082019050919050565b6000613ac16021836141ec565b9150613acc82614c82565b604082019050919050565b6000613ae46000836141e1565b9150613aef82614cd1565b600082019050919050565b6000613b076031836141ec565b9150613b1282614cd4565b604082019050919050565b6000613b2a6010836141ec565b9150613b3582614d23565b602082019050919050565b613b49816143a3565b82525050565b613b60613b5b826143a3565b6144d6565b82525050565b613b6f816143ad565b82525050565b6000613b828284866135f5565b91508190509392505050565b6000613b9a8285613684565b9150613ba68284613653565b91508190509392505050565b6000613bbd82613749565b9150613bc982846135a5565b60208201915081905092915050565b6000613be382613ad7565b9150819050919050565b6000613bf98287613b4f565b602082019150613c098286613570565b601482019150613c1a8284866135f5565b915081905095945050505050565b6000602082019050613c3d6000830184613561565b92915050565b6000602082019050613c586000830184613552565b92915050565b6000608082019050613c736000830187613561565b613c806020830186613561565b613c8d6040830185613b40565b8181036060830152613c9f81846135bc565b905095945050505050565b6000606082019050613cbf6000830186613561565b613ccc6020830185613b40565b613cd96040830184613b40565b949350505050565b6000602082019050613cf66000830184613587565b92915050565b6000608082019050613d116000830187613596565b613d1e6020830186613b66565b613d2b6040830185613596565b613d386060830184613596565b95945050505050565b60006020820190508181036000830152613d5b818461361a565b905092915050565b60006020820190508181036000830152613d7c81613703565b9050919050565b60006020820190508181036000830152613d9c81613726565b9050919050565b60006020820190508181036000830152613dbc8161376c565b9050919050565b60006020820190508181036000830152613ddc8161378f565b9050919050565b60006020820190508181036000830152613dfc816137b2565b9050919050565b60006020820190508181036000830152613e1c816137d5565b9050919050565b60006020820190508181036000830152613e3c816137f8565b9050919050565b60006020820190508181036000830152613e5c8161381b565b9050919050565b60006020820190508181036000830152613e7c8161383e565b9050919050565b60006020820190508181036000830152613e9c81613861565b9050919050565b60006020820190508181036000830152613ebc81613884565b9050919050565b60006020820190508181036000830152613edc816138a7565b9050919050565b60006020820190508181036000830152613efc816138ca565b9050919050565b60006020820190508181036000830152613f1c816138ed565b9050919050565b60006020820190508181036000830152613f3c81613910565b9050919050565b60006020820190508181036000830152613f5c81613933565b9050919050565b60006020820190508181036000830152613f7c81613956565b9050919050565b60006020820190508181036000830152613f9c81613979565b9050919050565b60006020820190508181036000830152613fbc8161399c565b9050919050565b60006020820190508181036000830152613fdc816139bf565b9050919050565b60006020820190508181036000830152613ffc816139e2565b9050919050565b6000602082019050818103600083015261401c81613a05565b9050919050565b6000602082019050818103600083015261403c81613a28565b9050919050565b6000602082019050818103600083015261405c81613a4b565b9050919050565b6000602082019050818103600083015261407c81613a6e565b9050919050565b6000602082019050818103600083015261409c81613a91565b9050919050565b600060208201905081810360008301526140bc81613ab4565b9050919050565b600060208201905081810360008301526140dc81613afa565b9050919050565b600060208201905081810360008301526140fc81613b1d565b9050919050565b60006020820190506141186000830184613b40565b92915050565b6000614128614139565b9050614134828261442e565b919050565b6000604051905090565b600067ffffffffffffffff82111561415e5761415d6145fc565b5b61416782614649565b9050602081019050919050565b600067ffffffffffffffff82111561418f5761418e6145fc565b5b61419882614649565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614213826143a3565b915061421e836143a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561425357614252614511565b5b828201905092915050565b6000614269826143a3565b9150614274836143a3565b92508261428457614283614540565b5b828204905092915050565b600061429a826143a3565b91506142a5836143a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142de576142dd614511565b5b828202905092915050565b60006142f4826143a3565b91506142ff836143a3565b92508282101561431257614311614511565b5b828203905092915050565b600061432882614383565b9050919050565b600061433a82614383565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143e75780820151818401526020810190506143cc565b838111156143f6576000848401525b50505050565b6000600282049050600182168061441457607f821691505b602082108114156144285761442761459e565b5b50919050565b61443782614649565b810181811067ffffffffffffffff82111715614456576144556145fc565b5b80604052505050565b600061446a826143a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561449d5761449c614511565b5b600182019050919050565b60006144b3826144c4565b9050919050565b6000819050919050565b60006144cf8261465a565b9050919050565b6000819050919050565b60006144eb826143a3565b91506144f6836143a3565b92508261450657614505614540565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f425245414b464153545f4841535f4e4f545f5354415254454400000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f425245414b464153545f4841535f4245454e5f53455256454400000000000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f494e56414c49445f5349474e4154555245000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5245534552564154494f4e535f4152455f434c4f534544000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f425245414b464153545f5449434b45545f555345440000000000000000000000600082015250565b7f436f6e7472616374206d65746164617461206d6574686f647320617265206c6f60008201527f636b656400000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f444f4e27545f42455f4752454544595f574954485f5448455f4241434f4e0000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b614d558161431d565b8114614d6057600080fd5b50565b614d6c81614341565b8114614d7757600080fd5b50565b614d8381614357565b8114614d8e57600080fd5b50565b614d9a816143a3565b8114614da557600080fd5b5056fea264697066735822122003ae906b3d7e7d630c7919b85c94d71f0199dd0e74a1bf48388ed0fa4137594b64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b32cb344c129b715dc013bb67ccc9b9145b626920000000000000000000000000000000000000000000000000000000000000014426f72656420427265616b6661737420436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000034242430000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c80638d859f3e1161012e578063c1179a7f116100ab578063e8a3d4851161006f578063e8a3d485146107f8578063e985e9c514610823578063f2fde38b14610860578063f47c84c514610889578063f4a0a528146108b457610230565b8063c1179a7f1461070f578063c71b0e1c1461073a578063c87b56dd14610765578063cf309012146107a2578063e2c93623146107cd57610230565b8063a22cb465116100f2578063a22cb4651461063e578063aa592f2514610667578063ade753ff14610692578063b88d4fde146106bb578063c0e72740146106e457610230565b80638d859f3e1461056b5780638da5cb5b146105965780638ef79e91146105c1578063938e3d7b146105ea57806395d89b411461061357610230565b8063261f5a97116101bc578063564566a811610180578063564566a8146104935780635e5455ec146104be5780636352211e146104da57806370a0823114610517578063715018a61461055457610230565b8063261f5a97146103d45780633ca4fb76146103eb5780633ccfd60b1461041657806342842e0e1461042d578063446186d21461045657610230565b8063095ea7b311610203578063095ea7b31461030357806309d42b301461032c57806318160ddd146103575780631cef13ce1461038257806323b872dd146103ab57610230565b806301ffc9a714610235578063046dc1661461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906133a0565b6108dd565b6040516102699190613ce1565b60405180910390f35b34801561027e57600080fd5b50610299600480360381019061029491906131dd565b6109bf565b005b3480156102a757600080fd5b506102b0610a7f565b6040516102bd9190613d41565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613490565b610b11565b6040516102fa9190613c28565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613360565b610b96565b005b34801561033857600080fd5b50610341610cae565b60405161034e9190614103565b60405180910390f35b34801561036357600080fd5b5061036c610cb4565b6040516103799190614103565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613490565b610cd1565b005b3480156103b757600080fd5b506103d260048036038101906103cd919061324a565b610d57565b005b3480156103e057600080fd5b506103e9610db7565b005b3480156103f757600080fd5b50610400610e5f565b60405161040d9190613d41565b60405180910390f35b34801561042257600080fd5b5061042b610eed565b005b34801561043957600080fd5b50610454600480360381019061044f919061324a565b611040565b005b34801561046257600080fd5b5061047d60048036038101906104789190613447565b611060565b60405161048a9190613ce1565b60405180910390f35b34801561049f57600080fd5b506104a8611096565b6040516104b59190613ce1565b60405180910390f35b6104d860048036038101906104d391906134bd565b6110a9565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613490565b611363565b60405161050e9190613c28565b60405180910390f35b34801561052357600080fd5b5061053e600480360381019061053991906131dd565b611415565b60405161054b9190614103565b60405180910390f35b34801561056057600080fd5b506105696114cd565b005b34801561057757600080fd5b50610580611555565b60405161058d9190614103565b60405180910390f35b3480156105a257600080fd5b506105ab61155b565b6040516105b89190613c28565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e391906133fa565b611585565b005b3480156105f657600080fd5b50610611600480360381019061060c91906133fa565b611667565b005b34801561061f57600080fd5b506106286116f9565b6040516106359190613d41565b60405180910390f35b34801561064a57600080fd5b5061066560048036038101906106609190613320565b61178b565b005b34801561067357600080fd5b5061067c6117a1565b6040516106899190614103565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613360565b6117a7565b005b3480156106c757600080fd5b506106e260048036038101906106dd919061329d565b611904565b005b3480156106f057600080fd5b506106f9611966565b6040516107069190613d41565b60405180910390f35b34801561071b57600080fd5b506107246119f4565b6040516107319190614103565b60405180910390f35b34801561074657600080fd5b5061074f6119fa565b60405161075c9190614103565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613490565b611a17565b6040516107999190613d41565b60405180910390f35b3480156107ae57600080fd5b506107b7611a93565b6040516107c49190613ce1565b60405180910390f35b3480156107d957600080fd5b506107e2611aa6565b6040516107ef9190613c43565b60405180910390f35b34801561080457600080fd5b5061080d611acc565b60405161081a9190613d41565b60405180910390f35b34801561082f57600080fd5b5061084a6004803603810190610845919061320a565b611b5e565b6040516108579190613ce1565b60405180910390f35b34801561086c57600080fd5b50610887600480360381019061088291906131dd565b611bf2565b005b34801561089557600080fd5b5061089e611cea565b6040516108ab9190614103565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613490565b611cf0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b857506109b782611d8c565b5b9050919050565b6109c7611df6565b73ffffffffffffffffffffffffffffffffffffffff166109e561155b565b73ffffffffffffffffffffffffffffffffffffffff1614610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290613fc3565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610a8e906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906143fc565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6000610b1c82611dfe565b610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290613fa3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba182611363565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906140a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c31611df6565b73ffffffffffffffffffffffffffffffffffffffff161480610c605750610c5f81610c5a611df6565b611b5e565b5b610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690613f03565b60405180910390fd5b610ca98383611e6a565b505050565b60115481565b60006001610cc26007611f23565b610ccc91906142e9565b905090565b610cd9611df6565b73ffffffffffffffffffffffffffffffffffffffff16610cf761155b565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613fc3565b60405180910390fd5b8060118190555050565b610d68610d62611df6565b82611f31565b610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e906140c3565b60405180910390fd5b610db283838361200f565b505050565b610dbf611df6565b73ffffffffffffffffffffffffffffffffffffffff16610ddd61155b565b73ffffffffffffffffffffffffffffffffffffffff1614610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a90613fc3565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b600b8054610e6c906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610e98906143fc565b8015610ee55780601f10610eba57610100808354040283529160200191610ee5565b820191906000526020600020905b815481529060010190602001808311610ec857829003601f168201915b505050505081565b610ef5611df6565b73ffffffffffffffffffffffffffffffffffffffff16610f1361155b565b73ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090613fc3565b60405180910390fd5b60004790506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610fb690613bd8565b60006040518083038185875af1925050503d8060008114610ff3576040519150601f19603f3d011682016040523d82523d6000602084013e610ff8565b606091505b505090508061103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613e43565b60405180910390fd5b5050565b61105b83838360405180602001604052806000815250611904565b505050565b6012818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b600a60149054906101000a900460ff166110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613dc3565b60405180910390fd5b60115485111561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614083565b60405180910390fd5b6012848460405161114f929190613b75565b908152602001604051809103902060009054906101000a900460ff16156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290614023565b60405180910390fd5b600f54856111b7610cb4565b6111c19190614208565b1115611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613e23565b60405180910390fd5b6112186112113387878761226b565b83836122ac565b611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90613ee3565b60405180910390fd5b3485601054611266919061428f565b11156112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e906140e3565b60405180910390fd5b6001601285856040516112bb929190613b75565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060005b85811015611319576112f56007611d76565b61130633611301610cb4565b612355565b80806113119061445f565b9150506112e3565b507ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2623386611345610cb4565b60405161135493929190613caa565b60405180910390a15050505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390613f43565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613f23565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d5611df6565b73ffffffffffffffffffffffffffffffffffffffff166114f361155b565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090613fc3565b60405180910390fd5b6115536000612373565b565b60105481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61158d611df6565b73ffffffffffffffffffffffffffffffffffffffff166115ab61155b565b73ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890613fc3565b60405180910390fd5b600a60159054906101000a900460ff1615611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890614043565b60405180910390fd5b8181600b9190611662929190612f45565b505050565b61166f611df6565b73ffffffffffffffffffffffffffffffffffffffff1661168d61155b565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90613fc3565b60405180910390fd5b8181600c91906116f4929190612f45565b505050565b606060018054611708906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611734906143fc565b80156117815780601f1061175657610100808354040283529160200191611781565b820191906000526020600020905b81548152906001019060200180831161176457829003601f168201915b5050505050905090565b61179d611796611df6565b8383612439565b5050565b600d5481565b6117af611df6565b73ffffffffffffffffffffffffffffffffffffffff166117cd61155b565b73ffffffffffffffffffffffffffffffffffffffff1614611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613fc3565b60405180910390fd5b600d548161182f6119fa565b6118399190614208565b111561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613fe3565b60405180910390fd5b60005b818110156118bd5761188f6007611d76565b6118996008611d76565b6118aa836118a5610cb4565b612355565b80806118b59061445f565b91505061187d565b507ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec26282826118e9610cb4565b6040516118f893929190613caa565b60405180910390a15050565b61191561190f611df6565b83611f31565b611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b906140c3565b60405180910390fd5b611960848484846125a6565b50505050565b600c8054611973906143fc565b80601f016020809104026020016040519081016040528092919081815260200182805461199f906143fc565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b505050505081565b600e5481565b60006001611a086008611f23565b611a1291906142e9565b905090565b6060611a2282611dfe565b611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890614063565b60405180910390fd5b600b611a6c83612602565b604051602001611a7d929190613b8e565b6040516020818303038152906040529050919050565b600a60159054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c8054611adb906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611b07906143fc565b8015611b545780601f10611b2957610100808354040283529160200191611b54565b820191906000526020600020905b815481529060010190602001808311611b3757829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bfa611df6565b73ffffffffffffffffffffffffffffffffffffffff16611c1861155b565b73ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613fc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590613de3565b60405180910390fd5b611ce781612373565b50565b600f5481565b611cf8611df6565b73ffffffffffffffffffffffffffffffffffffffff16611d1661155b565b73ffffffffffffffffffffffffffffffffffffffff1614611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390613fc3565b60405180910390fd5b8060108190555050565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611edd83611363565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611f3c82611dfe565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613ec3565b60405180910390fd5b6000611f8683611363565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff557508373ffffffffffffffffffffffffffffffffffffffff16611fdd84610b11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061200657506120058185611b5e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661202f82611363565b73ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90614003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90613e63565b60405180910390fd5b612100838383612763565b61210b600082611e6a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215b91906142e9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b29190614208565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006122a2848685856040516020016122879493929190613bed565b60405160208183030381529060405280519060200120612768565b9050949350505050565b60006122fc8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612798565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490509392505050565b61236f8282604051806020016040528060008152506127bf565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613e83565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125999190613ce1565b60405180910390a3505050565b6125b184848461200f565b6125bd8484848461281a565b6125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390613da3565b60405180910390fd5b50505050565b6060600082141561264a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061275e565b600082905060005b6000821461267c5780806126659061445f565b915050600a82612675919061425e565b9150612652565b60008167ffffffffffffffff811115612698576126976145fc565b5b6040519080825280601f01601f1916602001820160405280156126ca5781602001600182028036833780820191505090505b5090505b60008514612757576001826126e391906142e9565b9150600a856126f291906144e0565b60306126fe9190614208565b60f81b818381518110612714576127136145cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612750919061425e565b94506126ce565b8093505050505b919050565b505050565b60008160405160200161277b9190613bb2565b604051602081830303815290604052805190602001209050919050565b60008060006127a785856129b1565b915091506127b481612a34565b819250505092915050565b6127c98383612c09565b6127d6600084848461281a565b612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90613da3565b60405180910390fd5b505050565b600061283b8473ffffffffffffffffffffffffffffffffffffffff16612dd7565b156129a4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612864611df6565b8786866040518563ffffffff1660e01b81526004016128869493929190613c5e565b602060405180830381600087803b1580156128a057600080fd5b505af19250505080156128d157506040513d601f19601f820116820180604052508101906128ce91906133cd565b60015b612954573d8060008114612901576040519150601f19603f3d011682016040523d82523d6000602084013e612906565b606091505b5060008151141561294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294390613da3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129a9565b600190505b949350505050565b6000806041835114156129f35760008060006020860151925060408601519150606086015160001a90506129e787828585612dea565b94509450505050612a2d565b604083511415612a24576000806020850151915060408501519050612a19868383612ef7565b935093505050612a2d565b60006002915091505b9250929050565b60006004811115612a4857612a4761456f565b5b816004811115612a5b57612a5a61456f565b5b1415612a6657612c06565b60016004811115612a7a57612a7961456f565b5b816004811115612a8d57612a8c61456f565b5b1415612ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac590613d63565b60405180910390fd5b60026004811115612ae257612ae161456f565b5b816004811115612af557612af461456f565b5b1415612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d90613d83565b60405180910390fd5b60036004811115612b4a57612b4961456f565b5b816004811115612b5d57612b5c61456f565b5b1415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9590613ea3565b60405180910390fd5b600480811115612bb157612bb061456f565b5b816004811115612bc457612bc361456f565b5b1415612c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90613f63565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7090613f83565b60405180910390fd5b612c8281611dfe565b15612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990613e03565b60405180910390fd5b612cce60008383612763565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1e9190614208565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612e25576000600391509150612eee565b601b8560ff1614158015612e3d5750601c8560ff1614155b15612e4f576000600491509150612eee565b600060018787878760405160008152602001604052604051612e749493929190613cfc565b6020604051602081039080840390855afa158015612e96573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ee557600060019250925050612eee565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612f3787828885612dea565b935093505050935093915050565b828054612f51906143fc565b90600052602060002090601f016020900481019282612f735760008555612fba565b82601f10612f8c57803560ff1916838001178555612fba565b82800160010185558215612fba579182015b82811115612fb9578235825591602001919060010190612f9e565b5b509050612fc79190612fcb565b5090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000612ffb612ff684614143565b61411e565b9050828152602081018484840111156130175761301661463a565b5b6130228482856143ba565b509392505050565b600061303d61303884614174565b61411e565b9050828152602081018484840111156130595761305861463a565b5b6130648482856143ba565b509392505050565b60008135905061307b81614d4c565b92915050565b60008135905061309081614d63565b92915050565b6000813590506130a581614d7a565b92915050565b6000815190506130ba81614d7a565b92915050565b60008083601f8401126130d6576130d5614630565b5b8235905067ffffffffffffffff8111156130f3576130f261462b565b5b60208301915083600182028301111561310f5761310e614635565b5b9250929050565b600082601f83011261312b5761312a614630565b5b813561313b848260208601612fe8565b91505092915050565b60008083601f84011261315a57613159614630565b5b8235905067ffffffffffffffff8111156131775761317661462b565b5b60208301915083600182028301111561319357613192614635565b5b9250929050565b600082601f8301126131af576131ae614630565b5b81356131bf84826020860161302a565b91505092915050565b6000813590506131d781614d91565b92915050565b6000602082840312156131f3576131f2614644565b5b60006132018482850161306c565b91505092915050565b6000806040838503121561322157613220614644565b5b600061322f8582860161306c565b92505060206132408582860161306c565b9150509250929050565b60008060006060848603121561326357613262614644565b5b60006132718682870161306c565b93505060206132828682870161306c565b9250506040613293868287016131c8565b9150509250925092565b600080600080608085870312156132b7576132b6614644565b5b60006132c58782880161306c565b94505060206132d68782880161306c565b93505060406132e7878288016131c8565b925050606085013567ffffffffffffffff8111156133085761330761463f565b5b61331487828801613116565b91505092959194509250565b6000806040838503121561333757613336614644565b5b60006133458582860161306c565b925050602061335685828601613081565b9150509250929050565b6000806040838503121561337757613376614644565b5b60006133858582860161306c565b9250506020613396858286016131c8565b9150509250929050565b6000602082840312156133b6576133b5614644565b5b60006133c484828501613096565b91505092915050565b6000602082840312156133e3576133e2614644565b5b60006133f1848285016130ab565b91505092915050565b6000806020838503121561341157613410614644565b5b600083013567ffffffffffffffff81111561342f5761342e61463f565b5b61343b85828601613144565b92509250509250929050565b60006020828403121561345d5761345c614644565b5b600082013567ffffffffffffffff81111561347b5761347a61463f565b5b6134878482850161319a565b91505092915050565b6000602082840312156134a6576134a5614644565b5b60006134b4848285016131c8565b91505092915050565b6000806000806000606086880312156134d9576134d8614644565b5b60006134e7888289016131c8565b955050602086013567ffffffffffffffff8111156135085761350761463f565b5b61351488828901613144565b9450945050604086013567ffffffffffffffff8111156135375761353661463f565b5b613543888289016130c0565b92509250509295509295909350565b61355b8161432f565b82525050565b61356a8161431d565b82525050565b61358161357c8261431d565b6144a8565b82525050565b61359081614341565b82525050565b61359f8161434d565b82525050565b6135b66135b18261434d565b6144ba565b82525050565b60006135c7826141ba565b6135d181856141d0565b93506135e18185602086016143c9565b6135ea81614649565b840191505092915050565b600061360183856141fd565b935061360e8385846143ba565b82840190509392505050565b6000613625826141c5565b61362f81856141ec565b935061363f8185602086016143c9565b61364881614649565b840191505092915050565b600061365e826141c5565b61366881856141fd565b93506136788185602086016143c9565b80840191505092915050565b60008154613691816143fc565b61369b81866141fd565b945060018216600081146136b657600181146136c7576136fa565b60ff198316865281860193506136fa565b6136d0856141a5565b60005b838110156136f2578154818901526001820191506020810190506136d3565b838801955050505b50505092915050565b60006137106018836141ec565b915061371b82614667565b602082019050919050565b6000613733601f836141ec565b915061373e82614690565b602082019050919050565b6000613756601c836141fd565b9150613761826146b9565b601c82019050919050565b60006137796032836141ec565b9150613784826146e2565b604082019050919050565b600061379c6019836141ec565b91506137a782614731565b602082019050919050565b60006137bf6026836141ec565b91506137ca8261475a565b604082019050919050565b60006137e2601c836141ec565b91506137ed826147a9565b602082019050919050565b60006138056019836141ec565b9150613810826147d2565b602082019050919050565b60006138286014836141ec565b9150613833826147fb565b602082019050919050565b600061384b6024836141ec565b915061385682614824565b604082019050919050565b600061386e6019836141ec565b915061387982614873565b602082019050919050565b60006138916022836141ec565b915061389c8261489c565b604082019050919050565b60006138b4602c836141ec565b91506138bf826148eb565b604082019050919050565b60006138d76011836141ec565b91506138e28261493a565b602082019050919050565b60006138fa6038836141ec565b915061390582614963565b604082019050919050565b600061391d602a836141ec565b9150613928826149b2565b604082019050919050565b60006139406029836141ec565b915061394b82614a01565b604082019050919050565b60006139636022836141ec565b915061396e82614a50565b604082019050919050565b60006139866020836141ec565b915061399182614a9f565b602082019050919050565b60006139a9602c836141ec565b91506139b482614ac8565b604082019050919050565b60006139cc6020836141ec565b91506139d782614b17565b602082019050919050565b60006139ef6017836141ec565b91506139fa82614b40565b602082019050919050565b6000613a126029836141ec565b9150613a1d82614b69565b604082019050919050565b6000613a356015836141ec565b9150613a4082614bb8565b602082019050919050565b6000613a586024836141ec565b9150613a6382614be1565b604082019050919050565b6000613a7b601f836141ec565b9150613a8682614c30565b602082019050919050565b6000613a9e601e836141ec565b9150613aa982614c59565b602082019050919050565b6000613ac16021836141ec565b9150613acc82614c82565b604082019050919050565b6000613ae46000836141e1565b9150613aef82614cd1565b600082019050919050565b6000613b076031836141ec565b9150613b1282614cd4565b604082019050919050565b6000613b2a6010836141ec565b9150613b3582614d23565b602082019050919050565b613b49816143a3565b82525050565b613b60613b5b826143a3565b6144d6565b82525050565b613b6f816143ad565b82525050565b6000613b828284866135f5565b91508190509392505050565b6000613b9a8285613684565b9150613ba68284613653565b91508190509392505050565b6000613bbd82613749565b9150613bc982846135a5565b60208201915081905092915050565b6000613be382613ad7565b9150819050919050565b6000613bf98287613b4f565b602082019150613c098286613570565b601482019150613c1a8284866135f5565b915081905095945050505050565b6000602082019050613c3d6000830184613561565b92915050565b6000602082019050613c586000830184613552565b92915050565b6000608082019050613c736000830187613561565b613c806020830186613561565b613c8d6040830185613b40565b8181036060830152613c9f81846135bc565b905095945050505050565b6000606082019050613cbf6000830186613561565b613ccc6020830185613b40565b613cd96040830184613b40565b949350505050565b6000602082019050613cf66000830184613587565b92915050565b6000608082019050613d116000830187613596565b613d1e6020830186613b66565b613d2b6040830185613596565b613d386060830184613596565b95945050505050565b60006020820190508181036000830152613d5b818461361a565b905092915050565b60006020820190508181036000830152613d7c81613703565b9050919050565b60006020820190508181036000830152613d9c81613726565b9050919050565b60006020820190508181036000830152613dbc8161376c565b9050919050565b60006020820190508181036000830152613ddc8161378f565b9050919050565b60006020820190508181036000830152613dfc816137b2565b9050919050565b60006020820190508181036000830152613e1c816137d5565b9050919050565b60006020820190508181036000830152613e3c816137f8565b9050919050565b60006020820190508181036000830152613e5c8161381b565b9050919050565b60006020820190508181036000830152613e7c8161383e565b9050919050565b60006020820190508181036000830152613e9c81613861565b9050919050565b60006020820190508181036000830152613ebc81613884565b9050919050565b60006020820190508181036000830152613edc816138a7565b9050919050565b60006020820190508181036000830152613efc816138ca565b9050919050565b60006020820190508181036000830152613f1c816138ed565b9050919050565b60006020820190508181036000830152613f3c81613910565b9050919050565b60006020820190508181036000830152613f5c81613933565b9050919050565b60006020820190508181036000830152613f7c81613956565b9050919050565b60006020820190508181036000830152613f9c81613979565b9050919050565b60006020820190508181036000830152613fbc8161399c565b9050919050565b60006020820190508181036000830152613fdc816139bf565b9050919050565b60006020820190508181036000830152613ffc816139e2565b9050919050565b6000602082019050818103600083015261401c81613a05565b9050919050565b6000602082019050818103600083015261403c81613a28565b9050919050565b6000602082019050818103600083015261405c81613a4b565b9050919050565b6000602082019050818103600083015261407c81613a6e565b9050919050565b6000602082019050818103600083015261409c81613a91565b9050919050565b600060208201905081810360008301526140bc81613ab4565b9050919050565b600060208201905081810360008301526140dc81613afa565b9050919050565b600060208201905081810360008301526140fc81613b1d565b9050919050565b60006020820190506141186000830184613b40565b92915050565b6000614128614139565b9050614134828261442e565b919050565b6000604051905090565b600067ffffffffffffffff82111561415e5761415d6145fc565b5b61416782614649565b9050602081019050919050565b600067ffffffffffffffff82111561418f5761418e6145fc565b5b61419882614649565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614213826143a3565b915061421e836143a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561425357614252614511565b5b828201905092915050565b6000614269826143a3565b9150614274836143a3565b92508261428457614283614540565b5b828204905092915050565b600061429a826143a3565b91506142a5836143a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142de576142dd614511565b5b828202905092915050565b60006142f4826143a3565b91506142ff836143a3565b92508282101561431257614311614511565b5b828203905092915050565b600061432882614383565b9050919050565b600061433a82614383565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143e75780820151818401526020810190506143cc565b838111156143f6576000848401525b50505050565b6000600282049050600182168061441457607f821691505b602082108114156144285761442761459e565b5b50919050565b61443782614649565b810181811067ffffffffffffffff82111715614456576144556145fc565b5b80604052505050565b600061446a826143a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561449d5761449c614511565b5b600182019050919050565b60006144b3826144c4565b9050919050565b6000819050919050565b60006144cf8261465a565b9050919050565b6000819050919050565b60006144eb826143a3565b91506144f6836143a3565b92508261450657614505614540565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f425245414b464153545f4841535f4e4f545f5354415254454400000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f425245414b464153545f4841535f4245454e5f53455256454400000000000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f494e56414c49445f5349474e4154555245000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5245534552564154494f4e535f4152455f434c4f534544000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f425245414b464153545f5449434b45545f555345440000000000000000000000600082015250565b7f436f6e7472616374206d65746164617461206d6574686f647320617265206c6f60008201527f636b656400000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f444f4e27545f42455f4752454544595f574954485f5448455f4241434f4e0000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b614d558161431d565b8114614d6057600080fd5b50565b614d6c81614341565b8114614d7757600080fd5b50565b614d8381614357565b8114614d8e57600080fd5b50565b614d9a816143a3565b8114614da557600080fd5b5056fea264697066735822122003ae906b3d7e7d630c7919b85c94d71f0199dd0e74a1bf48388ed0fa4137594b64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b32cb344c129b715dc013bb67ccc9b9145b626920000000000000000000000000000000000000000000000000000000000000014426f72656420427265616b6661737420436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000034242430000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Bored Breakfast Club
Arg [1] : symbol (string): BBC
Arg [2] : _bbc_address (address): 0xb32cb344C129b715Dc013bB67CCC9B9145b62692

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000b32cb344c129b715dc013bb67ccc9b9145b62692
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 426f72656420427265616b6661737420436c7562000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4242430000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

48031:4344:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34773:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50955:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35718:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37277:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36800:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48633:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51525:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51068:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38027:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50856:91;;;;;;;;;;;;;:::i;:::-;;48401:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52158:214;;;;;;;;;;;;;:::i;:::-;;38437:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48673:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48335:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49601:819;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35412:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35142:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15761:103;;;;;;;;;;;;;:::i;:::-;;48593:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15110:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51402:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51291:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35887:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37570:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48470:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49161:432;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38693:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48435:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48506:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51638:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51881:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48374:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48292:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51776:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37796:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16019:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48541:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51183:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34773:305;34875:4;34927:25;34912:40;;;:11;:40;;;;:105;;;;34984:33;34969:48;;;:11;:48;;;;34912:105;:158;;;;35034:36;35058:11;35034:23;:36::i;:::-;34912:158;34892:178;;34773:305;;;:::o;50955:105::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51045:7:::1;51028:14;;:24;;;;;;;;;;;;;;;;;;50955:105:::0;:::o;35718:100::-;35772:13;35805:5;35798:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35718:100;:::o;37277:221::-;37353:7;37381:16;37389:7;37381;:16::i;:::-;37373:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:15;:24;37482:7;37466:24;;;;;;;;;;;;;;;;;;;;;37459:31;;37277:221;;;:::o;36800:411::-;36881:13;36897:23;36912:7;36897:14;:23::i;:::-;36881:39;;36945:5;36939:11;;:2;:11;;;;36931:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37039:5;37023:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37048:37;37065:5;37072:12;:10;:12::i;:::-;37048:16;:37::i;:::-;37023:62;37001:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;37182:21;37191:2;37195:7;37182:8;:21::i;:::-;36870:341;36800:411;;:::o;48633:31::-;;;;:::o;51525:105::-;51569:7;51621:1;51596:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;51589:33;;51525:105;:::o;51068:107::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51157:10:::1;51142:12;:25;;;;51068:107:::0;:::o;38027:339::-;38222:41;38241:12;:10;:12::i;:::-;38255:7;38222:18;:41::i;:::-;38214:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;38330:28;38340:4;38346:2;38350:7;38330:9;:28::i;:::-;38027:339;;;:::o;50856:91::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50927:12:::1;;;;;;;;;;;50926:13;50911:12;;:28;;;;;;;;;;;;;;;;;;50856:91::o:0;48401:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52158:214::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52208:15:::1;52226:21;52208:39;;52259:12;52277:11;;;;;;;;;;;:16;;52301:7;52277:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52258:55;;;52332:7;52324:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;52197:175;;52158:214::o:0;38437:185::-;38575:39;38592:4;38598:2;38602:7;38575:39;;;;;;;;;;;;:16;:39::i;:::-;38437:185;;;:::o;48673:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48335:32::-;;;;;;;;;;;;;:::o;49601:819::-;49730:12;;;;;;;;;;;49722:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;49803:12;;49791:8;:24;;49783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49870:10;49881:5;;49870:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;49869:18;49861:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;49960:10;;49948:8;49932:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;49924:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50019:54;50027:34;50033:10;50045:8;50055:5;;50027;:34::i;:::-;50063:9;;50019:7;:54::i;:::-;50011:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;50134:9;50122:8;50114:5;;:16;;;;:::i;:::-;:29;;50106:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;50197:4;50177:10;50188:5;;50177:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;50216:9;50212:140;50235:8;50231:1;:12;50212:140;;;50265:24;:12;:22;:24::i;:::-;50304:36;50314:10;50326:13;:11;:13::i;:::-;50304:9;:36::i;:::-;50245:3;;;;;:::i;:::-;;;;50212:140;;;;50367:45;50376:10;50388:8;50398:13;:11;:13::i;:::-;50367:45;;;;;;;;:::i;:::-;;;;;;;;49601:819;;;;;:::o;35412:239::-;35484:7;35504:13;35520:7;:16;35528:7;35520:16;;;;;;;;;;;;;;;;;;;;;35504:32;;35572:1;35555:19;;:5;:19;;;;35547:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35638:5;35631:12;;;35412:239;;;:::o;35142:208::-;35214:7;35259:1;35242:19;;:5;:19;;;;35234:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35326:9;:16;35336:5;35326:16;;;;;;;;;;;;;;;;35319:23;;35142:208;;;:::o;15761:103::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15826:30:::1;15853:1;15826:18;:30::i;:::-;15761:103::o:0;48593:33::-;;;;:::o;15110:87::-;15156:7;15183:6;;;;;;;;;;;15176:13;;15110:87;:::o;51402:115::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49086:6:::1;;;;;;;;;;;49085:7;49077:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;51505:4:::2;;51489:13;:20;;;;;;;:::i;:::-;;51402:115:::0;;:::o;51291:103::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51382:4:::1;;51367:12;:19;;;;;;;:::i;:::-;;51291:103:::0;;:::o;35887:104::-;35943:13;35976:7;35969:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35887:104;:::o;37570:155::-;37665:52;37684:12;:10;:12::i;:::-;37698:8;37708;37665:18;:52::i;:::-;37570:155;;:::o;48470:29::-;;;;:::o;49161:432::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49295:8:::1;;49283;49265:15;:13;:15::i;:::-;:26;;;;:::i;:::-;:38;;49257:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;49346:9;49342:184;49365:8;49361:1;:12;49342:184;;;49395:24;:12;:22;:24::i;:::-;49434:30;:18;:28;:30::i;:::-;49479:35;49489:9;49500:13;:11;:13::i;:::-;49479:9;:35::i;:::-;49375:3;;;;;:::i;:::-;;;;49342:184;;;;49541:44;49550:9;49561:8;49571:13;:11;:13::i;:::-;49541:44;;;;;;;;:::i;:::-;;;;;;;;49161:432:::0;;:::o;38693:328::-;38868:41;38887:12;:10;:12::i;:::-;38901:7;38868:18;:41::i;:::-;38860:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;38974:39;38988:4;38994:2;38998:7;39007:5;38974:13;:39::i;:::-;38693:328;;;;:::o;48435:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48506:28::-;;;;:::o;51638:113::-;51684:7;51742:1;51711:28;:18;:26;:28::i;:::-;:32;;;;:::i;:::-;51704:39;;51638:113;:::o;51881:246::-;51954:13;51988:16;51996:7;51988;:16::i;:::-;51980:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;52084:13;52099:18;:7;:16;:18::i;:::-;52067:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52053:66;;51881:246;;;:::o;48374:18::-;;;;;;;;;;;;;:::o;48292:34::-;;;;;;;;;;;;;:::o;51776:97::-;51820:13;51853:12;51846:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51776:97;:::o;37796:164::-;37893:4;37917:18;:25;37936:5;37917:25;;;;;;;;;;;;;;;:35;37943:8;37917:35;;;;;;;;;;;;;;;;;;;;;;;;;37910:42;;37796:164;;;;:::o;16019:201::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16128:1:::1;16108:22;;:8;:22;;;;16100:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16184:28;16203:8;16184:18;:28::i;:::-;16019:201:::0;:::o;48541:45::-;;;;:::o;51183:100::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51264:11:::1;51256:5;:19;;;;51183:100:::0;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;27542:157::-;27627:4;27666:25;27651:40;;;:11;:40;;;;27644:47;;27542:157;;;:::o;13834:98::-;13887:7;13914:10;13907:17;;13834:98;:::o;40531:127::-;40596:4;40648:1;40620:30;;:7;:16;40628:7;40620:16;;;;;;;;;;;;;;;;;;;;;:30;;;;40613:37;;40531:127;;;:::o;44513:174::-;44615:2;44588:15;:24;44604:7;44588:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44671:7;44667:2;44633:46;;44642:23;44657:7;44642:14;:23::i;:::-;44633:46;;;;;;;;;;;;44513:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;40825:348::-;40918:4;40943:16;40951:7;40943;:16::i;:::-;40935:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41019:13;41035:23;41050:7;41035:14;:23::i;:::-;41019:39;;41088:5;41077:16;;:7;:16;;;:51;;;;41121:7;41097:31;;:20;41109:7;41097:11;:20::i;:::-;:31;;;41077:51;:87;;;;41132:32;41149:5;41156:7;41132:16;:32::i;:::-;41077:87;41069:96;;;40825:348;;;;:::o;43817:578::-;43976:4;43949:31;;:23;43964:7;43949:14;:23::i;:::-;:31;;;43941:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44059:1;44045:16;;:2;:16;;;;44037:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44115:39;44136:4;44142:2;44146:7;44115:20;:39::i;:::-;44219:29;44236:1;44240:7;44219:8;:29::i;:::-;44280:1;44261:9;:15;44271:4;44261:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44309:1;44292:9;:13;44302:2;44292:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44340:2;44321:7;:16;44329:7;44321:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44379:7;44375:2;44360:27;;44369:4;44360:27;;;;;;;;;;;;43817:578;;;:::o;50428:223::-;50528:7;50560:83;50616:8;50626:7;50635:5;;50599:42;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50589:53;;;;;;50560:28;:83::i;:::-;50553:90;;50428:223;;;;;;:::o;50659:173::-;50745:4;50792:32;50806:6;50814:9;;50792:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:32::i;:::-;50774:50;;:14;;;;;;;;;;;:50;;;50767:57;;50659:173;;;;;:::o;41515:110::-;41591:26;41601:2;41605:7;41591:26;;;;;;;;;;;;:9;:26::i;:::-;41515:110;;:::o;16380:191::-;16454:16;16473:6;;;;;;;;;;;16454:25;;16499:8;16490:6;;:17;;;;;;;;;;;;;;;;;;16554:8;16523:40;;16544:8;16523:40;;;;;;;;;;;;16443:128;16380:191;:::o;44829:315::-;44984:8;44975:17;;:5;:17;;;;44967:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45071:8;45033:18;:25;45052:5;45033:25;;;;;;;;;;;;;;;:35;45059:8;45033:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45117:8;45095:41;;45110:5;45095:41;;;45127:8;45095:41;;;;;;:::i;:::-;;;;;;;;44829:315;;;:::o;39903:::-;40060:28;40070:4;40076:2;40080:7;40060:9;:28::i;:::-;40107:48;40130:4;40136:2;40140:7;40149:5;40107:22;:48::i;:::-;40099:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;39903:315;;;;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;47080:126::-;;;;:::o;11840:269::-;11909:7;12095:4;12042:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;12032:69;;;;;;12025:76;;11840:269;;;:::o;7991:231::-;8069:7;8090:17;8109:18;8131:27;8142:4;8148:9;8131:10;:27::i;:::-;8089:69;;;;8169:18;8181:5;8169:11;:18::i;:::-;8205:9;8198:16;;;;7991:231;;;;:::o;41852:321::-;41982:18;41988:2;41992:7;41982:5;:18::i;:::-;42033:54;42064:1;42068:2;42072:7;42081:5;42033:22;:54::i;:::-;42011:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;41852:321;;;:::o;45709:799::-;45864:4;45885:15;:2;:13;;;:15::i;:::-;45881:620;;;45937:2;45921:36;;;45958:12;:10;:12::i;:::-;45972:4;45978:7;45987:5;45921:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45917:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46180:1;46163:6;:13;:18;46159:272;;;46206:60;;;;;;;;;;:::i;:::-;;;;;;;;46159:272;46381:6;46375:13;46366:6;46362:2;46358:15;46351:38;45917:529;46054:41;;;46044:51;;;:6;:51;;;;46037:58;;;;;45881:620;46485:4;46478:11;;45709:799;;;;;;;:::o;5881:1308::-;5962:7;5971:12;6216:2;6196:9;:16;:22;6192:990;;;6235:9;6259;6283:7;6492:4;6481:9;6477:20;6471:27;6466:32;;6542:4;6531:9;6527:20;6521:27;6516:32;;6600:4;6589:9;6585:20;6579:27;6576:1;6571:36;6566:41;;6643:25;6654:4;6660:1;6663;6666;6643:10;:25::i;:::-;6636:32;;;;;;;;;6192:990;6710:2;6690:9;:16;:22;6686:496;;;6729:9;6753:10;6965:4;6954:9;6950:20;6944:27;6939:32;;7016:4;7005:9;7001:20;6995:27;6989:33;;7058:23;7069:4;7075:1;7078:2;7058:10;:23::i;:::-;7051:30;;;;;;;;6686:496;7130:1;7134:35;7114:56;;;;5881:1308;;;;;;:::o;4152:643::-;4230:20;4221:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;4217:571;;;4267:7;;4217:571;4328:29;4319:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;4315:473;;;4374:34;;;;;;;;;;:::i;:::-;;;;;;;;4315:473;4439:35;4430:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;4426:362;;;4491:41;;;;;;;;;;:::i;:::-;;;;;;;;4426:362;4563:30;4554:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;4550:238;;;4610:44;;;;;;;;;;:::i;:::-;;;;;;;;4550:238;4685:30;4676:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;4672:116;;;4732:44;;;;;;;;;;:::i;:::-;;;;;;;;4672:116;4152:643;;:::o;42509:382::-;42603:1;42589:16;;:2;:16;;;;42581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42662:16;42670:7;42662;:16::i;:::-;42661:17;42653:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42724:45;42753:1;42757:2;42761:7;42724:20;:45::i;:::-;42799:1;42782:9;:13;42792:2;42782:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42830:2;42811:7;:16;42819:7;42811:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42875:7;42871:2;42850:33;;42867:1;42850:33;;;;;;;;;;;;42509:382;;:::o;17398:387::-;17458:4;17666:12;17733:7;17721:20;17713:28;;17776:1;17769:4;:8;17762:15;;;17398:387;;;:::o;9490:1632::-;9621:7;9630:12;10555:66;10550:1;10542:10;;:79;10538:163;;;10654:1;10658:30;10638:51;;;;;;10538:163;10720:2;10715:1;:7;;;;:18;;;;;10731:2;10726:1;:7;;;;10715:18;10711:102;;;10766:1;10770:30;10750:51;;;;;;10711:102;10910:14;10927:24;10937:4;10943:1;10946;10949;10927:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10910:41;;10984:1;10966:20;;:6;:20;;;10962:103;;;11019:1;11023:29;11003:50;;;;;;;10962:103;11085:6;11093:20;11077:37;;;;;9490:1632;;;;;;;;:::o;8485:391::-;8599:7;8608:12;8633:9;8653:7;8708:66;8704:2;8700:75;8695:80;;8812:2;8807;8802:3;8798:12;8794:21;8789:26;;8843:25;8854:4;8860:1;8863;8866;8843:10;:25::i;:::-;8836:32;;;;;;8485:391;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:552::-;1485:8;1495:6;1545:3;1538:4;1530:6;1526:17;1522:27;1512:122;;1553:79;;:::i;:::-;1512:122;1666:6;1653:20;1643:30;;1696:18;1688:6;1685:30;1682:117;;;1718:79;;:::i;:::-;1682:117;1832:4;1824:6;1820:17;1808:29;;1886:3;1878:4;1870:6;1866:17;1856:8;1852:32;1849:41;1846:128;;;1893:79;;:::i;:::-;1846:128;1428:552;;;;;:::o;1999:338::-;2054:5;2103:3;2096:4;2088:6;2084:17;2080:27;2070:122;;2111:79;;:::i;:::-;2070:122;2228:6;2215:20;2253:78;2327:3;2319:6;2312:4;2304:6;2300:17;2253:78;:::i;:::-;2244:87;;2060:277;1999:338;;;;:::o;2357:553::-;2415:8;2425:6;2475:3;2468:4;2460:6;2456:17;2452:27;2442:122;;2483:79;;:::i;:::-;2442:122;2596:6;2583:20;2573:30;;2626:18;2618:6;2615:30;2612:117;;;2648:79;;:::i;:::-;2612:117;2762:4;2754:6;2750:17;2738:29;;2816:3;2808:4;2800:6;2796:17;2786:8;2782:32;2779:41;2776:128;;;2823:79;;:::i;:::-;2776:128;2357:553;;;;;:::o;2930:340::-;2986:5;3035:3;3028:4;3020:6;3016:17;3012:27;3002:122;;3043:79;;:::i;:::-;3002:122;3160:6;3147:20;3185:79;3260:3;3252:6;3245:4;3237:6;3233:17;3185:79;:::i;:::-;3176:88;;2992:278;2930:340;;;;:::o;3276:139::-;3322:5;3360:6;3347:20;3338:29;;3376:33;3403:5;3376:33;:::i;:::-;3276:139;;;;:::o;3421:329::-;3480:6;3529:2;3517:9;3508:7;3504:23;3500:32;3497:119;;;3535:79;;:::i;:::-;3497:119;3655:1;3680:53;3725:7;3716:6;3705:9;3701:22;3680:53;:::i;:::-;3670:63;;3626:117;3421:329;;;;:::o;3756:474::-;3824:6;3832;3881:2;3869:9;3860:7;3856:23;3852:32;3849:119;;;3887:79;;:::i;:::-;3849:119;4007:1;4032:53;4077:7;4068:6;4057:9;4053:22;4032:53;:::i;:::-;4022:63;;3978:117;4134:2;4160:53;4205:7;4196:6;4185:9;4181:22;4160:53;:::i;:::-;4150:63;;4105:118;3756:474;;;;;:::o;4236:619::-;4313:6;4321;4329;4378:2;4366:9;4357:7;4353:23;4349:32;4346:119;;;4384:79;;:::i;:::-;4346:119;4504:1;4529:53;4574:7;4565:6;4554:9;4550:22;4529:53;:::i;:::-;4519:63;;4475:117;4631:2;4657:53;4702:7;4693:6;4682:9;4678:22;4657:53;:::i;:::-;4647:63;;4602:118;4759:2;4785:53;4830:7;4821:6;4810:9;4806:22;4785:53;:::i;:::-;4775:63;;4730:118;4236:619;;;;;:::o;4861:943::-;4956:6;4964;4972;4980;5029:3;5017:9;5008:7;5004:23;5000:33;4997:120;;;5036:79;;:::i;:::-;4997:120;5156:1;5181:53;5226:7;5217:6;5206:9;5202:22;5181:53;:::i;:::-;5171:63;;5127:117;5283:2;5309:53;5354:7;5345:6;5334:9;5330:22;5309:53;:::i;:::-;5299:63;;5254:118;5411:2;5437:53;5482:7;5473:6;5462:9;5458:22;5437:53;:::i;:::-;5427:63;;5382:118;5567:2;5556:9;5552:18;5539:32;5598:18;5590:6;5587:30;5584:117;;;5620:79;;:::i;:::-;5584:117;5725:62;5779:7;5770:6;5759:9;5755:22;5725:62;:::i;:::-;5715:72;;5510:287;4861:943;;;;;;;:::o;5810:468::-;5875:6;5883;5932:2;5920:9;5911:7;5907:23;5903:32;5900:119;;;5938:79;;:::i;:::-;5900:119;6058:1;6083:53;6128:7;6119:6;6108:9;6104:22;6083:53;:::i;:::-;6073:63;;6029:117;6185:2;6211:50;6253:7;6244:6;6233:9;6229:22;6211:50;:::i;:::-;6201:60;;6156:115;5810:468;;;;;:::o;6284:474::-;6352:6;6360;6409:2;6397:9;6388:7;6384:23;6380:32;6377:119;;;6415:79;;:::i;:::-;6377:119;6535:1;6560:53;6605:7;6596:6;6585:9;6581:22;6560:53;:::i;:::-;6550:63;;6506:117;6662:2;6688:53;6733:7;6724:6;6713:9;6709:22;6688:53;:::i;:::-;6678:63;;6633:118;6284:474;;;;;:::o;6764:327::-;6822:6;6871:2;6859:9;6850:7;6846:23;6842:32;6839:119;;;6877:79;;:::i;:::-;6839:119;6997:1;7022:52;7066:7;7057:6;7046:9;7042:22;7022:52;:::i;:::-;7012:62;;6968:116;6764:327;;;;:::o;7097:349::-;7166:6;7215:2;7203:9;7194:7;7190:23;7186:32;7183:119;;;7221:79;;:::i;:::-;7183:119;7341:1;7366:63;7421:7;7412:6;7401:9;7397:22;7366:63;:::i;:::-;7356:73;;7312:127;7097:349;;;;:::o;7452:529::-;7523:6;7531;7580:2;7568:9;7559:7;7555:23;7551:32;7548:119;;;7586:79;;:::i;:::-;7548:119;7734:1;7723:9;7719:17;7706:31;7764:18;7756:6;7753:30;7750:117;;;7786:79;;:::i;:::-;7750:117;7899:65;7956:7;7947:6;7936:9;7932:22;7899:65;:::i;:::-;7881:83;;;;7677:297;7452:529;;;;;:::o;7987:509::-;8056:6;8105:2;8093:9;8084:7;8080:23;8076:32;8073:119;;;8111:79;;:::i;:::-;8073:119;8259:1;8248:9;8244:17;8231:31;8289:18;8281:6;8278:30;8275:117;;;8311:79;;:::i;:::-;8275:117;8416:63;8471:7;8462:6;8451:9;8447:22;8416:63;:::i;:::-;8406:73;;8202:287;7987:509;;;;:::o;8502:329::-;8561:6;8610:2;8598:9;8589:7;8585:23;8581:32;8578:119;;;8616:79;;:::i;:::-;8578:119;8736:1;8761:53;8806:7;8797:6;8786:9;8782:22;8761:53;:::i;:::-;8751:63;;8707:117;8502:329;;;;:::o;8837:1017::-;8937:6;8945;8953;8961;8969;9018:2;9006:9;8997:7;8993:23;8989:32;8986:119;;;9024:79;;:::i;:::-;8986:119;9144:1;9169:53;9214:7;9205:6;9194:9;9190:22;9169:53;:::i;:::-;9159:63;;9115:117;9299:2;9288:9;9284:18;9271:32;9330:18;9322:6;9319:30;9316:117;;;9352:79;;:::i;:::-;9316:117;9465:65;9522:7;9513:6;9502:9;9498:22;9465:65;:::i;:::-;9447:83;;;;9242:298;9607:2;9596:9;9592:18;9579:32;9638:18;9630:6;9627:30;9624:117;;;9660:79;;:::i;:::-;9624:117;9773:64;9829:7;9820:6;9809:9;9805:22;9773:64;:::i;:::-;9755:82;;;;9550:297;8837:1017;;;;;;;;:::o;9860:142::-;9963:32;9989:5;9963:32;:::i;:::-;9958:3;9951:45;9860:142;;:::o;10008:118::-;10095:24;10113:5;10095:24;:::i;:::-;10090:3;10083:37;10008:118;;:::o;10132:157::-;10237:45;10257:24;10275:5;10257:24;:::i;:::-;10237:45;:::i;:::-;10232:3;10225:58;10132:157;;:::o;10295:109::-;10376:21;10391:5;10376:21;:::i;:::-;10371:3;10364:34;10295:109;;:::o;10410:118::-;10497:24;10515:5;10497:24;:::i;:::-;10492:3;10485:37;10410:118;;:::o;10534:157::-;10639:45;10659:24;10677:5;10659:24;:::i;:::-;10639:45;:::i;:::-;10634:3;10627:58;10534:157;;:::o;10697:360::-;10783:3;10811:38;10843:5;10811:38;:::i;:::-;10865:70;10928:6;10923:3;10865:70;:::i;:::-;10858:77;;10944:52;10989:6;10984:3;10977:4;10970:5;10966:16;10944:52;:::i;:::-;11021:29;11043:6;11021:29;:::i;:::-;11016:3;11012:39;11005:46;;10787:270;10697:360;;;;:::o;11087:317::-;11203:3;11224:89;11306:6;11301:3;11224:89;:::i;:::-;11217:96;;11323:43;11359:6;11354:3;11347:5;11323:43;:::i;:::-;11391:6;11386:3;11382:16;11375:23;;11087:317;;;;;:::o;11410:364::-;11498:3;11526:39;11559:5;11526:39;:::i;:::-;11581:71;11645:6;11640:3;11581:71;:::i;:::-;11574:78;;11661:52;11706:6;11701:3;11694:4;11687:5;11683:16;11661:52;:::i;:::-;11738:29;11760:6;11738:29;:::i;:::-;11733:3;11729:39;11722:46;;11502:272;11410:364;;;;:::o;11780:377::-;11886:3;11914:39;11947:5;11914:39;:::i;:::-;11969:89;12051:6;12046:3;11969:89;:::i;:::-;11962:96;;12067:52;12112:6;12107:3;12100:4;12093:5;12089:16;12067:52;:::i;:::-;12144:6;12139:3;12135:16;12128:23;;11890:267;11780:377;;;;:::o;12187:845::-;12290:3;12327:5;12321:12;12356:36;12382:9;12356:36;:::i;:::-;12408:89;12490:6;12485:3;12408:89;:::i;:::-;12401:96;;12528:1;12517:9;12513:17;12544:1;12539:137;;;;12690:1;12685:341;;;;12506:520;;12539:137;12623:4;12619:9;12608;12604:25;12599:3;12592:38;12659:6;12654:3;12650:16;12643:23;;12539:137;;12685:341;12752:38;12784:5;12752:38;:::i;:::-;12812:1;12826:154;12840:6;12837:1;12834:13;12826:154;;;12914:7;12908:14;12904:1;12899:3;12895:11;12888:35;12964:1;12955:7;12951:15;12940:26;;12862:4;12859:1;12855:12;12850:17;;12826:154;;;13009:6;13004:3;13000:16;12993:23;;12692:334;;12506:520;;12294:738;;12187:845;;;;:::o;13038:366::-;13180:3;13201:67;13265:2;13260:3;13201:67;:::i;:::-;13194:74;;13277:93;13366:3;13277:93;:::i;:::-;13395:2;13390:3;13386:12;13379:19;;13038:366;;;:::o;13410:::-;13552:3;13573:67;13637:2;13632:3;13573:67;:::i;:::-;13566:74;;13649:93;13738:3;13649:93;:::i;:::-;13767:2;13762:3;13758:12;13751:19;;13410:366;;;:::o;13782:402::-;13942:3;13963:85;14045:2;14040:3;13963:85;:::i;:::-;13956:92;;14057:93;14146:3;14057:93;:::i;:::-;14175:2;14170:3;14166:12;14159:19;;13782:402;;;:::o;14190:366::-;14332:3;14353:67;14417:2;14412:3;14353:67;:::i;:::-;14346:74;;14429:93;14518:3;14429:93;:::i;:::-;14547:2;14542:3;14538:12;14531:19;;14190:366;;;:::o;14562:::-;14704:3;14725:67;14789:2;14784:3;14725:67;:::i;:::-;14718:74;;14801:93;14890:3;14801:93;:::i;:::-;14919:2;14914:3;14910:12;14903:19;;14562:366;;;:::o;14934:::-;15076:3;15097:67;15161:2;15156:3;15097:67;:::i;:::-;15090:74;;15173:93;15262:3;15173:93;:::i;:::-;15291:2;15286:3;15282:12;15275:19;;14934:366;;;:::o;15306:::-;15448:3;15469:67;15533:2;15528:3;15469:67;:::i;:::-;15462:74;;15545:93;15634:3;15545:93;:::i;:::-;15663:2;15658:3;15654:12;15647:19;;15306:366;;;:::o;15678:::-;15820:3;15841:67;15905:2;15900:3;15841:67;:::i;:::-;15834:74;;15917:93;16006:3;15917:93;:::i;:::-;16035:2;16030:3;16026:12;16019:19;;15678:366;;;:::o;16050:::-;16192:3;16213:67;16277:2;16272:3;16213:67;:::i;:::-;16206:74;;16289:93;16378:3;16289:93;:::i;:::-;16407:2;16402:3;16398:12;16391:19;;16050:366;;;:::o;16422:::-;16564:3;16585:67;16649:2;16644:3;16585:67;:::i;:::-;16578:74;;16661:93;16750:3;16661:93;:::i;:::-;16779:2;16774:3;16770:12;16763:19;;16422:366;;;:::o;16794:::-;16936:3;16957:67;17021:2;17016:3;16957:67;:::i;:::-;16950:74;;17033:93;17122:3;17033:93;:::i;:::-;17151:2;17146:3;17142:12;17135:19;;16794:366;;;:::o;17166:::-;17308:3;17329:67;17393:2;17388:3;17329:67;:::i;:::-;17322:74;;17405:93;17494:3;17405:93;:::i;:::-;17523:2;17518:3;17514:12;17507:19;;17166:366;;;:::o;17538:::-;17680:3;17701:67;17765:2;17760:3;17701:67;:::i;:::-;17694:74;;17777:93;17866:3;17777:93;:::i;:::-;17895:2;17890:3;17886:12;17879:19;;17538:366;;;:::o;17910:::-;18052:3;18073:67;18137:2;18132:3;18073:67;:::i;:::-;18066:74;;18149:93;18238:3;18149:93;:::i;:::-;18267:2;18262:3;18258:12;18251:19;;17910:366;;;:::o;18282:::-;18424:3;18445:67;18509:2;18504:3;18445:67;:::i;:::-;18438:74;;18521:93;18610:3;18521:93;:::i;:::-;18639:2;18634:3;18630:12;18623:19;;18282:366;;;:::o;18654:::-;18796:3;18817:67;18881:2;18876:3;18817:67;:::i;:::-;18810:74;;18893:93;18982:3;18893:93;:::i;:::-;19011:2;19006:3;19002:12;18995:19;;18654:366;;;:::o;19026:::-;19168:3;19189:67;19253:2;19248:3;19189:67;:::i;:::-;19182:74;;19265:93;19354:3;19265:93;:::i;:::-;19383:2;19378:3;19374:12;19367:19;;19026:366;;;:::o;19398:::-;19540:3;19561:67;19625:2;19620:3;19561:67;:::i;:::-;19554:74;;19637:93;19726:3;19637:93;:::i;:::-;19755:2;19750:3;19746:12;19739:19;;19398:366;;;:::o;19770:::-;19912:3;19933:67;19997:2;19992:3;19933:67;:::i;:::-;19926:74;;20009:93;20098:3;20009:93;:::i;:::-;20127:2;20122:3;20118:12;20111:19;;19770:366;;;:::o;20142:::-;20284:3;20305:67;20369:2;20364:3;20305:67;:::i;:::-;20298:74;;20381:93;20470:3;20381:93;:::i;:::-;20499:2;20494:3;20490:12;20483:19;;20142:366;;;:::o;20514:::-;20656:3;20677:67;20741:2;20736:3;20677:67;:::i;:::-;20670:74;;20753:93;20842:3;20753:93;:::i;:::-;20871:2;20866:3;20862:12;20855:19;;20514:366;;;:::o;20886:::-;21028:3;21049:67;21113:2;21108:3;21049:67;:::i;:::-;21042:74;;21125:93;21214:3;21125:93;:::i;:::-;21243:2;21238:3;21234:12;21227:19;;20886:366;;;:::o;21258:::-;21400:3;21421:67;21485:2;21480:3;21421:67;:::i;:::-;21414:74;;21497:93;21586:3;21497:93;:::i;:::-;21615:2;21610:3;21606:12;21599:19;;21258:366;;;:::o;21630:::-;21772:3;21793:67;21857:2;21852:3;21793:67;:::i;:::-;21786:74;;21869:93;21958:3;21869:93;:::i;:::-;21987:2;21982:3;21978:12;21971:19;;21630:366;;;:::o;22002:::-;22144:3;22165:67;22229:2;22224:3;22165:67;:::i;:::-;22158:74;;22241:93;22330:3;22241:93;:::i;:::-;22359:2;22354:3;22350:12;22343:19;;22002:366;;;:::o;22374:::-;22516:3;22537:67;22601:2;22596:3;22537:67;:::i;:::-;22530:74;;22613:93;22702:3;22613:93;:::i;:::-;22731:2;22726:3;22722:12;22715:19;;22374:366;;;:::o;22746:::-;22888:3;22909:67;22973:2;22968:3;22909:67;:::i;:::-;22902:74;;22985:93;23074:3;22985:93;:::i;:::-;23103:2;23098:3;23094:12;23087:19;;22746:366;;;:::o;23118:::-;23260:3;23281:67;23345:2;23340:3;23281:67;:::i;:::-;23274:74;;23357:93;23446:3;23357:93;:::i;:::-;23475:2;23470:3;23466:12;23459:19;;23118:366;;;:::o;23490:398::-;23649:3;23670:83;23751:1;23746:3;23670:83;:::i;:::-;23663:90;;23762:93;23851:3;23762:93;:::i;:::-;23880:1;23875:3;23871:11;23864:18;;23490:398;;;:::o;23894:366::-;24036:3;24057:67;24121:2;24116:3;24057:67;:::i;:::-;24050:74;;24133:93;24222:3;24133:93;:::i;:::-;24251:2;24246:3;24242:12;24235:19;;23894:366;;;:::o;24266:::-;24408:3;24429:67;24493:2;24488:3;24429:67;:::i;:::-;24422:74;;24505:93;24594:3;24505:93;:::i;:::-;24623:2;24618:3;24614:12;24607:19;;24266:366;;;:::o;24638:118::-;24725:24;24743:5;24725:24;:::i;:::-;24720:3;24713:37;24638:118;;:::o;24762:157::-;24867:45;24887:24;24905:5;24887:24;:::i;:::-;24867:45;:::i;:::-;24862:3;24855:58;24762:157;;:::o;24925:112::-;25008:22;25024:5;25008:22;:::i;:::-;25003:3;24996:35;24925:112;;:::o;25043:295::-;25185:3;25207:105;25308:3;25299:6;25291;25207:105;:::i;:::-;25200:112;;25329:3;25322:10;;25043:295;;;;;:::o;25344:429::-;25521:3;25543:92;25631:3;25622:6;25543:92;:::i;:::-;25536:99;;25652:95;25743:3;25734:6;25652:95;:::i;:::-;25645:102;;25764:3;25757:10;;25344:429;;;;;:::o;25779:522::-;25992:3;26014:148;26158:3;26014:148;:::i;:::-;26007:155;;26172:75;26243:3;26234:6;26172:75;:::i;:::-;26272:2;26267:3;26263:12;26256:19;;26292:3;26285:10;;25779:522;;;;:::o;26307:379::-;26491:3;26513:147;26656:3;26513:147;:::i;:::-;26506:154;;26677:3;26670:10;;26307:379;;;:::o;26692:577::-;26890:3;26905:75;26976:3;26967:6;26905:75;:::i;:::-;27005:2;27000:3;26996:12;26989:19;;27018:75;27089:3;27080:6;27018:75;:::i;:::-;27118:2;27113:3;27109:12;27102:19;;27138:105;27239:3;27230:6;27222;27138:105;:::i;:::-;27131:112;;27260:3;27253:10;;26692:577;;;;;;;:::o;27275:222::-;27368:4;27406:2;27395:9;27391:18;27383:26;;27419:71;27487:1;27476:9;27472:17;27463:6;27419:71;:::i;:::-;27275:222;;;;:::o;27503:254::-;27612:4;27650:2;27639:9;27635:18;27627:26;;27663:87;27747:1;27736:9;27732:17;27723:6;27663:87;:::i;:::-;27503:254;;;;:::o;27763:640::-;27958:4;27996:3;27985:9;27981:19;27973:27;;28010:71;28078:1;28067:9;28063:17;28054:6;28010:71;:::i;:::-;28091:72;28159:2;28148:9;28144:18;28135:6;28091:72;:::i;:::-;28173;28241:2;28230:9;28226:18;28217:6;28173:72;:::i;:::-;28292:9;28286:4;28282:20;28277:2;28266:9;28262:18;28255:48;28320:76;28391:4;28382:6;28320:76;:::i;:::-;28312:84;;27763:640;;;;;;;:::o;28409:442::-;28558:4;28596:2;28585:9;28581:18;28573:26;;28609:71;28677:1;28666:9;28662:17;28653:6;28609:71;:::i;:::-;28690:72;28758:2;28747:9;28743:18;28734:6;28690:72;:::i;:::-;28772;28840:2;28829:9;28825:18;28816:6;28772:72;:::i;:::-;28409:442;;;;;;:::o;28857:210::-;28944:4;28982:2;28971:9;28967:18;28959:26;;28995:65;29057:1;29046:9;29042:17;29033:6;28995:65;:::i;:::-;28857:210;;;;:::o;29073:545::-;29246:4;29284:3;29273:9;29269:19;29261:27;;29298:71;29366:1;29355:9;29351:17;29342:6;29298:71;:::i;:::-;29379:68;29443:2;29432:9;29428:18;29419:6;29379:68;:::i;:::-;29457:72;29525:2;29514:9;29510:18;29501:6;29457:72;:::i;:::-;29539;29607:2;29596:9;29592:18;29583:6;29539:72;:::i;:::-;29073:545;;;;;;;:::o;29624:313::-;29737:4;29775:2;29764:9;29760:18;29752:26;;29824:9;29818:4;29814:20;29810:1;29799:9;29795:17;29788:47;29852:78;29925:4;29916:6;29852:78;:::i;:::-;29844:86;;29624:313;;;;:::o;29943:419::-;30109:4;30147:2;30136:9;30132:18;30124:26;;30196:9;30190:4;30186:20;30182:1;30171:9;30167:17;30160:47;30224:131;30350:4;30224:131;:::i;:::-;30216:139;;29943:419;;;:::o;30368:::-;30534:4;30572:2;30561:9;30557:18;30549:26;;30621:9;30615:4;30611:20;30607:1;30596:9;30592:17;30585:47;30649:131;30775:4;30649:131;:::i;:::-;30641:139;;30368:419;;;:::o;30793:::-;30959:4;30997:2;30986:9;30982:18;30974:26;;31046:9;31040:4;31036:20;31032:1;31021:9;31017:17;31010:47;31074:131;31200:4;31074:131;:::i;:::-;31066:139;;30793:419;;;:::o;31218:::-;31384:4;31422:2;31411:9;31407:18;31399:26;;31471:9;31465:4;31461:20;31457:1;31446:9;31442:17;31435:47;31499:131;31625:4;31499:131;:::i;:::-;31491:139;;31218:419;;;:::o;31643:::-;31809:4;31847:2;31836:9;31832:18;31824:26;;31896:9;31890:4;31886:20;31882:1;31871:9;31867:17;31860:47;31924:131;32050:4;31924:131;:::i;:::-;31916:139;;31643:419;;;:::o;32068:::-;32234:4;32272:2;32261:9;32257:18;32249:26;;32321:9;32315:4;32311:20;32307:1;32296:9;32292:17;32285:47;32349:131;32475:4;32349:131;:::i;:::-;32341:139;;32068:419;;;:::o;32493:::-;32659:4;32697:2;32686:9;32682:18;32674:26;;32746:9;32740:4;32736:20;32732:1;32721:9;32717:17;32710:47;32774:131;32900:4;32774:131;:::i;:::-;32766:139;;32493:419;;;:::o;32918:::-;33084:4;33122:2;33111:9;33107:18;33099:26;;33171:9;33165:4;33161:20;33157:1;33146:9;33142:17;33135:47;33199:131;33325:4;33199:131;:::i;:::-;33191:139;;32918:419;;;:::o;33343:::-;33509:4;33547:2;33536:9;33532:18;33524:26;;33596:9;33590:4;33586:20;33582:1;33571:9;33567:17;33560:47;33624:131;33750:4;33624:131;:::i;:::-;33616:139;;33343:419;;;:::o;33768:::-;33934:4;33972:2;33961:9;33957:18;33949:26;;34021:9;34015:4;34011:20;34007:1;33996:9;33992:17;33985:47;34049:131;34175:4;34049:131;:::i;:::-;34041:139;;33768:419;;;:::o;34193:::-;34359:4;34397:2;34386:9;34382:18;34374:26;;34446:9;34440:4;34436:20;34432:1;34421:9;34417:17;34410:47;34474:131;34600:4;34474:131;:::i;:::-;34466:139;;34193:419;;;:::o;34618:::-;34784:4;34822:2;34811:9;34807:18;34799:26;;34871:9;34865:4;34861:20;34857:1;34846:9;34842:17;34835:47;34899:131;35025:4;34899:131;:::i;:::-;34891:139;;34618:419;;;:::o;35043:::-;35209:4;35247:2;35236:9;35232:18;35224:26;;35296:9;35290:4;35286:20;35282:1;35271:9;35267:17;35260:47;35324:131;35450:4;35324:131;:::i;:::-;35316:139;;35043:419;;;:::o;35468:::-;35634:4;35672:2;35661:9;35657:18;35649:26;;35721:9;35715:4;35711:20;35707:1;35696:9;35692:17;35685:47;35749:131;35875:4;35749:131;:::i;:::-;35741:139;;35468:419;;;:::o;35893:::-;36059:4;36097:2;36086:9;36082:18;36074:26;;36146:9;36140:4;36136:20;36132:1;36121:9;36117:17;36110:47;36174:131;36300:4;36174:131;:::i;:::-;36166:139;;35893:419;;;:::o;36318:::-;36484:4;36522:2;36511:9;36507:18;36499:26;;36571:9;36565:4;36561:20;36557:1;36546:9;36542:17;36535:47;36599:131;36725:4;36599:131;:::i;:::-;36591:139;;36318:419;;;:::o;36743:::-;36909:4;36947:2;36936:9;36932:18;36924:26;;36996:9;36990:4;36986:20;36982:1;36971:9;36967:17;36960:47;37024:131;37150:4;37024:131;:::i;:::-;37016:139;;36743:419;;;:::o;37168:::-;37334:4;37372:2;37361:9;37357:18;37349:26;;37421:9;37415:4;37411:20;37407:1;37396:9;37392:17;37385:47;37449:131;37575:4;37449:131;:::i;:::-;37441:139;;37168:419;;;:::o;37593:::-;37759:4;37797:2;37786:9;37782:18;37774:26;;37846:9;37840:4;37836:20;37832:1;37821:9;37817:17;37810:47;37874:131;38000:4;37874:131;:::i;:::-;37866:139;;37593:419;;;:::o;38018:::-;38184:4;38222:2;38211:9;38207:18;38199:26;;38271:9;38265:4;38261:20;38257:1;38246:9;38242:17;38235:47;38299:131;38425:4;38299:131;:::i;:::-;38291:139;;38018:419;;;:::o;38443:::-;38609:4;38647:2;38636:9;38632:18;38624:26;;38696:9;38690:4;38686:20;38682:1;38671:9;38667:17;38660:47;38724:131;38850:4;38724:131;:::i;:::-;38716:139;;38443:419;;;:::o;38868:::-;39034:4;39072:2;39061:9;39057:18;39049:26;;39121:9;39115:4;39111:20;39107:1;39096:9;39092:17;39085:47;39149:131;39275:4;39149:131;:::i;:::-;39141:139;;38868:419;;;:::o;39293:::-;39459:4;39497:2;39486:9;39482:18;39474:26;;39546:9;39540:4;39536:20;39532:1;39521:9;39517:17;39510:47;39574:131;39700:4;39574:131;:::i;:::-;39566:139;;39293:419;;;:::o;39718:::-;39884:4;39922:2;39911:9;39907:18;39899:26;;39971:9;39965:4;39961:20;39957:1;39946:9;39942:17;39935:47;39999:131;40125:4;39999:131;:::i;:::-;39991:139;;39718:419;;;:::o;40143:::-;40309:4;40347:2;40336:9;40332:18;40324:26;;40396:9;40390:4;40386:20;40382:1;40371:9;40367:17;40360:47;40424:131;40550:4;40424:131;:::i;:::-;40416:139;;40143:419;;;:::o;40568:::-;40734:4;40772:2;40761:9;40757:18;40749:26;;40821:9;40815:4;40811:20;40807:1;40796:9;40792:17;40785:47;40849:131;40975:4;40849:131;:::i;:::-;40841:139;;40568:419;;;:::o;40993:::-;41159:4;41197:2;41186:9;41182:18;41174:26;;41246:9;41240:4;41236:20;41232:1;41221:9;41217:17;41210:47;41274:131;41400:4;41274:131;:::i;:::-;41266:139;;40993:419;;;:::o;41418:::-;41584:4;41622:2;41611:9;41607:18;41599:26;;41671:9;41665:4;41661:20;41657:1;41646:9;41642:17;41635:47;41699:131;41825:4;41699:131;:::i;:::-;41691:139;;41418:419;;;:::o;41843:::-;42009:4;42047:2;42036:9;42032:18;42024:26;;42096:9;42090:4;42086:20;42082:1;42071:9;42067:17;42060:47;42124:131;42250:4;42124:131;:::i;:::-;42116:139;;41843:419;;;:::o;42268:222::-;42361:4;42399:2;42388:9;42384:18;42376:26;;42412:71;42480:1;42469:9;42465:17;42456:6;42412:71;:::i;:::-;42268:222;;;;:::o;42496:129::-;42530:6;42557:20;;:::i;:::-;42547:30;;42586:33;42614:4;42606:6;42586:33;:::i;:::-;42496:129;;;:::o;42631:75::-;42664:6;42697:2;42691:9;42681:19;;42631:75;:::o;42712:307::-;42773:4;42863:18;42855:6;42852:30;42849:56;;;42885:18;;:::i;:::-;42849:56;42923:29;42945:6;42923:29;:::i;:::-;42915:37;;43007:4;43001;42997:15;42989:23;;42712:307;;;:::o;43025:308::-;43087:4;43177:18;43169:6;43166:30;43163:56;;;43199:18;;:::i;:::-;43163:56;43237:29;43259:6;43237:29;:::i;:::-;43229:37;;43321:4;43315;43311:15;43303:23;;43025:308;;;:::o;43339:141::-;43388:4;43411:3;43403:11;;43434:3;43431:1;43424:14;43468:4;43465:1;43455:18;43447:26;;43339:141;;;:::o;43486:98::-;43537:6;43571:5;43565:12;43555:22;;43486:98;;;:::o;43590:99::-;43642:6;43676:5;43670:12;43660:22;;43590:99;;;:::o;43695:168::-;43778:11;43812:6;43807:3;43800:19;43852:4;43847:3;43843:14;43828:29;;43695:168;;;;:::o;43869:147::-;43970:11;44007:3;43992:18;;43869:147;;;;:::o;44022:169::-;44106:11;44140:6;44135:3;44128:19;44180:4;44175:3;44171:14;44156:29;;44022:169;;;;:::o;44197:148::-;44299:11;44336:3;44321:18;;44197:148;;;;:::o;44351:305::-;44391:3;44410:20;44428:1;44410:20;:::i;:::-;44405:25;;44444:20;44462:1;44444:20;:::i;:::-;44439:25;;44598:1;44530:66;44526:74;44523:1;44520:81;44517:107;;;44604:18;;:::i;:::-;44517:107;44648:1;44645;44641:9;44634:16;;44351:305;;;;:::o;44662:185::-;44702:1;44719:20;44737:1;44719:20;:::i;:::-;44714:25;;44753:20;44771:1;44753:20;:::i;:::-;44748:25;;44792:1;44782:35;;44797:18;;:::i;:::-;44782:35;44839:1;44836;44832:9;44827:14;;44662:185;;;;:::o;44853:348::-;44893:7;44916:20;44934:1;44916:20;:::i;:::-;44911:25;;44950:20;44968:1;44950:20;:::i;:::-;44945:25;;45138:1;45070:66;45066:74;45063:1;45060:81;45055:1;45048:9;45041:17;45037:105;45034:131;;;45145:18;;:::i;:::-;45034:131;45193:1;45190;45186:9;45175:20;;44853:348;;;;:::o;45207:191::-;45247:4;45267:20;45285:1;45267:20;:::i;:::-;45262:25;;45301:20;45319:1;45301:20;:::i;:::-;45296:25;;45340:1;45337;45334:8;45331:34;;;45345:18;;:::i;:::-;45331:34;45390:1;45387;45383:9;45375:17;;45207:191;;;;:::o;45404:96::-;45441:7;45470:24;45488:5;45470:24;:::i;:::-;45459:35;;45404:96;;;:::o;45506:104::-;45551:7;45580:24;45598:5;45580:24;:::i;:::-;45569:35;;45506:104;;;:::o;45616:90::-;45650:7;45693:5;45686:13;45679:21;45668:32;;45616:90;;;:::o;45712:77::-;45749:7;45778:5;45767:16;;45712:77;;;:::o;45795:149::-;45831:7;45871:66;45864:5;45860:78;45849:89;;45795:149;;;:::o;45950:126::-;45987:7;46027:42;46020:5;46016:54;46005:65;;45950:126;;;:::o;46082:77::-;46119:7;46148:5;46137:16;;46082:77;;;:::o;46165:86::-;46200:7;46240:4;46233:5;46229:16;46218:27;;46165:86;;;:::o;46257:154::-;46341:6;46336:3;46331;46318:30;46403:1;46394:6;46389:3;46385:16;46378:27;46257:154;;;:::o;46417:307::-;46485:1;46495:113;46509:6;46506:1;46503:13;46495:113;;;46594:1;46589:3;46585:11;46579:18;46575:1;46570:3;46566:11;46559:39;46531:2;46528:1;46524:10;46519:15;;46495:113;;;46626:6;46623:1;46620:13;46617:101;;;46706:1;46697:6;46692:3;46688:16;46681:27;46617:101;46466:258;46417:307;;;:::o;46730:320::-;46774:6;46811:1;46805:4;46801:12;46791:22;;46858:1;46852:4;46848:12;46879:18;46869:81;;46935:4;46927:6;46923:17;46913:27;;46869:81;46997:2;46989:6;46986:14;46966:18;46963:38;46960:84;;;47016:18;;:::i;:::-;46960:84;46781:269;46730:320;;;:::o;47056:281::-;47139:27;47161:4;47139:27;:::i;:::-;47131:6;47127:40;47269:6;47257:10;47254:22;47233:18;47221:10;47218:34;47215:62;47212:88;;;47280:18;;:::i;:::-;47212:88;47320:10;47316:2;47309:22;47099:238;47056:281;;:::o;47343:233::-;47382:3;47405:24;47423:5;47405:24;:::i;:::-;47396:33;;47451:66;47444:5;47441:77;47438:103;;;47521:18;;:::i;:::-;47438:103;47568:1;47561:5;47557:13;47550:20;;47343:233;;;:::o;47582:100::-;47621:7;47650:26;47670:5;47650:26;:::i;:::-;47639:37;;47582:100;;;:::o;47688:79::-;47727:7;47756:5;47745:16;;47688:79;;;:::o;47773:94::-;47812:7;47841:20;47855:5;47841:20;:::i;:::-;47830:31;;47773:94;;;:::o;47873:79::-;47912:7;47941:5;47930:16;;47873:79;;;:::o;47958:176::-;47990:1;48007:20;48025:1;48007:20;:::i;:::-;48002:25;;48041:20;48059:1;48041:20;:::i;:::-;48036:25;;48080:1;48070:35;;48085:18;;:::i;:::-;48070:35;48126:1;48123;48119:9;48114:14;;47958:176;;;;:::o;48140:180::-;48188:77;48185:1;48178:88;48285:4;48282:1;48275:15;48309:4;48306:1;48299:15;48326:180;48374:77;48371:1;48364:88;48471:4;48468:1;48461:15;48495:4;48492:1;48485:15;48512:180;48560:77;48557:1;48550:88;48657:4;48654:1;48647:15;48681:4;48678:1;48671:15;48698:180;48746:77;48743:1;48736:88;48843:4;48840:1;48833:15;48867:4;48864:1;48857:15;48884:180;48932:77;48929:1;48922:88;49029:4;49026:1;49019:15;49053:4;49050:1;49043:15;49070:180;49118:77;49115:1;49108:88;49215:4;49212:1;49205:15;49239:4;49236:1;49229:15;49256:117;49365:1;49362;49355:12;49379:117;49488:1;49485;49478:12;49502:117;49611:1;49608;49601:12;49625:117;49734:1;49731;49724:12;49748:117;49857:1;49854;49847:12;49871:117;49980:1;49977;49970:12;49994:102;50035:6;50086:2;50082:7;50077:2;50070:5;50066:14;50062:28;50052:38;;49994:102;;;:::o;50102:94::-;50135:8;50183:5;50179:2;50175:14;50154:35;;50102:94;;;:::o;50202:174::-;50342:26;50338:1;50330:6;50326:14;50319:50;50202:174;:::o;50382:181::-;50522:33;50518:1;50510:6;50506:14;50499:57;50382:181;:::o;50569:214::-;50709:66;50705:1;50697:6;50693:14;50686:90;50569:214;:::o;50789:237::-;50929:34;50925:1;50917:6;50913:14;50906:58;50998:20;50993:2;50985:6;50981:15;50974:45;50789:237;:::o;51032:175::-;51172:27;51168:1;51160:6;51156:14;51149:51;51032:175;:::o;51213:225::-;51353:34;51349:1;51341:6;51337:14;51330:58;51422:8;51417:2;51409:6;51405:15;51398:33;51213:225;:::o;51444:178::-;51584:30;51580:1;51572:6;51568:14;51561:54;51444:178;:::o;51628:175::-;51768:27;51764:1;51756:6;51752:14;51745:51;51628:175;:::o;51809:170::-;51949:22;51945:1;51937:6;51933:14;51926:46;51809:170;:::o;51985:223::-;52125:34;52121:1;52113:6;52109:14;52102:58;52194:6;52189:2;52181:6;52177:15;52170:31;51985:223;:::o;52214:175::-;52354:27;52350:1;52342:6;52338:14;52331:51;52214:175;:::o;52395:221::-;52535:34;52531:1;52523:6;52519:14;52512:58;52604:4;52599:2;52591:6;52587:15;52580:29;52395:221;:::o;52622:231::-;52762:34;52758:1;52750:6;52746:14;52739:58;52831:14;52826:2;52818:6;52814:15;52807:39;52622:231;:::o;52859:167::-;52999:19;52995:1;52987:6;52983:14;52976:43;52859:167;:::o;53032:243::-;53172:34;53168:1;53160:6;53156:14;53149:58;53241:26;53236:2;53228:6;53224:15;53217:51;53032:243;:::o;53281:229::-;53421:34;53417:1;53409:6;53405:14;53398:58;53490:12;53485:2;53477:6;53473:15;53466:37;53281:229;:::o;53516:228::-;53656:34;53652:1;53644:6;53640:14;53633:58;53725:11;53720:2;53712:6;53708:15;53701:36;53516:228;:::o;53750:221::-;53890:34;53886:1;53878:6;53874:14;53867:58;53959:4;53954:2;53946:6;53942:15;53935:29;53750:221;:::o;53977:182::-;54117:34;54113:1;54105:6;54101:14;54094:58;53977:182;:::o;54165:231::-;54305:34;54301:1;54293:6;54289:14;54282:58;54374:14;54369:2;54361:6;54357:15;54350:39;54165:231;:::o;54402:182::-;54542:34;54538:1;54530:6;54526:14;54519:58;54402:182;:::o;54590:173::-;54730:25;54726:1;54718:6;54714:14;54707:49;54590:173;:::o;54769:228::-;54909:34;54905:1;54897:6;54893:14;54886:58;54978:11;54973:2;54965:6;54961:15;54954:36;54769:228;:::o;55003:171::-;55143:23;55139:1;55131:6;55127:14;55120:47;55003:171;:::o;55180:223::-;55320:34;55316:1;55308:6;55304:14;55297:58;55389:6;55384:2;55376:6;55372:15;55365:31;55180:223;:::o;55409:181::-;55549:33;55545:1;55537:6;55533:14;55526:57;55409:181;:::o;55596:180::-;55736:32;55732:1;55724:6;55720:14;55713:56;55596:180;:::o;55782:220::-;55922:34;55918:1;55910:6;55906:14;55899:58;55991:3;55986:2;55978:6;55974:15;55967:28;55782:220;:::o;56008:114::-;;:::o;56128:236::-;56268:34;56264:1;56256:6;56252:14;56245:58;56337:19;56332:2;56324:6;56320:15;56313:44;56128:236;:::o;56370:166::-;56510:18;56506:1;56498:6;56494:14;56487:42;56370:166;:::o;56542:122::-;56615:24;56633:5;56615:24;:::i;:::-;56608:5;56605:35;56595:63;;56654:1;56651;56644:12;56595:63;56542:122;:::o;56670:116::-;56740:21;56755:5;56740:21;:::i;:::-;56733:5;56730:32;56720:60;;56776:1;56773;56766:12;56720:60;56670:116;:::o;56792:120::-;56864:23;56881:5;56864:23;:::i;:::-;56857:5;56854:34;56844:62;;56902:1;56899;56892:12;56844:62;56792:120;:::o;56918:122::-;56991:24;57009:5;56991:24;:::i;:::-;56984:5;56981:35;56971:63;;57030:1;57027;57020:12;56971:63;56918:122;:::o

Swarm Source

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