ETH Price: $3,490.05 (+3.68%)
Gas: 2 Gwei

Token

Toxic Power (Toxic Power)
 

Overview

Max Total Supply

173 Toxic Power

Holders

157

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
30018.eth
0xa862cb0d917a4c643ac262cbf453eb6827c87f70
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:
ToxicPower

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-03-26
*/

// File: contracts/IUnity.sol



pragma solidity ^0.8.0;

interface IUnity {
    function balanceOf(address owner) external view returns (uint256 balance);
}
// File: contracts/ISurvive.sol



pragma solidity ^0.8.0;

interface ISurvive {
    function claimToxic(address _to, uint256 amount) external;
}
// 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/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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 v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

// File: contracts/toxicPower.sol



pragma solidity ^0.8.0;







contract ToxicPower is ERC1155Supply, Ownable, ReentrancyGuard  {
    using Strings for uint256;

    uint16[] public maxSupplyEach = [500, 100, 30];
    uint16[] public tokensNecessary = [2, 5, 10];

    // Timestamp of the start and end of sales
    uint256 public windowCloses = 1649617200;
    uint256 public burnWindowOpens = 1649620800;
    
    // Survive amount for each toxic power
    uint256[] public amountSurvive = [99000000000000000000, 399000000000000000000, 999000000000000000000];
    bool public paused = false;
    
    string public name = "Toxic Power";
    string public symbol = "Toxic Power";

    // For each address, how much was minted already
    mapping(address => uint256) public purchasedToxicOne;
    mapping(address => uint256) public purchasedToxicTwo;
    mapping(address => uint256) public purchasedToxicThree;
    mapping(address => uint256) public usedTokens;

    ISurvive survive;
    IUnity unity;

    constructor(
        string memory _uri,
        address _survive,
        address _unity
    ) ERC1155(_uri) {
        survive = ISurvive(_survive);
        unity = IUnity(_unity);
    }

    // Modifier to verify if contract is paused
    modifier whenNotPaused() {
        require(!paused, "Contract is currently paused");
        _;
    }

    function claimOne() external {
        require(purchasedToxicOne[msg.sender] == 0, "You've already claimed one for this categgory.");
        claim(0);

        purchasedToxicOne[msg.sender] = 1;
    }

    function claimTwo() external {
        require(purchasedToxicTwo[msg.sender] == 0, "You've already claimed one for this categgory.");

        claim(1);

        purchasedToxicTwo[msg.sender] = 1;
    }

    function claimThree() external {
        require(purchasedToxicThree[msg.sender] == 0, "You've already claimed one for this categgory.");

        claim(2);

        purchasedToxicThree[msg.sender] = 1;
    }

    function claim(uint8 toxic) private whenNotPaused {
        require(tx.origin == msg.sender, "No bots allowed.");
        require(block.timestamp <= windowCloses, "You can't claim anymore toxic power, time is up.");
        require(totalSupply(toxic) < maxSupplyEach[toxic], "Max supply reached for this toxic, please mint another.");
        uint256 unityBalance = unity.balanceOf(msg.sender);
        require(usedTokens[msg.sender] + tokensNecessary[toxic] <= unityBalance, "You don't have enough free tokens for mint.");
        
        _mint(msg.sender, toxic, 1, "");

        usedTokens[msg.sender] += tokensNecessary[toxic];
    }
    
    function setMaxSupply(uint16[] calldata _maxSupplyEach) external onlyOwner {
        maxSupplyEach = _maxSupplyEach;
    }

    // Pause the contract, so no one can call mint functions
    function pauseContract(bool _state) external onlyOwner {
        paused = _state;
    }

    function uri(uint256 _id) public view override returns (string memory) {
        require(exists(_id), "URI: nonexistent token");
        return string(abi.encodePacked(super.uri(_id), Strings.toString(_id), ".json"));
    }

    function setUri(string memory newUri) external onlyOwner {
        super._setURI(newUri);
    }

    function setWindows(uint256 _burnWindowOpens, uint256 _windowCloses)  external onlyOwner {
        burnWindowOpens = _burnWindowOpens;
        windowCloses = _windowCloses;
    }

    function burn(uint256[] calldata tokensId) external {
        require(block.timestamp >= burnWindowOpens, "You can't burn your tokens yet.");

        for(uint8 i = 0; i < tokensId.length; i++){
            require(balanceOf(msg.sender, tokensId[i]) > 0, "Needs to have token, to burn it.");
            _burn(msg.sender, tokensId[i], 1);
            survive.claimToxic(msg.sender, amountSurvive[tokensId[i]]);
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_survive","type":"address"},{"internalType":"address","name":"_unity","type":"address"}],"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":"","type":"uint256"}],"name":"amountSurvive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnWindowOpens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimThree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupplyEach","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"purchasedToxicOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"purchasedToxicThree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"purchasedToxicTwo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint16[]","name":"_maxSupplyEach","type":"uint16[]"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnWindowOpens","type":"uint256"},{"internalType":"uint256","name":"_windowCloses","type":"uint256"}],"name":"setWindows","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensNecessary","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"windowCloses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260405180606001604052806101f461ffff168152602001606461ffff168152602001601e61ffff1681525060069060036200004192919062000390565b506040518060600160405280600260ff168152602001600560ff168152602001600a60ff1681525060079060036200007b92919062000441565b5063625329306008556362533740600955604051806060016040528068055de6a779bbac000068ffffffffffffffffff1681526020016815a13cc201e4dc000068ffffffffffffffffff168152602001683627e8f712373c000068ffffffffffffffffff16815250600a906003620000f5929190620004f1565b506000600b60006101000a81548160ff0219169083151502179055506040518060400160405280600b81526020017f546f78696320506f776572000000000000000000000000000000000000000000815250600c90805190602001906200015e92919062000550565b506040518060400160405280600b81526020017f546f78696320506f776572000000000000000000000000000000000000000000815250600d9080519060200190620001ac92919062000550565b50348015620001ba57600080fd5b506040516200572b3803806200572b8339818101604052810190620001e0919062000695565b82620001f281620002a660201b60201c565b506200021362000207620002c260201b60201c565b620002ca60201b60201c565b600160058190555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620008e2565b8060029080519060200190620002be92919062000550565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090600f016010900481019282156200042e5791602002820160005b83821115620003fc57835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302620003ba565b80156200042c5782816101000a81549061ffff0219169055600201602081600101049283019260010302620003fc565b505b5090506200043d9190620005e1565b5090565b82805482825590600052602060002090600f01601090048101928215620004de5791602002820160005b83821115620004ac57835183826101000a81548161ffff021916908360ff16021790555092602001926002016020816001010492830192600103026200046b565b8015620004dc5782816101000a81549061ffff0219169055600201602081600101049283019260010302620004ac565b505b509050620004ed9190620005e1565b5090565b8280548282559060005260206000209081019282156200053d579160200282015b828111156200053c578251829068ffffffffffffffffff1690559160200191906001019062000512565b5b5090506200054c9190620005e1565b5090565b8280546200055e90620007d9565b90600052602060002090601f016020900481019282620005825760008555620005ce565b82601f106200059d57805160ff1916838001178555620005ce565b82800160010185558215620005ce579182015b82811115620005cd578251825591602001919060010190620005b0565b5b509050620005dd9190620005e1565b5090565b5b80821115620005fc576000816000905550600101620005e2565b5090565b600062000617620006118462000739565b62000710565b905082815260208101848484011115620006365762000635620008a8565b5b62000643848285620007a3565b509392505050565b6000815190506200065c81620008c8565b92915050565b600082601f8301126200067a5762000679620008a3565b5b81516200068c84826020860162000600565b91505092915050565b600080600060608486031215620006b157620006b0620008b2565b5b600084015167ffffffffffffffff811115620006d257620006d1620008ad565b5b620006e08682870162000662565b9350506020620006f3868287016200064b565b925050604062000706868287016200064b565b9150509250925092565b60006200071c6200072f565b90506200072a82826200080f565b919050565b6000604051905090565b600067ffffffffffffffff82111562000757576200075662000874565b5b6200076282620008b7565b9050602081019050919050565b60006200077c8262000783565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620007c3578082015181840152602081019050620007a6565b83811115620007d3576000848401525b50505050565b60006002820490506001821680620007f257607f821691505b6020821081141562000809576200080862000845565b5b50919050565b6200081a82620008b7565b810181811067ffffffffffffffff821117156200083c576200083b62000874565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620008d3816200076f565b8114620008df57600080fd5b50565b614e3980620008f26000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c80637937871f1161011a578063a22cb465116100ad578063e272b8921161007c578063e272b892146105d7578063e985e9c5146105f3578063f242432a14610623578063f2fde38b1461063f578063fe6f96051461065b576101fa565b8063a22cb4651461053f578063b0b10dff1461055b578063b80f55c91461058b578063bd85b039146105a7576101fa565b80639229cd50116100e95780639229cd50146104cb57806395d89b41146104d55780639b642de1146104f35780639b91c9111461050f576101fa565b80637937871f146104415780637b58de8b146104715780637f010b9c1461048f5780638da5cb5b146104ad576101fa565b80634f558e791161019257806365f4bce61161016157806365f4bce6146103e15780636b6af26d146103fd578063715018a6146104075780637918a47314610411576101fa565b80634f558e79146103335780635c0b2885146103635780635c975abb146103935780635ee3b3c9146103b1576101fa565b80632eb2c2d6116101ce5780632eb2c2d6146102ad5780633659ffb2146102c95780634e1273f4146102f95780634f1e9d3c14610329576101fa565b8062fdd58e146101ff57806301ffc9a71461022f57806306fdde031461025f5780630e89341c1461027d575b600080fd5b61021960048036038101906102149190613478565b610677565b60405161022691906140e9565b60405180910390f35b610249600480360381019061024491906135f7565b610740565b6040516102569190613d91565b60405180910390f35b610267610822565b6040516102749190613dac565b60405180910390f35b6102976004803603810190610292919061369a565b6108b0565b6040516102a49190613dac565b60405180910390f35b6102c760048036038101906102c291906132d2565b610933565b005b6102e360048036038101906102de9190613265565b6109d4565b6040516102f091906140e9565b60405180910390f35b610313600480360381019061030e91906134b8565b6109ec565b6040516103209190613d38565b60405180910390f35b610331610b05565b005b61034d6004803603810190610348919061369a565b610bd8565b60405161035a9190613d91565b60405180910390f35b61037d6004803603810190610378919061369a565b610bec565b60405161038a91906140ce565b60405180910390f35b61039b610c24565b6040516103a89190613d91565b60405180910390f35b6103cb60048036038101906103c6919061369a565b610c37565b6040516103d891906140ce565b60405180910390f35b6103fb60048036038101906103f691906136f4565b610c6f565b005b610405610cfd565b005b61040f610dd0565b005b61042b6004803603810190610426919061369a565b610e58565b60405161043891906140e9565b60405180910390f35b61045b60048036038101906104569190613265565b610e7c565b60405161046891906140e9565b60405180910390f35b610479610e94565b60405161048691906140e9565b60405180910390f35b610497610e9a565b6040516104a491906140e9565b60405180910390f35b6104b5610ea0565b6040516104c29190613c32565b60405180910390f35b6104d3610eca565b005b6104dd610f9d565b6040516104ea9190613dac565b60405180910390f35b61050d60048036038101906105089190613651565b61102b565b005b61052960048036038101906105249190613265565b6110b3565b60405161053691906140e9565b60405180910390f35b61055960048036038101906105549190613438565b6110cb565b005b61057560048036038101906105709190613265565b6110e1565b60405161058291906140e9565b60405180910390f35b6105a560048036038101906105a0919061357d565b6110f9565b005b6105c160048036038101906105bc919061369a565b6112c0565b6040516105ce91906140e9565b60405180910390f35b6105f160048036038101906105ec91906135ca565b6112dd565b005b61060d60048036038101906106089190613292565b611376565b60405161061a9190613d91565b60405180910390f35b61063d600480360381019061063891906133a1565b61140a565b005b61065960048036038101906106549190613265565b6114ab565b005b61067560048036038101906106709190613530565b6115a3565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df90613e6e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081b575061081a82611635565b5b9050919050565b600c805461082f90614414565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90614414565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b505050505081565b60606108bb82610bd8565b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f19061402e565b60405180910390fd5b6109038261169f565b61090c83611733565b60405160200161091d929190613c03565b6040516020818303038152906040529050919050565b61093b611894565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061098157506109808561097b611894565b611376565b5b6109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b790613f2e565b60405180910390fd5b6109cd858585858561189c565b5050505050565b60116020528060005260406000206000915090505481565b60608151835114610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a299061406e565b60405180910390fd5b6000835167ffffffffffffffff811115610a4f57610a4e6145d7565b5b604051908082528060200260200182016040528015610a7d5781602001602082028036833780820191505090505b50905060005b8451811015610afa57610aca858281518110610aa257610aa16145a8565b5b6020026020010151858381518110610abd57610abc6145a8565b5b6020026020010151610677565b828281518110610add57610adc6145a8565b5b60200260200101818152505080610af390614477565b9050610a83565b508091505092915050565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e90613fce565b60405180910390fd5b610b916000611bb0565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600080610be4836112c0565b119050919050565b60068181548110610bfc57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b600b60009054906101000a900460ff1681565b60078181548110610c4757600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b610c77611894565b73ffffffffffffffffffffffffffffffffffffffff16610c95610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613fae565b60405180910390fd5b81600981905550806008819055505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690613fce565b60405180910390fd5b610d896002611bb0565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610dd8611894565b73ffffffffffffffffffffffffffffffffffffffff16610df6610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390613fae565b60405180910390fd5b610e566000611f6f565b565b600a8181548110610e6857600080fd5b906000526020600020016000915090505481565b60106020528060005260406000206000915090505481565b60095481565b60085481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390613fce565b60405180910390fd5b610f566001611bb0565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600d8054610faa90614414565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690614414565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b505050505081565b611033611894565b73ffffffffffffffffffffffffffffffffffffffff16611051610ea0565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90613fae565b60405180910390fd5b6110b081612035565b50565b600e6020528060005260406000206000915090505481565b6110dd6110d6611894565b838361204f565b5050565b600f6020528060005260406000206000915090505481565b60095442101561113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590613e2e565b60405180910390fd5b60005b828290508160ff1610156112bb5760006111773385858560ff1681811061116b5761116a6145a8565b5b90506020020135610677565b116111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90613eee565b60405180910390fd5b6111df3384848460ff168181106111d1576111d06145a8565b5b9050602002013560016121bc565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf12a1e633600a86868660ff16818110611236576112356145a8565b5b905060200201358154811061124e5761124d6145a8565b5b90600052602060002001546040518363ffffffff1660e01b8152600401611276929190613d0f565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b5050505080806112b3906144c0565b915050611141565b505050565b600060036000838152602001908152602001600020549050919050565b6112e5611894565b73ffffffffffffffffffffffffffffffffffffffff16611303610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613fae565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611412611894565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611458575061145785611452611894565b611376565b5b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613ece565b60405180910390fd5b6114a485858585856123d9565b5050505050565b6114b3611894565b73ffffffffffffffffffffffffffffffffffffffff166114d1610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613fae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613e8e565b60405180910390fd5b6115a081611f6f565b50565b6115ab611894565b73ffffffffffffffffffffffffffffffffffffffff166115c9610ea0565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690613fae565b60405180910390fd5b818160069190611630929190612dce565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600280546116ae90614414565b80601f01602080910402602001604051908101604052809291908181526020018280546116da90614414565b80156117275780601f106116fc57610100808354040283529160200191611727565b820191906000526020600020905b81548152906001019060200180831161170a57829003601f168201915b50505050509050919050565b6060600082141561177b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061188f565b600082905060005b600082146117ad57808061179690614477565b915050600a826117a691906142de565b9150611783565b60008167ffffffffffffffff8111156117c9576117c86145d7565b5b6040519080825280601f01601f1916602001820160405280156117fb5781602001600182028036833780820191505090505b5090505b6000851461188857600182611814919061430f565b9150600a8561182391906144ea565b603061182f9190614288565b60f81b818381518110611845576118446145a8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561188191906142de565b94506117ff565b8093505050505b919050565b600033905090565b81518351146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d79061408e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790613f0e565b60405180910390fd5b600061195a611894565b905061196a81878787878761265b565b60005b8451811015611b1b57600085828151811061198b5761198a6145a8565b5b6020026020010151905060008583815181106119aa576119a96145a8565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613f8e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b009190614288565b9250508190555050505080611b1490614477565b905061196d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b92929190613d5a565b60405180910390a4611ba88187878787876127d5565b505050505050565b600b60009054906101000a900460ff1615611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790613e0e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061400e565b60405180910390fd5b600854421115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90613e4e565b60405180910390fd5b60068160ff1681548110611cca57611cc96145a8565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16611cfe8260ff166112c0565b10611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613fee565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611d9b9190613c32565b60206040518083038186803b158015611db357600080fd5b505afa158015611dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611deb91906136c7565b90508060078360ff1681548110611e0557611e046145a8565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e779190614288565b1115611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613f4e565b60405180910390fd5b611ed7338360ff166001604051806020016040528060008152506129bc565b60078260ff1681548110611eee57611eed6145a8565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f649190614288565b925050819055505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806002908051906020019061204b929190612e7c565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b59061404e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121af9190613d91565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561222c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222390613f6e565b60405180910390fd5b6000612236611894565b90506122668185600061224887612b52565b61225187612b52565b6040518060200160405280600081525061265b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490613eae565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516123ca929190614104565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090613f0e565b60405180910390fd5b6000612453611894565b905061247381878761246488612b52565b61246d88612b52565b8761265b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190613f8e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125bf9190614288565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161263c929190614104565b60405180910390a4612652828888888888612bcc565b50505050505050565b612669868686868686612db3565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561271b5760005b8351811015612719578281815181106126bd576126bc6145a8565b5b6020026020010151600360008684815181106126dc576126db6145a8565b5b6020026020010151815260200190815260200160002060008282546127019190614288565b925050819055508061271290614477565b90506126a1565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127cd5760005b83518110156127cb5782818151811061276f5761276e6145a8565b5b60200260200101516003600086848151811061278e5761278d6145a8565b5b6020026020010151815260200190815260200160002060008282546127b3919061430f565b92505081905550806127c490614477565b9050612753565b505b505050505050565b6127f48473ffffffffffffffffffffffffffffffffffffffff16612dbb565b156129b4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161283a959493929190613c4d565b602060405180830381600087803b15801561285457600080fd5b505af192505050801561288557506040513d601f19601f820116820180604052508101906128829190613624565b60015b61292b57612891614606565b806308c379a014156128ee57506128a6614d11565b806128b157506128f0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e59190613dac565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290613dce565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990613dee565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a23906140ae565b60405180910390fd5b6000612a36611894565b9050612a5781600087612a4888612b52565b612a5188612b52565b8761265b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab69190614288565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612b34929190614104565b60405180910390a4612b4b81600087878787612bcc565b5050505050565b60606000600167ffffffffffffffff811115612b7157612b706145d7565b5b604051908082528060200260200182016040528015612b9f5781602001602082028036833780820191505090505b5090508281600081518110612bb757612bb66145a8565b5b60200260200101818152505080915050919050565b612beb8473ffffffffffffffffffffffffffffffffffffffff16612dbb565b15612dab578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612c31959493929190613cb5565b602060405180830381600087803b158015612c4b57600080fd5b505af1925050508015612c7c57506040513d601f19601f82011682018060405250810190612c799190613624565b60015b612d2257612c88614606565b806308c379a01415612ce55750612c9d614d11565b80612ca85750612ce7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9190613dac565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1990613dce565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da090613dee565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b82805482825590600052602060002090600f01601090048101928215612e6b5791602002820160005b83821115612e3b57833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302612df7565b8015612e695782816101000a81549061ffff0219169055600201602081600101049283019260010302612e3b565b505b509050612e789190612f02565b5090565b828054612e8890614414565b90600052602060002090601f016020900481019282612eaa5760008555612ef1565b82601f10612ec357805160ff1916838001178555612ef1565b82800160010185558215612ef1579182015b82811115612ef0578251825591602001919060010190612ed5565b5b509050612efe9190612f02565b5090565b5b80821115612f1b576000816000905550600101612f03565b5090565b6000612f32612f2d84614152565b61412d565b90508083825260208201905082856020860282011115612f5557612f54614632565b5b60005b85811015612f855781612f6b8882613083565b845260208401935060208301925050600181019050612f58565b5050509392505050565b6000612fa2612f9d8461417e565b61412d565b90508083825260208201905082856020860282011115612fc557612fc4614632565b5b60005b85811015612ff55781612fdb888261323b565b845260208401935060208301925050600181019050612fc8565b5050509392505050565b600061301261300d846141aa565b61412d565b90508281526020810184848401111561302e5761302d614637565b5b6130398482856143d2565b509392505050565b600061305461304f846141db565b61412d565b9050828152602081018484840111156130705761306f614637565b5b61307b8482856143d2565b509392505050565b60008135905061309281614da7565b92915050565b600082601f8301126130ad576130ac61462d565b5b81356130bd848260208601612f1f565b91505092915050565b60008083601f8401126130dc576130db61462d565b5b8235905067ffffffffffffffff8111156130f9576130f8614628565b5b60208301915083602082028301111561311557613114614632565b5b9250929050565b60008083601f8401126131325761313161462d565b5b8235905067ffffffffffffffff81111561314f5761314e614628565b5b60208301915083602082028301111561316b5761316a614632565b5b9250929050565b600082601f8301126131875761318661462d565b5b8135613197848260208601612f8f565b91505092915050565b6000813590506131af81614dbe565b92915050565b6000813590506131c481614dd5565b92915050565b6000815190506131d981614dd5565b92915050565b600082601f8301126131f4576131f361462d565b5b8135613204848260208601612fff565b91505092915050565b600082601f8301126132225761322161462d565b5b8135613232848260208601613041565b91505092915050565b60008135905061324a81614dec565b92915050565b60008151905061325f81614dec565b92915050565b60006020828403121561327b5761327a614641565b5b600061328984828501613083565b91505092915050565b600080604083850312156132a9576132a8614641565b5b60006132b785828601613083565b92505060206132c885828601613083565b9150509250929050565b600080600080600060a086880312156132ee576132ed614641565b5b60006132fc88828901613083565b955050602061330d88828901613083565b945050604086013567ffffffffffffffff81111561332e5761332d61463c565b5b61333a88828901613172565b935050606086013567ffffffffffffffff81111561335b5761335a61463c565b5b61336788828901613172565b925050608086013567ffffffffffffffff8111156133885761338761463c565b5b613394888289016131df565b9150509295509295909350565b600080600080600060a086880312156133bd576133bc614641565b5b60006133cb88828901613083565b95505060206133dc88828901613083565b94505060406133ed8882890161323b565b93505060606133fe8882890161323b565b925050608086013567ffffffffffffffff81111561341f5761341e61463c565b5b61342b888289016131df565b9150509295509295909350565b6000806040838503121561344f5761344e614641565b5b600061345d85828601613083565b925050602061346e858286016131a0565b9150509250929050565b6000806040838503121561348f5761348e614641565b5b600061349d85828601613083565b92505060206134ae8582860161323b565b9150509250929050565b600080604083850312156134cf576134ce614641565b5b600083013567ffffffffffffffff8111156134ed576134ec61463c565b5b6134f985828601613098565b925050602083013567ffffffffffffffff81111561351a5761351961463c565b5b61352685828601613172565b9150509250929050565b6000806020838503121561354757613546614641565b5b600083013567ffffffffffffffff8111156135655761356461463c565b5b613571858286016130c6565b92509250509250929050565b6000806020838503121561359457613593614641565b5b600083013567ffffffffffffffff8111156135b2576135b161463c565b5b6135be8582860161311c565b92509250509250929050565b6000602082840312156135e0576135df614641565b5b60006135ee848285016131a0565b91505092915050565b60006020828403121561360d5761360c614641565b5b600061361b848285016131b5565b91505092915050565b60006020828403121561363a57613639614641565b5b6000613648848285016131ca565b91505092915050565b60006020828403121561366757613666614641565b5b600082013567ffffffffffffffff8111156136855761368461463c565b5b6136918482850161320d565b91505092915050565b6000602082840312156136b0576136af614641565b5b60006136be8482850161323b565b91505092915050565b6000602082840312156136dd576136dc614641565b5b60006136eb84828501613250565b91505092915050565b6000806040838503121561370b5761370a614641565b5b60006137198582860161323b565b925050602061372a8582860161323b565b9150509250929050565b60006137408383613be5565b60208301905092915050565b61375581614343565b82525050565b60006137668261421c565b613770818561424a565b935061377b8361420c565b8060005b838110156137ac5781516137938882613734565b975061379e8361423d565b92505060018101905061377f565b5085935050505092915050565b6137c281614355565b82525050565b60006137d382614227565b6137dd818561425b565b93506137ed8185602086016143e1565b6137f681614646565b840191505092915050565b600061380c82614232565b613816818561426c565b93506138268185602086016143e1565b61382f81614646565b840191505092915050565b600061384582614232565b61384f818561427d565b935061385f8185602086016143e1565b80840191505092915050565b600061387860348361426c565b915061388382614664565b604082019050919050565b600061389b60288361426c565b91506138a6826146b3565b604082019050919050565b60006138be601c8361426c565b91506138c982614702565b602082019050919050565b60006138e1601f8361426c565b91506138ec8261472b565b602082019050919050565b600061390460308361426c565b915061390f82614754565b604082019050919050565b6000613927602b8361426c565b9150613932826147a3565b604082019050919050565b600061394a60268361426c565b9150613955826147f2565b604082019050919050565b600061396d60248361426c565b915061397882614841565b604082019050919050565b600061399060298361426c565b915061399b82614890565b604082019050919050565b60006139b360208361426c565b91506139be826148df565b602082019050919050565b60006139d660258361426c565b91506139e182614908565b604082019050919050565b60006139f960328361426c565b9150613a0482614957565b604082019050919050565b6000613a1c602b8361426c565b9150613a27826149a6565b604082019050919050565b6000613a3f60238361426c565b9150613a4a826149f5565b604082019050919050565b6000613a62602a8361426c565b9150613a6d82614a44565b604082019050919050565b6000613a8560058361427d565b9150613a9082614a93565b600582019050919050565b6000613aa860208361426c565b9150613ab382614abc565b602082019050919050565b6000613acb602e8361426c565b9150613ad682614ae5565b604082019050919050565b6000613aee60378361426c565b9150613af982614b34565b604082019050919050565b6000613b1160108361426c565b9150613b1c82614b83565b602082019050919050565b6000613b3460168361426c565b9150613b3f82614bac565b602082019050919050565b6000613b5760298361426c565b9150613b6282614bd5565b604082019050919050565b6000613b7a60298361426c565b9150613b8582614c24565b604082019050919050565b6000613b9d60288361426c565b9150613ba882614c73565b604082019050919050565b6000613bc060218361426c565b9150613bcb82614cc2565b604082019050919050565b613bdf8161438d565b82525050565b613bee816143bb565b82525050565b613bfd816143bb565b82525050565b6000613c0f828561383a565b9150613c1b828461383a565b9150613c2682613a78565b91508190509392505050565b6000602082019050613c47600083018461374c565b92915050565b600060a082019050613c62600083018861374c565b613c6f602083018761374c565b8181036040830152613c81818661375b565b90508181036060830152613c95818561375b565b90508181036080830152613ca981846137c8565b90509695505050505050565b600060a082019050613cca600083018861374c565b613cd7602083018761374c565b613ce46040830186613bf4565b613cf16060830185613bf4565b8181036080830152613d0381846137c8565b90509695505050505050565b6000604082019050613d24600083018561374c565b613d316020830184613bf4565b9392505050565b60006020820190508181036000830152613d52818461375b565b905092915050565b60006040820190508181036000830152613d74818561375b565b90508181036020830152613d88818461375b565b90509392505050565b6000602082019050613da660008301846137b9565b92915050565b60006020820190508181036000830152613dc68184613801565b905092915050565b60006020820190508181036000830152613de78161386b565b9050919050565b60006020820190508181036000830152613e078161388e565b9050919050565b60006020820190508181036000830152613e27816138b1565b9050919050565b60006020820190508181036000830152613e47816138d4565b9050919050565b60006020820190508181036000830152613e67816138f7565b9050919050565b60006020820190508181036000830152613e878161391a565b9050919050565b60006020820190508181036000830152613ea78161393d565b9050919050565b60006020820190508181036000830152613ec781613960565b9050919050565b60006020820190508181036000830152613ee781613983565b9050919050565b60006020820190508181036000830152613f07816139a6565b9050919050565b60006020820190508181036000830152613f27816139c9565b9050919050565b60006020820190508181036000830152613f47816139ec565b9050919050565b60006020820190508181036000830152613f6781613a0f565b9050919050565b60006020820190508181036000830152613f8781613a32565b9050919050565b60006020820190508181036000830152613fa781613a55565b9050919050565b60006020820190508181036000830152613fc781613a9b565b9050919050565b60006020820190508181036000830152613fe781613abe565b9050919050565b6000602082019050818103600083015261400781613ae1565b9050919050565b6000602082019050818103600083015261402781613b04565b9050919050565b6000602082019050818103600083015261404781613b27565b9050919050565b6000602082019050818103600083015261406781613b4a565b9050919050565b6000602082019050818103600083015261408781613b6d565b9050919050565b600060208201905081810360008301526140a781613b90565b9050919050565b600060208201905081810360008301526140c781613bb3565b9050919050565b60006020820190506140e36000830184613bd6565b92915050565b60006020820190506140fe6000830184613bf4565b92915050565b60006040820190506141196000830185613bf4565b6141266020830184613bf4565b9392505050565b6000614137614148565b90506141438282614446565b919050565b6000604051905090565b600067ffffffffffffffff82111561416d5761416c6145d7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614199576141986145d7565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141c5576141c46145d7565b5b6141ce82614646565b9050602081019050919050565b600067ffffffffffffffff8211156141f6576141f56145d7565b5b6141ff82614646565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614293826143bb565b915061429e836143bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142d3576142d261451b565b5b828201905092915050565b60006142e9826143bb565b91506142f4836143bb565b9250826143045761430361454a565b5b828204905092915050565b600061431a826143bb565b9150614325836143bb565b9250828210156143385761433761451b565b5b828203905092915050565b600061434e8261439b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143ff5780820151818401526020810190506143e4565b8381111561440e576000848401525b50505050565b6000600282049050600182168061442c57607f821691505b602082108114156144405761443f614579565b5b50919050565b61444f82614646565b810181811067ffffffffffffffff8211171561446e5761446d6145d7565b5b80604052505050565b6000614482826143bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144b5576144b461451b565b5b600182019050919050565b60006144cb826143c5565b915060ff8214156144df576144de61451b565b5b600182019050919050565b60006144f5826143bb565b9150614500836143bb565b9250826145105761450f61454a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156146255760046000803e614622600051614657565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f436f6e74726163742069732063757272656e746c792070617573656400000000600082015250565b7f596f752063616e2774206275726e20796f757220746f6b656e73207965742e00600082015250565b7f596f752063616e277420636c61696d20616e796d6f726520746f78696320706f60008201527f7765722c2074696d652069732075702e00000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4e6565647320746f206861766520746f6b656e2c20746f206275726e2069742e600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520656e6f756768206672656520746f6b656e60008201527f7320666f72206d696e742e000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7527766520616c726561647920636c61696d6564206f6e6520666f72207460008201527f686973206361746567676f72792e000000000000000000000000000000000000602082015250565b7f4d617820737570706c79207265616368656420666f72207468697320746f786960008201527f632c20706c65617365206d696e7420616e6f746865722e000000000000000000602082015250565b7f4e6f20626f747320616c6c6f7765642e00000000000000000000000000000000600082015250565b7f5552493a206e6f6e6578697374656e7420746f6b656e00000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614d2157614da4565b614d29614148565b60043d036004823e80513d602482011167ffffffffffffffff82111715614d51575050614da4565b808201805167ffffffffffffffff811115614d6f5750505050614da4565b80602083010160043d038501811115614d8c575050505050614da4565b614d9b82602001850186614446565b82955050505050505b90565b614db081614343565b8114614dbb57600080fd5b50565b614dc781614355565b8114614dd257600080fd5b50565b614dde81614361565b8114614de957600080fd5b50565b614df5816143bb565b8114614e0057600080fd5b5056fea26469706673582212207ce0c1b69660567f370289b20f794e88ebccdacfe071db599b64164aa64224ca64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000fbb3c73779ef59f0c4a2e662f9a42a82a145e638000000000000000000000000d8723058f2b456484e3cde4ccfaea903116fa9e4000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f3535756e6974792e6d7970696e6174612e636c6f75642f697066732f516d54554d48614c4b484e7564316a3744703467507675706b57316d5a614777777a486237456a51626d427736372f00000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c80637937871f1161011a578063a22cb465116100ad578063e272b8921161007c578063e272b892146105d7578063e985e9c5146105f3578063f242432a14610623578063f2fde38b1461063f578063fe6f96051461065b576101fa565b8063a22cb4651461053f578063b0b10dff1461055b578063b80f55c91461058b578063bd85b039146105a7576101fa565b80639229cd50116100e95780639229cd50146104cb57806395d89b41146104d55780639b642de1146104f35780639b91c9111461050f576101fa565b80637937871f146104415780637b58de8b146104715780637f010b9c1461048f5780638da5cb5b146104ad576101fa565b80634f558e791161019257806365f4bce61161016157806365f4bce6146103e15780636b6af26d146103fd578063715018a6146104075780637918a47314610411576101fa565b80634f558e79146103335780635c0b2885146103635780635c975abb146103935780635ee3b3c9146103b1576101fa565b80632eb2c2d6116101ce5780632eb2c2d6146102ad5780633659ffb2146102c95780634e1273f4146102f95780634f1e9d3c14610329576101fa565b8062fdd58e146101ff57806301ffc9a71461022f57806306fdde031461025f5780630e89341c1461027d575b600080fd5b61021960048036038101906102149190613478565b610677565b60405161022691906140e9565b60405180910390f35b610249600480360381019061024491906135f7565b610740565b6040516102569190613d91565b60405180910390f35b610267610822565b6040516102749190613dac565b60405180910390f35b6102976004803603810190610292919061369a565b6108b0565b6040516102a49190613dac565b60405180910390f35b6102c760048036038101906102c291906132d2565b610933565b005b6102e360048036038101906102de9190613265565b6109d4565b6040516102f091906140e9565b60405180910390f35b610313600480360381019061030e91906134b8565b6109ec565b6040516103209190613d38565b60405180910390f35b610331610b05565b005b61034d6004803603810190610348919061369a565b610bd8565b60405161035a9190613d91565b60405180910390f35b61037d6004803603810190610378919061369a565b610bec565b60405161038a91906140ce565b60405180910390f35b61039b610c24565b6040516103a89190613d91565b60405180910390f35b6103cb60048036038101906103c6919061369a565b610c37565b6040516103d891906140ce565b60405180910390f35b6103fb60048036038101906103f691906136f4565b610c6f565b005b610405610cfd565b005b61040f610dd0565b005b61042b6004803603810190610426919061369a565b610e58565b60405161043891906140e9565b60405180910390f35b61045b60048036038101906104569190613265565b610e7c565b60405161046891906140e9565b60405180910390f35b610479610e94565b60405161048691906140e9565b60405180910390f35b610497610e9a565b6040516104a491906140e9565b60405180910390f35b6104b5610ea0565b6040516104c29190613c32565b60405180910390f35b6104d3610eca565b005b6104dd610f9d565b6040516104ea9190613dac565b60405180910390f35b61050d60048036038101906105089190613651565b61102b565b005b61052960048036038101906105249190613265565b6110b3565b60405161053691906140e9565b60405180910390f35b61055960048036038101906105549190613438565b6110cb565b005b61057560048036038101906105709190613265565b6110e1565b60405161058291906140e9565b60405180910390f35b6105a560048036038101906105a0919061357d565b6110f9565b005b6105c160048036038101906105bc919061369a565b6112c0565b6040516105ce91906140e9565b60405180910390f35b6105f160048036038101906105ec91906135ca565b6112dd565b005b61060d60048036038101906106089190613292565b611376565b60405161061a9190613d91565b60405180910390f35b61063d600480360381019061063891906133a1565b61140a565b005b61065960048036038101906106549190613265565b6114ab565b005b61067560048036038101906106709190613530565b6115a3565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df90613e6e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081b575061081a82611635565b5b9050919050565b600c805461082f90614414565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90614414565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b505050505081565b60606108bb82610bd8565b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f19061402e565b60405180910390fd5b6109038261169f565b61090c83611733565b60405160200161091d929190613c03565b6040516020818303038152906040529050919050565b61093b611894565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061098157506109808561097b611894565b611376565b5b6109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b790613f2e565b60405180910390fd5b6109cd858585858561189c565b5050505050565b60116020528060005260406000206000915090505481565b60608151835114610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a299061406e565b60405180910390fd5b6000835167ffffffffffffffff811115610a4f57610a4e6145d7565b5b604051908082528060200260200182016040528015610a7d5781602001602082028036833780820191505090505b50905060005b8451811015610afa57610aca858281518110610aa257610aa16145a8565b5b6020026020010151858381518110610abd57610abc6145a8565b5b6020026020010151610677565b828281518110610add57610adc6145a8565b5b60200260200101818152505080610af390614477565b9050610a83565b508091505092915050565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e90613fce565b60405180910390fd5b610b916000611bb0565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600080610be4836112c0565b119050919050565b60068181548110610bfc57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b600b60009054906101000a900460ff1681565b60078181548110610c4757600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b610c77611894565b73ffffffffffffffffffffffffffffffffffffffff16610c95610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613fae565b60405180910390fd5b81600981905550806008819055505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690613fce565b60405180910390fd5b610d896002611bb0565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610dd8611894565b73ffffffffffffffffffffffffffffffffffffffff16610df6610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390613fae565b60405180910390fd5b610e566000611f6f565b565b600a8181548110610e6857600080fd5b906000526020600020016000915090505481565b60106020528060005260406000206000915090505481565b60095481565b60085481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390613fce565b60405180910390fd5b610f566001611bb0565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600d8054610faa90614414565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690614414565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b505050505081565b611033611894565b73ffffffffffffffffffffffffffffffffffffffff16611051610ea0565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90613fae565b60405180910390fd5b6110b081612035565b50565b600e6020528060005260406000206000915090505481565b6110dd6110d6611894565b838361204f565b5050565b600f6020528060005260406000206000915090505481565b60095442101561113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590613e2e565b60405180910390fd5b60005b828290508160ff1610156112bb5760006111773385858560ff1681811061116b5761116a6145a8565b5b90506020020135610677565b116111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90613eee565b60405180910390fd5b6111df3384848460ff168181106111d1576111d06145a8565b5b9050602002013560016121bc565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bf12a1e633600a86868660ff16818110611236576112356145a8565b5b905060200201358154811061124e5761124d6145a8565b5b90600052602060002001546040518363ffffffff1660e01b8152600401611276929190613d0f565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b5050505080806112b3906144c0565b915050611141565b505050565b600060036000838152602001908152602001600020549050919050565b6112e5611894565b73ffffffffffffffffffffffffffffffffffffffff16611303610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613fae565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611412611894565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611458575061145785611452611894565b611376565b5b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613ece565b60405180910390fd5b6114a485858585856123d9565b5050505050565b6114b3611894565b73ffffffffffffffffffffffffffffffffffffffff166114d1610ea0565b73ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613fae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613e8e565b60405180910390fd5b6115a081611f6f565b50565b6115ab611894565b73ffffffffffffffffffffffffffffffffffffffff166115c9610ea0565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690613fae565b60405180910390fd5b818160069190611630929190612dce565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600280546116ae90614414565b80601f01602080910402602001604051908101604052809291908181526020018280546116da90614414565b80156117275780601f106116fc57610100808354040283529160200191611727565b820191906000526020600020905b81548152906001019060200180831161170a57829003601f168201915b50505050509050919050565b6060600082141561177b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061188f565b600082905060005b600082146117ad57808061179690614477565b915050600a826117a691906142de565b9150611783565b60008167ffffffffffffffff8111156117c9576117c86145d7565b5b6040519080825280601f01601f1916602001820160405280156117fb5781602001600182028036833780820191505090505b5090505b6000851461188857600182611814919061430f565b9150600a8561182391906144ea565b603061182f9190614288565b60f81b818381518110611845576118446145a8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561188191906142de565b94506117ff565b8093505050505b919050565b600033905090565b81518351146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d79061408e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790613f0e565b60405180910390fd5b600061195a611894565b905061196a81878787878761265b565b60005b8451811015611b1b57600085828151811061198b5761198a6145a8565b5b6020026020010151905060008583815181106119aa576119a96145a8565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613f8e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b009190614288565b9250508190555050505080611b1490614477565b905061196d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b92929190613d5a565b60405180910390a4611ba88187878787876127d5565b505050505050565b600b60009054906101000a900460ff1615611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790613e0e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061400e565b60405180910390fd5b600854421115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90613e4e565b60405180910390fd5b60068160ff1681548110611cca57611cc96145a8565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16611cfe8260ff166112c0565b10611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613fee565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611d9b9190613c32565b60206040518083038186803b158015611db357600080fd5b505afa158015611dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611deb91906136c7565b90508060078360ff1681548110611e0557611e046145a8565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e779190614288565b1115611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613f4e565b60405180910390fd5b611ed7338360ff166001604051806020016040528060008152506129bc565b60078260ff1681548110611eee57611eed6145a8565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f649190614288565b925050819055505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806002908051906020019061204b929190612e7c565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b59061404e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121af9190613d91565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561222c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222390613f6e565b60405180910390fd5b6000612236611894565b90506122668185600061224887612b52565b61225187612b52565b6040518060200160405280600081525061265b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490613eae565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516123ca929190614104565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090613f0e565b60405180910390fd5b6000612453611894565b905061247381878761246488612b52565b61246d88612b52565b8761265b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190613f8e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125bf9190614288565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161263c929190614104565b60405180910390a4612652828888888888612bcc565b50505050505050565b612669868686868686612db3565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561271b5760005b8351811015612719578281815181106126bd576126bc6145a8565b5b6020026020010151600360008684815181106126dc576126db6145a8565b5b6020026020010151815260200190815260200160002060008282546127019190614288565b925050819055508061271290614477565b90506126a1565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127cd5760005b83518110156127cb5782818151811061276f5761276e6145a8565b5b60200260200101516003600086848151811061278e5761278d6145a8565b5b6020026020010151815260200190815260200160002060008282546127b3919061430f565b92505081905550806127c490614477565b9050612753565b505b505050505050565b6127f48473ffffffffffffffffffffffffffffffffffffffff16612dbb565b156129b4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161283a959493929190613c4d565b602060405180830381600087803b15801561285457600080fd5b505af192505050801561288557506040513d601f19601f820116820180604052508101906128829190613624565b60015b61292b57612891614606565b806308c379a014156128ee57506128a6614d11565b806128b157506128f0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e59190613dac565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290613dce565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990613dee565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a23906140ae565b60405180910390fd5b6000612a36611894565b9050612a5781600087612a4888612b52565b612a5188612b52565b8761265b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab69190614288565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612b34929190614104565b60405180910390a4612b4b81600087878787612bcc565b5050505050565b60606000600167ffffffffffffffff811115612b7157612b706145d7565b5b604051908082528060200260200182016040528015612b9f5781602001602082028036833780820191505090505b5090508281600081518110612bb757612bb66145a8565b5b60200260200101818152505080915050919050565b612beb8473ffffffffffffffffffffffffffffffffffffffff16612dbb565b15612dab578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612c31959493929190613cb5565b602060405180830381600087803b158015612c4b57600080fd5b505af1925050508015612c7c57506040513d601f19601f82011682018060405250810190612c799190613624565b60015b612d2257612c88614606565b806308c379a01415612ce55750612c9d614d11565b80612ca85750612ce7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9190613dac565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1990613dce565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da090613dee565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b82805482825590600052602060002090600f01601090048101928215612e6b5791602002820160005b83821115612e3b57833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302612df7565b8015612e695782816101000a81549061ffff0219169055600201602081600101049283019260010302612e3b565b505b509050612e789190612f02565b5090565b828054612e8890614414565b90600052602060002090601f016020900481019282612eaa5760008555612ef1565b82601f10612ec357805160ff1916838001178555612ef1565b82800160010185558215612ef1579182015b82811115612ef0578251825591602001919060010190612ed5565b5b509050612efe9190612f02565b5090565b5b80821115612f1b576000816000905550600101612f03565b5090565b6000612f32612f2d84614152565b61412d565b90508083825260208201905082856020860282011115612f5557612f54614632565b5b60005b85811015612f855781612f6b8882613083565b845260208401935060208301925050600181019050612f58565b5050509392505050565b6000612fa2612f9d8461417e565b61412d565b90508083825260208201905082856020860282011115612fc557612fc4614632565b5b60005b85811015612ff55781612fdb888261323b565b845260208401935060208301925050600181019050612fc8565b5050509392505050565b600061301261300d846141aa565b61412d565b90508281526020810184848401111561302e5761302d614637565b5b6130398482856143d2565b509392505050565b600061305461304f846141db565b61412d565b9050828152602081018484840111156130705761306f614637565b5b61307b8482856143d2565b509392505050565b60008135905061309281614da7565b92915050565b600082601f8301126130ad576130ac61462d565b5b81356130bd848260208601612f1f565b91505092915050565b60008083601f8401126130dc576130db61462d565b5b8235905067ffffffffffffffff8111156130f9576130f8614628565b5b60208301915083602082028301111561311557613114614632565b5b9250929050565b60008083601f8401126131325761313161462d565b5b8235905067ffffffffffffffff81111561314f5761314e614628565b5b60208301915083602082028301111561316b5761316a614632565b5b9250929050565b600082601f8301126131875761318661462d565b5b8135613197848260208601612f8f565b91505092915050565b6000813590506131af81614dbe565b92915050565b6000813590506131c481614dd5565b92915050565b6000815190506131d981614dd5565b92915050565b600082601f8301126131f4576131f361462d565b5b8135613204848260208601612fff565b91505092915050565b600082601f8301126132225761322161462d565b5b8135613232848260208601613041565b91505092915050565b60008135905061324a81614dec565b92915050565b60008151905061325f81614dec565b92915050565b60006020828403121561327b5761327a614641565b5b600061328984828501613083565b91505092915050565b600080604083850312156132a9576132a8614641565b5b60006132b785828601613083565b92505060206132c885828601613083565b9150509250929050565b600080600080600060a086880312156132ee576132ed614641565b5b60006132fc88828901613083565b955050602061330d88828901613083565b945050604086013567ffffffffffffffff81111561332e5761332d61463c565b5b61333a88828901613172565b935050606086013567ffffffffffffffff81111561335b5761335a61463c565b5b61336788828901613172565b925050608086013567ffffffffffffffff8111156133885761338761463c565b5b613394888289016131df565b9150509295509295909350565b600080600080600060a086880312156133bd576133bc614641565b5b60006133cb88828901613083565b95505060206133dc88828901613083565b94505060406133ed8882890161323b565b93505060606133fe8882890161323b565b925050608086013567ffffffffffffffff81111561341f5761341e61463c565b5b61342b888289016131df565b9150509295509295909350565b6000806040838503121561344f5761344e614641565b5b600061345d85828601613083565b925050602061346e858286016131a0565b9150509250929050565b6000806040838503121561348f5761348e614641565b5b600061349d85828601613083565b92505060206134ae8582860161323b565b9150509250929050565b600080604083850312156134cf576134ce614641565b5b600083013567ffffffffffffffff8111156134ed576134ec61463c565b5b6134f985828601613098565b925050602083013567ffffffffffffffff81111561351a5761351961463c565b5b61352685828601613172565b9150509250929050565b6000806020838503121561354757613546614641565b5b600083013567ffffffffffffffff8111156135655761356461463c565b5b613571858286016130c6565b92509250509250929050565b6000806020838503121561359457613593614641565b5b600083013567ffffffffffffffff8111156135b2576135b161463c565b5b6135be8582860161311c565b92509250509250929050565b6000602082840312156135e0576135df614641565b5b60006135ee848285016131a0565b91505092915050565b60006020828403121561360d5761360c614641565b5b600061361b848285016131b5565b91505092915050565b60006020828403121561363a57613639614641565b5b6000613648848285016131ca565b91505092915050565b60006020828403121561366757613666614641565b5b600082013567ffffffffffffffff8111156136855761368461463c565b5b6136918482850161320d565b91505092915050565b6000602082840312156136b0576136af614641565b5b60006136be8482850161323b565b91505092915050565b6000602082840312156136dd576136dc614641565b5b60006136eb84828501613250565b91505092915050565b6000806040838503121561370b5761370a614641565b5b60006137198582860161323b565b925050602061372a8582860161323b565b9150509250929050565b60006137408383613be5565b60208301905092915050565b61375581614343565b82525050565b60006137668261421c565b613770818561424a565b935061377b8361420c565b8060005b838110156137ac5781516137938882613734565b975061379e8361423d565b92505060018101905061377f565b5085935050505092915050565b6137c281614355565b82525050565b60006137d382614227565b6137dd818561425b565b93506137ed8185602086016143e1565b6137f681614646565b840191505092915050565b600061380c82614232565b613816818561426c565b93506138268185602086016143e1565b61382f81614646565b840191505092915050565b600061384582614232565b61384f818561427d565b935061385f8185602086016143e1565b80840191505092915050565b600061387860348361426c565b915061388382614664565b604082019050919050565b600061389b60288361426c565b91506138a6826146b3565b604082019050919050565b60006138be601c8361426c565b91506138c982614702565b602082019050919050565b60006138e1601f8361426c565b91506138ec8261472b565b602082019050919050565b600061390460308361426c565b915061390f82614754565b604082019050919050565b6000613927602b8361426c565b9150613932826147a3565b604082019050919050565b600061394a60268361426c565b9150613955826147f2565b604082019050919050565b600061396d60248361426c565b915061397882614841565b604082019050919050565b600061399060298361426c565b915061399b82614890565b604082019050919050565b60006139b360208361426c565b91506139be826148df565b602082019050919050565b60006139d660258361426c565b91506139e182614908565b604082019050919050565b60006139f960328361426c565b9150613a0482614957565b604082019050919050565b6000613a1c602b8361426c565b9150613a27826149a6565b604082019050919050565b6000613a3f60238361426c565b9150613a4a826149f5565b604082019050919050565b6000613a62602a8361426c565b9150613a6d82614a44565b604082019050919050565b6000613a8560058361427d565b9150613a9082614a93565b600582019050919050565b6000613aa860208361426c565b9150613ab382614abc565b602082019050919050565b6000613acb602e8361426c565b9150613ad682614ae5565b604082019050919050565b6000613aee60378361426c565b9150613af982614b34565b604082019050919050565b6000613b1160108361426c565b9150613b1c82614b83565b602082019050919050565b6000613b3460168361426c565b9150613b3f82614bac565b602082019050919050565b6000613b5760298361426c565b9150613b6282614bd5565b604082019050919050565b6000613b7a60298361426c565b9150613b8582614c24565b604082019050919050565b6000613b9d60288361426c565b9150613ba882614c73565b604082019050919050565b6000613bc060218361426c565b9150613bcb82614cc2565b604082019050919050565b613bdf8161438d565b82525050565b613bee816143bb565b82525050565b613bfd816143bb565b82525050565b6000613c0f828561383a565b9150613c1b828461383a565b9150613c2682613a78565b91508190509392505050565b6000602082019050613c47600083018461374c565b92915050565b600060a082019050613c62600083018861374c565b613c6f602083018761374c565b8181036040830152613c81818661375b565b90508181036060830152613c95818561375b565b90508181036080830152613ca981846137c8565b90509695505050505050565b600060a082019050613cca600083018861374c565b613cd7602083018761374c565b613ce46040830186613bf4565b613cf16060830185613bf4565b8181036080830152613d0381846137c8565b90509695505050505050565b6000604082019050613d24600083018561374c565b613d316020830184613bf4565b9392505050565b60006020820190508181036000830152613d52818461375b565b905092915050565b60006040820190508181036000830152613d74818561375b565b90508181036020830152613d88818461375b565b90509392505050565b6000602082019050613da660008301846137b9565b92915050565b60006020820190508181036000830152613dc68184613801565b905092915050565b60006020820190508181036000830152613de78161386b565b9050919050565b60006020820190508181036000830152613e078161388e565b9050919050565b60006020820190508181036000830152613e27816138b1565b9050919050565b60006020820190508181036000830152613e47816138d4565b9050919050565b60006020820190508181036000830152613e67816138f7565b9050919050565b60006020820190508181036000830152613e878161391a565b9050919050565b60006020820190508181036000830152613ea78161393d565b9050919050565b60006020820190508181036000830152613ec781613960565b9050919050565b60006020820190508181036000830152613ee781613983565b9050919050565b60006020820190508181036000830152613f07816139a6565b9050919050565b60006020820190508181036000830152613f27816139c9565b9050919050565b60006020820190508181036000830152613f47816139ec565b9050919050565b60006020820190508181036000830152613f6781613a0f565b9050919050565b60006020820190508181036000830152613f8781613a32565b9050919050565b60006020820190508181036000830152613fa781613a55565b9050919050565b60006020820190508181036000830152613fc781613a9b565b9050919050565b60006020820190508181036000830152613fe781613abe565b9050919050565b6000602082019050818103600083015261400781613ae1565b9050919050565b6000602082019050818103600083015261402781613b04565b9050919050565b6000602082019050818103600083015261404781613b27565b9050919050565b6000602082019050818103600083015261406781613b4a565b9050919050565b6000602082019050818103600083015261408781613b6d565b9050919050565b600060208201905081810360008301526140a781613b90565b9050919050565b600060208201905081810360008301526140c781613bb3565b9050919050565b60006020820190506140e36000830184613bd6565b92915050565b60006020820190506140fe6000830184613bf4565b92915050565b60006040820190506141196000830185613bf4565b6141266020830184613bf4565b9392505050565b6000614137614148565b90506141438282614446565b919050565b6000604051905090565b600067ffffffffffffffff82111561416d5761416c6145d7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614199576141986145d7565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141c5576141c46145d7565b5b6141ce82614646565b9050602081019050919050565b600067ffffffffffffffff8211156141f6576141f56145d7565b5b6141ff82614646565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614293826143bb565b915061429e836143bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142d3576142d261451b565b5b828201905092915050565b60006142e9826143bb565b91506142f4836143bb565b9250826143045761430361454a565b5b828204905092915050565b600061431a826143bb565b9150614325836143bb565b9250828210156143385761433761451b565b5b828203905092915050565b600061434e8261439b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143ff5780820151818401526020810190506143e4565b8381111561440e576000848401525b50505050565b6000600282049050600182168061442c57607f821691505b602082108114156144405761443f614579565b5b50919050565b61444f82614646565b810181811067ffffffffffffffff8211171561446e5761446d6145d7565b5b80604052505050565b6000614482826143bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144b5576144b461451b565b5b600182019050919050565b60006144cb826143c5565b915060ff8214156144df576144de61451b565b5b600182019050919050565b60006144f5826143bb565b9150614500836143bb565b9250826145105761450f61454a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156146255760046000803e614622600051614657565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f436f6e74726163742069732063757272656e746c792070617573656400000000600082015250565b7f596f752063616e2774206275726e20796f757220746f6b656e73207965742e00600082015250565b7f596f752063616e277420636c61696d20616e796d6f726520746f78696320706f60008201527f7765722c2074696d652069732075702e00000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4e6565647320746f206861766520746f6b656e2c20746f206275726e2069742e600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520656e6f756768206672656520746f6b656e60008201527f7320666f72206d696e742e000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7527766520616c726561647920636c61696d6564206f6e6520666f72207460008201527f686973206361746567676f72792e000000000000000000000000000000000000602082015250565b7f4d617820737570706c79207265616368656420666f72207468697320746f786960008201527f632c20706c65617365206d696e7420616e6f746865722e000000000000000000602082015250565b7f4e6f20626f747320616c6c6f7765642e00000000000000000000000000000000600082015250565b7f5552493a206e6f6e6578697374656e7420746f6b656e00000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614d2157614da4565b614d29614148565b60043d036004823e80513d602482011167ffffffffffffffff82111715614d51575050614da4565b808201805167ffffffffffffffff811115614d6f5750505050614da4565b80602083010160043d038501811115614d8c575050505050614da4565b614d9b82602001850186614446565b82955050505050505b90565b614db081614343565b8114614dbb57600080fd5b50565b614dc781614355565b8114614dd257600080fd5b50565b614dde81614361565b8114614de957600080fd5b50565b614df5816143bb565b8114614e0057600080fd5b5056fea26469706673582212207ce0c1b69660567f370289b20f794e88ebccdacfe071db599b64164aa64224ca64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000fbb3c73779ef59f0c4a2e662f9a42a82a145e638000000000000000000000000d8723058f2b456484e3cde4ccfaea903116fa9e4000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f3535756e6974792e6d7970696e6174612e636c6f75642f697066732f516d54554d48614c4b484e7564316a3744703467507675706b57316d5a614777777a486237456a51626d427736372f00000000000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): https://55unity.mypinata.cloud/ipfs/QmTUMHaLKHNud1j7Dp4gPvupkW1mZaGwwzHb7EjQbmBw67/
Arg [1] : _survive (address): 0xFBB3c73779Ef59F0C4A2e662F9A42A82a145e638
Arg [2] : _unity (address): 0xD8723058f2B456484E3cdE4ccfaeA903116fA9e4

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 000000000000000000000000fbb3c73779ef59f0c4a2e662f9a42a82a145e638
Arg [2] : 000000000000000000000000d8723058f2b456484e3cde4ccfaea903116fa9e4
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000053
Arg [4] : 68747470733a2f2f3535756e6974792e6d7970696e6174612e636c6f75642f69
Arg [5] : 7066732f516d54554d48614c4b484e7564316a3744703467507675706b57316d
Arg [6] : 5a614777777a486237456a51626d427736372f00000000000000000000000000


Deployed Bytecode Sourcemap

43561:3903:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28183:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27206:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44114:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46497:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30122:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44433:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28580:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44894:206;;;:::i;:::-;;42622:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43666:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44075:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43719:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46836:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45324:214;;;:::i;:::-;;7811:103;;;:::i;:::-;;43967:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44372:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43867:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43820:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7160:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45108:208;;;:::i;:::-;;44155:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46731:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44254:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29177:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44313:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47025:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42411:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46400:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29404:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29644:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8069:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46206:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28183:231;28269:7;28316:1;28297:21;;:7;:21;;;;28289:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28384:9;:13;28394:2;28384:13;;;;;;;;;;;:22;28398:7;28384:22;;;;;;;;;;;;;;;;28377:29;;28183:231;;;;:::o;27206:310::-;27308:4;27360:26;27345:41;;;:11;:41;;;;:110;;;;27418:37;27403:52;;;:11;:52;;;;27345:110;:163;;;;27472:36;27496:11;27472:23;:36::i;:::-;27345:163;27325:183;;27206:310;;;:::o;44114:34::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46497:226::-;46553:13;46587:11;46594:3;46587:6;:11::i;:::-;46579:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;46667:14;46677:3;46667:9;:14::i;:::-;46683:21;46700:3;46683:16;:21::i;:::-;46650:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46636:79;;46497:226;;;:::o;30122:442::-;30363:12;:10;:12::i;:::-;30355:20;;:4;:20;;;:60;;;;30379:36;30396:4;30402:12;:10;:12::i;:::-;30379:16;:36::i;:::-;30355:60;30333:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;30504:52;30527:4;30533:2;30537:3;30542:7;30551:4;30504:22;:52::i;:::-;30122:442;;;;;:::o;44433:45::-;;;;;;;;;;;;;;;;;:::o;28580:524::-;28736:16;28797:3;:10;28778:8;:15;:29;28770:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28866:30;28913:8;:15;28899:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28866:63;;28947:9;28942:122;28966:8;:15;28962:1;:19;28942:122;;;29022:30;29032:8;29041:1;29032:11;;;;;;;;:::i;:::-;;;;;;;;29045:3;29049:1;29045:6;;;;;;;;:::i;:::-;;;;;;;;29022:9;:30::i;:::-;29003:13;29017:1;29003:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;28983:3;;;;:::i;:::-;;;28942:122;;;;29083:13;29076:20;;;28580:524;;;;:::o;44894:206::-;44975:1;44942:17;:29;44960:10;44942:29;;;;;;;;;;;;;;;;:34;44934:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;45038:8;45044:1;45038:5;:8::i;:::-;45091:1;45059:17;:29;45077:10;45059:29;;;;;;;;;;;;;;;:33;;;;44894:206::o;42622:122::-;42679:4;42735:1;42703:29;42729:2;42703:25;:29::i;:::-;:33;42696:40;;42622:122;;;:::o;43666:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44075:26::-;;;;;;;;;;;;;:::o;43719:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46836:181::-;7391:12;:10;:12::i;:::-;7380:23;;:7;:5;:7::i;:::-;:23;;;7372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46954:16:::1;46936:15;:34;;;;46996:13;46981:12;:28;;;;46836:181:::0;;:::o;45324:214::-;45409:1;45374:19;:31;45394:10;45374:31;;;;;;;;;;;;;;;;:36;45366:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;45474:8;45480:1;45474:5;:8::i;:::-;45529:1;45495:19;:31;45515:10;45495:31;;;;;;;;;;;;;;;:35;;;;45324:214::o;7811:103::-;7391:12;:10;:12::i;:::-;7380:23;;:7;:5;:7::i;:::-;:23;;;7372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7876:30:::1;7903:1;7876:18;:30::i;:::-;7811:103::o:0;43967:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44372:54::-;;;;;;;;;;;;;;;;;:::o;43867:43::-;;;;:::o;43820:40::-;;;;:::o;7160:87::-;7206:7;7233:6;;;;;;;;;;;7226:13;;7160:87;:::o;45108:208::-;45189:1;45156:17;:29;45174:10;45156:29;;;;;;;;;;;;;;;;:34;45148:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;45254:8;45260:1;45254:5;:8::i;:::-;45307:1;45275:17;:29;45293:10;45275:29;;;;;;;;;;;;;;;:33;;;;45108:208::o;44155:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46731:97::-;7391:12;:10;:12::i;:::-;7380:23;;:7;:5;:7::i;:::-;:23;;;7372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46799:21:::1;46813:6;46799:13;:21::i;:::-;46731:97:::0;:::o;44254:52::-;;;;;;;;;;;;;;;;;:::o;29177:155::-;29272:52;29291:12;:10;:12::i;:::-;29305:8;29315;29272:18;:52::i;:::-;29177:155;;:::o;44313:52::-;;;;;;;;;;;;;;;;;:::o;47025:434::-;47115:15;;47096;:34;;47088:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47183:7;47179:273;47200:8;;:15;;47196:1;:19;;;47179:273;;;47281:1;47244:34;47254:10;47266:8;;47275:1;47266:11;;;;;;;;;:::i;:::-;;;;;;;;47244:9;:34::i;:::-;:38;47236:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;47334:33;47340:10;47352:8;;47361:1;47352:11;;;;;;;;;:::i;:::-;;;;;;;;47365:1;47334:5;:33::i;:::-;47382:7;;;;;;;;;;;:18;;;47401:10;47413:13;47427:8;;47436:1;47427:11;;;;;;;;;:::i;:::-;;;;;;;;47413:26;;;;;;;;:::i;:::-;;;;;;;;;;47382:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47217:3;;;;;:::i;:::-;;;;47179:273;;;;47025:434;;:::o;42411:113::-;42473:7;42500:12;:16;42513:2;42500:16;;;;;;;;;;;;42493:23;;42411:113;;;:::o;46400:89::-;7391:12;:10;:12::i;:::-;7380:23;;:7;:5;:7::i;:::-;:23;;;7372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46475:6:::1;46466;;:15;;;;;;;;;;;;;;;;;;46400:89:::0;:::o;29404:168::-;29503:4;29527:18;:27;29546:7;29527:27;;;;;;;;;;;;;;;:37;29555:8;29527:37;;;;;;;;;;;;;;;;;;;;;;;;;29520:44;;29404:168;;;;:::o;29644:401::-;29860:12;:10;:12::i;:::-;29852:20;;:4;:20;;;:60;;;;29876:36;29893:4;29899:12;:10;:12::i;:::-;29876:16;:36::i;:::-;29852:60;29830:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;29992:45;30010:4;30016:2;30020;30024:6;30032:4;29992:17;:45::i;:::-;29644:401;;;;;:::o;8069:201::-;7391:12;:10;:12::i;:::-;7380:23;;:7;:5;:7::i;:::-;:23;;;7372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8178:1:::1;8158:22;;:8;:22;;;;8150:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8234:28;8253:8;8234:18;:28::i;:::-;8069:201:::0;:::o;46206:124::-;7391:12;:10;:12::i;:::-;7380:23;;:7;:5;:7::i;:::-;:23;;;7372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46308:14:::1;;46292:13;:30;;;;;;;:::i;:::-;;46206:124:::0;;:::o;18561:157::-;18646:4;18685:25;18670:40;;;:11;:40;;;;18663:47;;18561:157;;;:::o;27927:105::-;27987:13;28020:4;28013:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27927:105;;;:::o;687:723::-;743:13;973:1;964:5;:10;960:53;;;991:10;;;;;;;;;;;;;;;;;;;;;960:53;1023:12;1038:5;1023:20;;1054:14;1079:78;1094:1;1086:4;:9;1079:78;;1112:8;;;;;:::i;:::-;;;;1143:2;1135:10;;;;;:::i;:::-;;;1079:78;;;1167:19;1199:6;1189:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1167:39;;1217:154;1233:1;1224:5;:10;1217:154;;1261:1;1251:11;;;;;:::i;:::-;;;1328:2;1320:5;:10;;;;:::i;:::-;1307:2;:24;;;;:::i;:::-;1294:39;;1277:6;1284;1277:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1357:2;1348:11;;;;;:::i;:::-;;;1217:154;;;1395:6;1381:21;;;;;687:723;;;;:::o;5884:98::-;5937:7;5964:10;5957:17;;5884:98;:::o;32206:1074::-;32433:7;:14;32419:3;:10;:28;32411:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32525:1;32511:16;;:2;:16;;;;32503:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32582:16;32601:12;:10;:12::i;:::-;32582:31;;32626:60;32647:8;32657:4;32663:2;32667:3;32672:7;32681:4;32626:20;:60::i;:::-;32704:9;32699:421;32723:3;:10;32719:1;:14;32699:421;;;32755:10;32768:3;32772:1;32768:6;;;;;;;;:::i;:::-;;;;;;;;32755:19;;32789:14;32806:7;32814:1;32806:10;;;;;;;;:::i;:::-;;;;;;;;32789:27;;32833:19;32855:9;:13;32865:2;32855:13;;;;;;;;;;;:19;32869:4;32855:19;;;;;;;;;;;;;;;;32833:41;;32912:6;32897:11;:21;;32889:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33045:6;33031:11;:20;33009:9;:13;33019:2;33009:13;;;;;;;;;;;:19;33023:4;33009:19;;;;;;;;;;;;;;;:42;;;;33102:6;33081:9;:13;33091:2;33081:13;;;;;;;;;;;:17;33095:2;33081:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32740:380;;;32735:3;;;;:::i;:::-;;;32699:421;;;;33167:2;33137:47;;33161:4;33137:47;;33151:8;33137:47;;;33171:3;33176:7;33137:47;;;;;;;:::i;:::-;;;;;;;;33197:75;33233:8;33243:4;33249:2;33253:3;33258:7;33267:4;33197:35;:75::i;:::-;32400:880;32206:1074;;;;;:::o;45546:648::-;44827:6;;;;;;;;;;;44826:7;44818:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;45628:10:::1;45615:23;;:9;:23;;;45607:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;45697:12;;45678:15;:31;;45670:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;45802:13;45816:5;45802:20;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45781:41;;:18;45793:5;45781:18;;:11;:18::i;:::-;:41;45773:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;45893:20;45916:5;;;;;;;;;;;:15;;;45932:10;45916:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45893:50;;46013:12;45987:15;46003:5;45987:22;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45962:47;;:10;:22;45973:10;45962:22;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;:63;;45954:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;46094:31;46100:10;46112:5;46094:31;;46119:1;46094:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;46164:15;46180:5;46164:22;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46138:48;;:10;:22;46149:10;46138:22;;;;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;;;;;;;;45596:598;45546:648:::0;:::o;8430:191::-;8504:16;8523:6;;;;;;;;;;;8504:25;;8549:8;8540:6;;:17;;;;;;;;;;;;;;;;;;8604:8;8573:40;;8594:8;8573:40;;;;;;;;;;;;8493:128;8430:191;:::o;34124:88::-;34198:6;34191:4;:13;;;;;;;;;;;;:::i;:::-;;34124:88;:::o;38392:331::-;38547:8;38538:17;;:5;:17;;;;38530:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38650:8;38612:18;:25;38631:5;38612:25;;;;;;;;;;;;;;;:35;38638:8;38612:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38696:8;38674:41;;38689:5;38674:41;;;38706:8;38674:41;;;;;;:::i;:::-;;;;;;;;38392:331;;;:::o;36508:648::-;36651:1;36635:18;;:4;:18;;;;36627:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36706:16;36725:12;:10;:12::i;:::-;36706:31;;36750:102;36771:8;36781:4;36795:1;36799:21;36817:2;36799:17;:21::i;:::-;36822:25;36840:6;36822:17;:25::i;:::-;36750:102;;;;;;;;;;;;:20;:102::i;:::-;36865:19;36887:9;:13;36897:2;36887:13;;;;;;;;;;;:19;36901:4;36887:19;;;;;;;;;;;;;;;;36865:41;;36940:6;36925:11;:21;;36917:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37059:6;37045:11;:20;37023:9;:13;37033:2;37023:13;;;;;;;;;;;:19;37037:4;37023:19;;;;;;;;;;;;;;;:42;;;;37133:1;37094:54;;37119:4;37094:54;;37109:8;37094:54;;;37137:2;37141:6;37094:54;;;;;;;:::i;:::-;;;;;;;;36616:540;;36508:648;;;:::o;31028:820::-;31230:1;31216:16;;:2;:16;;;;31208:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31287:16;31306:12;:10;:12::i;:::-;31287:31;;31331:96;31352:8;31362:4;31368:2;31372:21;31390:2;31372:17;:21::i;:::-;31395:25;31413:6;31395:17;:25::i;:::-;31422:4;31331:20;:96::i;:::-;31440:19;31462:9;:13;31472:2;31462:13;;;;;;;;;;;:19;31476:4;31462:19;;;;;;;;;;;;;;;;31440:41;;31515:6;31500:11;:21;;31492:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31640:6;31626:11;:20;31604:9;:13;31614:2;31604:13;;;;;;;;;;;:19;31618:4;31604:19;;;;;;;;;;;;;;;:42;;;;31689:6;31668:9;:13;31678:2;31668:13;;;;;;;;;;;:17;31682:2;31668:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31744:2;31713:46;;31738:4;31713:46;;31728:8;31713:46;;;31748:2;31752:6;31713:46;;;;;;;:::i;:::-;;;;;;;;31772:68;31803:8;31813:4;31819:2;31823;31827:6;31835:4;31772:30;:68::i;:::-;31197:651;;31028:820;;;;;:::o;42819:655::-;43058:66;43085:8;43095:4;43101:2;43105:3;43110:7;43119:4;43058:26;:66::i;:::-;43157:1;43141:18;;:4;:18;;;43137:160;;;43181:9;43176:110;43200:3;:10;43196:1;:14;43176:110;;;43260:7;43268:1;43260:10;;;;;;;;:::i;:::-;;;;;;;;43236:12;:20;43249:3;43253:1;43249:6;;;;;;;;:::i;:::-;;;;;;;;43236:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;43212:3;;;;:::i;:::-;;;43176:110;;;;43137:160;43327:1;43313:16;;:2;:16;;;43309:158;;;43351:9;43346:110;43370:3;:10;43366:1;:14;43346:110;;;43430:7;43438:1;43430:10;;;;;;;;:::i;:::-;;;;;;;;43406:12;:20;43419:3;43423:1;43419:6;;;;;;;;:::i;:::-;;;;;;;;43406:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;43382:3;;;;:::i;:::-;;;43346:110;;;;43309:158;42819:655;;;;;;:::o;40660:813::-;40900:15;:2;:13;;;:15::i;:::-;40896:570;;;40953:2;40936:43;;;40980:8;40990:4;40996:3;41001:7;41010:4;40936:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40932:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41328:6;41321:14;;;;;;;;;;;:::i;:::-;;;;;;;;40932:523;;;41377:62;;;;;;;;;;:::i;:::-;;;;;;;;40932:523;41109:48;;;41097:60;;;:8;:60;;;;41093:159;;41182:50;;;;;;;;;;:::i;:::-;;;;;;;;41093:159;41016:251;40896:570;40660:813;;;;;;:::o;34598:569::-;34765:1;34751:16;;:2;:16;;;;34743:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34818:16;34837:12;:10;:12::i;:::-;34818:31;;34862:102;34883:8;34901:1;34905:2;34909:21;34927:2;34909:17;:21::i;:::-;34932:25;34950:6;34932:17;:25::i;:::-;34959:4;34862:20;:102::i;:::-;34998:6;34977:9;:13;34987:2;34977:13;;;;;;;;;;;:17;34991:2;34977:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35057:2;35020:52;;35053:1;35020:52;;35035:8;35020:52;;;35061:2;35065:6;35020:52;;;;;;;:::i;:::-;;;;;;;;35085:74;35116:8;35134:1;35138:2;35142;35146:6;35154:4;35085:30;:74::i;:::-;34732:435;34598:569;;;;:::o;41481:198::-;41547:16;41576:22;41615:1;41601:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41576:41;;41639:7;41628:5;41634:1;41628:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;41666:5;41659:12;;;41481:198;;;:::o;39908:744::-;40123:15;:2;:13;;;:15::i;:::-;40119:526;;;40176:2;40159:38;;;40198:8;40208:4;40214:2;40218:6;40226:4;40159:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40155:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40507:6;40500:14;;;;;;;;;;;:::i;:::-;;;;;;;;40155:479;;;40556:62;;;;;;;;;;:::i;:::-;;;;;;;;40155:479;40293:43;;;40281:55;;;:8;:55;;;;40277:154;;40361:50;;;;;;;;;;:::i;:::-;;;;;;;;40277:154;40232:214;40119:526;39908:744;;;;;;:::o;39679:221::-;;;;;;;:::o;9448:387::-;9508:4;9716:12;9783:7;9771:20;9763:28;;9826:1;9819:4;:8;9812:15;;;9448:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2885:567::-;2957:8;2967:6;3017:3;3010:4;3002:6;2998:17;2994:27;2984:122;;3025:79;;:::i;:::-;2984:122;3138:6;3125:20;3115:30;;3168:18;3160:6;3157:30;3154:117;;;3190:79;;:::i;:::-;3154:117;3304:4;3296:6;3292:17;3280:29;;3358:3;3350:4;3342:6;3338:17;3328:8;3324:32;3321:41;3318:128;;;3365:79;;:::i;:::-;3318:128;2885:567;;;;;:::o;3475:568::-;3548:8;3558:6;3608:3;3601:4;3593:6;3589:17;3585:27;3575:122;;3616:79;;:::i;:::-;3575:122;3729:6;3716:20;3706:30;;3759:18;3751:6;3748:30;3745:117;;;3781:79;;:::i;:::-;3745:117;3895:4;3887:6;3883:17;3871:29;;3949:3;3941:4;3933:6;3929:17;3919:8;3915:32;3912:41;3909:128;;;3956:79;;:::i;:::-;3909:128;3475:568;;;;;:::o;4066:370::-;4137:5;4186:3;4179:4;4171:6;4167:17;4163:27;4153:122;;4194:79;;:::i;:::-;4153:122;4311:6;4298:20;4336:94;4426:3;4418:6;4411:4;4403:6;4399:17;4336:94;:::i;:::-;4327:103;;4143:293;4066:370;;;;:::o;4442:133::-;4485:5;4523:6;4510:20;4501:29;;4539:30;4563:5;4539:30;:::i;:::-;4442:133;;;;:::o;4581:137::-;4626:5;4664:6;4651:20;4642:29;;4680:32;4706:5;4680:32;:::i;:::-;4581:137;;;;:::o;4724:141::-;4780:5;4811:6;4805:13;4796:22;;4827:32;4853:5;4827:32;:::i;:::-;4724:141;;;;:::o;4884:338::-;4939:5;4988:3;4981:4;4973:6;4969:17;4965:27;4955:122;;4996:79;;:::i;:::-;4955:122;5113:6;5100:20;5138:78;5212:3;5204:6;5197:4;5189:6;5185:17;5138:78;:::i;:::-;5129:87;;4945:277;4884:338;;;;:::o;5242:340::-;5298:5;5347:3;5340:4;5332:6;5328:17;5324:27;5314:122;;5355:79;;:::i;:::-;5314:122;5472:6;5459:20;5497:79;5572:3;5564:6;5557:4;5549:6;5545:17;5497:79;:::i;:::-;5488:88;;5304:278;5242:340;;;;:::o;5588:139::-;5634:5;5672:6;5659:20;5650:29;;5688:33;5715:5;5688:33;:::i;:::-;5588:139;;;;:::o;5733:143::-;5790:5;5821:6;5815:13;5806:22;;5837:33;5864:5;5837:33;:::i;:::-;5733:143;;;;:::o;5882:329::-;5941:6;5990:2;5978:9;5969:7;5965:23;5961:32;5958:119;;;5996:79;;:::i;:::-;5958:119;6116:1;6141:53;6186:7;6177:6;6166:9;6162:22;6141:53;:::i;:::-;6131:63;;6087:117;5882:329;;;;:::o;6217:474::-;6285:6;6293;6342:2;6330:9;6321:7;6317:23;6313:32;6310:119;;;6348:79;;:::i;:::-;6310:119;6468:1;6493:53;6538:7;6529:6;6518:9;6514:22;6493:53;:::i;:::-;6483:63;;6439:117;6595:2;6621:53;6666:7;6657:6;6646:9;6642:22;6621:53;:::i;:::-;6611:63;;6566:118;6217:474;;;;;:::o;6697:1509::-;6851:6;6859;6867;6875;6883;6932:3;6920:9;6911:7;6907:23;6903:33;6900:120;;;6939:79;;:::i;:::-;6900:120;7059:1;7084:53;7129:7;7120:6;7109:9;7105:22;7084:53;:::i;:::-;7074:63;;7030:117;7186:2;7212:53;7257:7;7248:6;7237:9;7233:22;7212:53;:::i;:::-;7202:63;;7157:118;7342:2;7331:9;7327:18;7314:32;7373:18;7365:6;7362:30;7359:117;;;7395:79;;:::i;:::-;7359:117;7500:78;7570:7;7561:6;7550:9;7546:22;7500:78;:::i;:::-;7490:88;;7285:303;7655:2;7644:9;7640:18;7627:32;7686:18;7678:6;7675:30;7672:117;;;7708:79;;:::i;:::-;7672:117;7813:78;7883:7;7874:6;7863:9;7859:22;7813:78;:::i;:::-;7803:88;;7598:303;7968:3;7957:9;7953:19;7940:33;8000:18;7992:6;7989:30;7986:117;;;8022:79;;:::i;:::-;7986:117;8127:62;8181:7;8172:6;8161:9;8157:22;8127:62;:::i;:::-;8117:72;;7911:288;6697:1509;;;;;;;;:::o;8212:1089::-;8316:6;8324;8332;8340;8348;8397:3;8385:9;8376:7;8372:23;8368:33;8365:120;;;8404:79;;:::i;:::-;8365:120;8524:1;8549:53;8594:7;8585:6;8574:9;8570:22;8549:53;:::i;:::-;8539:63;;8495:117;8651:2;8677:53;8722:7;8713:6;8702:9;8698:22;8677:53;:::i;:::-;8667:63;;8622:118;8779:2;8805:53;8850:7;8841:6;8830:9;8826:22;8805:53;:::i;:::-;8795:63;;8750:118;8907:2;8933:53;8978:7;8969:6;8958:9;8954:22;8933:53;:::i;:::-;8923:63;;8878:118;9063:3;9052:9;9048:19;9035:33;9095:18;9087:6;9084:30;9081:117;;;9117:79;;:::i;:::-;9081:117;9222:62;9276:7;9267:6;9256:9;9252:22;9222:62;:::i;:::-;9212:72;;9006:288;8212:1089;;;;;;;;:::o;9307:468::-;9372:6;9380;9429:2;9417:9;9408:7;9404:23;9400:32;9397:119;;;9435:79;;:::i;:::-;9397:119;9555:1;9580:53;9625:7;9616:6;9605:9;9601:22;9580:53;:::i;:::-;9570:63;;9526:117;9682:2;9708:50;9750:7;9741:6;9730:9;9726:22;9708:50;:::i;:::-;9698:60;;9653:115;9307:468;;;;;:::o;9781:474::-;9849:6;9857;9906:2;9894:9;9885:7;9881:23;9877:32;9874:119;;;9912:79;;:::i;:::-;9874:119;10032:1;10057:53;10102:7;10093:6;10082:9;10078:22;10057:53;:::i;:::-;10047:63;;10003:117;10159:2;10185:53;10230:7;10221:6;10210:9;10206:22;10185:53;:::i;:::-;10175:63;;10130:118;9781:474;;;;;:::o;10261:894::-;10379:6;10387;10436:2;10424:9;10415:7;10411:23;10407:32;10404:119;;;10442:79;;:::i;:::-;10404:119;10590:1;10579:9;10575:17;10562:31;10620:18;10612:6;10609:30;10606:117;;;10642:79;;:::i;:::-;10606:117;10747:78;10817:7;10808:6;10797:9;10793:22;10747:78;:::i;:::-;10737:88;;10533:302;10902:2;10891:9;10887:18;10874:32;10933:18;10925:6;10922:30;10919:117;;;10955:79;;:::i;:::-;10919:117;11060:78;11130:7;11121:6;11110:9;11106:22;11060:78;:::i;:::-;11050:88;;10845:303;10261:894;;;;;:::o;11161:557::-;11246:6;11254;11303:2;11291:9;11282:7;11278:23;11274:32;11271:119;;;11309:79;;:::i;:::-;11271:119;11457:1;11446:9;11442:17;11429:31;11487:18;11479:6;11476:30;11473:117;;;11509:79;;:::i;:::-;11473:117;11622:79;11693:7;11684:6;11673:9;11669:22;11622:79;:::i;:::-;11604:97;;;;11400:311;11161:557;;;;;:::o;11724:559::-;11810:6;11818;11867:2;11855:9;11846:7;11842:23;11838:32;11835:119;;;11873:79;;:::i;:::-;11835:119;12021:1;12010:9;12006:17;11993:31;12051:18;12043:6;12040:30;12037:117;;;12073:79;;:::i;:::-;12037:117;12186:80;12258:7;12249:6;12238:9;12234:22;12186:80;:::i;:::-;12168:98;;;;11964:312;11724:559;;;;;:::o;12289:323::-;12345:6;12394:2;12382:9;12373:7;12369:23;12365:32;12362:119;;;12400:79;;:::i;:::-;12362:119;12520:1;12545:50;12587:7;12578:6;12567:9;12563:22;12545:50;:::i;:::-;12535:60;;12491:114;12289:323;;;;:::o;12618:327::-;12676:6;12725:2;12713:9;12704:7;12700:23;12696:32;12693:119;;;12731:79;;:::i;:::-;12693:119;12851:1;12876:52;12920:7;12911:6;12900:9;12896:22;12876:52;:::i;:::-;12866:62;;12822:116;12618:327;;;;:::o;12951:349::-;13020:6;13069:2;13057:9;13048:7;13044:23;13040:32;13037:119;;;13075:79;;:::i;:::-;13037:119;13195:1;13220:63;13275:7;13266:6;13255:9;13251:22;13220:63;:::i;:::-;13210:73;;13166:127;12951:349;;;;:::o;13306:509::-;13375:6;13424:2;13412:9;13403:7;13399:23;13395:32;13392:119;;;13430:79;;:::i;:::-;13392:119;13578:1;13567:9;13563:17;13550:31;13608:18;13600:6;13597:30;13594:117;;;13630:79;;:::i;:::-;13594:117;13735:63;13790:7;13781:6;13770:9;13766:22;13735:63;:::i;:::-;13725:73;;13521:287;13306:509;;;;:::o;13821:329::-;13880:6;13929:2;13917:9;13908:7;13904:23;13900:32;13897:119;;;13935:79;;:::i;:::-;13897:119;14055:1;14080:53;14125:7;14116:6;14105:9;14101:22;14080:53;:::i;:::-;14070:63;;14026:117;13821:329;;;;:::o;14156:351::-;14226:6;14275:2;14263:9;14254:7;14250:23;14246:32;14243:119;;;14281:79;;:::i;:::-;14243:119;14401:1;14426:64;14482:7;14473:6;14462:9;14458:22;14426:64;:::i;:::-;14416:74;;14372:128;14156:351;;;;:::o;14513:474::-;14581:6;14589;14638:2;14626:9;14617:7;14613:23;14609:32;14606:119;;;14644:79;;:::i;:::-;14606:119;14764:1;14789:53;14834:7;14825:6;14814:9;14810:22;14789:53;:::i;:::-;14779:63;;14735:117;14891:2;14917:53;14962:7;14953:6;14942:9;14938:22;14917:53;:::i;:::-;14907:63;;14862:118;14513:474;;;;;:::o;14993:179::-;15062:10;15083:46;15125:3;15117:6;15083:46;:::i;:::-;15161:4;15156:3;15152:14;15138:28;;14993:179;;;;:::o;15178:118::-;15265:24;15283:5;15265:24;:::i;:::-;15260:3;15253:37;15178:118;;:::o;15332:732::-;15451:3;15480:54;15528:5;15480:54;:::i;:::-;15550:86;15629:6;15624:3;15550:86;:::i;:::-;15543:93;;15660:56;15710:5;15660:56;:::i;:::-;15739:7;15770:1;15755:284;15780:6;15777:1;15774:13;15755:284;;;15856:6;15850:13;15883:63;15942:3;15927:13;15883:63;:::i;:::-;15876:70;;15969:60;16022:6;15969:60;:::i;:::-;15959:70;;15815:224;15802:1;15799;15795:9;15790:14;;15755:284;;;15759:14;16055:3;16048:10;;15456:608;;;15332:732;;;;:::o;16070:109::-;16151:21;16166:5;16151:21;:::i;:::-;16146:3;16139:34;16070:109;;:::o;16185:360::-;16271:3;16299:38;16331:5;16299:38;:::i;:::-;16353:70;16416:6;16411:3;16353:70;:::i;:::-;16346:77;;16432:52;16477:6;16472:3;16465:4;16458:5;16454:16;16432:52;:::i;:::-;16509:29;16531:6;16509:29;:::i;:::-;16504:3;16500:39;16493:46;;16275:270;16185:360;;;;:::o;16551:364::-;16639:3;16667:39;16700:5;16667:39;:::i;:::-;16722:71;16786:6;16781:3;16722:71;:::i;:::-;16715:78;;16802:52;16847:6;16842:3;16835:4;16828:5;16824:16;16802:52;:::i;:::-;16879:29;16901:6;16879:29;:::i;:::-;16874:3;16870:39;16863:46;;16643:272;16551:364;;;;:::o;16921:377::-;17027:3;17055:39;17088:5;17055:39;:::i;:::-;17110:89;17192:6;17187:3;17110:89;:::i;:::-;17103:96;;17208:52;17253:6;17248:3;17241:4;17234:5;17230:16;17208:52;:::i;:::-;17285:6;17280:3;17276:16;17269:23;;17031:267;16921:377;;;;:::o;17304:366::-;17446:3;17467:67;17531:2;17526:3;17467:67;:::i;:::-;17460:74;;17543:93;17632:3;17543:93;:::i;:::-;17661:2;17656:3;17652:12;17645:19;;17304:366;;;:::o;17676:::-;17818:3;17839:67;17903:2;17898:3;17839:67;:::i;:::-;17832:74;;17915:93;18004:3;17915:93;:::i;:::-;18033:2;18028:3;18024:12;18017:19;;17676:366;;;:::o;18048:::-;18190:3;18211:67;18275:2;18270:3;18211:67;:::i;:::-;18204:74;;18287:93;18376:3;18287:93;:::i;:::-;18405:2;18400:3;18396:12;18389:19;;18048:366;;;:::o;18420:::-;18562:3;18583:67;18647:2;18642:3;18583:67;:::i;:::-;18576:74;;18659:93;18748:3;18659:93;:::i;:::-;18777:2;18772:3;18768:12;18761:19;;18420:366;;;:::o;18792:::-;18934:3;18955:67;19019:2;19014:3;18955:67;:::i;:::-;18948:74;;19031:93;19120:3;19031:93;:::i;:::-;19149:2;19144:3;19140:12;19133:19;;18792:366;;;:::o;19164:::-;19306:3;19327:67;19391:2;19386:3;19327:67;:::i;:::-;19320:74;;19403:93;19492:3;19403:93;:::i;:::-;19521:2;19516:3;19512:12;19505:19;;19164:366;;;:::o;19536:::-;19678:3;19699:67;19763:2;19758:3;19699:67;:::i;:::-;19692:74;;19775:93;19864:3;19775:93;:::i;:::-;19893:2;19888:3;19884:12;19877:19;;19536:366;;;:::o;19908:::-;20050:3;20071:67;20135:2;20130:3;20071:67;:::i;:::-;20064:74;;20147:93;20236:3;20147:93;:::i;:::-;20265:2;20260:3;20256:12;20249:19;;19908:366;;;:::o;20280:::-;20422:3;20443:67;20507:2;20502:3;20443:67;:::i;:::-;20436:74;;20519:93;20608:3;20519:93;:::i;:::-;20637:2;20632:3;20628:12;20621:19;;20280:366;;;:::o;20652:::-;20794:3;20815:67;20879:2;20874:3;20815:67;:::i;:::-;20808:74;;20891:93;20980:3;20891:93;:::i;:::-;21009:2;21004:3;21000:12;20993:19;;20652:366;;;:::o;21024:::-;21166:3;21187:67;21251:2;21246:3;21187:67;:::i;:::-;21180:74;;21263:93;21352:3;21263:93;:::i;:::-;21381:2;21376:3;21372:12;21365:19;;21024:366;;;:::o;21396:::-;21538:3;21559:67;21623:2;21618:3;21559:67;:::i;:::-;21552:74;;21635:93;21724:3;21635:93;:::i;:::-;21753:2;21748:3;21744:12;21737:19;;21396:366;;;:::o;21768:::-;21910:3;21931:67;21995:2;21990:3;21931:67;:::i;:::-;21924:74;;22007:93;22096:3;22007:93;:::i;:::-;22125:2;22120:3;22116:12;22109:19;;21768:366;;;:::o;22140:::-;22282:3;22303:67;22367:2;22362:3;22303:67;:::i;:::-;22296:74;;22379:93;22468:3;22379:93;:::i;:::-;22497:2;22492:3;22488:12;22481:19;;22140:366;;;:::o;22512:::-;22654:3;22675:67;22739:2;22734:3;22675:67;:::i;:::-;22668:74;;22751:93;22840:3;22751:93;:::i;:::-;22869:2;22864:3;22860:12;22853:19;;22512:366;;;:::o;22884:400::-;23044:3;23065:84;23147:1;23142:3;23065:84;:::i;:::-;23058:91;;23158:93;23247:3;23158:93;:::i;:::-;23276:1;23271:3;23267:11;23260:18;;22884:400;;;:::o;23290:366::-;23432:3;23453:67;23517:2;23512:3;23453:67;:::i;:::-;23446:74;;23529:93;23618:3;23529:93;:::i;:::-;23647:2;23642:3;23638:12;23631:19;;23290:366;;;:::o;23662:::-;23804:3;23825:67;23889:2;23884:3;23825:67;:::i;:::-;23818:74;;23901:93;23990:3;23901:93;:::i;:::-;24019:2;24014:3;24010:12;24003:19;;23662:366;;;:::o;24034:::-;24176:3;24197:67;24261:2;24256:3;24197:67;:::i;:::-;24190:74;;24273:93;24362:3;24273:93;:::i;:::-;24391:2;24386:3;24382:12;24375:19;;24034:366;;;:::o;24406:::-;24548:3;24569:67;24633:2;24628:3;24569:67;:::i;:::-;24562:74;;24645:93;24734:3;24645:93;:::i;:::-;24763:2;24758:3;24754:12;24747:19;;24406:366;;;:::o;24778:::-;24920:3;24941:67;25005:2;25000:3;24941:67;:::i;:::-;24934:74;;25017:93;25106:3;25017:93;:::i;:::-;25135:2;25130:3;25126:12;25119:19;;24778:366;;;:::o;25150:::-;25292:3;25313:67;25377:2;25372:3;25313:67;:::i;:::-;25306:74;;25389:93;25478:3;25389:93;:::i;:::-;25507:2;25502:3;25498:12;25491:19;;25150:366;;;:::o;25522:::-;25664:3;25685:67;25749:2;25744:3;25685:67;:::i;:::-;25678:74;;25761:93;25850:3;25761:93;:::i;:::-;25879:2;25874:3;25870:12;25863:19;;25522:366;;;:::o;25894:::-;26036:3;26057:67;26121:2;26116:3;26057:67;:::i;:::-;26050:74;;26133:93;26222:3;26133:93;:::i;:::-;26251:2;26246:3;26242:12;26235:19;;25894:366;;;:::o;26266:::-;26408:3;26429:67;26493:2;26488:3;26429:67;:::i;:::-;26422:74;;26505:93;26594:3;26505:93;:::i;:::-;26623:2;26618:3;26614:12;26607:19;;26266:366;;;:::o;26638:115::-;26723:23;26740:5;26723:23;:::i;:::-;26718:3;26711:36;26638:115;;:::o;26759:108::-;26836:24;26854:5;26836:24;:::i;:::-;26831:3;26824:37;26759:108;;:::o;26873:118::-;26960:24;26978:5;26960:24;:::i;:::-;26955:3;26948:37;26873:118;;:::o;26997:701::-;27278:3;27300:95;27391:3;27382:6;27300:95;:::i;:::-;27293:102;;27412:95;27503:3;27494:6;27412:95;:::i;:::-;27405:102;;27524:148;27668:3;27524:148;:::i;:::-;27517:155;;27689:3;27682:10;;26997:701;;;;;:::o;27704:222::-;27797:4;27835:2;27824:9;27820:18;27812:26;;27848:71;27916:1;27905:9;27901:17;27892:6;27848:71;:::i;:::-;27704:222;;;;:::o;27932:1053::-;28255:4;28293:3;28282:9;28278:19;28270:27;;28307:71;28375:1;28364:9;28360:17;28351:6;28307:71;:::i;:::-;28388:72;28456:2;28445:9;28441:18;28432:6;28388:72;:::i;:::-;28507:9;28501:4;28497:20;28492:2;28481:9;28477:18;28470:48;28535:108;28638:4;28629:6;28535:108;:::i;:::-;28527:116;;28690:9;28684:4;28680:20;28675:2;28664:9;28660:18;28653:48;28718:108;28821:4;28812:6;28718:108;:::i;:::-;28710:116;;28874:9;28868:4;28864:20;28858:3;28847:9;28843:19;28836:49;28902:76;28973:4;28964:6;28902:76;:::i;:::-;28894:84;;27932:1053;;;;;;;;:::o;28991:751::-;29214:4;29252:3;29241:9;29237:19;29229:27;;29266:71;29334:1;29323:9;29319:17;29310:6;29266:71;:::i;:::-;29347:72;29415:2;29404:9;29400:18;29391:6;29347:72;:::i;:::-;29429;29497:2;29486:9;29482:18;29473:6;29429:72;:::i;:::-;29511;29579:2;29568:9;29564:18;29555:6;29511:72;:::i;:::-;29631:9;29625:4;29621:20;29615:3;29604:9;29600:19;29593:49;29659:76;29730:4;29721:6;29659:76;:::i;:::-;29651:84;;28991:751;;;;;;;;:::o;29748:332::-;29869:4;29907:2;29896:9;29892:18;29884:26;;29920:71;29988:1;29977:9;29973:17;29964:6;29920:71;:::i;:::-;30001:72;30069:2;30058:9;30054:18;30045:6;30001:72;:::i;:::-;29748:332;;;;;:::o;30086:373::-;30229:4;30267:2;30256:9;30252:18;30244:26;;30316:9;30310:4;30306:20;30302:1;30291:9;30287:17;30280:47;30344:108;30447:4;30438:6;30344:108;:::i;:::-;30336:116;;30086:373;;;;:::o;30465:634::-;30686:4;30724:2;30713:9;30709:18;30701:26;;30773:9;30767:4;30763:20;30759:1;30748:9;30744:17;30737:47;30801:108;30904:4;30895:6;30801:108;:::i;:::-;30793:116;;30956:9;30950:4;30946:20;30941:2;30930:9;30926:18;30919:48;30984:108;31087:4;31078:6;30984:108;:::i;:::-;30976:116;;30465:634;;;;;:::o;31105:210::-;31192:4;31230:2;31219:9;31215:18;31207:26;;31243:65;31305:1;31294:9;31290:17;31281:6;31243:65;:::i;:::-;31105:210;;;;:::o;31321:313::-;31434:4;31472:2;31461:9;31457:18;31449:26;;31521:9;31515:4;31511:20;31507:1;31496:9;31492:17;31485:47;31549:78;31622:4;31613:6;31549:78;:::i;:::-;31541:86;;31321:313;;;;:::o;31640:419::-;31806:4;31844:2;31833:9;31829:18;31821:26;;31893:9;31887:4;31883:20;31879:1;31868:9;31864:17;31857:47;31921:131;32047:4;31921:131;:::i;:::-;31913:139;;31640:419;;;:::o;32065:::-;32231:4;32269:2;32258:9;32254:18;32246:26;;32318:9;32312:4;32308:20;32304:1;32293:9;32289:17;32282:47;32346:131;32472:4;32346:131;:::i;:::-;32338:139;;32065:419;;;:::o;32490:::-;32656:4;32694:2;32683:9;32679:18;32671:26;;32743:9;32737:4;32733:20;32729:1;32718:9;32714:17;32707:47;32771:131;32897:4;32771:131;:::i;:::-;32763:139;;32490:419;;;:::o;32915:::-;33081:4;33119:2;33108:9;33104:18;33096:26;;33168:9;33162:4;33158:20;33154:1;33143:9;33139:17;33132:47;33196:131;33322:4;33196:131;:::i;:::-;33188:139;;32915:419;;;:::o;33340:::-;33506:4;33544:2;33533:9;33529:18;33521:26;;33593:9;33587:4;33583:20;33579:1;33568:9;33564:17;33557:47;33621:131;33747:4;33621:131;:::i;:::-;33613:139;;33340:419;;;:::o;33765:::-;33931:4;33969:2;33958:9;33954:18;33946:26;;34018:9;34012:4;34008:20;34004:1;33993:9;33989:17;33982:47;34046:131;34172:4;34046:131;:::i;:::-;34038:139;;33765:419;;;:::o;34190:::-;34356:4;34394:2;34383:9;34379:18;34371:26;;34443:9;34437:4;34433:20;34429:1;34418:9;34414:17;34407:47;34471:131;34597:4;34471:131;:::i;:::-;34463:139;;34190:419;;;:::o;34615:::-;34781:4;34819:2;34808:9;34804:18;34796:26;;34868:9;34862:4;34858:20;34854:1;34843:9;34839:17;34832:47;34896:131;35022:4;34896:131;:::i;:::-;34888:139;;34615:419;;;:::o;35040:::-;35206:4;35244:2;35233:9;35229:18;35221:26;;35293:9;35287:4;35283:20;35279:1;35268:9;35264:17;35257:47;35321:131;35447:4;35321:131;:::i;:::-;35313:139;;35040:419;;;:::o;35465:::-;35631:4;35669:2;35658:9;35654:18;35646:26;;35718:9;35712:4;35708:20;35704:1;35693:9;35689:17;35682:47;35746:131;35872:4;35746:131;:::i;:::-;35738:139;;35465:419;;;:::o;35890:::-;36056:4;36094:2;36083:9;36079:18;36071:26;;36143:9;36137:4;36133:20;36129:1;36118:9;36114:17;36107:47;36171:131;36297:4;36171:131;:::i;:::-;36163:139;;35890:419;;;:::o;36315:::-;36481:4;36519:2;36508:9;36504:18;36496:26;;36568:9;36562:4;36558:20;36554:1;36543:9;36539:17;36532:47;36596:131;36722:4;36596:131;:::i;:::-;36588:139;;36315:419;;;:::o;36740:::-;36906:4;36944:2;36933:9;36929:18;36921:26;;36993:9;36987:4;36983:20;36979:1;36968:9;36964:17;36957:47;37021:131;37147:4;37021:131;:::i;:::-;37013:139;;36740:419;;;:::o;37165:::-;37331:4;37369:2;37358:9;37354:18;37346:26;;37418:9;37412:4;37408:20;37404:1;37393:9;37389:17;37382:47;37446:131;37572:4;37446:131;:::i;:::-;37438:139;;37165:419;;;:::o;37590:::-;37756:4;37794:2;37783:9;37779:18;37771:26;;37843:9;37837:4;37833:20;37829:1;37818:9;37814:17;37807:47;37871:131;37997:4;37871:131;:::i;:::-;37863:139;;37590:419;;;:::o;38015:::-;38181:4;38219:2;38208:9;38204:18;38196:26;;38268:9;38262:4;38258:20;38254:1;38243:9;38239:17;38232:47;38296:131;38422:4;38296:131;:::i;:::-;38288:139;;38015:419;;;:::o;38440:::-;38606:4;38644:2;38633:9;38629:18;38621:26;;38693:9;38687:4;38683:20;38679:1;38668:9;38664:17;38657:47;38721:131;38847:4;38721:131;:::i;:::-;38713:139;;38440:419;;;:::o;38865:::-;39031:4;39069:2;39058:9;39054:18;39046:26;;39118:9;39112:4;39108:20;39104:1;39093:9;39089:17;39082:47;39146:131;39272:4;39146:131;:::i;:::-;39138:139;;38865:419;;;:::o;39290:::-;39456:4;39494:2;39483:9;39479:18;39471:26;;39543:9;39537:4;39533:20;39529:1;39518:9;39514:17;39507:47;39571:131;39697:4;39571:131;:::i;:::-;39563:139;;39290:419;;;:::o;39715:::-;39881:4;39919:2;39908:9;39904:18;39896:26;;39968:9;39962:4;39958:20;39954:1;39943:9;39939:17;39932:47;39996:131;40122:4;39996:131;:::i;:::-;39988:139;;39715:419;;;:::o;40140:::-;40306:4;40344:2;40333:9;40329:18;40321:26;;40393:9;40387:4;40383:20;40379:1;40368:9;40364:17;40357:47;40421:131;40547:4;40421:131;:::i;:::-;40413:139;;40140:419;;;:::o;40565:::-;40731:4;40769:2;40758:9;40754:18;40746:26;;40818:9;40812:4;40808:20;40804:1;40793:9;40789:17;40782:47;40846:131;40972:4;40846:131;:::i;:::-;40838:139;;40565:419;;;:::o;40990:::-;41156:4;41194:2;41183:9;41179:18;41171:26;;41243:9;41237:4;41233:20;41229:1;41218:9;41214:17;41207:47;41271:131;41397:4;41271:131;:::i;:::-;41263:139;;40990:419;;;:::o;41415:::-;41581:4;41619:2;41608:9;41604:18;41596:26;;41668:9;41662:4;41658:20;41654:1;41643:9;41639:17;41632:47;41696:131;41822:4;41696:131;:::i;:::-;41688:139;;41415:419;;;:::o;41840:218::-;41931:4;41969:2;41958:9;41954:18;41946:26;;41982:69;42048:1;42037:9;42033:17;42024:6;41982:69;:::i;:::-;41840:218;;;;:::o;42064:222::-;42157:4;42195:2;42184:9;42180:18;42172:26;;42208:71;42276:1;42265:9;42261:17;42252:6;42208:71;:::i;:::-;42064:222;;;;:::o;42292:332::-;42413:4;42451:2;42440:9;42436:18;42428:26;;42464:71;42532:1;42521:9;42517:17;42508:6;42464:71;:::i;:::-;42545:72;42613:2;42602:9;42598:18;42589:6;42545:72;:::i;:::-;42292:332;;;;;:::o;42630:129::-;42664:6;42691:20;;:::i;:::-;42681:30;;42720:33;42748:4;42740:6;42720:33;:::i;:::-;42630:129;;;:::o;42765:75::-;42798:6;42831:2;42825:9;42815:19;;42765:75;:::o;42846:311::-;42923:4;43013:18;43005:6;43002:30;42999:56;;;43035:18;;:::i;:::-;42999:56;43085:4;43077:6;43073:17;43065:25;;43145:4;43139;43135:15;43127:23;;42846:311;;;:::o;43163:::-;43240:4;43330:18;43322:6;43319:30;43316:56;;;43352:18;;:::i;:::-;43316:56;43402:4;43394:6;43390:17;43382:25;;43462:4;43456;43452:15;43444:23;;43163:311;;;:::o;43480:307::-;43541:4;43631:18;43623:6;43620:30;43617:56;;;43653:18;;:::i;:::-;43617:56;43691:29;43713:6;43691:29;:::i;:::-;43683:37;;43775:4;43769;43765:15;43757:23;;43480:307;;;:::o;43793:308::-;43855:4;43945:18;43937:6;43934:30;43931:56;;;43967:18;;:::i;:::-;43931:56;44005:29;44027:6;44005:29;:::i;:::-;43997:37;;44089:4;44083;44079:15;44071:23;;43793:308;;;:::o;44107:132::-;44174:4;44197:3;44189:11;;44227:4;44222:3;44218:14;44210:22;;44107:132;;;:::o;44245:114::-;44312:6;44346:5;44340:12;44330:22;;44245:114;;;:::o;44365:98::-;44416:6;44450:5;44444:12;44434:22;;44365:98;;;:::o;44469:99::-;44521:6;44555:5;44549:12;44539:22;;44469:99;;;:::o;44574:113::-;44644:4;44676;44671:3;44667:14;44659:22;;44574:113;;;:::o;44693:184::-;44792:11;44826:6;44821:3;44814:19;44866:4;44861:3;44857:14;44842:29;;44693:184;;;;:::o;44883:168::-;44966:11;45000:6;44995:3;44988:19;45040:4;45035:3;45031:14;45016:29;;44883:168;;;;:::o;45057:169::-;45141:11;45175:6;45170:3;45163:19;45215:4;45210:3;45206:14;45191:29;;45057:169;;;;:::o;45232:148::-;45334:11;45371:3;45356:18;;45232:148;;;;:::o;45386:305::-;45426:3;45445:20;45463:1;45445:20;:::i;:::-;45440:25;;45479:20;45497:1;45479:20;:::i;:::-;45474:25;;45633:1;45565:66;45561:74;45558:1;45555:81;45552:107;;;45639:18;;:::i;:::-;45552:107;45683:1;45680;45676:9;45669:16;;45386:305;;;;:::o;45697:185::-;45737:1;45754:20;45772:1;45754:20;:::i;:::-;45749:25;;45788:20;45806:1;45788:20;:::i;:::-;45783:25;;45827:1;45817:35;;45832:18;;:::i;:::-;45817:35;45874:1;45871;45867:9;45862:14;;45697:185;;;;:::o;45888:191::-;45928:4;45948:20;45966:1;45948:20;:::i;:::-;45943:25;;45982:20;46000:1;45982:20;:::i;:::-;45977:25;;46021:1;46018;46015:8;46012:34;;;46026:18;;:::i;:::-;46012:34;46071:1;46068;46064:9;46056:17;;45888:191;;;;:::o;46085:96::-;46122:7;46151:24;46169:5;46151:24;:::i;:::-;46140:35;;46085:96;;;:::o;46187:90::-;46221:7;46264:5;46257:13;46250:21;46239:32;;46187:90;;;:::o;46283:149::-;46319:7;46359:66;46352:5;46348:78;46337:89;;46283:149;;;:::o;46438:89::-;46474:7;46514:6;46507:5;46503:18;46492:29;;46438:89;;;:::o;46533:126::-;46570:7;46610:42;46603:5;46599:54;46588:65;;46533:126;;;:::o;46665:77::-;46702:7;46731:5;46720:16;;46665:77;;;:::o;46748:86::-;46783:7;46823:4;46816:5;46812:16;46801:27;;46748:86;;;:::o;46840:154::-;46924:6;46919:3;46914;46901:30;46986:1;46977:6;46972:3;46968:16;46961:27;46840:154;;;:::o;47000:307::-;47068:1;47078:113;47092:6;47089:1;47086:13;47078:113;;;47177:1;47172:3;47168:11;47162:18;47158:1;47153:3;47149:11;47142:39;47114:2;47111:1;47107:10;47102:15;;47078:113;;;47209:6;47206:1;47203:13;47200:101;;;47289:1;47280:6;47275:3;47271:16;47264:27;47200:101;47049:258;47000:307;;;:::o;47313:320::-;47357:6;47394:1;47388:4;47384:12;47374:22;;47441:1;47435:4;47431:12;47462:18;47452:81;;47518:4;47510:6;47506:17;47496:27;;47452:81;47580:2;47572:6;47569:14;47549:18;47546:38;47543:84;;;47599:18;;:::i;:::-;47543:84;47364:269;47313:320;;;:::o;47639:281::-;47722:27;47744:4;47722:27;:::i;:::-;47714:6;47710:40;47852:6;47840:10;47837:22;47816:18;47804:10;47801:34;47798:62;47795:88;;;47863:18;;:::i;:::-;47795:88;47903:10;47899:2;47892:22;47682:238;47639:281;;:::o;47926:233::-;47965:3;47988:24;48006:5;47988:24;:::i;:::-;47979:33;;48034:66;48027:5;48024:77;48021:103;;;48104:18;;:::i;:::-;48021:103;48151:1;48144:5;48140:13;48133:20;;47926:233;;;:::o;48165:167::-;48202:3;48225:22;48241:5;48225:22;:::i;:::-;48216:31;;48269:4;48262:5;48259:15;48256:41;;;48277:18;;:::i;:::-;48256:41;48324:1;48317:5;48313:13;48306:20;;48165:167;;;:::o;48338:176::-;48370:1;48387:20;48405:1;48387:20;:::i;:::-;48382:25;;48421:20;48439:1;48421:20;:::i;:::-;48416:25;;48460:1;48450:35;;48465:18;;:::i;:::-;48450:35;48506:1;48503;48499:9;48494:14;;48338:176;;;;:::o;48520:180::-;48568:77;48565:1;48558:88;48665:4;48662:1;48655:15;48689:4;48686:1;48679:15;48706:180;48754:77;48751:1;48744:88;48851:4;48848:1;48841:15;48875:4;48872:1;48865:15;48892:180;48940:77;48937:1;48930:88;49037:4;49034:1;49027:15;49061:4;49058:1;49051:15;49078:180;49126:77;49123:1;49116:88;49223:4;49220:1;49213:15;49247:4;49244:1;49237:15;49264:180;49312:77;49309:1;49302:88;49409:4;49406:1;49399:15;49433:4;49430:1;49423:15;49450:183;49485:3;49523:1;49505:16;49502:23;49499:128;;;49561:1;49558;49555;49540:23;49583:34;49614:1;49608:8;49583:34;:::i;:::-;49576:41;;49499:128;49450:183;:::o;49639:117::-;49748:1;49745;49738:12;49762:117;49871:1;49868;49861:12;49885:117;49994:1;49991;49984:12;50008:117;50117:1;50114;50107:12;50131:117;50240:1;50237;50230:12;50254:117;50363:1;50360;50353:12;50377:102;50418:6;50469:2;50465:7;50460:2;50453:5;50449:14;50445:28;50435:38;;50377:102;;;:::o;50485:106::-;50529:8;50578:5;50573:3;50569:15;50548:36;;50485:106;;;:::o;50597:239::-;50737:34;50733:1;50725:6;50721:14;50714:58;50806:22;50801:2;50793:6;50789:15;50782:47;50597:239;:::o;50842:227::-;50982:34;50978:1;50970:6;50966:14;50959:58;51051:10;51046:2;51038:6;51034:15;51027:35;50842:227;:::o;51075:178::-;51215:30;51211:1;51203:6;51199:14;51192:54;51075:178;:::o;51259:181::-;51399:33;51395:1;51387:6;51383:14;51376:57;51259:181;:::o;51446:235::-;51586:34;51582:1;51574:6;51570:14;51563:58;51655:18;51650:2;51642:6;51638:15;51631:43;51446:235;:::o;51687:230::-;51827:34;51823:1;51815:6;51811:14;51804:58;51896:13;51891:2;51883:6;51879:15;51872:38;51687:230;:::o;51923:225::-;52063:34;52059:1;52051:6;52047:14;52040:58;52132:8;52127:2;52119:6;52115:15;52108:33;51923:225;:::o;52154:223::-;52294:34;52290:1;52282:6;52278:14;52271:58;52363:6;52358:2;52350:6;52346:15;52339:31;52154:223;:::o;52383:228::-;52523:34;52519:1;52511:6;52507:14;52500:58;52592:11;52587:2;52579:6;52575:15;52568:36;52383:228;:::o;52617:182::-;52757:34;52753:1;52745:6;52741:14;52734:58;52617:182;:::o;52805:224::-;52945:34;52941:1;52933:6;52929:14;52922:58;53014:7;53009:2;53001:6;52997:15;52990:32;52805:224;:::o;53035:237::-;53175:34;53171:1;53163:6;53159:14;53152:58;53244:20;53239:2;53231:6;53227:15;53220:45;53035:237;:::o;53278:230::-;53418:34;53414:1;53406:6;53402:14;53395:58;53487:13;53482:2;53474:6;53470:15;53463:38;53278:230;:::o;53514:222::-;53654:34;53650:1;53642:6;53638:14;53631:58;53723:5;53718:2;53710:6;53706:15;53699:30;53514:222;:::o;53742:229::-;53882:34;53878:1;53870:6;53866:14;53859:58;53951:12;53946:2;53938:6;53934:15;53927:37;53742:229;:::o;53977:155::-;54117:7;54113:1;54105:6;54101:14;54094:31;53977:155;:::o;54138:182::-;54278:34;54274:1;54266:6;54262:14;54255:58;54138:182;:::o;54326:233::-;54466:34;54462:1;54454:6;54450:14;54443:58;54535:16;54530:2;54522:6;54518:15;54511:41;54326:233;:::o;54565:242::-;54705:34;54701:1;54693:6;54689:14;54682:58;54774:25;54769:2;54761:6;54757:15;54750:50;54565:242;:::o;54813:166::-;54953:18;54949:1;54941:6;54937:14;54930:42;54813:166;:::o;54985:172::-;55125:24;55121:1;55113:6;55109:14;55102:48;54985:172;:::o;55163:228::-;55303:34;55299:1;55291:6;55287:14;55280:58;55372:11;55367:2;55359:6;55355:15;55348:36;55163:228;:::o;55397:::-;55537:34;55533:1;55525:6;55521:14;55514:58;55606:11;55601:2;55593:6;55589:15;55582:36;55397:228;:::o;55631:227::-;55771:34;55767:1;55759:6;55755:14;55748:58;55840:10;55835:2;55827:6;55823:15;55816:35;55631:227;:::o;55864:220::-;56004:34;56000:1;55992:6;55988:14;55981:58;56073:3;56068:2;56060:6;56056:15;56049:28;55864:220;:::o;56090:711::-;56129:3;56167:4;56149:16;56146:26;56143:39;;;56175:5;;56143:39;56204:20;;:::i;:::-;56279:1;56261:16;56257:24;56254:1;56248:4;56233:49;56312:4;56306:11;56411:16;56404:4;56396:6;56392:17;56389:39;56356:18;56348:6;56345:30;56329:113;56326:146;;;56457:5;;;;56326:146;56503:6;56497:4;56493:17;56539:3;56533:10;56566:18;56558:6;56555:30;56552:43;;;56588:5;;;;;;56552:43;56636:6;56629:4;56624:3;56620:14;56616:27;56695:1;56677:16;56673:24;56667:4;56663:35;56658:3;56655:44;56652:57;;;56702:5;;;;;;;56652:57;56719;56767:6;56761:4;56757:17;56749:6;56745:30;56739:4;56719:57;:::i;:::-;56792:3;56785:10;;56133:668;;;;;56090:711;;:::o;56807:122::-;56880:24;56898:5;56880:24;:::i;:::-;56873:5;56870:35;56860:63;;56919:1;56916;56909:12;56860:63;56807:122;:::o;56935:116::-;57005:21;57020:5;57005:21;:::i;:::-;56998:5;56995:32;56985:60;;57041:1;57038;57031:12;56985:60;56935:116;:::o;57057:120::-;57129:23;57146:5;57129:23;:::i;:::-;57122:5;57119:34;57109:62;;57167:1;57164;57157:12;57109:62;57057:120;:::o;57183:122::-;57256:24;57274:5;57256:24;:::i;:::-;57249:5;57246:35;57236:63;;57295:1;57292;57285:12;57236:63;57183:122;:::o

Swarm Source

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