ETH Price: $2,481.77 (+3.01%)
 

Overview

Max Total Supply

394

Holders

350

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x7c0fed18a8d04b11125135ace587421684ed08b7
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:
DAWartistCollabs

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-06-01
*/

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender()||_owner[1]==_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[0];
        _owner[0] = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

// OpenZeppelin Contracts 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/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol

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

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts 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: contracts/DAWartistCollabs.sol
// SPDX-License-Identifier: MIT
/* DAW artists collab */
pragma solidity ^0.8.4;

interface dawContract {
    function balanceOf(address) external returns (uint256);
}

contract DAWartistCollabs is ERC1155, Ownable {
    string public name;
    struct MintCondition {
        uint256 from;
        uint256 to;
        uint256 tokenId;
        uint256 maxAmount;
        uint256 cost;
    }
    MintCondition[] private currentCondition;
    uint256 public currentTokenId;
    mapping(uint256 => mapping(address => uint256)) private _mintedTokens;
    mapping(uint256 => address[]) private recipients;
    mapping(uint256 => string) private _uris;

    // 0xF1268733C6FB05EF6bE9cF23d24436Dcd6E0B35E DAW address
    constructor() ERC1155("") {
        name = "DAW Artist Collaboration";
    }

    function withdraw(uint256 amount) external onlyOwner {
        require(address(this).balance >= amount, "Not enough ether");
        payable(msg.sender).transfer(amount);
    }

    function getBalance() external view onlyOwner returns (uint256) {
        return address(this).balance;
    }

    function getCurrentCondition()
        external
        view
        returns (MintCondition[] memory)
    {
        MintCondition[] memory cond = new MintCondition[](
            currentCondition.length
        );
        for (uint256 index = 0; index < cond.length; index++) {
            cond[index] = currentCondition[index];
        }
        return cond;
    }

    function getRecipients(uint256 tokenId)
        external
        view
        returns (address[] memory)
    {
        require(tokenId > 0 && tokenId <= currentTokenId, "Inv id");
        return recipients[tokenId];
    }

    function setCondition(
        MintCondition[] memory conds,
        string[] calldata metaUris
    ) public onlyOwner {
        delete currentCondition;
        uint256 min = currentTokenId + 1;
        for (uint256 index = 0; index < conds.length; index++) {
            if (index != conds.length - 1)
                require(
                    conds[index].tokenId + 1 == conds[index + 1].tokenId,
                    "Inv ids"
                );
            if (min >= conds[index].tokenId) min = conds[index].tokenId;
            currentCondition.push(conds[index]);
            _uris[conds[index].tokenId] = metaUris[index];
            currentTokenId++;
        }
        require(min == currentTokenId + 1 - conds.length, "Inv min-max ids");
        // [[1,1,1,1,0],[2,5,2,1,0],[6,10,3,1,0],[11,24,4,1,0],[25,10000,5,1,0]],["ipfs://QmfC2mGYfyuQvEvNiKL8aW2FEoGiiGx2NS43jYQjTqJasT/1.json","ipfs://QmfC2mGYfyuQvEvNiKL8aW2FEoGiiGx2NS43jYQjTqJasT/2.json","ipfs://QmfC2mGYfyuQvEvNiKL8aW2FEoGiiGx2NS43jYQjTqJasT/3.json","ipfs://QmfC2mGYfyuQvEvNiKL8aW2FEoGiiGx2NS43jYQjTqJasT/4.json","ipfs://QmfC2mGYfyuQvEvNiKL8aW2FEoGiiGx2NS43jYQjTqJasT/5.json"]
    }

    function mint(uint256 amount) external payable {
        require(amount > 0, "Ivalid amount");
        uint256 dawBalance = dawContract(
            0xF1268733C6FB05EF6bE9cF23d24436Dcd6E0B35E
        ).balanceOf(msg.sender);
        MintCondition memory cond = _getCondition(dawBalance, amount);
        if (_mintedTokens[cond.tokenId][msg.sender] == 0) {
            require(msg.value == cond.cost, "Not enough ether");
            recipients[cond.tokenId].push(msg.sender);
        }
        _mintedTokens[cond.tokenId][msg.sender] += amount;
        _mint(msg.sender, cond.tokenId, amount, "");
    }

    function _getCondition(uint256 _balance, uint256 amount)
        public
        view
        returns (MintCondition memory)
    {
        for (uint256 index = 0; index < currentCondition.length; index++) {
            MintCondition memory _condition = currentCondition[index];
            if (
                _balance >= _condition.from &&
                _balance <= _condition.to &&
                _mintedTokens[_condition.tokenId][msg.sender] + amount <=
                _condition.maxAmount
            ) {
                return _condition;
            }
        }
        revert("Can't mint");
    }

    function setUri(uint256 _tokenId, string calldata _uri) public onlyOwner {
        _uris[_tokenId] = _uri;
    }

    function uri(uint256 tokenId) public view override returns (string memory) {
        // Tokens minted above the supply cap will not have associated metadata.
        require(
            tokenId > 0 && tokenId <= currentTokenId,
            "ERC1155Metadata: URI query for nonexistent token"
        );
        return _uris[tokenId];
    }
}

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":"uint256","name":"_balance","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_getCondition","outputs":[{"components":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"}],"internalType":"struct DAWartistCollabs.MintCondition","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentCondition","outputs":[{"components":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"}],"internalType":"struct DAWartistCollabs.MintCondition[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRecipients","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"}],"internalType":"struct DAWartistCollabs.MintCondition[]","name":"conds","type":"tuple[]"},{"internalType":"string[]","name":"metaUris","type":"string[]"}],"name":"setCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200010f60201b60201c565b5062000054620000486200012b60201b60201c565b6200013360201b60201c565b620000646200012b60201b60201c565b60036001600281106200007c576200007b6200033c565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601881526020017f4441572041727469737420436f6c6c61626f726174696f6e0000000000000000815250600590805190602001906200010892919062000227565b506200036b565b80600290805190602001906200012792919062000227565b5050565b600033905090565b600060036000600281106200014d576200014c6200033c565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160036000600281106200018a57620001896200033c565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023590620002d7565b90600052602060002090601f016020900481019282620002595760008555620002a5565b82601f106200027457805160ff1916838001178555620002a5565b82800160010185558215620002a5579182015b82811115620002a457825182559160200191906001019062000287565b5b509050620002b49190620002b8565b5090565b5b80821115620002d3576000816000905550600101620002b9565b5090565b60006002820490506001821680620002f057607f821691505b602082108114156200030757620003066200030d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6148df806200037b6000396000f3fe6080604052600436106101285760003560e01c8063715018a6116100ab578063a22cb4651161006f578063a22cb465146103e3578063aa5c18a91461040c578063e985e9c514610435578063f242432a14610472578063f2fde38b1461049b578063fd90e897146104c457610128565b8063715018a61461031f578063782f08ae146103365780638799544b1461035f5780638da5cb5b1461039c578063a0712d68146103c757610128565b806312065fe0116100f257806312065fe01461023a5780632e1a7d4d146102655780632eb2c2d61461028e5780634e1273f4146102b7578063650d6425146102f457610128565b80629a9b7b1461012d578062fdd58e1461015857806301ffc9a71461019557806306fdde03146101d25780630e89341c146101fd575b600080fd5b34801561013957600080fd5b50610142610501565b60405161014f9190613d17565b60405180910390f35b34801561016457600080fd5b5061017f600480360381019061017a9190613092565b610507565b60405161018c9190613d17565b60405180910390f35b3480156101a157600080fd5b506101bc60048036038101906101b791906131c6565b6105d0565b6040516101c99190613a3f565b60405180910390f35b3480156101de57600080fd5b506101e76106b2565b6040516101f49190613a5a565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190613220565b610740565b6040516102319190613a5a565b60405180910390f35b34801561024657600080fd5b5061024f610836565b60405161025c9190613d17565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190613220565b61092d565b005b34801561029a57600080fd5b506102b560048036038101906102b09190612eec565b610aa9565b005b3480156102c357600080fd5b506102de60048036038101906102d991906130d2565b610b4a565b6040516102eb91906139e6565b60405180910390f35b34801561030057600080fd5b50610309610c63565b60405161031691906139c4565b60405180910390f35b34801561032b57600080fd5b50610334610d66565b005b34801561034257600080fd5b5061035d6004803603810190610358919061327a565b610e61565b005b34801561036b57600080fd5b50610386600480360381019061038191906132da565b610f78565b6040516103939190613cfc565b60405180910390f35b3480156103a857600080fd5b506103b16110df565b6040516103be91906138c5565b60405180910390f35b6103e160048036038101906103dc9190613220565b61111d565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190613052565b6113bc565b005b34801561041857600080fd5b50610433600480360381019061042e919061314a565b6113d2565b005b34801561044157600080fd5b5061045c60048036038101906104579190612eac565b61174c565b6040516104699190613a3f565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190612fbb565b6117e0565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190612e7f565b611881565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190613220565b6119ec565b6040516104f891906139a2565b60405180910390f35b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f90613b1c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106ab57506106aa82611ade565b5b9050919050565b600580546106bf906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb906140bb565b80156107385780601f1061070d57610100808354040283529160200191610738565b820191906000526020600020905b81548152906001019060200180831161071b57829003601f168201915b505050505081565b606060008211801561075457506007548211155b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a90613c5c565b60405180910390fd5b600a600083815260200190815260200160002080546107b1906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd906140bb565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b50505050509050919050565b6000610840611b48565b73ffffffffffffffffffffffffffffffffffffffff1661085e6110df565b73ffffffffffffffffffffffffffffffffffffffff1614806108e85750610883611b48565b73ffffffffffffffffffffffffffffffffffffffff1660036001600281106108ae576108ad6141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90613c3c565b60405180910390fd5b47905090565b610935611b48565b73ffffffffffffffffffffffffffffffffffffffff166109536110df565b73ffffffffffffffffffffffffffffffffffffffff1614806109dd5750610978611b48565b73ffffffffffffffffffffffffffffffffffffffff1660036001600281106109a3576109a26141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390613c3c565b60405180910390fd5b80471015610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5690613adc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610aa5573d6000803e3d6000fd5b5050565b610ab1611b48565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610af75750610af685610af1611b48565b61174c565b5b610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90613bdc565b60405180910390fd5b610b438585858585611b50565b5050505050565b60608151835114610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790613c9c565b60405180910390fd5b6000835167ffffffffffffffff811115610bad57610bac6141f4565b5b604051908082528060200260200182016040528015610bdb5781602001602082028036833780820191505090505b50905060005b8451811015610c5857610c28858281518110610c0057610bff6141c5565b5b6020026020010151858381518110610c1b57610c1a6141c5565b5b6020026020010151610507565b828281518110610c3b57610c3a6141c5565b5b60200260200101818152505080610c519061411e565b9050610be1565b508091505092915050565b6060600060068054905067ffffffffffffffff811115610c8657610c856141f4565b5b604051908082528060200260200182016040528015610cbf57816020015b610cac61294a565b815260200190600190039081610ca45790505b50905060005b8151811015610d5e5760068181548110610ce257610ce16141c5565b5b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050828281518110610d4057610d3f6141c5565b5b60200260200101819052508080610d569061411e565b915050610cc5565b508091505090565b610d6e611b48565b73ffffffffffffffffffffffffffffffffffffffff16610d8c6110df565b73ffffffffffffffffffffffffffffffffffffffff161480610e165750610db1611b48565b73ffffffffffffffffffffffffffffffffffffffff166003600160028110610ddc57610ddb6141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c90613c3c565b60405180910390fd5b610e5f6000611e64565b565b610e69611b48565b73ffffffffffffffffffffffffffffffffffffffff16610e876110df565b73ffffffffffffffffffffffffffffffffffffffff161480610f115750610eac611b48565b73ffffffffffffffffffffffffffffffffffffffff166003600160028110610ed757610ed66141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613c3c565b60405180910390fd5b8181600a60008681526020019081526020016000209190610f72929190612979565b50505050565b610f8061294a565b60005b60068054905081101561109d57600060068281548110610fa657610fa56141c5565b5b90600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090508060000151851015801561100b575080602001518511155b801561107a5750806060015184600860008460400151815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110779190613f7b565b11155b156110895780925050506110d9565b5080806110959061411e565b915050610f83565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090613afc565b60405180910390fd5b92915050565b600060036000600281106110f6576110f56141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008111611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790613abc565b60405180910390fd5b600073f1268733c6fb05ef6be9cf23d24436dcd6e0b35e73ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111af91906138c5565b602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611201919061324d565b9050600061120f8284610f78565b90506000600860008360400151815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561132d57806080015134146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613adc565b60405180910390fd5b6009600082604001518152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b82600860008360400151815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113919190613f7b565b925050819055506113b73382604001518560405180602001604052806000815250611f52565b505050565b6113ce6113c7611b48565b83836120e8565b5050565b6113da611b48565b73ffffffffffffffffffffffffffffffffffffffff166113f86110df565b73ffffffffffffffffffffffffffffffffffffffff161480611482575061141d611b48565b73ffffffffffffffffffffffffffffffffffffffff166003600160028110611448576114476141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613c3c565b60405180910390fd5b600660006114cf91906129ff565b600060016007546114e09190613f7b565b905060005b84518110156116e957600185516114fc9190613fd1565b811461159957846001826115109190613f7b565b81518110611521576115206141c5565b5b6020026020010151604001516001868381518110611542576115416141c5565b5b6020026020010151604001516115589190613f7b565b14611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613bfc565b60405180910390fd5b5b8481815181106115ac576115ab6141c5565b5b60200260200101516040015182106115e0578481815181106115d1576115d06141c5565b5b60200260200101516040015191505b60068582815181106115f5576115f46141c5565b5b602002602001015190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505083838281811061166d5761166c6141c5565b5b905060200281019061167f9190613d5b565b600a6000888581518110611696576116956141c5565b5b602002602001015160400151815260200190815260200160002091906116bd929190612979565b50600760008154809291906116d19061411e565b919050555080806116e19061411e565b9150506114e5565b50835160016007546116fb9190613f7b565b6117059190613fd1565b8114611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90613b9c565b60405180910390fd5b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117e8611b48565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061182e575061182d85611828611b48565b61174c565b5b61186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490613b5c565b60405180910390fd5b61187a8585858585612255565b5050505050565b611889611b48565b73ffffffffffffffffffffffffffffffffffffffff166118a76110df565b73ffffffffffffffffffffffffffffffffffffffff16148061193157506118cc611b48565b73ffffffffffffffffffffffffffffffffffffffff1660036001600281106118f7576118f66141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613c3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790613b3c565b60405180910390fd5b6119e981611e64565b50565b6060600082118015611a0057506007548211155b611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3690613b7c565b60405180910390fd5b60096000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611ad257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a88575b50505050509050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90613cbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613bbc565b60405180910390fd5b6000611c0e611b48565b9050611c1e8187878787876124d7565b60005b8451811015611dcf576000858281518110611c3f57611c3e6141c5565b5b602002602001015190506000858381518110611c5e57611c5d6141c5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613c1c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611db49190613f7b565b9250508190555050505080611dc89061411e565b9050611c21565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e46929190613a08565b60405180910390a4611e5c8187878787876124df565b505050505050565b60006003600060028110611e7b57611e7a6141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816003600060028110611eb557611eb46141c5565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613cdc565b60405180910390fd5b6000611fcc611b48565b9050611fed81600087611fde886126c6565b611fe7886126c6565b876124d7565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461204c9190613f7b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516120ca929190613d32565b60405180910390a46120e181600087878787612740565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90613c7c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122489190613a3f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc90613bbc565b60405180910390fd5b60006122cf611b48565b90506122ef8187876122e0886126c6565b6122e9886126c6565b876124d7565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d90613c1c565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243b9190613f7b565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124b8929190613d32565b60405180910390a46124ce828888888888612740565b50505050505050565b505050505050565b6124fe8473ffffffffffffffffffffffffffffffffffffffff16612927565b156126be578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125449594939291906138e0565b602060405180830381600087803b15801561255e57600080fd5b505af192505050801561258f57506040513d601f19601f8201168201806040525081019061258c91906131f3565b60015b6126355761259b614223565b806308c379a014156125f857506125b06147b7565b806125bb57506125fa565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef9190613a5a565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262c90613a7c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390613a9c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156126e5576126e46141f4565b5b6040519080825280602002602001820160405280156127135781602001602082028036833780820191505090505b509050828160008151811061272b5761272a6141c5565b5b60200260200101818152505080915050919050565b61275f8473ffffffffffffffffffffffffffffffffffffffff16612927565b1561291f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016127a5959493929190613948565b602060405180830381600087803b1580156127bf57600080fd5b505af19250505080156127f057506040513d601f19601f820116820180604052508101906127ed91906131f3565b60015b612896576127fc614223565b806308c379a0141561285957506128116147b7565b8061281c575061285b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128509190613a5a565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288d90613a7c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461291d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291490613a9c565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b828054612985906140bb565b90600052602060002090601f0160209004810192826129a757600085556129ee565b82601f106129c057803560ff19168380011785556129ee565b828001600101855582156129ee579182015b828111156129ed5782358255916020019190600101906129d2565b5b5090506129fb9190612a23565b5090565b5080546000825560050290600052602060002090810190612a209190612a40565b50565b5b80821115612a3c576000816000905550600101612a24565b5090565b5b80821115612a7b57600080820160009055600182016000905560028201600090556003820160009055600482016000905550600501612a41565b5090565b6000612a92612a8d84613de3565b613dbe565b90508083825260208201905082856020860282011115612ab557612ab461425e565b5b60005b85811015612ae55781612acb8882612c11565b845260208401935060208301925050600181019050612ab8565b5050509392505050565b6000612b02612afd84613e0f565b613dbe565b905080838252602082019050828560a0860282011115612b2557612b2461425e565b5b60005b85811015612b555781612b3b8882612dc9565b845260208401935060a08301925050600181019050612b28565b5050509392505050565b6000612b72612b6d84613e3b565b613dbe565b90508083825260208201905082856020860282011115612b9557612b9461425e565b5b60005b85811015612bc55781612bab8882612e55565b845260208401935060208301925050600181019050612b98565b5050509392505050565b6000612be2612bdd84613e67565b613dbe565b905082815260208101848484011115612bfe57612bfd614268565b5b612c09848285614079565b509392505050565b600081359050612c208161484d565b92915050565b600082601f830112612c3b57612c3a61424a565b5b8135612c4b848260208601612a7f565b91505092915050565b60008083601f840112612c6a57612c6961424a565b5b8235905067ffffffffffffffff811115612c8757612c86614245565b5b602083019150836020820283011115612ca357612ca261425e565b5b9250929050565b600082601f830112612cbf57612cbe61424a565b5b8135612ccf848260208601612aef565b91505092915050565b600082601f830112612ced57612cec61424a565b5b8135612cfd848260208601612b5f565b91505092915050565b600081359050612d1581614864565b92915050565b600081359050612d2a8161487b565b92915050565b600081519050612d3f8161487b565b92915050565b600082601f830112612d5a57612d5961424a565b5b8135612d6a848260208601612bcf565b91505092915050565b60008083601f840112612d8957612d8861424a565b5b8235905067ffffffffffffffff811115612da657612da5614245565b5b602083019150836001820283011115612dc257612dc161425e565b5b9250929050565b600060a08284031215612ddf57612dde614254565b5b612de960a0613dbe565b90506000612df984828501612e55565b6000830152506020612e0d84828501612e55565b6020830152506040612e2184828501612e55565b6040830152506060612e3584828501612e55565b6060830152506080612e4984828501612e55565b60808301525092915050565b600081359050612e6481614892565b92915050565b600081519050612e7981614892565b92915050565b600060208284031215612e9557612e94614272565b5b6000612ea384828501612c11565b91505092915050565b60008060408385031215612ec357612ec2614272565b5b6000612ed185828601612c11565b9250506020612ee285828601612c11565b9150509250929050565b600080600080600060a08688031215612f0857612f07614272565b5b6000612f1688828901612c11565b9550506020612f2788828901612c11565b945050604086013567ffffffffffffffff811115612f4857612f4761426d565b5b612f5488828901612cd8565b935050606086013567ffffffffffffffff811115612f7557612f7461426d565b5b612f8188828901612cd8565b925050608086013567ffffffffffffffff811115612fa257612fa161426d565b5b612fae88828901612d45565b9150509295509295909350565b600080600080600060a08688031215612fd757612fd6614272565b5b6000612fe588828901612c11565b9550506020612ff688828901612c11565b945050604061300788828901612e55565b935050606061301888828901612e55565b925050608086013567ffffffffffffffff8111156130395761303861426d565b5b61304588828901612d45565b9150509295509295909350565b6000806040838503121561306957613068614272565b5b600061307785828601612c11565b925050602061308885828601612d06565b9150509250929050565b600080604083850312156130a9576130a8614272565b5b60006130b785828601612c11565b92505060206130c885828601612e55565b9150509250929050565b600080604083850312156130e9576130e8614272565b5b600083013567ffffffffffffffff8111156131075761310661426d565b5b61311385828601612c26565b925050602083013567ffffffffffffffff8111156131345761313361426d565b5b61314085828601612cd8565b9150509250929050565b60008060006040848603121561316357613162614272565b5b600084013567ffffffffffffffff8111156131815761318061426d565b5b61318d86828701612caa565b935050602084013567ffffffffffffffff8111156131ae576131ad61426d565b5b6131ba86828701612c54565b92509250509250925092565b6000602082840312156131dc576131db614272565b5b60006131ea84828501612d1b565b91505092915050565b60006020828403121561320957613208614272565b5b600061321784828501612d30565b91505092915050565b60006020828403121561323657613235614272565b5b600061324484828501612e55565b91505092915050565b60006020828403121561326357613262614272565b5b600061327184828501612e6a565b91505092915050565b60008060006040848603121561329357613292614272565b5b60006132a186828701612e55565b935050602084013567ffffffffffffffff8111156132c2576132c161426d565b5b6132ce86828701612d73565b92509250509250925092565b600080604083850312156132f1576132f0614272565b5b60006132ff85828601612e55565b925050602061331085828601612e55565b9150509250929050565b60006133268383613362565b60208301905092915050565b600061333e83836137d7565b60a08301905092915050565b600061335683836138a7565b60208301905092915050565b61336b81614005565b82525050565b61337a81614005565b82525050565b600061338b82613ec8565b6133958185613f26565b93506133a083613e98565b8060005b838110156133d15781516133b8888261331a565b97506133c383613eff565b9250506001810190506133a4565b5085935050505092915050565b60006133e982613ed3565b6133f38185613f37565b93506133fe83613ea8565b8060005b8381101561342f5781516134168882613332565b975061342183613f0c565b925050600181019050613402565b5085935050505092915050565b600061344782613ede565b6134518185613f48565b935061345c83613eb8565b8060005b8381101561348d578151613474888261334a565b975061347f83613f19565b925050600181019050613460565b5085935050505092915050565b6134a381614017565b82525050565b60006134b482613ee9565b6134be8185613f59565b93506134ce818560208601614088565b6134d781614277565b840191505092915050565b60006134ed82613ef4565b6134f78185613f6a565b9350613507818560208601614088565b61351081614277565b840191505092915050565b6000613528603483613f6a565b915061353382614295565b604082019050919050565b600061354b602883613f6a565b9150613556826142e4565b604082019050919050565b600061356e600d83613f6a565b915061357982614333565b602082019050919050565b6000613591601083613f6a565b915061359c8261435c565b602082019050919050565b60006135b4600a83613f6a565b91506135bf82614385565b602082019050919050565b60006135d7602b83613f6a565b91506135e2826143ae565b604082019050919050565b60006135fa602683613f6a565b9150613605826143fd565b604082019050919050565b600061361d602983613f6a565b91506136288261444c565b604082019050919050565b6000613640600683613f6a565b915061364b8261449b565b602082019050919050565b6000613663600f83613f6a565b915061366e826144c4565b602082019050919050565b6000613686602583613f6a565b9150613691826144ed565b604082019050919050565b60006136a9603283613f6a565b91506136b48261453c565b604082019050919050565b60006136cc600783613f6a565b91506136d78261458b565b602082019050919050565b60006136ef602a83613f6a565b91506136fa826145b4565b604082019050919050565b6000613712602083613f6a565b915061371d82614603565b602082019050919050565b6000613735603083613f6a565b91506137408261462c565b604082019050919050565b6000613758602983613f6a565b91506137638261467b565b604082019050919050565b600061377b602983613f6a565b9150613786826146ca565b604082019050919050565b600061379e602883613f6a565b91506137a982614719565b604082019050919050565b60006137c1602183613f6a565b91506137cc82614768565b604082019050919050565b60a0820160008201516137ed60008501826138a7565b50602082015161380060208501826138a7565b50604082015161381360408501826138a7565b50606082015161382660608501826138a7565b50608082015161383960808501826138a7565b50505050565b60a08201600082015161385560008501826138a7565b50602082015161386860208501826138a7565b50604082015161387b60408501826138a7565b50606082015161388e60608501826138a7565b5060808201516138a160808501826138a7565b50505050565b6138b08161406f565b82525050565b6138bf8161406f565b82525050565b60006020820190506138da6000830184613371565b92915050565b600060a0820190506138f56000830188613371565b6139026020830187613371565b8181036040830152613914818661343c565b90508181036060830152613928818561343c565b9050818103608083015261393c81846134a9565b90509695505050505050565b600060a08201905061395d6000830188613371565b61396a6020830187613371565b61397760408301866138b6565b61398460608301856138b6565b818103608083015261399681846134a9565b90509695505050505050565b600060208201905081810360008301526139bc8184613380565b905092915050565b600060208201905081810360008301526139de81846133de565b905092915050565b60006020820190508181036000830152613a00818461343c565b905092915050565b60006040820190508181036000830152613a22818561343c565b90508181036020830152613a36818461343c565b90509392505050565b6000602082019050613a54600083018461349a565b92915050565b60006020820190508181036000830152613a7481846134e2565b905092915050565b60006020820190508181036000830152613a958161351b565b9050919050565b60006020820190508181036000830152613ab58161353e565b9050919050565b60006020820190508181036000830152613ad581613561565b9050919050565b60006020820190508181036000830152613af581613584565b9050919050565b60006020820190508181036000830152613b15816135a7565b9050919050565b60006020820190508181036000830152613b35816135ca565b9050919050565b60006020820190508181036000830152613b55816135ed565b9050919050565b60006020820190508181036000830152613b7581613610565b9050919050565b60006020820190508181036000830152613b9581613633565b9050919050565b60006020820190508181036000830152613bb581613656565b9050919050565b60006020820190508181036000830152613bd581613679565b9050919050565b60006020820190508181036000830152613bf58161369c565b9050919050565b60006020820190508181036000830152613c15816136bf565b9050919050565b60006020820190508181036000830152613c35816136e2565b9050919050565b60006020820190508181036000830152613c5581613705565b9050919050565b60006020820190508181036000830152613c7581613728565b9050919050565b60006020820190508181036000830152613c958161374b565b9050919050565b60006020820190508181036000830152613cb58161376e565b9050919050565b60006020820190508181036000830152613cd581613791565b9050919050565b60006020820190508181036000830152613cf5816137b4565b9050919050565b600060a082019050613d11600083018461383f565b92915050565b6000602082019050613d2c60008301846138b6565b92915050565b6000604082019050613d4760008301856138b6565b613d5460208301846138b6565b9392505050565b60008083356001602003843603038112613d7857613d77614259565b5b80840192508235915067ffffffffffffffff821115613d9a57613d9961424f565b5b602083019250600182023603831315613db657613db5614263565b5b509250929050565b6000613dc8613dd9565b9050613dd482826140ed565b919050565b6000604051905090565b600067ffffffffffffffff821115613dfe57613dfd6141f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e2a57613e296141f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e5657613e556141f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e8257613e816141f4565b5b613e8b82614277565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613f868261406f565b9150613f918361406f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fc657613fc5614167565b5b828201905092915050565b6000613fdc8261406f565b9150613fe78361406f565b925082821015613ffa57613ff9614167565b5b828203905092915050565b60006140108261404f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140a657808201518184015260208101905061408b565b838111156140b5576000848401525b50505050565b600060028204905060018216806140d357607f821691505b602082108114156140e7576140e6614196565b5b50919050565b6140f682614277565b810181811067ffffffffffffffff82111715614115576141146141f4565b5b80604052505050565b60006141298261406f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415c5761415b614167565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156142425760046000803e61423f600051614288565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4976616c696420616d6f756e7400000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f43616e2774206d696e7400000000000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e762069640000000000000000000000000000000000000000000000000000600082015250565b7f496e76206d696e2d6d6178206964730000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e762069647300000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135354d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156147c75761484a565b6147cf613dd9565b60043d036004823e80513d602482011167ffffffffffffffff821117156147f757505061484a565b808201805167ffffffffffffffff811115614815575050505061484a565b80602083010160043d03850181111561483257505050505061484a565b614841826020018501866140ed565b82955050505050505b90565b61485681614005565b811461486157600080fd5b50565b61486d81614017565b811461487857600080fd5b50565b61488481614023565b811461488f57600080fd5b50565b61489b8161406f565b81146148a657600080fd5b5056fea2646970667358221220d8bb40dad20e0298d5871f1dec3f6911f5e20df923fcaaf3d802b8a7b4c098e964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101285760003560e01c8063715018a6116100ab578063a22cb4651161006f578063a22cb465146103e3578063aa5c18a91461040c578063e985e9c514610435578063f242432a14610472578063f2fde38b1461049b578063fd90e897146104c457610128565b8063715018a61461031f578063782f08ae146103365780638799544b1461035f5780638da5cb5b1461039c578063a0712d68146103c757610128565b806312065fe0116100f257806312065fe01461023a5780632e1a7d4d146102655780632eb2c2d61461028e5780634e1273f4146102b7578063650d6425146102f457610128565b80629a9b7b1461012d578062fdd58e1461015857806301ffc9a71461019557806306fdde03146101d25780630e89341c146101fd575b600080fd5b34801561013957600080fd5b50610142610501565b60405161014f9190613d17565b60405180910390f35b34801561016457600080fd5b5061017f600480360381019061017a9190613092565b610507565b60405161018c9190613d17565b60405180910390f35b3480156101a157600080fd5b506101bc60048036038101906101b791906131c6565b6105d0565b6040516101c99190613a3f565b60405180910390f35b3480156101de57600080fd5b506101e76106b2565b6040516101f49190613a5a565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190613220565b610740565b6040516102319190613a5a565b60405180910390f35b34801561024657600080fd5b5061024f610836565b60405161025c9190613d17565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190613220565b61092d565b005b34801561029a57600080fd5b506102b560048036038101906102b09190612eec565b610aa9565b005b3480156102c357600080fd5b506102de60048036038101906102d991906130d2565b610b4a565b6040516102eb91906139e6565b60405180910390f35b34801561030057600080fd5b50610309610c63565b60405161031691906139c4565b60405180910390f35b34801561032b57600080fd5b50610334610d66565b005b34801561034257600080fd5b5061035d6004803603810190610358919061327a565b610e61565b005b34801561036b57600080fd5b50610386600480360381019061038191906132da565b610f78565b6040516103939190613cfc565b60405180910390f35b3480156103a857600080fd5b506103b16110df565b6040516103be91906138c5565b60405180910390f35b6103e160048036038101906103dc9190613220565b61111d565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190613052565b6113bc565b005b34801561041857600080fd5b50610433600480360381019061042e919061314a565b6113d2565b005b34801561044157600080fd5b5061045c60048036038101906104579190612eac565b61174c565b6040516104699190613a3f565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190612fbb565b6117e0565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190612e7f565b611881565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190613220565b6119ec565b6040516104f891906139a2565b60405180910390f35b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f90613b1c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106ab57506106aa82611ade565b5b9050919050565b600580546106bf906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb906140bb565b80156107385780601f1061070d57610100808354040283529160200191610738565b820191906000526020600020905b81548152906001019060200180831161071b57829003601f168201915b505050505081565b606060008211801561075457506007548211155b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a90613c5c565b60405180910390fd5b600a600083815260200190815260200160002080546107b1906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd906140bb565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b50505050509050919050565b6000610840611b48565b73ffffffffffffffffffffffffffffffffffffffff1661085e6110df565b73ffffffffffffffffffffffffffffffffffffffff1614806108e85750610883611b48565b73ffffffffffffffffffffffffffffffffffffffff1660036001600281106108ae576108ad6141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90613c3c565b60405180910390fd5b47905090565b610935611b48565b73ffffffffffffffffffffffffffffffffffffffff166109536110df565b73ffffffffffffffffffffffffffffffffffffffff1614806109dd5750610978611b48565b73ffffffffffffffffffffffffffffffffffffffff1660036001600281106109a3576109a26141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390613c3c565b60405180910390fd5b80471015610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5690613adc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610aa5573d6000803e3d6000fd5b5050565b610ab1611b48565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610af75750610af685610af1611b48565b61174c565b5b610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90613bdc565b60405180910390fd5b610b438585858585611b50565b5050505050565b60608151835114610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790613c9c565b60405180910390fd5b6000835167ffffffffffffffff811115610bad57610bac6141f4565b5b604051908082528060200260200182016040528015610bdb5781602001602082028036833780820191505090505b50905060005b8451811015610c5857610c28858281518110610c0057610bff6141c5565b5b6020026020010151858381518110610c1b57610c1a6141c5565b5b6020026020010151610507565b828281518110610c3b57610c3a6141c5565b5b60200260200101818152505080610c519061411e565b9050610be1565b508091505092915050565b6060600060068054905067ffffffffffffffff811115610c8657610c856141f4565b5b604051908082528060200260200182016040528015610cbf57816020015b610cac61294a565b815260200190600190039081610ca45790505b50905060005b8151811015610d5e5760068181548110610ce257610ce16141c5565b5b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050828281518110610d4057610d3f6141c5565b5b60200260200101819052508080610d569061411e565b915050610cc5565b508091505090565b610d6e611b48565b73ffffffffffffffffffffffffffffffffffffffff16610d8c6110df565b73ffffffffffffffffffffffffffffffffffffffff161480610e165750610db1611b48565b73ffffffffffffffffffffffffffffffffffffffff166003600160028110610ddc57610ddb6141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c90613c3c565b60405180910390fd5b610e5f6000611e64565b565b610e69611b48565b73ffffffffffffffffffffffffffffffffffffffff16610e876110df565b73ffffffffffffffffffffffffffffffffffffffff161480610f115750610eac611b48565b73ffffffffffffffffffffffffffffffffffffffff166003600160028110610ed757610ed66141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613c3c565b60405180910390fd5b8181600a60008681526020019081526020016000209190610f72929190612979565b50505050565b610f8061294a565b60005b60068054905081101561109d57600060068281548110610fa657610fa56141c5565b5b90600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090508060000151851015801561100b575080602001518511155b801561107a5750806060015184600860008460400151815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110779190613f7b565b11155b156110895780925050506110d9565b5080806110959061411e565b915050610f83565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090613afc565b60405180910390fd5b92915050565b600060036000600281106110f6576110f56141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008111611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790613abc565b60405180910390fd5b600073f1268733c6fb05ef6be9cf23d24436dcd6e0b35e73ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111af91906138c5565b602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611201919061324d565b9050600061120f8284610f78565b90506000600860008360400151815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561132d57806080015134146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613adc565b60405180910390fd5b6009600082604001518152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b82600860008360400151815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113919190613f7b565b925050819055506113b73382604001518560405180602001604052806000815250611f52565b505050565b6113ce6113c7611b48565b83836120e8565b5050565b6113da611b48565b73ffffffffffffffffffffffffffffffffffffffff166113f86110df565b73ffffffffffffffffffffffffffffffffffffffff161480611482575061141d611b48565b73ffffffffffffffffffffffffffffffffffffffff166003600160028110611448576114476141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613c3c565b60405180910390fd5b600660006114cf91906129ff565b600060016007546114e09190613f7b565b905060005b84518110156116e957600185516114fc9190613fd1565b811461159957846001826115109190613f7b565b81518110611521576115206141c5565b5b6020026020010151604001516001868381518110611542576115416141c5565b5b6020026020010151604001516115589190613f7b565b14611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613bfc565b60405180910390fd5b5b8481815181106115ac576115ab6141c5565b5b60200260200101516040015182106115e0578481815181106115d1576115d06141c5565b5b60200260200101516040015191505b60068582815181106115f5576115f46141c5565b5b602002602001015190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505083838281811061166d5761166c6141c5565b5b905060200281019061167f9190613d5b565b600a6000888581518110611696576116956141c5565b5b602002602001015160400151815260200190815260200160002091906116bd929190612979565b50600760008154809291906116d19061411e565b919050555080806116e19061411e565b9150506114e5565b50835160016007546116fb9190613f7b565b6117059190613fd1565b8114611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90613b9c565b60405180910390fd5b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117e8611b48565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061182e575061182d85611828611b48565b61174c565b5b61186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490613b5c565b60405180910390fd5b61187a8585858585612255565b5050505050565b611889611b48565b73ffffffffffffffffffffffffffffffffffffffff166118a76110df565b73ffffffffffffffffffffffffffffffffffffffff16148061193157506118cc611b48565b73ffffffffffffffffffffffffffffffffffffffff1660036001600281106118f7576118f66141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613c3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790613b3c565b60405180910390fd5b6119e981611e64565b50565b6060600082118015611a0057506007548211155b611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3690613b7c565b60405180910390fd5b60096000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611ad257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a88575b50505050509050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90613cbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613bbc565b60405180910390fd5b6000611c0e611b48565b9050611c1e8187878787876124d7565b60005b8451811015611dcf576000858281518110611c3f57611c3e6141c5565b5b602002602001015190506000858381518110611c5e57611c5d6141c5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613c1c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611db49190613f7b565b9250508190555050505080611dc89061411e565b9050611c21565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e46929190613a08565b60405180910390a4611e5c8187878787876124df565b505050505050565b60006003600060028110611e7b57611e7a6141c5565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816003600060028110611eb557611eb46141c5565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613cdc565b60405180910390fd5b6000611fcc611b48565b9050611fed81600087611fde886126c6565b611fe7886126c6565b876124d7565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461204c9190613f7b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516120ca929190613d32565b60405180910390a46120e181600087878787612740565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90613c7c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122489190613a3f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bc90613bbc565b60405180910390fd5b60006122cf611b48565b90506122ef8187876122e0886126c6565b6122e9886126c6565b876124d7565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d90613c1c565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243b9190613f7b565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124b8929190613d32565b60405180910390a46124ce828888888888612740565b50505050505050565b505050505050565b6124fe8473ffffffffffffffffffffffffffffffffffffffff16612927565b156126be578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125449594939291906138e0565b602060405180830381600087803b15801561255e57600080fd5b505af192505050801561258f57506040513d601f19601f8201168201806040525081019061258c91906131f3565b60015b6126355761259b614223565b806308c379a014156125f857506125b06147b7565b806125bb57506125fa565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef9190613a5a565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262c90613a7c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390613a9c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156126e5576126e46141f4565b5b6040519080825280602002602001820160405280156127135781602001602082028036833780820191505090505b509050828160008151811061272b5761272a6141c5565b5b60200260200101818152505080915050919050565b61275f8473ffffffffffffffffffffffffffffffffffffffff16612927565b1561291f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016127a5959493929190613948565b602060405180830381600087803b1580156127bf57600080fd5b505af19250505080156127f057506040513d601f19601f820116820180604052508101906127ed91906131f3565b60015b612896576127fc614223565b806308c379a0141561285957506128116147b7565b8061281c575061285b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128509190613a5a565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288d90613a7c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461291d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291490613a9c565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b828054612985906140bb565b90600052602060002090601f0160209004810192826129a757600085556129ee565b82601f106129c057803560ff19168380011785556129ee565b828001600101855582156129ee579182015b828111156129ed5782358255916020019190600101906129d2565b5b5090506129fb9190612a23565b5090565b5080546000825560050290600052602060002090810190612a209190612a40565b50565b5b80821115612a3c576000816000905550600101612a24565b5090565b5b80821115612a7b57600080820160009055600182016000905560028201600090556003820160009055600482016000905550600501612a41565b5090565b6000612a92612a8d84613de3565b613dbe565b90508083825260208201905082856020860282011115612ab557612ab461425e565b5b60005b85811015612ae55781612acb8882612c11565b845260208401935060208301925050600181019050612ab8565b5050509392505050565b6000612b02612afd84613e0f565b613dbe565b905080838252602082019050828560a0860282011115612b2557612b2461425e565b5b60005b85811015612b555781612b3b8882612dc9565b845260208401935060a08301925050600181019050612b28565b5050509392505050565b6000612b72612b6d84613e3b565b613dbe565b90508083825260208201905082856020860282011115612b9557612b9461425e565b5b60005b85811015612bc55781612bab8882612e55565b845260208401935060208301925050600181019050612b98565b5050509392505050565b6000612be2612bdd84613e67565b613dbe565b905082815260208101848484011115612bfe57612bfd614268565b5b612c09848285614079565b509392505050565b600081359050612c208161484d565b92915050565b600082601f830112612c3b57612c3a61424a565b5b8135612c4b848260208601612a7f565b91505092915050565b60008083601f840112612c6a57612c6961424a565b5b8235905067ffffffffffffffff811115612c8757612c86614245565b5b602083019150836020820283011115612ca357612ca261425e565b5b9250929050565b600082601f830112612cbf57612cbe61424a565b5b8135612ccf848260208601612aef565b91505092915050565b600082601f830112612ced57612cec61424a565b5b8135612cfd848260208601612b5f565b91505092915050565b600081359050612d1581614864565b92915050565b600081359050612d2a8161487b565b92915050565b600081519050612d3f8161487b565b92915050565b600082601f830112612d5a57612d5961424a565b5b8135612d6a848260208601612bcf565b91505092915050565b60008083601f840112612d8957612d8861424a565b5b8235905067ffffffffffffffff811115612da657612da5614245565b5b602083019150836001820283011115612dc257612dc161425e565b5b9250929050565b600060a08284031215612ddf57612dde614254565b5b612de960a0613dbe565b90506000612df984828501612e55565b6000830152506020612e0d84828501612e55565b6020830152506040612e2184828501612e55565b6040830152506060612e3584828501612e55565b6060830152506080612e4984828501612e55565b60808301525092915050565b600081359050612e6481614892565b92915050565b600081519050612e7981614892565b92915050565b600060208284031215612e9557612e94614272565b5b6000612ea384828501612c11565b91505092915050565b60008060408385031215612ec357612ec2614272565b5b6000612ed185828601612c11565b9250506020612ee285828601612c11565b9150509250929050565b600080600080600060a08688031215612f0857612f07614272565b5b6000612f1688828901612c11565b9550506020612f2788828901612c11565b945050604086013567ffffffffffffffff811115612f4857612f4761426d565b5b612f5488828901612cd8565b935050606086013567ffffffffffffffff811115612f7557612f7461426d565b5b612f8188828901612cd8565b925050608086013567ffffffffffffffff811115612fa257612fa161426d565b5b612fae88828901612d45565b9150509295509295909350565b600080600080600060a08688031215612fd757612fd6614272565b5b6000612fe588828901612c11565b9550506020612ff688828901612c11565b945050604061300788828901612e55565b935050606061301888828901612e55565b925050608086013567ffffffffffffffff8111156130395761303861426d565b5b61304588828901612d45565b9150509295509295909350565b6000806040838503121561306957613068614272565b5b600061307785828601612c11565b925050602061308885828601612d06565b9150509250929050565b600080604083850312156130a9576130a8614272565b5b60006130b785828601612c11565b92505060206130c885828601612e55565b9150509250929050565b600080604083850312156130e9576130e8614272565b5b600083013567ffffffffffffffff8111156131075761310661426d565b5b61311385828601612c26565b925050602083013567ffffffffffffffff8111156131345761313361426d565b5b61314085828601612cd8565b9150509250929050565b60008060006040848603121561316357613162614272565b5b600084013567ffffffffffffffff8111156131815761318061426d565b5b61318d86828701612caa565b935050602084013567ffffffffffffffff8111156131ae576131ad61426d565b5b6131ba86828701612c54565b92509250509250925092565b6000602082840312156131dc576131db614272565b5b60006131ea84828501612d1b565b91505092915050565b60006020828403121561320957613208614272565b5b600061321784828501612d30565b91505092915050565b60006020828403121561323657613235614272565b5b600061324484828501612e55565b91505092915050565b60006020828403121561326357613262614272565b5b600061327184828501612e6a565b91505092915050565b60008060006040848603121561329357613292614272565b5b60006132a186828701612e55565b935050602084013567ffffffffffffffff8111156132c2576132c161426d565b5b6132ce86828701612d73565b92509250509250925092565b600080604083850312156132f1576132f0614272565b5b60006132ff85828601612e55565b925050602061331085828601612e55565b9150509250929050565b60006133268383613362565b60208301905092915050565b600061333e83836137d7565b60a08301905092915050565b600061335683836138a7565b60208301905092915050565b61336b81614005565b82525050565b61337a81614005565b82525050565b600061338b82613ec8565b6133958185613f26565b93506133a083613e98565b8060005b838110156133d15781516133b8888261331a565b97506133c383613eff565b9250506001810190506133a4565b5085935050505092915050565b60006133e982613ed3565b6133f38185613f37565b93506133fe83613ea8565b8060005b8381101561342f5781516134168882613332565b975061342183613f0c565b925050600181019050613402565b5085935050505092915050565b600061344782613ede565b6134518185613f48565b935061345c83613eb8565b8060005b8381101561348d578151613474888261334a565b975061347f83613f19565b925050600181019050613460565b5085935050505092915050565b6134a381614017565b82525050565b60006134b482613ee9565b6134be8185613f59565b93506134ce818560208601614088565b6134d781614277565b840191505092915050565b60006134ed82613ef4565b6134f78185613f6a565b9350613507818560208601614088565b61351081614277565b840191505092915050565b6000613528603483613f6a565b915061353382614295565b604082019050919050565b600061354b602883613f6a565b9150613556826142e4565b604082019050919050565b600061356e600d83613f6a565b915061357982614333565b602082019050919050565b6000613591601083613f6a565b915061359c8261435c565b602082019050919050565b60006135b4600a83613f6a565b91506135bf82614385565b602082019050919050565b60006135d7602b83613f6a565b91506135e2826143ae565b604082019050919050565b60006135fa602683613f6a565b9150613605826143fd565b604082019050919050565b600061361d602983613f6a565b91506136288261444c565b604082019050919050565b6000613640600683613f6a565b915061364b8261449b565b602082019050919050565b6000613663600f83613f6a565b915061366e826144c4565b602082019050919050565b6000613686602583613f6a565b9150613691826144ed565b604082019050919050565b60006136a9603283613f6a565b91506136b48261453c565b604082019050919050565b60006136cc600783613f6a565b91506136d78261458b565b602082019050919050565b60006136ef602a83613f6a565b91506136fa826145b4565b604082019050919050565b6000613712602083613f6a565b915061371d82614603565b602082019050919050565b6000613735603083613f6a565b91506137408261462c565b604082019050919050565b6000613758602983613f6a565b91506137638261467b565b604082019050919050565b600061377b602983613f6a565b9150613786826146ca565b604082019050919050565b600061379e602883613f6a565b91506137a982614719565b604082019050919050565b60006137c1602183613f6a565b91506137cc82614768565b604082019050919050565b60a0820160008201516137ed60008501826138a7565b50602082015161380060208501826138a7565b50604082015161381360408501826138a7565b50606082015161382660608501826138a7565b50608082015161383960808501826138a7565b50505050565b60a08201600082015161385560008501826138a7565b50602082015161386860208501826138a7565b50604082015161387b60408501826138a7565b50606082015161388e60608501826138a7565b5060808201516138a160808501826138a7565b50505050565b6138b08161406f565b82525050565b6138bf8161406f565b82525050565b60006020820190506138da6000830184613371565b92915050565b600060a0820190506138f56000830188613371565b6139026020830187613371565b8181036040830152613914818661343c565b90508181036060830152613928818561343c565b9050818103608083015261393c81846134a9565b90509695505050505050565b600060a08201905061395d6000830188613371565b61396a6020830187613371565b61397760408301866138b6565b61398460608301856138b6565b818103608083015261399681846134a9565b90509695505050505050565b600060208201905081810360008301526139bc8184613380565b905092915050565b600060208201905081810360008301526139de81846133de565b905092915050565b60006020820190508181036000830152613a00818461343c565b905092915050565b60006040820190508181036000830152613a22818561343c565b90508181036020830152613a36818461343c565b90509392505050565b6000602082019050613a54600083018461349a565b92915050565b60006020820190508181036000830152613a7481846134e2565b905092915050565b60006020820190508181036000830152613a958161351b565b9050919050565b60006020820190508181036000830152613ab58161353e565b9050919050565b60006020820190508181036000830152613ad581613561565b9050919050565b60006020820190508181036000830152613af581613584565b9050919050565b60006020820190508181036000830152613b15816135a7565b9050919050565b60006020820190508181036000830152613b35816135ca565b9050919050565b60006020820190508181036000830152613b55816135ed565b9050919050565b60006020820190508181036000830152613b7581613610565b9050919050565b60006020820190508181036000830152613b9581613633565b9050919050565b60006020820190508181036000830152613bb581613656565b9050919050565b60006020820190508181036000830152613bd581613679565b9050919050565b60006020820190508181036000830152613bf58161369c565b9050919050565b60006020820190508181036000830152613c15816136bf565b9050919050565b60006020820190508181036000830152613c35816136e2565b9050919050565b60006020820190508181036000830152613c5581613705565b9050919050565b60006020820190508181036000830152613c7581613728565b9050919050565b60006020820190508181036000830152613c958161374b565b9050919050565b60006020820190508181036000830152613cb58161376e565b9050919050565b60006020820190508181036000830152613cd581613791565b9050919050565b60006020820190508181036000830152613cf5816137b4565b9050919050565b600060a082019050613d11600083018461383f565b92915050565b6000602082019050613d2c60008301846138b6565b92915050565b6000604082019050613d4760008301856138b6565b613d5460208301846138b6565b9392505050565b60008083356001602003843603038112613d7857613d77614259565b5b80840192508235915067ffffffffffffffff821115613d9a57613d9961424f565b5b602083019250600182023603831315613db657613db5614263565b5b509250929050565b6000613dc8613dd9565b9050613dd482826140ed565b919050565b6000604051905090565b600067ffffffffffffffff821115613dfe57613dfd6141f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e2a57613e296141f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e5657613e556141f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e8257613e816141f4565b5b613e8b82614277565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613f868261406f565b9150613f918361406f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fc657613fc5614167565b5b828201905092915050565b6000613fdc8261406f565b9150613fe78361406f565b925082821015613ffa57613ff9614167565b5b828203905092915050565b60006140108261404f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140a657808201518184015260208101905061408b565b838111156140b5576000848401525b50505050565b600060028204905060018216806140d357607f821691505b602082108114156140e7576140e6614196565b5b50919050565b6140f682614277565b810181811067ffffffffffffffff82111715614115576141146141f4565b5b80604052505050565b60006141298261406f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415c5761415b614167565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156142425760046000803e61423f600051614288565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4976616c696420616d6f756e7400000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f43616e2774206d696e7400000000000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e762069640000000000000000000000000000000000000000000000000000600082015250565b7f496e76206d696e2d6d6178206964730000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e762069647300000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135354d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156147c75761484a565b6147cf613dd9565b60043d036004823e80513d602482011167ffffffffffffffff821117156147f757505061484a565b808201805167ffffffffffffffff811115614815575050505061484a565b80602083010160043d03850181111561483257505050505061484a565b614841826020018501866140ed565b82955050505050505b90565b61485681614005565b811461486157600080fd5b50565b61486d81614017565b811461487857600080fd5b50565b61488481614023565b811461488f57600080fd5b50565b61489b8161406f565b81146148a657600080fd5b5056fea2646970667358221220d8bb40dad20e0298d5871f1dec3f6911f5e20df923fcaaf3d802b8a7b4c098e964736f6c63430008070033

Deployed Bytecode Sourcemap

41377:4480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41658:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26322:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25295:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41430:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45508:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42210:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42023:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28467:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26806:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42329:377;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4835:103;;;;;;;;;;;;;:::i;:::-;;45386:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44754:624;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4156:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44131:615;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27440:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42950:1173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27699:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27989:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5093:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42714:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41658:29;;;;:::o;26322:318::-;26453:7;26519:1;26500:21;;:7;:21;;;;26478:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;26610:9;:13;26620:2;26610:13;;;;;;;;;;;:22;26624:7;26610:22;;;;;;;;;;;;;;;;26603:29;;26322:318;;;;:::o;25295:360::-;25442:4;25499:26;25484:41;;;:11;:41;;;;:110;;;;25557:37;25542:52;;;:11;:52;;;;25484:110;:163;;;;25611:36;25635:11;25611:23;:36::i;:::-;25484:163;25464:183;;25295:360;;;:::o;41430:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45508:346::-;45568:13;45708:1;45698:7;:11;:40;;;;;45724:14;;45713:7;:25;;45698:40;45676:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;45832:5;:14;45838:7;45832:14;;;;;;;;;;;45825:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45508:346;;;:::o;42210:111::-;42265:7;4390:12;:10;:12::i;:::-;4379:23;;:7;:5;:7::i;:::-;:23;;;:48;;;;4415:12;:10;:12::i;:::-;4404:23;;:6;4411:1;4404:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;4379:48;4371:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;42292:21:::1;42285:28;;42210:111:::0;:::o;42023:179::-;4390:12;:10;:12::i;:::-;4379:23;;:7;:5;:7::i;:::-;:23;;;:48;;;;4415:12;:10;:12::i;:::-;4404:23;;:6;4411:1;4404:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;4379:48;4371:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;42120:6:::1;42095:21;:31;;42087:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42166:10;42158:28;;:36;42187:6;42158:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42023:179:::0;:::o;28467:442::-;28708:12;:10;:12::i;:::-;28700:20;;:4;:20;;;:60;;;;28724:36;28741:4;28747:12;:10;:12::i;:::-;28724:16;:36::i;:::-;28700:60;28678:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28849:52;28872:4;28878:2;28882:3;28887:7;28896:4;28849:22;:52::i;:::-;28467:442;;;;;:::o;26806:561::-;26962:16;27037:3;:10;27018:8;:15;:29;26996:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;27129:30;27176:8;:15;27162:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27129:63;;27210:9;27205:122;27229:8;:15;27225:1;:19;27205:122;;;27285:30;27295:8;27304:1;27295:11;;;;;;;;:::i;:::-;;;;;;;;27308:3;27312:1;27308:6;;;;;;;;:::i;:::-;;;;;;;;27285:9;:30::i;:::-;27266:13;27280:1;27266:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;27246:3;;;;:::i;:::-;;;27205:122;;;;27346:13;27339:20;;;26806:561;;;;:::o;42329:377::-;42410:22;42450:27;42514:16;:23;;;;42480:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;42450:98;;42564:13;42559:118;42591:4;:11;42583:5;:19;42559:118;;;42642:16;42659:5;42642:23;;;;;;;;:::i;:::-;;;;;;;;;;;;42628:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;42633:5;42628:11;;;;;;;;:::i;:::-;;;;;;;:37;;;;42604:7;;;;;:::i;:::-;;;;42559:118;;;;42694:4;42687:11;;;42329:377;:::o;4835:103::-;4390:12;:10;:12::i;:::-;4379:23;;:7;:5;:7::i;:::-;:23;;;:48;;;;4415:12;:10;:12::i;:::-;4404:23;;:6;4411:1;4404:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;4379:48;4371:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;4900:30:::1;4927:1;4900:18;:30::i;:::-;4835:103::o:0;45386:114::-;4390:12;:10;:12::i;:::-;4379:23;;:7;:5;:7::i;:::-;:23;;;:48;;;;4415:12;:10;:12::i;:::-;4404:23;;:6;4411:1;4404:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;4379:48;4371:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;45488:4:::1;;45470:5;:15;45476:8;45470:15;;;;;;;;;;;:22;;;;;;;:::i;:::-;;45386:114:::0;;;:::o;44754:624::-;44859:20;;:::i;:::-;44902:13;44897:443;44929:16;:23;;;;44921:5;:31;44897:443;;;44978:31;45012:16;45029:5;45012:23;;;;;;;;:::i;:::-;;;;;;;;;;;;44978:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45084:10;:15;;;45072:8;:27;;:73;;;;;45132:10;:13;;;45120:8;:25;;45072:73;:189;;;;;45241:10;:20;;;45214:6;45166:13;:33;45180:10;:18;;;45166:33;;;;;;;;;;;:45;45200:10;45166:45;;;;;;;;;;;;;;;;:54;;;;:::i;:::-;:95;;45072:189;45050:279;;;45303:10;45296:17;;;;;;45050:279;44963:377;44954:7;;;;;:::i;:::-;;;;44897:443;;;;45350:20;;;;;;;;;;:::i;:::-;;;;;;;;44754:624;;;;;:::o;4156:90::-;4202:7;4229:6;4236:1;4229:9;;;;;;;:::i;:::-;;;;;;;;;;;;;4222:16;;4156:90;:::o;44131:615::-;44206:1;44197:6;:10;44189:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;44236:18;44283:42;44257:89;;;44347:10;44257:101;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44236:122;;44369:25;44397:33;44411:10;44423:6;44397:13;:33::i;:::-;44369:61;;44488:1;44445:13;:27;44459:4;:12;;;44445:27;;;;;;;;;;;:39;44473:10;44445:39;;;;;;;;;;;;;;;;:44;44441:184;;;44527:4;:9;;;44514;:22;44506:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44572:10;:24;44583:4;:12;;;44572:24;;;;;;;;;;;44602:10;44572:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44441:184;44678:6;44635:13;:27;44649:4;:12;;;44635:27;;;;;;;;;;;:39;44663:10;44635:39;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;44695:43;44701:10;44713:4;:12;;;44727:6;44695:43;;;;;;;;;;;;:5;:43::i;:::-;44178:568;;44131:615;:::o;27440:187::-;27567:52;27586:12;:10;:12::i;:::-;27600:8;27610;27567:18;:52::i;:::-;27440:187;;:::o;42950:1173::-;4390:12;:10;:12::i;:::-;4379:23;;:7;:5;:7::i;:::-;:23;;;:48;;;;4415:12;:10;:12::i;:::-;4404:23;;:6;4411:1;4404:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;4379:48;4371:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;43090:16:::1;;43083:23;;;;:::i;:::-;43117:11;43148:1;43131:14;;:18;;;;:::i;:::-;43117:32;;43165:13;43160:478;43192:5;:12;43184:5;:20;43160:478;;;43258:1;43243:5;:12;:16;;;;:::i;:::-;43234:5;:25;43230:181;;43336:5;43350:1;43342:5;:9;;;;:::i;:::-;43336:16;;;;;;;;:::i;:::-;;;;;;;;:24;;;43331:1;43308:5;43314;43308:12;;;;;;;;:::i;:::-;;;;;;;;:20;;;:24;;;;:::i;:::-;:52;43278:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;43230:181;43437:5;43443;43437:12;;;;;;;;:::i;:::-;;;;;;;;:20;;;43430:3;:27;43426:59;;43465:5;43471;43465:12;;;;;;;;:::i;:::-;;;;;;;;:20;;;43459:26;;43426:59;43500:16;43522:5;43528;43522:12;;;;;;;;:::i;:::-;;;;;;;;43500:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43580:8;;43589:5;43580:15;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;43550:5;:27;43556:5;43562;43556:12;;;;;;;;:::i;:::-;;;;;;;;:20;;;43550:27;;;;;;;;;;;:45;;;;;;;:::i;:::-;;43610:14;;:16;;;;;;;;;:::i;:::-;;;;;;43206:7;;;;;:::i;:::-;;;;43160:478;;;;43684:5;:12;43680:1;43663:14;;:18;;;;:::i;:::-;:33;;;;:::i;:::-;43656:3;:40;43648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43072:1051;42950:1173:::0;;;:::o;27699:218::-;27843:4;27872:18;:27;27891:7;27872:27;;;;;;;;;;;;;;;:37;27900:8;27872:37;;;;;;;;;;;;;;;;;;;;;;;;;27865:44;;27699:218;;;;:::o;27989:401::-;28205:12;:10;:12::i;:::-;28197:20;;:4;:20;;;:60;;;;28221:36;28238:4;28244:12;:10;:12::i;:::-;28221:16;:36::i;:::-;28197:60;28175:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;28337:45;28355:4;28361:2;28365;28369:6;28377:4;28337:17;:45::i;:::-;27989:401;;;;;:::o;5093:238::-;4390:12;:10;:12::i;:::-;4379:23;;:7;:5;:7::i;:::-;:23;;;:48;;;;4415:12;:10;:12::i;:::-;4404:23;;:6;4411:1;4404:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;4379:48;4371:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;5216:1:::1;5196:22;;:8;:22;;;;5174:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5295:28;5314:8;5295:18;:28::i;:::-;5093:238:::0;:::o;42714:228::-;42804:16;42856:1;42846:7;:11;:40;;;;;42872:14;;42861:7;:25;;42846:40;42838:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42915:10;:19;42926:7;42915:19;;;;;;;;;;;42908:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42714:228;;;:::o;16439:207::-;16569:4;16613:25;16598:40;;;:11;:40;;;;16591:47;;16439:207;;;:::o;2831:98::-;2884:7;2911:10;2904:17;;2831:98;:::o;30677:1249::-;30918:7;:14;30904:3;:10;:28;30882:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;31033:1;31019:16;;:2;:16;;;;31011:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31090:16;31109:12;:10;:12::i;:::-;31090:31;;31134:60;31155:8;31165:4;31171:2;31175:3;31180:7;31189:4;31134:20;:60::i;:::-;31212:9;31207:470;31231:3;:10;31227:1;:14;31207:470;;;31263:10;31276:3;31280:1;31276:6;;;;;;;;:::i;:::-;;;;;;;;31263:19;;31297:14;31314:7;31322:1;31314:10;;;;;;;;:::i;:::-;;;;;;;;31297:27;;31341:19;31363:9;:13;31373:2;31363:13;;;;;;;;;;;:19;31377:4;31363:19;;;;;;;;;;;;;;;;31341:41;;31438:6;31423:11;:21;;31397:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;31602:6;31588:11;:20;31566:9;:13;31576:2;31566:13;;;;;;;;;;;:19;31580:4;31566:19;;;;;;;;;;;;;;;:42;;;;31659:6;31638:9;:13;31648:2;31638:13;;;;;;;;;;;:17;31652:2;31638:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31248:429;;;31243:3;;;;:::i;:::-;;;31207:470;;;;31724:2;31694:47;;31718:4;31694:47;;31708:8;31694:47;;;31728:3;31733:7;31694:47;;;;;;;:::i;:::-;;;;;;;;31754:164;31804:8;31827:4;31846:2;31863:3;31881:7;31903:4;31754:35;:164::i;:::-;30871:1055;30677:1249;;;;;:::o;5491:197::-;5565:16;5584:6;5591:1;5584:9;;;;;;;:::i;:::-;;;;;;;;;;;;;5565:28;;5616:8;5604:6;5611:1;5604:9;;;;;;;:::i;:::-;;;;:20;;;;;;;;;;;;;;;;;;5671:8;5640:40;;5661:8;5640:40;;;;;;;;;;;;5554:134;5491:197;:::o;33244:747::-;33411:1;33397:16;;:2;:16;;;;33389:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33464:16;33483:12;:10;:12::i;:::-;33464:31;;33508:191;33543:8;33574:1;33591:2;33608:21;33626:2;33608:17;:21::i;:::-;33644:25;33662:6;33644:17;:25::i;:::-;33684:4;33508:20;:191::i;:::-;33733:6;33712:9;:13;33722:2;33712:13;;;;;;;;;;;:17;33726:2;33712:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33792:2;33755:52;;33788:1;33755:52;;33770:8;33755:52;;;33796:2;33800:6;33755:52;;;;;;;:::i;:::-;;;;;;;;33820:163;33865:8;33896:1;33913:2;33930;33947:6;33968:4;33820:30;:163::i;:::-;33378:613;33244:747;;;;:::o;37517:331::-;37672:8;37663:17;;:5;:17;;;;37655:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37775:8;37737:18;:25;37756:5;37737:25;;;;;;;;;;;;;;;:35;37763:8;37737:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37821:8;37799:41;;37814:5;37799:41;;;37831:8;37799:41;;;;;;:::i;:::-;;;;;;;;37517:331;;;:::o;29373:946::-;29575:1;29561:16;;:2;:16;;;;29553:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29632:16;29651:12;:10;:12::i;:::-;29632:31;;29676:185;29711:8;29734:4;29753:2;29770:21;29788:2;29770:17;:21::i;:::-;29806:25;29824:6;29806:17;:25::i;:::-;29846:4;29676:20;:185::i;:::-;29874:19;29896:9;:13;29906:2;29896:13;;;;;;;;;;;:19;29910:4;29896:19;;;;;;;;;;;;;;;;29874:41;;29963:6;29948:11;:21;;29926:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;30111:6;30097:11;:20;30075:9;:13;30085:2;30075:13;;;;;;;;;;;:19;30089:4;30075:19;;;;;;;;;;;;;;;:42;;;;30160:6;30139:9;:13;30149:2;30139:13;;;;;;;;;;;:17;30153:2;30139:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30215:2;30184:46;;30209:4;30184:46;;30199:8;30184:46;;;30219:2;30223:6;30184:46;;;;;;;:::i;:::-;;;;;;;;30243:68;30274:8;30284:4;30290:2;30294;30298:6;30306:4;30243:30;:68::i;:::-;29542:777;;29373:946;;;;;:::o;38804:221::-;;;;;;;:::o;39939:975::-;40179:15;:2;:13;;;:15::i;:::-;40175:732;;;40249:2;40232:43;;;40298:8;40329:4;40356:3;40382:7;40412:4;40232:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40211:685;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40769:6;40762:14;;;;;;;;;;;:::i;:::-;;;;;;;;40211:685;;;40818:62;;;;;;;;;;:::i;:::-;;;;;;;;40211:685;40532:48;;;40520:60;;;:8;:60;;;;40494:199;;40623:50;;;;;;;;;;:::i;:::-;;;;;;;;40494:199;40449:259;40175:732;39939:975;;;;;;:::o;40922:230::-;41015:16;41049:22;41088:1;41074:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41049:41;;41112:7;41101:5;41107:1;41101:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;41139:5;41132:12;;;40922:230;;;:::o;39033:898::-;39248:15;:2;:13;;;:15::i;:::-;39244:680;;;39318:2;39301:38;;;39362:8;39393:4;39420:2;39445:6;39474:4;39301:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39280:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39786:6;39779:14;;;;;;;;;;;:::i;:::-;;;;;;;;39280:633;;;39835:62;;;;;;;;;;:::i;:::-;;;;;;;;39280:633;39572:43;;;39560:55;;;:8;:55;;;;39556:154;;39640:50;;;;;;;;;;:::i;:::-;;;;;;;;39556:154;39511:214;39244:680;39033:898;;;;;;:::o;6926:326::-;6986:4;7243:1;7221:7;:19;;;:23;7214:30;;6926:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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;799:815::-;926:5;951:112;967:95;1055:6;967:95;:::i;:::-;951:112;:::i;:::-;942:121;;1083:5;1112:6;1105:5;1098:21;1146:4;1139:5;1135:16;1128:23;;1172:6;1222:3;1214:4;1206:6;1202:17;1197:3;1193:27;1190:36;1187:143;;;1241:79;;:::i;:::-;1187:143;1354:1;1339:269;1364:6;1361:1;1358:13;1339:269;;;1432:3;1461:68;1525:3;1513:10;1461:68;:::i;:::-;1456:3;1449:81;1559:4;1554:3;1550:14;1543:21;;1593:4;1588:3;1584:14;1577:21;;1399:209;1386:1;1383;1379:9;1374:14;;1339:269;;;1343:14;932:682;;799:815;;;;;:::o;1637:722::-;1733:5;1758:81;1774:64;1831:6;1774:64;:::i;:::-;1758:81;:::i;:::-;1749:90;;1859:5;1888:6;1881:5;1874:21;1922:4;1915:5;1911:16;1904:23;;1948:6;1998:3;1990:4;1982:6;1978:17;1973:3;1969:27;1966:36;1963:143;;;2017:79;;:::i;:::-;1963:143;2130:1;2115:238;2140:6;2137:1;2134:13;2115:238;;;2208:3;2237:37;2270:3;2258:10;2237:37;:::i;:::-;2232:3;2225:50;2304:4;2299:3;2295:14;2288:21;;2338:4;2333:3;2329:14;2322:21;;2175:178;2162:1;2159;2155:9;2150:14;;2115:238;;;2119:14;1739:620;;1637:722;;;;;:::o;2365:410::-;2442:5;2467:65;2483:48;2524:6;2483:48;:::i;:::-;2467:65;:::i;:::-;2458:74;;2555:6;2548:5;2541:21;2593:4;2586:5;2582:16;2631:3;2622:6;2617:3;2613:16;2610:25;2607:112;;;2638:79;;:::i;:::-;2607:112;2728:41;2762:6;2757:3;2752;2728:41;:::i;:::-;2448:327;2365:410;;;;;:::o;2781:139::-;2827:5;2865:6;2852:20;2843:29;;2881:33;2908:5;2881:33;:::i;:::-;2781:139;;;;:::o;2943:370::-;3014:5;3063:3;3056:4;3048:6;3044:17;3040:27;3030:122;;3071:79;;:::i;:::-;3030:122;3188:6;3175:20;3213:94;3303:3;3295:6;3288:4;3280:6;3276:17;3213:94;:::i;:::-;3204:103;;3020:293;2943:370;;;;:::o;3335:580::-;3420:8;3430:6;3480:3;3473:4;3465:6;3461:17;3457:27;3447:122;;3488:79;;:::i;:::-;3447:122;3601:6;3588:20;3578:30;;3631:18;3623:6;3620:30;3617:117;;;3653:79;;:::i;:::-;3617:117;3767:4;3759:6;3755:17;3743:29;;3821:3;3813:4;3805:6;3801:17;3791:8;3787:32;3784:41;3781:128;;;3828:79;;:::i;:::-;3781:128;3335:580;;;;;:::o;3968:432::-;4070:5;4119:3;4112:4;4104:6;4100:17;4096:27;4086:122;;4127:79;;:::i;:::-;4086:122;4244:6;4231:20;4269:125;4390:3;4382:6;4375:4;4367:6;4363:17;4269:125;:::i;:::-;4260:134;;4076:324;3968:432;;;;:::o;4423:370::-;4494:5;4543:3;4536:4;4528:6;4524:17;4520:27;4510:122;;4551:79;;:::i;:::-;4510:122;4668:6;4655:20;4693:94;4783:3;4775:6;4768:4;4760:6;4756:17;4693:94;:::i;:::-;4684:103;;4500:293;4423:370;;;;:::o;4799:133::-;4842:5;4880:6;4867:20;4858:29;;4896:30;4920:5;4896:30;:::i;:::-;4799:133;;;;:::o;4938:137::-;4983:5;5021:6;5008:20;4999:29;;5037:32;5063:5;5037:32;:::i;:::-;4938:137;;;;:::o;5081:141::-;5137:5;5168:6;5162:13;5153:22;;5184:32;5210:5;5184:32;:::i;:::-;5081:141;;;;:::o;5241:338::-;5296:5;5345:3;5338:4;5330:6;5326:17;5322:27;5312:122;;5353:79;;:::i;:::-;5312:122;5470:6;5457:20;5495:78;5569:3;5561:6;5554:4;5546:6;5542:17;5495:78;:::i;:::-;5486:87;;5302:277;5241:338;;;;:::o;5599:553::-;5657:8;5667:6;5717:3;5710:4;5702:6;5698:17;5694:27;5684:122;;5725:79;;:::i;:::-;5684:122;5838:6;5825:20;5815:30;;5868:18;5860:6;5857:30;5854:117;;;5890:79;;:::i;:::-;5854:117;6004:4;5996:6;5992:17;5980:29;;6058:3;6050:4;6042:6;6038:17;6028:8;6024:32;6021:41;6018:128;;;6065:79;;:::i;:::-;6018:128;5599:553;;;;;:::o;6203:1070::-;6283:5;6327:4;6315:9;6310:3;6306:19;6302:30;6299:117;;;6335:79;;:::i;:::-;6299:117;6434:21;6450:4;6434:21;:::i;:::-;6425:30;;6514:1;6554:49;6599:3;6590:6;6579:9;6575:22;6554:49;:::i;:::-;6547:4;6540:5;6536:16;6529:75;6465:150;6672:2;6713:49;6758:3;6749:6;6738:9;6734:22;6713:49;:::i;:::-;6706:4;6699:5;6695:16;6688:75;6625:149;6836:2;6877:49;6922:3;6913:6;6902:9;6898:22;6877:49;:::i;:::-;6870:4;6863:5;6859:16;6852:75;6784:154;7002:2;7043:49;7088:3;7079:6;7068:9;7064:22;7043:49;:::i;:::-;7036:4;7029:5;7025:16;7018:75;6948:156;7163:3;7205:49;7250:3;7241:6;7230:9;7226:22;7205:49;:::i;:::-;7198:4;7191:5;7187:16;7180:75;7114:152;6203:1070;;;;:::o;7279:139::-;7325:5;7363:6;7350:20;7341:29;;7379:33;7406:5;7379:33;:::i;:::-;7279:139;;;;:::o;7424:143::-;7481:5;7512:6;7506:13;7497:22;;7528:33;7555:5;7528:33;:::i;:::-;7424:143;;;;:::o;7573:329::-;7632:6;7681:2;7669:9;7660:7;7656:23;7652:32;7649:119;;;7687:79;;:::i;:::-;7649:119;7807:1;7832:53;7877:7;7868:6;7857:9;7853:22;7832:53;:::i;:::-;7822:63;;7778:117;7573:329;;;;:::o;7908:474::-;7976:6;7984;8033:2;8021:9;8012:7;8008:23;8004:32;8001:119;;;8039:79;;:::i;:::-;8001:119;8159:1;8184:53;8229:7;8220:6;8209:9;8205:22;8184:53;:::i;:::-;8174:63;;8130:117;8286:2;8312:53;8357:7;8348:6;8337:9;8333:22;8312:53;:::i;:::-;8302:63;;8257:118;7908:474;;;;;:::o;8388:1509::-;8542:6;8550;8558;8566;8574;8623:3;8611:9;8602:7;8598:23;8594:33;8591:120;;;8630:79;;:::i;:::-;8591:120;8750:1;8775:53;8820:7;8811:6;8800:9;8796:22;8775:53;:::i;:::-;8765:63;;8721:117;8877:2;8903:53;8948:7;8939:6;8928:9;8924:22;8903:53;:::i;:::-;8893:63;;8848:118;9033:2;9022:9;9018:18;9005:32;9064:18;9056:6;9053:30;9050:117;;;9086:79;;:::i;:::-;9050:117;9191:78;9261:7;9252:6;9241:9;9237:22;9191:78;:::i;:::-;9181:88;;8976:303;9346:2;9335:9;9331:18;9318:32;9377:18;9369:6;9366:30;9363:117;;;9399:79;;:::i;:::-;9363:117;9504:78;9574:7;9565:6;9554:9;9550:22;9504:78;:::i;:::-;9494:88;;9289:303;9659:3;9648:9;9644:19;9631:33;9691:18;9683:6;9680:30;9677:117;;;9713:79;;:::i;:::-;9677:117;9818:62;9872:7;9863:6;9852:9;9848:22;9818:62;:::i;:::-;9808:72;;9602:288;8388:1509;;;;;;;;:::o;9903:1089::-;10007:6;10015;10023;10031;10039;10088:3;10076:9;10067:7;10063:23;10059:33;10056:120;;;10095:79;;:::i;:::-;10056:120;10215:1;10240:53;10285:7;10276:6;10265:9;10261:22;10240:53;:::i;:::-;10230:63;;10186:117;10342:2;10368:53;10413:7;10404:6;10393:9;10389:22;10368:53;:::i;:::-;10358:63;;10313:118;10470:2;10496:53;10541:7;10532:6;10521:9;10517:22;10496:53;:::i;:::-;10486:63;;10441:118;10598:2;10624:53;10669:7;10660:6;10649:9;10645:22;10624:53;:::i;:::-;10614:63;;10569:118;10754:3;10743:9;10739:19;10726:33;10786:18;10778:6;10775:30;10772:117;;;10808:79;;:::i;:::-;10772:117;10913:62;10967:7;10958:6;10947:9;10943:22;10913:62;:::i;:::-;10903:72;;10697:288;9903:1089;;;;;;;;:::o;10998:468::-;11063:6;11071;11120:2;11108:9;11099:7;11095:23;11091:32;11088:119;;;11126:79;;:::i;:::-;11088:119;11246:1;11271:53;11316:7;11307:6;11296:9;11292:22;11271:53;:::i;:::-;11261:63;;11217:117;11373:2;11399:50;11441:7;11432:6;11421:9;11417:22;11399:50;:::i;:::-;11389:60;;11344:115;10998:468;;;;;:::o;11472:474::-;11540:6;11548;11597:2;11585:9;11576:7;11572:23;11568:32;11565:119;;;11603:79;;:::i;:::-;11565:119;11723:1;11748:53;11793:7;11784:6;11773:9;11769:22;11748:53;:::i;:::-;11738:63;;11694:117;11850:2;11876:53;11921:7;11912:6;11901:9;11897:22;11876:53;:::i;:::-;11866:63;;11821:118;11472:474;;;;;:::o;11952:894::-;12070:6;12078;12127:2;12115:9;12106:7;12102:23;12098:32;12095:119;;;12133:79;;:::i;:::-;12095:119;12281:1;12270:9;12266:17;12253:31;12311:18;12303:6;12300:30;12297:117;;;12333:79;;:::i;:::-;12297:117;12438:78;12508:7;12499:6;12488:9;12484:22;12438:78;:::i;:::-;12428:88;;12224:302;12593:2;12582:9;12578:18;12565:32;12624:18;12616:6;12613:30;12610:117;;;12646:79;;:::i;:::-;12610:117;12751:78;12821:7;12812:6;12801:9;12797:22;12751:78;:::i;:::-;12741:88;;12536:303;11952:894;;;;;:::o;12852:1000::-;13015:6;13023;13031;13080:2;13068:9;13059:7;13055:23;13051:32;13048:119;;;13086:79;;:::i;:::-;13048:119;13234:1;13223:9;13219:17;13206:31;13264:18;13256:6;13253:30;13250:117;;;13286:79;;:::i;:::-;13250:117;13391:109;13492:7;13483:6;13472:9;13468:22;13391:109;:::i;:::-;13381:119;;13177:333;13577:2;13566:9;13562:18;13549:32;13608:18;13600:6;13597:30;13594:117;;;13630:79;;:::i;:::-;13594:117;13743:92;13827:7;13818:6;13807:9;13803:22;13743:92;:::i;:::-;13725:110;;;;13520:325;12852:1000;;;;;:::o;13858:327::-;13916:6;13965:2;13953:9;13944:7;13940:23;13936:32;13933:119;;;13971:79;;:::i;:::-;13933:119;14091:1;14116:52;14160:7;14151:6;14140:9;14136:22;14116:52;:::i;:::-;14106:62;;14062:116;13858:327;;;;:::o;14191:349::-;14260:6;14309:2;14297:9;14288:7;14284:23;14280:32;14277:119;;;14315:79;;:::i;:::-;14277:119;14435:1;14460:63;14515:7;14506:6;14495:9;14491:22;14460:63;:::i;:::-;14450:73;;14406:127;14191:349;;;;:::o;14546:329::-;14605:6;14654:2;14642:9;14633:7;14629:23;14625:32;14622:119;;;14660:79;;:::i;:::-;14622:119;14780:1;14805:53;14850:7;14841:6;14830:9;14826:22;14805:53;:::i;:::-;14795:63;;14751:117;14546:329;;;;:::o;14881:351::-;14951:6;15000:2;14988:9;14979:7;14975:23;14971:32;14968:119;;;15006:79;;:::i;:::-;14968:119;15126:1;15151:64;15207:7;15198:6;15187:9;15183:22;15151:64;:::i;:::-;15141:74;;15097:128;14881:351;;;;:::o;15238:674::-;15318:6;15326;15334;15383:2;15371:9;15362:7;15358:23;15354:32;15351:119;;;15389:79;;:::i;:::-;15351:119;15509:1;15534:53;15579:7;15570:6;15559:9;15555:22;15534:53;:::i;:::-;15524:63;;15480:117;15664:2;15653:9;15649:18;15636:32;15695:18;15687:6;15684:30;15681:117;;;15717:79;;:::i;:::-;15681:117;15830:65;15887:7;15878:6;15867:9;15863:22;15830:65;:::i;:::-;15812:83;;;;15607:298;15238:674;;;;;:::o;15918:474::-;15986:6;15994;16043:2;16031:9;16022:7;16018:23;16014:32;16011:119;;;16049:79;;:::i;:::-;16011:119;16169:1;16194:53;16239:7;16230:6;16219:9;16215:22;16194:53;:::i;:::-;16184:63;;16140:117;16296:2;16322:53;16367:7;16358:6;16347:9;16343:22;16322:53;:::i;:::-;16312:63;;16267:118;15918:474;;;;;:::o;16398:179::-;16467:10;16488:46;16530:3;16522:6;16488:46;:::i;:::-;16566:4;16561:3;16557:14;16543:28;;16398:179;;;;:::o;16583:303::-;16714:10;16735:108;16839:3;16831:6;16735:108;:::i;:::-;16875:4;16870:3;16866:14;16852:28;;16583:303;;;;:::o;16892:179::-;16961:10;16982:46;17024:3;17016:6;16982:46;:::i;:::-;17060:4;17055:3;17051:14;17037:28;;16892:179;;;;:::o;17077:108::-;17154:24;17172:5;17154:24;:::i;:::-;17149:3;17142:37;17077:108;;:::o;17191:118::-;17278:24;17296:5;17278:24;:::i;:::-;17273:3;17266:37;17191:118;;:::o;17345:732::-;17464:3;17493:54;17541:5;17493:54;:::i;:::-;17563:86;17642:6;17637:3;17563:86;:::i;:::-;17556:93;;17673:56;17723:5;17673:56;:::i;:::-;17752:7;17783:1;17768:284;17793:6;17790:1;17787:13;17768:284;;;17869:6;17863:13;17896:63;17955:3;17940:13;17896:63;:::i;:::-;17889:70;;17982:60;18035:6;17982:60;:::i;:::-;17972:70;;17828:224;17815:1;17812;17808:9;17803:14;;17768:284;;;17772:14;18068:3;18061:10;;17469:608;;;17345:732;;;;:::o;18173:980::-;18354:3;18383:85;18462:5;18383:85;:::i;:::-;18484:117;18594:6;18589:3;18484:117;:::i;:::-;18477:124;;18625:87;18706:5;18625:87;:::i;:::-;18735:7;18766:1;18751:377;18776:6;18773:1;18770:13;18751:377;;;18852:6;18846:13;18879:125;19000:3;18985:13;18879:125;:::i;:::-;18872:132;;19027:91;19111:6;19027:91;:::i;:::-;19017:101;;18811:317;18798:1;18795;18791:9;18786:14;;18751:377;;;18755:14;19144:3;19137:10;;18359:794;;;18173:980;;;;:::o;19189:732::-;19308:3;19337:54;19385:5;19337:54;:::i;:::-;19407:86;19486:6;19481:3;19407:86;:::i;:::-;19400:93;;19517:56;19567:5;19517:56;:::i;:::-;19596:7;19627:1;19612:284;19637:6;19634:1;19631:13;19612:284;;;19713:6;19707:13;19740:63;19799:3;19784:13;19740:63;:::i;:::-;19733:70;;19826:60;19879:6;19826:60;:::i;:::-;19816:70;;19672:224;19659:1;19656;19652:9;19647:14;;19612:284;;;19616:14;19912:3;19905:10;;19313:608;;;19189:732;;;;:::o;19927:109::-;20008:21;20023:5;20008:21;:::i;:::-;20003:3;19996:34;19927:109;;:::o;20042:360::-;20128:3;20156:38;20188:5;20156:38;:::i;:::-;20210:70;20273:6;20268:3;20210:70;:::i;:::-;20203:77;;20289:52;20334:6;20329:3;20322:4;20315:5;20311:16;20289:52;:::i;:::-;20366:29;20388:6;20366:29;:::i;:::-;20361:3;20357:39;20350:46;;20132:270;20042:360;;;;:::o;20408:364::-;20496:3;20524:39;20557:5;20524:39;:::i;:::-;20579:71;20643:6;20638:3;20579:71;:::i;:::-;20572:78;;20659:52;20704:6;20699:3;20692:4;20685:5;20681:16;20659:52;:::i;:::-;20736:29;20758:6;20736:29;:::i;:::-;20731:3;20727:39;20720:46;;20500:272;20408:364;;;;:::o;20778:366::-;20920:3;20941:67;21005:2;21000:3;20941:67;:::i;:::-;20934:74;;21017:93;21106:3;21017:93;:::i;:::-;21135:2;21130:3;21126:12;21119:19;;20778:366;;;:::o;21150:::-;21292:3;21313:67;21377:2;21372:3;21313:67;:::i;:::-;21306:74;;21389:93;21478:3;21389:93;:::i;:::-;21507:2;21502:3;21498:12;21491:19;;21150:366;;;:::o;21522:::-;21664:3;21685:67;21749:2;21744:3;21685:67;:::i;:::-;21678:74;;21761:93;21850:3;21761:93;:::i;:::-;21879:2;21874:3;21870:12;21863:19;;21522:366;;;:::o;21894:::-;22036:3;22057:67;22121:2;22116:3;22057:67;:::i;:::-;22050:74;;22133:93;22222:3;22133:93;:::i;:::-;22251:2;22246:3;22242:12;22235:19;;21894:366;;;:::o;22266:::-;22408:3;22429:67;22493:2;22488:3;22429:67;:::i;:::-;22422:74;;22505:93;22594:3;22505:93;:::i;:::-;22623:2;22618:3;22614:12;22607:19;;22266:366;;;:::o;22638:::-;22780:3;22801:67;22865:2;22860:3;22801:67;:::i;:::-;22794:74;;22877:93;22966:3;22877:93;:::i;:::-;22995:2;22990:3;22986:12;22979:19;;22638:366;;;:::o;23010:::-;23152:3;23173:67;23237:2;23232:3;23173:67;:::i;:::-;23166:74;;23249:93;23338:3;23249:93;:::i;:::-;23367:2;23362:3;23358:12;23351:19;;23010:366;;;:::o;23382:::-;23524:3;23545:67;23609:2;23604:3;23545:67;:::i;:::-;23538:74;;23621:93;23710:3;23621:93;:::i;:::-;23739:2;23734:3;23730:12;23723:19;;23382:366;;;:::o;23754:365::-;23896:3;23917:66;23981:1;23976:3;23917:66;:::i;:::-;23910:73;;23992:93;24081:3;23992:93;:::i;:::-;24110:2;24105:3;24101:12;24094:19;;23754:365;;;:::o;24125:366::-;24267:3;24288:67;24352:2;24347:3;24288:67;:::i;:::-;24281:74;;24364:93;24453:3;24364:93;:::i;:::-;24482:2;24477:3;24473:12;24466:19;;24125:366;;;:::o;24497:::-;24639:3;24660:67;24724:2;24719:3;24660:67;:::i;:::-;24653:74;;24736:93;24825:3;24736:93;:::i;:::-;24854:2;24849:3;24845:12;24838:19;;24497:366;;;:::o;24869:::-;25011:3;25032:67;25096:2;25091:3;25032:67;:::i;:::-;25025:74;;25108:93;25197:3;25108:93;:::i;:::-;25226:2;25221:3;25217:12;25210:19;;24869:366;;;:::o;25241:365::-;25383:3;25404:66;25468:1;25463:3;25404:66;:::i;:::-;25397:73;;25479:93;25568:3;25479:93;:::i;:::-;25597:2;25592:3;25588:12;25581:19;;25241:365;;;:::o;25612:366::-;25754:3;25775:67;25839:2;25834:3;25775:67;:::i;:::-;25768:74;;25851:93;25940:3;25851:93;:::i;:::-;25969:2;25964:3;25960:12;25953:19;;25612:366;;;:::o;25984:::-;26126:3;26147:67;26211:2;26206:3;26147:67;:::i;:::-;26140:74;;26223:93;26312:3;26223:93;:::i;:::-;26341:2;26336:3;26332:12;26325:19;;25984:366;;;:::o;26356:::-;26498:3;26519:67;26583:2;26578:3;26519:67;:::i;:::-;26512:74;;26595:93;26684:3;26595:93;:::i;:::-;26713:2;26708:3;26704:12;26697:19;;26356:366;;;:::o;26728:::-;26870:3;26891:67;26955:2;26950:3;26891:67;:::i;:::-;26884:74;;26967:93;27056:3;26967:93;:::i;:::-;27085:2;27080:3;27076:12;27069:19;;26728:366;;;:::o;27100:::-;27242:3;27263:67;27327:2;27322:3;27263:67;:::i;:::-;27256:74;;27339:93;27428:3;27339:93;:::i;:::-;27457:2;27452:3;27448:12;27441:19;;27100:366;;;:::o;27472:::-;27614:3;27635:67;27699:2;27694:3;27635:67;:::i;:::-;27628:74;;27711:93;27800:3;27711:93;:::i;:::-;27829:2;27824:3;27820:12;27813:19;;27472:366;;;:::o;27844:::-;27986:3;28007:67;28071:2;28066:3;28007:67;:::i;:::-;28000:74;;28083:93;28172:3;28083:93;:::i;:::-;28201:2;28196:3;28192:12;28185:19;;27844:366;;;:::o;28302:1037::-;28451:4;28446:3;28442:14;28538:4;28531:5;28527:16;28521:23;28557:63;28614:4;28609:3;28605:14;28591:12;28557:63;:::i;:::-;28466:164;28710:4;28703:5;28699:16;28693:23;28729:63;28786:4;28781:3;28777:14;28763:12;28729:63;:::i;:::-;28640:162;28887:4;28880:5;28876:16;28870:23;28906:63;28963:4;28958:3;28954:14;28940:12;28906:63;:::i;:::-;28812:167;29066:4;29059:5;29055:16;29049:23;29085:63;29142:4;29137:3;29133:14;29119:12;29085:63;:::i;:::-;28989:169;29240:4;29233:5;29229:16;29223:23;29259:63;29316:4;29311:3;29307:14;29293:12;29259:63;:::i;:::-;29168:164;28420:919;28302:1037;;:::o;29431:1047::-;29590:4;29585:3;29581:14;29677:4;29670:5;29666:16;29660:23;29696:63;29753:4;29748:3;29744:14;29730:12;29696:63;:::i;:::-;29605:164;29849:4;29842:5;29838:16;29832:23;29868:63;29925:4;29920:3;29916:14;29902:12;29868:63;:::i;:::-;29779:162;30026:4;30019:5;30015:16;30009:23;30045:63;30102:4;30097:3;30093:14;30079:12;30045:63;:::i;:::-;29951:167;30205:4;30198:5;30194:16;30188:23;30224:63;30281:4;30276:3;30272:14;30258:12;30224:63;:::i;:::-;30128:169;30379:4;30372:5;30368:16;30362:23;30398:63;30455:4;30450:3;30446:14;30432:12;30398:63;:::i;:::-;30307:164;29559:919;29431:1047;;:::o;30484:108::-;30561:24;30579:5;30561:24;:::i;:::-;30556:3;30549:37;30484:108;;:::o;30598:118::-;30685:24;30703:5;30685:24;:::i;:::-;30680:3;30673:37;30598:118;;:::o;30722:222::-;30815:4;30853:2;30842:9;30838:18;30830:26;;30866:71;30934:1;30923:9;30919:17;30910:6;30866:71;:::i;:::-;30722:222;;;;:::o;30950:1053::-;31273:4;31311:3;31300:9;31296:19;31288:27;;31325:71;31393:1;31382:9;31378:17;31369:6;31325:71;:::i;:::-;31406:72;31474:2;31463:9;31459:18;31450:6;31406:72;:::i;:::-;31525:9;31519:4;31515:20;31510:2;31499:9;31495:18;31488:48;31553:108;31656:4;31647:6;31553:108;:::i;:::-;31545:116;;31708:9;31702:4;31698:20;31693:2;31682:9;31678:18;31671:48;31736:108;31839:4;31830:6;31736:108;:::i;:::-;31728:116;;31892:9;31886:4;31882:20;31876:3;31865:9;31861:19;31854:49;31920:76;31991:4;31982:6;31920:76;:::i;:::-;31912:84;;30950:1053;;;;;;;;:::o;32009:751::-;32232:4;32270:3;32259:9;32255:19;32247:27;;32284:71;32352:1;32341:9;32337:17;32328:6;32284:71;:::i;:::-;32365:72;32433:2;32422:9;32418:18;32409:6;32365:72;:::i;:::-;32447;32515:2;32504:9;32500:18;32491:6;32447:72;:::i;:::-;32529;32597:2;32586:9;32582:18;32573:6;32529:72;:::i;:::-;32649:9;32643:4;32639:20;32633:3;32622:9;32618:19;32611:49;32677:76;32748:4;32739:6;32677:76;:::i;:::-;32669:84;;32009:751;;;;;;;;:::o;32766:373::-;32909:4;32947:2;32936:9;32932:18;32924:26;;32996:9;32990:4;32986:20;32982:1;32971:9;32967:17;32960:47;33024:108;33127:4;33118:6;33024:108;:::i;:::-;33016:116;;32766:373;;;;:::o;33145:497::-;33350:4;33388:2;33377:9;33373:18;33365:26;;33437:9;33431:4;33427:20;33423:1;33412:9;33408:17;33401:47;33465:170;33630:4;33621:6;33465:170;:::i;:::-;33457:178;;33145:497;;;;:::o;33648:373::-;33791:4;33829:2;33818:9;33814:18;33806:26;;33878:9;33872:4;33868:20;33864:1;33853:9;33849:17;33842:47;33906:108;34009:4;34000:6;33906:108;:::i;:::-;33898:116;;33648:373;;;;:::o;34027:634::-;34248:4;34286:2;34275:9;34271:18;34263:26;;34335:9;34329:4;34325:20;34321:1;34310:9;34306:17;34299:47;34363:108;34466:4;34457:6;34363:108;:::i;:::-;34355:116;;34518:9;34512:4;34508:20;34503:2;34492:9;34488:18;34481:48;34546:108;34649:4;34640:6;34546:108;:::i;:::-;34538:116;;34027:634;;;;;:::o;34667:210::-;34754:4;34792:2;34781:9;34777:18;34769:26;;34805:65;34867:1;34856:9;34852:17;34843:6;34805:65;:::i;:::-;34667:210;;;;:::o;34883:313::-;34996:4;35034:2;35023:9;35019:18;35011:26;;35083:9;35077:4;35073:20;35069:1;35058:9;35054:17;35047:47;35111:78;35184:4;35175:6;35111:78;:::i;:::-;35103:86;;34883:313;;;;:::o;35202:419::-;35368:4;35406:2;35395:9;35391:18;35383:26;;35455:9;35449:4;35445:20;35441:1;35430:9;35426:17;35419:47;35483:131;35609:4;35483:131;:::i;:::-;35475:139;;35202:419;;;:::o;35627:::-;35793:4;35831:2;35820:9;35816:18;35808:26;;35880:9;35874:4;35870:20;35866:1;35855:9;35851:17;35844:47;35908:131;36034:4;35908:131;:::i;:::-;35900:139;;35627:419;;;:::o;36052:::-;36218:4;36256:2;36245:9;36241:18;36233:26;;36305:9;36299:4;36295:20;36291:1;36280:9;36276:17;36269:47;36333:131;36459:4;36333:131;:::i;:::-;36325:139;;36052:419;;;:::o;36477:::-;36643:4;36681:2;36670:9;36666:18;36658:26;;36730:9;36724:4;36720:20;36716:1;36705:9;36701:17;36694:47;36758:131;36884:4;36758:131;:::i;:::-;36750:139;;36477:419;;;:::o;36902:::-;37068:4;37106:2;37095:9;37091:18;37083:26;;37155:9;37149:4;37145:20;37141:1;37130:9;37126:17;37119:47;37183:131;37309:4;37183:131;:::i;:::-;37175:139;;36902:419;;;:::o;37327:::-;37493:4;37531:2;37520:9;37516:18;37508:26;;37580:9;37574:4;37570:20;37566:1;37555:9;37551:17;37544:47;37608:131;37734:4;37608:131;:::i;:::-;37600:139;;37327:419;;;:::o;37752:::-;37918:4;37956:2;37945:9;37941:18;37933:26;;38005:9;37999:4;37995:20;37991:1;37980:9;37976:17;37969:47;38033:131;38159:4;38033:131;:::i;:::-;38025:139;;37752:419;;;:::o;38177:::-;38343:4;38381:2;38370:9;38366:18;38358:26;;38430:9;38424:4;38420:20;38416:1;38405:9;38401:17;38394:47;38458:131;38584:4;38458:131;:::i;:::-;38450:139;;38177:419;;;:::o;38602:::-;38768:4;38806:2;38795:9;38791:18;38783:26;;38855:9;38849:4;38845:20;38841:1;38830:9;38826:17;38819:47;38883:131;39009:4;38883:131;:::i;:::-;38875:139;;38602:419;;;:::o;39027:::-;39193:4;39231:2;39220:9;39216:18;39208:26;;39280:9;39274:4;39270:20;39266:1;39255:9;39251:17;39244:47;39308:131;39434:4;39308:131;:::i;:::-;39300:139;;39027:419;;;:::o;39452:::-;39618:4;39656:2;39645:9;39641:18;39633:26;;39705:9;39699:4;39695:20;39691:1;39680:9;39676:17;39669:47;39733:131;39859:4;39733:131;:::i;:::-;39725:139;;39452:419;;;:::o;39877:::-;40043:4;40081:2;40070:9;40066:18;40058:26;;40130:9;40124:4;40120:20;40116:1;40105:9;40101:17;40094:47;40158:131;40284:4;40158:131;:::i;:::-;40150:139;;39877:419;;;:::o;40302:::-;40468:4;40506:2;40495:9;40491:18;40483:26;;40555:9;40549:4;40545:20;40541:1;40530:9;40526:17;40519:47;40583:131;40709:4;40583:131;:::i;:::-;40575:139;;40302:419;;;:::o;40727:::-;40893:4;40931:2;40920:9;40916:18;40908:26;;40980:9;40974:4;40970:20;40966:1;40955:9;40951:17;40944:47;41008:131;41134:4;41008:131;:::i;:::-;41000:139;;40727:419;;;:::o;41152:::-;41318:4;41356:2;41345:9;41341:18;41333:26;;41405:9;41399:4;41395:20;41391:1;41380:9;41376:17;41369:47;41433:131;41559:4;41433:131;:::i;:::-;41425:139;;41152:419;;;:::o;41577:::-;41743:4;41781:2;41770:9;41766:18;41758:26;;41830:9;41824:4;41820:20;41816:1;41805:9;41801:17;41794:47;41858:131;41984:4;41858:131;:::i;:::-;41850:139;;41577:419;;;:::o;42002:::-;42168:4;42206:2;42195:9;42191:18;42183:26;;42255:9;42249:4;42245:20;42241:1;42230:9;42226:17;42219:47;42283:131;42409:4;42283:131;:::i;:::-;42275:139;;42002:419;;;:::o;42427:::-;42593:4;42631:2;42620:9;42616:18;42608:26;;42680:9;42674:4;42670:20;42666:1;42655:9;42651:17;42644:47;42708:131;42834:4;42708:131;:::i;:::-;42700:139;;42427:419;;;:::o;42852:::-;43018:4;43056:2;43045:9;43041:18;43033:26;;43105:9;43099:4;43095:20;43091:1;43080:9;43076:17;43069:47;43133:131;43259:4;43133:131;:::i;:::-;43125:139;;42852:419;;;:::o;43277:::-;43443:4;43481:2;43470:9;43466:18;43458:26;;43530:9;43524:4;43520:20;43516:1;43505:9;43501:17;43494:47;43558:131;43684:4;43558:131;:::i;:::-;43550:139;;43277:419;;;:::o;43702:347::-;43857:4;43895:3;43884:9;43880:19;43872:27;;43909:133;44039:1;44028:9;44024:17;44015:6;43909:133;:::i;:::-;43702:347;;;;:::o;44055:222::-;44148:4;44186:2;44175:9;44171:18;44163:26;;44199:71;44267:1;44256:9;44252:17;44243:6;44199:71;:::i;:::-;44055:222;;;;:::o;44283:332::-;44404:4;44442:2;44431:9;44427:18;44419:26;;44455:71;44523:1;44512:9;44508:17;44499:6;44455:71;:::i;:::-;44536:72;44604:2;44593:9;44589:18;44580:6;44536:72;:::i;:::-;44283:332;;;;;:::o;44621:725::-;44699:4;44705:6;44761:11;44748:25;44861:1;44855:4;44851:12;44840:8;44824:14;44820:29;44816:48;44796:18;44792:73;44782:168;;44869:79;;:::i;:::-;44782:168;44981:18;44971:8;44967:33;44959:41;;45033:4;45020:18;45010:28;;45061:18;45053:6;45050:30;45047:117;;;45083:79;;:::i;:::-;45047:117;45191:2;45185:4;45181:13;45173:21;;45248:4;45240:6;45236:17;45220:14;45216:38;45210:4;45206:49;45203:136;;;45258:79;;:::i;:::-;45203:136;44712:634;44621:725;;;;;:::o;45352:129::-;45386:6;45413:20;;:::i;:::-;45403:30;;45442:33;45470:4;45462:6;45442:33;:::i;:::-;45352:129;;;:::o;45487:75::-;45520:6;45553:2;45547:9;45537:19;;45487:75;:::o;45568:311::-;45645:4;45735:18;45727:6;45724:30;45721:56;;;45757:18;;:::i;:::-;45721:56;45807:4;45799:6;45795:17;45787:25;;45867:4;45861;45857:15;45849:23;;45568:311;;;:::o;45885:342::-;45993:4;46083:18;46075:6;46072:30;46069:56;;;46105:18;;:::i;:::-;46069:56;46155:4;46147:6;46143:17;46135:25;;46215:4;46209;46205:15;46197:23;;45885:342;;;:::o;46233:311::-;46310:4;46400:18;46392:6;46389:30;46386:56;;;46422:18;;:::i;:::-;46386:56;46472:4;46464:6;46460:17;46452:25;;46532:4;46526;46522:15;46514:23;;46233:311;;;:::o;46550:307::-;46611:4;46701:18;46693:6;46690:30;46687:56;;;46723:18;;:::i;:::-;46687:56;46761:29;46783:6;46761:29;:::i;:::-;46753:37;;46845:4;46839;46835:15;46827:23;;46550:307;;;:::o;46863:132::-;46930:4;46953:3;46945:11;;46983:4;46978:3;46974:14;46966:22;;46863:132;;;:::o;47001:163::-;47099:4;47122:3;47114:11;;47152:4;47147:3;47143:14;47135:22;;47001:163;;;:::o;47170:132::-;47237:4;47260:3;47252:11;;47290:4;47285:3;47281:14;47273:22;;47170:132;;;:::o;47308:114::-;47375:6;47409:5;47403:12;47393:22;;47308:114;;;:::o;47428:145::-;47526:6;47560:5;47554:12;47544:22;;47428:145;;;:::o;47579:114::-;47646:6;47680:5;47674:12;47664:22;;47579:114;;;:::o;47699:98::-;47750:6;47784:5;47778:12;47768:22;;47699:98;;;:::o;47803:99::-;47855:6;47889:5;47883:12;47873:22;;47803:99;;;:::o;47908:113::-;47978:4;48010;48005:3;48001:14;47993:22;;47908:113;;;:::o;48027:144::-;48128:4;48160;48155:3;48151:14;48143:22;;48027:144;;;:::o;48177:113::-;48247:4;48279;48274:3;48270:14;48262:22;;48177:113;;;:::o;48296:184::-;48395:11;48429:6;48424:3;48417:19;48469:4;48464:3;48460:14;48445:29;;48296:184;;;;:::o;48486:215::-;48616:11;48650:6;48645:3;48638:19;48690:4;48685:3;48681:14;48666:29;;48486:215;;;;:::o;48707:184::-;48806:11;48840:6;48835:3;48828:19;48880:4;48875:3;48871:14;48856:29;;48707:184;;;;:::o;48897:168::-;48980:11;49014:6;49009:3;49002:19;49054:4;49049:3;49045:14;49030:29;;48897:168;;;;:::o;49071:169::-;49155:11;49189:6;49184:3;49177:19;49229:4;49224:3;49220:14;49205:29;;49071:169;;;;:::o;49246:305::-;49286:3;49305:20;49323:1;49305:20;:::i;:::-;49300:25;;49339:20;49357:1;49339:20;:::i;:::-;49334:25;;49493:1;49425:66;49421:74;49418:1;49415:81;49412:107;;;49499:18;;:::i;:::-;49412:107;49543:1;49540;49536:9;49529:16;;49246:305;;;;:::o;49557:191::-;49597:4;49617:20;49635:1;49617:20;:::i;:::-;49612:25;;49651:20;49669:1;49651:20;:::i;:::-;49646:25;;49690:1;49687;49684:8;49681:34;;;49695:18;;:::i;:::-;49681:34;49740:1;49737;49733:9;49725:17;;49557:191;;;;:::o;49754:96::-;49791:7;49820:24;49838:5;49820:24;:::i;:::-;49809:35;;49754:96;;;:::o;49856:90::-;49890:7;49933:5;49926:13;49919:21;49908:32;;49856:90;;;:::o;49952:149::-;49988:7;50028:66;50021:5;50017:78;50006:89;;49952:149;;;:::o;50107:126::-;50144:7;50184:42;50177:5;50173:54;50162:65;;50107:126;;;:::o;50239:77::-;50276:7;50305:5;50294:16;;50239:77;;;:::o;50322:154::-;50406:6;50401:3;50396;50383:30;50468:1;50459:6;50454:3;50450:16;50443:27;50322:154;;;:::o;50482:307::-;50550:1;50560:113;50574:6;50571:1;50568:13;50560:113;;;50659:1;50654:3;50650:11;50644:18;50640:1;50635:3;50631:11;50624:39;50596:2;50593:1;50589:10;50584:15;;50560:113;;;50691:6;50688:1;50685:13;50682:101;;;50771:1;50762:6;50757:3;50753:16;50746:27;50682:101;50531:258;50482:307;;;:::o;50795:320::-;50839:6;50876:1;50870:4;50866:12;50856:22;;50923:1;50917:4;50913:12;50944:18;50934:81;;51000:4;50992:6;50988:17;50978:27;;50934:81;51062:2;51054:6;51051:14;51031:18;51028:38;51025:84;;;51081:18;;:::i;:::-;51025:84;50846:269;50795:320;;;:::o;51121:281::-;51204:27;51226:4;51204:27;:::i;:::-;51196:6;51192:40;51334:6;51322:10;51319:22;51298:18;51286:10;51283:34;51280:62;51277:88;;;51345:18;;:::i;:::-;51277:88;51385:10;51381:2;51374:22;51164:238;51121:281;;:::o;51408:233::-;51447:3;51470:24;51488:5;51470:24;:::i;:::-;51461:33;;51516:66;51509:5;51506:77;51503:103;;;51586:18;;:::i;:::-;51503:103;51633:1;51626:5;51622:13;51615:20;;51408:233;;;:::o;51647:180::-;51695:77;51692:1;51685:88;51792:4;51789:1;51782:15;51816:4;51813:1;51806:15;51833:180;51881:77;51878:1;51871:88;51978:4;51975:1;51968:15;52002:4;51999:1;51992:15;52019:180;52067:77;52064:1;52057:88;52164:4;52161:1;52154:15;52188:4;52185:1;52178:15;52205:180;52253:77;52250:1;52243:88;52350:4;52347:1;52340:15;52374:4;52371:1;52364:15;52391:183;52426:3;52464:1;52446:16;52443:23;52440:128;;;52502:1;52499;52496;52481:23;52524:34;52555:1;52549:8;52524:34;:::i;:::-;52517:41;;52440:128;52391:183;:::o;52580:117::-;52689:1;52686;52679:12;52703:117;52812:1;52809;52802:12;52826:117;52935:1;52932;52925:12;52949:117;53058:1;53055;53048:12;53072:117;53181:1;53178;53171:12;53318:117;53427:1;53424;53417:12;53441:117;53550:1;53547;53540:12;53564:117;53673:1;53670;53663:12;53687:117;53796:1;53793;53786:12;53810:117;53919:1;53916;53909:12;53933:102;53974:6;54025:2;54021:7;54016:2;54009:5;54005:14;54001:28;53991:38;;53933:102;;;:::o;54041:106::-;54085:8;54134:5;54129:3;54125:15;54104:36;;54041:106;;;:::o;54153:239::-;54293:34;54289:1;54281:6;54277:14;54270:58;54362:22;54357:2;54349:6;54345:15;54338:47;54153:239;:::o;54398:227::-;54538:34;54534:1;54526:6;54522:14;54515:58;54607:10;54602:2;54594:6;54590:15;54583:35;54398:227;:::o;54631:163::-;54771:15;54767:1;54759:6;54755:14;54748:39;54631:163;:::o;54800:166::-;54940:18;54936:1;54928:6;54924:14;54917:42;54800:166;:::o;54972:160::-;55112:12;55108:1;55100:6;55096:14;55089:36;54972:160;:::o;55138:230::-;55278:34;55274:1;55266:6;55262:14;55255:58;55347:13;55342:2;55334:6;55330:15;55323:38;55138:230;:::o;55374:225::-;55514:34;55510:1;55502:6;55498:14;55491:58;55583:8;55578:2;55570:6;55566:15;55559:33;55374:225;:::o;55605:228::-;55745:34;55741:1;55733:6;55729:14;55722:58;55814:11;55809:2;55801:6;55797:15;55790:36;55605:228;:::o;55839:156::-;55979:8;55975:1;55967:6;55963:14;55956:32;55839:156;:::o;56001:165::-;56141:17;56137:1;56129:6;56125:14;56118:41;56001:165;:::o;56172:224::-;56312:34;56308:1;56300:6;56296:14;56289:58;56381:7;56376:2;56368:6;56364:15;56357:32;56172:224;:::o;56402:237::-;56542:34;56538:1;56530:6;56526:14;56519:58;56611:20;56606:2;56598:6;56594:15;56587:45;56402:237;:::o;56645:157::-;56785:9;56781:1;56773:6;56769:14;56762:33;56645:157;:::o;56808:229::-;56948:34;56944:1;56936:6;56932:14;56925:58;57017:12;57012:2;57004:6;57000:15;56993:37;56808:229;:::o;57043:182::-;57183:34;57179:1;57171:6;57167:14;57160:58;57043:182;:::o;57231:235::-;57371:34;57367:1;57359:6;57355:14;57348:58;57440:18;57435:2;57427:6;57423:15;57416:43;57231:235;:::o;57472:228::-;57612:34;57608:1;57600:6;57596:14;57589:58;57681:11;57676:2;57668:6;57664:15;57657:36;57472:228;:::o;57706:::-;57846:34;57842:1;57834:6;57830:14;57823:58;57915:11;57910:2;57902:6;57898:15;57891:36;57706:228;:::o;57940:227::-;58080:34;58076:1;58068:6;58064:14;58057:58;58149:10;58144:2;58136:6;58132:15;58125:35;57940:227;:::o;58173:220::-;58313:34;58309:1;58301:6;58297:14;58290:58;58382:3;58377:2;58369:6;58365:15;58358:28;58173:220;:::o;58399:711::-;58438:3;58476:4;58458:16;58455:26;58452:39;;;58484:5;;58452:39;58513:20;;:::i;:::-;58588:1;58570:16;58566:24;58563:1;58557:4;58542:49;58621:4;58615:11;58720:16;58713:4;58705:6;58701:17;58698:39;58665:18;58657:6;58654:30;58638:113;58635:146;;;58766:5;;;;58635:146;58812:6;58806:4;58802:17;58848:3;58842:10;58875:18;58867:6;58864:30;58861:43;;;58897:5;;;;;;58861:43;58945:6;58938:4;58933:3;58929:14;58925:27;59004:1;58986:16;58982:24;58976:4;58972:35;58967:3;58964:44;58961:57;;;59011:5;;;;;;;58961:57;59028;59076:6;59070:4;59066:17;59058:6;59054:30;59048:4;59028:57;:::i;:::-;59101:3;59094:10;;58442:668;;;;;58399:711;;:::o;59116:122::-;59189:24;59207:5;59189:24;:::i;:::-;59182:5;59179:35;59169:63;;59228:1;59225;59218:12;59169:63;59116:122;:::o;59244:116::-;59314:21;59329:5;59314:21;:::i;:::-;59307:5;59304:32;59294:60;;59350:1;59347;59340:12;59294:60;59244:116;:::o;59366:120::-;59438:23;59455:5;59438:23;:::i;:::-;59431:5;59428:34;59418:62;;59476:1;59473;59466:12;59418:62;59366:120;:::o;59492:122::-;59565:24;59583:5;59565:24;:::i;:::-;59558:5;59555:35;59545:63;;59604:1;59601;59594:12;59545:63;59492:122;:::o

Swarm Source

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