ETH Price: $3,049.64 (+2.72%)
Gas: 18 Gwei

Token

 

Overview

Max Total Supply

717

Holders

479

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
lewei.eth
0x70cb8ed82182ae316e894f0cf507dd120c26f85c
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:
Dynamic1155

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-15
*/

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/[email protected]/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

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


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

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: LVDynamic1155.sol



pragma solidity ^0.8.0;



contract Dynamic1155 is ERC1155Burnable, Ownable {
    // whether minting by owner is allowed
    bool public manualMintAllowed = true;
    // individual uri per type
    mapping (uint256 => string) public typeToUri;
    // whether main uri is freezed
    bool public isUriFreezed;
    // whether each individual uri is freezed
    mapping (uint256 => bool) public typeIsUriFreezed;
    
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory _uri)
        ERC1155(_uri)
    {}
    
    /**
     * @dev Lock further manual minting by owner
     */
    function disableManualMint() public onlyOwner {
        manualMintAllowed = false;
    }
            
    /**
     * @dev Airdrop tokens to owners
     */
    function mintOwner(address[] calldata owners, uint256[] calldata types, uint256[] calldata counts) public onlyOwner {
      require(manualMintAllowed, "Not allowed");
      require(owners.length == types.length && types.length == counts.length, "Bad array lengths");
         
      for (uint256 i = 0; i < owners.length; i++) {
        _mint(owners[i], types[i], counts[i], "");
      }
    }

    /**
     * @dev Airdrop single tokens to owners
     */
    function mintOwnerOneToken(address[] calldata owners, uint256 typeId) public onlyOwner {
      require(manualMintAllowed, "Not allowed");
         
      for (uint256 i = 0; i < owners.length; i++) {
        _mint(owners[i], typeId, 1, "");
      }
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        string memory typeUri = typeToUri[typeId];
        if (bytes(typeUri).length == 0) {
            return super.uri(typeId);
        } else {
            return typeUri;
        }
    }
   
    /**
     * @dev Updates the metadata URI
     */
    function updateUri(string calldata newUri) public onlyOwner {
        require(!isUriFreezed, "Freezed");
        _setURI(newUri);
    }

    /**
     * @dev Freezes the metadata URI
     */
    function freezeUri() public onlyOwner {
        isUriFreezed = true;
    }

    /**
     * @dev Updates and freezes the metadata URI
     */
    function permanentSetUri(string calldata newUri) public onlyOwner {
        updateUri(newUri);
        freezeUri();
    }

    /**
     * @dev Updates the metadata URI for a specific type
     */
    function updateUriForType(string calldata newUri, uint256 typeId) public onlyOwner {
        require(!typeIsUriFreezed[typeId], "Freezed");
        typeToUri[typeId] = newUri;
    }

    /**
     * @dev Freezes the metadata URI
     */
    function freezeUriForType(uint256 typeId) public onlyOwner {
        typeIsUriFreezed[typeId] = true;
    }

    /**
     * @dev Updates and freezes the metadata URI
     */
    function permanentSetUriForType(string calldata newUri, uint256 typeId) public onlyOwner {
        updateUriForType(newUri, typeId);
        freezeUriForType(typeId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableManualMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"freezeUriForType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUriFreezed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualMintAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"types","type":"uint256[]"},{"internalType":"uint256[]","name":"counts","type":"uint256[]"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"mintOwnerOneToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"permanentSetUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"},{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"permanentSetUriForType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"typeIsUriFreezed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"typeToUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"updateUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"},{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"updateUriForType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526001600360146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162004a1238038062004a128339818101604052810190620000529190620003c3565b8062000064816200008c60201b60201c565b506200008562000079620000a860201b60201c565b620000b060201b60201c565b5062000479565b8060029080519060200190620000a492919062000176565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001849062000443565b90600052602060002090601f016020900481019282620001a85760008555620001f4565b82601f10620001c357805160ff1916838001178555620001f4565b82800160010185558215620001f4579182015b82811115620001f3578251825591602001919060010190620001d6565b5b50905062000203919062000207565b5090565b5b808211156200022257600081600090555060010162000208565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200028f8262000244565b810181811067ffffffffffffffff82111715620002b157620002b062000255565b5b80604052505050565b6000620002c662000226565b9050620002d4828262000284565b919050565b600067ffffffffffffffff821115620002f757620002f662000255565b5b620003028262000244565b9050602081019050919050565b60005b838110156200032f57808201518184015260208101905062000312565b838111156200033f576000848401525b50505050565b60006200035c6200035684620002d9565b620002ba565b9050828152602081018484840111156200037b576200037a6200023f565b5b620003888482856200030f565b509392505050565b600082601f830112620003a857620003a76200023a565b5b8151620003ba84826020860162000345565b91505092915050565b600060208284031215620003dc57620003db62000230565b5b600082015167ffffffffffffffff811115620003fd57620003fc62000235565b5b6200040b8482850162000390565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045c57607f821691505b6020821081141562000473576200047262000414565b5b50919050565b61458980620004896000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636b20c454116100de578063abff7f6e11610097578063e985e9c511610071578063e985e9c514610442578063f242432a14610472578063f2fde38b1461048e578063f5298aca146104aa5761018d565b8063abff7f6e146103ee578063c30f3bb11461040a578063c75e25e1146104265761018d565b80636b20c45414610354578063715018a6146103705780638da5cb5b1461037a57806395d34d9e14610398578063a22cb465146103b4578063ab05ff41146103d05761018d565b80632094aacc1161014b5780632be9279d116101255780632be9279d146102ce5780632eb2c2d6146102ec5780634e1273f414610308578063570b3c6a146103385761018d565b80632094aacc14610252578063267f8640146102825780632768d709146102b25761018d565b8062fdd58e1461019257806301ffc9a7146101c2578063086cb785146101f257806308b58c1d146101fc5780630e89341c146102185780630f52b76e14610248575b600080fd5b6101ac60048036038101906101a79190612b97565b6104c6565b6040516101b99190612be6565b60405180910390f35b6101dc60048036038101906101d79190612c59565b61058f565b6040516101e99190612ca1565b60405180910390f35b6101fa610671565b005b61021660048036038101906102119190612d21565b61070a565b005b610232600480360381019061022d9190612d81565b61079f565b60405161023f9190612e47565b60405180910390f35b610250610866565b005b61026c60048036038101906102679190612d81565b6108ff565b6040516102799190612e47565b60405180910390f35b61029c60048036038101906102979190612d81565b61099f565b6040516102a99190612ca1565b60405180910390f35b6102cc60048036038101906102c79190612f15565b6109bf565b005b6102d6610b81565b6040516102e39190612ca1565b60405180910390f35b610306600480360381019061030191906131bc565b610b94565b005b610322600480360381019061031d919061334e565b610c35565b60405161032f9190613484565b60405180910390f35b610352600480360381019061034d91906134a6565b610d4e565b005b61036e600480360381019061036991906134f3565b610e6b565b005b610378610f08565b005b610382610f90565b60405161038f919061358d565b60405180910390f35b6103b260048036038101906103ad9190612d21565b610fba565b005b6103ce60048036038101906103c991906135d4565b6110bf565b005b6103d86110d5565b6040516103e59190612ca1565b60405180910390f35b610408600480360381019061040391906134a6565b6110e8565b005b610424600480360381019061041f9190612d81565b61117a565b005b610440600480360381019061043b9190613614565b611225565b005b61045c60048036038101906104579190613674565b61135a565b6040516104699190612ca1565b60405180910390f35b61048c600480360381019061048791906136b4565b6113ee565b005b6104a860048036038101906104a3919061374b565b61148f565b005b6104c460048036038101906104bf9190613778565b611587565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e9061383d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061066a575061066982611624565b5b9050919050565b61067961168e565b73ffffffffffffffffffffffffffffffffffffffff16610697610f90565b73ffffffffffffffffffffffffffffffffffffffff16146106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e4906138a9565b60405180910390fd5b6001600560006101000a81548160ff021916908315150217905550565b61071261168e565b73ffffffffffffffffffffffffffffffffffffffff16610730610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d906138a9565b60405180910390fd5b610791838383610fba565b61079a8161117a565b505050565b606060006004600084815260200190815260200160002080546107c1906138f8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ed906138f8565b801561083a5780601f1061080f5761010080835404028352916020019161083a565b820191906000526020600020905b81548152906001019060200180831161081d57829003601f168201915b5050505050905060008151141561085c5761085483611696565b915050610861565b809150505b919050565b61086e61168e565b73ffffffffffffffffffffffffffffffffffffffff1661088c610f90565b73ffffffffffffffffffffffffffffffffffffffff16146108e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d9906138a9565b60405180910390fd5b6000600360146101000a81548160ff021916908315150217905550565b6004602052806000526040600020600091509050805461091e906138f8565b80601f016020809104026020016040519081016040528092919081815260200182805461094a906138f8565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b505050505081565b60066020528060005260406000206000915054906101000a900460ff1681565b6109c761168e565b73ffffffffffffffffffffffffffffffffffffffff166109e5610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a32906138a9565b60405180910390fd5b600360149054906101000a900460ff16610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8190613976565b60405180910390fd5b8383905086869050148015610aa457508181905084849050145b610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada906139e2565b60405180910390fd5b60005b86869050811015610b7857610b65878783818110610b0757610b06613a02565b5b9050602002016020810190610b1c919061374b565b868684818110610b2f57610b2e613a02565b5b90506020020135858585818110610b4957610b48613a02565b5b905060200201356040518060200160405280600081525061172a565b8080610b7090613a60565b915050610ae6565b50505050505050565b600360149054906101000a900460ff1681565b610b9c61168e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610be25750610be185610bdc61168e565b61135a565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613b1b565b60405180910390fd5b610c2e85858585856118c0565b5050505050565b60608151835114610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613bad565b60405180910390fd5b6000835167ffffffffffffffff811115610c9857610c97612fc9565b5b604051908082528060200260200182016040528015610cc65781602001602082028036833780820191505090505b50905060005b8451811015610d4357610d13858281518110610ceb57610cea613a02565b5b6020026020010151858381518110610d0657610d05613a02565b5b60200260200101516104c6565b828281518110610d2657610d25613a02565b5b60200260200101818152505080610d3c90613a60565b9050610ccc565b508091505092915050565b610d5661168e565b73ffffffffffffffffffffffffffffffffffffffff16610d74610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc1906138a9565b60405180910390fd5b600560009054906101000a900460ff1615610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190613c19565b60405180910390fd5b610e6782828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611bd4565b5050565b610e7361168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610eb95750610eb883610eb361168e565b61135a565b5b610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90613cab565b60405180910390fd5b610f03838383611bee565b505050565b610f1061168e565b73ffffffffffffffffffffffffffffffffffffffff16610f2e610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906138a9565b60405180910390fd5b610f8e6000611e9f565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fc261168e565b73ffffffffffffffffffffffffffffffffffffffff16610fe0610f90565b73ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d906138a9565b60405180910390fd5b6006600082815260200190815260200160002060009054906101000a900460ff1615611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613c19565b60405180910390fd5b82826004600084815260200190815260200160002091906110b99291906129c6565b50505050565b6110d16110ca61168e565b8383611f65565b5050565b600560009054906101000a900460ff1681565b6110f061168e565b73ffffffffffffffffffffffffffffffffffffffff1661110e610f90565b73ffffffffffffffffffffffffffffffffffffffff1614611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b906138a9565b60405180910390fd5b61116e8282610d4e565b611176610671565b5050565b61118261168e565b73ffffffffffffffffffffffffffffffffffffffff166111a0610f90565b73ffffffffffffffffffffffffffffffffffffffff16146111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906138a9565b60405180910390fd5b60016006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61122d61168e565b73ffffffffffffffffffffffffffffffffffffffff1661124b610f90565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906138a9565b60405180910390fd5b600360149054906101000a900460ff166112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790613976565b60405180910390fd5b60005b838390508110156113545761134184848381811061131457611313613a02565b5b9050602002016020810190611329919061374b565b8360016040518060200160405280600081525061172a565b808061134c90613a60565b9150506112f3565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113f661168e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061143c575061143b8561143661168e565b61135a565b5b61147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290613cab565b60405180910390fd5b61148885858585856120d2565b5050505050565b61149761168e565b73ffffffffffffffffffffffffffffffffffffffff166114b5610f90565b73ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611502906138a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613d3d565b60405180910390fd5b61158481611e9f565b50565b61158f61168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115d557506115d4836115cf61168e565b61135a565b5b611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90613cab565b60405180910390fd5b61161f838383612354565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600280546116a5906138f8565b80601f01602080910402602001604051908101604052809291908181526020018280546116d1906138f8565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b50505050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613dcf565b60405180910390fd5b60006117a461168e565b90506117c5816000876117b688612571565b6117bf88612571565b876125eb565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118249190613def565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516118a2929190613e45565b60405180910390a46118b9816000878787876125f3565b5050505050565b8151835114611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90613ee0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90613f72565b60405180910390fd5b600061197e61168e565b905061198e8187878787876125eb565b60005b8451811015611b3f5760008582815181106119af576119ae613a02565b5b6020026020010151905060008583815181106119ce576119cd613a02565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614004565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b249190613def565b9250508190555050505080611b3890613a60565b9050611991565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611bb6929190614024565b60405180910390a4611bcc8187878787876127cb565b505050505050565b8060029080519060200190611bea929190612a4c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c55906140cd565b60405180910390fd5b8051825114611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613ee0565b60405180910390fd5b6000611cac61168e565b9050611ccc818560008686604051806020016040528060008152506125eb565b60005b8351811015611e19576000848281518110611ced57611cec613a02565b5b602002602001015190506000848381518110611d0c57611d0b613a02565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da49061415f565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611e1190613a60565b915050611ccf565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e91929190614024565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcb906141f1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c59190612ca1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990613f72565b60405180910390fd5b600061214c61168e565b905061216c81878761215d88612571565b61216688612571565b876125eb565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614004565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b89190613def565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612335929190613e45565b60405180910390a461234b8288888888886125f3565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb906140cd565b60405180910390fd5b60006123ce61168e565b90506123fe818560006123e087612571565b6123e987612571565b604051806020016040528060008152506125eb565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c9061415f565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612562929190613e45565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156125905761258f612fc9565b5b6040519080825280602002602001820160405280156125be5781602001602082028036833780820191505090505b50905082816000815181106125d6576125d5613a02565b5b60200260200101818152505080915050919050565b505050505050565b6126128473ffffffffffffffffffffffffffffffffffffffff166129a3565b156127c3578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612658959493929190614266565b6020604051808303816000875af192505050801561269457506040513d601f19601f8201168201806040525081019061269191906142d5565b60015b61273a576126a061430f565b806308c379a014156126fd57506126b5614331565b806126c057506126ff565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f49190612e47565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190614439565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b8906144cb565b60405180910390fd5b505b505050505050565b6127ea8473ffffffffffffffffffffffffffffffffffffffff166129a3565b1561299b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016128309594939291906144eb565b6020604051808303816000875af192505050801561286c57506040513d601f19601f8201168201806040525081019061286991906142d5565b60015b6129125761287861430f565b806308c379a014156128d5575061288d614331565b8061289857506128d7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc9190612e47565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290990614439565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612990906144cb565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546129d2906138f8565b90600052602060002090601f0160209004810192826129f45760008555612a3b565b82601f10612a0d57803560ff1916838001178555612a3b565b82800160010185558215612a3b579182015b82811115612a3a578235825591602001919060010190612a1f565b5b509050612a489190612ad2565b5090565b828054612a58906138f8565b90600052602060002090601f016020900481019282612a7a5760008555612ac1565b82601f10612a9357805160ff1916838001178555612ac1565b82800160010185558215612ac1579182015b82811115612ac0578251825591602001919060010190612aa5565b5b509050612ace9190612ad2565b5090565b5b80821115612aeb576000816000905550600101612ad3565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2e82612b03565b9050919050565b612b3e81612b23565b8114612b4957600080fd5b50565b600081359050612b5b81612b35565b92915050565b6000819050919050565b612b7481612b61565b8114612b7f57600080fd5b50565b600081359050612b9181612b6b565b92915050565b60008060408385031215612bae57612bad612af9565b5b6000612bbc85828601612b4c565b9250506020612bcd85828601612b82565b9150509250929050565b612be081612b61565b82525050565b6000602082019050612bfb6000830184612bd7565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c3681612c01565b8114612c4157600080fd5b50565b600081359050612c5381612c2d565b92915050565b600060208284031215612c6f57612c6e612af9565b5b6000612c7d84828501612c44565b91505092915050565b60008115159050919050565b612c9b81612c86565b82525050565b6000602082019050612cb66000830184612c92565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612ce157612ce0612cbc565b5b8235905067ffffffffffffffff811115612cfe57612cfd612cc1565b5b602083019150836001820283011115612d1a57612d19612cc6565b5b9250929050565b600080600060408486031215612d3a57612d39612af9565b5b600084013567ffffffffffffffff811115612d5857612d57612afe565b5b612d6486828701612ccb565b93509350506020612d7786828701612b82565b9150509250925092565b600060208284031215612d9757612d96612af9565b5b6000612da584828501612b82565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612de8578082015181840152602081019050612dcd565b83811115612df7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e1982612dae565b612e238185612db9565b9350612e33818560208601612dca565b612e3c81612dfd565b840191505092915050565b60006020820190508181036000830152612e618184612e0e565b905092915050565b60008083601f840112612e7f57612e7e612cbc565b5b8235905067ffffffffffffffff811115612e9c57612e9b612cc1565b5b602083019150836020820283011115612eb857612eb7612cc6565b5b9250929050565b60008083601f840112612ed557612ed4612cbc565b5b8235905067ffffffffffffffff811115612ef257612ef1612cc1565b5b602083019150836020820283011115612f0e57612f0d612cc6565b5b9250929050565b60008060008060008060608789031215612f3257612f31612af9565b5b600087013567ffffffffffffffff811115612f5057612f4f612afe565b5b612f5c89828a01612e69565b9650965050602087013567ffffffffffffffff811115612f7f57612f7e612afe565b5b612f8b89828a01612ebf565b9450945050604087013567ffffffffffffffff811115612fae57612fad612afe565b5b612fba89828a01612ebf565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61300182612dfd565b810181811067ffffffffffffffff821117156130205761301f612fc9565b5b80604052505050565b6000613033612aef565b905061303f8282612ff8565b919050565b600067ffffffffffffffff82111561305f5761305e612fc9565b5b602082029050602081019050919050565b600061308361307e84613044565b613029565b905080838252602082019050602084028301858111156130a6576130a5612cc6565b5b835b818110156130cf57806130bb8882612b82565b8452602084019350506020810190506130a8565b5050509392505050565b600082601f8301126130ee576130ed612cbc565b5b81356130fe848260208601613070565b91505092915050565b600080fd5b600067ffffffffffffffff82111561312757613126612fc9565b5b61313082612dfd565b9050602081019050919050565b82818337600083830152505050565b600061315f61315a8461310c565b613029565b90508281526020810184848401111561317b5761317a613107565b5b61318684828561313d565b509392505050565b600082601f8301126131a3576131a2612cbc565b5b81356131b384826020860161314c565b91505092915050565b600080600080600060a086880312156131d8576131d7612af9565b5b60006131e688828901612b4c565b95505060206131f788828901612b4c565b945050604086013567ffffffffffffffff81111561321857613217612afe565b5b613224888289016130d9565b935050606086013567ffffffffffffffff81111561324557613244612afe565b5b613251888289016130d9565b925050608086013567ffffffffffffffff81111561327257613271612afe565b5b61327e8882890161318e565b9150509295509295909350565b600067ffffffffffffffff8211156132a6576132a5612fc9565b5b602082029050602081019050919050565b60006132ca6132c58461328b565b613029565b905080838252602082019050602084028301858111156132ed576132ec612cc6565b5b835b8181101561331657806133028882612b4c565b8452602084019350506020810190506132ef565b5050509392505050565b600082601f83011261333557613334612cbc565b5b81356133458482602086016132b7565b91505092915050565b6000806040838503121561336557613364612af9565b5b600083013567ffffffffffffffff81111561338357613382612afe565b5b61338f85828601613320565b925050602083013567ffffffffffffffff8111156133b0576133af612afe565b5b6133bc858286016130d9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133fb81612b61565b82525050565b600061340d83836133f2565b60208301905092915050565b6000602082019050919050565b6000613431826133c6565b61343b81856133d1565b9350613446836133e2565b8060005b8381101561347757815161345e8882613401565b975061346983613419565b92505060018101905061344a565b5085935050505092915050565b6000602082019050818103600083015261349e8184613426565b905092915050565b600080602083850312156134bd576134bc612af9565b5b600083013567ffffffffffffffff8111156134db576134da612afe565b5b6134e785828601612ccb565b92509250509250929050565b60008060006060848603121561350c5761350b612af9565b5b600061351a86828701612b4c565b935050602084013567ffffffffffffffff81111561353b5761353a612afe565b5b613547868287016130d9565b925050604084013567ffffffffffffffff81111561356857613567612afe565b5b613574868287016130d9565b9150509250925092565b61358781612b23565b82525050565b60006020820190506135a2600083018461357e565b92915050565b6135b181612c86565b81146135bc57600080fd5b50565b6000813590506135ce816135a8565b92915050565b600080604083850312156135eb576135ea612af9565b5b60006135f985828601612b4c565b925050602061360a858286016135bf565b9150509250929050565b60008060006040848603121561362d5761362c612af9565b5b600084013567ffffffffffffffff81111561364b5761364a612afe565b5b61365786828701612e69565b9350935050602061366a86828701612b82565b9150509250925092565b6000806040838503121561368b5761368a612af9565b5b600061369985828601612b4c565b92505060206136aa85828601612b4c565b9150509250929050565b600080600080600060a086880312156136d0576136cf612af9565b5b60006136de88828901612b4c565b95505060206136ef88828901612b4c565b945050604061370088828901612b82565b935050606061371188828901612b82565b925050608086013567ffffffffffffffff81111561373257613731612afe565b5b61373e8882890161318e565b9150509295509295909350565b60006020828403121561376157613760612af9565b5b600061376f84828501612b4c565b91505092915050565b60008060006060848603121561379157613790612af9565b5b600061379f86828701612b4c565b93505060206137b086828701612b82565b92505060406137c186828701612b82565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613827602b83612db9565b9150613832826137cb565b604082019050919050565b600060208201905081810360008301526138568161381a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613893602083612db9565b915061389e8261385d565b602082019050919050565b600060208201905081810360008301526138c281613886565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061391057607f821691505b60208210811415613924576139236138c9565b5b50919050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000613960600b83612db9565b915061396b8261392a565b602082019050919050565b6000602082019050818103600083015261398f81613953565b9050919050565b7f426164206172726179206c656e67746873000000000000000000000000000000600082015250565b60006139cc601183612db9565b91506139d782613996565b602082019050919050565b600060208201905081810360008301526139fb816139bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a6b82612b61565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9e57613a9d613a31565b5b600182019050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613b05603283612db9565b9150613b1082613aa9565b604082019050919050565b60006020820190508181036000830152613b3481613af8565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613b97602983612db9565b9150613ba282613b3b565b604082019050919050565b60006020820190508181036000830152613bc681613b8a565b9050919050565b7f467265657a656400000000000000000000000000000000000000000000000000600082015250565b6000613c03600783612db9565b9150613c0e82613bcd565b602082019050919050565b60006020820190508181036000830152613c3281613bf6565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613c95602983612db9565b9150613ca082613c39565b604082019050919050565b60006020820190508181036000830152613cc481613c88565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d27602683612db9565b9150613d3282613ccb565b604082019050919050565b60006020820190508181036000830152613d5681613d1a565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613db9602183612db9565b9150613dc482613d5d565b604082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b6000613dfa82612b61565b9150613e0583612b61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e3a57613e39613a31565b5b828201905092915050565b6000604082019050613e5a6000830185612bd7565b613e676020830184612bd7565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613eca602883612db9565b9150613ed582613e6e565b604082019050919050565b60006020820190508181036000830152613ef981613ebd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f5c602583612db9565b9150613f6782613f00565b604082019050919050565b60006020820190508181036000830152613f8b81613f4f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613fee602a83612db9565b9150613ff982613f92565b604082019050919050565b6000602082019050818103600083015261401d81613fe1565b9050919050565b6000604082019050818103600083015261403e8185613426565b905081810360208301526140528184613426565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140b7602383612db9565b91506140c28261405b565b604082019050919050565b600060208201905081810360008301526140e6816140aa565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614149602483612db9565b9150614154826140ed565b604082019050919050565b600060208201905081810360008301526141788161413c565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006141db602983612db9565b91506141e68261417f565b604082019050919050565b6000602082019050818103600083015261420a816141ce565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061423882614211565b614242818561421c565b9350614252818560208601612dca565b61425b81612dfd565b840191505092915050565b600060a08201905061427b600083018861357e565b614288602083018761357e565b6142956040830186612bd7565b6142a26060830185612bd7565b81810360808301526142b4818461422d565b90509695505050505050565b6000815190506142cf81612c2d565b92915050565b6000602082840312156142eb576142ea612af9565b5b60006142f9848285016142c0565b91505092915050565b60008160e01c9050919050565b600060033d111561432e5760046000803e61432b600051614302565b90505b90565b600060443d1015614341576143c4565b614349612aef565b60043d036004823e80513d602482011167ffffffffffffffff821117156143715750506143c4565b808201805167ffffffffffffffff81111561438f57505050506143c4565b80602083010160043d0385018111156143ac5750505050506143c4565b6143bb82602001850186612ff8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614423603483612db9565b915061442e826143c7565b604082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006144b5602883612db9565b91506144c082614459565b604082019050919050565b600060208201905081810360008301526144e4816144a8565b9050919050565b600060a082019050614500600083018861357e565b61450d602083018761357e565b818103604083015261451f8186613426565b905081810360608301526145338185613426565b90508181036080830152614547818461422d565b9050969550505050505056fea264697066735822122063a4795accd7d4c51d3c1c229016571fdb0d6170abe00818c9da0baeba19db9964736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80636b20c454116100de578063abff7f6e11610097578063e985e9c511610071578063e985e9c514610442578063f242432a14610472578063f2fde38b1461048e578063f5298aca146104aa5761018d565b8063abff7f6e146103ee578063c30f3bb11461040a578063c75e25e1146104265761018d565b80636b20c45414610354578063715018a6146103705780638da5cb5b1461037a57806395d34d9e14610398578063a22cb465146103b4578063ab05ff41146103d05761018d565b80632094aacc1161014b5780632be9279d116101255780632be9279d146102ce5780632eb2c2d6146102ec5780634e1273f414610308578063570b3c6a146103385761018d565b80632094aacc14610252578063267f8640146102825780632768d709146102b25761018d565b8062fdd58e1461019257806301ffc9a7146101c2578063086cb785146101f257806308b58c1d146101fc5780630e89341c146102185780630f52b76e14610248575b600080fd5b6101ac60048036038101906101a79190612b97565b6104c6565b6040516101b99190612be6565b60405180910390f35b6101dc60048036038101906101d79190612c59565b61058f565b6040516101e99190612ca1565b60405180910390f35b6101fa610671565b005b61021660048036038101906102119190612d21565b61070a565b005b610232600480360381019061022d9190612d81565b61079f565b60405161023f9190612e47565b60405180910390f35b610250610866565b005b61026c60048036038101906102679190612d81565b6108ff565b6040516102799190612e47565b60405180910390f35b61029c60048036038101906102979190612d81565b61099f565b6040516102a99190612ca1565b60405180910390f35b6102cc60048036038101906102c79190612f15565b6109bf565b005b6102d6610b81565b6040516102e39190612ca1565b60405180910390f35b610306600480360381019061030191906131bc565b610b94565b005b610322600480360381019061031d919061334e565b610c35565b60405161032f9190613484565b60405180910390f35b610352600480360381019061034d91906134a6565b610d4e565b005b61036e600480360381019061036991906134f3565b610e6b565b005b610378610f08565b005b610382610f90565b60405161038f919061358d565b60405180910390f35b6103b260048036038101906103ad9190612d21565b610fba565b005b6103ce60048036038101906103c991906135d4565b6110bf565b005b6103d86110d5565b6040516103e59190612ca1565b60405180910390f35b610408600480360381019061040391906134a6565b6110e8565b005b610424600480360381019061041f9190612d81565b61117a565b005b610440600480360381019061043b9190613614565b611225565b005b61045c60048036038101906104579190613674565b61135a565b6040516104699190612ca1565b60405180910390f35b61048c600480360381019061048791906136b4565b6113ee565b005b6104a860048036038101906104a3919061374b565b61148f565b005b6104c460048036038101906104bf9190613778565b611587565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e9061383d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061066a575061066982611624565b5b9050919050565b61067961168e565b73ffffffffffffffffffffffffffffffffffffffff16610697610f90565b73ffffffffffffffffffffffffffffffffffffffff16146106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e4906138a9565b60405180910390fd5b6001600560006101000a81548160ff021916908315150217905550565b61071261168e565b73ffffffffffffffffffffffffffffffffffffffff16610730610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d906138a9565b60405180910390fd5b610791838383610fba565b61079a8161117a565b505050565b606060006004600084815260200190815260200160002080546107c1906138f8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ed906138f8565b801561083a5780601f1061080f5761010080835404028352916020019161083a565b820191906000526020600020905b81548152906001019060200180831161081d57829003601f168201915b5050505050905060008151141561085c5761085483611696565b915050610861565b809150505b919050565b61086e61168e565b73ffffffffffffffffffffffffffffffffffffffff1661088c610f90565b73ffffffffffffffffffffffffffffffffffffffff16146108e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d9906138a9565b60405180910390fd5b6000600360146101000a81548160ff021916908315150217905550565b6004602052806000526040600020600091509050805461091e906138f8565b80601f016020809104026020016040519081016040528092919081815260200182805461094a906138f8565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b505050505081565b60066020528060005260406000206000915054906101000a900460ff1681565b6109c761168e565b73ffffffffffffffffffffffffffffffffffffffff166109e5610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a32906138a9565b60405180910390fd5b600360149054906101000a900460ff16610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8190613976565b60405180910390fd5b8383905086869050148015610aa457508181905084849050145b610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada906139e2565b60405180910390fd5b60005b86869050811015610b7857610b65878783818110610b0757610b06613a02565b5b9050602002016020810190610b1c919061374b565b868684818110610b2f57610b2e613a02565b5b90506020020135858585818110610b4957610b48613a02565b5b905060200201356040518060200160405280600081525061172a565b8080610b7090613a60565b915050610ae6565b50505050505050565b600360149054906101000a900460ff1681565b610b9c61168e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610be25750610be185610bdc61168e565b61135a565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613b1b565b60405180910390fd5b610c2e85858585856118c0565b5050505050565b60608151835114610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613bad565b60405180910390fd5b6000835167ffffffffffffffff811115610c9857610c97612fc9565b5b604051908082528060200260200182016040528015610cc65781602001602082028036833780820191505090505b50905060005b8451811015610d4357610d13858281518110610ceb57610cea613a02565b5b6020026020010151858381518110610d0657610d05613a02565b5b60200260200101516104c6565b828281518110610d2657610d25613a02565b5b60200260200101818152505080610d3c90613a60565b9050610ccc565b508091505092915050565b610d5661168e565b73ffffffffffffffffffffffffffffffffffffffff16610d74610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc1906138a9565b60405180910390fd5b600560009054906101000a900460ff1615610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190613c19565b60405180910390fd5b610e6782828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611bd4565b5050565b610e7361168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610eb95750610eb883610eb361168e565b61135a565b5b610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90613cab565b60405180910390fd5b610f03838383611bee565b505050565b610f1061168e565b73ffffffffffffffffffffffffffffffffffffffff16610f2e610f90565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906138a9565b60405180910390fd5b610f8e6000611e9f565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fc261168e565b73ffffffffffffffffffffffffffffffffffffffff16610fe0610f90565b73ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d906138a9565b60405180910390fd5b6006600082815260200190815260200160002060009054906101000a900460ff1615611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613c19565b60405180910390fd5b82826004600084815260200190815260200160002091906110b99291906129c6565b50505050565b6110d16110ca61168e565b8383611f65565b5050565b600560009054906101000a900460ff1681565b6110f061168e565b73ffffffffffffffffffffffffffffffffffffffff1661110e610f90565b73ffffffffffffffffffffffffffffffffffffffff1614611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b906138a9565b60405180910390fd5b61116e8282610d4e565b611176610671565b5050565b61118261168e565b73ffffffffffffffffffffffffffffffffffffffff166111a0610f90565b73ffffffffffffffffffffffffffffffffffffffff16146111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906138a9565b60405180910390fd5b60016006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61122d61168e565b73ffffffffffffffffffffffffffffffffffffffff1661124b610f90565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906138a9565b60405180910390fd5b600360149054906101000a900460ff166112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790613976565b60405180910390fd5b60005b838390508110156113545761134184848381811061131457611313613a02565b5b9050602002016020810190611329919061374b565b8360016040518060200160405280600081525061172a565b808061134c90613a60565b9150506112f3565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113f661168e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061143c575061143b8561143661168e565b61135a565b5b61147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290613cab565b60405180910390fd5b61148885858585856120d2565b5050505050565b61149761168e565b73ffffffffffffffffffffffffffffffffffffffff166114b5610f90565b73ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611502906138a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613d3d565b60405180910390fd5b61158481611e9f565b50565b61158f61168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115d557506115d4836115cf61168e565b61135a565b5b611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90613cab565b60405180910390fd5b61161f838383612354565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600280546116a5906138f8565b80601f01602080910402602001604051908101604052809291908181526020018280546116d1906138f8565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b50505050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613dcf565b60405180910390fd5b60006117a461168e565b90506117c5816000876117b688612571565b6117bf88612571565b876125eb565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118249190613def565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516118a2929190613e45565b60405180910390a46118b9816000878787876125f3565b5050505050565b8151835114611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90613ee0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90613f72565b60405180910390fd5b600061197e61168e565b905061198e8187878787876125eb565b60005b8451811015611b3f5760008582815181106119af576119ae613a02565b5b6020026020010151905060008583815181106119ce576119cd613a02565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614004565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b249190613def565b9250508190555050505080611b3890613a60565b9050611991565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611bb6929190614024565b60405180910390a4611bcc8187878787876127cb565b505050505050565b8060029080519060200190611bea929190612a4c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c55906140cd565b60405180910390fd5b8051825114611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613ee0565b60405180910390fd5b6000611cac61168e565b9050611ccc818560008686604051806020016040528060008152506125eb565b60005b8351811015611e19576000848281518110611ced57611cec613a02565b5b602002602001015190506000848381518110611d0c57611d0b613a02565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da49061415f565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611e1190613a60565b915050611ccf565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e91929190614024565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcb906141f1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c59190612ca1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990613f72565b60405180910390fd5b600061214c61168e565b905061216c81878761215d88612571565b61216688612571565b876125eb565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614004565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b89190613def565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612335929190613e45565b60405180910390a461234b8288888888886125f3565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb906140cd565b60405180910390fd5b60006123ce61168e565b90506123fe818560006123e087612571565b6123e987612571565b604051806020016040528060008152506125eb565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c9061415f565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612562929190613e45565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156125905761258f612fc9565b5b6040519080825280602002602001820160405280156125be5781602001602082028036833780820191505090505b50905082816000815181106125d6576125d5613a02565b5b60200260200101818152505080915050919050565b505050505050565b6126128473ffffffffffffffffffffffffffffffffffffffff166129a3565b156127c3578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612658959493929190614266565b6020604051808303816000875af192505050801561269457506040513d601f19601f8201168201806040525081019061269191906142d5565b60015b61273a576126a061430f565b806308c379a014156126fd57506126b5614331565b806126c057506126ff565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f49190612e47565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190614439565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b8906144cb565b60405180910390fd5b505b505050505050565b6127ea8473ffffffffffffffffffffffffffffffffffffffff166129a3565b1561299b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016128309594939291906144eb565b6020604051808303816000875af192505050801561286c57506040513d601f19601f8201168201806040525081019061286991906142d5565b60015b6129125761287861430f565b806308c379a014156128d5575061288d614331565b8061289857506128d7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc9190612e47565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290990614439565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612990906144cb565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546129d2906138f8565b90600052602060002090601f0160209004810192826129f45760008555612a3b565b82601f10612a0d57803560ff1916838001178555612a3b565b82800160010185558215612a3b579182015b82811115612a3a578235825591602001919060010190612a1f565b5b509050612a489190612ad2565b5090565b828054612a58906138f8565b90600052602060002090601f016020900481019282612a7a5760008555612ac1565b82601f10612a9357805160ff1916838001178555612ac1565b82800160010185558215612ac1579182015b82811115612ac0578251825591602001919060010190612aa5565b5b509050612ace9190612ad2565b5090565b5b80821115612aeb576000816000905550600101612ad3565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2e82612b03565b9050919050565b612b3e81612b23565b8114612b4957600080fd5b50565b600081359050612b5b81612b35565b92915050565b6000819050919050565b612b7481612b61565b8114612b7f57600080fd5b50565b600081359050612b9181612b6b565b92915050565b60008060408385031215612bae57612bad612af9565b5b6000612bbc85828601612b4c565b9250506020612bcd85828601612b82565b9150509250929050565b612be081612b61565b82525050565b6000602082019050612bfb6000830184612bd7565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c3681612c01565b8114612c4157600080fd5b50565b600081359050612c5381612c2d565b92915050565b600060208284031215612c6f57612c6e612af9565b5b6000612c7d84828501612c44565b91505092915050565b60008115159050919050565b612c9b81612c86565b82525050565b6000602082019050612cb66000830184612c92565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612ce157612ce0612cbc565b5b8235905067ffffffffffffffff811115612cfe57612cfd612cc1565b5b602083019150836001820283011115612d1a57612d19612cc6565b5b9250929050565b600080600060408486031215612d3a57612d39612af9565b5b600084013567ffffffffffffffff811115612d5857612d57612afe565b5b612d6486828701612ccb565b93509350506020612d7786828701612b82565b9150509250925092565b600060208284031215612d9757612d96612af9565b5b6000612da584828501612b82565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612de8578082015181840152602081019050612dcd565b83811115612df7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e1982612dae565b612e238185612db9565b9350612e33818560208601612dca565b612e3c81612dfd565b840191505092915050565b60006020820190508181036000830152612e618184612e0e565b905092915050565b60008083601f840112612e7f57612e7e612cbc565b5b8235905067ffffffffffffffff811115612e9c57612e9b612cc1565b5b602083019150836020820283011115612eb857612eb7612cc6565b5b9250929050565b60008083601f840112612ed557612ed4612cbc565b5b8235905067ffffffffffffffff811115612ef257612ef1612cc1565b5b602083019150836020820283011115612f0e57612f0d612cc6565b5b9250929050565b60008060008060008060608789031215612f3257612f31612af9565b5b600087013567ffffffffffffffff811115612f5057612f4f612afe565b5b612f5c89828a01612e69565b9650965050602087013567ffffffffffffffff811115612f7f57612f7e612afe565b5b612f8b89828a01612ebf565b9450945050604087013567ffffffffffffffff811115612fae57612fad612afe565b5b612fba89828a01612ebf565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61300182612dfd565b810181811067ffffffffffffffff821117156130205761301f612fc9565b5b80604052505050565b6000613033612aef565b905061303f8282612ff8565b919050565b600067ffffffffffffffff82111561305f5761305e612fc9565b5b602082029050602081019050919050565b600061308361307e84613044565b613029565b905080838252602082019050602084028301858111156130a6576130a5612cc6565b5b835b818110156130cf57806130bb8882612b82565b8452602084019350506020810190506130a8565b5050509392505050565b600082601f8301126130ee576130ed612cbc565b5b81356130fe848260208601613070565b91505092915050565b600080fd5b600067ffffffffffffffff82111561312757613126612fc9565b5b61313082612dfd565b9050602081019050919050565b82818337600083830152505050565b600061315f61315a8461310c565b613029565b90508281526020810184848401111561317b5761317a613107565b5b61318684828561313d565b509392505050565b600082601f8301126131a3576131a2612cbc565b5b81356131b384826020860161314c565b91505092915050565b600080600080600060a086880312156131d8576131d7612af9565b5b60006131e688828901612b4c565b95505060206131f788828901612b4c565b945050604086013567ffffffffffffffff81111561321857613217612afe565b5b613224888289016130d9565b935050606086013567ffffffffffffffff81111561324557613244612afe565b5b613251888289016130d9565b925050608086013567ffffffffffffffff81111561327257613271612afe565b5b61327e8882890161318e565b9150509295509295909350565b600067ffffffffffffffff8211156132a6576132a5612fc9565b5b602082029050602081019050919050565b60006132ca6132c58461328b565b613029565b905080838252602082019050602084028301858111156132ed576132ec612cc6565b5b835b8181101561331657806133028882612b4c565b8452602084019350506020810190506132ef565b5050509392505050565b600082601f83011261333557613334612cbc565b5b81356133458482602086016132b7565b91505092915050565b6000806040838503121561336557613364612af9565b5b600083013567ffffffffffffffff81111561338357613382612afe565b5b61338f85828601613320565b925050602083013567ffffffffffffffff8111156133b0576133af612afe565b5b6133bc858286016130d9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133fb81612b61565b82525050565b600061340d83836133f2565b60208301905092915050565b6000602082019050919050565b6000613431826133c6565b61343b81856133d1565b9350613446836133e2565b8060005b8381101561347757815161345e8882613401565b975061346983613419565b92505060018101905061344a565b5085935050505092915050565b6000602082019050818103600083015261349e8184613426565b905092915050565b600080602083850312156134bd576134bc612af9565b5b600083013567ffffffffffffffff8111156134db576134da612afe565b5b6134e785828601612ccb565b92509250509250929050565b60008060006060848603121561350c5761350b612af9565b5b600061351a86828701612b4c565b935050602084013567ffffffffffffffff81111561353b5761353a612afe565b5b613547868287016130d9565b925050604084013567ffffffffffffffff81111561356857613567612afe565b5b613574868287016130d9565b9150509250925092565b61358781612b23565b82525050565b60006020820190506135a2600083018461357e565b92915050565b6135b181612c86565b81146135bc57600080fd5b50565b6000813590506135ce816135a8565b92915050565b600080604083850312156135eb576135ea612af9565b5b60006135f985828601612b4c565b925050602061360a858286016135bf565b9150509250929050565b60008060006040848603121561362d5761362c612af9565b5b600084013567ffffffffffffffff81111561364b5761364a612afe565b5b61365786828701612e69565b9350935050602061366a86828701612b82565b9150509250925092565b6000806040838503121561368b5761368a612af9565b5b600061369985828601612b4c565b92505060206136aa85828601612b4c565b9150509250929050565b600080600080600060a086880312156136d0576136cf612af9565b5b60006136de88828901612b4c565b95505060206136ef88828901612b4c565b945050604061370088828901612b82565b935050606061371188828901612b82565b925050608086013567ffffffffffffffff81111561373257613731612afe565b5b61373e8882890161318e565b9150509295509295909350565b60006020828403121561376157613760612af9565b5b600061376f84828501612b4c565b91505092915050565b60008060006060848603121561379157613790612af9565b5b600061379f86828701612b4c565b93505060206137b086828701612b82565b92505060406137c186828701612b82565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613827602b83612db9565b9150613832826137cb565b604082019050919050565b600060208201905081810360008301526138568161381a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613893602083612db9565b915061389e8261385d565b602082019050919050565b600060208201905081810360008301526138c281613886565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061391057607f821691505b60208210811415613924576139236138c9565b5b50919050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000613960600b83612db9565b915061396b8261392a565b602082019050919050565b6000602082019050818103600083015261398f81613953565b9050919050565b7f426164206172726179206c656e67746873000000000000000000000000000000600082015250565b60006139cc601183612db9565b91506139d782613996565b602082019050919050565b600060208201905081810360008301526139fb816139bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a6b82612b61565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9e57613a9d613a31565b5b600182019050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613b05603283612db9565b9150613b1082613aa9565b604082019050919050565b60006020820190508181036000830152613b3481613af8565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613b97602983612db9565b9150613ba282613b3b565b604082019050919050565b60006020820190508181036000830152613bc681613b8a565b9050919050565b7f467265657a656400000000000000000000000000000000000000000000000000600082015250565b6000613c03600783612db9565b9150613c0e82613bcd565b602082019050919050565b60006020820190508181036000830152613c3281613bf6565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613c95602983612db9565b9150613ca082613c39565b604082019050919050565b60006020820190508181036000830152613cc481613c88565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d27602683612db9565b9150613d3282613ccb565b604082019050919050565b60006020820190508181036000830152613d5681613d1a565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613db9602183612db9565b9150613dc482613d5d565b604082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b6000613dfa82612b61565b9150613e0583612b61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e3a57613e39613a31565b5b828201905092915050565b6000604082019050613e5a6000830185612bd7565b613e676020830184612bd7565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613eca602883612db9565b9150613ed582613e6e565b604082019050919050565b60006020820190508181036000830152613ef981613ebd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f5c602583612db9565b9150613f6782613f00565b604082019050919050565b60006020820190508181036000830152613f8b81613f4f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613fee602a83612db9565b9150613ff982613f92565b604082019050919050565b6000602082019050818103600083015261401d81613fe1565b9050919050565b6000604082019050818103600083015261403e8185613426565b905081810360208301526140528184613426565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140b7602383612db9565b91506140c28261405b565b604082019050919050565b600060208201905081810360008301526140e6816140aa565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614149602483612db9565b9150614154826140ed565b604082019050919050565b600060208201905081810360008301526141788161413c565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006141db602983612db9565b91506141e68261417f565b604082019050919050565b6000602082019050818103600083015261420a816141ce565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061423882614211565b614242818561421c565b9350614252818560208601612dca565b61425b81612dfd565b840191505092915050565b600060a08201905061427b600083018861357e565b614288602083018761357e565b6142956040830186612bd7565b6142a26060830185612bd7565b81810360808301526142b4818461422d565b90509695505050505050565b6000815190506142cf81612c2d565b92915050565b6000602082840312156142eb576142ea612af9565b5b60006142f9848285016142c0565b91505092915050565b60008160e01c9050919050565b600060033d111561432e5760046000803e61432b600051614302565b90505b90565b600060443d1015614341576143c4565b614349612aef565b60043d036004823e80513d602482011167ffffffffffffffff821117156143715750506143c4565b808201805167ffffffffffffffff81111561438f57505050506143c4565b80602083010160043d0385018111156143ac5750505050506143c4565b6143bb82602001850186612ff8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614423603483612db9565b915061442e826143c7565b604082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006144b5602883612db9565b91506144c082614459565b604082019050919050565b600060208201905081810360008301526144e4816144a8565b9050919050565b600060a082019050614500600083018861357e565b61450d602083018761357e565b818103604083015261451f8186613426565b905081810360608301526145338185613426565b90508181036080830152614547818461422d565b9050969550505050505056fea264697066735822122063a4795accd7d4c51d3c1c229016571fdb0d6170abe00818c9da0baeba19db9964736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38125:3079:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23431:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22454:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40233:76;;;:::i;:::-;;41026:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39690:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38785:90;;;:::i;:::-;;38300:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38465:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38951:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38225:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25370:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23828:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40031:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37700:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2618:103;;;:::i;:::-;;1967:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40593:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24425:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38387:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40385:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40841:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39422:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24652:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24892:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2876:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37371:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23431:231;23517:7;23564:1;23545:21;;:7;:21;;;;23537:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23632:9;:13;23642:2;23632:13;;;;;;;;;;;:22;23646:7;23632:22;;;;;;;;;;;;;;;;23625:29;;23431:231;;;;:::o;22454:310::-;22556:4;22608:26;22593:41;;;:11;:41;;;;:110;;;;22666:37;22651:52;;;:11;:52;;;;22593:110;:163;;;;22720:36;22744:11;22720:23;:36::i;:::-;22593:163;22573:183;;22454:310;;;:::o;40233:76::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40297:4:::1;40282:12;;:19;;;;;;;;;;;;;;;;;;40233:76::o:0;41026:175::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41126:32:::1;41143:6;;41151;41126:16;:32::i;:::-;41169:24;41186:6;41169:16;:24::i;:::-;41026:175:::0;;;:::o;39690:274::-;39749:13;39775:21;39799:9;:17;39809:6;39799:17;;;;;;;;;;;39775:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39856:1;39837:7;39831:21;:26;39827:130;;;39881:17;39891:6;39881:9;:17::i;:::-;39874:24;;;;;39827:130;39938:7;39931:14;;;39690:274;;;;:::o;38785:90::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38862:5:::1;38842:17;;:25;;;;;;;;;;;;;;;;;;38785:90::o:0;38300:44::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38465:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;38951:400::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39084:17:::1;;;;;;;;;;;39076:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;39151:5;;:12;;39134:6;;:13;;:29;:62;;;;;39183:6;;:13;;39167:5;;:12;;:29;39134:62;39126:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;39243:9;39238:106;39262:6;;:13;;39258:1;:17;39238:106;;;39293:41;39299:6;;39306:1;39299:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39310:5;;39316:1;39310:8;;;;;;;:::i;:::-;;;;;;;;39320:6;;39327:1;39320:9;;;;;;;:::i;:::-;;;;;;;;39293:41;;;;;;;;;;;::::0;:5:::1;:41::i;:::-;39277:3;;;;;:::i;:::-;;;;39238:106;;;;38951:400:::0;;;;;;:::o;38225:36::-;;;;;;;;;;;;;:::o;25370:442::-;25611:12;:10;:12::i;:::-;25603:20;;:4;:20;;;:60;;;;25627:36;25644:4;25650:12;:10;:12::i;:::-;25627:16;:36::i;:::-;25603:60;25581:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25752:52;25775:4;25781:2;25785:3;25790:7;25799:4;25752:22;:52::i;:::-;25370:442;;;;;:::o;23828:524::-;23984:16;24045:3;:10;24026:8;:15;:29;24018:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24114:30;24161:8;:15;24147:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24114:63;;24195:9;24190:122;24214:8;:15;24210:1;:19;24190:122;;;24270:30;24280:8;24289:1;24280:11;;;;;;;;:::i;:::-;;;;;;;;24293:3;24297:1;24293:6;;;;;;;;:::i;:::-;;;;;;;;24270:9;:30::i;:::-;24251:13;24265:1;24251:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24231:3;;;;:::i;:::-;;;24190:122;;;;24331:13;24324:20;;;23828:524;;;;:::o;40031:138::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40111:12:::1;;;;;;;;;;;40110:13;40102:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;40146:15;40154:6;;40146:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:15::i;:::-;40031:138:::0;;:::o;37700:353::-;37876:12;:10;:12::i;:::-;37865:23;;:7;:23;;;:66;;;;37892:39;37909:7;37918:12;:10;:12::i;:::-;37892:16;:39::i;:::-;37865:66;37843:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;38013:32;38024:7;38033:3;38038:6;38013:10;:32::i;:::-;37700:353;;;:::o;2618:103::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2683:30:::1;2710:1;2683:18;:30::i;:::-;2618:103::o:0;1967:87::-;2013:7;2040:6;;;;;;;;;;;2033:13;;1967:87;:::o;40593:184::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40696:16:::1;:24;40713:6;40696:24;;;;;;;;;;;;;;;;;;;;;40695:25;40687:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;40763:6;;40743:9;:17;40753:6;40743:17;;;;;;;;;;;:26;;;;;;;:::i;:::-;;40593:184:::0;;;:::o;24425:155::-;24520:52;24539:12;:10;:12::i;:::-;24553:8;24563;24520:18;:52::i;:::-;24425:155;;:::o;38387:24::-;;;;;;;;;;;;;:::o;40385:124::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40462:17:::1;40472:6;;40462:9;:17::i;:::-;40490:11;:9;:11::i;:::-;40385:124:::0;;:::o;40841:109::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40938:4:::1;40911:16;:24;40928:6;40911:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;40841:109:::0;:::o;39422:260::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39526:17:::1;;;;;;;;;;;39518:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;39584:9;39579:96;39603:6;;:13;;39599:1;:17;39579:96;;;39634:31;39640:6;;39647:1;39640:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39651:6;39659:1;39634:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;39618:3;;;;;:::i;:::-;;;;39579:96;;;;39422:260:::0;;;:::o;24652:168::-;24751:4;24775:18;:27;24794:7;24775:27;;;;;;;;;;;;;;;:37;24803:8;24775:37;;;;;;;;;;;;;;;;;;;;;;;;;24768:44;;24652:168;;;;:::o;24892:401::-;25108:12;:10;:12::i;:::-;25100:20;;:4;:20;;;:60;;;;25124:36;25141:4;25147:12;:10;:12::i;:::-;25124:16;:36::i;:::-;25100:60;25078:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25240:45;25258:4;25264:2;25268;25272:6;25280:4;25240:17;:45::i;:::-;24892:401;;;;;:::o;2876:201::-;2198:12;:10;:12::i;:::-;2187:23;;:7;:5;:7::i;:::-;:23;;;2179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2985:1:::1;2965:22;;:8;:22;;;;2957:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3041:28;3060:8;3041:18;:28::i;:::-;2876:201:::0;:::o;37371:321::-;37522:12;:10;:12::i;:::-;37511:23;;:7;:23;;;:66;;;;37538:39;37555:7;37564:12;:10;:12::i;:::-;37538:16;:39::i;:::-;37511:66;37489:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;37659:25;37665:7;37674:2;37678:5;37659;:25::i;:::-;37371:321;;;:::o;13738:157::-;13823:4;13862:25;13847:40;;;:11;:40;;;;13840:47;;13738:157;;;:::o;685:98::-;738:7;765:10;758:17;;685:98;:::o;23175:105::-;23235:13;23268:4;23261:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23175:105;;;:::o;29846:569::-;30013:1;29999:16;;:2;:16;;;;29991:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30066:16;30085:12;:10;:12::i;:::-;30066:31;;30110:102;30131:8;30149:1;30153:2;30157:21;30175:2;30157:17;:21::i;:::-;30180:25;30198:6;30180:17;:25::i;:::-;30207:4;30110:20;:102::i;:::-;30246:6;30225:9;:13;30235:2;30225:13;;;;;;;;;;;:17;30239:2;30225:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30305:2;30268:52;;30301:1;30268:52;;30283:8;30268:52;;;30309:2;30313:6;30268:52;;;;;;;:::i;:::-;;;;;;;;30333:74;30364:8;30382:1;30386:2;30390;30394:6;30402:4;30333:30;:74::i;:::-;29980:435;29846:569;;;;:::o;27454:1074::-;27681:7;:14;27667:3;:10;:28;27659:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27773:1;27759:16;;:2;:16;;;;27751:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27830:16;27849:12;:10;:12::i;:::-;27830:31;;27874:60;27895:8;27905:4;27911:2;27915:3;27920:7;27929:4;27874:20;:60::i;:::-;27952:9;27947:421;27971:3;:10;27967:1;:14;27947:421;;;28003:10;28016:3;28020:1;28016:6;;;;;;;;:::i;:::-;;;;;;;;28003:19;;28037:14;28054:7;28062:1;28054:10;;;;;;;;:::i;:::-;;;;;;;;28037:27;;28081:19;28103:9;:13;28113:2;28103:13;;;;;;;;;;;:19;28117:4;28103:19;;;;;;;;;;;;;;;;28081:41;;28160:6;28145:11;:21;;28137:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28293:6;28279:11;:20;28257:9;:13;28267:2;28257:13;;;;;;;;;;;:19;28271:4;28257:19;;;;;;;;;;;;;;;:42;;;;28350:6;28329:9;:13;28339:2;28329:13;;;;;;;;;;;:17;28343:2;28329:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27988:380;;;27983:3;;;;:::i;:::-;;;27947:421;;;;28415:2;28385:47;;28409:4;28385:47;;28399:8;28385:47;;;28419:3;28424:7;28385:47;;;;;;;:::i;:::-;;;;;;;;28445:75;28481:8;28491:4;28497:2;28501:3;28506:7;28515:4;28445:35;:75::i;:::-;27648:880;27454:1074;;;;;:::o;29372:88::-;29446:6;29439:4;:13;;;;;;;;;;;;:::i;:::-;;29372:88;:::o;32607:891::-;32775:1;32759:18;;:4;:18;;;;32751:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32850:7;:14;32836:3;:10;:28;32828:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32922:16;32941:12;:10;:12::i;:::-;32922:31;;32966:66;32987:8;32997:4;33011:1;33015:3;33020:7;32966:66;;;;;;;;;;;;:20;:66::i;:::-;33050:9;33045:373;33069:3;:10;33065:1;:14;33045:373;;;33101:10;33114:3;33118:1;33114:6;;;;;;;;:::i;:::-;;;;;;;;33101:19;;33135:14;33152:7;33160:1;33152:10;;;;;;;;:::i;:::-;;;;;;;;33135:27;;33179:19;33201:9;:13;33211:2;33201:13;;;;;;;;;;;:19;33215:4;33201:19;;;;;;;;;;;;;;;;33179:41;;33258:6;33243:11;:21;;33235:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33385:6;33371:11;:20;33349:9;:13;33359:2;33349:13;;;;;;;;;;;:19;33363:4;33349:19;;;;;;;;;;;;;;;:42;;;;33086:332;;;33081:3;;;;;:::i;:::-;;;;33045:373;;;;33473:1;33435:55;;33459:4;33435:55;;33449:8;33435:55;;;33477:3;33482:7;33435:55;;;;;;;:::i;:::-;;;;;;;;32740:758;32607:891;;;:::o;3237:191::-;3311:16;3330:6;;;;;;;;;;;3311:25;;3356:8;3347:6;;:17;;;;;;;;;;;;;;;;;;3411:8;3380:40;;3401:8;3380:40;;;;;;;;;;;;3300:128;3237:191;:::o;33640:331::-;33795:8;33786:17;;:5;:17;;;;33778:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33898:8;33860:18;:25;33879:5;33860:25;;;;;;;;;;;;;;;:35;33886:8;33860:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33944:8;33922:41;;33937:5;33922:41;;;33954:8;33922:41;;;;;;:::i;:::-;;;;;;;;33640:331;;;:::o;26276:820::-;26478:1;26464:16;;:2;:16;;;;26456:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26535:16;26554:12;:10;:12::i;:::-;26535:31;;26579:96;26600:8;26610:4;26616:2;26620:21;26638:2;26620:17;:21::i;:::-;26643:25;26661:6;26643:17;:25::i;:::-;26670:4;26579:20;:96::i;:::-;26688:19;26710:9;:13;26720:2;26710:13;;;;;;;;;;;:19;26724:4;26710:19;;;;;;;;;;;;;;;;26688:41;;26763:6;26748:11;:21;;26740:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26888:6;26874:11;:20;26852:9;:13;26862:2;26852:13;;;;;;;;;;;:19;26866:4;26852:19;;;;;;;;;;;;;;;:42;;;;26937:6;26916:9;:13;26926:2;26916:13;;;;;;;;;;;:17;26930:2;26916:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26992:2;26961:46;;26986:4;26961:46;;26976:8;26961:46;;;26996:2;27000:6;26961:46;;;;;;;:::i;:::-;;;;;;;;27020:68;27051:8;27061:4;27067:2;27071;27075:6;27083:4;27020:30;:68::i;:::-;26445:651;;26276:820;;;;;:::o;31756:648::-;31899:1;31883:18;;:4;:18;;;;31875:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31954:16;31973:12;:10;:12::i;:::-;31954:31;;31998:102;32019:8;32029:4;32043:1;32047:21;32065:2;32047:17;:21::i;:::-;32070:25;32088:6;32070:17;:25::i;:::-;31998:102;;;;;;;;;;;;:20;:102::i;:::-;32113:19;32135:9;:13;32145:2;32135:13;;;;;;;;;;;:19;32149:4;32135:19;;;;;;;;;;;;;;;;32113:41;;32188:6;32173:11;:21;;32165:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32307:6;32293:11;:20;32271:9;:13;32281:2;32271:13;;;;;;;;;;;:19;32285:4;32271:19;;;;;;;;;;;;;;;:42;;;;32381:1;32342:54;;32367:4;32342:54;;32357:8;32342:54;;;32385:2;32389:6;32342:54;;;;;;;:::i;:::-;;;;;;;;31864:540;;31756:648;;;:::o;36729:198::-;36795:16;36824:22;36863:1;36849:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36824:41;;36887:7;36876:5;36882:1;36876:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36914:5;36907:12;;;36729:198;;;:::o;34927:221::-;;;;;;;:::o;35156:744::-;35371:15;:2;:13;;;:15::i;:::-;35367:526;;;35424:2;35407:38;;;35446:8;35456:4;35462:2;35466:6;35474:4;35407:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35403:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35755:6;35748:14;;;;;;;;;;;:::i;:::-;;;;;;;;35403:479;;;35804:62;;;;;;;;;;:::i;:::-;;;;;;;;35403:479;35541:43;;;35529:55;;;:8;:55;;;;35525:154;;35609:50;;;;;;;;;;:::i;:::-;;;;;;;;35525:154;35480:214;35367:526;35156:744;;;;;;:::o;35908:813::-;36148:15;:2;:13;;;:15::i;:::-;36144:570;;;36201:2;36184:43;;;36228:8;36238:4;36244:3;36249:7;36258:4;36184:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36180:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36576:6;36569:14;;;;;;;;;;;:::i;:::-;;;;;;;;36180:523;;;36625:62;;;;;;;;;;:::i;:::-;;;;;;;;36180:523;36357:48;;;36345:60;;;:8;:60;;;;36341:159;;36430:50;;;;;;;;;;:::i;:::-;;;;;;;;36341:159;36264:251;36144:570;35908:813;;;;;;:::o;4674:326::-;4734:4;4991:1;4969:7;:19;;;:23;4962:30;;4674:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:117;3568:1;3565;3558:12;3596:553;3654:8;3664:6;3714:3;3707:4;3699:6;3695:17;3691:27;3681:122;;3722:79;;:::i;:::-;3681:122;3835:6;3822:20;3812:30;;3865:18;3857:6;3854:30;3851:117;;;3887:79;;:::i;:::-;3851:117;4001:4;3993:6;3989:17;3977:29;;4055:3;4047:4;4039:6;4035:17;4025:8;4021:32;4018:41;4015:128;;;4062:79;;:::i;:::-;4015:128;3596:553;;;;;:::o;4155:674::-;4235:6;4243;4251;4300:2;4288:9;4279:7;4275:23;4271:32;4268:119;;;4306:79;;:::i;:::-;4268:119;4454:1;4443:9;4439:17;4426:31;4484:18;4476:6;4473:30;4470:117;;;4506:79;;:::i;:::-;4470:117;4619:65;4676:7;4667:6;4656:9;4652:22;4619:65;:::i;:::-;4601:83;;;;4397:297;4733:2;4759:53;4804:7;4795:6;4784:9;4780:22;4759:53;:::i;:::-;4749:63;;4704:118;4155:674;;;;;:::o;4835:329::-;4894:6;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;4835:329;;;;:::o;5170:99::-;5222:6;5256:5;5250:12;5240:22;;5170:99;;;:::o;5275:169::-;5359:11;5393:6;5388:3;5381:19;5433:4;5428:3;5424:14;5409:29;;5275:169;;;;:::o;5450:307::-;5518:1;5528:113;5542:6;5539:1;5536:13;5528:113;;;5627:1;5622:3;5618:11;5612:18;5608:1;5603:3;5599:11;5592:39;5564:2;5561:1;5557:10;5552:15;;5528:113;;;5659:6;5656:1;5653:13;5650:101;;;5739:1;5730:6;5725:3;5721:16;5714:27;5650:101;5499:258;5450:307;;;:::o;5763:102::-;5804:6;5855:2;5851:7;5846:2;5839:5;5835:14;5831:28;5821:38;;5763:102;;;:::o;5871:364::-;5959:3;5987:39;6020:5;5987:39;:::i;:::-;6042:71;6106:6;6101:3;6042:71;:::i;:::-;6035:78;;6122:52;6167:6;6162:3;6155:4;6148:5;6144:16;6122:52;:::i;:::-;6199:29;6221:6;6199:29;:::i;:::-;6194:3;6190:39;6183:46;;5963:272;5871:364;;;;:::o;6241:313::-;6354:4;6392:2;6381:9;6377:18;6369:26;;6441:9;6435:4;6431:20;6427:1;6416:9;6412:17;6405:47;6469:78;6542:4;6533:6;6469:78;:::i;:::-;6461:86;;6241:313;;;;:::o;6577:568::-;6650:8;6660:6;6710:3;6703:4;6695:6;6691:17;6687:27;6677:122;;6718:79;;:::i;:::-;6677:122;6831:6;6818:20;6808:30;;6861:18;6853:6;6850:30;6847:117;;;6883:79;;:::i;:::-;6847:117;6997:4;6989:6;6985:17;6973:29;;7051:3;7043:4;7035:6;7031:17;7021:8;7017:32;7014:41;7011:128;;;7058:79;;:::i;:::-;7011:128;6577:568;;;;;:::o;7168:::-;7241:8;7251:6;7301:3;7294:4;7286:6;7282:17;7278:27;7268:122;;7309:79;;:::i;:::-;7268:122;7422:6;7409:20;7399:30;;7452:18;7444:6;7441:30;7438:117;;;7474:79;;:::i;:::-;7438:117;7588:4;7580:6;7576:17;7564:29;;7642:3;7634:4;7626:6;7622:17;7612:8;7608:32;7605:41;7602:128;;;7649:79;;:::i;:::-;7602:128;7168:568;;;;;:::o;7742:1309::-;7900:6;7908;7916;7924;7932;7940;7989:2;7977:9;7968:7;7964:23;7960:32;7957:119;;;7995:79;;:::i;:::-;7957:119;8143:1;8132:9;8128:17;8115:31;8173:18;8165:6;8162:30;8159:117;;;8195:79;;:::i;:::-;8159:117;8308:80;8380:7;8371:6;8360:9;8356:22;8308:80;:::i;:::-;8290:98;;;;8086:312;8465:2;8454:9;8450:18;8437:32;8496:18;8488:6;8485:30;8482:117;;;8518:79;;:::i;:::-;8482:117;8631:80;8703:7;8694:6;8683:9;8679:22;8631:80;:::i;:::-;8613:98;;;;8408:313;8788:2;8777:9;8773:18;8760:32;8819:18;8811:6;8808:30;8805:117;;;8841:79;;:::i;:::-;8805:117;8954:80;9026:7;9017:6;9006:9;9002:22;8954:80;:::i;:::-;8936:98;;;;8731:313;7742:1309;;;;;;;;:::o;9057:180::-;9105:77;9102:1;9095:88;9202:4;9199:1;9192:15;9226:4;9223:1;9216:15;9243:281;9326:27;9348:4;9326:27;:::i;:::-;9318:6;9314:40;9456:6;9444:10;9441:22;9420:18;9408:10;9405:34;9402:62;9399:88;;;9467:18;;:::i;:::-;9399:88;9507:10;9503:2;9496:22;9286:238;9243:281;;:::o;9530:129::-;9564:6;9591:20;;:::i;:::-;9581:30;;9620:33;9648:4;9640:6;9620:33;:::i;:::-;9530:129;;;:::o;9665:311::-;9742:4;9832:18;9824:6;9821:30;9818:56;;;9854:18;;:::i;:::-;9818:56;9904:4;9896:6;9892:17;9884:25;;9964:4;9958;9954:15;9946:23;;9665:311;;;:::o;9999:710::-;10095:5;10120:81;10136:64;10193:6;10136:64;:::i;:::-;10120:81;:::i;:::-;10111:90;;10221:5;10250:6;10243:5;10236:21;10284:4;10277:5;10273:16;10266:23;;10337:4;10329:6;10325:17;10317:6;10313:30;10366:3;10358:6;10355:15;10352:122;;;10385:79;;:::i;:::-;10352:122;10500:6;10483:220;10517:6;10512:3;10509:15;10483:220;;;10592:3;10621:37;10654:3;10642:10;10621:37;:::i;:::-;10616:3;10609:50;10688:4;10683:3;10679:14;10672:21;;10559:144;10543:4;10538:3;10534:14;10527:21;;10483:220;;;10487:21;10101:608;;9999:710;;;;;:::o;10732:370::-;10803:5;10852:3;10845:4;10837:6;10833:17;10829:27;10819:122;;10860:79;;:::i;:::-;10819:122;10977:6;10964:20;11002:94;11092:3;11084:6;11077:4;11069:6;11065:17;11002:94;:::i;:::-;10993:103;;10809:293;10732:370;;;;:::o;11108:117::-;11217:1;11214;11207:12;11231:307;11292:4;11382:18;11374:6;11371:30;11368:56;;;11404:18;;:::i;:::-;11368:56;11442:29;11464:6;11442:29;:::i;:::-;11434:37;;11526:4;11520;11516:15;11508:23;;11231:307;;;:::o;11544:154::-;11628:6;11623:3;11618;11605:30;11690:1;11681:6;11676:3;11672:16;11665:27;11544:154;;;:::o;11704:410::-;11781:5;11806:65;11822:48;11863:6;11822:48;:::i;:::-;11806:65;:::i;:::-;11797:74;;11894:6;11887:5;11880:21;11932:4;11925:5;11921:16;11970:3;11961:6;11956:3;11952:16;11949:25;11946:112;;;11977:79;;:::i;:::-;11946:112;12067:41;12101:6;12096:3;12091;12067:41;:::i;:::-;11787:327;11704:410;;;;;:::o;12133:338::-;12188:5;12237:3;12230:4;12222:6;12218:17;12214:27;12204:122;;12245:79;;:::i;:::-;12204:122;12362:6;12349:20;12387:78;12461:3;12453:6;12446:4;12438:6;12434:17;12387:78;:::i;:::-;12378:87;;12194:277;12133:338;;;;:::o;12477:1509::-;12631:6;12639;12647;12655;12663;12712:3;12700:9;12691:7;12687:23;12683:33;12680:120;;;12719:79;;:::i;:::-;12680:120;12839:1;12864:53;12909:7;12900:6;12889:9;12885:22;12864:53;:::i;:::-;12854:63;;12810:117;12966:2;12992:53;13037:7;13028:6;13017:9;13013:22;12992:53;:::i;:::-;12982:63;;12937:118;13122:2;13111:9;13107:18;13094:32;13153:18;13145:6;13142:30;13139:117;;;13175:79;;:::i;:::-;13139:117;13280:78;13350:7;13341:6;13330:9;13326:22;13280:78;:::i;:::-;13270:88;;13065:303;13435:2;13424:9;13420:18;13407:32;13466:18;13458:6;13455:30;13452:117;;;13488:79;;:::i;:::-;13452:117;13593:78;13663:7;13654:6;13643:9;13639:22;13593:78;:::i;:::-;13583:88;;13378:303;13748:3;13737:9;13733:19;13720:33;13780:18;13772:6;13769:30;13766:117;;;13802:79;;:::i;:::-;13766:117;13907:62;13961:7;13952:6;13941:9;13937:22;13907:62;:::i;:::-;13897:72;;13691:288;12477:1509;;;;;;;;:::o;13992:311::-;14069:4;14159:18;14151:6;14148:30;14145:56;;;14181:18;;:::i;:::-;14145:56;14231:4;14223:6;14219:17;14211:25;;14291:4;14285;14281:15;14273:23;;13992:311;;;:::o;14326:710::-;14422:5;14447:81;14463:64;14520:6;14463:64;:::i;:::-;14447:81;:::i;:::-;14438:90;;14548:5;14577:6;14570:5;14563:21;14611:4;14604:5;14600:16;14593:23;;14664:4;14656:6;14652:17;14644:6;14640:30;14693:3;14685:6;14682:15;14679:122;;;14712:79;;:::i;:::-;14679:122;14827:6;14810:220;14844:6;14839:3;14836:15;14810:220;;;14919:3;14948:37;14981:3;14969:10;14948:37;:::i;:::-;14943:3;14936:50;15015:4;15010:3;15006:14;14999:21;;14886:144;14870:4;14865:3;14861:14;14854:21;;14810:220;;;14814:21;14428:608;;14326:710;;;;;:::o;15059:370::-;15130:5;15179:3;15172:4;15164:6;15160:17;15156:27;15146:122;;15187:79;;:::i;:::-;15146:122;15304:6;15291:20;15329:94;15419:3;15411:6;15404:4;15396:6;15392:17;15329:94;:::i;:::-;15320:103;;15136:293;15059:370;;;;:::o;15435:894::-;15553:6;15561;15610:2;15598:9;15589:7;15585:23;15581:32;15578:119;;;15616:79;;:::i;:::-;15578:119;15764:1;15753:9;15749:17;15736:31;15794:18;15786:6;15783:30;15780:117;;;15816:79;;:::i;:::-;15780:117;15921:78;15991:7;15982:6;15971:9;15967:22;15921:78;:::i;:::-;15911:88;;15707:302;16076:2;16065:9;16061:18;16048:32;16107:18;16099:6;16096:30;16093:117;;;16129:79;;:::i;:::-;16093:117;16234:78;16304:7;16295:6;16284:9;16280:22;16234:78;:::i;:::-;16224:88;;16019:303;15435:894;;;;;:::o;16335:114::-;16402:6;16436:5;16430:12;16420:22;;16335:114;;;:::o;16455:184::-;16554:11;16588:6;16583:3;16576:19;16628:4;16623:3;16619:14;16604:29;;16455:184;;;;:::o;16645:132::-;16712:4;16735:3;16727:11;;16765:4;16760:3;16756:14;16748:22;;16645:132;;;:::o;16783:108::-;16860:24;16878:5;16860:24;:::i;:::-;16855:3;16848:37;16783:108;;:::o;16897:179::-;16966:10;16987:46;17029:3;17021:6;16987:46;:::i;:::-;17065:4;17060:3;17056:14;17042:28;;16897:179;;;;:::o;17082:113::-;17152:4;17184;17179:3;17175:14;17167:22;;17082:113;;;:::o;17231:732::-;17350:3;17379:54;17427:5;17379:54;:::i;:::-;17449:86;17528:6;17523:3;17449:86;:::i;:::-;17442:93;;17559:56;17609:5;17559:56;:::i;:::-;17638:7;17669:1;17654:284;17679:6;17676:1;17673:13;17654:284;;;17755:6;17749:13;17782:63;17841:3;17826:13;17782:63;:::i;:::-;17775:70;;17868:60;17921:6;17868:60;:::i;:::-;17858:70;;17714:224;17701:1;17698;17694:9;17689:14;;17654:284;;;17658:14;17954:3;17947:10;;17355:608;;;17231:732;;;;:::o;17969:373::-;18112:4;18150:2;18139:9;18135:18;18127:26;;18199:9;18193:4;18189:20;18185:1;18174:9;18170:17;18163:47;18227:108;18330:4;18321:6;18227:108;:::i;:::-;18219:116;;17969:373;;;;:::o;18348:529::-;18419:6;18427;18476:2;18464:9;18455:7;18451:23;18447:32;18444:119;;;18482:79;;:::i;:::-;18444:119;18630:1;18619:9;18615:17;18602:31;18660:18;18652:6;18649:30;18646:117;;;18682:79;;:::i;:::-;18646:117;18795:65;18852:7;18843:6;18832:9;18828:22;18795:65;:::i;:::-;18777:83;;;;18573:297;18348:529;;;;;:::o;18883:1039::-;19010:6;19018;19026;19075:2;19063:9;19054:7;19050:23;19046:32;19043:119;;;19081:79;;:::i;:::-;19043:119;19201:1;19226:53;19271:7;19262:6;19251:9;19247:22;19226:53;:::i;:::-;19216:63;;19172:117;19356:2;19345:9;19341:18;19328:32;19387:18;19379:6;19376:30;19373:117;;;19409:79;;:::i;:::-;19373:117;19514:78;19584:7;19575:6;19564:9;19560:22;19514:78;:::i;:::-;19504:88;;19299:303;19669:2;19658:9;19654:18;19641:32;19700:18;19692:6;19689:30;19686:117;;;19722:79;;:::i;:::-;19686:117;19827:78;19897:7;19888:6;19877:9;19873:22;19827:78;:::i;:::-;19817:88;;19612:303;18883:1039;;;;;:::o;19928:118::-;20015:24;20033:5;20015:24;:::i;:::-;20010:3;20003:37;19928:118;;:::o;20052:222::-;20145:4;20183:2;20172:9;20168:18;20160:26;;20196:71;20264:1;20253:9;20249:17;20240:6;20196:71;:::i;:::-;20052:222;;;;:::o;20280:116::-;20350:21;20365:5;20350:21;:::i;:::-;20343:5;20340:32;20330:60;;20386:1;20383;20376:12;20330:60;20280:116;:::o;20402:133::-;20445:5;20483:6;20470:20;20461:29;;20499:30;20523:5;20499:30;:::i;:::-;20402:133;;;;:::o;20541:468::-;20606:6;20614;20663:2;20651:9;20642:7;20638:23;20634:32;20631:119;;;20669:79;;:::i;:::-;20631:119;20789:1;20814:53;20859:7;20850:6;20839:9;20835:22;20814:53;:::i;:::-;20804:63;;20760:117;20916:2;20942:50;20984:7;20975:6;20964:9;20960:22;20942:50;:::i;:::-;20932:60;;20887:115;20541:468;;;;;:::o;21015:704::-;21110:6;21118;21126;21175:2;21163:9;21154:7;21150:23;21146:32;21143:119;;;21181:79;;:::i;:::-;21143:119;21329:1;21318:9;21314:17;21301:31;21359:18;21351:6;21348:30;21345:117;;;21381:79;;:::i;:::-;21345:117;21494:80;21566:7;21557:6;21546:9;21542:22;21494:80;:::i;:::-;21476:98;;;;21272:312;21623:2;21649:53;21694:7;21685:6;21674:9;21670:22;21649:53;:::i;:::-;21639:63;;21594:118;21015:704;;;;;:::o;21725:474::-;21793:6;21801;21850:2;21838:9;21829:7;21825:23;21821:32;21818:119;;;21856:79;;:::i;:::-;21818:119;21976:1;22001:53;22046:7;22037:6;22026:9;22022:22;22001:53;:::i;:::-;21991:63;;21947:117;22103:2;22129:53;22174:7;22165:6;22154:9;22150:22;22129:53;:::i;:::-;22119:63;;22074:118;21725:474;;;;;:::o;22205:1089::-;22309:6;22317;22325;22333;22341;22390:3;22378:9;22369:7;22365:23;22361:33;22358:120;;;22397:79;;:::i;:::-;22358:120;22517:1;22542:53;22587:7;22578:6;22567:9;22563:22;22542:53;:::i;:::-;22532:63;;22488:117;22644:2;22670:53;22715:7;22706:6;22695:9;22691:22;22670:53;:::i;:::-;22660:63;;22615:118;22772:2;22798:53;22843:7;22834:6;22823:9;22819:22;22798:53;:::i;:::-;22788:63;;22743:118;22900:2;22926:53;22971:7;22962:6;22951:9;22947:22;22926:53;:::i;:::-;22916:63;;22871:118;23056:3;23045:9;23041:19;23028:33;23088:18;23080:6;23077:30;23074:117;;;23110:79;;:::i;:::-;23074:117;23215:62;23269:7;23260:6;23249:9;23245:22;23215:62;:::i;:::-;23205:72;;22999:288;22205:1089;;;;;;;;:::o;23300:329::-;23359:6;23408:2;23396:9;23387:7;23383:23;23379:32;23376:119;;;23414:79;;:::i;:::-;23376:119;23534:1;23559:53;23604:7;23595:6;23584:9;23580:22;23559:53;:::i;:::-;23549:63;;23505:117;23300:329;;;;:::o;23635:619::-;23712:6;23720;23728;23777:2;23765:9;23756:7;23752:23;23748:32;23745:119;;;23783:79;;:::i;:::-;23745:119;23903:1;23928:53;23973:7;23964:6;23953:9;23949:22;23928:53;:::i;:::-;23918:63;;23874:117;24030:2;24056:53;24101:7;24092:6;24081:9;24077:22;24056:53;:::i;:::-;24046:63;;24001:118;24158:2;24184:53;24229:7;24220:6;24209:9;24205:22;24184:53;:::i;:::-;24174:63;;24129:118;23635:619;;;;;:::o;24260:230::-;24400:34;24396:1;24388:6;24384:14;24377:58;24469:13;24464:2;24456:6;24452:15;24445:38;24260:230;:::o;24496:366::-;24638:3;24659:67;24723:2;24718:3;24659:67;:::i;:::-;24652:74;;24735:93;24824:3;24735:93;:::i;:::-;24853:2;24848:3;24844:12;24837:19;;24496:366;;;:::o;24868:419::-;25034:4;25072:2;25061:9;25057:18;25049:26;;25121:9;25115:4;25111:20;25107:1;25096:9;25092:17;25085:47;25149:131;25275:4;25149:131;:::i;:::-;25141:139;;24868:419;;;:::o;25293:182::-;25433:34;25429:1;25421:6;25417:14;25410:58;25293:182;:::o;25481:366::-;25623:3;25644:67;25708:2;25703:3;25644:67;:::i;:::-;25637:74;;25720:93;25809:3;25720:93;:::i;:::-;25838:2;25833:3;25829:12;25822:19;;25481:366;;;:::o;25853:419::-;26019:4;26057:2;26046:9;26042:18;26034:26;;26106:9;26100:4;26096:20;26092:1;26081:9;26077:17;26070:47;26134:131;26260:4;26134:131;:::i;:::-;26126:139;;25853:419;;;:::o;26278:180::-;26326:77;26323:1;26316:88;26423:4;26420:1;26413:15;26447:4;26444:1;26437:15;26464:320;26508:6;26545:1;26539:4;26535:12;26525:22;;26592:1;26586:4;26582:12;26613:18;26603:81;;26669:4;26661:6;26657:17;26647:27;;26603:81;26731:2;26723:6;26720:14;26700:18;26697:38;26694:84;;;26750:18;;:::i;:::-;26694:84;26515:269;26464:320;;;:::o;26790:161::-;26930:13;26926:1;26918:6;26914:14;26907:37;26790:161;:::o;26957:366::-;27099:3;27120:67;27184:2;27179:3;27120:67;:::i;:::-;27113:74;;27196:93;27285:3;27196:93;:::i;:::-;27314:2;27309:3;27305:12;27298:19;;26957:366;;;:::o;27329:419::-;27495:4;27533:2;27522:9;27518:18;27510:26;;27582:9;27576:4;27572:20;27568:1;27557:9;27553:17;27546:47;27610:131;27736:4;27610:131;:::i;:::-;27602:139;;27329:419;;;:::o;27754:167::-;27894:19;27890:1;27882:6;27878:14;27871:43;27754:167;:::o;27927:366::-;28069:3;28090:67;28154:2;28149:3;28090:67;:::i;:::-;28083:74;;28166:93;28255:3;28166:93;:::i;:::-;28284:2;28279:3;28275:12;28268:19;;27927:366;;;:::o;28299:419::-;28465:4;28503:2;28492:9;28488:18;28480:26;;28552:9;28546:4;28542:20;28538:1;28527:9;28523:17;28516:47;28580:131;28706:4;28580:131;:::i;:::-;28572:139;;28299:419;;;:::o;28724:180::-;28772:77;28769:1;28762:88;28869:4;28866:1;28859:15;28893:4;28890:1;28883:15;28910:180;28958:77;28955:1;28948:88;29055:4;29052:1;29045:15;29079:4;29076:1;29069:15;29096:233;29135:3;29158:24;29176:5;29158:24;:::i;:::-;29149:33;;29204:66;29197:5;29194:77;29191:103;;;29274:18;;:::i;:::-;29191:103;29321:1;29314:5;29310:13;29303:20;;29096:233;;;:::o;29335:237::-;29475:34;29471:1;29463:6;29459:14;29452:58;29544:20;29539:2;29531:6;29527:15;29520:45;29335:237;:::o;29578:366::-;29720:3;29741:67;29805:2;29800:3;29741:67;:::i;:::-;29734:74;;29817:93;29906:3;29817:93;:::i;:::-;29935:2;29930:3;29926:12;29919:19;;29578:366;;;:::o;29950:419::-;30116:4;30154:2;30143:9;30139:18;30131:26;;30203:9;30197:4;30193:20;30189:1;30178:9;30174:17;30167:47;30231:131;30357:4;30231:131;:::i;:::-;30223:139;;29950:419;;;:::o;30375:228::-;30515:34;30511:1;30503:6;30499:14;30492:58;30584:11;30579:2;30571:6;30567:15;30560:36;30375:228;:::o;30609:366::-;30751:3;30772:67;30836:2;30831:3;30772:67;:::i;:::-;30765:74;;30848:93;30937:3;30848:93;:::i;:::-;30966:2;30961:3;30957:12;30950:19;;30609:366;;;:::o;30981:419::-;31147:4;31185:2;31174:9;31170:18;31162:26;;31234:9;31228:4;31224:20;31220:1;31209:9;31205:17;31198:47;31262:131;31388:4;31262:131;:::i;:::-;31254:139;;30981:419;;;:::o;31406:157::-;31546:9;31542:1;31534:6;31530:14;31523:33;31406:157;:::o;31569:365::-;31711:3;31732:66;31796:1;31791:3;31732:66;:::i;:::-;31725:73;;31807:93;31896:3;31807:93;:::i;:::-;31925:2;31920:3;31916:12;31909:19;;31569:365;;;:::o;31940:419::-;32106:4;32144:2;32133:9;32129:18;32121:26;;32193:9;32187:4;32183:20;32179:1;32168:9;32164:17;32157:47;32221:131;32347:4;32221:131;:::i;:::-;32213:139;;31940:419;;;:::o;32365:228::-;32505:34;32501:1;32493:6;32489:14;32482:58;32574:11;32569:2;32561:6;32557:15;32550:36;32365:228;:::o;32599:366::-;32741:3;32762:67;32826:2;32821:3;32762:67;:::i;:::-;32755:74;;32838:93;32927:3;32838:93;:::i;:::-;32956:2;32951:3;32947:12;32940:19;;32599:366;;;:::o;32971:419::-;33137:4;33175:2;33164:9;33160:18;33152:26;;33224:9;33218:4;33214:20;33210:1;33199:9;33195:17;33188:47;33252:131;33378:4;33252:131;:::i;:::-;33244:139;;32971:419;;;:::o;33396:225::-;33536:34;33532:1;33524:6;33520:14;33513:58;33605:8;33600:2;33592:6;33588:15;33581:33;33396:225;:::o;33627:366::-;33769:3;33790:67;33854:2;33849:3;33790:67;:::i;:::-;33783:74;;33866:93;33955:3;33866:93;:::i;:::-;33984:2;33979:3;33975:12;33968:19;;33627:366;;;:::o;33999:419::-;34165:4;34203:2;34192:9;34188:18;34180:26;;34252:9;34246:4;34242:20;34238:1;34227:9;34223:17;34216:47;34280:131;34406:4;34280:131;:::i;:::-;34272:139;;33999:419;;;:::o;34424:220::-;34564:34;34560:1;34552:6;34548:14;34541:58;34633:3;34628:2;34620:6;34616:15;34609:28;34424:220;:::o;34650:366::-;34792:3;34813:67;34877:2;34872:3;34813:67;:::i;:::-;34806:74;;34889:93;34978:3;34889:93;:::i;:::-;35007:2;35002:3;34998:12;34991:19;;34650:366;;;:::o;35022:419::-;35188:4;35226:2;35215:9;35211:18;35203:26;;35275:9;35269:4;35265:20;35261:1;35250:9;35246:17;35239:47;35303:131;35429:4;35303:131;:::i;:::-;35295:139;;35022:419;;;:::o;35447:305::-;35487:3;35506:20;35524:1;35506:20;:::i;:::-;35501:25;;35540:20;35558:1;35540:20;:::i;:::-;35535:25;;35694:1;35626:66;35622:74;35619:1;35616:81;35613:107;;;35700:18;;:::i;:::-;35613:107;35744:1;35741;35737:9;35730:16;;35447:305;;;;:::o;35758:332::-;35879:4;35917:2;35906:9;35902:18;35894:26;;35930:71;35998:1;35987:9;35983:17;35974:6;35930:71;:::i;:::-;36011:72;36079:2;36068:9;36064:18;36055:6;36011:72;:::i;:::-;35758:332;;;;;:::o;36096:227::-;36236:34;36232:1;36224:6;36220:14;36213:58;36305:10;36300:2;36292:6;36288:15;36281:35;36096:227;:::o;36329:366::-;36471:3;36492:67;36556:2;36551:3;36492:67;:::i;:::-;36485:74;;36568:93;36657:3;36568:93;:::i;:::-;36686:2;36681:3;36677:12;36670:19;;36329:366;;;:::o;36701:419::-;36867:4;36905:2;36894:9;36890:18;36882:26;;36954:9;36948:4;36944:20;36940:1;36929:9;36925:17;36918:47;36982:131;37108:4;36982:131;:::i;:::-;36974:139;;36701:419;;;:::o;37126:224::-;37266:34;37262:1;37254:6;37250:14;37243:58;37335:7;37330:2;37322:6;37318:15;37311:32;37126:224;:::o;37356:366::-;37498:3;37519:67;37583:2;37578:3;37519:67;:::i;:::-;37512:74;;37595:93;37684:3;37595:93;:::i;:::-;37713:2;37708:3;37704:12;37697:19;;37356:366;;;:::o;37728:419::-;37894:4;37932:2;37921:9;37917:18;37909:26;;37981:9;37975:4;37971:20;37967:1;37956:9;37952:17;37945:47;38009:131;38135:4;38009:131;:::i;:::-;38001:139;;37728:419;;;:::o;38153:229::-;38293:34;38289:1;38281:6;38277:14;38270:58;38362:12;38357:2;38349:6;38345:15;38338:37;38153:229;:::o;38388:366::-;38530:3;38551:67;38615:2;38610:3;38551:67;:::i;:::-;38544:74;;38627:93;38716:3;38627:93;:::i;:::-;38745:2;38740:3;38736:12;38729:19;;38388:366;;;:::o;38760:419::-;38926:4;38964:2;38953:9;38949:18;38941:26;;39013:9;39007:4;39003:20;38999:1;38988:9;38984:17;38977:47;39041:131;39167:4;39041:131;:::i;:::-;39033:139;;38760:419;;;:::o;39185:634::-;39406:4;39444:2;39433:9;39429:18;39421:26;;39493:9;39487:4;39483:20;39479:1;39468:9;39464:17;39457:47;39521:108;39624:4;39615:6;39521:108;:::i;:::-;39513:116;;39676:9;39670:4;39666:20;39661:2;39650:9;39646:18;39639:48;39704:108;39807:4;39798:6;39704:108;:::i;:::-;39696:116;;39185:634;;;;;:::o;39825:222::-;39965:34;39961:1;39953:6;39949:14;39942:58;40034:5;40029:2;40021:6;40017:15;40010:30;39825:222;:::o;40053:366::-;40195:3;40216:67;40280:2;40275:3;40216:67;:::i;:::-;40209:74;;40292:93;40381:3;40292:93;:::i;:::-;40410:2;40405:3;40401:12;40394:19;;40053:366;;;:::o;40425:419::-;40591:4;40629:2;40618:9;40614:18;40606:26;;40678:9;40672:4;40668:20;40664:1;40653:9;40649:17;40642:47;40706:131;40832:4;40706:131;:::i;:::-;40698:139;;40425:419;;;:::o;40850:223::-;40990:34;40986:1;40978:6;40974:14;40967:58;41059:6;41054:2;41046:6;41042:15;41035:31;40850:223;:::o;41079:366::-;41221:3;41242:67;41306:2;41301:3;41242:67;:::i;:::-;41235:74;;41318:93;41407:3;41318:93;:::i;:::-;41436:2;41431:3;41427:12;41420:19;;41079:366;;;:::o;41451:419::-;41617:4;41655:2;41644:9;41640:18;41632:26;;41704:9;41698:4;41694:20;41690:1;41679:9;41675:17;41668:47;41732:131;41858:4;41732:131;:::i;:::-;41724:139;;41451:419;;;:::o;41876:228::-;42016:34;42012:1;42004:6;42000:14;41993:58;42085:11;42080:2;42072:6;42068:15;42061:36;41876:228;:::o;42110:366::-;42252:3;42273:67;42337:2;42332:3;42273:67;:::i;:::-;42266:74;;42349:93;42438:3;42349:93;:::i;:::-;42467:2;42462:3;42458:12;42451:19;;42110:366;;;:::o;42482:419::-;42648:4;42686:2;42675:9;42671:18;42663:26;;42735:9;42729:4;42725:20;42721:1;42710:9;42706:17;42699:47;42763:131;42889:4;42763:131;:::i;:::-;42755:139;;42482:419;;;:::o;42907:98::-;42958:6;42992:5;42986:12;42976:22;;42907:98;;;:::o;43011:168::-;43094:11;43128:6;43123:3;43116:19;43168:4;43163:3;43159:14;43144:29;;43011:168;;;;:::o;43185:360::-;43271:3;43299:38;43331:5;43299:38;:::i;:::-;43353:70;43416:6;43411:3;43353:70;:::i;:::-;43346:77;;43432:52;43477:6;43472:3;43465:4;43458:5;43454:16;43432:52;:::i;:::-;43509:29;43531:6;43509:29;:::i;:::-;43504:3;43500:39;43493:46;;43275:270;43185:360;;;;:::o;43551:751::-;43774:4;43812:3;43801:9;43797:19;43789:27;;43826:71;43894:1;43883:9;43879:17;43870:6;43826:71;:::i;:::-;43907:72;43975:2;43964:9;43960:18;43951:6;43907:72;:::i;:::-;43989;44057:2;44046:9;44042:18;44033:6;43989:72;:::i;:::-;44071;44139:2;44128:9;44124:18;44115:6;44071:72;:::i;:::-;44191:9;44185:4;44181:20;44175:3;44164:9;44160:19;44153:49;44219:76;44290:4;44281:6;44219:76;:::i;:::-;44211:84;;43551:751;;;;;;;;:::o;44308:141::-;44364:5;44395:6;44389:13;44380:22;;44411:32;44437:5;44411:32;:::i;:::-;44308:141;;;;:::o;44455:349::-;44524:6;44573:2;44561:9;44552:7;44548:23;44544:32;44541:119;;;44579:79;;:::i;:::-;44541:119;44699:1;44724:63;44779:7;44770:6;44759:9;44755:22;44724:63;:::i;:::-;44714:73;;44670:127;44455:349;;;;:::o;44810:106::-;44854:8;44903:5;44898:3;44894:15;44873:36;;44810:106;;;:::o;44922:183::-;44957:3;44995:1;44977:16;44974:23;44971:128;;;45033:1;45030;45027;45012:23;45055:34;45086:1;45080:8;45055:34;:::i;:::-;45048:41;;44971:128;44922:183;:::o;45111:711::-;45150:3;45188:4;45170:16;45167:26;45164:39;;;45196:5;;45164:39;45225:20;;:::i;:::-;45300:1;45282:16;45278:24;45275:1;45269:4;45254:49;45333:4;45327:11;45432:16;45425:4;45417:6;45413:17;45410:39;45377:18;45369:6;45366:30;45350:113;45347:146;;;45478:5;;;;45347:146;45524:6;45518:4;45514:17;45560:3;45554:10;45587:18;45579:6;45576:30;45573:43;;;45609:5;;;;;;45573:43;45657:6;45650:4;45645:3;45641:14;45637:27;45716:1;45698:16;45694:24;45688:4;45684:35;45679:3;45676:44;45673:57;;;45723:5;;;;;;;45673:57;45740;45788:6;45782:4;45778:17;45770:6;45766:30;45760:4;45740:57;:::i;:::-;45813:3;45806:10;;45154:668;;;;;45111:711;;:::o;45828:239::-;45968:34;45964:1;45956:6;45952:14;45945:58;46037:22;46032:2;46024:6;46020:15;46013:47;45828:239;:::o;46073:366::-;46215:3;46236:67;46300:2;46295:3;46236:67;:::i;:::-;46229:74;;46312:93;46401:3;46312:93;:::i;:::-;46430:2;46425:3;46421:12;46414:19;;46073:366;;;:::o;46445:419::-;46611:4;46649:2;46638:9;46634:18;46626:26;;46698:9;46692:4;46688:20;46684:1;46673:9;46669:17;46662:47;46726:131;46852:4;46726:131;:::i;:::-;46718:139;;46445:419;;;:::o;46870:227::-;47010:34;47006:1;46998:6;46994:14;46987:58;47079:10;47074:2;47066:6;47062:15;47055:35;46870:227;:::o;47103:366::-;47245:3;47266:67;47330:2;47325:3;47266:67;:::i;:::-;47259:74;;47342:93;47431:3;47342:93;:::i;:::-;47460:2;47455:3;47451:12;47444:19;;47103:366;;;:::o;47475:419::-;47641:4;47679:2;47668:9;47664:18;47656:26;;47728:9;47722:4;47718:20;47714:1;47703:9;47699:17;47692:47;47756:131;47882:4;47756:131;:::i;:::-;47748:139;;47475:419;;;:::o;47900:1053::-;48223:4;48261:3;48250:9;48246:19;48238:27;;48275:71;48343:1;48332:9;48328:17;48319:6;48275:71;:::i;:::-;48356:72;48424:2;48413:9;48409:18;48400:6;48356:72;:::i;:::-;48475:9;48469:4;48465:20;48460:2;48449:9;48445:18;48438:48;48503:108;48606:4;48597:6;48503:108;:::i;:::-;48495:116;;48658:9;48652:4;48648:20;48643:2;48632:9;48628:18;48621:48;48686:108;48789:4;48780:6;48686:108;:::i;:::-;48678:116;;48842:9;48836:4;48832:20;48826:3;48815:9;48811:19;48804:49;48870:76;48941:4;48932:6;48870:76;:::i;:::-;48862:84;;47900:1053;;;;;;;;:::o

Swarm Source

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