ETH Price: $2,967.86 (-4.10%)
Gas: 2 Gwei

Token

Cowtributor Token (COW)
 

Overview

Max Total Supply

39 COW

Holders

9

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x97dd7accab0f0001312557a3100ac0e09659ba2c
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:
CowtributorToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/[email protected]/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/[email protected]/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (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.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

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

// File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (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 be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

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

// File: @openzeppelin/[email protected]/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/[email protected]/token/ERC1155/ERC1155.sol


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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Supply.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

// File: cow.sol


pragma solidity ^0.8.2;




contract CowtributorToken is ERC1155, Ownable, ERC1155Supply {
    uint256 MAX_SUPPLY = 100;
    uint256 id = 0;
    uint256 startDate = 1641603600;
    uint256 price = 1 ether;
    address DAO = 0x2bdCd7D880DBd61A3e8B6AAcA0Af9C72c51b05E8;

    string public name_;
    string public symbol_;

    constructor()
        ERC1155("ipfs://QmQrvdWjaFEqHSYFPuBnZw6REx73kvyEr8iqQX57qz4FAE/")
    {
        name_ = "Cowtributor Token";
        symbol_ = "COW";
    }

    function name() public view returns (string memory) {
        return name_;
    }

    function symbol() public view returns (string memory) {
        return symbol_;
    }


    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function mint(address account, uint256 amount)
        public
        onlyOwner
    {
        require(totalSupply(id) + amount <= MAX_SUPPLY);
        _mint(account, id, amount, "");
    }

    function purchase()
        public
        payable
    {
        require(block.timestamp >= startDate);
        require(totalSupply(id) < MAX_SUPPLY);
        require(msg.value == price);
        (bool sent, bytes memory data) = DAO.call{value: msg.value}("");
        require(sent, "Failed to send Ether");
        _mint(msg.sender, id, 1, "");
    }

    function withdraw(address to, uint amount) 
        public 
        onlyOwner
    {
        (bool sent, bytes memory data) = to.call{value: amount}("");
    }


    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052606460055560006006556361d8e210600755670de0b6b3a7640000600855732bdcd7d880dbd61a3e8b6aaca0af9c72c51b05e8600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008457600080fd5b5060405180606001604052806036815260200162003c1c60369139620000b0816200017360201b60201c565b50620000d1620000c56200018f60201b60201c565b6200019760201b60201c565b6040518060400160405280601181526020017f436f777472696275746f7220546f6b656e000000000000000000000000000000815250600a90805190602001906200011e9291906200025d565b506040518060400160405280600381526020017f434f570000000000000000000000000000000000000000000000000000000000815250600b90805190602001906200016c9291906200025d565b5062000372565b80600290805190602001906200018b9291906200025d565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200026b906200030d565b90600052602060002090601f0160209004810192826200028f5760008555620002db565b82601f10620002aa57805160ff1916838001178555620002db565b82800160010185558215620002db579182015b82811115620002da578251825591602001919060010190620002bd565b5b509050620002ea9190620002ee565b5090565b5b8082111562000309576000816000905550600101620002ef565b5090565b600060028204905060018216806200032657607f821691505b602082108114156200033d576200033c62000343565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61389a80620003826000396000f3fe6080604052600436106101295760003560e01c8063715018a6116100ab578063bd85b0391161006f578063bd85b039146103d0578063e2b9e1861461040d578063e985e9c514610438578063f242432a14610475578063f2fde38b1461049e578063f3fef3a3146104c757610129565b8063715018a61461030f5780638da5cb5b1461032657806395d89b4114610351578063a22cb4651461037c578063af17dea6146103a557610129565b80632eb2c2d6116100f25780632eb2c2d61461023957806340c10f19146102625780634e1273f41461028b5780634f558e79146102c857806364edfbf01461030557610129565b8062fdd58e1461012e57806301ffc9a71461016b57806302fe5305146101a857806306fdde03146101d15780630e89341c146101fc575b600080fd5b34801561013a57600080fd5b50610155600480360381019061015091906126c8565b6104f0565b6040516101629190612ec9565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190612780565b6105b9565b60405161019f9190612ccc565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca91906127da565b61069b565b005b3480156101dd57600080fd5b506101e6610723565b6040516101f39190612ce7565b60405180910390f35b34801561020857600080fd5b50610223600480360381019061021e9190612823565b6107b5565b6040516102309190612ce7565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190612522565b610849565b005b34801561026e57600080fd5b50610289600480360381019061028491906126c8565b6108ea565b005b34801561029757600080fd5b506102b260048036038101906102ad9190612708565b6109ab565b6040516102bf9190612c73565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190612823565b610ac4565b6040516102fc9190612ccc565b60405180910390f35b61030d610ad8565b005b34801561031b57600080fd5b50610324610bff565b005b34801561033257600080fd5b5061033b610c87565b6040516103489190612b96565b60405180910390f35b34801561035d57600080fd5b50610366610cb1565b6040516103739190612ce7565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612688565b610d43565b005b3480156103b157600080fd5b506103ba610d59565b6040516103c79190612ce7565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190612823565b610de7565b6040516104049190612ec9565b60405180910390f35b34801561041957600080fd5b50610422610e04565b60405161042f9190612ce7565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a91906124e2565b610e92565b60405161046c9190612ccc565b60405180910390f35b34801561048157600080fd5b5061049c600480360381019061049791906125f1565b610f26565b005b3480156104aa57600080fd5b506104c560048036038101906104c091906124b5565b610fc7565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906126c8565b6110bf565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055890612d49565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106945750610693826111af565b5b9050919050565b6106a3611219565b73ffffffffffffffffffffffffffffffffffffffff166106c1610c87565b73ffffffffffffffffffffffffffffffffffffffff1614610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070e90612e29565b60405180910390fd5b61072081611221565b50565b6060600a8054610732906131a8565b80601f016020809104026020016040519081016040528092919081815260200182805461075e906131a8565b80156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b5050505050905090565b6060600280546107c4906131a8565b80601f01602080910402602001604051908101604052809291908181526020018280546107f0906131a8565b801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b50505050509050919050565b610851611219565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610897575061089685610891611219565b610e92565b5b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612de9565b60405180910390fd5b6108e3858585858561123b565b5050505050565b6108f2611219565b73ffffffffffffffffffffffffffffffffffffffff16610910610c87565b73ffffffffffffffffffffffffffffffffffffffff1614610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90612e29565b60405180910390fd5b60055481610975600654610de7565b61097f9190613068565b111561098a57600080fd5b6109a782600654836040518060200160405280600081525061154f565b5050565b606081518351146109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890612e69565b60405180910390fd5b6000835167ffffffffffffffff811115610a0e57610a0d6132e1565b5b604051908082528060200260200182016040528015610a3c5781602001602082028036833780820191505090505b50905060005b8451811015610ab957610a89858281518110610a6157610a606132b2565b5b6020026020010151858381518110610a7c57610a7b6132b2565b5b60200260200101516104f0565b828281518110610a9c57610a9b6132b2565b5b60200260200101818152505080610ab29061320b565b9050610a42565b508091505092915050565b600080610ad083610de7565b119050919050565b600754421015610ae757600080fd5b600554610af5600654610de7565b10610aff57600080fd5b6008543414610b0d57600080fd5b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610b5690612b81565b60006040518083038185875af1925050503d8060008114610b93576040519150601f19603f3d011682016040523d82523d6000602084013e610b98565b606091505b509150915081610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490612da9565b60405180910390fd5b610bfb3360065460016040518060200160405280600081525061154f565b5050565b610c07611219565b73ffffffffffffffffffffffffffffffffffffffff16610c25610c87565b73ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290612e29565b60405180910390fd5b610c8560006116e5565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054610cc0906131a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610cec906131a8565b8015610d395780601f10610d0e57610100808354040283529160200191610d39565b820191906000526020600020905b815481529060010190602001808311610d1c57829003601f168201915b5050505050905090565b610d55610d4e611219565b83836117ab565b5050565b600b8054610d66906131a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d92906131a8565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b505050505081565b600060046000838152602001908152602001600020549050919050565b600a8054610e11906131a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3d906131a8565b8015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b820191906000526020600020905b815481529060010190602001808311610e6d57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f2e611219565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f745750610f7385610f6e611219565b610e92565b5b610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90612d89565b60405180910390fd5b610fc08585858585611918565b5050505050565b610fcf611219565b73ffffffffffffffffffffffffffffffffffffffff16610fed610c87565b73ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90612e29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90612d69565b60405180910390fd5b6110bc816116e5565b50565b6110c7611219565b73ffffffffffffffffffffffffffffffffffffffff166110e5610c87565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290612e29565b60405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168360405161116290612b81565b60006040518083038185875af1925050503d806000811461119f576040519150601f19603f3d011682016040523d82523d6000602084013e6111a4565b606091505b509150915050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061123792919061218d565b5050565b815183511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690612e89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690612dc9565b60405180910390fd5b60006112f9611219565b9050611309818787878787611b9a565b60005b84518110156114ba57600085828151811061132a576113296132b2565b5b602002602001015190506000858381518110611349576113486132b2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190612e09565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149f9190613068565b92505081905550505050806114b39061320b565b905061130c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611531929190612c95565b60405180910390a4611547818787878787611bb0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b690612ea9565b60405180910390fd5b60006115c9611219565b90506115ea816000876115db88611d97565b6115e488611d97565b87611b9a565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116499190613068565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516116c7929190612ee4565b60405180910390a46116de81600087878787611e11565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190612e49565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190b9190612ccc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90612dc9565b60405180910390fd5b6000611992611219565b90506119b28187876119a388611d97565b6119ac88611d97565b87611b9a565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090612e09565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611afe9190613068565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611b7b929190612ee4565b60405180910390a4611b91828888888888611e11565b50505050505050565b611ba8868686868686611ff8565b505050505050565b611bcf8473ffffffffffffffffffffffffffffffffffffffff16612172565b15611d8f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c15959493929190612bb1565b602060405180830381600087803b158015611c2f57600080fd5b505af1925050508015611c6057506040513d601f19601f82011682018060405250810190611c5d91906127ad565b60015b611d0657611c6c613310565b806308c379a01415611cc95750611c81613772565b80611c8c5750611ccb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc09190612ce7565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90612d09565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490612d29565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611db657611db56132e1565b5b604051908082528060200260200182016040528015611de45781602001602082028036833780820191505090505b5090508281600081518110611dfc57611dfb6132b2565b5b60200260200101818152505080915050919050565b611e308473ffffffffffffffffffffffffffffffffffffffff16612172565b15611ff0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611e76959493929190612c19565b602060405180830381600087803b158015611e9057600080fd5b505af1925050508015611ec157506040513d601f19601f82011682018060405250810190611ebe91906127ad565b60015b611f6757611ecd613310565b806308c379a01415611f2a5750611ee2613772565b80611eed5750611f2c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f219190612ce7565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90612d09565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590612d29565b60405180910390fd5b505b505050505050565b612006868686868686612185565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156120b85760005b83518110156120b65782818151811061205a576120596132b2565b5b602002602001015160046000868481518110612079576120786132b2565b5b60200260200101518152602001908152602001600020600082825461209e9190613068565b92505081905550806120af9061320b565b905061203e565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561216a5760005b83518110156121685782818151811061210c5761210b6132b2565b5b60200260200101516004600086848151811061212b5761212a6132b2565b5b60200260200101518152602001908152602001600020600082825461215091906130be565b92505081905550806121619061320b565b90506120f0565b505b505050505050565b600080823b905060008111915050919050565b505050505050565b828054612199906131a8565b90600052602060002090601f0160209004810192826121bb5760008555612202565b82601f106121d457805160ff1916838001178555612202565b82800160010185558215612202579182015b828111156122015782518255916020019190600101906121e6565b5b50905061220f9190612213565b5090565b5b8082111561222c576000816000905550600101612214565b5090565b600061224361223e84612f32565b612f0d565b9050808382526020820190508285602086028201111561226657612265613337565b5b60005b85811015612296578161227c8882612394565b845260208401935060208301925050600181019050612269565b5050509392505050565b60006122b36122ae84612f5e565b612f0d565b905080838252602082019050828560208602820111156122d6576122d5613337565b5b60005b8581101561230657816122ec88826124a0565b8452602084019350602083019250506001810190506122d9565b5050509392505050565b600061232361231e84612f8a565b612f0d565b90508281526020810184848401111561233f5761233e61333c565b5b61234a848285613166565b509392505050565b600061236561236084612fbb565b612f0d565b9050828152602081018484840111156123815761238061333c565b5b61238c848285613166565b509392505050565b6000813590506123a381613808565b92915050565b600082601f8301126123be576123bd613332565b5b81356123ce848260208601612230565b91505092915050565b600082601f8301126123ec576123eb613332565b5b81356123fc8482602086016122a0565b91505092915050565b6000813590506124148161381f565b92915050565b60008135905061242981613836565b92915050565b60008151905061243e81613836565b92915050565b600082601f83011261245957612458613332565b5b8135612469848260208601612310565b91505092915050565b600082601f83011261248757612486613332565b5b8135612497848260208601612352565b91505092915050565b6000813590506124af8161384d565b92915050565b6000602082840312156124cb576124ca613346565b5b60006124d984828501612394565b91505092915050565b600080604083850312156124f9576124f8613346565b5b600061250785828601612394565b925050602061251885828601612394565b9150509250929050565b600080600080600060a0868803121561253e5761253d613346565b5b600061254c88828901612394565b955050602061255d88828901612394565b945050604086013567ffffffffffffffff81111561257e5761257d613341565b5b61258a888289016123d7565b935050606086013567ffffffffffffffff8111156125ab576125aa613341565b5b6125b7888289016123d7565b925050608086013567ffffffffffffffff8111156125d8576125d7613341565b5b6125e488828901612444565b9150509295509295909350565b600080600080600060a0868803121561260d5761260c613346565b5b600061261b88828901612394565b955050602061262c88828901612394565b945050604061263d888289016124a0565b935050606061264e888289016124a0565b925050608086013567ffffffffffffffff81111561266f5761266e613341565b5b61267b88828901612444565b9150509295509295909350565b6000806040838503121561269f5761269e613346565b5b60006126ad85828601612394565b92505060206126be85828601612405565b9150509250929050565b600080604083850312156126df576126de613346565b5b60006126ed85828601612394565b92505060206126fe858286016124a0565b9150509250929050565b6000806040838503121561271f5761271e613346565b5b600083013567ffffffffffffffff81111561273d5761273c613341565b5b612749858286016123a9565b925050602083013567ffffffffffffffff81111561276a57612769613341565b5b612776858286016123d7565b9150509250929050565b60006020828403121561279657612795613346565b5b60006127a48482850161241a565b91505092915050565b6000602082840312156127c3576127c2613346565b5b60006127d18482850161242f565b91505092915050565b6000602082840312156127f0576127ef613346565b5b600082013567ffffffffffffffff81111561280e5761280d613341565b5b61281a84828501612472565b91505092915050565b60006020828403121561283957612838613346565b5b6000612847848285016124a0565b91505092915050565b600061285c8383612b63565b60208301905092915050565b612871816130f2565b82525050565b600061288282612ffc565b61288c818561302a565b935061289783612fec565b8060005b838110156128c85781516128af8882612850565b97506128ba8361301d565b92505060018101905061289b565b5085935050505092915050565b6128de81613104565b82525050565b60006128ef82613007565b6128f9818561303b565b9350612909818560208601613175565b6129128161334b565b840191505092915050565b600061292882613012565b6129328185613057565b9350612942818560208601613175565b61294b8161334b565b840191505092915050565b6000612963603483613057565b915061296e82613369565b604082019050919050565b6000612986602883613057565b9150612991826133b8565b604082019050919050565b60006129a9602b83613057565b91506129b482613407565b604082019050919050565b60006129cc602683613057565b91506129d782613456565b604082019050919050565b60006129ef602983613057565b91506129fa826134a5565b604082019050919050565b6000612a12601483613057565b9150612a1d826134f4565b602082019050919050565b6000612a35602583613057565b9150612a408261351d565b604082019050919050565b6000612a58603283613057565b9150612a638261356c565b604082019050919050565b6000612a7b602a83613057565b9150612a86826135bb565b604082019050919050565b6000612a9e602083613057565b9150612aa98261360a565b602082019050919050565b6000612ac160008361304c565b9150612acc82613633565b600082019050919050565b6000612ae4602983613057565b9150612aef82613636565b604082019050919050565b6000612b07602983613057565b9150612b1282613685565b604082019050919050565b6000612b2a602883613057565b9150612b35826136d4565b604082019050919050565b6000612b4d602183613057565b9150612b5882613723565b604082019050919050565b612b6c8161315c565b82525050565b612b7b8161315c565b82525050565b6000612b8c82612ab4565b9150819050919050565b6000602082019050612bab6000830184612868565b92915050565b600060a082019050612bc66000830188612868565b612bd36020830187612868565b8181036040830152612be58186612877565b90508181036060830152612bf98185612877565b90508181036080830152612c0d81846128e4565b90509695505050505050565b600060a082019050612c2e6000830188612868565b612c3b6020830187612868565b612c486040830186612b72565b612c556060830185612b72565b8181036080830152612c6781846128e4565b90509695505050505050565b60006020820190508181036000830152612c8d8184612877565b905092915050565b60006040820190508181036000830152612caf8185612877565b90508181036020830152612cc38184612877565b90509392505050565b6000602082019050612ce160008301846128d5565b92915050565b60006020820190508181036000830152612d01818461291d565b905092915050565b60006020820190508181036000830152612d2281612956565b9050919050565b60006020820190508181036000830152612d4281612979565b9050919050565b60006020820190508181036000830152612d628161299c565b9050919050565b60006020820190508181036000830152612d82816129bf565b9050919050565b60006020820190508181036000830152612da2816129e2565b9050919050565b60006020820190508181036000830152612dc281612a05565b9050919050565b60006020820190508181036000830152612de281612a28565b9050919050565b60006020820190508181036000830152612e0281612a4b565b9050919050565b60006020820190508181036000830152612e2281612a6e565b9050919050565b60006020820190508181036000830152612e4281612a91565b9050919050565b60006020820190508181036000830152612e6281612ad7565b9050919050565b60006020820190508181036000830152612e8281612afa565b9050919050565b60006020820190508181036000830152612ea281612b1d565b9050919050565b60006020820190508181036000830152612ec281612b40565b9050919050565b6000602082019050612ede6000830184612b72565b92915050565b6000604082019050612ef96000830185612b72565b612f066020830184612b72565b9392505050565b6000612f17612f28565b9050612f2382826131da565b919050565b6000604051905090565b600067ffffffffffffffff821115612f4d57612f4c6132e1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612f7957612f786132e1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612fa557612fa46132e1565b5b612fae8261334b565b9050602081019050919050565b600067ffffffffffffffff821115612fd657612fd56132e1565b5b612fdf8261334b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006130738261315c565b915061307e8361315c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130b3576130b2613254565b5b828201905092915050565b60006130c98261315c565b91506130d48361315c565b9250828210156130e7576130e6613254565b5b828203905092915050565b60006130fd8261313c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613193578082015181840152602081019050613178565b838111156131a2576000848401525b50505050565b600060028204905060018216806131c057607f821691505b602082108114156131d4576131d3613283565b5b50919050565b6131e38261334b565b810181811067ffffffffffffffff82111715613202576132016132e1565b5b80604052505050565b60006132168261315c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561324957613248613254565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561332f5760046000803e61332c60005161335c565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561378257613805565b61378a612f28565b60043d036004823e80513d602482011167ffffffffffffffff821117156137b2575050613805565b808201805167ffffffffffffffff8111156137d05750505050613805565b80602083010160043d0385018111156137ed575050505050613805565b6137fc826020018501866131da565b82955050505050505b90565b613811816130f2565b811461381c57600080fd5b50565b61382881613104565b811461383357600080fd5b50565b61383f81613110565b811461384a57600080fd5b50565b6138568161315c565b811461386157600080fd5b5056fea2646970667358221220ac77090e65900f30aa24521de08c12d71eb1ab1a98b1736f80b4506c4529411e64736f6c63430008070033697066733a2f2f516d51727664576a61464571485359465075426e5a773652457837336b7679457238697151583537717a344641452f

Deployed Bytecode

0x6080604052600436106101295760003560e01c8063715018a6116100ab578063bd85b0391161006f578063bd85b039146103d0578063e2b9e1861461040d578063e985e9c514610438578063f242432a14610475578063f2fde38b1461049e578063f3fef3a3146104c757610129565b8063715018a61461030f5780638da5cb5b1461032657806395d89b4114610351578063a22cb4651461037c578063af17dea6146103a557610129565b80632eb2c2d6116100f25780632eb2c2d61461023957806340c10f19146102625780634e1273f41461028b5780634f558e79146102c857806364edfbf01461030557610129565b8062fdd58e1461012e57806301ffc9a71461016b57806302fe5305146101a857806306fdde03146101d15780630e89341c146101fc575b600080fd5b34801561013a57600080fd5b50610155600480360381019061015091906126c8565b6104f0565b6040516101629190612ec9565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190612780565b6105b9565b60405161019f9190612ccc565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca91906127da565b61069b565b005b3480156101dd57600080fd5b506101e6610723565b6040516101f39190612ce7565b60405180910390f35b34801561020857600080fd5b50610223600480360381019061021e9190612823565b6107b5565b6040516102309190612ce7565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190612522565b610849565b005b34801561026e57600080fd5b50610289600480360381019061028491906126c8565b6108ea565b005b34801561029757600080fd5b506102b260048036038101906102ad9190612708565b6109ab565b6040516102bf9190612c73565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190612823565b610ac4565b6040516102fc9190612ccc565b60405180910390f35b61030d610ad8565b005b34801561031b57600080fd5b50610324610bff565b005b34801561033257600080fd5b5061033b610c87565b6040516103489190612b96565b60405180910390f35b34801561035d57600080fd5b50610366610cb1565b6040516103739190612ce7565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612688565b610d43565b005b3480156103b157600080fd5b506103ba610d59565b6040516103c79190612ce7565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190612823565b610de7565b6040516104049190612ec9565b60405180910390f35b34801561041957600080fd5b50610422610e04565b60405161042f9190612ce7565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a91906124e2565b610e92565b60405161046c9190612ccc565b60405180910390f35b34801561048157600080fd5b5061049c600480360381019061049791906125f1565b610f26565b005b3480156104aa57600080fd5b506104c560048036038101906104c091906124b5565b610fc7565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906126c8565b6110bf565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055890612d49565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106945750610693826111af565b5b9050919050565b6106a3611219565b73ffffffffffffffffffffffffffffffffffffffff166106c1610c87565b73ffffffffffffffffffffffffffffffffffffffff1614610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070e90612e29565b60405180910390fd5b61072081611221565b50565b6060600a8054610732906131a8565b80601f016020809104026020016040519081016040528092919081815260200182805461075e906131a8565b80156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b5050505050905090565b6060600280546107c4906131a8565b80601f01602080910402602001604051908101604052809291908181526020018280546107f0906131a8565b801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b50505050509050919050565b610851611219565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610897575061089685610891611219565b610e92565b5b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612de9565b60405180910390fd5b6108e3858585858561123b565b5050505050565b6108f2611219565b73ffffffffffffffffffffffffffffffffffffffff16610910610c87565b73ffffffffffffffffffffffffffffffffffffffff1614610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90612e29565b60405180910390fd5b60055481610975600654610de7565b61097f9190613068565b111561098a57600080fd5b6109a782600654836040518060200160405280600081525061154f565b5050565b606081518351146109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890612e69565b60405180910390fd5b6000835167ffffffffffffffff811115610a0e57610a0d6132e1565b5b604051908082528060200260200182016040528015610a3c5781602001602082028036833780820191505090505b50905060005b8451811015610ab957610a89858281518110610a6157610a606132b2565b5b6020026020010151858381518110610a7c57610a7b6132b2565b5b60200260200101516104f0565b828281518110610a9c57610a9b6132b2565b5b60200260200101818152505080610ab29061320b565b9050610a42565b508091505092915050565b600080610ad083610de7565b119050919050565b600754421015610ae757600080fd5b600554610af5600654610de7565b10610aff57600080fd5b6008543414610b0d57600080fd5b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610b5690612b81565b60006040518083038185875af1925050503d8060008114610b93576040519150601f19603f3d011682016040523d82523d6000602084013e610b98565b606091505b509150915081610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490612da9565b60405180910390fd5b610bfb3360065460016040518060200160405280600081525061154f565b5050565b610c07611219565b73ffffffffffffffffffffffffffffffffffffffff16610c25610c87565b73ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290612e29565b60405180910390fd5b610c8560006116e5565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054610cc0906131a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610cec906131a8565b8015610d395780601f10610d0e57610100808354040283529160200191610d39565b820191906000526020600020905b815481529060010190602001808311610d1c57829003601f168201915b5050505050905090565b610d55610d4e611219565b83836117ab565b5050565b600b8054610d66906131a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d92906131a8565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b505050505081565b600060046000838152602001908152602001600020549050919050565b600a8054610e11906131a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3d906131a8565b8015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b820191906000526020600020905b815481529060010190602001808311610e6d57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f2e611219565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f745750610f7385610f6e611219565b610e92565b5b610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90612d89565b60405180910390fd5b610fc08585858585611918565b5050505050565b610fcf611219565b73ffffffffffffffffffffffffffffffffffffffff16610fed610c87565b73ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90612e29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90612d69565b60405180910390fd5b6110bc816116e5565b50565b6110c7611219565b73ffffffffffffffffffffffffffffffffffffffff166110e5610c87565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290612e29565b60405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168360405161116290612b81565b60006040518083038185875af1925050503d806000811461119f576040519150601f19603f3d011682016040523d82523d6000602084013e6111a4565b606091505b509150915050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061123792919061218d565b5050565b815183511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690612e89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690612dc9565b60405180910390fd5b60006112f9611219565b9050611309818787878787611b9a565b60005b84518110156114ba57600085828151811061132a576113296132b2565b5b602002602001015190506000858381518110611349576113486132b2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190612e09565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149f9190613068565b92505081905550505050806114b39061320b565b905061130c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611531929190612c95565b60405180910390a4611547818787878787611bb0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b690612ea9565b60405180910390fd5b60006115c9611219565b90506115ea816000876115db88611d97565b6115e488611d97565b87611b9a565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116499190613068565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516116c7929190612ee4565b60405180910390a46116de81600087878787611e11565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190612e49565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190b9190612ccc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90612dc9565b60405180910390fd5b6000611992611219565b90506119b28187876119a388611d97565b6119ac88611d97565b87611b9a565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090612e09565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611afe9190613068565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611b7b929190612ee4565b60405180910390a4611b91828888888888611e11565b50505050505050565b611ba8868686868686611ff8565b505050505050565b611bcf8473ffffffffffffffffffffffffffffffffffffffff16612172565b15611d8f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c15959493929190612bb1565b602060405180830381600087803b158015611c2f57600080fd5b505af1925050508015611c6057506040513d601f19601f82011682018060405250810190611c5d91906127ad565b60015b611d0657611c6c613310565b806308c379a01415611cc95750611c81613772565b80611c8c5750611ccb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc09190612ce7565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90612d09565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490612d29565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611db657611db56132e1565b5b604051908082528060200260200182016040528015611de45781602001602082028036833780820191505090505b5090508281600081518110611dfc57611dfb6132b2565b5b60200260200101818152505080915050919050565b611e308473ffffffffffffffffffffffffffffffffffffffff16612172565b15611ff0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611e76959493929190612c19565b602060405180830381600087803b158015611e9057600080fd5b505af1925050508015611ec157506040513d601f19601f82011682018060405250810190611ebe91906127ad565b60015b611f6757611ecd613310565b806308c379a01415611f2a5750611ee2613772565b80611eed5750611f2c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f219190612ce7565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90612d09565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590612d29565b60405180910390fd5b505b505050505050565b612006868686868686612185565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156120b85760005b83518110156120b65782818151811061205a576120596132b2565b5b602002602001015160046000868481518110612079576120786132b2565b5b60200260200101518152602001908152602001600020600082825461209e9190613068565b92505081905550806120af9061320b565b905061203e565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561216a5760005b83518110156121685782818151811061210c5761210b6132b2565b5b60200260200101516004600086848151811061212b5761212a6132b2565b5b60200260200101518152602001908152602001600020600082825461215091906130be565b92505081905550806121619061320b565b90506120f0565b505b505050505050565b600080823b905060008111915050919050565b505050505050565b828054612199906131a8565b90600052602060002090601f0160209004810192826121bb5760008555612202565b82601f106121d457805160ff1916838001178555612202565b82800160010185558215612202579182015b828111156122015782518255916020019190600101906121e6565b5b50905061220f9190612213565b5090565b5b8082111561222c576000816000905550600101612214565b5090565b600061224361223e84612f32565b612f0d565b9050808382526020820190508285602086028201111561226657612265613337565b5b60005b85811015612296578161227c8882612394565b845260208401935060208301925050600181019050612269565b5050509392505050565b60006122b36122ae84612f5e565b612f0d565b905080838252602082019050828560208602820111156122d6576122d5613337565b5b60005b8581101561230657816122ec88826124a0565b8452602084019350602083019250506001810190506122d9565b5050509392505050565b600061232361231e84612f8a565b612f0d565b90508281526020810184848401111561233f5761233e61333c565b5b61234a848285613166565b509392505050565b600061236561236084612fbb565b612f0d565b9050828152602081018484840111156123815761238061333c565b5b61238c848285613166565b509392505050565b6000813590506123a381613808565b92915050565b600082601f8301126123be576123bd613332565b5b81356123ce848260208601612230565b91505092915050565b600082601f8301126123ec576123eb613332565b5b81356123fc8482602086016122a0565b91505092915050565b6000813590506124148161381f565b92915050565b60008135905061242981613836565b92915050565b60008151905061243e81613836565b92915050565b600082601f83011261245957612458613332565b5b8135612469848260208601612310565b91505092915050565b600082601f83011261248757612486613332565b5b8135612497848260208601612352565b91505092915050565b6000813590506124af8161384d565b92915050565b6000602082840312156124cb576124ca613346565b5b60006124d984828501612394565b91505092915050565b600080604083850312156124f9576124f8613346565b5b600061250785828601612394565b925050602061251885828601612394565b9150509250929050565b600080600080600060a0868803121561253e5761253d613346565b5b600061254c88828901612394565b955050602061255d88828901612394565b945050604086013567ffffffffffffffff81111561257e5761257d613341565b5b61258a888289016123d7565b935050606086013567ffffffffffffffff8111156125ab576125aa613341565b5b6125b7888289016123d7565b925050608086013567ffffffffffffffff8111156125d8576125d7613341565b5b6125e488828901612444565b9150509295509295909350565b600080600080600060a0868803121561260d5761260c613346565b5b600061261b88828901612394565b955050602061262c88828901612394565b945050604061263d888289016124a0565b935050606061264e888289016124a0565b925050608086013567ffffffffffffffff81111561266f5761266e613341565b5b61267b88828901612444565b9150509295509295909350565b6000806040838503121561269f5761269e613346565b5b60006126ad85828601612394565b92505060206126be85828601612405565b9150509250929050565b600080604083850312156126df576126de613346565b5b60006126ed85828601612394565b92505060206126fe858286016124a0565b9150509250929050565b6000806040838503121561271f5761271e613346565b5b600083013567ffffffffffffffff81111561273d5761273c613341565b5b612749858286016123a9565b925050602083013567ffffffffffffffff81111561276a57612769613341565b5b612776858286016123d7565b9150509250929050565b60006020828403121561279657612795613346565b5b60006127a48482850161241a565b91505092915050565b6000602082840312156127c3576127c2613346565b5b60006127d18482850161242f565b91505092915050565b6000602082840312156127f0576127ef613346565b5b600082013567ffffffffffffffff81111561280e5761280d613341565b5b61281a84828501612472565b91505092915050565b60006020828403121561283957612838613346565b5b6000612847848285016124a0565b91505092915050565b600061285c8383612b63565b60208301905092915050565b612871816130f2565b82525050565b600061288282612ffc565b61288c818561302a565b935061289783612fec565b8060005b838110156128c85781516128af8882612850565b97506128ba8361301d565b92505060018101905061289b565b5085935050505092915050565b6128de81613104565b82525050565b60006128ef82613007565b6128f9818561303b565b9350612909818560208601613175565b6129128161334b565b840191505092915050565b600061292882613012565b6129328185613057565b9350612942818560208601613175565b61294b8161334b565b840191505092915050565b6000612963603483613057565b915061296e82613369565b604082019050919050565b6000612986602883613057565b9150612991826133b8565b604082019050919050565b60006129a9602b83613057565b91506129b482613407565b604082019050919050565b60006129cc602683613057565b91506129d782613456565b604082019050919050565b60006129ef602983613057565b91506129fa826134a5565b604082019050919050565b6000612a12601483613057565b9150612a1d826134f4565b602082019050919050565b6000612a35602583613057565b9150612a408261351d565b604082019050919050565b6000612a58603283613057565b9150612a638261356c565b604082019050919050565b6000612a7b602a83613057565b9150612a86826135bb565b604082019050919050565b6000612a9e602083613057565b9150612aa98261360a565b602082019050919050565b6000612ac160008361304c565b9150612acc82613633565b600082019050919050565b6000612ae4602983613057565b9150612aef82613636565b604082019050919050565b6000612b07602983613057565b9150612b1282613685565b604082019050919050565b6000612b2a602883613057565b9150612b35826136d4565b604082019050919050565b6000612b4d602183613057565b9150612b5882613723565b604082019050919050565b612b6c8161315c565b82525050565b612b7b8161315c565b82525050565b6000612b8c82612ab4565b9150819050919050565b6000602082019050612bab6000830184612868565b92915050565b600060a082019050612bc66000830188612868565b612bd36020830187612868565b8181036040830152612be58186612877565b90508181036060830152612bf98185612877565b90508181036080830152612c0d81846128e4565b90509695505050505050565b600060a082019050612c2e6000830188612868565b612c3b6020830187612868565b612c486040830186612b72565b612c556060830185612b72565b8181036080830152612c6781846128e4565b90509695505050505050565b60006020820190508181036000830152612c8d8184612877565b905092915050565b60006040820190508181036000830152612caf8185612877565b90508181036020830152612cc38184612877565b90509392505050565b6000602082019050612ce160008301846128d5565b92915050565b60006020820190508181036000830152612d01818461291d565b905092915050565b60006020820190508181036000830152612d2281612956565b9050919050565b60006020820190508181036000830152612d4281612979565b9050919050565b60006020820190508181036000830152612d628161299c565b9050919050565b60006020820190508181036000830152612d82816129bf565b9050919050565b60006020820190508181036000830152612da2816129e2565b9050919050565b60006020820190508181036000830152612dc281612a05565b9050919050565b60006020820190508181036000830152612de281612a28565b9050919050565b60006020820190508181036000830152612e0281612a4b565b9050919050565b60006020820190508181036000830152612e2281612a6e565b9050919050565b60006020820190508181036000830152612e4281612a91565b9050919050565b60006020820190508181036000830152612e6281612ad7565b9050919050565b60006020820190508181036000830152612e8281612afa565b9050919050565b60006020820190508181036000830152612ea281612b1d565b9050919050565b60006020820190508181036000830152612ec281612b40565b9050919050565b6000602082019050612ede6000830184612b72565b92915050565b6000604082019050612ef96000830185612b72565b612f066020830184612b72565b9392505050565b6000612f17612f28565b9050612f2382826131da565b919050565b6000604051905090565b600067ffffffffffffffff821115612f4d57612f4c6132e1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612f7957612f786132e1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612fa557612fa46132e1565b5b612fae8261334b565b9050602081019050919050565b600067ffffffffffffffff821115612fd657612fd56132e1565b5b612fdf8261334b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006130738261315c565b915061307e8361315c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130b3576130b2613254565b5b828201905092915050565b60006130c98261315c565b91506130d48361315c565b9250828210156130e7576130e6613254565b5b828203905092915050565b60006130fd8261313c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613193578082015181840152602081019050613178565b838111156131a2576000848401525b50505050565b600060028204905060018216806131c057607f821691505b602082108114156131d4576131d3613283565b5b50919050565b6131e38261334b565b810181811067ffffffffffffffff82111715613202576132016132e1565b5b80604052505050565b60006132168261315c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561324957613248613254565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561332f5760046000803e61332c60005161335c565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561378257613805565b61378a612f28565b60043d036004823e80513d602482011167ffffffffffffffff821117156137b2575050613805565b808201805167ffffffffffffffff8111156137d05750505050613805565b80602083010160043d0385018111156137ed575050505050613805565b6137fc826020018501866131da565b82955050505050505b90565b613811816130f2565b811461381c57600080fd5b50565b61382881613104565b811461383357600080fd5b50565b61383f81613110565b811461384a57600080fd5b50565b6138568161315c565b811461386157600080fd5b5056fea2646970667358221220ac77090e65900f30aa24521de08c12d71eb1ab1a98b1736f80b4506c4529411e64736f6c63430008070033

Deployed Bytecode Sourcemap

38391:1805:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23032:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22055:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39061:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38873:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22776:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24971:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39158:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23429:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37477:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39360:361;;;:::i;:::-;;2618:103;;;;;;;;;;;;;:::i;:::-;;1967:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38964;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24026:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38669:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37266:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38643:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24253:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24493:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2876:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39729:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23032:231;23118:7;23165:1;23146:21;;:7;:21;;;;23138:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23233:9;:13;23243:2;23233:13;;;;;;;;;;;:22;23247:7;23233:22;;;;;;;;;;;;;;;;23226:29;;23032:231;;;;:::o;22055:310::-;22157:4;22209:26;22194:41;;;:11;:41;;;;:110;;;;22267:37;22252:52;;;:11;:52;;;;22194:110;:163;;;;22321:36;22345:11;22321:23;:36::i;:::-;22194:163;22174:183;;22055:310;;;:::o;39061:89::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39127:15:::1;39135:6;39127:7;:15::i;:::-;39061:89:::0;:::o;38873:83::-;38910:13;38943:5;38936:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38873:83;:::o;22776:105::-;22836:13;22869:4;22862:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22776:105;;;:::o;24971:442::-;25212:12;:10;:12::i;:::-;25204:20;;:4;:20;;;:60;;;;25228:36;25245:4;25251:12;:10;:12::i;:::-;25228:16;:36::i;:::-;25204:60;25182:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25353:52;25376:4;25382:2;25386:3;25391:7;25400:4;25353:22;:52::i;:::-;24971:442;;;;;:::o;39158:194::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39292:10:::1;;39282:6;39264:15;39276:2;;39264:11;:15::i;:::-;:24;;;;:::i;:::-;:38;;39256:47;;;::::0;::::1;;39314:30;39320:7;39329:2;;39333:6;39314:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;39158:194:::0;;:::o;23429:524::-;23585:16;23646:3;:10;23627:8;:15;:29;23619:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23715:30;23762:8;:15;23748:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23715:63;;23796:9;23791:122;23815:8;:15;23811:1;:19;23791:122;;;23871:30;23881:8;23890:1;23881:11;;;;;;;;:::i;:::-;;;;;;;;23894:3;23898:1;23894:6;;;;;;;;:::i;:::-;;;;;;;;23871:9;:30::i;:::-;23852:13;23866:1;23852:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23832:3;;;;:::i;:::-;;;23791:122;;;;23932:13;23925:20;;;23429:524;;;;:::o;37477:122::-;37534:4;37590:1;37558:29;37584:2;37558:25;:29::i;:::-;:33;37551:40;;37477:122;;;:::o;39360:361::-;39456:9;;39437:15;:28;;39429:37;;;;;;39503:10;;39485:15;39497:2;;39485:11;:15::i;:::-;:28;39477:37;;;;;;39546:5;;39533:9;:18;39525:27;;;;;;39564:9;39575:17;39596:3;;;;;;;;;;;:8;;39612:9;39596:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39563:63;;;;39645:4;39637:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39685:28;39691:10;39703:2;;39707:1;39685:28;;;;;;;;;;;;:5;:28::i;:::-;39418:303;;39360:361::o;2618:103::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2683:30:::1;2710:1;2683:18;:30::i;:::-;2618:103::o:0;1967:87::-;2013:7;2040:6;;;;;;;;;;;2033:13;;1967:87;:::o;38964:::-;39003:13;39036:7;39029:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38964:87;:::o;24026:155::-;24121:52;24140:12;:10;:12::i;:::-;24154:8;24164;24121:18;:52::i;:::-;24026:155;;:::o;38669:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37266:113::-;37328:7;37355:12;:16;37368:2;37355:16;;;;;;;;;;;;37348:23;;37266:113;;;:::o;38643:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24253:168::-;24352:4;24376:18;:27;24395:7;24376:27;;;;;;;;;;;;;;;:37;24404:8;24376:37;;;;;;;;;;;;;;;;;;;;;;;;;24369:44;;24253:168;;;;:::o;24493:401::-;24709:12;:10;:12::i;:::-;24701:20;;:4;:20;;;:60;;;;24725:36;24742:4;24748:12;:10;:12::i;:::-;24725:16;:36::i;:::-;24701:60;24679:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24841:45;24859:4;24865:2;24869;24873:6;24881:4;24841:17;:45::i;:::-;24493:401;;;;;:::o;2876:201::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2985:1:::1;2965:22;;:8;:22;;;;2957:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3041:28;3060:8;3041:18;:28::i;:::-;2876:201:::0;:::o;39729:163::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39826:9:::1;39837:17:::0;39858:2:::1;:7;;39873:6;39858:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39825:59;;;;39814:78;;39729:163:::0;;:::o;13386:157::-;13471:4;13510:25;13495:40;;;:11;:40;;;;13488:47;;13386:157;;;:::o;685:98::-;738:7;765:10;758:17;;685:98;:::o;28973:88::-;29047:6;29040:4;:13;;;;;;;;;;;;:::i;:::-;;28973:88;:::o;27055:1074::-;27282:7;:14;27268:3;:10;:28;27260:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27374:1;27360:16;;:2;:16;;;;27352:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27431:16;27450:12;:10;:12::i;:::-;27431:31;;27475:60;27496:8;27506:4;27512:2;27516:3;27521:7;27530:4;27475:20;:60::i;:::-;27553:9;27548:421;27572:3;:10;27568:1;:14;27548:421;;;27604:10;27617:3;27621:1;27617:6;;;;;;;;:::i;:::-;;;;;;;;27604:19;;27638:14;27655:7;27663:1;27655:10;;;;;;;;:::i;:::-;;;;;;;;27638:27;;27682:19;27704:9;:13;27714:2;27704:13;;;;;;;;;;;:19;27718:4;27704:19;;;;;;;;;;;;;;;;27682:41;;27761:6;27746:11;:21;;27738:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27894:6;27880:11;:20;27858:9;:13;27868:2;27858:13;;;;;;;;;;;:19;27872:4;27858:19;;;;;;;;;;;;;;;:42;;;;27951:6;27930:9;:13;27940:2;27930:13;;;;;;;;;;;:17;27944:2;27930:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27589:380;;;27584:3;;;;:::i;:::-;;;27548:421;;;;28016:2;27986:47;;28010:4;27986:47;;28000:8;27986:47;;;28020:3;28025:7;27986:47;;;;;;;:::i;:::-;;;;;;;;28046:75;28082:8;28092:4;28098:2;28102:3;28107:7;28116:4;28046:35;:75::i;:::-;27249:880;27055:1074;;;;;:::o;29447:569::-;29614:1;29600:16;;:2;:16;;;;29592:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29667:16;29686:12;:10;:12::i;:::-;29667:31;;29711:102;29732:8;29750:1;29754:2;29758:21;29776:2;29758:17;:21::i;:::-;29781:25;29799:6;29781:17;:25::i;:::-;29808:4;29711:20;:102::i;:::-;29847:6;29826:9;:13;29836:2;29826:13;;;;;;;;;;;:17;29840:2;29826:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29906:2;29869:52;;29902:1;29869:52;;29884:8;29869:52;;;29910:2;29914:6;29869:52;;;;;;;:::i;:::-;;;;;;;;29934:74;29965:8;29983:1;29987:2;29991;29995:6;30003:4;29934:30;:74::i;:::-;29581:435;29447:569;;;;:::o;3237:191::-;3311:16;3330:6;;;;;;;;;;;3311:25;;3356:8;3347:6;;:17;;;;;;;;;;;;;;;;;;3411:8;3380:40;;3401:8;3380:40;;;;;;;;;;;;3300:128;3237:191;:::o;33241:331::-;33396:8;33387:17;;:5;:17;;;;33379:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33499:8;33461:18;:25;33480:5;33461:25;;;;;;;;;;;;;;;:35;33487:8;33461:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33545:8;33523:41;;33538:5;33523:41;;;33555:8;33523:41;;;;;;:::i;:::-;;;;;;;;33241:331;;;:::o;25877:820::-;26079:1;26065:16;;:2;:16;;;;26057:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26136:16;26155:12;:10;:12::i;:::-;26136:31;;26180:96;26201:8;26211:4;26217:2;26221:21;26239:2;26221:17;:21::i;:::-;26244:25;26262:6;26244:17;:25::i;:::-;26271:4;26180:20;:96::i;:::-;26289:19;26311:9;:13;26321:2;26311:13;;;;;;;;;;;:19;26325:4;26311:19;;;;;;;;;;;;;;;;26289:41;;26364:6;26349:11;:21;;26341:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26489:6;26475:11;:20;26453:9;:13;26463:2;26453:13;;;;;;;;;;;:19;26467:4;26453:19;;;;;;;;;;;;;;;:42;;;;26538:6;26517:9;:13;26527:2;26517:13;;;;;;;;;;;:17;26531:2;26517:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26593:2;26562:46;;26587:4;26562:46;;26577:8;26562:46;;;26597:2;26601:6;26562:46;;;;;;;:::i;:::-;;;;;;;;26621:68;26652:8;26662:4;26668:2;26672;26676:6;26684:4;26621:30;:68::i;:::-;26046:651;;25877:820;;;;;:::o;39902:291::-;40119:66;40146:8;40156:4;40162:2;40166:3;40171:7;40180:4;40119:26;:66::i;:::-;39902:291;;;;;;:::o;35509:813::-;35749:15;:2;:13;;;:15::i;:::-;35745:570;;;35802:2;35785:43;;;35829:8;35839:4;35845:3;35850:7;35859:4;35785:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35781:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36177:6;36170:14;;;;;;;;;;;:::i;:::-;;;;;;;;35781:523;;;36226:62;;;;;;;;;;:::i;:::-;;;;;;;;35781:523;35958:48;;;35946:60;;;:8;:60;;;;35942:159;;36031:50;;;;;;;;;;:::i;:::-;;;;;;;;35942:159;35865:251;35745:570;35509:813;;;;;;:::o;36330:198::-;36396:16;36425:22;36464:1;36450:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36425:41;;36488:7;36477:5;36483:1;36477:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36515:5;36508:12;;;36330:198;;;:::o;34757:744::-;34972:15;:2;:13;;;:15::i;:::-;34968:526;;;35025:2;35008:38;;;35047:8;35057:4;35063:2;35067:6;35075:4;35008:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35004:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35356:6;35349:14;;;;;;;;;;;:::i;:::-;;;;;;;;35004:479;;;35405:62;;;;;;;;;;:::i;:::-;;;;;;;;35004:479;35142:43;;;35130:55;;;:8;:55;;;;35126:154;;35210:50;;;;;;;;;;:::i;:::-;;;;;;;;35126:154;35081:214;34968:526;34757:744;;;;;;:::o;37674:655::-;37913:66;37940:8;37950:4;37956:2;37960:3;37965:7;37974:4;37913:26;:66::i;:::-;38012:1;37996:18;;:4;:18;;;37992:160;;;38036:9;38031:110;38055:3;:10;38051:1;:14;38031:110;;;38115:7;38123:1;38115:10;;;;;;;;:::i;:::-;;;;;;;;38091:12;:20;38104:3;38108:1;38104:6;;;;;;;;:::i;:::-;;;;;;;;38091:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;38067:3;;;;:::i;:::-;;;38031:110;;;;37992:160;38182:1;38168:16;;:2;:16;;;38164:158;;;38206:9;38201:110;38225:3;:10;38221:1;:14;38201:110;;;38285:7;38293:1;38285:10;;;;;;;;:::i;:::-;;;;;;;;38261:12;:20;38274:3;38278:1;38274:6;;;;;;;;:::i;:::-;;;;;;;;38261:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;38237:3;;;;:::i;:::-;;;38201:110;;;;38164:158;37674:655;;;;;;:::o;4261:387::-;4321:4;4529:12;4596:7;4584:20;4576:28;;4639:1;4632:4;:8;4625:15;;;4261:387;;;:::o;34528:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:327::-;9890:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:119;;;9945:79;;:::i;:::-;9907:119;10065:1;10090:52;10134:7;10125:6;10114:9;10110:22;10090:52;:::i;:::-;10080:62;;10036:116;9832:327;;;;:::o;10165:349::-;10234:6;10283:2;10271:9;10262:7;10258:23;10254:32;10251:119;;;10289:79;;:::i;:::-;10251:119;10409:1;10434:63;10489:7;10480:6;10469:9;10465:22;10434:63;:::i;:::-;10424:73;;10380:127;10165:349;;;;:::o;10520:509::-;10589:6;10638:2;10626:9;10617:7;10613:23;10609:32;10606:119;;;10644:79;;:::i;:::-;10606:119;10792:1;10781:9;10777:17;10764:31;10822:18;10814:6;10811:30;10808:117;;;10844:79;;:::i;:::-;10808:117;10949:63;11004:7;10995:6;10984:9;10980:22;10949:63;:::i;:::-;10939:73;;10735:287;10520:509;;;;:::o;11035:329::-;11094:6;11143:2;11131:9;11122:7;11118:23;11114:32;11111:119;;;11149:79;;:::i;:::-;11111:119;11269:1;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11240:117;11035:329;;;;:::o;11370:179::-;11439:10;11460:46;11502:3;11494:6;11460:46;:::i;:::-;11538:4;11533:3;11529:14;11515:28;;11370:179;;;;:::o;11555:118::-;11642:24;11660:5;11642:24;:::i;:::-;11637:3;11630:37;11555:118;;:::o;11709:732::-;11828:3;11857:54;11905:5;11857:54;:::i;:::-;11927:86;12006:6;12001:3;11927:86;:::i;:::-;11920:93;;12037:56;12087:5;12037:56;:::i;:::-;12116:7;12147:1;12132:284;12157:6;12154:1;12151:13;12132:284;;;12233:6;12227:13;12260:63;12319:3;12304:13;12260:63;:::i;:::-;12253:70;;12346:60;12399:6;12346:60;:::i;:::-;12336:70;;12192:224;12179:1;12176;12172:9;12167:14;;12132:284;;;12136:14;12432:3;12425:10;;11833:608;;;11709:732;;;;:::o;12447:109::-;12528:21;12543:5;12528:21;:::i;:::-;12523:3;12516:34;12447:109;;:::o;12562:360::-;12648:3;12676:38;12708:5;12676:38;:::i;:::-;12730:70;12793:6;12788:3;12730:70;:::i;:::-;12723:77;;12809:52;12854:6;12849:3;12842:4;12835:5;12831:16;12809:52;:::i;:::-;12886:29;12908:6;12886:29;:::i;:::-;12881:3;12877:39;12870:46;;12652:270;12562:360;;;;:::o;12928:364::-;13016:3;13044:39;13077:5;13044:39;:::i;:::-;13099:71;13163:6;13158:3;13099:71;:::i;:::-;13092:78;;13179:52;13224:6;13219:3;13212:4;13205:5;13201:16;13179:52;:::i;:::-;13256:29;13278:6;13256:29;:::i;:::-;13251:3;13247:39;13240:46;;13020:272;12928:364;;;;:::o;13298:366::-;13440:3;13461:67;13525:2;13520:3;13461:67;:::i;:::-;13454:74;;13537:93;13626:3;13537:93;:::i;:::-;13655:2;13650:3;13646:12;13639:19;;13298:366;;;:::o;13670:::-;13812:3;13833:67;13897:2;13892:3;13833:67;:::i;:::-;13826:74;;13909:93;13998:3;13909:93;:::i;:::-;14027:2;14022:3;14018:12;14011:19;;13670:366;;;:::o;14042:::-;14184:3;14205:67;14269:2;14264:3;14205:67;:::i;:::-;14198:74;;14281:93;14370:3;14281:93;:::i;:::-;14399:2;14394:3;14390:12;14383:19;;14042:366;;;:::o;14414:::-;14556:3;14577:67;14641:2;14636:3;14577:67;:::i;:::-;14570:74;;14653:93;14742:3;14653:93;:::i;:::-;14771:2;14766:3;14762:12;14755:19;;14414:366;;;:::o;14786:::-;14928:3;14949:67;15013:2;15008:3;14949:67;:::i;:::-;14942:74;;15025:93;15114:3;15025:93;:::i;:::-;15143:2;15138:3;15134:12;15127:19;;14786:366;;;:::o;15158:::-;15300:3;15321:67;15385:2;15380:3;15321:67;:::i;:::-;15314:74;;15397:93;15486:3;15397:93;:::i;:::-;15515:2;15510:3;15506:12;15499:19;;15158:366;;;:::o;15530:::-;15672:3;15693:67;15757:2;15752:3;15693:67;:::i;:::-;15686:74;;15769:93;15858:3;15769:93;:::i;:::-;15887:2;15882:3;15878:12;15871:19;;15530:366;;;:::o;15902:::-;16044:3;16065:67;16129:2;16124:3;16065:67;:::i;:::-;16058:74;;16141:93;16230:3;16141:93;:::i;:::-;16259:2;16254:3;16250:12;16243:19;;15902:366;;;:::o;16274:::-;16416:3;16437:67;16501:2;16496:3;16437:67;:::i;:::-;16430:74;;16513:93;16602:3;16513:93;:::i;:::-;16631:2;16626:3;16622:12;16615:19;;16274:366;;;:::o;16646:::-;16788:3;16809:67;16873:2;16868:3;16809:67;:::i;:::-;16802:74;;16885:93;16974:3;16885:93;:::i;:::-;17003:2;16998:3;16994:12;16987:19;;16646:366;;;:::o;17018:398::-;17177:3;17198:83;17279:1;17274:3;17198:83;:::i;:::-;17191:90;;17290:93;17379:3;17290:93;:::i;:::-;17408:1;17403:3;17399:11;17392:18;;17018:398;;;:::o;17422:366::-;17564:3;17585:67;17649:2;17644:3;17585:67;:::i;:::-;17578:74;;17661:93;17750:3;17661:93;:::i;:::-;17779:2;17774:3;17770:12;17763:19;;17422:366;;;:::o;17794:::-;17936:3;17957:67;18021:2;18016:3;17957:67;:::i;:::-;17950:74;;18033:93;18122:3;18033:93;:::i;:::-;18151:2;18146:3;18142:12;18135:19;;17794:366;;;:::o;18166:::-;18308:3;18329:67;18393:2;18388:3;18329:67;:::i;:::-;18322:74;;18405:93;18494:3;18405:93;:::i;:::-;18523:2;18518:3;18514:12;18507:19;;18166:366;;;:::o;18538:::-;18680:3;18701:67;18765:2;18760:3;18701:67;:::i;:::-;18694:74;;18777:93;18866:3;18777:93;:::i;:::-;18895:2;18890:3;18886:12;18879:19;;18538:366;;;:::o;18910:108::-;18987:24;19005:5;18987:24;:::i;:::-;18982:3;18975:37;18910:108;;:::o;19024:118::-;19111:24;19129:5;19111:24;:::i;:::-;19106:3;19099:37;19024:118;;:::o;19148:379::-;19332:3;19354:147;19497:3;19354:147;:::i;:::-;19347:154;;19518:3;19511:10;;19148:379;;;:::o;19533:222::-;19626:4;19664:2;19653:9;19649:18;19641:26;;19677:71;19745:1;19734:9;19730:17;19721:6;19677:71;:::i;:::-;19533:222;;;;:::o;19761:1053::-;20084:4;20122:3;20111:9;20107:19;20099:27;;20136:71;20204:1;20193:9;20189:17;20180:6;20136:71;:::i;:::-;20217:72;20285:2;20274:9;20270:18;20261:6;20217:72;:::i;:::-;20336:9;20330:4;20326:20;20321:2;20310:9;20306:18;20299:48;20364:108;20467:4;20458:6;20364:108;:::i;:::-;20356:116;;20519:9;20513:4;20509:20;20504:2;20493:9;20489:18;20482:48;20547:108;20650:4;20641:6;20547:108;:::i;:::-;20539:116;;20703:9;20697:4;20693:20;20687:3;20676:9;20672:19;20665:49;20731:76;20802:4;20793:6;20731:76;:::i;:::-;20723:84;;19761:1053;;;;;;;;:::o;20820:751::-;21043:4;21081:3;21070:9;21066:19;21058:27;;21095:71;21163:1;21152:9;21148:17;21139:6;21095:71;:::i;:::-;21176:72;21244:2;21233:9;21229:18;21220:6;21176:72;:::i;:::-;21258;21326:2;21315:9;21311:18;21302:6;21258:72;:::i;:::-;21340;21408:2;21397:9;21393:18;21384:6;21340:72;:::i;:::-;21460:9;21454:4;21450:20;21444:3;21433:9;21429:19;21422:49;21488:76;21559:4;21550:6;21488:76;:::i;:::-;21480:84;;20820:751;;;;;;;;:::o;21577:373::-;21720:4;21758:2;21747:9;21743:18;21735:26;;21807:9;21801:4;21797:20;21793:1;21782:9;21778:17;21771:47;21835:108;21938:4;21929:6;21835:108;:::i;:::-;21827:116;;21577:373;;;;:::o;21956:634::-;22177:4;22215:2;22204:9;22200:18;22192:26;;22264:9;22258:4;22254:20;22250:1;22239:9;22235:17;22228:47;22292:108;22395:4;22386:6;22292:108;:::i;:::-;22284:116;;22447:9;22441:4;22437:20;22432:2;22421:9;22417:18;22410:48;22475:108;22578:4;22569:6;22475:108;:::i;:::-;22467:116;;21956:634;;;;;:::o;22596:210::-;22683:4;22721:2;22710:9;22706:18;22698:26;;22734:65;22796:1;22785:9;22781:17;22772:6;22734:65;:::i;:::-;22596:210;;;;:::o;22812:313::-;22925:4;22963:2;22952:9;22948:18;22940:26;;23012:9;23006:4;23002:20;22998:1;22987:9;22983:17;22976:47;23040:78;23113:4;23104:6;23040:78;:::i;:::-;23032:86;;22812:313;;;;:::o;23131:419::-;23297:4;23335:2;23324:9;23320:18;23312:26;;23384:9;23378:4;23374:20;23370:1;23359:9;23355:17;23348:47;23412:131;23538:4;23412:131;:::i;:::-;23404:139;;23131:419;;;:::o;23556:::-;23722:4;23760:2;23749:9;23745:18;23737:26;;23809:9;23803:4;23799:20;23795:1;23784:9;23780:17;23773:47;23837:131;23963:4;23837:131;:::i;:::-;23829:139;;23556:419;;;:::o;23981:::-;24147:4;24185:2;24174:9;24170:18;24162:26;;24234:9;24228:4;24224:20;24220:1;24209:9;24205:17;24198:47;24262:131;24388:4;24262:131;:::i;:::-;24254:139;;23981:419;;;:::o;24406:::-;24572:4;24610:2;24599:9;24595:18;24587:26;;24659:9;24653:4;24649:20;24645:1;24634:9;24630:17;24623:47;24687:131;24813:4;24687:131;:::i;:::-;24679:139;;24406:419;;;:::o;24831:::-;24997:4;25035:2;25024:9;25020:18;25012:26;;25084:9;25078:4;25074:20;25070:1;25059:9;25055:17;25048:47;25112:131;25238:4;25112:131;:::i;:::-;25104:139;;24831:419;;;:::o;25256:::-;25422:4;25460:2;25449:9;25445:18;25437:26;;25509:9;25503:4;25499:20;25495:1;25484:9;25480:17;25473:47;25537:131;25663:4;25537:131;:::i;:::-;25529:139;;25256:419;;;:::o;25681:::-;25847:4;25885:2;25874:9;25870:18;25862:26;;25934:9;25928:4;25924:20;25920:1;25909:9;25905:17;25898:47;25962:131;26088:4;25962:131;:::i;:::-;25954:139;;25681:419;;;:::o;26106:::-;26272:4;26310:2;26299:9;26295:18;26287:26;;26359:9;26353:4;26349:20;26345:1;26334:9;26330:17;26323:47;26387:131;26513:4;26387:131;:::i;:::-;26379:139;;26106:419;;;:::o;26531:::-;26697:4;26735:2;26724:9;26720:18;26712:26;;26784:9;26778:4;26774:20;26770:1;26759:9;26755:17;26748:47;26812:131;26938:4;26812:131;:::i;:::-;26804:139;;26531:419;;;:::o;26956:::-;27122:4;27160:2;27149:9;27145:18;27137:26;;27209:9;27203:4;27199:20;27195:1;27184:9;27180:17;27173:47;27237:131;27363:4;27237:131;:::i;:::-;27229:139;;26956:419;;;:::o;27381:::-;27547:4;27585:2;27574:9;27570:18;27562:26;;27634:9;27628:4;27624:20;27620:1;27609:9;27605:17;27598:47;27662:131;27788:4;27662:131;:::i;:::-;27654:139;;27381:419;;;:::o;27806:::-;27972:4;28010:2;27999:9;27995:18;27987:26;;28059:9;28053:4;28049:20;28045:1;28034:9;28030:17;28023:47;28087:131;28213:4;28087:131;:::i;:::-;28079:139;;27806:419;;;:::o;28231:::-;28397:4;28435:2;28424:9;28420:18;28412:26;;28484:9;28478:4;28474:20;28470:1;28459:9;28455:17;28448:47;28512:131;28638:4;28512:131;:::i;:::-;28504:139;;28231:419;;;:::o;28656:::-;28822:4;28860:2;28849:9;28845:18;28837:26;;28909:9;28903:4;28899:20;28895:1;28884:9;28880:17;28873:47;28937:131;29063:4;28937:131;:::i;:::-;28929:139;;28656:419;;;:::o;29081:222::-;29174:4;29212:2;29201:9;29197:18;29189:26;;29225:71;29293:1;29282:9;29278:17;29269:6;29225:71;:::i;:::-;29081:222;;;;:::o;29309:332::-;29430:4;29468:2;29457:9;29453:18;29445:26;;29481:71;29549:1;29538:9;29534:17;29525:6;29481:71;:::i;:::-;29562:72;29630:2;29619:9;29615:18;29606:6;29562:72;:::i;:::-;29309:332;;;;;:::o;29647:129::-;29681:6;29708:20;;:::i;:::-;29698:30;;29737:33;29765:4;29757:6;29737:33;:::i;:::-;29647:129;;;:::o;29782:75::-;29815:6;29848:2;29842:9;29832:19;;29782:75;:::o;29863:311::-;29940:4;30030:18;30022:6;30019:30;30016:56;;;30052:18;;:::i;:::-;30016:56;30102:4;30094:6;30090:17;30082:25;;30162:4;30156;30152:15;30144:23;;29863:311;;;:::o;30180:::-;30257:4;30347:18;30339:6;30336:30;30333:56;;;30369:18;;:::i;:::-;30333:56;30419:4;30411:6;30407:17;30399:25;;30479:4;30473;30469:15;30461:23;;30180:311;;;:::o;30497:307::-;30558:4;30648:18;30640:6;30637:30;30634:56;;;30670:18;;:::i;:::-;30634:56;30708:29;30730:6;30708:29;:::i;:::-;30700:37;;30792:4;30786;30782:15;30774:23;;30497:307;;;:::o;30810:308::-;30872:4;30962:18;30954:6;30951:30;30948:56;;;30984:18;;:::i;:::-;30948:56;31022:29;31044:6;31022:29;:::i;:::-;31014:37;;31106:4;31100;31096:15;31088:23;;30810:308;;;:::o;31124:132::-;31191:4;31214:3;31206:11;;31244:4;31239:3;31235:14;31227:22;;31124:132;;;:::o;31262:114::-;31329:6;31363:5;31357:12;31347:22;;31262:114;;;:::o;31382:98::-;31433:6;31467:5;31461:12;31451:22;;31382:98;;;:::o;31486:99::-;31538:6;31572:5;31566:12;31556:22;;31486:99;;;:::o;31591:113::-;31661:4;31693;31688:3;31684:14;31676:22;;31591:113;;;:::o;31710:184::-;31809:11;31843:6;31838:3;31831:19;31883:4;31878:3;31874:14;31859:29;;31710:184;;;;:::o;31900:168::-;31983:11;32017:6;32012:3;32005:19;32057:4;32052:3;32048:14;32033:29;;31900:168;;;;:::o;32074:147::-;32175:11;32212:3;32197:18;;32074:147;;;;:::o;32227:169::-;32311:11;32345:6;32340:3;32333:19;32385:4;32380:3;32376:14;32361:29;;32227:169;;;;:::o;32402:305::-;32442:3;32461:20;32479:1;32461:20;:::i;:::-;32456:25;;32495:20;32513:1;32495:20;:::i;:::-;32490:25;;32649:1;32581:66;32577:74;32574:1;32571:81;32568:107;;;32655:18;;:::i;:::-;32568:107;32699:1;32696;32692:9;32685:16;;32402:305;;;;:::o;32713:191::-;32753:4;32773:20;32791:1;32773:20;:::i;:::-;32768:25;;32807:20;32825:1;32807:20;:::i;:::-;32802:25;;32846:1;32843;32840:8;32837:34;;;32851:18;;:::i;:::-;32837:34;32896:1;32893;32889:9;32881:17;;32713:191;;;;:::o;32910:96::-;32947:7;32976:24;32994:5;32976:24;:::i;:::-;32965:35;;32910:96;;;:::o;33012:90::-;33046:7;33089:5;33082:13;33075:21;33064:32;;33012:90;;;:::o;33108:149::-;33144:7;33184:66;33177:5;33173:78;33162:89;;33108:149;;;:::o;33263:126::-;33300:7;33340:42;33333:5;33329:54;33318:65;;33263:126;;;:::o;33395:77::-;33432:7;33461:5;33450:16;;33395:77;;;:::o;33478:154::-;33562:6;33557:3;33552;33539:30;33624:1;33615:6;33610:3;33606:16;33599:27;33478:154;;;:::o;33638:307::-;33706:1;33716:113;33730:6;33727:1;33724:13;33716:113;;;33815:1;33810:3;33806:11;33800:18;33796:1;33791:3;33787:11;33780:39;33752:2;33749:1;33745:10;33740:15;;33716:113;;;33847:6;33844:1;33841:13;33838:101;;;33927:1;33918:6;33913:3;33909:16;33902:27;33838:101;33687:258;33638:307;;;:::o;33951:320::-;33995:6;34032:1;34026:4;34022:12;34012:22;;34079:1;34073:4;34069:12;34100:18;34090:81;;34156:4;34148:6;34144:17;34134:27;;34090:81;34218:2;34210:6;34207:14;34187:18;34184:38;34181:84;;;34237:18;;:::i;:::-;34181:84;34002:269;33951:320;;;:::o;34277:281::-;34360:27;34382:4;34360:27;:::i;:::-;34352:6;34348:40;34490:6;34478:10;34475:22;34454:18;34442:10;34439:34;34436:62;34433:88;;;34501:18;;:::i;:::-;34433:88;34541:10;34537:2;34530:22;34320:238;34277:281;;:::o;34564:233::-;34603:3;34626:24;34644:5;34626:24;:::i;:::-;34617:33;;34672:66;34665:5;34662:77;34659:103;;;34742:18;;:::i;:::-;34659:103;34789:1;34782:5;34778:13;34771:20;;34564:233;;;:::o;34803:180::-;34851:77;34848:1;34841:88;34948:4;34945:1;34938:15;34972:4;34969:1;34962:15;34989:180;35037:77;35034:1;35027:88;35134:4;35131:1;35124:15;35158:4;35155:1;35148:15;35175:180;35223:77;35220:1;35213:88;35320:4;35317:1;35310:15;35344:4;35341:1;35334:15;35361:180;35409:77;35406:1;35399:88;35506:4;35503:1;35496:15;35530:4;35527:1;35520:15;35547:183;35582:3;35620:1;35602:16;35599:23;35596:128;;;35658:1;35655;35652;35637:23;35680:34;35711:1;35705:8;35680:34;:::i;:::-;35673:41;;35596:128;35547:183;:::o;35736:117::-;35845:1;35842;35835:12;35859:117;35968:1;35965;35958:12;35982:117;36091:1;36088;36081:12;36105:117;36214:1;36211;36204:12;36228:117;36337:1;36334;36327:12;36351:102;36392:6;36443:2;36439:7;36434:2;36427:5;36423:14;36419:28;36409:38;;36351:102;;;:::o;36459:106::-;36503:8;36552:5;36547:3;36543:15;36522:36;;36459:106;;;:::o;36571:239::-;36711:34;36707:1;36699:6;36695:14;36688:58;36780:22;36775:2;36767:6;36763:15;36756:47;36571:239;:::o;36816:227::-;36956:34;36952:1;36944:6;36940:14;36933:58;37025:10;37020:2;37012:6;37008:15;37001:35;36816:227;:::o;37049:230::-;37189:34;37185:1;37177:6;37173:14;37166:58;37258:13;37253:2;37245:6;37241:15;37234:38;37049:230;:::o;37285:225::-;37425:34;37421:1;37413:6;37409:14;37402:58;37494:8;37489:2;37481:6;37477:15;37470:33;37285:225;:::o;37516:228::-;37656:34;37652:1;37644:6;37640:14;37633:58;37725:11;37720:2;37712:6;37708:15;37701:36;37516:228;:::o;37750:170::-;37890:22;37886:1;37878:6;37874:14;37867:46;37750:170;:::o;37926:224::-;38066:34;38062:1;38054:6;38050:14;38043:58;38135:7;38130:2;38122:6;38118:15;38111:32;37926:224;:::o;38156:237::-;38296:34;38292:1;38284:6;38280:14;38273:58;38365:20;38360:2;38352:6;38348:15;38341:45;38156:237;:::o;38399:229::-;38539:34;38535:1;38527:6;38523:14;38516:58;38608:12;38603:2;38595:6;38591:15;38584:37;38399:229;:::o;38634:182::-;38774:34;38770:1;38762:6;38758:14;38751:58;38634:182;:::o;38822:114::-;;:::o;38942:228::-;39082:34;39078:1;39070:6;39066:14;39059:58;39151:11;39146:2;39138:6;39134:15;39127:36;38942:228;:::o;39176:::-;39316:34;39312:1;39304:6;39300:14;39293:58;39385:11;39380:2;39372:6;39368:15;39361:36;39176:228;:::o;39410:227::-;39550:34;39546:1;39538:6;39534:14;39527:58;39619:10;39614:2;39606:6;39602:15;39595:35;39410:227;:::o;39643:220::-;39783:34;39779:1;39771:6;39767:14;39760:58;39852:3;39847:2;39839:6;39835:15;39828:28;39643:220;:::o;39869:711::-;39908:3;39946:4;39928:16;39925:26;39922:39;;;39954:5;;39922:39;39983:20;;:::i;:::-;40058:1;40040:16;40036:24;40033:1;40027:4;40012:49;40091:4;40085:11;40190:16;40183:4;40175:6;40171:17;40168:39;40135:18;40127:6;40124:30;40108:113;40105:146;;;40236:5;;;;40105:146;40282:6;40276:4;40272:17;40318:3;40312:10;40345:18;40337:6;40334:30;40331:43;;;40367:5;;;;;;40331:43;40415:6;40408:4;40403:3;40399:14;40395:27;40474:1;40456:16;40452:24;40446:4;40442:35;40437:3;40434:44;40431:57;;;40481:5;;;;;;;40431:57;40498;40546:6;40540:4;40536:17;40528:6;40524:30;40518:4;40498:57;:::i;:::-;40571:3;40564:10;;39912:668;;;;;39869:711;;:::o;40586:122::-;40659:24;40677:5;40659:24;:::i;:::-;40652:5;40649:35;40639:63;;40698:1;40695;40688:12;40639:63;40586:122;:::o;40714:116::-;40784:21;40799:5;40784:21;:::i;:::-;40777:5;40774:32;40764:60;;40820:1;40817;40810:12;40764:60;40714:116;:::o;40836:120::-;40908:23;40925:5;40908:23;:::i;:::-;40901:5;40898:34;40888:62;;40946:1;40943;40936:12;40888:62;40836:120;:::o;40962:122::-;41035:24;41053:5;41035:24;:::i;:::-;41028:5;41025:35;41015:63;;41074:1;41071;41064:12;41015:63;40962:122;:::o

Swarm Source

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