ETH Price: $2,502.32 (-0.56%)

Token

 

Overview

Max Total Supply

737

Holders

45

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x84c00ed917321ee2fce50fb8a4f2dd8cfec4bcba
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BullRunStakingNFT

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-20
*/

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: @openzeppelin/contracts/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/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        address operator = _msgSender();

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

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

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

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

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

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

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

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: nft.sol

// contracts/GameItems.sol

pragma solidity ^0.8.0;




error InvalidConfiguration();
error InsufficientFunds();
error SaleNotActive();
error URIAlreadySet();

contract BullRunStakingNFT is ERC1155, Ownable {

    address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address payable public feeRecipient;
    uint256 public ethPrice;
    uint256 public usdcPrice;

    bool public isActive;
    bool public isRevealed;

    constructor(uint256 _ethPrice, uint256 _usdcPrice, string memory uri, address payable _feeRecipient) ERC1155(uri) {
        ethPrice = _ethPrice;
        usdcPrice = _usdcPrice;
        feeRecipient = _feeRecipient;
    }

    function purchase(uint256 amount, bool isUSDC) external payable {
        if (!isActive) {
            revert SaleNotActive();
        }
        if (isUSDC) {
            IERC20(USDC).transferFrom(msg.sender, feeRecipient, usdcPrice * amount);
        } else if (msg.value != ethPrice * amount) {
            revert InsufficientFunds();
        }
        _mint(msg.sender, 0, amount, "");

    }

    function mint(address to, uint256 amount) external onlyOwner {
        _mint(to, 0, amount, "");
    }

    function airdrop(address[] memory to, uint256[] memory amount) external onlyOwner {
        uint256 len = to.length;
        if (len != amount.length) {
            revert InvalidConfiguration();
        }
        for (uint256 i = 0; i < len; i++) {
            _mint(to[i], 0, amount[i], "");
        }
    }

    function withdrawETH() external onlyOwner {
        (bool success, ) = feeRecipient.call{value: address(this).balance}("");
        if (!success) {
            revert();
        }
    }

    function setURI(string memory _uri) external onlyOwner {
        if (isRevealed) {
            revert URIAlreadySet();
        }
        isRevealed = true;
        _setURI(_uri);
    }

    function setPrice(uint256 _ethPrice, uint256 _usdcPrice) external onlyOwner {
        ethPrice = _ethPrice;
        usdcPrice = _usdcPrice;
    }

    function setFeeRecipient(address payable _feeRecipient) external onlyOwner {
        feeRecipient = _feeRecipient;
    }

    function setActive(bool toggle) external onlyOwner {
        isActive = toggle;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_ethPrice","type":"uint256"},{"internalType":"uint256","name":"_usdcPrice","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"address payable","name":"_feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[],"name":"SaleNotActive","type":"error"},{"inputs":[],"name":"URIAlreadySet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isUSDC","type":"bool"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setActive","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":"address payable","name":"_feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethPrice","type":"uint256"},{"internalType":"uint256","name":"_usdcPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003d1038038062003d1083398181016040528101906200003791906200049a565b816200004981620000c360201b60201c565b506200006a6200005e620000df60201b60201c565b620000e760201b60201c565b836005819055508260068190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000590565b8060029080519060200190620000db929190620001ad565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001bb906200055a565b90600052602060002090601f016020900481019282620001df57600085556200022b565b82601f10620001fa57805160ff19168380011785556200022b565b828001600101855582156200022b579182015b828111156200022a5782518255916020019190600101906200020d565b5b5090506200023a91906200023e565b5090565b5b80821115620002595760008160009055506001016200023f565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620002868162000271565b81146200029257600080fd5b50565b600081519050620002a6816200027b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200030182620002b6565b810181811067ffffffffffffffff82111715620003235762000322620002c7565b5b80604052505050565b6000620003386200025d565b9050620003468282620002f6565b919050565b600067ffffffffffffffff821115620003695762000368620002c7565b5b6200037482620002b6565b9050602081019050919050565b60005b83811015620003a157808201518184015260208101905062000384565b83811115620003b1576000848401525b50505050565b6000620003ce620003c8846200034b565b6200032c565b905082815260208101848484011115620003ed57620003ec620002b1565b5b620003fa84828562000381565b509392505050565b600082601f8301126200041a5762000419620002ac565b5b81516200042c848260208601620003b7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004628262000435565b9050919050565b620004748162000455565b81146200048057600080fd5b50565b600081519050620004948162000469565b92915050565b60008060008060808587031215620004b757620004b662000267565b5b6000620004c78782880162000295565b9450506020620004da8782880162000295565b935050604085015167ffffffffffffffff811115620004fe57620004fd6200026c565b5b6200050c8782880162000402565b92505060606200051f8782880162000483565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200057357607f821691505b602082108114156200058a57620005896200052b565b5b50919050565b61377080620005a06000396000f3fe6080604052600436106101655760003560e01c8063715018a6116100d1578063e086e5ec1161008a578063f242432a11610064578063f242432a14610506578063f2fde38b1461052f578063f7d9757714610558578063ff186b2e1461058157610165565b8063e086e5ec14610489578063e74b981b146104a0578063e985e9c5146104c957610165565b8063715018a61461039f57806389a30271146103b65780638da5cb5b146103e1578063a22cb4651461040c578063acec338a14610435578063dacee3471461045e57610165565b80632eb2c2d6116101235780632eb2c2d61461029157806340c10f19146102ba57806346904840146102e35780634e1273f41461030e57806354214f691461034b578063672434821461037657610165565b8062fdd58e1461016a57806301ffc9a7146101a757806302fe5305146101e45780630e89341c1461020d57806322f3e2d41461024a5780632d1c92a114610275575b600080fd5b34801561017657600080fd5b50610191600480360381019061018c919061207a565b6105ac565b60405161019e91906120c9565b60405180910390f35b3480156101b357600080fd5b506101ce60048036038101906101c9919061213c565b610675565b6040516101db9190612184565b60405180910390f35b3480156101f057600080fd5b5061020b600480360381019061020691906122e5565b610757565b005b34801561021957600080fd5b50610234600480360381019061022f919061232e565b6107cd565b60405161024191906123e3565b60405180910390f35b34801561025657600080fd5b5061025f610861565b60405161026c9190612184565b60405180910390f35b61028f600480360381019061028a9190612431565b610874565b005b34801561029d57600080fd5b506102b860048036038101906102b391906125da565b6109f0565b005b3480156102c657600080fd5b506102e160048036038101906102dc919061207a565b610a91565b005b3480156102ef57600080fd5b506102f8610ab9565b60405161030591906126ca565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906127a8565b610adf565b60405161034291906128de565b60405180910390f35b34801561035757600080fd5b50610360610bf8565b60405161036d9190612184565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906127a8565b610c0b565b005b3480156103ab57600080fd5b506103b4610cc7565b005b3480156103c257600080fd5b506103cb610cdb565b6040516103d8919061290f565b60405180910390f35b3480156103ed57600080fd5b506103f6610cf3565b604051610403919061290f565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e919061292a565b610d1d565b005b34801561044157600080fd5b5061045c6004803603810190610457919061296a565b610d33565b005b34801561046a57600080fd5b50610473610d58565b60405161048091906120c9565b60405180910390f35b34801561049557600080fd5b5061049e610d5e565b005b3480156104ac57600080fd5b506104c760048036038101906104c291906129c3565b610e01565b005b3480156104d557600080fd5b506104f060048036038101906104eb91906129f0565b610e4d565b6040516104fd9190612184565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190612a30565b610ee1565b005b34801561053b57600080fd5b5061055660048036038101906105519190612ac7565b610f82565b005b34801561056457600080fd5b5061057f600480360381019061057a9190612af4565b611006565b005b34801561058d57600080fd5b50610596611020565b6040516105a391906120c9565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490612ba6565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610750575061074f82611026565b5b9050919050565b61075f611090565b600760019054906101000a900460ff16156107a6576040517f82ccdaca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600760016101000a81548160ff0219169083151502179055506107ca8161110e565b50565b6060600280546107dc90612bf5565b80601f016020809104026020016040519081016040528092919081815260200182805461080890612bf5565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b50505050509050919050565b600760009054906101000a900460ff1681565b600760009054906101000a900460ff166108ba576040517fb7b2409700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156109895773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856006546109229190612c56565b6040518463ffffffff1660e01b815260040161094093929190612d0f565b6020604051808303816000875af115801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190612d5b565b506109d0565b816005546109979190612c56565b34146109cf576040517f356680b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109ec3360008460405180602001604052806000815250611128565b5050565b6109f86112d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a3e5750610a3d85610a386112d9565b610e4d565b5b610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490612dfa565b60405180910390fd5b610a8a85858585856112e1565b5050505050565b610a99611090565b610ab58260008360405180602001604052806000815250611128565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608151835114610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90612e8c565b60405180910390fd5b6000835167ffffffffffffffff811115610b4257610b416121ba565b5b604051908082528060200260200182016040528015610b705781602001602082028036833780820191505090505b50905060005b8451811015610bed57610bbd858281518110610b9557610b94612eac565b5b6020026020010151858381518110610bb057610baf612eac565b5b60200260200101516105ac565b828281518110610bd057610bcf612eac565b5b60200260200101818152505080610be690612edb565b9050610b76565b508091505092915050565b600760019054906101000a900460ff1681565b610c13611090565b60008251905081518114610c53576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610cc157610cae848281518110610c7457610c73612eac565b5b60200260200101516000858481518110610c9157610c90612eac565b5b602002602001015160405180602001604052806000815250611128565b8080610cb990612edb565b915050610c56565b50505050565b610ccf611090565b610cd96000611603565b565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d2f610d286112d9565b83836116c9565b5050565b610d3b611090565b80600760006101000a81548160ff02191690831515021790555050565b60065481565b610d66611090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610dae90612f55565b60006040518083038185875af1925050503d8060008114610deb576040519150601f19603f3d011682016040523d82523d6000602084013e610df0565b606091505b5050905080610dfe57600080fd5b50565b610e09611090565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ee96112d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f2f5750610f2e85610f296112d9565b610e4d565b5b610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6590612dfa565b60405180910390fd5b610f7b8585858585611836565b5050505050565b610f8a611090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612fdc565b60405180910390fd5b61100381611603565b50565b61100e611090565b81600581905550806006819055505050565b60055481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6110986112d9565b73ffffffffffffffffffffffffffffffffffffffff166110b6610cf3565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390613048565b60405180910390fd5b565b8060029080519060200190611124929190611f2f565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906130da565b60405180910390fd5b60006111a26112d9565b905060006111af85611ad2565b905060006111bc85611ad2565b90506111cd83600089858589611b4c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122c91906130fa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516112aa929190613150565b60405180910390a46112c183600089858589611b54565b6112d083600089898989611b5c565b50505050505050565b600033905090565b8151835114611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c906131eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061327d565b60405180910390fd5b600061139f6112d9565b90506113af818787878787611b4c565b60005b84518110156115605760008582815181106113d0576113cf612eac565b5b6020026020010151905060008583815181106113ef576113ee612eac565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114879061330f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154591906130fa565b925050819055505050508061155990612edb565b90506113b2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115d792919061332f565b60405180910390a46115ed818787878787611b54565b6115fb818787878787611d34565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f906133d8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118299190612184565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d9061327d565b60405180910390fd5b60006118b06112d9565b905060006118bd85611ad2565b905060006118ca85611ad2565b90506118da838989858589611b4c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119689061330f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2691906130fa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611aa3929190613150565b60405180910390a4611ab9848a8a86868a611b54565b611ac7848a8a8a8a8a611b5c565b505050505050505050565b60606000600167ffffffffffffffff811115611af157611af06121ba565b5b604051908082528060200260200182016040528015611b1f5781602001602082028036833780820191505090505b5090508281600081518110611b3757611b36612eac565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611b7b8473ffffffffffffffffffffffffffffffffffffffff16611f0c565b15611d2c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611bc195949392919061344d565b6020604051808303816000875af1925050508015611bfd57506040513d601f19601f82011682018060405250810190611bfa91906134bc565b60015b611ca357611c096134f6565b806308c379a01415611c665750611c1e613518565b80611c295750611c68565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d91906123e3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a90613620565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906136b2565b60405180910390fd5b505b505050505050565b611d538473ffffffffffffffffffffffffffffffffffffffff16611f0c565b15611f04578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d999594939291906136d2565b6020604051808303816000875af1925050508015611dd557506040513d601f19601f82011682018060405250810190611dd291906134bc565b60015b611e7b57611de16134f6565b806308c379a01415611e3e5750611df6613518565b80611e015750611e40565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3591906123e3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290613620565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef9906136b2565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f3b90612bf5565b90600052602060002090601f016020900481019282611f5d5760008555611fa4565b82601f10611f7657805160ff1916838001178555611fa4565b82800160010185558215611fa4579182015b82811115611fa3578251825591602001919060010190611f88565b5b509050611fb19190611fb5565b5090565b5b80821115611fce576000816000905550600101611fb6565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061201182611fe6565b9050919050565b61202181612006565b811461202c57600080fd5b50565b60008135905061203e81612018565b92915050565b6000819050919050565b61205781612044565b811461206257600080fd5b50565b6000813590506120748161204e565b92915050565b6000806040838503121561209157612090611fdc565b5b600061209f8582860161202f565b92505060206120b085828601612065565b9150509250929050565b6120c381612044565b82525050565b60006020820190506120de60008301846120ba565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612119816120e4565b811461212457600080fd5b50565b60008135905061213681612110565b92915050565b60006020828403121561215257612151611fdc565b5b600061216084828501612127565b91505092915050565b60008115159050919050565b61217e81612169565b82525050565b60006020820190506121996000830184612175565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121f2826121a9565b810181811067ffffffffffffffff82111715612211576122106121ba565b5b80604052505050565b6000612224611fd2565b905061223082826121e9565b919050565b600067ffffffffffffffff8211156122505761224f6121ba565b5b612259826121a9565b9050602081019050919050565b82818337600083830152505050565b600061228861228384612235565b61221a565b9050828152602081018484840111156122a4576122a36121a4565b5b6122af848285612266565b509392505050565b600082601f8301126122cc576122cb61219f565b5b81356122dc848260208601612275565b91505092915050565b6000602082840312156122fb576122fa611fdc565b5b600082013567ffffffffffffffff81111561231957612318611fe1565b5b612325848285016122b7565b91505092915050565b60006020828403121561234457612343611fdc565b5b600061235284828501612065565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561239557808201518184015260208101905061237a565b838111156123a4576000848401525b50505050565b60006123b58261235b565b6123bf8185612366565b93506123cf818560208601612377565b6123d8816121a9565b840191505092915050565b600060208201905081810360008301526123fd81846123aa565b905092915050565b61240e81612169565b811461241957600080fd5b50565b60008135905061242b81612405565b92915050565b6000806040838503121561244857612447611fdc565b5b600061245685828601612065565b92505060206124678582860161241c565b9150509250929050565b600067ffffffffffffffff82111561248c5761248b6121ba565b5b602082029050602081019050919050565b600080fd5b60006124b56124b084612471565b61221a565b905080838252602082019050602084028301858111156124d8576124d761249d565b5b835b8181101561250157806124ed8882612065565b8452602084019350506020810190506124da565b5050509392505050565b600082601f8301126125205761251f61219f565b5b81356125308482602086016124a2565b91505092915050565b600067ffffffffffffffff821115612554576125536121ba565b5b61255d826121a9565b9050602081019050919050565b600061257d61257884612539565b61221a565b905082815260208101848484011115612599576125986121a4565b5b6125a4848285612266565b509392505050565b600082601f8301126125c1576125c061219f565b5b81356125d184826020860161256a565b91505092915050565b600080600080600060a086880312156125f6576125f5611fdc565b5b60006126048882890161202f565b95505060206126158882890161202f565b945050604086013567ffffffffffffffff81111561263657612635611fe1565b5b6126428882890161250b565b935050606086013567ffffffffffffffff81111561266357612662611fe1565b5b61266f8882890161250b565b925050608086013567ffffffffffffffff8111156126905761268f611fe1565b5b61269c888289016125ac565b9150509295509295909350565b60006126b482611fe6565b9050919050565b6126c4816126a9565b82525050565b60006020820190506126df60008301846126bb565b92915050565b600067ffffffffffffffff821115612700576126ff6121ba565b5b602082029050602081019050919050565b600061272461271f846126e5565b61221a565b905080838252602082019050602084028301858111156127475761274661249d565b5b835b81811015612770578061275c888261202f565b845260208401935050602081019050612749565b5050509392505050565b600082601f83011261278f5761278e61219f565b5b813561279f848260208601612711565b91505092915050565b600080604083850312156127bf576127be611fdc565b5b600083013567ffffffffffffffff8111156127dd576127dc611fe1565b5b6127e98582860161277a565b925050602083013567ffffffffffffffff81111561280a57612809611fe1565b5b6128168582860161250b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61285581612044565b82525050565b6000612867838361284c565b60208301905092915050565b6000602082019050919050565b600061288b82612820565b612895818561282b565b93506128a08361283c565b8060005b838110156128d15781516128b8888261285b565b97506128c383612873565b9250506001810190506128a4565b5085935050505092915050565b600060208201905081810360008301526128f88184612880565b905092915050565b61290981612006565b82525050565b60006020820190506129246000830184612900565b92915050565b6000806040838503121561294157612940611fdc565b5b600061294f8582860161202f565b92505060206129608582860161241c565b9150509250929050565b6000602082840312156129805761297f611fdc565b5b600061298e8482850161241c565b91505092915050565b6129a0816126a9565b81146129ab57600080fd5b50565b6000813590506129bd81612997565b92915050565b6000602082840312156129d9576129d8611fdc565b5b60006129e7848285016129ae565b91505092915050565b60008060408385031215612a0757612a06611fdc565b5b6000612a158582860161202f565b9250506020612a268582860161202f565b9150509250929050565b600080600080600060a08688031215612a4c57612a4b611fdc565b5b6000612a5a8882890161202f565b9550506020612a6b8882890161202f565b9450506040612a7c88828901612065565b9350506060612a8d88828901612065565b925050608086013567ffffffffffffffff811115612aae57612aad611fe1565b5b612aba888289016125ac565b9150509295509295909350565b600060208284031215612add57612adc611fdc565b5b6000612aeb8482850161202f565b91505092915050565b60008060408385031215612b0b57612b0a611fdc565b5b6000612b1985828601612065565b9250506020612b2a85828601612065565b9150509250929050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612b90602a83612366565b9150612b9b82612b34565b604082019050919050565b60006020820190508181036000830152612bbf81612b83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c0d57607f821691505b60208210811415612c2157612c20612bc6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c6182612044565b9150612c6c83612044565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ca557612ca4612c27565b5b828202905092915050565b6000819050919050565b6000612cd5612cd0612ccb84611fe6565b612cb0565b611fe6565b9050919050565b6000612ce782612cba565b9050919050565b6000612cf982612cdc565b9050919050565b612d0981612cee565b82525050565b6000606082019050612d246000830186612900565b612d316020830185612d00565b612d3e60408301846120ba565b949350505050565b600081519050612d5581612405565b92915050565b600060208284031215612d7157612d70611fdc565b5b6000612d7f84828501612d46565b91505092915050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612de4602e83612366565b9150612def82612d88565b604082019050919050565b60006020820190508181036000830152612e1381612dd7565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612e76602983612366565b9150612e8182612e1a565b604082019050919050565b60006020820190508181036000830152612ea581612e69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612ee682612044565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f1957612f18612c27565b5b600182019050919050565b600081905092915050565b50565b6000612f3f600083612f24565b9150612f4a82612f2f565b600082019050919050565b6000612f6082612f32565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612fc6602683612366565b9150612fd182612f6a565b604082019050919050565b60006020820190508181036000830152612ff581612fb9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613032602083612366565b915061303d82612ffc565b602082019050919050565b6000602082019050818103600083015261306181613025565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006130c4602183612366565b91506130cf82613068565b604082019050919050565b600060208201905081810360008301526130f3816130b7565b9050919050565b600061310582612044565b915061311083612044565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561314557613144612c27565b5b828201905092915050565b600060408201905061316560008301856120ba565b61317260208301846120ba565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006131d5602883612366565b91506131e082613179565b604082019050919050565b60006020820190508181036000830152613204816131c8565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613267602583612366565b91506132728261320b565b604082019050919050565b600060208201905081810360008301526132968161325a565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006132f9602a83612366565b91506133048261329d565b604082019050919050565b60006020820190508181036000830152613328816132ec565b9050919050565b600060408201905081810360008301526133498185612880565b9050818103602083015261335d8184612880565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006133c2602983612366565b91506133cd82613366565b604082019050919050565b600060208201905081810360008301526133f1816133b5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061341f826133f8565b6134298185613403565b9350613439818560208601612377565b613442816121a9565b840191505092915050565b600060a0820190506134626000830188612900565b61346f6020830187612900565b61347c60408301866120ba565b61348960608301856120ba565b818103608083015261349b8184613414565b90509695505050505050565b6000815190506134b681612110565b92915050565b6000602082840312156134d2576134d1611fdc565b5b60006134e0848285016134a7565b91505092915050565b60008160e01c9050919050565b600060033d11156135155760046000803e6135126000516134e9565b90505b90565b600060443d1015613528576135ab565b613530611fd2565b60043d036004823e80513d602482011167ffffffffffffffff821117156135585750506135ab565b808201805167ffffffffffffffff81111561357657505050506135ab565b80602083010160043d0385018111156135935750505050506135ab565b6135a2826020018501866121e9565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061360a603483612366565b9150613615826135ae565b604082019050919050565b60006020820190508181036000830152613639816135fd565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061369c602883612366565b91506136a782613640565b604082019050919050565b600060208201905081810360008301526136cb8161368f565b9050919050565b600060a0820190506136e76000830188612900565b6136f46020830187612900565b81810360408301526137068186612880565b9050818103606083015261371a8185612880565b9050818103608083015261372e8184613414565b9050969550505050505056fea26469706673582212208153d2dff7062ff9efc5e6de829872c1d70374d3678f105c9349eb62e0940f1b64736f6c634300080a0033000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000c9f2c9cd04674edea40000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000004334573e3178912190564721da01793670df129000000000000000000000000000000000000000000000000000000000000004b68747470733a2f2f63646e2e62756c6c72756e2e6c6966652f636f6e7472616374732f7374616b696e67626f6f737465722f6d657461646174612f62726c2d626f6f737465722e6a736f6e000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101655760003560e01c8063715018a6116100d1578063e086e5ec1161008a578063f242432a11610064578063f242432a14610506578063f2fde38b1461052f578063f7d9757714610558578063ff186b2e1461058157610165565b8063e086e5ec14610489578063e74b981b146104a0578063e985e9c5146104c957610165565b8063715018a61461039f57806389a30271146103b65780638da5cb5b146103e1578063a22cb4651461040c578063acec338a14610435578063dacee3471461045e57610165565b80632eb2c2d6116101235780632eb2c2d61461029157806340c10f19146102ba57806346904840146102e35780634e1273f41461030e57806354214f691461034b578063672434821461037657610165565b8062fdd58e1461016a57806301ffc9a7146101a757806302fe5305146101e45780630e89341c1461020d57806322f3e2d41461024a5780632d1c92a114610275575b600080fd5b34801561017657600080fd5b50610191600480360381019061018c919061207a565b6105ac565b60405161019e91906120c9565b60405180910390f35b3480156101b357600080fd5b506101ce60048036038101906101c9919061213c565b610675565b6040516101db9190612184565b60405180910390f35b3480156101f057600080fd5b5061020b600480360381019061020691906122e5565b610757565b005b34801561021957600080fd5b50610234600480360381019061022f919061232e565b6107cd565b60405161024191906123e3565b60405180910390f35b34801561025657600080fd5b5061025f610861565b60405161026c9190612184565b60405180910390f35b61028f600480360381019061028a9190612431565b610874565b005b34801561029d57600080fd5b506102b860048036038101906102b391906125da565b6109f0565b005b3480156102c657600080fd5b506102e160048036038101906102dc919061207a565b610a91565b005b3480156102ef57600080fd5b506102f8610ab9565b60405161030591906126ca565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906127a8565b610adf565b60405161034291906128de565b60405180910390f35b34801561035757600080fd5b50610360610bf8565b60405161036d9190612184565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906127a8565b610c0b565b005b3480156103ab57600080fd5b506103b4610cc7565b005b3480156103c257600080fd5b506103cb610cdb565b6040516103d8919061290f565b60405180910390f35b3480156103ed57600080fd5b506103f6610cf3565b604051610403919061290f565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e919061292a565b610d1d565b005b34801561044157600080fd5b5061045c6004803603810190610457919061296a565b610d33565b005b34801561046a57600080fd5b50610473610d58565b60405161048091906120c9565b60405180910390f35b34801561049557600080fd5b5061049e610d5e565b005b3480156104ac57600080fd5b506104c760048036038101906104c291906129c3565b610e01565b005b3480156104d557600080fd5b506104f060048036038101906104eb91906129f0565b610e4d565b6040516104fd9190612184565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190612a30565b610ee1565b005b34801561053b57600080fd5b5061055660048036038101906105519190612ac7565b610f82565b005b34801561056457600080fd5b5061057f600480360381019061057a9190612af4565b611006565b005b34801561058d57600080fd5b50610596611020565b6040516105a391906120c9565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490612ba6565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610750575061074f82611026565b5b9050919050565b61075f611090565b600760019054906101000a900460ff16156107a6576040517f82ccdaca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600760016101000a81548160ff0219169083151502179055506107ca8161110e565b50565b6060600280546107dc90612bf5565b80601f016020809104026020016040519081016040528092919081815260200182805461080890612bf5565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b50505050509050919050565b600760009054906101000a900460ff1681565b600760009054906101000a900460ff166108ba576040517fb7b2409700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156109895773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856006546109229190612c56565b6040518463ffffffff1660e01b815260040161094093929190612d0f565b6020604051808303816000875af115801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190612d5b565b506109d0565b816005546109979190612c56565b34146109cf576040517f356680b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109ec3360008460405180602001604052806000815250611128565b5050565b6109f86112d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a3e5750610a3d85610a386112d9565b610e4d565b5b610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490612dfa565b60405180910390fd5b610a8a85858585856112e1565b5050505050565b610a99611090565b610ab58260008360405180602001604052806000815250611128565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608151835114610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90612e8c565b60405180910390fd5b6000835167ffffffffffffffff811115610b4257610b416121ba565b5b604051908082528060200260200182016040528015610b705781602001602082028036833780820191505090505b50905060005b8451811015610bed57610bbd858281518110610b9557610b94612eac565b5b6020026020010151858381518110610bb057610baf612eac565b5b60200260200101516105ac565b828281518110610bd057610bcf612eac565b5b60200260200101818152505080610be690612edb565b9050610b76565b508091505092915050565b600760019054906101000a900460ff1681565b610c13611090565b60008251905081518114610c53576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610cc157610cae848281518110610c7457610c73612eac565b5b60200260200101516000858481518110610c9157610c90612eac565b5b602002602001015160405180602001604052806000815250611128565b8080610cb990612edb565b915050610c56565b50505050565b610ccf611090565b610cd96000611603565b565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d2f610d286112d9565b83836116c9565b5050565b610d3b611090565b80600760006101000a81548160ff02191690831515021790555050565b60065481565b610d66611090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610dae90612f55565b60006040518083038185875af1925050503d8060008114610deb576040519150601f19603f3d011682016040523d82523d6000602084013e610df0565b606091505b5050905080610dfe57600080fd5b50565b610e09611090565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ee96112d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f2f5750610f2e85610f296112d9565b610e4d565b5b610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6590612dfa565b60405180910390fd5b610f7b8585858585611836565b5050505050565b610f8a611090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612fdc565b60405180910390fd5b61100381611603565b50565b61100e611090565b81600581905550806006819055505050565b60055481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6110986112d9565b73ffffffffffffffffffffffffffffffffffffffff166110b6610cf3565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390613048565b60405180910390fd5b565b8060029080519060200190611124929190611f2f565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906130da565b60405180910390fd5b60006111a26112d9565b905060006111af85611ad2565b905060006111bc85611ad2565b90506111cd83600089858589611b4c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122c91906130fa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516112aa929190613150565b60405180910390a46112c183600089858589611b54565b6112d083600089898989611b5c565b50505050505050565b600033905090565b8151835114611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c906131eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061327d565b60405180910390fd5b600061139f6112d9565b90506113af818787878787611b4c565b60005b84518110156115605760008582815181106113d0576113cf612eac565b5b6020026020010151905060008583815181106113ef576113ee612eac565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114879061330f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154591906130fa565b925050819055505050508061155990612edb565b90506113b2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115d792919061332f565b60405180910390a46115ed818787878787611b54565b6115fb818787878787611d34565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f906133d8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118299190612184565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d9061327d565b60405180910390fd5b60006118b06112d9565b905060006118bd85611ad2565b905060006118ca85611ad2565b90506118da838989858589611b4c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119689061330f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2691906130fa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611aa3929190613150565b60405180910390a4611ab9848a8a86868a611b54565b611ac7848a8a8a8a8a611b5c565b505050505050505050565b60606000600167ffffffffffffffff811115611af157611af06121ba565b5b604051908082528060200260200182016040528015611b1f5781602001602082028036833780820191505090505b5090508281600081518110611b3757611b36612eac565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611b7b8473ffffffffffffffffffffffffffffffffffffffff16611f0c565b15611d2c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611bc195949392919061344d565b6020604051808303816000875af1925050508015611bfd57506040513d601f19601f82011682018060405250810190611bfa91906134bc565b60015b611ca357611c096134f6565b806308c379a01415611c665750611c1e613518565b80611c295750611c68565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d91906123e3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a90613620565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906136b2565b60405180910390fd5b505b505050505050565b611d538473ffffffffffffffffffffffffffffffffffffffff16611f0c565b15611f04578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d999594939291906136d2565b6020604051808303816000875af1925050508015611dd557506040513d601f19601f82011682018060405250810190611dd291906134bc565b60015b611e7b57611de16134f6565b806308c379a01415611e3e5750611df6613518565b80611e015750611e40565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3591906123e3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290613620565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef9906136b2565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f3b90612bf5565b90600052602060002090601f016020900481019282611f5d5760008555611fa4565b82601f10611f7657805160ff1916838001178555611fa4565b82800160010185558215611fa4579182015b82811115611fa3578251825591602001919060010190611f88565b5b509050611fb19190611fb5565b5090565b5b80821115611fce576000816000905550600101611fb6565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061201182611fe6565b9050919050565b61202181612006565b811461202c57600080fd5b50565b60008135905061203e81612018565b92915050565b6000819050919050565b61205781612044565b811461206257600080fd5b50565b6000813590506120748161204e565b92915050565b6000806040838503121561209157612090611fdc565b5b600061209f8582860161202f565b92505060206120b085828601612065565b9150509250929050565b6120c381612044565b82525050565b60006020820190506120de60008301846120ba565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612119816120e4565b811461212457600080fd5b50565b60008135905061213681612110565b92915050565b60006020828403121561215257612151611fdc565b5b600061216084828501612127565b91505092915050565b60008115159050919050565b61217e81612169565b82525050565b60006020820190506121996000830184612175565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121f2826121a9565b810181811067ffffffffffffffff82111715612211576122106121ba565b5b80604052505050565b6000612224611fd2565b905061223082826121e9565b919050565b600067ffffffffffffffff8211156122505761224f6121ba565b5b612259826121a9565b9050602081019050919050565b82818337600083830152505050565b600061228861228384612235565b61221a565b9050828152602081018484840111156122a4576122a36121a4565b5b6122af848285612266565b509392505050565b600082601f8301126122cc576122cb61219f565b5b81356122dc848260208601612275565b91505092915050565b6000602082840312156122fb576122fa611fdc565b5b600082013567ffffffffffffffff81111561231957612318611fe1565b5b612325848285016122b7565b91505092915050565b60006020828403121561234457612343611fdc565b5b600061235284828501612065565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561239557808201518184015260208101905061237a565b838111156123a4576000848401525b50505050565b60006123b58261235b565b6123bf8185612366565b93506123cf818560208601612377565b6123d8816121a9565b840191505092915050565b600060208201905081810360008301526123fd81846123aa565b905092915050565b61240e81612169565b811461241957600080fd5b50565b60008135905061242b81612405565b92915050565b6000806040838503121561244857612447611fdc565b5b600061245685828601612065565b92505060206124678582860161241c565b9150509250929050565b600067ffffffffffffffff82111561248c5761248b6121ba565b5b602082029050602081019050919050565b600080fd5b60006124b56124b084612471565b61221a565b905080838252602082019050602084028301858111156124d8576124d761249d565b5b835b8181101561250157806124ed8882612065565b8452602084019350506020810190506124da565b5050509392505050565b600082601f8301126125205761251f61219f565b5b81356125308482602086016124a2565b91505092915050565b600067ffffffffffffffff821115612554576125536121ba565b5b61255d826121a9565b9050602081019050919050565b600061257d61257884612539565b61221a565b905082815260208101848484011115612599576125986121a4565b5b6125a4848285612266565b509392505050565b600082601f8301126125c1576125c061219f565b5b81356125d184826020860161256a565b91505092915050565b600080600080600060a086880312156125f6576125f5611fdc565b5b60006126048882890161202f565b95505060206126158882890161202f565b945050604086013567ffffffffffffffff81111561263657612635611fe1565b5b6126428882890161250b565b935050606086013567ffffffffffffffff81111561266357612662611fe1565b5b61266f8882890161250b565b925050608086013567ffffffffffffffff8111156126905761268f611fe1565b5b61269c888289016125ac565b9150509295509295909350565b60006126b482611fe6565b9050919050565b6126c4816126a9565b82525050565b60006020820190506126df60008301846126bb565b92915050565b600067ffffffffffffffff821115612700576126ff6121ba565b5b602082029050602081019050919050565b600061272461271f846126e5565b61221a565b905080838252602082019050602084028301858111156127475761274661249d565b5b835b81811015612770578061275c888261202f565b845260208401935050602081019050612749565b5050509392505050565b600082601f83011261278f5761278e61219f565b5b813561279f848260208601612711565b91505092915050565b600080604083850312156127bf576127be611fdc565b5b600083013567ffffffffffffffff8111156127dd576127dc611fe1565b5b6127e98582860161277a565b925050602083013567ffffffffffffffff81111561280a57612809611fe1565b5b6128168582860161250b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61285581612044565b82525050565b6000612867838361284c565b60208301905092915050565b6000602082019050919050565b600061288b82612820565b612895818561282b565b93506128a08361283c565b8060005b838110156128d15781516128b8888261285b565b97506128c383612873565b9250506001810190506128a4565b5085935050505092915050565b600060208201905081810360008301526128f88184612880565b905092915050565b61290981612006565b82525050565b60006020820190506129246000830184612900565b92915050565b6000806040838503121561294157612940611fdc565b5b600061294f8582860161202f565b92505060206129608582860161241c565b9150509250929050565b6000602082840312156129805761297f611fdc565b5b600061298e8482850161241c565b91505092915050565b6129a0816126a9565b81146129ab57600080fd5b50565b6000813590506129bd81612997565b92915050565b6000602082840312156129d9576129d8611fdc565b5b60006129e7848285016129ae565b91505092915050565b60008060408385031215612a0757612a06611fdc565b5b6000612a158582860161202f565b9250506020612a268582860161202f565b9150509250929050565b600080600080600060a08688031215612a4c57612a4b611fdc565b5b6000612a5a8882890161202f565b9550506020612a6b8882890161202f565b9450506040612a7c88828901612065565b9350506060612a8d88828901612065565b925050608086013567ffffffffffffffff811115612aae57612aad611fe1565b5b612aba888289016125ac565b9150509295509295909350565b600060208284031215612add57612adc611fdc565b5b6000612aeb8482850161202f565b91505092915050565b60008060408385031215612b0b57612b0a611fdc565b5b6000612b1985828601612065565b9250506020612b2a85828601612065565b9150509250929050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612b90602a83612366565b9150612b9b82612b34565b604082019050919050565b60006020820190508181036000830152612bbf81612b83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c0d57607f821691505b60208210811415612c2157612c20612bc6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c6182612044565b9150612c6c83612044565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ca557612ca4612c27565b5b828202905092915050565b6000819050919050565b6000612cd5612cd0612ccb84611fe6565b612cb0565b611fe6565b9050919050565b6000612ce782612cba565b9050919050565b6000612cf982612cdc565b9050919050565b612d0981612cee565b82525050565b6000606082019050612d246000830186612900565b612d316020830185612d00565b612d3e60408301846120ba565b949350505050565b600081519050612d5581612405565b92915050565b600060208284031215612d7157612d70611fdc565b5b6000612d7f84828501612d46565b91505092915050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612de4602e83612366565b9150612def82612d88565b604082019050919050565b60006020820190508181036000830152612e1381612dd7565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612e76602983612366565b9150612e8182612e1a565b604082019050919050565b60006020820190508181036000830152612ea581612e69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612ee682612044565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f1957612f18612c27565b5b600182019050919050565b600081905092915050565b50565b6000612f3f600083612f24565b9150612f4a82612f2f565b600082019050919050565b6000612f6082612f32565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612fc6602683612366565b9150612fd182612f6a565b604082019050919050565b60006020820190508181036000830152612ff581612fb9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613032602083612366565b915061303d82612ffc565b602082019050919050565b6000602082019050818103600083015261306181613025565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006130c4602183612366565b91506130cf82613068565b604082019050919050565b600060208201905081810360008301526130f3816130b7565b9050919050565b600061310582612044565b915061311083612044565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561314557613144612c27565b5b828201905092915050565b600060408201905061316560008301856120ba565b61317260208301846120ba565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006131d5602883612366565b91506131e082613179565b604082019050919050565b60006020820190508181036000830152613204816131c8565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613267602583612366565b91506132728261320b565b604082019050919050565b600060208201905081810360008301526132968161325a565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006132f9602a83612366565b91506133048261329d565b604082019050919050565b60006020820190508181036000830152613328816132ec565b9050919050565b600060408201905081810360008301526133498185612880565b9050818103602083015261335d8184612880565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006133c2602983612366565b91506133cd82613366565b604082019050919050565b600060208201905081810360008301526133f1816133b5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061341f826133f8565b6134298185613403565b9350613439818560208601612377565b613442816121a9565b840191505092915050565b600060a0820190506134626000830188612900565b61346f6020830187612900565b61347c60408301866120ba565b61348960608301856120ba565b818103608083015261349b8184613414565b90509695505050505050565b6000815190506134b681612110565b92915050565b6000602082840312156134d2576134d1611fdc565b5b60006134e0848285016134a7565b91505092915050565b60008160e01c9050919050565b600060033d11156135155760046000803e6135126000516134e9565b90505b90565b600060443d1015613528576135ab565b613530611fd2565b60043d036004823e80513d602482011167ffffffffffffffff821117156135585750506135ab565b808201805167ffffffffffffffff81111561357657505050506135ab565b80602083010160043d0385018111156135935750505050506135ab565b6135a2826020018501866121e9565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061360a603483612366565b9150613615826135ae565b604082019050919050565b60006020820190508181036000830152613639816135fd565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061369c602883612366565b91506136a782613640565b604082019050919050565b600060208201905081810360008301526136cb8161368f565b9050919050565b600060a0820190506136e76000830188612900565b6136f46020830187612900565b81810360408301526137068186612880565b9050818103606083015261371a8185612880565b9050818103608083015261372e8184613414565b9050969550505050505056fea26469706673582212208153d2dff7062ff9efc5e6de829872c1d70374d3678f105c9349eb62e0940f1b64736f6c634300080a0033

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

000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000c9f2c9cd04674edea40000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000004334573e3178912190564721da01793670df129000000000000000000000000000000000000000000000000000000000000004b68747470733a2f2f63646e2e62756c6c72756e2e6c6966652f636f6e7472616374732f7374616b696e67626f6f737465722f6d657461646174612f62726c2d626f6f737465722e6a736f6e000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _ethPrice (uint256): 30000000000000000
Arg [1] : _usdcPrice (uint256): 1000000000000000000000000000000
Arg [2] : uri (string): https://cdn.bullrun.life/contracts/stakingbooster/metadata/brl-booster.json
Arg [3] : _feeRecipient (address): 0x04334573E3178912190564721DA01793670DF129

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [1] : 000000000000000000000000000000000000000c9f2c9cd04674edea40000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000004334573e3178912190564721da01793670df129
Arg [4] : 000000000000000000000000000000000000000000000000000000000000004b
Arg [5] : 68747470733a2f2f63646e2e62756c6c72756e2e6c6966652f636f6e74726163
Arg [6] : 74732f7374616b696e67626f6f737465722f6d657461646174612f62726c2d62
Arg [7] : 6f6f737465722e6a736f6e000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43095:2157:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24499:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23522:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44676:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24243:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43336:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43627:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26442:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44041:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43231:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24895:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43363:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44153:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2776:103;;;;;;;;;;;;;:::i;:::-;;43151:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25492:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45160:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43303:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44478:190;;;;;;;;;;;;;:::i;:::-;;45030:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25719:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25959:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3034:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44874:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43273:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24499:230;24585:7;24632:1;24613:21;;:7;:21;;;;24605:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24699:9;:13;24709:2;24699:13;;;;;;;;;;;:22;24713:7;24699:22;;;;;;;;;;;;;;;;24692:29;;24499:230;;;;:::o;23522:310::-;23624:4;23676:26;23661:41;;;:11;:41;;;;:110;;;;23734:37;23719:52;;;:11;:52;;;;23661:110;:163;;;;23788:36;23812:11;23788:23;:36::i;:::-;23661:163;23641:183;;23522:310;;;:::o;44676:190::-;2014:13;:11;:13::i;:::-;44746:10:::1;;;;;;;;;;;44742:65;;;44780:15;;;;;;;;;;;;;;44742:65;44830:4;44817:10;;:17;;;;;;;;;;;;;;;;;;44845:13;44853:4;44845:7;:13::i;:::-;44676:190:::0;:::o;24243:105::-;24303:13;24336:4;24329:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24243:105;;;:::o;43336:20::-;;;;;;;;;;;;;:::o;43627:406::-;43707:8;;;;;;;;;;;43702:64;;43739:15;;;;;;;;;;;;;;43702:64;43780:6;43776:205;;;43182:42;43803:25;;;43829:10;43841:12;;;;;;;;;;;43867:6;43855:9;;:18;;;;:::i;:::-;43803:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43776:205;;;43920:6;43909:8;;:17;;;;:::i;:::-;43896:9;:30;43892:89;;43950:19;;;;;;;;;;;;;;43892:89;43776:205;43991:32;43997:10;44009:1;44012:6;43991:32;;;;;;;;;;;;:5;:32::i;:::-;43627:406;;:::o;26442:438::-;26683:12;:10;:12::i;:::-;26675:20;;:4;:20;;;:60;;;;26699:36;26716:4;26722:12;:10;:12::i;:::-;26699:16;:36::i;:::-;26675:60;26653:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26820:52;26843:4;26849:2;26853:3;26858:7;26867:4;26820:22;:52::i;:::-;26442:438;;;;;:::o;44041:104::-;2014:13;:11;:13::i;:::-;44113:24:::1;44119:2;44123:1;44126:6;44113:24;;;;;;;;;;;::::0;:5:::1;:24::i;:::-;44041:104:::0;;:::o;43231:35::-;;;;;;;;;;;;;:::o;24895:524::-;25051:16;25112:3;:10;25093:8;:15;:29;25085:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25181:30;25228:8;:15;25214:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25181:63;;25262:9;25257:122;25281:8;:15;25277:1;:19;25257:122;;;25337:30;25347:8;25356:1;25347:11;;;;;;;;:::i;:::-;;;;;;;;25360:3;25364:1;25360:6;;;;;;;;:::i;:::-;;;;;;;;25337:9;:30::i;:::-;25318:13;25332:1;25318:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25298:3;;;;:::i;:::-;;;25257:122;;;;25398:13;25391:20;;;24895:524;;;;:::o;43363:22::-;;;;;;;;;;;;;:::o;44153:317::-;2014:13;:11;:13::i;:::-;44246:11:::1;44260:2;:9;44246:23;;44291:6;:13;44284:3;:20;44280:82;;44328:22;;;;;;;;;;;;;;44280:82;44377:9;44372:91;44396:3;44392:1;:7;44372:91;;;44421:30;44427:2;44430:1;44427:5;;;;;;;;:::i;:::-;;;;;;;;44434:1;44437:6;44444:1;44437:9;;;;;;;;:::i;:::-;;;;;;;;44421:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;44401:3;;;;;:::i;:::-;;;;44372:91;;;;44235:235;44153:317:::0;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;43151:73::-;43182:42;43151:73;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;25492:155::-;25587:52;25606:12;:10;:12::i;:::-;25620:8;25630;25587:18;:52::i;:::-;25492:155;;:::o;45160:87::-;2014:13;:11;:13::i;:::-;45233:6:::1;45222:8;;:17;;;;;;;;;;;;;;;;;;45160:87:::0;:::o;43303:24::-;;;;:::o;44478:190::-;2014:13;:11;:13::i;:::-;44532:12:::1;44550;;;;;;;;;;;:17;;44575:21;44550:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44531:70;;;44617:7;44612:49;;44641:8;::::0;::::1;44612:49;44520:148;44478:190::o:0;45030:122::-;2014:13;:11;:13::i;:::-;45131::::1;45116:12;;:28;;;;;;;;;;;;;;;;;;45030:122:::0;:::o;25719:168::-;25818:4;25842:18;:27;25861:7;25842:27;;;;;;;;;;;;;;;:37;25870:8;25842:37;;;;;;;;;;;;;;;;;;;;;;;;;25835:44;;25719:168;;;;:::o;25959:406::-;26175:12;:10;:12::i;:::-;26167:20;;:4;:20;;;:60;;;;26191:36;26208:4;26214:12;:10;:12::i;:::-;26191:16;:36::i;:::-;26167:60;26145:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26312:45;26330:4;26336:2;26340;26344:6;26352:4;26312:17;:45::i;:::-;25959:406;;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;;;3115:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;44874:148::-;2014:13;:11;:13::i;:::-;44972:9:::1;44961:8;:20;;;;45004:10;44992:9;:22;;;;44874:148:::0;;:::o;43273:23::-;;;;:::o;14803:157::-;14888:4;14927:25;14912:40;;;:11;:40;;;;14905:47;;14803:157;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;30666:88::-;30740:6;30733:4;:13;;;;;;;;;;;;:::i;:::-;;30666:88;:::o;31140:729::-;31307:1;31293:16;;:2;:16;;;;31285:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31360:16;31379:12;:10;:12::i;:::-;31360:31;;31402:20;31425:21;31443:2;31425:17;:21::i;:::-;31402:44;;31457:24;31484:25;31502:6;31484:17;:25::i;:::-;31457:52;;31522:66;31543:8;31561:1;31565:2;31569:3;31574:7;31583:4;31522:20;:66::i;:::-;31622:6;31601:9;:13;31611:2;31601:13;;;;;;;;;;;:17;31615:2;31601:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31681:2;31644:52;;31677:1;31644:52;;31659:8;31644:52;;;31685:2;31689:6;31644:52;;;;;;;:::i;:::-;;;;;;;;31709:65;31729:8;31747:1;31751:2;31755:3;31760:7;31769:4;31709:19;:65::i;:::-;31787:74;31818:8;31836:1;31840:2;31844;31848:6;31856:4;31787:30;:74::i;:::-;31274:595;;;31140:729;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;28676:1146::-;28903:7;:14;28889:3;:10;:28;28881:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28995:1;28981:16;;:2;:16;;;;28973:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29052:16;29071:12;:10;:12::i;:::-;29052:31;;29096:60;29117:8;29127:4;29133:2;29137:3;29142:7;29151:4;29096:20;:60::i;:::-;29174:9;29169:421;29193:3;:10;29189:1;:14;29169:421;;;29225:10;29238:3;29242:1;29238:6;;;;;;;;:::i;:::-;;;;;;;;29225:19;;29259:14;29276:7;29284:1;29276:10;;;;;;;;:::i;:::-;;;;;;;;29259:27;;29303:19;29325:9;:13;29335:2;29325:13;;;;;;;;;;;:19;29339:4;29325:19;;;;;;;;;;;;;;;;29303:41;;29382:6;29367:11;:21;;29359:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29515:6;29501:11;:20;29479:9;:13;29489:2;29479:13;;;;;;;;;;;:19;29493:4;29479:19;;;;;;;;;;;;;;;:42;;;;29572:6;29551:9;:13;29561:2;29551:13;;;;;;;;;;;:17;29565:2;29551:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29210:380;;;29205:3;;;;:::i;:::-;;;29169:421;;;;29637:2;29607:47;;29631:4;29607:47;;29621:8;29607:47;;;29641:3;29646:7;29607:47;;;;;;;:::i;:::-;;;;;;;;29667:59;29687:8;29697:4;29703:2;29707:3;29712:7;29721:4;29667:19;:59::i;:::-;29739:75;29775:8;29785:4;29791:2;29795:3;29800:7;29809:4;29739:35;:75::i;:::-;28870:952;28676:1146;;;;;:::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;35553:331::-;35708:8;35699:17;;:5;:17;;;;35691:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35811:8;35773:18;:25;35792:5;35773:25;;;;;;;;;;;;;;;:35;35799:8;35773:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35857:8;35835:41;;35850:5;35835:41;;;35867:8;35835:41;;;;;;:::i;:::-;;;;;;;;35553:331;;;:::o;27344:974::-;27546:1;27532:16;;:2;:16;;;;27524:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27603:16;27622:12;:10;:12::i;:::-;27603:31;;27645:20;27668:21;27686:2;27668:17;:21::i;:::-;27645:44;;27700:24;27727:25;27745:6;27727:17;:25::i;:::-;27700:52;;27765:60;27786:8;27796:4;27802:2;27806:3;27811:7;27820:4;27765:20;:60::i;:::-;27838:19;27860:9;:13;27870:2;27860:13;;;;;;;;;;;:19;27874:4;27860:19;;;;;;;;;;;;;;;;27838:41;;27913:6;27898:11;:21;;27890:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28038:6;28024:11;:20;28002:9;:13;28012:2;28002:13;;;;;;;;;;;:19;28016:4;28002:19;;;;;;;;;;;;;;;:42;;;;28087:6;28066:9;:13;28076:2;28066:13;;;;;;;;;;;:17;28080:2;28066:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28142:2;28111:46;;28136:4;28111:46;;28126:8;28111:46;;;28146:2;28150:6;28111:46;;;;;;;:::i;:::-;;;;;;;;28170:59;28190:8;28200:4;28206:2;28210:3;28215:7;28224:4;28170:19;:59::i;:::-;28242:68;28273:8;28283:4;28289:2;28293;28297:6;28305:4;28242:30;:68::i;:::-;27513:805;;;;27344:974;;;;;:::o;39819:198::-;39885:16;39914:22;39953:1;39939:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39914:41;;39977:7;39966:5;39972:1;39966:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40004:5;39997:12;;;39819:198;;;:::o;36842:221::-;;;;;;;:::o;38018:220::-;;;;;;;:::o;38246:744::-;38461:15;:2;:13;;;:15::i;:::-;38457:526;;;38514:2;38497:38;;;38536:8;38546:4;38552:2;38556:6;38564:4;38497:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38493:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38845:6;38838:14;;;;;;;;;;;:::i;:::-;;;;;;;;38493:479;;;38894:62;;;;;;;;;;:::i;:::-;;;;;;;;38493:479;38631:43;;;38619:55;;;:8;:55;;;;38615:154;;38699:50;;;;;;;;;;:::i;:::-;;;;;;;;38615:154;38570:214;38457:526;38246:744;;;;;;:::o;38998:813::-;39238:15;:2;:13;;;:15::i;:::-;39234:570;;;39291:2;39274:43;;;39318:8;39328:4;39334:3;39339:7;39348:4;39274:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39270:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39666:6;39659:14;;;;;;;;;;;:::i;:::-;;;;;;;;39270:523;;;39715:62;;;;;;;;;;:::i;:::-;;;;;;;;39270:523;39447:48;;;39435:60;;;:8;:60;;;;39431:159;;39520:50;;;;;;;;;;:::i;:::-;;;;;;;;39431:159;39354:251;39234:570;38998:813;;;;;;:::o;4826:326::-;4886:4;5143:1;5121:7;:19;;;:23;5114:30;;4826:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:99::-;6329:6;6363:5;6357:12;6347:22;;6277:99;;;:::o;6382:169::-;6466:11;6500:6;6495:3;6488:19;6540:4;6535:3;6531:14;6516:29;;6382:169;;;;:::o;6557:307::-;6625:1;6635:113;6649:6;6646:1;6643:13;6635:113;;;6734:1;6729:3;6725:11;6719:18;6715:1;6710:3;6706:11;6699:39;6671:2;6668:1;6664:10;6659:15;;6635:113;;;6766:6;6763:1;6760:13;6757:101;;;6846:1;6837:6;6832:3;6828:16;6821:27;6757:101;6606:258;6557:307;;;:::o;6870:364::-;6958:3;6986:39;7019:5;6986:39;:::i;:::-;7041:71;7105:6;7100:3;7041:71;:::i;:::-;7034:78;;7121:52;7166:6;7161:3;7154:4;7147:5;7143:16;7121:52;:::i;:::-;7198:29;7220:6;7198:29;:::i;:::-;7193:3;7189:39;7182:46;;6962:272;6870:364;;;;:::o;7240:313::-;7353:4;7391:2;7380:9;7376:18;7368:26;;7440:9;7434:4;7430:20;7426:1;7415:9;7411:17;7404:47;7468:78;7541:4;7532:6;7468:78;:::i;:::-;7460:86;;7240:313;;;;:::o;7559:116::-;7629:21;7644:5;7629:21;:::i;:::-;7622:5;7619:32;7609:60;;7665:1;7662;7655:12;7609:60;7559:116;:::o;7681:133::-;7724:5;7762:6;7749:20;7740:29;;7778:30;7802:5;7778:30;:::i;:::-;7681:133;;;;:::o;7820:468::-;7885:6;7893;7942:2;7930:9;7921:7;7917:23;7913:32;7910:119;;;7948:79;;:::i;:::-;7910:119;8068:1;8093:53;8138:7;8129:6;8118:9;8114:22;8093:53;:::i;:::-;8083:63;;8039:117;8195:2;8221:50;8263:7;8254:6;8243:9;8239:22;8221:50;:::i;:::-;8211:60;;8166:115;7820:468;;;;;:::o;8294:311::-;8371:4;8461:18;8453:6;8450:30;8447:56;;;8483:18;;:::i;:::-;8447:56;8533:4;8525:6;8521:17;8513:25;;8593:4;8587;8583:15;8575:23;;8294:311;;;:::o;8611:117::-;8720:1;8717;8710:12;8751:710;8847:5;8872:81;8888:64;8945:6;8888:64;:::i;:::-;8872:81;:::i;:::-;8863:90;;8973:5;9002:6;8995:5;8988:21;9036:4;9029:5;9025:16;9018:23;;9089:4;9081:6;9077:17;9069:6;9065:30;9118:3;9110:6;9107:15;9104:122;;;9137:79;;:::i;:::-;9104:122;9252:6;9235:220;9269:6;9264:3;9261:15;9235:220;;;9344:3;9373:37;9406:3;9394:10;9373:37;:::i;:::-;9368:3;9361:50;9440:4;9435:3;9431:14;9424:21;;9311:144;9295:4;9290:3;9286:14;9279:21;;9235:220;;;9239:21;8853:608;;8751:710;;;;;:::o;9484:370::-;9555:5;9604:3;9597:4;9589:6;9585:17;9581:27;9571:122;;9612:79;;:::i;:::-;9571:122;9729:6;9716:20;9754:94;9844:3;9836:6;9829:4;9821:6;9817:17;9754:94;:::i;:::-;9745:103;;9561:293;9484:370;;;;:::o;9860:307::-;9921:4;10011:18;10003:6;10000:30;9997:56;;;10033:18;;:::i;:::-;9997:56;10071:29;10093:6;10071:29;:::i;:::-;10063:37;;10155:4;10149;10145:15;10137:23;;9860:307;;;:::o;10173:410::-;10250:5;10275:65;10291:48;10332:6;10291:48;:::i;:::-;10275:65;:::i;:::-;10266:74;;10363:6;10356:5;10349:21;10401:4;10394:5;10390:16;10439:3;10430:6;10425:3;10421:16;10418:25;10415:112;;;10446:79;;:::i;:::-;10415:112;10536:41;10570:6;10565:3;10560;10536:41;:::i;:::-;10256:327;10173:410;;;;;:::o;10602:338::-;10657:5;10706:3;10699:4;10691:6;10687:17;10683:27;10673:122;;10714:79;;:::i;:::-;10673:122;10831:6;10818:20;10856:78;10930:3;10922:6;10915:4;10907:6;10903:17;10856:78;:::i;:::-;10847:87;;10663:277;10602:338;;;;:::o;10946:1509::-;11100:6;11108;11116;11124;11132;11181:3;11169:9;11160:7;11156:23;11152:33;11149:120;;;11188:79;;:::i;:::-;11149:120;11308:1;11333:53;11378:7;11369:6;11358:9;11354:22;11333:53;:::i;:::-;11323:63;;11279:117;11435:2;11461:53;11506:7;11497:6;11486:9;11482:22;11461:53;:::i;:::-;11451:63;;11406:118;11591:2;11580:9;11576:18;11563:32;11622:18;11614:6;11611:30;11608:117;;;11644:79;;:::i;:::-;11608:117;11749:78;11819:7;11810:6;11799:9;11795:22;11749:78;:::i;:::-;11739:88;;11534:303;11904:2;11893:9;11889:18;11876:32;11935:18;11927:6;11924:30;11921:117;;;11957:79;;:::i;:::-;11921:117;12062:78;12132:7;12123:6;12112:9;12108:22;12062:78;:::i;:::-;12052:88;;11847:303;12217:3;12206:9;12202:19;12189:33;12249:18;12241:6;12238:30;12235:117;;;12271:79;;:::i;:::-;12235:117;12376:62;12430:7;12421:6;12410:9;12406:22;12376:62;:::i;:::-;12366:72;;12160:288;10946:1509;;;;;;;;:::o;12461:104::-;12506:7;12535:24;12553:5;12535:24;:::i;:::-;12524:35;;12461:104;;;:::o;12571:142::-;12674:32;12700:5;12674:32;:::i;:::-;12669:3;12662:45;12571:142;;:::o;12719:254::-;12828:4;12866:2;12855:9;12851:18;12843:26;;12879:87;12963:1;12952:9;12948:17;12939:6;12879:87;:::i;:::-;12719:254;;;;:::o;12979:311::-;13056:4;13146:18;13138:6;13135:30;13132:56;;;13168:18;;:::i;:::-;13132:56;13218:4;13210:6;13206:17;13198:25;;13278:4;13272;13268:15;13260:23;;12979:311;;;:::o;13313:710::-;13409:5;13434:81;13450:64;13507:6;13450:64;:::i;:::-;13434:81;:::i;:::-;13425:90;;13535:5;13564:6;13557:5;13550:21;13598:4;13591:5;13587:16;13580:23;;13651:4;13643:6;13639:17;13631:6;13627:30;13680:3;13672:6;13669:15;13666:122;;;13699:79;;:::i;:::-;13666:122;13814:6;13797:220;13831:6;13826:3;13823:15;13797:220;;;13906:3;13935:37;13968:3;13956:10;13935:37;:::i;:::-;13930:3;13923:50;14002:4;13997:3;13993:14;13986:21;;13873:144;13857:4;13852:3;13848:14;13841:21;;13797:220;;;13801:21;13415:608;;13313:710;;;;;:::o;14046:370::-;14117:5;14166:3;14159:4;14151:6;14147:17;14143:27;14133:122;;14174:79;;:::i;:::-;14133:122;14291:6;14278:20;14316:94;14406:3;14398:6;14391:4;14383:6;14379:17;14316:94;:::i;:::-;14307:103;;14123:293;14046:370;;;;:::o;14422:894::-;14540:6;14548;14597:2;14585:9;14576:7;14572:23;14568:32;14565:119;;;14603:79;;:::i;:::-;14565:119;14751:1;14740:9;14736:17;14723:31;14781:18;14773:6;14770:30;14767:117;;;14803:79;;:::i;:::-;14767:117;14908:78;14978:7;14969:6;14958:9;14954:22;14908:78;:::i;:::-;14898:88;;14694:302;15063:2;15052:9;15048:18;15035:32;15094:18;15086:6;15083:30;15080:117;;;15116:79;;:::i;:::-;15080:117;15221:78;15291:7;15282:6;15271:9;15267:22;15221:78;:::i;:::-;15211:88;;15006:303;14422:894;;;;;:::o;15322:114::-;15389:6;15423:5;15417:12;15407:22;;15322:114;;;:::o;15442:184::-;15541:11;15575:6;15570:3;15563:19;15615:4;15610:3;15606:14;15591:29;;15442:184;;;;:::o;15632:132::-;15699:4;15722:3;15714:11;;15752:4;15747:3;15743:14;15735:22;;15632:132;;;:::o;15770:108::-;15847:24;15865:5;15847:24;:::i;:::-;15842:3;15835:37;15770:108;;:::o;15884:179::-;15953:10;15974:46;16016:3;16008:6;15974:46;:::i;:::-;16052:4;16047:3;16043:14;16029:28;;15884:179;;;;:::o;16069:113::-;16139:4;16171;16166:3;16162:14;16154:22;;16069:113;;;:::o;16218:732::-;16337:3;16366:54;16414:5;16366:54;:::i;:::-;16436:86;16515:6;16510:3;16436:86;:::i;:::-;16429:93;;16546:56;16596:5;16546:56;:::i;:::-;16625:7;16656:1;16641:284;16666:6;16663:1;16660:13;16641:284;;;16742:6;16736:13;16769:63;16828:3;16813:13;16769:63;:::i;:::-;16762:70;;16855:60;16908:6;16855:60;:::i;:::-;16845:70;;16701:224;16688:1;16685;16681:9;16676:14;;16641:284;;;16645:14;16941:3;16934:10;;16342:608;;;16218:732;;;;:::o;16956:373::-;17099:4;17137:2;17126:9;17122:18;17114:26;;17186:9;17180:4;17176:20;17172:1;17161:9;17157:17;17150:47;17214:108;17317:4;17308:6;17214:108;:::i;:::-;17206:116;;16956:373;;;;:::o;17335:118::-;17422:24;17440:5;17422:24;:::i;:::-;17417:3;17410:37;17335:118;;:::o;17459:222::-;17552:4;17590:2;17579:9;17575:18;17567:26;;17603:71;17671:1;17660:9;17656:17;17647:6;17603:71;:::i;:::-;17459:222;;;;:::o;17687:468::-;17752:6;17760;17809:2;17797:9;17788:7;17784:23;17780:32;17777:119;;;17815:79;;:::i;:::-;17777:119;17935:1;17960:53;18005:7;17996:6;17985:9;17981:22;17960:53;:::i;:::-;17950:63;;17906:117;18062:2;18088:50;18130:7;18121:6;18110:9;18106:22;18088:50;:::i;:::-;18078:60;;18033:115;17687:468;;;;;:::o;18161:323::-;18217:6;18266:2;18254:9;18245:7;18241:23;18237:32;18234:119;;;18272:79;;:::i;:::-;18234:119;18392:1;18417:50;18459:7;18450:6;18439:9;18435:22;18417:50;:::i;:::-;18407:60;;18363:114;18161:323;;;;:::o;18490:138::-;18571:32;18597:5;18571:32;:::i;:::-;18564:5;18561:43;18551:71;;18618:1;18615;18608:12;18551:71;18490:138;:::o;18634:155::-;18688:5;18726:6;18713:20;18704:29;;18742:41;18777:5;18742:41;:::i;:::-;18634:155;;;;:::o;18795:345::-;18862:6;18911:2;18899:9;18890:7;18886:23;18882:32;18879:119;;;18917:79;;:::i;:::-;18879:119;19037:1;19062:61;19115:7;19106:6;19095:9;19091:22;19062:61;:::i;:::-;19052:71;;19008:125;18795:345;;;;:::o;19146:474::-;19214:6;19222;19271:2;19259:9;19250:7;19246:23;19242:32;19239:119;;;19277:79;;:::i;:::-;19239:119;19397:1;19422:53;19467:7;19458:6;19447:9;19443:22;19422:53;:::i;:::-;19412:63;;19368:117;19524:2;19550:53;19595:7;19586:6;19575:9;19571:22;19550:53;:::i;:::-;19540:63;;19495:118;19146:474;;;;;:::o;19626:1089::-;19730:6;19738;19746;19754;19762;19811:3;19799:9;19790:7;19786:23;19782:33;19779:120;;;19818:79;;:::i;:::-;19779:120;19938:1;19963:53;20008:7;19999:6;19988:9;19984:22;19963:53;:::i;:::-;19953:63;;19909:117;20065:2;20091:53;20136:7;20127:6;20116:9;20112:22;20091:53;:::i;:::-;20081:63;;20036:118;20193:2;20219:53;20264:7;20255:6;20244:9;20240:22;20219:53;:::i;:::-;20209:63;;20164:118;20321:2;20347:53;20392:7;20383:6;20372:9;20368:22;20347:53;:::i;:::-;20337:63;;20292:118;20477:3;20466:9;20462:19;20449:33;20509:18;20501:6;20498:30;20495:117;;;20531:79;;:::i;:::-;20495:117;20636:62;20690:7;20681:6;20670:9;20666:22;20636:62;:::i;:::-;20626:72;;20420:288;19626:1089;;;;;;;;:::o;20721:329::-;20780:6;20829:2;20817:9;20808:7;20804:23;20800:32;20797:119;;;20835:79;;:::i;:::-;20797:119;20955:1;20980:53;21025:7;21016:6;21005:9;21001:22;20980:53;:::i;:::-;20970:63;;20926:117;20721:329;;;;:::o;21056:474::-;21124:6;21132;21181:2;21169:9;21160:7;21156:23;21152:32;21149:119;;;21187:79;;:::i;:::-;21149:119;21307:1;21332:53;21377:7;21368:6;21357:9;21353:22;21332:53;:::i;:::-;21322:63;;21278:117;21434:2;21460:53;21505:7;21496:6;21485:9;21481:22;21460:53;:::i;:::-;21450:63;;21405:118;21056:474;;;;;:::o;21536:229::-;21676:34;21672:1;21664:6;21660:14;21653:58;21745:12;21740:2;21732:6;21728:15;21721:37;21536:229;:::o;21771:366::-;21913:3;21934:67;21998:2;21993:3;21934:67;:::i;:::-;21927:74;;22010:93;22099:3;22010:93;:::i;:::-;22128:2;22123:3;22119:12;22112:19;;21771:366;;;:::o;22143:419::-;22309:4;22347:2;22336:9;22332:18;22324:26;;22396:9;22390:4;22386:20;22382:1;22371:9;22367:17;22360:47;22424:131;22550:4;22424:131;:::i;:::-;22416:139;;22143:419;;;:::o;22568:180::-;22616:77;22613:1;22606:88;22713:4;22710:1;22703:15;22737:4;22734:1;22727:15;22754:320;22798:6;22835:1;22829:4;22825:12;22815:22;;22882:1;22876:4;22872:12;22903:18;22893:81;;22959:4;22951:6;22947:17;22937:27;;22893:81;23021:2;23013:6;23010:14;22990:18;22987:38;22984:84;;;23040:18;;:::i;:::-;22984:84;22805:269;22754:320;;;:::o;23080:180::-;23128:77;23125:1;23118:88;23225:4;23222:1;23215:15;23249:4;23246:1;23239:15;23266:348;23306:7;23329:20;23347:1;23329:20;:::i;:::-;23324:25;;23363:20;23381:1;23363:20;:::i;:::-;23358:25;;23551:1;23483:66;23479:74;23476:1;23473:81;23468:1;23461:9;23454:17;23450:105;23447:131;;;23558:18;;:::i;:::-;23447:131;23606:1;23603;23599:9;23588:20;;23266:348;;;;:::o;23620:60::-;23648:3;23669:5;23662:12;;23620:60;;;:::o;23686:142::-;23736:9;23769:53;23787:34;23796:24;23814:5;23796:24;:::i;:::-;23787:34;:::i;:::-;23769:53;:::i;:::-;23756:66;;23686:142;;;:::o;23834:126::-;23884:9;23917:37;23948:5;23917:37;:::i;:::-;23904:50;;23834:126;;;:::o;23966:134::-;24024:9;24057:37;24088:5;24057:37;:::i;:::-;24044:50;;23966:134;;;:::o;24106:147::-;24201:45;24240:5;24201:45;:::i;:::-;24196:3;24189:58;24106:147;;:::o;24259:458::-;24416:4;24454:2;24443:9;24439:18;24431:26;;24467:71;24535:1;24524:9;24520:17;24511:6;24467:71;:::i;:::-;24548:80;24624:2;24613:9;24609:18;24600:6;24548:80;:::i;:::-;24638:72;24706:2;24695:9;24691:18;24682:6;24638:72;:::i;:::-;24259:458;;;;;;:::o;24723:137::-;24777:5;24808:6;24802:13;24793:22;;24824:30;24848:5;24824:30;:::i;:::-;24723:137;;;;:::o;24866:345::-;24933:6;24982:2;24970:9;24961:7;24957:23;24953:32;24950:119;;;24988:79;;:::i;:::-;24950:119;25108:1;25133:61;25186:7;25177:6;25166:9;25162:22;25133:61;:::i;:::-;25123:71;;25079:125;24866:345;;;;:::o;25217:233::-;25357:34;25353:1;25345:6;25341:14;25334:58;25426:16;25421:2;25413:6;25409:15;25402:41;25217:233;:::o;25456:366::-;25598:3;25619:67;25683:2;25678:3;25619:67;:::i;:::-;25612:74;;25695:93;25784:3;25695:93;:::i;:::-;25813:2;25808:3;25804:12;25797:19;;25456:366;;;:::o;25828:419::-;25994:4;26032:2;26021:9;26017:18;26009:26;;26081:9;26075:4;26071:20;26067:1;26056:9;26052:17;26045:47;26109:131;26235:4;26109:131;:::i;:::-;26101:139;;25828:419;;;:::o;26253:228::-;26393:34;26389:1;26381:6;26377:14;26370:58;26462:11;26457:2;26449:6;26445:15;26438:36;26253:228;:::o;26487:366::-;26629:3;26650:67;26714:2;26709:3;26650:67;:::i;:::-;26643:74;;26726:93;26815:3;26726:93;:::i;:::-;26844:2;26839:3;26835:12;26828:19;;26487:366;;;:::o;26859:419::-;27025:4;27063:2;27052:9;27048:18;27040:26;;27112:9;27106:4;27102:20;27098:1;27087:9;27083:17;27076:47;27140:131;27266:4;27140:131;:::i;:::-;27132:139;;26859:419;;;:::o;27284:180::-;27332:77;27329:1;27322:88;27429:4;27426:1;27419:15;27453:4;27450:1;27443:15;27470:233;27509:3;27532:24;27550:5;27532:24;:::i;:::-;27523:33;;27578:66;27571:5;27568:77;27565:103;;;27648:18;;:::i;:::-;27565:103;27695:1;27688:5;27684:13;27677:20;;27470:233;;;:::o;27709:147::-;27810:11;27847:3;27832:18;;27709:147;;;;:::o;27862:114::-;;:::o;27982:398::-;28141:3;28162:83;28243:1;28238:3;28162:83;:::i;:::-;28155:90;;28254:93;28343:3;28254:93;:::i;:::-;28372:1;28367:3;28363:11;28356:18;;27982:398;;;:::o;28386:379::-;28570:3;28592:147;28735:3;28592:147;:::i;:::-;28585:154;;28756:3;28749:10;;28386:379;;;:::o;28771:225::-;28911:34;28907:1;28899:6;28895:14;28888:58;28980:8;28975:2;28967:6;28963:15;28956:33;28771:225;:::o;29002:366::-;29144:3;29165:67;29229:2;29224:3;29165:67;:::i;:::-;29158:74;;29241:93;29330:3;29241:93;:::i;:::-;29359:2;29354:3;29350:12;29343:19;;29002:366;;;:::o;29374:419::-;29540:4;29578:2;29567:9;29563:18;29555:26;;29627:9;29621:4;29617:20;29613:1;29602:9;29598:17;29591:47;29655:131;29781:4;29655:131;:::i;:::-;29647:139;;29374:419;;;:::o;29799:182::-;29939:34;29935:1;29927:6;29923:14;29916:58;29799:182;:::o;29987:366::-;30129:3;30150:67;30214:2;30209:3;30150:67;:::i;:::-;30143:74;;30226:93;30315:3;30226:93;:::i;:::-;30344:2;30339:3;30335:12;30328:19;;29987:366;;;:::o;30359:419::-;30525:4;30563:2;30552:9;30548:18;30540:26;;30612:9;30606:4;30602:20;30598:1;30587:9;30583:17;30576:47;30640:131;30766:4;30640:131;:::i;:::-;30632:139;;30359:419;;;:::o;30784:220::-;30924:34;30920:1;30912:6;30908:14;30901:58;30993:3;30988:2;30980:6;30976:15;30969:28;30784:220;:::o;31010:366::-;31152:3;31173:67;31237:2;31232:3;31173:67;:::i;:::-;31166:74;;31249:93;31338:3;31249:93;:::i;:::-;31367:2;31362:3;31358:12;31351:19;;31010:366;;;:::o;31382:419::-;31548:4;31586:2;31575:9;31571:18;31563:26;;31635:9;31629:4;31625:20;31621:1;31610:9;31606:17;31599:47;31663:131;31789:4;31663:131;:::i;:::-;31655:139;;31382:419;;;:::o;31807:305::-;31847:3;31866:20;31884:1;31866:20;:::i;:::-;31861:25;;31900:20;31918:1;31900:20;:::i;:::-;31895:25;;32054:1;31986:66;31982:74;31979:1;31976:81;31973:107;;;32060:18;;:::i;:::-;31973:107;32104:1;32101;32097:9;32090:16;;31807:305;;;;:::o;32118:332::-;32239:4;32277:2;32266:9;32262:18;32254:26;;32290:71;32358:1;32347:9;32343:17;32334:6;32290:71;:::i;:::-;32371:72;32439:2;32428:9;32424:18;32415:6;32371:72;:::i;:::-;32118:332;;;;;:::o;32456:227::-;32596:34;32592:1;32584:6;32580:14;32573:58;32665:10;32660:2;32652:6;32648:15;32641:35;32456:227;:::o;32689:366::-;32831:3;32852:67;32916:2;32911:3;32852:67;:::i;:::-;32845:74;;32928:93;33017:3;32928:93;:::i;:::-;33046:2;33041:3;33037:12;33030:19;;32689:366;;;:::o;33061:419::-;33227:4;33265:2;33254:9;33250:18;33242:26;;33314:9;33308:4;33304:20;33300:1;33289:9;33285:17;33278:47;33342:131;33468:4;33342:131;:::i;:::-;33334:139;;33061:419;;;:::o;33486:224::-;33626:34;33622:1;33614:6;33610:14;33603:58;33695:7;33690:2;33682:6;33678:15;33671:32;33486:224;:::o;33716:366::-;33858:3;33879:67;33943:2;33938:3;33879:67;:::i;:::-;33872:74;;33955:93;34044:3;33955:93;:::i;:::-;34073:2;34068:3;34064:12;34057:19;;33716:366;;;:::o;34088:419::-;34254:4;34292:2;34281:9;34277:18;34269:26;;34341:9;34335:4;34331:20;34327:1;34316:9;34312:17;34305:47;34369:131;34495:4;34369:131;:::i;:::-;34361:139;;34088:419;;;:::o;34513:229::-;34653:34;34649:1;34641:6;34637:14;34630:58;34722:12;34717:2;34709:6;34705:15;34698:37;34513:229;:::o;34748:366::-;34890:3;34911:67;34975:2;34970:3;34911:67;:::i;:::-;34904:74;;34987:93;35076:3;34987:93;:::i;:::-;35105:2;35100:3;35096:12;35089:19;;34748:366;;;:::o;35120:419::-;35286:4;35324:2;35313:9;35309:18;35301:26;;35373:9;35367:4;35363:20;35359:1;35348:9;35344:17;35337:47;35401:131;35527:4;35401:131;:::i;:::-;35393:139;;35120:419;;;:::o;35545:634::-;35766:4;35804:2;35793:9;35789:18;35781:26;;35853:9;35847:4;35843:20;35839:1;35828:9;35824:17;35817:47;35881:108;35984:4;35975:6;35881:108;:::i;:::-;35873:116;;36036:9;36030:4;36026:20;36021:2;36010:9;36006:18;35999:48;36064:108;36167:4;36158:6;36064:108;:::i;:::-;36056:116;;35545:634;;;;;:::o;36185:228::-;36325:34;36321:1;36313:6;36309:14;36302:58;36394:11;36389:2;36381:6;36377:15;36370:36;36185:228;:::o;36419:366::-;36561:3;36582:67;36646:2;36641:3;36582:67;:::i;:::-;36575:74;;36658:93;36747:3;36658:93;:::i;:::-;36776:2;36771:3;36767:12;36760:19;;36419:366;;;:::o;36791:419::-;36957:4;36995:2;36984:9;36980:18;36972:26;;37044:9;37038:4;37034:20;37030:1;37019:9;37015:17;37008:47;37072:131;37198:4;37072:131;:::i;:::-;37064:139;;36791:419;;;:::o;37216:98::-;37267:6;37301:5;37295:12;37285:22;;37216:98;;;:::o;37320:168::-;37403:11;37437:6;37432:3;37425:19;37477:4;37472:3;37468:14;37453:29;;37320:168;;;;:::o;37494:360::-;37580:3;37608:38;37640:5;37608:38;:::i;:::-;37662:70;37725:6;37720:3;37662:70;:::i;:::-;37655:77;;37741:52;37786:6;37781:3;37774:4;37767:5;37763:16;37741:52;:::i;:::-;37818:29;37840:6;37818:29;:::i;:::-;37813:3;37809:39;37802:46;;37584:270;37494:360;;;;:::o;37860:751::-;38083:4;38121:3;38110:9;38106:19;38098:27;;38135:71;38203:1;38192:9;38188:17;38179:6;38135:71;:::i;:::-;38216:72;38284:2;38273:9;38269:18;38260:6;38216:72;:::i;:::-;38298;38366:2;38355:9;38351:18;38342:6;38298:72;:::i;:::-;38380;38448:2;38437:9;38433:18;38424:6;38380:72;:::i;:::-;38500:9;38494:4;38490:20;38484:3;38473:9;38469:19;38462:49;38528:76;38599:4;38590:6;38528:76;:::i;:::-;38520:84;;37860:751;;;;;;;;:::o;38617:141::-;38673:5;38704:6;38698:13;38689:22;;38720:32;38746:5;38720:32;:::i;:::-;38617:141;;;;:::o;38764:349::-;38833:6;38882:2;38870:9;38861:7;38857:23;38853:32;38850:119;;;38888:79;;:::i;:::-;38850:119;39008:1;39033:63;39088:7;39079:6;39068:9;39064:22;39033:63;:::i;:::-;39023:73;;38979:127;38764:349;;;;:::o;39119:106::-;39163:8;39212:5;39207:3;39203:15;39182:36;;39119:106;;;:::o;39231:183::-;39266:3;39304:1;39286:16;39283:23;39280:128;;;39342:1;39339;39336;39321:23;39364:34;39395:1;39389:8;39364:34;:::i;:::-;39357:41;;39280:128;39231:183;:::o;39420:711::-;39459:3;39497:4;39479:16;39476:26;39473:39;;;39505:5;;39473:39;39534:20;;:::i;:::-;39609:1;39591:16;39587:24;39584:1;39578:4;39563:49;39642:4;39636:11;39741:16;39734:4;39726:6;39722:17;39719:39;39686:18;39678:6;39675:30;39659:113;39656:146;;;39787:5;;;;39656:146;39833:6;39827:4;39823:17;39869:3;39863:10;39896:18;39888:6;39885:30;39882:43;;;39918:5;;;;;;39882:43;39966:6;39959:4;39954:3;39950:14;39946:27;40025:1;40007:16;40003:24;39997:4;39993:35;39988:3;39985:44;39982:57;;;40032:5;;;;;;;39982:57;40049;40097:6;40091:4;40087:17;40079:6;40075:30;40069:4;40049:57;:::i;:::-;40122:3;40115:10;;39463:668;;;;;39420:711;;:::o;40137:239::-;40277:34;40273:1;40265:6;40261:14;40254:58;40346:22;40341:2;40333:6;40329:15;40322:47;40137:239;:::o;40382:366::-;40524:3;40545:67;40609:2;40604:3;40545:67;:::i;:::-;40538:74;;40621:93;40710:3;40621:93;:::i;:::-;40739:2;40734:3;40730:12;40723:19;;40382:366;;;:::o;40754:419::-;40920:4;40958:2;40947:9;40943:18;40935:26;;41007:9;41001:4;40997:20;40993:1;40982:9;40978:17;40971:47;41035:131;41161:4;41035:131;:::i;:::-;41027:139;;40754:419;;;:::o;41179:227::-;41319:34;41315:1;41307:6;41303:14;41296:58;41388:10;41383:2;41375:6;41371:15;41364:35;41179:227;:::o;41412:366::-;41554:3;41575:67;41639:2;41634:3;41575:67;:::i;:::-;41568:74;;41651:93;41740:3;41651:93;:::i;:::-;41769:2;41764:3;41760:12;41753:19;;41412:366;;;:::o;41784:419::-;41950:4;41988:2;41977:9;41973:18;41965:26;;42037:9;42031:4;42027:20;42023:1;42012:9;42008:17;42001:47;42065:131;42191:4;42065:131;:::i;:::-;42057:139;;41784:419;;;:::o;42209:1053::-;42532:4;42570:3;42559:9;42555:19;42547:27;;42584:71;42652:1;42641:9;42637:17;42628:6;42584:71;:::i;:::-;42665:72;42733:2;42722:9;42718:18;42709:6;42665:72;:::i;:::-;42784:9;42778:4;42774:20;42769:2;42758:9;42754:18;42747:48;42812:108;42915:4;42906:6;42812:108;:::i;:::-;42804:116;;42967:9;42961:4;42957:20;42952:2;42941:9;42937:18;42930:48;42995:108;43098:4;43089:6;42995:108;:::i;:::-;42987:116;;43151:9;43145:4;43141:20;43135:3;43124:9;43120:19;43113:49;43179:76;43250:4;43241:6;43179:76;:::i;:::-;43171:84;;42209:1053;;;;;;;;:::o

Swarm Source

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