ETH Price: $3,428.43 (+3.88%)

Token

SODA Cans - Society of Degenerate Apes ()
 

Overview

Max Total Supply

0

Holders

1,375

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x4e618673caa5ae4cf9c0c91d403fbdb26c868bcb
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Welcome to the home of SODA Cans - Society of Degenerate Apes on OpenSea. Discover the best items in this collection.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Cans

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.6.8 https://hardhat.org

// File contracts/Functional.sol

pragma solidity ^0.8.0;


abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt to reenter a locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}


// File contracts/interfaces/IERC165.sol

// OpenZeppelin Contracts v4.4.0 (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 contracts/interfaces/IERC1155.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must 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 contracts/interfaces/IERC1155Receiver.sol

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

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


// File contracts/interfaces/IERC1155MetadataURI.sol

// OpenZeppelin Contracts v4.4.0 (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 contracts/utils/Address.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.0 (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 contracts/utils/ERC165.sol

// OpenZeppelin Contracts v4.4.0 (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 contracts/ERC1155.sol

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

pragma solidity ^0.8.0;






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

    // Mapping from token ID to account balances
    mapping(address => uint32[7]) private _balances;
    uint[] private tokens;

    // 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_);
        tokens = new uint[](7);
        for(uint i = 0; i < 7; i++) {
            tokens[i] = i;
        }
    }

    /**
     * @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[account][id];
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOfAccount(address account) public view virtual returns (uint32[7] memory) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[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}.
d burner addres     */
    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[from][id];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[from][id] = uint32(fromBalance - amount);
        }
        _balances[to][id] += uint32(amount);

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

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

    function _safeSeedWallets(
        address[] calldata to,
        uint256 amount
    ) internal {
        uint32 amt = uint32(amount);
        uint32 blasts = amt/6;
        for(uint j = 0; j < to.length; j++) {
            address t = to[j];
            _balances[t][0] = amt;
            _balances[t][1] = amt;
            _balances[t][2] = amt;
            _balances[t][3] = amt;
            _balances[t][4] = amt;
            _balances[t][5] = amt;
            _balances[t][6] = blasts;
        }
    }

    /**
     * @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[from][id];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[from][id] = uint32(fromBalance - amount);
            }
            _balances[to][id] += uint32(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 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 amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(7 == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

    /**
     * @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 amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(7 == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint256 i = 0; i < amounts.length; i++) {
            _balances[from][i] -= uint32(amounts[i]);
        }

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

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

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

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

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

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

        return array;
    }
}


// File contracts/utils/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 contracts/Cans.sol

// contracts/Cans.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;



contract SODAContract {
    function ownerOf(uint256 tokenId) public view virtual returns (address) {
    }
}

contract Cans is ERC1155, Ownable, Functional {
    uint public constant CHERRY = 0;
    uint public constant ORANGE = 1;
    uint public constant LEMON = 2;
    uint public constant SOUR_APPLE = 3;
    uint public constant BLUE_RASPBERRY = 4;
    uint public constant GRAPE = 5;
    uint public constant RAINBOW_BLAST = 6;
    uint public constant YIELD_PERIOD = 1 weeks;
    uint public constant MAX_YIELD = 333;
    uint public START_TIME;
    uint public END_TIME;
    uint8[9998] private amountClaimed;
    bool public CLAIM_ENABLED = false;
    SODAContract soda;
    address public SODA_CONTRACT;
    string private baseURI;

    constructor(address sodaContract, string memory _baseURI) public ERC1155(_baseURI) {
        baseURI = _baseURI;
        uint[] memory amts = new uint[](7);
        amts[0] = 20000;
        amts[1] = 20000;
        amts[2] = 20000;
        amts[3] = 20000;
        amts[4] = 20000;
        amts[5] = 20000;
        amts[6] = 3000;
        _mintBatch(msg.sender, amts, "");
        soda = SODAContract(sodaContract);
        SODA_CONTRACT = sodaContract;
        START_TIME = block.timestamp - YIELD_PERIOD;
        END_TIME = START_TIME + (YIELD_PERIOD * MAX_YIELD);
    }

    function cansClaimed(uint tokenId) external view returns(uint) {
        return amountClaimed[ tokenId ];
    }

    function cansUnclaimed(uint tokenId) external view returns(uint) {
        return currentPayout() - amountClaimed[tokenId];
    }

    function unclaimedTotal(uint[] memory tokenIds) external view returns(uint) {
        uint totalClaimed = 0;

        for(uint i = 0; i < tokenIds.length; i++) {
            totalClaimed += amountClaimed[tokenIds[i]];
        }

        return (currentPayout()*tokenIds.length) - totalClaimed;
    }

    function claim(uint[] calldata tokenIds, uint[] calldata amounts) external reentryLock {
        require(CLAIM_ENABLED, "Cans: claiming is disabled");
        require(amounts.length == 6, "Cans: Amount of each fruit flavor not specified.");
        uint payout = currentPayout();
        uint nTokens = tokenIds.length;
        uint totalAvailable = payout * nTokens;

        for(uint i = 0; i < nTokens; i++) {
            uint id = tokenIds[i];
            require(soda.ownerOf(id) == msg.sender, "Cans: Sender does not own this SODA.");
            totalAvailable -= uint(amountClaimed[id]);
            amountClaimed[id] = uint8(payout);
        }
        delete payout;

        uint claimTotal = amounts[0] + 
            amounts[1] + 
            amounts[2] + 
            amounts[3] + 
            amounts[4] + 
            amounts[5];
        uint remainder = totalAvailable - claimTotal;
        delete totalAvailable;

        require(remainder >= 0, "Cans: Attempted to claim wrong amount of Cans.");

        uint[] memory amts = new uint[](7);
        amts[0] = amounts[0];
        amts[1] = amounts[1];
        amts[2] = amounts[2];
        amts[3] = amounts[3];
        amts[4] = amounts[4];
        amts[5] = amounts[5];
        amts[6] = (claimTotal / 6);
        delete claimTotal;

        _mintBatch(msg.sender, amts, "");
        delete amts;

        // Reimburse Cans unclaimed, if necessary
        for(uint i = 0; i < remainder; i++) {
            amountClaimed[tokenIds[i%nTokens]]--;
        }
    }

    function burn(uint[] calldata amounts) external {
        _burnBatch(msg.sender, amounts);
    }

    function setTokenURI(string memory newURI) external onlyOwner {
        _setURI(newURI);
    }

    function seedWallets(address[] calldata to, uint amount) external onlyOwner {
        require(!CLAIM_ENABLED);
        _safeSeedWallets(to, amount);
    }

    function enableClaiming() external onlyOwner {
        CLAIM_ENABLED = true;
    }

    function currentPayout() internal view returns(uint) {
        uint start = block.timestamp;
        return ((start < END_TIME ? start : END_TIME)-START_TIME) / YIELD_PERIOD;
    }

    function uri(uint256 id) public view override returns (string memory)
    {
        require(id <= 6, "URI requested for invalid serum type");
        return string(abi.encodePacked(baseURI, toString(id)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"sodaContract","type":"address"},{"internalType":"string","name":"_baseURI","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":[],"name":"BLUE_RASPBERRY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CHERRY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIM_ENABLED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"END_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GRAPE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LEMON","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_YIELD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORANGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RAINBOW_BLAST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SODA_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SOUR_APPLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YIELD_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfAccount","outputs":[{"internalType":"uint32[7]","name":"","type":"uint32[7]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cansClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cansUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableClaiming","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"seedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setTokenURI","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":"tokenIds","type":"uint256[]"}],"name":"unclaimedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526004805460ff60a01b19169055610140805460ff191690553480156200002957600080fd5b5060405162003bb638038062003bb68339810160408190526200004c9162000933565b806200005881620002b9565b6040805160078082526101008201909252906020820160e080368337505081516200008b926001925060200190620007dc565b5060005b6007811015620000d1578060018281548110620000b057620000b0620009f8565b60009182526020909120015580620000c88162000a24565b9150506200008f565b50620000df905033620002d2565b8051620000f5906101429060208401906200082c565b5060408051600780825261010082019092526000916020820160e080368337019050509050614e2081600081518110620001335762000133620009f8565b602002602001018181525050614e2081600181518110620001585762000158620009f8565b602002602001018181525050614e20816002815181106200017d576200017d620009f8565b602002602001018181525050614e2081600381518110620001a257620001a2620009f8565b602002602001018181525050614e2081600481518110620001c757620001c7620009f8565b602002602001018181525050614e2081600581518110620001ec57620001ec620009f8565b602002602001018181525050610bb881600681518110620002115762000211620009f8565b6020026020010181815250506200023f3382604051806020016040528060008152506200032460201b60201c565b6101408054610100600160a81b0319166101006001600160a01b0386169081029190911790915561014180546001600160a01b03191690911790556200028962093a804262000a42565b6005556200029d61014d62093a8062000a5c565b600554620002ac919062000a7e565b6006555062000d27915050565b8051620002ce9060039060208401906200082c565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166200038a5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b8151600714620003ee5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840162000381565b60003390506200045c8160008660018054806020026020016040519081016040528092919081815260200182805480156200044957602002820191906000526020600020905b81548152602001906001019080831162000434575b50505050508787620005e860201b60201c565b60005b83518110156200051d578381815181106200047e576200047e620009f8565b6020026020010151600080876001600160a01b03166001600160a01b031681526020019081526020016000208260078110620004be57620004be620009f8565b600891828204019190066004028282829054906101000a900463ffffffff16620004e9919062000a99565b92506101000a81548163ffffffff021916908363ffffffff1602179055508080620005149062000a24565b9150506200045f565b50836001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb6001876040516200057192919062000b01565b60405180910390a4620005e2816000866001805480602002602001604051908101604052809291908181526020018280548015620005cf57602002820191906000526020600020905b815481526020019060010190808311620005ba575b50505050508787620005f060201b60201c565b50505050565b505050505050565b6200060f846001600160a01b0316620007d660201b620011cc1760201c565b15620005e85760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906200064b908990899088908890889060040162000b92565b602060405180830381600087803b1580156200066657600080fd5b505af192505050801562000699575060408051601f3d908101601f19168201909252620006969181019062000bf6565b60015b6200075a57620006a862000c29565b806308c379a01415620006e95750620006c062000c46565b80620006cd5750620006eb565b8060405162461bcd60e51b815260040162000381919062000cd5565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840162000381565b6001600160e01b0319811663bc197c8160e01b14620007cd5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b606482015260840162000381565b50505050505050565b3b151590565b8280548282559060005260206000209081019282156200081a579160200282015b828111156200081a578251825591602001919060010190620007fd565b5062000828929150620008a8565b5090565b8280546200083a9062000cea565b90600052602060002090601f0160209004810192826200085e57600085556200081a565b82601f106200087957805160ff19168380011785556200081a565b828001600101855582156200081a57918201828111156200081a578251825591602001919060010190620007fd565b5b80821115620008285760008155600101620008a9565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715620008fd57620008fd620008bf565b6040525050565b60005b838110156200092157818101518382015260200162000907565b83811115620005e25750506000910152565b600080604083850312156200094757600080fd5b82516001600160a01b03811681146200095f57600080fd5b60208401519092506001600160401b03808211156200097d57600080fd5b818501915085601f8301126200099257600080fd5b815181811115620009a757620009a7620008bf565b6040519150620009c2601f8201601f191660200183620008d5565b808252866020828501011115620009d857600080fd5b620009eb81602084016020860162000904565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141562000a3b5762000a3b62000a0e565b5060010190565b60008282101562000a575762000a5762000a0e565b500390565b600081600019048311821515161562000a795762000a7962000a0e565b500290565b6000821982111562000a945762000a9462000a0e565b500190565b600063ffffffff80831681851680830382111562000abb5762000abb62000a0e565b01949350505050565b600081518084526020808501945080840160005b8381101562000af65781518752958201959082019060010162000ad8565b509495945050505050565b6000604082016040835280855480835260608501915086600052602092508260002060005b8281101562000b445781548452928401926001918201910162000b26565b5050508381038285015262000b5a818662000ac4565b9695505050505050565b6000815180845262000b7e81602086016020860162000904565b601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009062000bc09083018662000ac4565b828103606084015262000bd4818662000ac4565b9050828103608084015262000bea818562000b64565b98975050505050505050565b60006020828403121562000c0957600080fd5b81516001600160e01b03198116811462000c2257600080fd5b9392505050565b600060033d111562000c435760046000803e5060005160e01c5b90565b600060443d101562000c555790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171562000c8557505050505090565b828501915081518181111562000c9e5750505050505090565b843d870101602082850101111562000cb95750505050505090565b62000cca60208286010187620008d5565b509095945050505050565b60208152600062000c22602083018462000b64565b600181811c9082168062000cff57607f821691505b6020821081141562000d2157634e487b7160e01b600052602260045260246000fd5b50919050565b612e7f8062000d376000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638da5cb5b1161011a578063ddaa26ad116100ad578063e985e9c51161007c578063e985e9c5146103f7578063edf1948614610433578063f242432a1461043b578063f2fde38b1461044e578063f44f54f11461046157600080fd5b8063ddaa26ad146103ca578063e0df5b6f146103d3578063e3c8f127146103e6578063e53a8a5f146103ef57600080fd5b8063a77e2570116100e9578063a77e25701461037c578063aa133b5114610384578063b80f55c914610397578063c237d392146103aa57600080fd5b80638da5cb5b1461033d5780639180e3781461034e578063a22cb46514610356578063a65db4eb1461036957600080fd5b806337ba682d1161019257806360edb3f81161016157806360edb3f8146102ee5780636caa42cb146102f6578063715018a6146103095780637427e78e1461031157600080fd5b806337ba682d146102aa5780634a9817d6146102b35780634acd9093146102bb5780634e1273f4146102ce57600080fd5b80631397e91c116101ce5780631397e91c146102705780632081a88c1461028557806323fb40851461028d5780632eb2c2d61461029757600080fd5b8062fdd58e146101ff57806301ffc9a7146102255780630e89341c146102485780631351450714610268575b600080fd5b61021261020d366004612163565b61046f565b6040519081526020015b60405180910390f35b6102386102333660046121a5565b6104ed565b604051901515815260200161021c565b61025b6102563660046121c2565b61053f565b60405161021c9190612233565b610212600281565b61028361027e366004612291565b6105d1565b005b610283610c09565b61021262093a8081565b6102836102a536600461244f565b610c43565b61021260065481565b610212600481565b6102836102c93660046124fc565b610cda565b6102e16102dc366004612547565b610d25565b60405161021c919061264e565b610212600381565b6102126103043660046121c2565b610e4e565b610283610e80565b61014154610325906001600160a01b031681565b6040516001600160a01b03909116815260200161021c565b6004546001600160a01b0316610325565b610212600681565b610283610364366004612661565b610eb6565b6102126103773660046121c2565b610ec5565b610212600081565b61021261039236600461269f565b610f03565b6102836103a53660046126d3565b610f98565b6103bd6103b8366004612714565b610fd5565b60405161021c9190612731565b61021260055481565b6102836103e1366004612768565b611077565b61021261014d81565b610212600581565b6102386104053660046127b0565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b610212600181565b6102836104493660046127de565b6110ad565b61028361045c366004612714565b611134565b610140546102389060ff1681565b60006001600160a01b0383166104a05760405162461bcd60e51b815260040161049790612846565b60405180910390fd5b6001600160a01b038316600090815260208190526040902082600781106104c9576104c9612891565b60088104919091015460079091166004026101000a900463ffffffff169392505050565b60006001600160e01b03198216636cdb3d1360e11b148061051e57506001600160e01b031982166303a24d0760e21b145b8061053957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600682111561059e5760405162461bcd60e51b8152602060048201526024808201527f5552492072657175657374656420666f7220696e76616c696420736572756d206044820152637479706560e01b6064820152608401610497565b6101426105aa836111d2565b6040516020016105bb9291906128fe565b6040516020818303038152906040529050919050565b600454600160a01b900460ff16156106375760405162461bcd60e51b8152602060048201526024808201527f617474656d707420746f207265656e7465722061206c6f636b65642066756e636044820152633a34b7b760e11b6064820152608401610497565b6004805460ff60a01b1916600160a01b1790556101405460ff1661069d5760405162461bcd60e51b815260206004820152601a60248201527f43616e733a20636c61696d696e672069732064697361626c65640000000000006044820152606401610497565b600681146107065760405162461bcd60e51b815260206004820152603060248201527f43616e733a20416d6f756e74206f66206561636820667275697420666c61766f60448201526f39103737ba1039b832b1b4b334b2b21760811b6064820152608401610497565b60006107106112d7565b905083600061071f82846129bb565b905060005b828110156108b057600088888381811061074057610740612891565b610140546040516331a9108f60e11b81526020929092029390930135600482018190529350339261010090046001600160a01b03169150636352211e9060240160206040518083038186803b15801561079857600080fd5b505afa1580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d091906129da565b6001600160a01b0316146108325760405162461bcd60e51b8152602060048201526024808201527f43616e733a2053656e64657220646f6573206e6f74206f776e2074686973205360448201526327a2209760e11b6064820152608401610497565b60078161270e811061084657610846612891565b60208104919091015461086591601f166101000a900460ff16846129f7565b92508460078261270e811061087c5761087c612891565b602091828204019190066101000a81548160ff021916908360ff1602179055505080806108a890612a0e565b915050610724565b50600092506000858560058181106108ca576108ca612891565b90506020020135868660048181106108e4576108e4612891565b90506020020135878760038181106108fe576108fe612891565b905060200201358888600281811061091857610918612891565b905060200201358989600181811061093257610932612891565b905060200201358a8a600081811061094c5761094c612891565b9050602002013561095d9190612a29565b6109679190612a29565b6109719190612a29565b61097b9190612a29565b6109859190612a29565b9050600061099382846129f7565b6040805160078082526101008201909252600095509192508491906020820160e080368337019050509050878760008181106109d1576109d1612891565b90506020020135816000815181106109eb576109eb612891565b60200260200101818152505087876001818110610a0a57610a0a612891565b9050602002013581600181518110610a2457610a24612891565b60200260200101818152505087876002818110610a4357610a43612891565b9050602002013581600281518110610a5d57610a5d612891565b60200260200101818152505087876003818110610a7c57610a7c612891565b9050602002013581600381518110610a9657610a96612891565b60200260200101818152505087876004818110610ab557610ab5612891565b9050602002013581600481518110610acf57610acf612891565b60200260200101818152505087876005818110610aee57610aee612891565b9050602002013581600581518110610b0857610b08612891565b6020908102919091010152610b1e600684612a57565b81600681518110610b3157610b31612891565b60200260200101818152505060009250610b5b338260405180602001604052806000815250611311565b50606060005b82811015610bef5760078b8b610b778985612a6b565b818110610b8657610b86612891565b9050602002013561270e8110610b9e57610b9e612891565b6020918282040191900681819054906101000a900460ff1680929190610bc390612a7f565b91906101000a81548160ff021916908360ff160217905550508080610be790612a0e565b915050610b61565b50506004805460ff60a01b19169055505050505050505050565b6004546001600160a01b03163314610c335760405162461bcd60e51b815260040161049790612a9c565b610140805460ff19166001179055565b6001600160a01b038516331480610c5f5750610c5f8533610405565b610cc65760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610497565b610cd38585858585611569565b5050505050565b6004546001600160a01b03163314610d045760405162461bcd60e51b815260040161049790612a9c565b6101405460ff1615610d1557600080fd5b610d208383836117c9565b505050565b60608151835114610d8a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610497565b600083516001600160401b03811115610da557610da56122fc565b604051908082528060200260200182016040528015610dce578160200160208202803683370190505b50905060005b8451811015610e4657610e19858281518110610df257610df2612891565b6020026020010151858381518110610e0c57610e0c612891565b602002602001015161046f565b828281518110610e2b57610e2b612891565b6020908102919091010152610e3f81612a0e565b9050610dd4565b509392505050565b600060078261270e8110610e6457610e64612891565b602081049091015460ff601f9092166101000a90041692915050565b6004546001600160a01b03163314610eaa5760405162461bcd60e51b815260040161049790612a9c565b610eb460006118d2565b565b610ec1338383611924565b5050565b600060078261270e8110610edb57610edb612891565b602081049091015460ff601f9092166101000a900416610ef96112d7565b61053991906129f7565b600080805b8351811015610f71576007848281518110610f2557610f25612891565b602002602001015161270e8110610f3e57610f3e612891565b602081049190910154610f5d91601f166101000a900460ff1683612a29565b915080610f6981612a0e565b915050610f08565b50808351610f7d6112d7565b610f8791906129bb565b610f9191906129f7565b9392505050565b610ec133838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611a0592505050565b610fdd612097565b6001600160a01b0382166110035760405162461bcd60e51b815260040161049790612846565b6001600160a01b038216600090815260208190526040808220815160e08101928390529290916007918390855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611030575094979650505050505050565b6004546001600160a01b031633146110a15760405162461bcd60e51b815260040161049790612a9c565b6110aa81611c0e565b50565b6001600160a01b0385163314806110c957506110c98533610405565b6111275760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610497565b610cd38585858585611c21565b6004546001600160a01b0316331461115e5760405162461bcd60e51b815260040161049790612a9c565b6001600160a01b0381166111c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610497565b6110aa816118d2565b3b151590565b6060816111f65750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611220578061120a81612a0e565b91506112199050600a83612a57565b91506111fa565b6000816001600160401b0381111561123a5761123a6122fc565b6040519080825280601f01601f191660200182016040528015611264576020820181803683370190505b5090505b84156112cf576112796001836129f7565b9150611286600a86612a6b565b611291906030612a29565b60f81b8183815181106112a6576112a6612891565b60200101906001600160f81b031916908160001a9053506112c8600a86612a57565b9450611268565b949350505050565b60008042905062093a8060055460065483106112f5576006546112f7565b825b61130191906129f7565b61130b9190612a57565b91505090565b6001600160a01b0383166113715760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610497565b81516007146113925760405162461bcd60e51b815260040161049790612ad1565b60003390506113f58160008660018054806020026020016040519081016040528092919081815260200182805480156113ea57602002820191906000526020600020905b8154815260200190600101908083116113d6575b505050505050505050565b60005b83518110156114aa5783818151811061141357611413612891565b6020026020010151600080876001600160a01b03166001600160a01b03168152602001908152602001600020826007811061145057611450612891565b600891828204019190066004028282829054906101000a900463ffffffff166114799190612b19565b92506101000a81548163ffffffff021916908363ffffffff16021790555080806114a290612a0e565b9150506113f8565b50836001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb6001876040516114fc929190612b41565b60405180910390a461156381600086600180548060200260200160405190810160405280929190818152602001828054801561155757602002820191906000526020600020905b815481526020019060010190808311611543575b50505050508787611e17565b50505050565b815183511461158a5760405162461bcd60e51b815260040161049790612ad1565b6001600160a01b0384166115b05760405162461bcd60e51b815260040161049790612ba0565b3360005b845181101561175b5760008582815181106115d1576115d1612891565b6020026020010151905060008583815181106115ef576115ef612891565b6020026020010151905060008060008b6001600160a01b03166001600160a01b03168152602001908152602001600020836007811061163057611630612891565b600891828204019190066004029054906101000a900463ffffffff1663ffffffff169050818110156116745760405162461bcd60e51b815260040161049790612be5565b6001600160a01b038a1660009081526020819052604090208282039084600781106116a1576116a1612891565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550816000808b6001600160a01b03166001600160a01b03168152602001908152602001600020846007811061170057611700612891565b600891828204019190066004028282829054906101000a900463ffffffff166117299190612b19565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050508061175490612a0e565b90506115b4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117ab929190612c2f565b60405180910390a46117c1818787878787611e17565b505050505050565b8060006117d7600683612c54565b905060005b848110156117c15760008686838181106117f8576117f8612891565b905060200201602081019061180d9190612714565b6001600160a01b03166000908152602081905260409020805464010000000063ffffffff87811691820267ffffffffffffffff199093168217929092176fffffffffffffffff0000000000000000191668010000000000000000820263ffffffff60601b191617600160601b82021767ffffffffffffffff60801b1916600160801b820263ffffffff60a01b191617600160a01b919091021763ffffffff60c01b1916600160c01b9186169190910217905550806118ca81612a0e565b9150506117dc565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156119985760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610497565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610497565b8051600714611a885760405162461bcd60e51b815260040161049790612ad1565b6000339050611afa818460006001805480602002602001604051908101604052809291908181526020018280548015611ae057602002820191906000526020600020905b815481526020019060010190808311611acc575b505060408051602081019091526000905250505050505050565b60005b8251811015611baf57828181518110611b1857611b18612891565b6020026020010151600080866001600160a01b03166001600160a01b031681526020019081526020016000208260078110611b5557611b55612891565b600891828204019190066004028282829054906101000a900463ffffffff16611b7e9190612c77565b92506101000a81548163ffffffff021916908363ffffffff1602179055508080611ba790612a0e565b915050611afd565b5060006001600160a01b0316836001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb600186604051611c01929190612b41565b60405180910390a4505050565b8051610ec19060039060208401906120b5565b6001600160a01b038416611c475760405162461bcd60e51b815260040161049790612ba0565b33611c60818787611c5788611f82565b610cd388611f82565b6001600160a01b03861660009081526020819052604081208560078110611c8957611c89612891565b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16905083811015611ccd5760405162461bcd60e51b815260040161049790612be5565b6001600160a01b0387166000908152602081905260409020848203908660078110611cfa57611cfa612891565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555083600080886001600160a01b03166001600160a01b031681526020019081526020016000208660078110611d5957611d59612891565b600891828204019190066004028282829054906101000a900463ffffffff16611d829190612b19565b92506101000a81548163ffffffff021916908363ffffffff160217905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611df8929190918252602082015260400190565b60405180910390a4611e0e828888888888611fcd565b50505050505050565b6001600160a01b0384163b156117c15760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611e5b9089908990889088908890600401612c9c565b602060405180830381600087803b158015611e7557600080fd5b505af1925050508015611ea5575060408051601f3d908101601f19168201909252611ea291810190612cfa565b60015b611f5257611eb1612d17565b806308c379a01415611eeb5750611ec6612d33565b80611ed15750611eed565b8060405162461bcd60e51b81526004016104979190612233565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610497565b6001600160e01b0319811663bc197c8160e01b14611e0e5760405162461bcd60e51b815260040161049790612dbc565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611fbc57611fbc612891565b602090810291909101015292915050565b6001600160a01b0384163b156117c15760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906120119089908990889088908890600401612e04565b602060405180830381600087803b15801561202b57600080fd5b505af192505050801561205b575060408051601f3d908101601f1916820190925261205891810190612cfa565b60015b61206757611eb1612d17565b6001600160e01b0319811663f23a6e6160e01b14611e0e5760405162461bcd60e51b815260040161049790612dbc565b6040518060e001604052806007906020820280368337509192915050565b8280546120c1906128a7565b90600052602060002090601f0160209004810192826120e35760008555612129565b82601f106120fc57805160ff1916838001178555612129565b82800160010185558215612129579182015b8281111561212957825182559160200191906001019061210e565b50612135929150612139565b5090565b5b80821115612135576000815560010161213a565b6001600160a01b03811681146110aa57600080fd5b6000806040838503121561217657600080fd5b82356121818161214e565b946020939093013593505050565b6001600160e01b0319811681146110aa57600080fd5b6000602082840312156121b757600080fd5b8135610f918161218f565b6000602082840312156121d457600080fd5b5035919050565b60005b838110156121f65781810151838201526020016121de565b838111156115635750506000910152565b6000815180845261221f8160208601602086016121db565b601f01601f19169290920160200192915050565b602081526000610f916020830184612207565b60008083601f84011261225857600080fd5b5081356001600160401b0381111561226f57600080fd5b6020830191508360208260051b850101111561228a57600080fd5b9250929050565b600080600080604085870312156122a757600080fd5b84356001600160401b03808211156122be57600080fd5b6122ca88838901612246565b909650945060208701359150808211156122e357600080fd5b506122f087828801612246565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715612337576123376122fc565b6040525050565b60006001600160401b03821115612357576123576122fc565b5060051b60200190565b600082601f83011261237257600080fd5b8135602061237f8261233e565b60405161238c8282612312565b83815260059390931b85018201928281019150868411156123ac57600080fd5b8286015b848110156123c757803583529183019183016123b0565b509695505050505050565b60006001600160401b038311156123eb576123eb6122fc565b604051612402601f8501601f191660200182612312565b80915083815284848401111561241757600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261244057600080fd5b610f91838335602085016123d2565b600080600080600060a0868803121561246757600080fd5b85356124728161214e565b945060208601356124828161214e565b935060408601356001600160401b038082111561249e57600080fd5b6124aa89838a01612361565b945060608801359150808211156124c057600080fd5b6124cc89838a01612361565b935060808801359150808211156124e257600080fd5b506124ef8882890161242f565b9150509295509295909350565b60008060006040848603121561251157600080fd5b83356001600160401b0381111561252757600080fd5b61253386828701612246565b909790965060209590950135949350505050565b6000806040838503121561255a57600080fd5b82356001600160401b038082111561257157600080fd5b818501915085601f83011261258557600080fd5b813560206125928261233e565b60405161259f8282612312565b83815260059390931b85018201928281019150898411156125bf57600080fd5b948201945b838610156125e65785356125d78161214e565b825294820194908201906125c4565b965050860135925050808211156125fc57600080fd5b5061260985828601612361565b9150509250929050565b600081518084526020808501945080840160005b8381101561264357815187529582019590820190600101612627565b509495945050505050565b602081526000610f916020830184612613565b6000806040838503121561267457600080fd5b823561267f8161214e565b91506020830135801515811461269457600080fd5b809150509250929050565b6000602082840312156126b157600080fd5b81356001600160401b038111156126c757600080fd5b6112cf84828501612361565b600080602083850312156126e657600080fd5b82356001600160401b038111156126fc57600080fd5b61270885828601612246565b90969095509350505050565b60006020828403121561272657600080fd5b8135610f918161214e565b60e08101818360005b600781101561275f57815163ffffffff1683526020928301929091019060010161273a565b50505092915050565b60006020828403121561277a57600080fd5b81356001600160401b0381111561279057600080fd5b8201601f810184136127a157600080fd5b6112cf848235602084016123d2565b600080604083850312156127c357600080fd5b82356127ce8161214e565b915060208301356126948161214e565b600080600080600060a086880312156127f657600080fd5b85356128018161214e565b945060208601356128118161214e565b9350604086013592506060860135915060808601356001600160401b0381111561283a57600080fd5b6124ef8882890161242f565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806128bb57607f821691505b602082108114156128dc57634e487b7160e01b600052602260045260246000fd5b50919050565b600081516128f48185602086016121db565b9290920192915050565b600080845481600182811c91508083168061291a57607f831692505b602080841082141561293a57634e487b7160e01b86526022600452602486fd5b81801561294e576001811461295f5761298c565b60ff1986168952848901965061298c565b60008b81526020902060005b868110156129845781548b82015290850190830161296b565b505084890196505b50505050505061299c81856128e2565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129d5576129d56129a5565b500290565b6000602082840312156129ec57600080fd5b8151610f918161214e565b600082821015612a0957612a096129a5565b500390565b6000600019821415612a2257612a226129a5565b5060010190565b60008219821115612a3c57612a3c6129a5565b500190565b634e487b7160e01b600052601260045260246000fd5b600082612a6657612a66612a41565b500490565b600082612a7a57612a7a612a41565b500690565b600060ff821680612a9257612a926129a5565b6000190192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600063ffffffff808316818516808303821115612b3857612b386129a5565b01949350505050565b6000604082016040835280855480835260608501915086600052602092508260002060005b82811015612b8257815484529284019260019182019101612b66565b50505083810382850152612b968186612613565b9695505050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612c426040830185612613565b828103602084015261299c8185612613565b600063ffffffff80841680612c6b57612c6b612a41565b92169190910492915050565b600063ffffffff83811690831681811015612c9457612c946129a5565b039392505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612cc890830186612613565b8281036060840152612cda8186612613565b90508281036080840152612cee8185612207565b98975050505050505050565b600060208284031215612d0c57600080fd5b8151610f918161218f565b600060033d1115612d305760046000803e5060005160e01c5b90565b600060443d1015612d415790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612d7057505050505090565b8285019150815181811115612d885750505050505090565b843d8701016020828501011115612da25750505050505090565b612db160208286010187612312565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612e3e90830184612207565b97965050505050505056fea2646970667358221220f11f276fcd27d9e8111c12785005e87c17a386af8c3e53cc42d7812fda6e7bae64736f6c63430008090033000000000000000000000000b184b9414e7d7c436b7097ed2c774bb56fae392f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5375706f6661377a7a526f4659456a71364b3635727579424d3977637a32355a4e416476694543503138444b2f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638da5cb5b1161011a578063ddaa26ad116100ad578063e985e9c51161007c578063e985e9c5146103f7578063edf1948614610433578063f242432a1461043b578063f2fde38b1461044e578063f44f54f11461046157600080fd5b8063ddaa26ad146103ca578063e0df5b6f146103d3578063e3c8f127146103e6578063e53a8a5f146103ef57600080fd5b8063a77e2570116100e9578063a77e25701461037c578063aa133b5114610384578063b80f55c914610397578063c237d392146103aa57600080fd5b80638da5cb5b1461033d5780639180e3781461034e578063a22cb46514610356578063a65db4eb1461036957600080fd5b806337ba682d1161019257806360edb3f81161016157806360edb3f8146102ee5780636caa42cb146102f6578063715018a6146103095780637427e78e1461031157600080fd5b806337ba682d146102aa5780634a9817d6146102b35780634acd9093146102bb5780634e1273f4146102ce57600080fd5b80631397e91c116101ce5780631397e91c146102705780632081a88c1461028557806323fb40851461028d5780632eb2c2d61461029757600080fd5b8062fdd58e146101ff57806301ffc9a7146102255780630e89341c146102485780631351450714610268575b600080fd5b61021261020d366004612163565b61046f565b6040519081526020015b60405180910390f35b6102386102333660046121a5565b6104ed565b604051901515815260200161021c565b61025b6102563660046121c2565b61053f565b60405161021c9190612233565b610212600281565b61028361027e366004612291565b6105d1565b005b610283610c09565b61021262093a8081565b6102836102a536600461244f565b610c43565b61021260065481565b610212600481565b6102836102c93660046124fc565b610cda565b6102e16102dc366004612547565b610d25565b60405161021c919061264e565b610212600381565b6102126103043660046121c2565b610e4e565b610283610e80565b61014154610325906001600160a01b031681565b6040516001600160a01b03909116815260200161021c565b6004546001600160a01b0316610325565b610212600681565b610283610364366004612661565b610eb6565b6102126103773660046121c2565b610ec5565b610212600081565b61021261039236600461269f565b610f03565b6102836103a53660046126d3565b610f98565b6103bd6103b8366004612714565b610fd5565b60405161021c9190612731565b61021260055481565b6102836103e1366004612768565b611077565b61021261014d81565b610212600581565b6102386104053660046127b0565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b610212600181565b6102836104493660046127de565b6110ad565b61028361045c366004612714565b611134565b610140546102389060ff1681565b60006001600160a01b0383166104a05760405162461bcd60e51b815260040161049790612846565b60405180910390fd5b6001600160a01b038316600090815260208190526040902082600781106104c9576104c9612891565b60088104919091015460079091166004026101000a900463ffffffff169392505050565b60006001600160e01b03198216636cdb3d1360e11b148061051e57506001600160e01b031982166303a24d0760e21b145b8061053957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600682111561059e5760405162461bcd60e51b8152602060048201526024808201527f5552492072657175657374656420666f7220696e76616c696420736572756d206044820152637479706560e01b6064820152608401610497565b6101426105aa836111d2565b6040516020016105bb9291906128fe565b6040516020818303038152906040529050919050565b600454600160a01b900460ff16156106375760405162461bcd60e51b8152602060048201526024808201527f617474656d707420746f207265656e7465722061206c6f636b65642066756e636044820152633a34b7b760e11b6064820152608401610497565b6004805460ff60a01b1916600160a01b1790556101405460ff1661069d5760405162461bcd60e51b815260206004820152601a60248201527f43616e733a20636c61696d696e672069732064697361626c65640000000000006044820152606401610497565b600681146107065760405162461bcd60e51b815260206004820152603060248201527f43616e733a20416d6f756e74206f66206561636820667275697420666c61766f60448201526f39103737ba1039b832b1b4b334b2b21760811b6064820152608401610497565b60006107106112d7565b905083600061071f82846129bb565b905060005b828110156108b057600088888381811061074057610740612891565b610140546040516331a9108f60e11b81526020929092029390930135600482018190529350339261010090046001600160a01b03169150636352211e9060240160206040518083038186803b15801561079857600080fd5b505afa1580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d091906129da565b6001600160a01b0316146108325760405162461bcd60e51b8152602060048201526024808201527f43616e733a2053656e64657220646f6573206e6f74206f776e2074686973205360448201526327a2209760e11b6064820152608401610497565b60078161270e811061084657610846612891565b60208104919091015461086591601f166101000a900460ff16846129f7565b92508460078261270e811061087c5761087c612891565b602091828204019190066101000a81548160ff021916908360ff1602179055505080806108a890612a0e565b915050610724565b50600092506000858560058181106108ca576108ca612891565b90506020020135868660048181106108e4576108e4612891565b90506020020135878760038181106108fe576108fe612891565b905060200201358888600281811061091857610918612891565b905060200201358989600181811061093257610932612891565b905060200201358a8a600081811061094c5761094c612891565b9050602002013561095d9190612a29565b6109679190612a29565b6109719190612a29565b61097b9190612a29565b6109859190612a29565b9050600061099382846129f7565b6040805160078082526101008201909252600095509192508491906020820160e080368337019050509050878760008181106109d1576109d1612891565b90506020020135816000815181106109eb576109eb612891565b60200260200101818152505087876001818110610a0a57610a0a612891565b9050602002013581600181518110610a2457610a24612891565b60200260200101818152505087876002818110610a4357610a43612891565b9050602002013581600281518110610a5d57610a5d612891565b60200260200101818152505087876003818110610a7c57610a7c612891565b9050602002013581600381518110610a9657610a96612891565b60200260200101818152505087876004818110610ab557610ab5612891565b9050602002013581600481518110610acf57610acf612891565b60200260200101818152505087876005818110610aee57610aee612891565b9050602002013581600581518110610b0857610b08612891565b6020908102919091010152610b1e600684612a57565b81600681518110610b3157610b31612891565b60200260200101818152505060009250610b5b338260405180602001604052806000815250611311565b50606060005b82811015610bef5760078b8b610b778985612a6b565b818110610b8657610b86612891565b9050602002013561270e8110610b9e57610b9e612891565b6020918282040191900681819054906101000a900460ff1680929190610bc390612a7f565b91906101000a81548160ff021916908360ff160217905550508080610be790612a0e565b915050610b61565b50506004805460ff60a01b19169055505050505050505050565b6004546001600160a01b03163314610c335760405162461bcd60e51b815260040161049790612a9c565b610140805460ff19166001179055565b6001600160a01b038516331480610c5f5750610c5f8533610405565b610cc65760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610497565b610cd38585858585611569565b5050505050565b6004546001600160a01b03163314610d045760405162461bcd60e51b815260040161049790612a9c565b6101405460ff1615610d1557600080fd5b610d208383836117c9565b505050565b60608151835114610d8a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610497565b600083516001600160401b03811115610da557610da56122fc565b604051908082528060200260200182016040528015610dce578160200160208202803683370190505b50905060005b8451811015610e4657610e19858281518110610df257610df2612891565b6020026020010151858381518110610e0c57610e0c612891565b602002602001015161046f565b828281518110610e2b57610e2b612891565b6020908102919091010152610e3f81612a0e565b9050610dd4565b509392505050565b600060078261270e8110610e6457610e64612891565b602081049091015460ff601f9092166101000a90041692915050565b6004546001600160a01b03163314610eaa5760405162461bcd60e51b815260040161049790612a9c565b610eb460006118d2565b565b610ec1338383611924565b5050565b600060078261270e8110610edb57610edb612891565b602081049091015460ff601f9092166101000a900416610ef96112d7565b61053991906129f7565b600080805b8351811015610f71576007848281518110610f2557610f25612891565b602002602001015161270e8110610f3e57610f3e612891565b602081049190910154610f5d91601f166101000a900460ff1683612a29565b915080610f6981612a0e565b915050610f08565b50808351610f7d6112d7565b610f8791906129bb565b610f9191906129f7565b9392505050565b610ec133838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611a0592505050565b610fdd612097565b6001600160a01b0382166110035760405162461bcd60e51b815260040161049790612846565b6001600160a01b038216600090815260208190526040808220815160e08101928390529290916007918390855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611030575094979650505050505050565b6004546001600160a01b031633146110a15760405162461bcd60e51b815260040161049790612a9c565b6110aa81611c0e565b50565b6001600160a01b0385163314806110c957506110c98533610405565b6111275760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610497565b610cd38585858585611c21565b6004546001600160a01b0316331461115e5760405162461bcd60e51b815260040161049790612a9c565b6001600160a01b0381166111c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610497565b6110aa816118d2565b3b151590565b6060816111f65750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611220578061120a81612a0e565b91506112199050600a83612a57565b91506111fa565b6000816001600160401b0381111561123a5761123a6122fc565b6040519080825280601f01601f191660200182016040528015611264576020820181803683370190505b5090505b84156112cf576112796001836129f7565b9150611286600a86612a6b565b611291906030612a29565b60f81b8183815181106112a6576112a6612891565b60200101906001600160f81b031916908160001a9053506112c8600a86612a57565b9450611268565b949350505050565b60008042905062093a8060055460065483106112f5576006546112f7565b825b61130191906129f7565b61130b9190612a57565b91505090565b6001600160a01b0383166113715760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610497565b81516007146113925760405162461bcd60e51b815260040161049790612ad1565b60003390506113f58160008660018054806020026020016040519081016040528092919081815260200182805480156113ea57602002820191906000526020600020905b8154815260200190600101908083116113d6575b505050505050505050565b60005b83518110156114aa5783818151811061141357611413612891565b6020026020010151600080876001600160a01b03166001600160a01b03168152602001908152602001600020826007811061145057611450612891565b600891828204019190066004028282829054906101000a900463ffffffff166114799190612b19565b92506101000a81548163ffffffff021916908363ffffffff16021790555080806114a290612a0e565b9150506113f8565b50836001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb6001876040516114fc929190612b41565b60405180910390a461156381600086600180548060200260200160405190810160405280929190818152602001828054801561155757602002820191906000526020600020905b815481526020019060010190808311611543575b50505050508787611e17565b50505050565b815183511461158a5760405162461bcd60e51b815260040161049790612ad1565b6001600160a01b0384166115b05760405162461bcd60e51b815260040161049790612ba0565b3360005b845181101561175b5760008582815181106115d1576115d1612891565b6020026020010151905060008583815181106115ef576115ef612891565b6020026020010151905060008060008b6001600160a01b03166001600160a01b03168152602001908152602001600020836007811061163057611630612891565b600891828204019190066004029054906101000a900463ffffffff1663ffffffff169050818110156116745760405162461bcd60e51b815260040161049790612be5565b6001600160a01b038a1660009081526020819052604090208282039084600781106116a1576116a1612891565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550816000808b6001600160a01b03166001600160a01b03168152602001908152602001600020846007811061170057611700612891565b600891828204019190066004028282829054906101000a900463ffffffff166117299190612b19565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050508061175490612a0e565b90506115b4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117ab929190612c2f565b60405180910390a46117c1818787878787611e17565b505050505050565b8060006117d7600683612c54565b905060005b848110156117c15760008686838181106117f8576117f8612891565b905060200201602081019061180d9190612714565b6001600160a01b03166000908152602081905260409020805464010000000063ffffffff87811691820267ffffffffffffffff199093168217929092176fffffffffffffffff0000000000000000191668010000000000000000820263ffffffff60601b191617600160601b82021767ffffffffffffffff60801b1916600160801b820263ffffffff60a01b191617600160a01b919091021763ffffffff60c01b1916600160c01b9186169190910217905550806118ca81612a0e565b9150506117dc565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156119985760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610497565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610497565b8051600714611a885760405162461bcd60e51b815260040161049790612ad1565b6000339050611afa818460006001805480602002602001604051908101604052809291908181526020018280548015611ae057602002820191906000526020600020905b815481526020019060010190808311611acc575b505060408051602081019091526000905250505050505050565b60005b8251811015611baf57828181518110611b1857611b18612891565b6020026020010151600080866001600160a01b03166001600160a01b031681526020019081526020016000208260078110611b5557611b55612891565b600891828204019190066004028282829054906101000a900463ffffffff16611b7e9190612c77565b92506101000a81548163ffffffff021916908363ffffffff1602179055508080611ba790612a0e565b915050611afd565b5060006001600160a01b0316836001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb600186604051611c01929190612b41565b60405180910390a4505050565b8051610ec19060039060208401906120b5565b6001600160a01b038416611c475760405162461bcd60e51b815260040161049790612ba0565b33611c60818787611c5788611f82565b610cd388611f82565b6001600160a01b03861660009081526020819052604081208560078110611c8957611c89612891565b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16905083811015611ccd5760405162461bcd60e51b815260040161049790612be5565b6001600160a01b0387166000908152602081905260409020848203908660078110611cfa57611cfa612891565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555083600080886001600160a01b03166001600160a01b031681526020019081526020016000208660078110611d5957611d59612891565b600891828204019190066004028282829054906101000a900463ffffffff16611d829190612b19565b92506101000a81548163ffffffff021916908363ffffffff160217905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611df8929190918252602082015260400190565b60405180910390a4611e0e828888888888611fcd565b50505050505050565b6001600160a01b0384163b156117c15760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611e5b9089908990889088908890600401612c9c565b602060405180830381600087803b158015611e7557600080fd5b505af1925050508015611ea5575060408051601f3d908101601f19168201909252611ea291810190612cfa565b60015b611f5257611eb1612d17565b806308c379a01415611eeb5750611ec6612d33565b80611ed15750611eed565b8060405162461bcd60e51b81526004016104979190612233565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610497565b6001600160e01b0319811663bc197c8160e01b14611e0e5760405162461bcd60e51b815260040161049790612dbc565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611fbc57611fbc612891565b602090810291909101015292915050565b6001600160a01b0384163b156117c15760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906120119089908990889088908890600401612e04565b602060405180830381600087803b15801561202b57600080fd5b505af192505050801561205b575060408051601f3d908101601f1916820190925261205891810190612cfa565b60015b61206757611eb1612d17565b6001600160e01b0319811663f23a6e6160e01b14611e0e5760405162461bcd60e51b815260040161049790612dbc565b6040518060e001604052806007906020820280368337509192915050565b8280546120c1906128a7565b90600052602060002090601f0160209004810192826120e35760008555612129565b82601f106120fc57805160ff1916838001178555612129565b82800160010185558215612129579182015b8281111561212957825182559160200191906001019061210e565b50612135929150612139565b5090565b5b80821115612135576000815560010161213a565b6001600160a01b03811681146110aa57600080fd5b6000806040838503121561217657600080fd5b82356121818161214e565b946020939093013593505050565b6001600160e01b0319811681146110aa57600080fd5b6000602082840312156121b757600080fd5b8135610f918161218f565b6000602082840312156121d457600080fd5b5035919050565b60005b838110156121f65781810151838201526020016121de565b838111156115635750506000910152565b6000815180845261221f8160208601602086016121db565b601f01601f19169290920160200192915050565b602081526000610f916020830184612207565b60008083601f84011261225857600080fd5b5081356001600160401b0381111561226f57600080fd5b6020830191508360208260051b850101111561228a57600080fd5b9250929050565b600080600080604085870312156122a757600080fd5b84356001600160401b03808211156122be57600080fd5b6122ca88838901612246565b909650945060208701359150808211156122e357600080fd5b506122f087828801612246565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715612337576123376122fc565b6040525050565b60006001600160401b03821115612357576123576122fc565b5060051b60200190565b600082601f83011261237257600080fd5b8135602061237f8261233e565b60405161238c8282612312565b83815260059390931b85018201928281019150868411156123ac57600080fd5b8286015b848110156123c757803583529183019183016123b0565b509695505050505050565b60006001600160401b038311156123eb576123eb6122fc565b604051612402601f8501601f191660200182612312565b80915083815284848401111561241757600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261244057600080fd5b610f91838335602085016123d2565b600080600080600060a0868803121561246757600080fd5b85356124728161214e565b945060208601356124828161214e565b935060408601356001600160401b038082111561249e57600080fd5b6124aa89838a01612361565b945060608801359150808211156124c057600080fd5b6124cc89838a01612361565b935060808801359150808211156124e257600080fd5b506124ef8882890161242f565b9150509295509295909350565b60008060006040848603121561251157600080fd5b83356001600160401b0381111561252757600080fd5b61253386828701612246565b909790965060209590950135949350505050565b6000806040838503121561255a57600080fd5b82356001600160401b038082111561257157600080fd5b818501915085601f83011261258557600080fd5b813560206125928261233e565b60405161259f8282612312565b83815260059390931b85018201928281019150898411156125bf57600080fd5b948201945b838610156125e65785356125d78161214e565b825294820194908201906125c4565b965050860135925050808211156125fc57600080fd5b5061260985828601612361565b9150509250929050565b600081518084526020808501945080840160005b8381101561264357815187529582019590820190600101612627565b509495945050505050565b602081526000610f916020830184612613565b6000806040838503121561267457600080fd5b823561267f8161214e565b91506020830135801515811461269457600080fd5b809150509250929050565b6000602082840312156126b157600080fd5b81356001600160401b038111156126c757600080fd5b6112cf84828501612361565b600080602083850312156126e657600080fd5b82356001600160401b038111156126fc57600080fd5b61270885828601612246565b90969095509350505050565b60006020828403121561272657600080fd5b8135610f918161214e565b60e08101818360005b600781101561275f57815163ffffffff1683526020928301929091019060010161273a565b50505092915050565b60006020828403121561277a57600080fd5b81356001600160401b0381111561279057600080fd5b8201601f810184136127a157600080fd5b6112cf848235602084016123d2565b600080604083850312156127c357600080fd5b82356127ce8161214e565b915060208301356126948161214e565b600080600080600060a086880312156127f657600080fd5b85356128018161214e565b945060208601356128118161214e565b9350604086013592506060860135915060808601356001600160401b0381111561283a57600080fd5b6124ef8882890161242f565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806128bb57607f821691505b602082108114156128dc57634e487b7160e01b600052602260045260246000fd5b50919050565b600081516128f48185602086016121db565b9290920192915050565b600080845481600182811c91508083168061291a57607f831692505b602080841082141561293a57634e487b7160e01b86526022600452602486fd5b81801561294e576001811461295f5761298c565b60ff1986168952848901965061298c565b60008b81526020902060005b868110156129845781548b82015290850190830161296b565b505084890196505b50505050505061299c81856128e2565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129d5576129d56129a5565b500290565b6000602082840312156129ec57600080fd5b8151610f918161214e565b600082821015612a0957612a096129a5565b500390565b6000600019821415612a2257612a226129a5565b5060010190565b60008219821115612a3c57612a3c6129a5565b500190565b634e487b7160e01b600052601260045260246000fd5b600082612a6657612a66612a41565b500490565b600082612a7a57612a7a612a41565b500690565b600060ff821680612a9257612a926129a5565b6000190192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600063ffffffff808316818516808303821115612b3857612b386129a5565b01949350505050565b6000604082016040835280855480835260608501915086600052602092508260002060005b82811015612b8257815484529284019260019182019101612b66565b50505083810382850152612b968186612613565b9695505050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612c426040830185612613565b828103602084015261299c8185612613565b600063ffffffff80841680612c6b57612c6b612a41565b92169190910492915050565b600063ffffffff83811690831681811015612c9457612c946129a5565b039392505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612cc890830186612613565b8281036060840152612cda8186612613565b90508281036080840152612cee8185612207565b98975050505050505050565b600060208284031215612d0c57600080fd5b8151610f918161218f565b600060033d1115612d305760046000803e5060005160e01c5b90565b600060443d1015612d415790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612d7057505050505090565b8285019150815181811115612d885750505050505090565b843d8701016020828501011115612da25750505050505090565b612db160208286010187612312565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612e3e90830184612207565b97965050505050505056fea2646970667358221220f11f276fcd27d9e8111c12785005e87c17a386af8c3e53cc42d7812fda6e7bae64736f6c63430008090033

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

000000000000000000000000b184b9414e7d7c436b7097ed2c774bb56fae392f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5375706f6661377a7a526f4659456a71364b3635727579424d3977637a32355a4e416476694543503138444b2f00000000000000000000

-----Decoded View---------------
Arg [0] : sodaContract (address): 0xB184b9414e7d7c436B7097eD2C774bB56fae392f
Arg [1] : _baseURI (string): ipfs://QmSupofa7zzRoFYEjq6K65ruyBM9wcz25ZNAdviECP18DK/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000b184b9414e7d7c436b7097ed2c774bb56fae392f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5375706f6661377a7a526f4659456a71364b3635727579
Arg [4] : 424d3977637a32355a4e416476694543503138444b2f00000000000000000000


Deployed Bytecode Sourcemap

36337:4280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21309:231;;;;;;:::i;:::-;;:::i;:::-;;;616:25:1;;;604:2;589:18;21309:231:0;;;;;;;;20332:310;;;;;;:::i;:::-;;:::i;:::-;;;1203:14:1;;1196:22;1178:41;;1166:2;1151:18;20332:310:0;1038:187:1;40399:215:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36466:30::-;;36495:1;36466:30;;38162:1571;;;;;;:::i;:::-;;:::i;:::-;;40116:84;;;:::i;36673:43::-;;36709:7;36673:43;;23636:442;;;;;;:::i;:::-;;:::i;36795:20::-;;;;;;36545:39;;36583:1;36545:39;;39951:157;;;;;;:::i;:::-;;:::i;22079:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36503:35::-;;36537:1;36503:35;;37587:113;;;;;;:::i;:::-;;:::i;35285:103::-;;;:::i;36926:28::-;;;;;-1:-1:-1;;;;;36926:28:0;;;;;;-1:-1:-1;;;;;9077:32:1;;;9059:51;;9047:2;9032:18;36926:28:0;8913:203:1;34634:87:0;34707:6;;-1:-1:-1;;;;;34707:6:0;34634:87;;36628:38;;36665:1;36628:38;;22691:155;;;;;;:::i;:::-;;:::i;37708:131::-;;;;;;:::i;:::-;;:::i;36390:31::-;;36420:1;36390:31;;37847:307;;;;;;:::i;:::-;;:::i;39741:98::-;;;;;;:::i;:::-;;:::i;21691:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36766:22::-;;;;;;39847:96;;;;;;:::i;:::-;;:::i;36723:36::-;;36756:3;36723:36;;36591:30;;36620:1;36591:30;;22918:168;;;;;;:::i;:::-;-1:-1:-1;;;;;23041:27:0;;;23017:4;23041:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22918:168;36428:31;;36458:1;36428:31;;23158:401;;;;;;:::i;:::-;;:::i;35543:201::-;;;;;;:::i;:::-;;:::i;36862:33::-;;;;;;;;;21309:231;21395:7;-1:-1:-1;;;;;21423:21:0;;21415:77;;;;-1:-1:-1;;;21415:77:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;21510:18:0;;:9;:18;;;;;;;;;;21529:2;21510:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21309:231:0:o;20332:310::-;20434:4;-1:-1:-1;;;;;;20471:41:0;;-1:-1:-1;;;20471:41:0;;:110;;-1:-1:-1;;;;;;;20529:52:0;;-1:-1:-1;;;20529:52:0;20471:110;:163;;;-1:-1:-1;;;;;;;;;;19110:40:0;;;20598:36;20451:183;20332:310;-1:-1:-1;;20332:310:0:o;40399:215::-;40454:13;40499:1;40493:2;:7;;40485:56;;;;-1:-1:-1;;;40485:56:0;;13437:2:1;40485:56:0;;;13419:21:1;13476:2;13456:18;;;13449:30;13515:34;13495:18;;;13488:62;-1:-1:-1;;;13566:18:1;;;13559:34;13610:19;;40485:56:0;13235:400:1;40485:56:0;40583:7;40592:12;40601:2;40592:8;:12::i;:::-;40566:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40552:54;;40399:215;;;:::o;38162:1571::-;789:11;;-1:-1:-1;;;789:11:0;;;;788:12;780:61;;;;-1:-1:-1;;;780:61:0;;15722:2:1;780:61:0;;;15704:21:1;15761:2;15741:18;;;15734:30;15800:34;15780:18;;;15773:62;-1:-1:-1;;;15851:18:1;;;15844:34;15895:19;;780:61:0;15520:400:1;780:61:0;852:11;:18;;-1:-1:-1;;;;852:18:0;-1:-1:-1;;;852:18:0;;;38268:13:::1;::::0;852:18;38268:13:::1;38260:52;;;::::0;-1:-1:-1;;;38260:52:0;;16127:2:1;38260:52:0::1;::::0;::::1;16109:21:1::0;16166:2;16146:18;;;16139:30;16205:28;16185:18;;;16178:56;16251:18;;38260:52:0::1;15925:350:1::0;38260:52:0::1;38349:1;38331:19:::0;::::1;38323:80;;;::::0;-1:-1:-1;;;38323:80:0;;16482:2:1;38323:80:0::1;::::0;::::1;16464:21:1::0;16521:2;16501:18;;;16494:30;16560:34;16540:18;;;16533:62;-1:-1:-1;;;16611:18:1;;;16604:46;16667:19;;38323:80:0::1;16280:412:1::0;38323:80:0::1;38414:11;38428:15;:13;:15::i;:::-;38414:29:::0;-1:-1:-1;38469:8:0;38454:12:::1;38517:16;38469:8:::0;38414:29;38517:16:::1;:::i;:::-;38495:38;;38550:6;38546:280;38566:7;38562:1;:11;38546:280;;;38595:7;38605:8;;38614:1;38605:11;;;;;;;:::i;:::-;38639:4;::::0;:16:::1;::::0;-1:-1:-1;;;38639:16:0;;38605:11:::1;::::0;;;::::1;::::0;;;::::1;;38639:16;::::0;::::1;616:25:1::0;;;38605:11:0;-1:-1:-1;38659:10:0::1;::::0;38639:4:::1;::::0;::::1;-1:-1:-1::0;;;;;38639:4:0::1;::::0;-1:-1:-1;38639:12:0::1;::::0;589:18:1;;38639:16:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38639:30:0::1;;38631:79;;;::::0;-1:-1:-1;;;38631:79:0;;17460:2:1;38631:79:0::1;::::0;::::1;17442:21:1::0;17499:2;17479:18;;;17472:30;17538:34;17518:18;;;17511:62;-1:-1:-1;;;17589:18:1;;;17582:34;17633:19;;38631:79:0::1;17258:400:1::0;38631:79:0::1;38748:13;38762:2;38748:17;;;;;;;:::i;:::-;;::::0;::::1;::::0;;;::::1;::::0;38725:41:::1;::::0;38748:17;;::::1;;::::0;::::1;;;38725:41:::0;::::1;:::i;:::-;;;38807:6;38781:13;38795:2;38781:17;;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;38580:246;38575:3;;;;;:::i;:::-;;;;38546:280;;;;38836:13;;;38862:15;39015:7;;39023:1;39015:10;;;;;;;:::i;:::-;;;;;;;38988:7;;38996:1;38988:10;;;;;;;:::i;:::-;;;;;;;38961:7;;38969:1;38961:10;;;;;;;:::i;:::-;;;;;;;38934:7;;38942:1;38934:10;;;;;;;:::i;:::-;;;;;;;38907:7;;38915:1;38907:10;;;;;;;:::i;:::-;;;;;;;38880:7;;38888:1;38880:10;;;;;;;:::i;:::-;;;;;;;:37;;;;:::i;:::-;:64;;;;:::i;:::-;:91;;;;:::i;:::-;:118;;;;:::i;:::-;:145;;;;:::i;:::-;38862:163:::0;-1:-1:-1;39036:14:0::1;39053:27;38862:163:::0;39053:14;:27:::1;:::i;:::-;39232:13;::::0;;39243:1:::1;39232:13:::0;;;;;::::1;::::0;;;39091:21:::1;::::0;-1:-1:-1;39036:44:0;;-1:-1:-1;39091:21:0;;39232:13;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;39232:13:0::1;39211:34;;39266:7;;39274:1;39266:10;;;;;;;:::i;:::-;;;;;;;39256:4;39261:1;39256:7;;;;;;;;:::i;:::-;;;;;;:20;;;::::0;::::1;39297:7;;39305:1;39297:10;;;;;;;:::i;:::-;;;;;;;39287:4;39292:1;39287:7;;;;;;;;:::i;:::-;;;;;;:20;;;::::0;::::1;39328:7;;39336:1;39328:10;;;;;;;:::i;:::-;;;;;;;39318:4;39323:1;39318:7;;;;;;;;:::i;:::-;;;;;;:20;;;::::0;::::1;39359:7;;39367:1;39359:10;;;;;;;:::i;:::-;;;;;;;39349:4;39354:1;39349:7;;;;;;;;:::i;:::-;;;;;;:20;;;::::0;::::1;39390:7;;39398:1;39390:10;;;;;;;:::i;:::-;;;;;;;39380:4;39385:1;39380:7;;;;;;;;:::i;:::-;;;;;;:20;;;::::0;::::1;39421:7;;39429:1;39421:10;;;;;;;:::i;:::-;;;;;;;39411:4;39416:1;39411:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:20;39453:14:::1;39466:1;39453:10:::0;:14:::1;:::i;:::-;39442:4;39447:1;39442:7;;;;;;;;:::i;:::-;;;;;;:26;;;::::0;::::1;39479:17;;;39509:32;39520:10;39532:4;39509:32;;;;;;;;;;;::::0;:10:::1;:32::i;:::-;-1:-1:-1::0;39552:11:0::1;39631:6;39627:99;39647:9;39643:1;:13;39627:99;;;39678:13;39692:8:::0;;39701:9:::1;39703:7:::0;39701:1;:9:::1;:::i;:::-;39692:19;;;;;;;:::i;:::-;;;;;;;39678:34;;;;;;;:::i;:::-;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;39658:3;;;;;:::i;:::-;;;;39627:99;;;-1:-1:-1::0;;893:11:0;:19;;-1:-1:-1;;;;893:19:0;;;-1:-1:-1;;;;;;;;;38162:1571:0:o;40116:84::-;34707:6;;-1:-1:-1;;;;;34707:6:0;18033:10;34854:23;34846:68;;;;-1:-1:-1;;;34846:68:0;;;;;;;:::i;:::-;40172:13:::1;:20:::0;;-1:-1:-1;;40172:20:0::1;40188:4;40172:20;::::0;;40116:84::o;23636:442::-;-1:-1:-1;;;;;23869:20:0;;18033:10;23869:20;;:60;;-1:-1:-1;23893:36:0;23910:4;18033:10;22918:168;:::i;23893:36::-;23847:160;;;;-1:-1:-1;;;23847:160:0;;19601:2:1;23847:160:0;;;19583:21:1;19640:2;19620:18;;;19613:30;19679:34;19659:18;;;19652:62;-1:-1:-1;;;19730:18:1;;;19723:48;19788:19;;23847:160:0;19399:414:1;23847:160:0;24018:52;24041:4;24047:2;24051:3;24056:7;24065:4;24018:22;:52::i;:::-;23636:442;;;;;:::o;39951:157::-;34707:6;;-1:-1:-1;;;;;34707:6:0;18033:10;34854:23;34846:68;;;;-1:-1:-1;;;34846:68:0;;;;;;;:::i;:::-;40047:13:::1;::::0;::::1;;40046:14;40038:23;;;::::0;::::1;;40072:28;40089:2;;40093:6;40072:16;:28::i;:::-;39951:157:::0;;;:::o;22079:524::-;22235:16;22296:3;:10;22277:8;:15;:29;22269:83;;;;-1:-1:-1;;;22269:83:0;;20020:2:1;22269:83:0;;;20002:21:1;20059:2;20039:18;;;20032:30;20098:34;20078:18;;;20071:62;-1:-1:-1;;;20149:18:1;;;20142:39;20198:19;;22269:83:0;19818:405:1;22269:83:0;22365:30;22412:8;:15;-1:-1:-1;;;;;22398:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22398:30:0;;22365:63;;22446:9;22441:122;22465:8;:15;22461:1;:19;22441:122;;;22521:30;22531:8;22540:1;22531:11;;;;;;;;:::i;:::-;;;;;;;22544:3;22548:1;22544:6;;;;;;;;:::i;:::-;;;;;;;22521:9;:30::i;:::-;22502:13;22516:1;22502:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;22482:3;;;:::i;:::-;;;22441:122;;;-1:-1:-1;22582:13:0;22079:524;-1:-1:-1;;;22079:524:0:o;37587:113::-;37644:4;37668:13;37683:7;37668:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37587:113;-1:-1:-1;;37587:113:0:o;35285:103::-;34707:6;;-1:-1:-1;;;;;34707:6:0;18033:10;34854:23;34846:68;;;;-1:-1:-1;;;34846:68:0;;;;;;;:::i;:::-;35350:30:::1;35377:1;35350:18;:30::i;:::-;35285:103::o:0;22691:155::-;22786:52;18033:10;22819:8;22829;22786:18;:52::i;:::-;22691:155;;:::o;37708:131::-;37767:4;37809:13;37823:7;37809:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;37791:15;:13;:15::i;:::-;:40;;;;:::i;37847:307::-;37917:4;;;37968:111;37988:8;:15;37984:1;:19;37968:111;;;38041:13;38055:8;38064:1;38055:11;;;;;;;;:::i;:::-;;;;;;;38041:26;;;;;;;:::i;:::-;;;;;;;;;38025:42;;38041:26;;;;;;;;38025:42;;:::i;:::-;;-1:-1:-1;38005:3:0;;;;:::i;:::-;;;;37968:111;;;;38134:12;38115:8;:15;38099;:13;:15::i;:::-;:31;;;;:::i;:::-;38098:48;;;;:::i;:::-;38091:55;37847:307;-1:-1:-1;;;37847:307:0:o;39741:98::-;39800:31;39811:10;39823:7;;39800:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39800:10:0;;-1:-1:-1;;;39800:31:0:i;21691:222::-;21763:16;;:::i;:::-;-1:-1:-1;;;;;21800:21:0;;21792:77;;;;-1:-1:-1;;;21792:77:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21887:18:0;;:9;:18;;;;;;;;;;;21880:25;;;;;;;;;;21887:18;;21880:25;;21887:18;;21880:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21880:25:0;;21691:222;-1:-1:-1;;;;;;;21691:222:0:o;39847:96::-;34707:6;;-1:-1:-1;;;;;34707:6:0;18033:10;34854:23;34846:68;;;;-1:-1:-1;;;34846:68:0;;;;;;;:::i;:::-;39920:15:::1;39928:6;39920:7;:15::i;:::-;39847:96:::0;:::o;23158:401::-;-1:-1:-1;;;;;23366:20:0;;18033:10;23366:20;;:60;;-1:-1:-1;23390:36:0;23407:4;18033:10;22918:168;:::i;23390:36::-;23344:151;;;;-1:-1:-1;;;23344:151:0;;20430:2:1;23344:151:0;;;20412:21:1;20469:2;20449:18;;;20442:30;20508:34;20488:18;;;20481:62;-1:-1:-1;;;20559:18:1;;;20552:39;20608:19;;23344:151:0;20228:405:1;23344:151:0;23506:45;23524:4;23530:2;23534;23538:6;23546:4;23506:17;:45::i;35543:201::-;34707:6;;-1:-1:-1;;;;;34707:6:0;18033:10;34854:23;34846:68;;;;-1:-1:-1;;;34846:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35632:22:0;::::1;35624:73;;;::::0;-1:-1:-1;;;35624:73:0;;20840:2:1;35624:73:0::1;::::0;::::1;20822:21:1::0;20879:2;20859:18;;;20852:30;20918:34;20898:18;;;20891:62;-1:-1:-1;;;20969:18:1;;;20962:36;21015:19;;35624:73:0::1;20638:402:1::0;35624:73:0::1;35708:28;35727:8;35708:18;:28::i;9958:387::-:0;10281:20;10329:8;;;9958:387::o;165:532::-;221:13;251:10;247:53;;-1:-1:-1;;278:10:0;;;;;;;;;;;;-1:-1:-1;;;278:10:0;;;;;165:532::o;247:53::-;325:5;310:12;366:78;373:9;;366:78;;399:8;;;;:::i;:::-;;-1:-1:-1;422:10:0;;-1:-1:-1;430:2:0;422:10;;:::i;:::-;;;366:78;;;454:19;486:6;-1:-1:-1;;;;;476:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;476:17:0;;454:39;;504:154;511:10;;504:154;;538:11;548:1;538:11;;:::i;:::-;;-1:-1:-1;607:10:0;615:2;607:5;:10;:::i;:::-;594:24;;:2;:24;:::i;:::-;581:39;;564:6;571;564:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;564:56:0;;;;;;;;-1:-1:-1;635:11:0;644:2;635:11;;:::i;:::-;;;504:154;;;682:6;165:532;-1:-1:-1;;;;165:532:0:o;40208:183::-;40255:4;40272:10;40285:15;40272:28;;36709:7;40357:10;;40328:8;;40320:5;:16;:35;;40347:8;;40320:35;;;40339:5;40320:35;40319:48;;;;:::i;:::-;40318:65;;;;:::i;:::-;40311:72;;;40208:183;:::o;28644:711::-;-1:-1:-1;;;;;28791:16:0;;28783:62;;;;-1:-1:-1;;;28783:62:0;;21247:2:1;28783:62:0;;;21229:21:1;21286:2;21266:18;;;21259:30;21325:34;21305:18;;;21298:62;-1:-1:-1;;;21376:18:1;;;21369:31;21417:19;;28783:62:0;21045:397:1;28783:62:0;28869:7;:14;28864:1;:19;28856:72;;;;-1:-1:-1;;;28856:72:0;;;;;;;:::i;:::-;28941:16;18033:10;28941:31;;28985:69;29006:8;29024:1;29028:2;29032:6;28985:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26266:1090;;;;;28985:69;29072:9;29067:110;29091:7;:14;29087:1;:18;29067:110;;;29154:7;29162:1;29154:10;;;;;;;;:::i;:::-;;;;;;;29127:9;:13;29137:2;-1:-1:-1;;;;;29127:13:0;-1:-1:-1;;;;;29127:13:0;;;;;;;;;;;;29141:1;29127:16;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29107:3;;;;;:::i;:::-;;;;29067:110;;;;29230:2;-1:-1:-1;;;;;29194:56:0;29226:1;-1:-1:-1;;;;;29194:56:0;29208:8;-1:-1:-1;;;;;29194:56:0;;29234:6;29242:7;29194:56;;;;;;;:::i;:::-;;;;;;;;29263:84;29299:8;29317:1;29321:2;29325:6;29263:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29333:7;29342:4;29263:35;:84::i;:::-;28772:583;28644:711;;;:::o;26266:1090::-;26493:7;:14;26479:3;:10;:28;26471:81;;;;-1:-1:-1;;;26471:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26571:16:0;;26563:66;;;;-1:-1:-1;;;26563:66:0;;;;;;;:::i;:::-;18033:10;26642:16;26759:437;26783:3;:10;26779:1;:14;26759:437;;;26815:10;26828:3;26832:1;26828:6;;;;;;;;:::i;:::-;;;;;;;26815:19;;26849:14;26866:7;26874:1;26866:10;;;;;;;;:::i;:::-;;;;;;;26849:27;;26893:19;26915:9;:15;26925:4;-1:-1:-1;;;;;26915:15:0;-1:-1:-1;;;;;26915:15:0;;;;;;;;;;;;26931:2;26915:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26893:41;;;;26972:6;26957:11;:21;;26949:76;;;;-1:-1:-1;;;26949:76:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27069:15:0;;:9;:15;;;;;;;;;;27098:20;;;;27085:2;27069:19;;;;;;;:::i;:::-;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;27177:6;27149:9;:13;27159:2;-1:-1:-1;;;;;27149:13:0;-1:-1:-1;;;;;27149:13:0;;;;;;;;;;;;27163:2;27149:17;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26800:396;;;26795:3;;;;:::i;:::-;;;26759:437;;;;27243:2;-1:-1:-1;;;;;27213:47:0;27237:4;-1:-1:-1;;;;;27213:47:0;27227:8;-1:-1:-1;;;;;27213:47:0;;27247:3;27252:7;27213:47;;;;;;;:::i;:::-;;;;;;;;27273:75;27309:8;27319:4;27325:2;27329:3;27334:7;27343:4;27273:35;:75::i;:::-;26460:896;26266:1090;;;;;:::o;25386:522::-;25516:6;25496:10;25550:5;25554:1;25516:6;25550:5;:::i;:::-;25534:21;;25570:6;25566:335;25582:13;;;25566:335;;;25617:9;25629:2;;25632:1;25629:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25649:12:0;:9;:12;;;;;;;;;;:21;;25685;25649;;;;25685;;;-1:-1:-1;;25685:21:0;;;;;;;;;-1:-1:-1;;25757:21:0;25721;;;-1:-1:-1;;;;25757:21:0;;-1:-1:-1;;;25757:21:0;;;-1:-1:-1;;;;25829:21:0;-1:-1:-1;;;25793:21:0;;-1:-1:-1;;;;25829:21:0;;-1:-1:-1;;;25829:21:0;;;;;-1:-1:-1;;;;25865:24:0;-1:-1:-1;;;25865:24:0;;;;;;;;;;-1:-1:-1;25597:3:0;;;;:::i;:::-;;;;25566:335;;35904:191;35997:6;;;-1:-1:-1;;;;;36014:17:0;;;-1:-1:-1;;;;;;36014:17:0;;;;;;;36047:40;;35997:6;;;36014:17;35997:6;;36047:40;;35978:16;;36047:40;35967:128;35904:191;:::o;30296:331::-;30451:8;-1:-1:-1;;;;;30442:17:0;:5;-1:-1:-1;;;;;30442:17:0;;;30434:71;;;;-1:-1:-1;;;30434:71:0;;24608:2:1;30434:71:0;;;24590:21:1;24647:2;24627:18;;;24620:30;24686:34;24666:18;;;24659:62;-1:-1:-1;;;24737:18:1;;;24730:39;24786:19;;30434:71:0;24406:405:1;30434:71:0;-1:-1:-1;;;;;30516:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;30516:46:0;;;;;;;;;;30578:41;;1178::1;;;30578::0;;1151:18:1;30578:41:0;;;;;;;30296:331;;;:::o;29558:596::-;-1:-1:-1;;;;;29679:18:0;;29671:66;;;;-1:-1:-1;;;29671:66:0;;25018:2:1;29671:66:0;;;25000:21:1;25057:2;25037:18;;;25030:30;25096:34;25076:18;;;25069:62;-1:-1:-1;;;25147:18:1;;;25140:33;25190:19;;29671:66:0;24816:399:1;29671:66:0;29761:7;:14;29756:1;:19;29748:72;;;;-1:-1:-1;;;29748:72:0;;;;;;;:::i;:::-;29833:16;18033:10;29833:31;;29877:69;29898:8;29908:4;29922:1;29926:6;29877:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29877:69:0;;;;;;;;;-1:-1:-1;29877:69:0;;-1:-1:-1;;;;;;;26266:1090:0;29877:69;29964:9;29959:112;29983:7;:14;29979:1;:18;29959:112;;;30048:7;30056:1;30048:10;;;;;;;;:::i;:::-;;;;;;;30019:9;:15;30029:4;-1:-1:-1;;;;;30019:15:0;-1:-1:-1;;;;;30019:15:0;;;;;;;;;;;;30035:1;30019:18;;;;;;;:::i;:::-;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29999:3;;;;;:::i;:::-;;;;29959:112;;;;30126:1;-1:-1:-1;;;;;30088:58:0;30112:4;-1:-1:-1;;;;;30088:58:0;30102:8;-1:-1:-1;;;;;30088:58:0;;30130:6;30138:7;30088:58;;;;;;;:::i;:::-;;;;;;;;29660:494;29558:596;;:::o;28200:88::-;28267:13;;;;:4;;:13;;;;;:::i;24542:836::-;-1:-1:-1;;;;;24730:16:0;;24722:66;;;;-1:-1:-1;;;24722:66:0;;;;;;;:::i;:::-;18033:10;24845:96;18033:10;24876:4;24882:2;24886:21;24904:2;24886:17;:21::i;:::-;24909:25;24927:6;24909:17;:25::i;24845:96::-;-1:-1:-1;;;;;24976:15:0;;24954:19;24976:15;;;;;;;;;;24992:2;24976:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24954:41;;;;25029:6;25014:11;:21;;25006:76;;;;-1:-1:-1;;;25006:76:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25118:15:0;;:9;:15;;;;;;;;;;25147:20;;;;25134:2;25118:19;;;;;;;:::i;:::-;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;25218:6;25190:9;:13;25200:2;-1:-1:-1;;;;;25190:13:0;-1:-1:-1;;;;;25190:13:0;;;;;;;;;;;;25204:2;25190:17;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25274:2;-1:-1:-1;;;;;25243:46:0;25268:4;-1:-1:-1;;;;;25243:46:0;25258:8;-1:-1:-1;;;;;25243:46:0;;25278:2;25282:6;25243:46;;;;;;25620:25:1;;;25676:2;25661:18;;25654:34;25608:2;25593:18;;25446:248;25243:46:0;;;;;;;;25302:68;25333:8;25343:4;25349:2;25353;25357:6;25365:4;25302:30;:68::i;:::-;24711:667;;24542:836;;;;;:::o;32564:813::-;-1:-1:-1;;;;;32804:13:0;;10281:20;10329:8;32800:570;;32840:79;;-1:-1:-1;;;32840:79:0;;-1:-1:-1;;;;;32840:43:0;;;;;:79;;32884:8;;32894:4;;32900:3;;32905:7;;32914:4;;32840:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32840:79:0;;;;;;;;-1:-1:-1;;32840:79:0;;;;;;;;;;;;:::i;:::-;;;32836:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33232:6;33225:14;;-1:-1:-1;;;33225:14:0;;;;;;;;:::i;32836:523::-;;;33281:62;;-1:-1:-1;;;33281:62:0;;27858:2:1;33281:62:0;;;27840:21:1;27897:2;27877:18;;;27870:30;27936:34;27916:18;;;27909:62;-1:-1:-1;;;27987:18:1;;;27980:50;28047:19;;33281:62:0;27656:416:1;32836:523:0;-1:-1:-1;;;;;;33001:60:0;;-1:-1:-1;;;33001:60:0;32997:159;;33086:50;;-1:-1:-1;;;33086:50:0;;;;;;;:::i;33385:198::-;33505:16;;;33519:1;33505:16;;;;;;;;;33451;;33480:22;;33505:16;;;;;;;;;;;;-1:-1:-1;33505:16:0;33480:41;;33543:7;33532:5;33538:1;33532:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;33570:5;33385:198;-1:-1:-1;;33385:198:0:o;31812:744::-;-1:-1:-1;;;;;32027:13:0;;10281:20;10329:8;32023:526;;32063:72;;-1:-1:-1;;;32063:72:0;;-1:-1:-1;;;;;32063:38:0;;;;;:72;;32102:8;;32112:4;;32118:2;;32122:6;;32130:4;;32063:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32063:72:0;;;;;;;;-1:-1:-1;;32063:72:0;;;;;;;;;;;;:::i;:::-;;;32059:479;;;;:::i;:::-;-1:-1:-1;;;;;;32185:55:0;;-1:-1:-1;;;32185:55:0;32181:154;;32265:50;;-1:-1:-1;;;32265:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:1:o;652:131::-;-1:-1:-1;;;;;;726:32:1;;716:43;;706:71;;773:1;770;763:12;788:245;846:6;899:2;887:9;878:7;874:23;870:32;867:52;;;915:1;912;905:12;867:52;954:9;941:23;973:30;997:5;973:30;:::i;1230:180::-;1289:6;1342:2;1330:9;1321:7;1317:23;1313:32;1310:52;;;1358:1;1355;1348:12;1310:52;-1:-1:-1;1381:23:1;;1230:180;-1:-1:-1;1230:180:1:o;1415:258::-;1487:1;1497:113;1511:6;1508:1;1505:13;1497:113;;;1587:11;;;1581:18;1568:11;;;1561:39;1533:2;1526:10;1497:113;;;1628:6;1625:1;1622:13;1619:48;;;-1:-1:-1;;1663:1:1;1645:16;;1638:27;1415:258::o;1678:269::-;1731:3;1769:5;1763:12;1796:6;1791:3;1784:19;1812:63;1868:6;1861:4;1856:3;1852:14;1845:4;1838:5;1834:16;1812:63;:::i;:::-;1929:2;1908:15;-1:-1:-1;;1904:29:1;1895:39;;;;1936:4;1891:50;;1678:269;-1:-1:-1;;1678:269:1:o;1952:231::-;2101:2;2090:9;2083:21;2064:4;2121:56;2173:2;2162:9;2158:18;2150:6;2121:56;:::i;2188:367::-;2251:8;2261:6;2315:3;2308:4;2300:6;2296:17;2292:27;2282:55;;2333:1;2330;2323:12;2282:55;-1:-1:-1;2356:20:1;;-1:-1:-1;;;;;2388:30:1;;2385:50;;;2431:1;2428;2421:12;2385:50;2468:4;2460:6;2456:17;2444:29;;2528:3;2521:4;2511:6;2508:1;2504:14;2496:6;2492:27;2488:38;2485:47;2482:67;;;2545:1;2542;2535:12;2482:67;2188:367;;;;;:::o;2560:773::-;2682:6;2690;2698;2706;2759:2;2747:9;2738:7;2734:23;2730:32;2727:52;;;2775:1;2772;2765:12;2727:52;2815:9;2802:23;-1:-1:-1;;;;;2885:2:1;2877:6;2874:14;2871:34;;;2901:1;2898;2891:12;2871:34;2940:70;3002:7;2993:6;2982:9;2978:22;2940:70;:::i;:::-;3029:8;;-1:-1:-1;2914:96:1;-1:-1:-1;3117:2:1;3102:18;;3089:32;;-1:-1:-1;3133:16:1;;;3130:36;;;3162:1;3159;3152:12;3130:36;;3201:72;3265:7;3254:8;3243:9;3239:24;3201:72;:::i;:::-;2560:773;;;;-1:-1:-1;3292:8:1;-1:-1:-1;;;;2560:773:1:o;3338:127::-;3399:10;3394:3;3390:20;3387:1;3380:31;3430:4;3427:1;3420:15;3454:4;3451:1;3444:15;3470:249;3580:2;3561:13;;-1:-1:-1;;3557:27:1;3545:40;;-1:-1:-1;;;;;3600:34:1;;3636:22;;;3597:62;3594:88;;;3662:18;;:::i;:::-;3698:2;3691:22;-1:-1:-1;;3470:249:1:o;3724:183::-;3784:4;-1:-1:-1;;;;;3809:6:1;3806:30;3803:56;;;3839:18;;:::i;:::-;-1:-1:-1;3884:1:1;3880:14;3896:4;3876:25;;3724:183::o;3912:724::-;3966:5;4019:3;4012:4;4004:6;4000:17;3996:27;3986:55;;4037:1;4034;4027:12;3986:55;4073:6;4060:20;4099:4;4122:43;4162:2;4122:43;:::i;:::-;4194:2;4188:9;4206:31;4234:2;4226:6;4206:31;:::i;:::-;4272:18;;;4364:1;4360:10;;;;4348:23;;4344:32;;;4306:15;;;;-1:-1:-1;4388:15:1;;;4385:35;;;4416:1;4413;4406:12;4385:35;4452:2;4444:6;4440:15;4464:142;4480:6;4475:3;4472:15;4464:142;;;4546:17;;4534:30;;4584:12;;;;4497;;4464:142;;;-1:-1:-1;4624:6:1;3912:724;-1:-1:-1;;;;;;3912:724:1:o;4641:468::-;4705:5;-1:-1:-1;;;;;4731:6:1;4728:30;4725:56;;;4761:18;;:::i;:::-;4810:2;4804:9;4822:69;4879:2;4858:15;;-1:-1:-1;;4854:29:1;4885:4;4850:40;4804:9;4822:69;:::i;:::-;4909:6;4900:15;;4939:6;4931;4924:22;4979:3;4970:6;4965:3;4961:16;4958:25;4955:45;;;4996:1;4993;4986:12;4955:45;5046:6;5041:3;5034:4;5026:6;5022:17;5009:44;5101:1;5094:4;5085:6;5077;5073:19;5069:30;5062:41;;4641:468;;;;;:::o;5114:220::-;5156:5;5209:3;5202:4;5194:6;5190:17;5186:27;5176:55;;5227:1;5224;5217:12;5176:55;5249:79;5324:3;5315:6;5302:20;5295:4;5287:6;5283:17;5249:79;:::i;5339:1071::-;5493:6;5501;5509;5517;5525;5578:3;5566:9;5557:7;5553:23;5549:33;5546:53;;;5595:1;5592;5585:12;5546:53;5634:9;5621:23;5653:31;5678:5;5653:31;:::i;:::-;5703:5;-1:-1:-1;5760:2:1;5745:18;;5732:32;5773:33;5732:32;5773:33;:::i;:::-;5825:7;-1:-1:-1;5883:2:1;5868:18;;5855:32;-1:-1:-1;;;;;5936:14:1;;;5933:34;;;5963:1;5960;5953:12;5933:34;5986:61;6039:7;6030:6;6019:9;6015:22;5986:61;:::i;:::-;5976:71;;6100:2;6089:9;6085:18;6072:32;6056:48;;6129:2;6119:8;6116:16;6113:36;;;6145:1;6142;6135:12;6113:36;6168:63;6223:7;6212:8;6201:9;6197:24;6168:63;:::i;:::-;6158:73;;6284:3;6273:9;6269:19;6256:33;6240:49;;6314:2;6304:8;6301:16;6298:36;;;6330:1;6327;6320:12;6298:36;;6353:51;6396:7;6385:8;6374:9;6370:24;6353:51;:::i;:::-;6343:61;;;5339:1071;;;;;;;;:::o;6415:505::-;6510:6;6518;6526;6579:2;6567:9;6558:7;6554:23;6550:32;6547:52;;;6595:1;6592;6585:12;6547:52;6635:9;6622:23;-1:-1:-1;;;;;6660:6:1;6657:30;6654:50;;;6700:1;6697;6690:12;6654:50;6739:70;6801:7;6792:6;6781:9;6777:22;6739:70;:::i;:::-;6828:8;;6713:96;;-1:-1:-1;6910:2:1;6895:18;;;;6882:32;;6415:505;-1:-1:-1;;;;6415:505:1:o;6925:1277::-;7043:6;7051;7104:2;7092:9;7083:7;7079:23;7075:32;7072:52;;;7120:1;7117;7110:12;7072:52;7160:9;7147:23;-1:-1:-1;;;;;7230:2:1;7222:6;7219:14;7216:34;;;7246:1;7243;7236:12;7216:34;7284:6;7273:9;7269:22;7259:32;;7329:7;7322:4;7318:2;7314:13;7310:27;7300:55;;7351:1;7348;7341:12;7300:55;7387:2;7374:16;7409:4;7432:43;7472:2;7432:43;:::i;:::-;7504:2;7498:9;7516:31;7544:2;7536:6;7516:31;:::i;:::-;7582:18;;;7670:1;7666:10;;;;7658:19;;7654:28;;;7616:15;;;;-1:-1:-1;7694:19:1;;;7691:39;;;7726:1;7723;7716:12;7691:39;7750:11;;;;7770:217;7786:6;7781:3;7778:15;7770:217;;;7866:3;7853:17;7883:31;7908:5;7883:31;:::i;:::-;7927:18;;7803:12;;;;7965;;;;7770:217;;;8006:6;-1:-1:-1;;8050:18:1;;8037:32;;-1:-1:-1;;8081:16:1;;;8078:36;;;8110:1;8107;8100:12;8078:36;;8133:63;8188:7;8177:8;8166:9;8162:24;8133:63;:::i;:::-;8123:73;;;6925:1277;;;;;:::o;8207:435::-;8260:3;8298:5;8292:12;8325:6;8320:3;8313:19;8351:4;8380:2;8375:3;8371:12;8364:19;;8417:2;8410:5;8406:14;8438:1;8448:169;8462:6;8459:1;8456:13;8448:169;;;8523:13;;8511:26;;8557:12;;;;8592:15;;;;8484:1;8477:9;8448:169;;;-1:-1:-1;8633:3:1;;8207:435;-1:-1:-1;;;;;8207:435:1:o;8647:261::-;8826:2;8815:9;8808:21;8789:4;8846:56;8898:2;8887:9;8883:18;8875:6;8846:56;:::i;9121:416::-;9186:6;9194;9247:2;9235:9;9226:7;9222:23;9218:32;9215:52;;;9263:1;9260;9253:12;9215:52;9302:9;9289:23;9321:31;9346:5;9321:31;:::i;:::-;9371:5;-1:-1:-1;9428:2:1;9413:18;;9400:32;9470:15;;9463:23;9451:36;;9441:64;;9501:1;9498;9491:12;9441:64;9524:7;9514:17;;;9121:416;;;;;:::o;9542:348::-;9626:6;9679:2;9667:9;9658:7;9654:23;9650:32;9647:52;;;9695:1;9692;9685:12;9647:52;9735:9;9722:23;-1:-1:-1;;;;;9760:6:1;9757:30;9754:50;;;9800:1;9797;9790:12;9754:50;9823:61;9876:7;9867:6;9856:9;9852:22;9823:61;:::i;9895:437::-;9981:6;9989;10042:2;10030:9;10021:7;10017:23;10013:32;10010:52;;;10058:1;10055;10048:12;10010:52;10098:9;10085:23;-1:-1:-1;;;;;10123:6:1;10120:30;10117:50;;;10163:1;10160;10153:12;10117:50;10202:70;10264:7;10255:6;10244:9;10240:22;10202:70;:::i;:::-;10291:8;;10176:96;;-1:-1:-1;9895:437:1;-1:-1:-1;;;;9895:437:1:o;10337:247::-;10396:6;10449:2;10437:9;10428:7;10424:23;10420:32;10417:52;;;10465:1;10462;10455:12;10417:52;10504:9;10491:23;10523:31;10548:5;10523:31;:::i;10589:510::-;10767:3;10752:19;;10756:9;10848:6;10725:4;10882:211;10896:4;10893:1;10890:11;10882:211;;;10959:13;;10974:10;10955:30;10943:43;;11009:4;11033:12;;;;11068:15;;;;10916:1;10909:9;10882:211;;;10886:3;;;10589:510;;;;:::o;11104:450::-;11173:6;11226:2;11214:9;11205:7;11201:23;11197:32;11194:52;;;11242:1;11239;11232:12;11194:52;11282:9;11269:23;-1:-1:-1;;;;;11307:6:1;11304:30;11301:50;;;11347:1;11344;11337:12;11301:50;11370:22;;11423:4;11415:13;;11411:27;-1:-1:-1;11401:55:1;;11452:1;11449;11442:12;11401:55;11475:73;11540:7;11535:2;11522:16;11517:2;11513;11509:11;11475:73;:::i;11559:388::-;11627:6;11635;11688:2;11676:9;11667:7;11663:23;11659:32;11656:52;;;11704:1;11701;11694:12;11656:52;11743:9;11730:23;11762:31;11787:5;11762:31;:::i;:::-;11812:5;-1:-1:-1;11869:2:1;11854:18;;11841:32;11882:33;11841:32;11882:33;:::i;11952:734::-;12056:6;12064;12072;12080;12088;12141:3;12129:9;12120:7;12116:23;12112:33;12109:53;;;12158:1;12155;12148:12;12109:53;12197:9;12184:23;12216:31;12241:5;12216:31;:::i;:::-;12266:5;-1:-1:-1;12323:2:1;12308:18;;12295:32;12336:33;12295:32;12336:33;:::i;:::-;12388:7;-1:-1:-1;12442:2:1;12427:18;;12414:32;;-1:-1:-1;12493:2:1;12478:18;;12465:32;;-1:-1:-1;12548:3:1;12533:19;;12520:33;-1:-1:-1;;;;;12565:30:1;;12562:50;;;12608:1;12605;12598:12;12562:50;12631:49;12672:7;12663:6;12652:9;12648:22;12631:49;:::i;12691:407::-;12893:2;12875:21;;;12932:2;12912:18;;;12905:30;12971:34;12966:2;12951:18;;12944:62;-1:-1:-1;;;13037:2:1;13022:18;;13015:41;13088:3;13073:19;;12691:407::o;13103:127::-;13164:10;13159:3;13155:20;13152:1;13145:31;13195:4;13192:1;13185:15;13219:4;13216:1;13209:15;13640:380;13719:1;13715:12;;;;13762;;;13783:61;;13837:4;13829:6;13825:17;13815:27;;13783:61;13890:2;13882:6;13879:14;13859:18;13856:38;13853:161;;;13936:10;13931:3;13927:20;13924:1;13917:31;13971:4;13968:1;13961:15;13999:4;13996:1;13989:15;13853:161;;13640:380;;;:::o;14151:185::-;14193:3;14231:5;14225:12;14246:52;14291:6;14286:3;14279:4;14272:5;14268:16;14246:52;:::i;:::-;14314:16;;;;;14151:185;-1:-1:-1;;14151:185:1:o;14341:1174::-;14517:3;14546:1;14579:6;14573:13;14609:3;14631:1;14659:9;14655:2;14651:18;14641:28;;14719:2;14708:9;14704:18;14741;14731:61;;14785:4;14777:6;14773:17;14763:27;;14731:61;14811:2;14859;14851:6;14848:14;14828:18;14825:38;14822:165;;;-1:-1:-1;;;14886:33:1;;14942:4;14939:1;14932:15;14972:4;14893:3;14960:17;14822:165;15003:18;15030:104;;;;15148:1;15143:320;;;;14996:467;;15030:104;-1:-1:-1;;15063:24:1;;15051:37;;15108:16;;;;-1:-1:-1;15030:104:1;;15143:320;14098:1;14091:14;;;14135:4;14122:18;;15238:1;15252:165;15266:6;15263:1;15260:13;15252:165;;;15344:14;;15331:11;;;15324:35;15387:16;;;;15281:10;;15252:165;;;15256:3;;15446:6;15441:3;15437:16;15430:23;;14996:467;;;;;;;15479:30;15505:3;15497:6;15479:30;:::i;:::-;15472:37;14341:1174;-1:-1:-1;;;;;14341:1174:1:o;16697:127::-;16758:10;16753:3;16749:20;16746:1;16739:31;16789:4;16786:1;16779:15;16813:4;16810:1;16803:15;16829:168;16869:7;16935:1;16931;16927:6;16923:14;16920:1;16917:21;16912:1;16905:9;16898:17;16894:45;16891:71;;;16942:18;;:::i;:::-;-1:-1:-1;16982:9:1;;16829:168::o;17002:251::-;17072:6;17125:2;17113:9;17104:7;17100:23;17096:32;17093:52;;;17141:1;17138;17131:12;17093:52;17173:9;17167:16;17192:31;17217:5;17192:31;:::i;17663:125::-;17703:4;17731:1;17728;17725:8;17722:34;;;17736:18;;:::i;:::-;-1:-1:-1;17773:9:1;;17663:125::o;17793:135::-;17832:3;-1:-1:-1;;17853:17:1;;17850:43;;;17873:18;;:::i;:::-;-1:-1:-1;17920:1:1;17909:13;;17793:135::o;17933:128::-;17973:3;18004:1;18000:6;17997:1;17994:13;17991:39;;;18010:18;;:::i;:::-;-1:-1:-1;18046:9:1;;17933:128::o;18481:127::-;18542:10;18537:3;18533:20;18530:1;18523:31;18573:4;18570:1;18563:15;18597:4;18594:1;18587:15;18613:120;18653:1;18679;18669:35;;18684:18;;:::i;:::-;-1:-1:-1;18718:9:1;;18613:120::o;18738:112::-;18770:1;18796;18786:35;;18801:18;;:::i;:::-;-1:-1:-1;18835:9:1;;18738:112::o;18855:178::-;18892:3;18936:4;18929:5;18925:16;18960:7;18950:41;;18971:18;;:::i;:::-;-1:-1:-1;;19007:20:1;;18855:178;-1:-1:-1;;18855:178:1:o;19038:356::-;19240:2;19222:21;;;19259:18;;;19252:30;19318:34;19313:2;19298:18;;19291:62;19385:2;19370:18;;19038:356::o;21447:404::-;21649:2;21631:21;;;21688:2;21668:18;;;21661:30;21727:34;21722:2;21707:18;;21700:62;-1:-1:-1;;;21793:2:1;21778:18;;21771:38;21841:3;21826:19;;21447:404::o;21856:228::-;21895:3;21923:10;21960:2;21957:1;21953:10;21990:2;21987:1;21983:10;22021:3;22017:2;22013:12;22008:3;22005:21;22002:47;;;22029:18;;:::i;:::-;22065:13;;21856:228;-1:-1:-1;;;;21856:228:1:o;22089:829::-;22306:4;22354:2;22343:9;22339:18;22384:2;22373:9;22366:21;22407:6;22442;22436:13;22473:6;22465;22458:22;22511:2;22500:9;22496:18;22489:25;;22533:6;22530:1;22523:17;22559:4;22549:14;;22599:2;22596:1;22586:16;22620:1;22630:168;22644:6;22641:1;22638:13;22630:168;;;22705:13;;22693:26;;22739:12;;;;22786:1;22774:14;;;;22659:9;22630:168;;;22634:3;;;22843:9;22838:3;22834:19;22829:2;22818:9;22814:18;22807:47;22871:41;22908:3;22900:6;22871:41;:::i;:::-;22863:49;22089:829;-1:-1:-1;;;;;;22089:829:1:o;22923:401::-;23125:2;23107:21;;;23164:2;23144:18;;;23137:30;23203:34;23198:2;23183:18;;23176:62;-1:-1:-1;;;23269:2:1;23254:18;;23247:35;23314:3;23299:19;;22923:401::o;23329:406::-;23531:2;23513:21;;;23570:2;23550:18;;;23543:30;23609:34;23604:2;23589:18;;23582:62;-1:-1:-1;;;23675:2:1;23660:18;;23653:40;23725:3;23710:19;;23329:406::o;23740:465::-;23997:2;23986:9;23979:21;23960:4;24023:56;24075:2;24064:9;24060:18;24052:6;24023:56;:::i;:::-;24127:9;24119:6;24115:22;24110:2;24099:9;24095:18;24088:50;24155:44;24192:6;24184;24155:44;:::i;24210:191::-;24249:1;24275:10;24312:2;24309:1;24305:10;24334:3;24324:37;;24341:18;;:::i;:::-;24379:10;;24375:20;;;;;24210:191;-1:-1:-1;;24210:191:1:o;25220:221::-;25259:4;25288:10;25348;;;;25318;;25370:12;;;25367:38;;;25385:18;;:::i;:::-;25422:13;;25220:221;-1:-1:-1;;;25220:221:1:o;25699:838::-;-1:-1:-1;;;;;26096:15:1;;;26078:34;;26148:15;;26143:2;26128:18;;26121:43;26058:3;26195:2;26180:18;;26173:31;;;26021:4;;26227:57;;26264:19;;26256:6;26227:57;:::i;:::-;26332:9;26324:6;26320:22;26315:2;26304:9;26300:18;26293:50;26366:44;26403:6;26395;26366:44;:::i;:::-;26352:58;;26459:9;26451:6;26447:22;26441:3;26430:9;26426:19;26419:51;26487:44;26524:6;26516;26487:44;:::i;:::-;26479:52;25699:838;-1:-1:-1;;;;;;;;25699:838:1:o;26542:249::-;26611:6;26664:2;26652:9;26643:7;26639:23;26635:32;26632:52;;;26680:1;26677;26670:12;26632:52;26712:9;26706:16;26731:30;26755:5;26731:30;:::i;26796:179::-;26831:3;26873:1;26855:16;26852:23;26849:120;;;26919:1;26916;26913;26898:23;-1:-1:-1;26956:1:1;26950:8;26945:3;26941:18;26849:120;26796:179;:::o;26980:671::-;27019:3;27061:4;27043:16;27040:26;27037:39;;;26980:671;:::o;27037:39::-;27103:2;27097:9;-1:-1:-1;;27168:16:1;27164:25;;27161:1;27097:9;27140:50;27219:4;27213:11;27243:16;-1:-1:-1;;;;;27349:2:1;27342:4;27334:6;27330:17;27327:25;27322:2;27314:6;27311:14;27308:45;27305:58;;;27356:5;;;;;26980:671;:::o;27305:58::-;27393:6;27387:4;27383:17;27372:28;;27429:3;27423:10;27456:2;27448:6;27445:14;27442:27;;;27462:5;;;;;;26980:671;:::o;27442:27::-;27546:2;27527:16;27521:4;27517:27;27513:36;27506:4;27497:6;27492:3;27488:16;27484:27;27481:69;27478:82;;;27553:5;;;;;;26980:671;:::o;27478:82::-;27569:57;27620:4;27611:6;27603;27599:19;27595:30;27589:4;27569:57;:::i;:::-;-1:-1:-1;27642:3:1;;26980:671;-1:-1:-1;;;;;26980:671:1:o;28077:404::-;28279:2;28261:21;;;28318:2;28298:18;;;28291:30;28357:34;28352:2;28337:18;;28330:62;-1:-1:-1;;;28423:2:1;28408:18;;28401:38;28471:3;28456:19;;28077:404::o;28486:572::-;-1:-1:-1;;;;;28783:15:1;;;28765:34;;28835:15;;28830:2;28815:18;;28808:43;28882:2;28867:18;;28860:34;;;28925:2;28910:18;;28903:34;;;28745:3;28968;28953:19;;28946:32;;;28708:4;;28995:57;;29032:19;;29024:6;28995:57;:::i;:::-;28987:65;28486:572;-1:-1:-1;;;;;;;28486:572:1:o

Swarm Source

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