ETH Price: $3,274.13 (+0.87%)
Gas: 1 Gwei

Token

GOAT BEE BEE (BEE)
 

Overview

Max Total Supply

462 BEE

Holders

69

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
gz3c7.eth
Balance
10 BEE
0xaa18221ccb2d3573a2ac7861acee081bef57b738
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GoatBeeBee

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: contracts/OpenSea.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

contract OpenSea {
    address private _proxyRegistry;

    function proxyRegistry() public view returns (address) {
        return _proxyRegistry;
    }

    function isOwnersOpenSeaProxy(address owner, address operator)
        public
        view
        returns (bool)
    {
        address proxyRegistry_ = _proxyRegistry;

        if (proxyRegistry_ != address(0)) {
            if (block.chainid == 1 || block.chainid == 4) {
                return
                    address(ProxyRegistry(proxyRegistry_).proxies(owner)) ==
                    operator;
            } else if (block.chainid == 137 || block.chainid == 80001) {
                return proxyRegistry_ == operator;
            }
        }

        return false;
    }

    function _setOpenSeaRegistry(address proxyRegistryAddress) internal {
        _proxyRegistry = proxyRegistryAddress;
    }
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}
// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/finance/PaymentSplitter.sol


// OpenZeppelin Contracts v4.4.1 (finance/PaymentSplitter.sol)

pragma solidity ^0.8.0;




/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned.
 *
 * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
 * function.
 *
 * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and
 * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you
 * to run tests before sending real value to this contract.
 */
contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    mapping(IERC20 => uint256) private _erc20TotalReleased;
    mapping(IERC20 => mapping(address => uint256)) private _erc20Released;

    /**
     * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
     * the matching position in the `shares` array.
     *
     * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in `payees`.
     */
    constructor(address[] memory payees, uint256[] memory shares_) payable {
        require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares_[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for
     * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
     * functions].
     */
    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20
     * contract.
     */
    function totalReleased(IERC20 token) public view returns (uint256) {
        return _erc20TotalReleased[token];
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an
     * IERC20 contract.
     */
    function released(IERC20 token, address account) public view returns (uint256) {
        return _erc20Released[token][account];
    }

    /**
     * @dev Getter for the address of the payee number `index`.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
     * total shares and their previous withdrawals.
     */
    function release(address payable account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = address(this).balance + totalReleased();
        uint256 payment = _pendingPayment(account, totalReceived, released(account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _released[account] += payment;
        _totalReleased += payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their
     * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20
     * contract.
     */
    function release(IERC20 token, address account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token);
        uint256 payment = _pendingPayment(account, totalReceived, released(token, account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _erc20Released[token][account] += payment;
        _erc20TotalReleased[token] += payment;

        SafeERC20.safeTransfer(token, account, payment);
        emit ERC20PaymentReleased(token, account, payment);
    }

    /**
     * @dev internal logic for computing the pending payment of an `account` given the token historical balances and
     * already released amounts.
     */
    function _pendingPayment(
        address account,
        uint256 totalReceived,
        uint256 alreadyReleased
    ) private view returns (uint256) {
        return (totalReceived * _shares[account]) / _totalShares - alreadyReleased;
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: contracts/ERC721.sol



pragma solidity ^0.8.7;







abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;

    string private _name;
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _owners.push(address(0));
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );

        uint256 count;
        for (uint256 i; i < _owners.length; ++i) {
            if (owner == _owners[i]) ++count;
        }
        return count;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _owners[tokenId];
        require(
            owner != address(0),
            "ERC721: owner query for nonexistent token"
        );
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
// File: contracts/ERC721Enumerable.sol



pragma solidity ^0.8.7;



abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(IERC165, ERC721)
        returns (bool)
    {
        return
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length - 1;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < _owners.length,
            "ERC721Enumerable: global index out of bounds"
        );
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256 tokenId)
    {
        require(
            index < balanceOf(owner),
            "ERC721Enumerable: owner index out of bounds"
        );

        uint256 count;
        for (uint256 i; i < _owners.length; i++) {
            if (owner == _owners[i]) {
                if (count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}
// File: GoatBeeBee.sol


pragma solidity ^0.8.7;

contract GoatBeeBee is ERC721Enumerable, OpenSea, Ownable, PaymentSplitter {
    using Strings for uint256;

    string private _baseTokenURI;
    string private _tokenURISuffix;

    uint256 public price = 6900000000000000; // 0.0069 ETH
    uint256 public constant MAX_SUPPLY = 2222;
    uint256 public maxPerTx = 10;

    constructor(
        address openSeaProxyRegistry,
        address[] memory _payees,
        uint256[] memory _shares
    ) ERC721("GOAT BEE BEE", "BEE") PaymentSplitter(_payees, _shares) {
        if (openSeaProxyRegistry != address(0)) {
            _setOpenSeaRegistry(openSeaProxyRegistry);
        }
    }

    function mint(uint256 count) public payable {
        require(count <= maxPerTx, "Exceed max per transaction");
        uint256 supply = _owners.length;
        require(supply + count < MAX_SUPPLY, "Max supply reached");
        if (supply < 453 && supply + count > 453) {
            uint256 payCount = supply + count - 453;
            require(payCount * price == msg.value, "Invalid funds provided.");
        } else if (supply >= 453) {
            require(count * price == msg.value, "Invalid funds provided.");
        }
        for (uint256 i; i < count; i++) {
            _safeMint(msg.sender, supply++);
        }
    }

    function tokenURI(uint256 tokenId)
        external
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        return
            string(
                abi.encodePacked(
                    _baseTokenURI,
                    tokenId.toString(),
                    _tokenURISuffix
                )
            );
    }

    function setBaseURI(string calldata _newBaseURI, string calldata _newSuffix)
        external
        onlyOwner
    {
        _baseTokenURI = _newBaseURI;
        _tokenURISuffix = _newSuffix;
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        override
        returns (bool)
    {
        return
            super.isApprovedForAll(owner, operator) ||
            isOwnersOpenSeaProxy(owner, operator);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"openSeaProxyRegistry","type":"address"},{"internalType":"address[]","name":"_payees","type":"address[]"},{"internalType":"uint256[]","name":"_shares","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isOwnersOpenSeaProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"},{"internalType":"string","name":"_newSuffix","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526618838370f34000601055600a6011553480156200002157600080fd5b5060405162005b9a38038062005b9a833981810160405281019062000047919062000843565b81816040518060400160405280600c81526020017f474f4154204245452042454500000000000000000000000000000000000000008152506040518060400160405280600381526020017f42454500000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000cd92919062000609565b508060019080519060200190620000e692919062000609565b50600260009080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200016d62000161620002bd60201b60201c565b620002c560201b60201c565b8051825114620001b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ab9062000a11565b60405180910390fd5b6000825111620001fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f29062000a55565b60405180910390fd5b60005b82518110156200026a576200025483828151811062000222576200022162000ce4565b5b602002602001015183838151811062000240576200023f62000ce4565b5b60200260200101516200038b60201b60201c565b8080620002619062000c38565b915050620001fe565b505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620002b457620002b383620005c560201b60201c565b5b50505062000eda565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f590620009ef565b60405180910390fd5b6000811162000444576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043b9062000a77565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414620004c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c09062000a33565b60405180910390fd5b600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060075462000580919062000b31565b6007819055507f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac8282604051620005b9929190620009c2565b60405180910390a15050565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054620006179062000bcc565b90600052602060002090601f0160209004810192826200063b576000855562000687565b82601f106200065657805160ff191683800117855562000687565b8280016001018555821562000687579182015b828111156200068657825182559160200191906001019062000669565b5b5090506200069691906200069a565b5090565b5b80821115620006b55760008160009055506001016200069b565b5090565b6000620006d0620006ca8462000ac2565b62000a99565b90508083825260208201905082856020860282011115620006f657620006f562000d47565b5b60005b858110156200072a57816200070f8882620007af565b845260208401935060208301925050600181019050620006f9565b5050509392505050565b60006200074b620007458462000af1565b62000a99565b9050808382526020820190508285602086028201111562000771576200077062000d47565b5b60005b85811015620007a557816200078a88826200082c565b84526020840193506020830192505060018101905062000774565b5050509392505050565b600081519050620007c08162000ea6565b92915050565b600082601f830112620007de57620007dd62000d42565b5b8151620007f0848260208601620006b9565b91505092915050565b600082601f83011262000811576200081062000d42565b5b81516200082384826020860162000734565b91505092915050565b6000815190506200083d8162000ec0565b92915050565b6000806000606084860312156200085f576200085e62000d51565b5b60006200086f86828701620007af565b935050602084015167ffffffffffffffff81111562000893576200089262000d4c565b5b620008a186828701620007c6565b925050604084015167ffffffffffffffff811115620008c557620008c462000d4c565b5b620008d386828701620007f9565b9150509250925092565b620008e88162000b8e565b82525050565b6000620008fd602c8362000b20565b91506200090a8262000d67565b604082019050919050565b60006200092460328362000b20565b9150620009318262000db6565b604082019050919050565b60006200094b602b8362000b20565b9150620009588262000e05565b604082019050919050565b600062000972601a8362000b20565b91506200097f8262000e54565b602082019050919050565b600062000999601d8362000b20565b9150620009a68262000e7d565b602082019050919050565b620009bc8162000bc2565b82525050565b6000604082019050620009d96000830185620008dd565b620009e86020830184620009b1565b9392505050565b6000602082019050818103600083015262000a0a81620008ee565b9050919050565b6000602082019050818103600083015262000a2c8162000915565b9050919050565b6000602082019050818103600083015262000a4e816200093c565b9050919050565b6000602082019050818103600083015262000a708162000963565b9050919050565b6000602082019050818103600083015262000a92816200098a565b9050919050565b600062000aa562000ab8565b905062000ab3828262000c02565b919050565b6000604051905090565b600067ffffffffffffffff82111562000ae05762000adf62000d13565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000b0f5762000b0e62000d13565b5b602082029050602081019050919050565b600082825260208201905092915050565b600062000b3e8262000bc2565b915062000b4b8362000bc2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b835762000b8262000c86565b5b828201905092915050565b600062000b9b8262000ba2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000be557607f821691505b6020821081141562000bfc5762000bfb62000cb5565b5b50919050565b62000c0d8262000d56565b810181811067ffffffffffffffff8211171562000c2f5762000c2e62000d13565b5b80604052505050565b600062000c458262000bc2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000c7b5762000c7a62000c86565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a2070617965657320616e64207368617260008201527f6573206c656e677468206d69736d617463680000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960008201527f2068617320736861726573000000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206e6f20706179656573000000000000600082015250565b7f5061796d656e7453706c69747465723a20736861726573206172652030000000600082015250565b62000eb18162000b8e565b811462000ebd57600080fd5b50565b62000ecb8162000bc2565b811462000ed757600080fd5b50565b614cb08062000eea6000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063b50cbd9f116100a0578063d79779b21161006f578063d79779b214610803578063e33b7de314610840578063e985e9c51461086b578063f2fde38b146108a8578063f968adbe146108d15761024f565b8063b50cbd9f14610735578063b88d4fde14610760578063c87b56dd14610789578063ce7c2ac2146107c65761024f565b806395d89b41116100e757806395d89b411461065d5780639852595c14610688578063a035b1fe146106c5578063a0712d68146106f0578063a22cb4651461070c5761024f565b806370a08231146105a1578063715018a6146105de5780638b83209b146105f55780638da5cb5b146106325761024f565b806332cb6b0c1161019b57806348b750441161016a57806348b75044146104985780634f6ccce7146104c15780636102de98146104fe5780636352211e1461053b5780636790a9de146105785761024f565b806332cb6b0c146103dc5780633a98ef3914610407578063406072a91461043257806342842e0e1461046f5761024f565b806318160ddd116101d757806318160ddd14610322578063191655871461034d57806323b872dd146103765780632f745c591461039f5761024f565b806301ffc9a71461025457806306fdde0314610291578063081812fc146102bc578063095ea7b3146102f95761024f565b3661024f577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706102366108fc565b34604051610245929190613ba0565b60405180910390a1005b600080fd5b34801561026057600080fd5b5061027b6004803603810190610276919061335e565b610904565b6040516102889190613bc9565b60405180910390f35b34801561029d57600080fd5b506102a661097e565b6040516102b39190613be4565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de91906134d3565b610a10565b6040516102f09190613b10565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b91906132f1565b610a95565b005b34801561032e57600080fd5b50610337610bad565b6040516103449190613f86565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061316e565b610bc6565b005b34801561038257600080fd5b5061039d600480360381019061039891906131db565b610d71565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906132f1565b610dd1565b6040516103d39190613f86565b60405180910390f35b3480156103e857600080fd5b506103f1610f16565b6040516103fe9190613f86565b60405180910390f35b34801561041357600080fd5b5061041c610f1c565b6040516104299190613f86565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906133e5565b610f26565b6040516104669190613f86565b60405180910390f35b34801561047b57600080fd5b50610496600480360381019061049191906131db565b610fad565b005b3480156104a457600080fd5b506104bf60048036038101906104ba91906133e5565b610fcd565b005b3480156104cd57600080fd5b506104e860048036038101906104e391906134d3565b611295565b6040516104f59190613f86565b60405180910390f35b34801561050a57600080fd5b506105256004803603810190610520919061319b565b6112e6565b6040516105329190613bc9565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d91906134d3565b61146f565b60405161056f9190613b10565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613452565b61152c565b005b3480156105ad57600080fd5b506105c860048036038101906105c39190613141565b6115d2565b6040516105d59190613f86565b60405180910390f35b3480156105ea57600080fd5b506105f36116ee565b005b34801561060157600080fd5b5061061c600480360381019061061791906134d3565b611776565b6040516106299190613b10565b60405180910390f35b34801561063e57600080fd5b506106476117be565b6040516106549190613b10565b60405180910390f35b34801561066957600080fd5b506106726117e8565b60405161067f9190613be4565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613141565b61187a565b6040516106bc9190613f86565b60405180910390f35b3480156106d157600080fd5b506106da6118c3565b6040516106e79190613f86565b60405180910390f35b61070a600480360381019061070591906134d3565b6118c9565b005b34801561071857600080fd5b50610733600480360381019061072e91906132b1565b611a8e565b005b34801561074157600080fd5b5061074a611c0f565b6040516107579190613b10565b60405180910390f35b34801561076c57600080fd5b506107876004803603810190610782919061322e565b611c39565b005b34801561079557600080fd5b506107b060048036038101906107ab91906134d3565b611c9b565b6040516107bd9190613be4565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613141565b611d1a565b6040516107fa9190613f86565b60405180910390f35b34801561080f57600080fd5b5061082a600480360381019061082591906133b8565b611d63565b6040516108379190613f86565b60405180910390f35b34801561084c57600080fd5b50610855611dac565b6040516108629190613f86565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d919061319b565b611db6565b60405161089f9190613bc9565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190613141565b611ddb565b005b3480156108dd57600080fd5b506108e6611ed3565b6040516108f39190613f86565b60405180910390f35b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610977575061097682611ed9565b5b9050919050565b60606000805461098d90614291565b80601f01602080910402602001604051908101604052809291908181526020018280546109b990614291565b8015610a065780601f106109db57610100808354040283529160200191610a06565b820191906000526020600020905b8154815290600101906020018083116109e957829003601f168201915b5050505050905090565b6000610a1b82611fbb565b610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190613e26565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa08261146f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613ec6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b306108fc565b73ffffffffffffffffffffffffffffffffffffffff161480610b5f5750610b5e81610b596108fc565b611db6565b5b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590613d86565b60405180910390fd5b610ba88383612043565b505050565b60006001600280549050610bc1919061413b565b905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90613c86565b60405180910390fd5b6000610c52611dac565b47610c5d919061405a565b90506000610c748383610c6f8661187a565b6120fc565b90506000811415610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613d66565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d09919061405a565b925050819055508060086000828254610d22919061405a565b92505081905550610d33838261216a565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568382604051610d64929190613b2b565b60405180910390a1505050565b610d82610d7c6108fc565b8261225e565b610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890613ee6565b60405180910390fd5b610dcc83838361233c565b505050565b6000610ddc836115d2565b8210610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613c06565b60405180910390fd5b6000805b600280549050811015610ed45760028181548110610e4257610e416143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610ec15783821415610eb2578092505050610f10565b8180610ebd906142f4565b9250505b8080610ecc906142f4565b915050610e21565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790613c06565b60405180910390fd5b92915050565b6108ae81565b6000600754905090565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610fc883838360405180602001604052806000815250611c39565b505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613c86565b60405180910390fd5b600061105a83611d63565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110939190613b10565b60206040518083038186803b1580156110ab57600080fd5b505afa1580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e39190613500565b6110ed919061405a565b9050600061110583836111008787610f26565b6120fc565b9050600081141561114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613d66565b60405180910390fd5b80600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111d7919061405a565b9250508190555080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122d919061405a565b9250508190555061123f8484836124f5565b8373ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a8483604051611287929190613ba0565b60405180910390a250505050565b600060028054905082106112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613f46565b60405180910390fd5b819050919050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114635760014614806113515750600446145b15611415578273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016113a69190613b10565b60206040518083038186803b1580156113be57600080fd5b505afa1580156113d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f69190613425565b73ffffffffffffffffffffffffffffffffffffffff1614915050611469565b608946148061142657506201388146145b15611462578273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614915050611469565b5b60009150505b92915050565b60008060028381548110611486576114856143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90613dc6565b60405180910390fd5b80915050919050565b6115346108fc565b73ffffffffffffffffffffffffffffffffffffffff166115526117be565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613e66565b60405180910390fd5b8383600e91906115b9929190612f06565b508181600f91906115cb929190612f06565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613da6565b60405180910390fd5b6000805b6002805490508110156116e45760028181548110611668576116676143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116d357816116d0906142f4565b91505b806116dd906142f4565b9050611647565b5080915050919050565b6116f66108fc565b73ffffffffffffffffffffffffffffffffffffffff166117146117be565b73ffffffffffffffffffffffffffffffffffffffff161461176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176190613e66565b60405180910390fd5b611774600061257b565b565b6000600b828154811061178c5761178b6143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117f790614291565b80601f016020809104026020016040519081016040528092919081815260200182805461182390614291565b80156118705780601f1061184557610100808354040283529160200191611870565b820191906000526020600020905b81548152906001019060200180831161185357829003601f168201915b5050505050905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60105481565b60115481111561190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613e46565b60405180910390fd5b600060028054905090506108ae8282611927919061405a565b10611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613f26565b60405180910390fd5b6101c58110801561198457506101c58282611982919061405a565b115b156119fb5760006101c5838361199a919061405a565b6119a4919061413b565b905034601054826119b591906140e1565b146119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90613de6565b60405180910390fd5b50611a55565b6101c58110611a54573460105483611a1391906140e1565b14611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613de6565b60405180910390fd5b5b5b60005b82811015611a8957611a76338380611a6f906142f4565b9450612641565b8080611a81906142f4565b915050611a58565b505050565b611a966108fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613cc6565b60405180910390fd5b8060046000611b116108fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bbe6108fc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c039190613bc9565b60405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c4a611c446108fc565b8361225e565b611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613ee6565b60405180910390fd5b611c958484848461265f565b50505050565b6060611ca682611fbb565b611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90613ea6565b60405180910390fd5b600e611cf0836126bb565b600f604051602001611d0493929190613aca565b6040516020818303038152906040529050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600854905090565b6000611dc2838361281c565b80611dd35750611dd283836112e6565b5b905092915050565b611de36108fc565b73ffffffffffffffffffffffffffffffffffffffff16611e016117be565b73ffffffffffffffffffffffffffffffffffffffff1614611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe90613c46565b60405180910390fd5b611ed08161257b565b50565b60115481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fa457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fb45750611fb3826128b0565b5b9050919050565b60006002805490508210801561203c5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611ff857611ff76143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120b68361146f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600754600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548561214d91906140e1565b61215791906140b0565b612161919061413b565b90509392505050565b804710156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613d06565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121d390613afb565b60006040518083038185875af1925050503d8060008114612210576040519150601f19603f3d011682016040523d82523d6000602084013e612215565b606091505b5050905080612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090613ce6565b60405180910390fd5b505050565b600061226982611fbb565b6122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f90613d46565b60405180910390fd5b60006122b38361146f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061232257508373ffffffffffffffffffffffffffffffffffffffff1661230a84610a10565b73ffffffffffffffffffffffffffffffffffffffff16145b8061233357506123328185611db6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661235c8261146f565b73ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990613e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241990613ca6565b60405180910390fd5b61242d83838361291a565b612438600082612043565b816002828154811061244d5761244c6143fb565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6125768363a9059cbb60e01b8484604051602401612514929190613ba0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061291f565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61265b8282604051806020016040528060008152506129e6565b5050565b61266a84848461233c565b61267684848484612a41565b6126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90613c26565b60405180910390fd5b50505050565b60606000821415612703576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612817565b600082905060005b6000821461273557808061271e906142f4565b915050600a8261272e91906140b0565b915061270b565b60008167ffffffffffffffff8111156127515761275061442a565b5b6040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b5090505b600085146128105760018261279c919061413b565b9150600a856127ab919061433d565b60306127b7919061405a565b60f81b8183815181106127cd576127cc6143fb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561280991906140b0565b9450612787565b8093505050505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6000612981826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bd89092919063ffffffff16565b90506000815111156129e157808060200190518101906129a19190613331565b6129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790613f66565b60405180910390fd5b5b505050565b6129f08383612bf0565b6129fd6000848484612a41565b612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3390613c26565b60405180910390fd5b505050565b6000612a628473ffffffffffffffffffffffffffffffffffffffff16612d78565b15612bcb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a8b6108fc565b8786866040518563ffffffff1660e01b8152600401612aad9493929190613b54565b602060405180830381600087803b158015612ac757600080fd5b505af1925050508015612af857506040513d601f19601f82011682018060405250810190612af5919061338b565b60015b612b7b573d8060008114612b28576040519150601f19603f3d011682016040523d82523d6000602084013e612b2d565b606091505b50600081511415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90613c26565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bd0565b600190505b949350505050565b6060612be78484600085612d8b565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5790613e06565b60405180910390fd5b612c6981611fbb565b15612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090613c66565b60405180910390fd5b612cb56000838361291a565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606082471015612dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc790613d26565b60405180910390fd5b612dd985612d78565b612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f90613f06565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612e419190613ab3565b60006040518083038185875af1925050503d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b5091509150612e93828286612e9f565b92505050949350505050565b60608315612eaf57829050612eff565b600083511115612ec25782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef69190613be4565b60405180910390fd5b9392505050565b828054612f1290614291565b90600052602060002090601f016020900481019282612f345760008555612f7b565b82601f10612f4d57803560ff1916838001178555612f7b565b82800160010185558215612f7b579182015b82811115612f7a578235825591602001919060010190612f5f565b5b509050612f889190612f8c565b5090565b5b80821115612fa5576000816000905550600101612f8d565b5090565b6000612fbc612fb784613fc6565b613fa1565b905082815260208101848484011115612fd857612fd7614468565b5b612fe384828561424f565b509392505050565b600081359050612ffa81614bd9565b92915050565b60008135905061300f81614bf0565b92915050565b60008135905061302481614c07565b92915050565b60008151905061303981614c07565b92915050565b60008135905061304e81614c1e565b92915050565b60008151905061306381614c1e565b92915050565b600082601f83011261307e5761307d61445e565b5b813561308e848260208601612fa9565b91505092915050565b6000813590506130a681614c35565b92915050565b6000815190506130bb81614c4c565b92915050565b60008083601f8401126130d7576130d661445e565b5b8235905067ffffffffffffffff8111156130f4576130f3614459565b5b6020830191508360018202830111156131105761310f614463565b5b9250929050565b60008135905061312681614c63565b92915050565b60008151905061313b81614c63565b92915050565b60006020828403121561315757613156614472565b5b600061316584828501612feb565b91505092915050565b60006020828403121561318457613183614472565b5b600061319284828501613000565b91505092915050565b600080604083850312156131b2576131b1614472565b5b60006131c085828601612feb565b92505060206131d185828601612feb565b9150509250929050565b6000806000606084860312156131f4576131f3614472565b5b600061320286828701612feb565b935050602061321386828701612feb565b925050604061322486828701613117565b9150509250925092565b6000806000806080858703121561324857613247614472565b5b600061325687828801612feb565b945050602061326787828801612feb565b935050604061327887828801613117565b925050606085013567ffffffffffffffff8111156132995761329861446d565b5b6132a587828801613069565b91505092959194509250565b600080604083850312156132c8576132c7614472565b5b60006132d685828601612feb565b92505060206132e785828601613015565b9150509250929050565b6000806040838503121561330857613307614472565b5b600061331685828601612feb565b925050602061332785828601613117565b9150509250929050565b60006020828403121561334757613346614472565b5b60006133558482850161302a565b91505092915050565b60006020828403121561337457613373614472565b5b60006133828482850161303f565b91505092915050565b6000602082840312156133a1576133a0614472565b5b60006133af84828501613054565b91505092915050565b6000602082840312156133ce576133cd614472565b5b60006133dc84828501613097565b91505092915050565b600080604083850312156133fc576133fb614472565b5b600061340a85828601613097565b925050602061341b85828601612feb565b9150509250929050565b60006020828403121561343b5761343a614472565b5b6000613449848285016130ac565b91505092915050565b6000806000806040858703121561346c5761346b614472565b5b600085013567ffffffffffffffff81111561348a5761348961446d565b5b613496878288016130c1565b9450945050602085013567ffffffffffffffff8111156134b9576134b861446d565b5b6134c5878288016130c1565b925092505092959194509250565b6000602082840312156134e9576134e8614472565b5b60006134f784828501613117565b91505092915050565b60006020828403121561351657613515614472565b5b60006135248482850161312c565b91505092915050565b61353681614219565b82525050565b6135458161416f565b82525050565b61355481614193565b82525050565b60006135658261400c565b61356f8185614022565b935061357f81856020860161425e565b61358881614477565b840191505092915050565b600061359e8261400c565b6135a88185614033565b93506135b881856020860161425e565b80840191505092915050565b60006135cf82614017565b6135d9818561403e565b93506135e981856020860161425e565b6135f281614477565b840191505092915050565b600061360882614017565b613612818561404f565b935061362281856020860161425e565b80840191505092915050565b6000815461363b81614291565b613645818661404f565b945060018216600081146136605760018114613671576136a4565b60ff198316865281860193506136a4565b61367a85613ff7565b60005b8381101561369c5781548189015260018201915060208101905061367d565b838801955050505b50505092915050565b60006136ba602b8361403e565b91506136c582614488565b604082019050919050565b60006136dd60328361403e565b91506136e8826144d7565b604082019050919050565b600061370060268361403e565b915061370b82614526565b604082019050919050565b6000613723601c8361403e565b915061372e82614575565b602082019050919050565b600061374660268361403e565b91506137518261459e565b604082019050919050565b600061376960248361403e565b9150613774826145ed565b604082019050919050565b600061378c60198361403e565b91506137978261463c565b602082019050919050565b60006137af603a8361403e565b91506137ba82614665565b604082019050919050565b60006137d2601d8361403e565b91506137dd826146b4565b602082019050919050565b60006137f560268361403e565b9150613800826146dd565b604082019050919050565b6000613818602c8361403e565b91506138238261472c565b604082019050919050565b600061383b602b8361403e565b91506138468261477b565b604082019050919050565b600061385e60388361403e565b9150613869826147ca565b604082019050919050565b6000613881602a8361403e565b915061388c82614819565b604082019050919050565b60006138a460298361403e565b91506138af82614868565b604082019050919050565b60006138c760178361403e565b91506138d2826148b7565b602082019050919050565b60006138ea60208361403e565b91506138f5826148e0565b602082019050919050565b600061390d602c8361403e565b915061391882614909565b604082019050919050565b6000613930601a8361403e565b915061393b82614958565b602082019050919050565b600061395360208361403e565b915061395e82614981565b602082019050919050565b600061397660298361403e565b9150613981826149aa565b604082019050919050565b6000613999602f8361403e565b91506139a4826149f9565b604082019050919050565b60006139bc60218361403e565b91506139c782614a48565b604082019050919050565b60006139df600083614033565b91506139ea82614a97565b600082019050919050565b6000613a0260318361403e565b9150613a0d82614a9a565b604082019050919050565b6000613a25601d8361403e565b9150613a3082614ae9565b602082019050919050565b6000613a4860128361403e565b9150613a5382614b12565b602082019050919050565b6000613a6b602c8361403e565b9150613a7682614b3b565b604082019050919050565b6000613a8e602a8361403e565b9150613a9982614b8a565b604082019050919050565b613aad8161420f565b82525050565b6000613abf8284613593565b915081905092915050565b6000613ad6828661362e565b9150613ae282856135fd565b9150613aee828461362e565b9150819050949350505050565b6000613b06826139d2565b9150819050919050565b6000602082019050613b25600083018461353c565b92915050565b6000604082019050613b40600083018561352d565b613b4d6020830184613aa4565b9392505050565b6000608082019050613b69600083018761353c565b613b76602083018661353c565b613b836040830185613aa4565b8181036060830152613b95818461355a565b905095945050505050565b6000604082019050613bb5600083018561353c565b613bc26020830184613aa4565b9392505050565b6000602082019050613bde600083018461354b565b92915050565b60006020820190508181036000830152613bfe81846135c4565b905092915050565b60006020820190508181036000830152613c1f816136ad565b9050919050565b60006020820190508181036000830152613c3f816136d0565b9050919050565b60006020820190508181036000830152613c5f816136f3565b9050919050565b60006020820190508181036000830152613c7f81613716565b9050919050565b60006020820190508181036000830152613c9f81613739565b9050919050565b60006020820190508181036000830152613cbf8161375c565b9050919050565b60006020820190508181036000830152613cdf8161377f565b9050919050565b60006020820190508181036000830152613cff816137a2565b9050919050565b60006020820190508181036000830152613d1f816137c5565b9050919050565b60006020820190508181036000830152613d3f816137e8565b9050919050565b60006020820190508181036000830152613d5f8161380b565b9050919050565b60006020820190508181036000830152613d7f8161382e565b9050919050565b60006020820190508181036000830152613d9f81613851565b9050919050565b60006020820190508181036000830152613dbf81613874565b9050919050565b60006020820190508181036000830152613ddf81613897565b9050919050565b60006020820190508181036000830152613dff816138ba565b9050919050565b60006020820190508181036000830152613e1f816138dd565b9050919050565b60006020820190508181036000830152613e3f81613900565b9050919050565b60006020820190508181036000830152613e5f81613923565b9050919050565b60006020820190508181036000830152613e7f81613946565b9050919050565b60006020820190508181036000830152613e9f81613969565b9050919050565b60006020820190508181036000830152613ebf8161398c565b9050919050565b60006020820190508181036000830152613edf816139af565b9050919050565b60006020820190508181036000830152613eff816139f5565b9050919050565b60006020820190508181036000830152613f1f81613a18565b9050919050565b60006020820190508181036000830152613f3f81613a3b565b9050919050565b60006020820190508181036000830152613f5f81613a5e565b9050919050565b60006020820190508181036000830152613f7f81613a81565b9050919050565b6000602082019050613f9b6000830184613aa4565b92915050565b6000613fab613fbc565b9050613fb782826142c3565b919050565b6000604051905090565b600067ffffffffffffffff821115613fe157613fe061442a565b5b613fea82614477565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140658261420f565b91506140708361420f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140a5576140a461436e565b5b828201905092915050565b60006140bb8261420f565b91506140c68361420f565b9250826140d6576140d561439d565b5b828204905092915050565b60006140ec8261420f565b91506140f78361420f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141305761412f61436e565b5b828202905092915050565b60006141468261420f565b91506141518361420f565b9250828210156141645761416361436e565b5b828203905092915050565b600061417a826141ef565b9050919050565b600061418c826141ef565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006141d68261416f565b9050919050565b60006141e88261416f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006142248261422b565b9050919050565b60006142368261423d565b9050919050565b6000614248826141ef565b9050919050565b82818337600083830152505050565b60005b8381101561427c578082015181840152602081019050614261565b8381111561428b576000848401525b50505050565b600060028204905060018216806142a957607f821691505b602082108114156142bd576142bc6143cc565b5b50919050565b6142cc82614477565b810181811067ffffffffffffffff821117156142eb576142ea61442a565b5b80604052505050565b60006142ff8261420f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143325761433161436e565b5b600182019050919050565b60006143488261420f565b91506143538361420f565b9250826143635761436261439d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f457863656564206d617820706572207472616e73616374696f6e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4d617820737570706c7920726561636865640000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b614be28161416f565b8114614bed57600080fd5b50565b614bf981614181565b8114614c0457600080fd5b50565b614c1081614193565b8114614c1b57600080fd5b50565b614c278161419f565b8114614c3257600080fd5b50565b614c3e816141cb565b8114614c4957600080fd5b50565b614c55816141dd565b8114614c6057600080fd5b50565b614c6c8161420f565b8114614c7757600080fd5b5056fea2646970667358221220022d13c06c6054091d4d6d2c6dbd33f234c379c66462932e1c5cb9ba89fd48ea64736f6c63430008070033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000cd21906bd3b55daf2dfcbf1d15f881951bfa50200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063b50cbd9f116100a0578063d79779b21161006f578063d79779b214610803578063e33b7de314610840578063e985e9c51461086b578063f2fde38b146108a8578063f968adbe146108d15761024f565b8063b50cbd9f14610735578063b88d4fde14610760578063c87b56dd14610789578063ce7c2ac2146107c65761024f565b806395d89b41116100e757806395d89b411461065d5780639852595c14610688578063a035b1fe146106c5578063a0712d68146106f0578063a22cb4651461070c5761024f565b806370a08231146105a1578063715018a6146105de5780638b83209b146105f55780638da5cb5b146106325761024f565b806332cb6b0c1161019b57806348b750441161016a57806348b75044146104985780634f6ccce7146104c15780636102de98146104fe5780636352211e1461053b5780636790a9de146105785761024f565b806332cb6b0c146103dc5780633a98ef3914610407578063406072a91461043257806342842e0e1461046f5761024f565b806318160ddd116101d757806318160ddd14610322578063191655871461034d57806323b872dd146103765780632f745c591461039f5761024f565b806301ffc9a71461025457806306fdde0314610291578063081812fc146102bc578063095ea7b3146102f95761024f565b3661024f577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706102366108fc565b34604051610245929190613ba0565b60405180910390a1005b600080fd5b34801561026057600080fd5b5061027b6004803603810190610276919061335e565b610904565b6040516102889190613bc9565b60405180910390f35b34801561029d57600080fd5b506102a661097e565b6040516102b39190613be4565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de91906134d3565b610a10565b6040516102f09190613b10565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b91906132f1565b610a95565b005b34801561032e57600080fd5b50610337610bad565b6040516103449190613f86565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061316e565b610bc6565b005b34801561038257600080fd5b5061039d600480360381019061039891906131db565b610d71565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906132f1565b610dd1565b6040516103d39190613f86565b60405180910390f35b3480156103e857600080fd5b506103f1610f16565b6040516103fe9190613f86565b60405180910390f35b34801561041357600080fd5b5061041c610f1c565b6040516104299190613f86565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906133e5565b610f26565b6040516104669190613f86565b60405180910390f35b34801561047b57600080fd5b50610496600480360381019061049191906131db565b610fad565b005b3480156104a457600080fd5b506104bf60048036038101906104ba91906133e5565b610fcd565b005b3480156104cd57600080fd5b506104e860048036038101906104e391906134d3565b611295565b6040516104f59190613f86565b60405180910390f35b34801561050a57600080fd5b506105256004803603810190610520919061319b565b6112e6565b6040516105329190613bc9565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d91906134d3565b61146f565b60405161056f9190613b10565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613452565b61152c565b005b3480156105ad57600080fd5b506105c860048036038101906105c39190613141565b6115d2565b6040516105d59190613f86565b60405180910390f35b3480156105ea57600080fd5b506105f36116ee565b005b34801561060157600080fd5b5061061c600480360381019061061791906134d3565b611776565b6040516106299190613b10565b60405180910390f35b34801561063e57600080fd5b506106476117be565b6040516106549190613b10565b60405180910390f35b34801561066957600080fd5b506106726117e8565b60405161067f9190613be4565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613141565b61187a565b6040516106bc9190613f86565b60405180910390f35b3480156106d157600080fd5b506106da6118c3565b6040516106e79190613f86565b60405180910390f35b61070a600480360381019061070591906134d3565b6118c9565b005b34801561071857600080fd5b50610733600480360381019061072e91906132b1565b611a8e565b005b34801561074157600080fd5b5061074a611c0f565b6040516107579190613b10565b60405180910390f35b34801561076c57600080fd5b506107876004803603810190610782919061322e565b611c39565b005b34801561079557600080fd5b506107b060048036038101906107ab91906134d3565b611c9b565b6040516107bd9190613be4565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613141565b611d1a565b6040516107fa9190613f86565b60405180910390f35b34801561080f57600080fd5b5061082a600480360381019061082591906133b8565b611d63565b6040516108379190613f86565b60405180910390f35b34801561084c57600080fd5b50610855611dac565b6040516108629190613f86565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d919061319b565b611db6565b60405161089f9190613bc9565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190613141565b611ddb565b005b3480156108dd57600080fd5b506108e6611ed3565b6040516108f39190613f86565b60405180910390f35b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610977575061097682611ed9565b5b9050919050565b60606000805461098d90614291565b80601f01602080910402602001604051908101604052809291908181526020018280546109b990614291565b8015610a065780601f106109db57610100808354040283529160200191610a06565b820191906000526020600020905b8154815290600101906020018083116109e957829003601f168201915b5050505050905090565b6000610a1b82611fbb565b610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190613e26565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa08261146f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613ec6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b306108fc565b73ffffffffffffffffffffffffffffffffffffffff161480610b5f5750610b5e81610b596108fc565b611db6565b5b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590613d86565b60405180910390fd5b610ba88383612043565b505050565b60006001600280549050610bc1919061413b565b905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90613c86565b60405180910390fd5b6000610c52611dac565b47610c5d919061405a565b90506000610c748383610c6f8661187a565b6120fc565b90506000811415610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613d66565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d09919061405a565b925050819055508060086000828254610d22919061405a565b92505081905550610d33838261216a565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568382604051610d64929190613b2b565b60405180910390a1505050565b610d82610d7c6108fc565b8261225e565b610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890613ee6565b60405180910390fd5b610dcc83838361233c565b505050565b6000610ddc836115d2565b8210610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613c06565b60405180910390fd5b6000805b600280549050811015610ed45760028181548110610e4257610e416143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610ec15783821415610eb2578092505050610f10565b8180610ebd906142f4565b9250505b8080610ecc906142f4565b915050610e21565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790613c06565b60405180910390fd5b92915050565b6108ae81565b6000600754905090565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610fc883838360405180602001604052806000815250611c39565b505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613c86565b60405180910390fd5b600061105a83611d63565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110939190613b10565b60206040518083038186803b1580156110ab57600080fd5b505afa1580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e39190613500565b6110ed919061405a565b9050600061110583836111008787610f26565b6120fc565b9050600081141561114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613d66565b60405180910390fd5b80600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111d7919061405a565b9250508190555080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122d919061405a565b9250508190555061123f8484836124f5565b8373ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a8483604051611287929190613ba0565b60405180910390a250505050565b600060028054905082106112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613f46565b60405180910390fd5b819050919050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114635760014614806113515750600446145b15611415578273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016113a69190613b10565b60206040518083038186803b1580156113be57600080fd5b505afa1580156113d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f69190613425565b73ffffffffffffffffffffffffffffffffffffffff1614915050611469565b608946148061142657506201388146145b15611462578273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614915050611469565b5b60009150505b92915050565b60008060028381548110611486576114856143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90613dc6565b60405180910390fd5b80915050919050565b6115346108fc565b73ffffffffffffffffffffffffffffffffffffffff166115526117be565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613e66565b60405180910390fd5b8383600e91906115b9929190612f06565b508181600f91906115cb929190612f06565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613da6565b60405180910390fd5b6000805b6002805490508110156116e45760028181548110611668576116676143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116d357816116d0906142f4565b91505b806116dd906142f4565b9050611647565b5080915050919050565b6116f66108fc565b73ffffffffffffffffffffffffffffffffffffffff166117146117be565b73ffffffffffffffffffffffffffffffffffffffff161461176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176190613e66565b60405180910390fd5b611774600061257b565b565b6000600b828154811061178c5761178b6143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117f790614291565b80601f016020809104026020016040519081016040528092919081815260200182805461182390614291565b80156118705780601f1061184557610100808354040283529160200191611870565b820191906000526020600020905b81548152906001019060200180831161185357829003601f168201915b5050505050905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60105481565b60115481111561190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613e46565b60405180910390fd5b600060028054905090506108ae8282611927919061405a565b10611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613f26565b60405180910390fd5b6101c58110801561198457506101c58282611982919061405a565b115b156119fb5760006101c5838361199a919061405a565b6119a4919061413b565b905034601054826119b591906140e1565b146119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90613de6565b60405180910390fd5b50611a55565b6101c58110611a54573460105483611a1391906140e1565b14611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613de6565b60405180910390fd5b5b5b60005b82811015611a8957611a76338380611a6f906142f4565b9450612641565b8080611a81906142f4565b915050611a58565b505050565b611a966108fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613cc6565b60405180910390fd5b8060046000611b116108fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bbe6108fc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c039190613bc9565b60405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c4a611c446108fc565b8361225e565b611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613ee6565b60405180910390fd5b611c958484848461265f565b50505050565b6060611ca682611fbb565b611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90613ea6565b60405180910390fd5b600e611cf0836126bb565b600f604051602001611d0493929190613aca565b6040516020818303038152906040529050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600854905090565b6000611dc2838361281c565b80611dd35750611dd283836112e6565b5b905092915050565b611de36108fc565b73ffffffffffffffffffffffffffffffffffffffff16611e016117be565b73ffffffffffffffffffffffffffffffffffffffff1614611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe90613c46565b60405180910390fd5b611ed08161257b565b50565b60115481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fa457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fb45750611fb3826128b0565b5b9050919050565b60006002805490508210801561203c5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611ff857611ff76143fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120b68361146f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600754600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548561214d91906140e1565b61215791906140b0565b612161919061413b565b90509392505050565b804710156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613d06565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121d390613afb565b60006040518083038185875af1925050503d8060008114612210576040519150601f19603f3d011682016040523d82523d6000602084013e612215565b606091505b5050905080612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090613ce6565b60405180910390fd5b505050565b600061226982611fbb565b6122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f90613d46565b60405180910390fd5b60006122b38361146f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061232257508373ffffffffffffffffffffffffffffffffffffffff1661230a84610a10565b73ffffffffffffffffffffffffffffffffffffffff16145b8061233357506123328185611db6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661235c8261146f565b73ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990613e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241990613ca6565b60405180910390fd5b61242d83838361291a565b612438600082612043565b816002828154811061244d5761244c6143fb565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6125768363a9059cbb60e01b8484604051602401612514929190613ba0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061291f565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61265b8282604051806020016040528060008152506129e6565b5050565b61266a84848461233c565b61267684848484612a41565b6126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90613c26565b60405180910390fd5b50505050565b60606000821415612703576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612817565b600082905060005b6000821461273557808061271e906142f4565b915050600a8261272e91906140b0565b915061270b565b60008167ffffffffffffffff8111156127515761275061442a565b5b6040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b5090505b600085146128105760018261279c919061413b565b9150600a856127ab919061433d565b60306127b7919061405a565b60f81b8183815181106127cd576127cc6143fb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561280991906140b0565b9450612787565b8093505050505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6000612981826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bd89092919063ffffffff16565b90506000815111156129e157808060200190518101906129a19190613331565b6129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790613f66565b60405180910390fd5b5b505050565b6129f08383612bf0565b6129fd6000848484612a41565b612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3390613c26565b60405180910390fd5b505050565b6000612a628473ffffffffffffffffffffffffffffffffffffffff16612d78565b15612bcb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a8b6108fc565b8786866040518563ffffffff1660e01b8152600401612aad9493929190613b54565b602060405180830381600087803b158015612ac757600080fd5b505af1925050508015612af857506040513d601f19601f82011682018060405250810190612af5919061338b565b60015b612b7b573d8060008114612b28576040519150601f19603f3d011682016040523d82523d6000602084013e612b2d565b606091505b50600081511415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90613c26565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bd0565b600190505b949350505050565b6060612be78484600085612d8b565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5790613e06565b60405180910390fd5b612c6981611fbb565b15612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090613c66565b60405180910390fd5b612cb56000838361291a565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606082471015612dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc790613d26565b60405180910390fd5b612dd985612d78565b612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f90613f06565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612e419190613ab3565b60006040518083038185875af1925050503d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b5091509150612e93828286612e9f565b92505050949350505050565b60608315612eaf57829050612eff565b600083511115612ec25782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef69190613be4565b60405180910390fd5b9392505050565b828054612f1290614291565b90600052602060002090601f016020900481019282612f345760008555612f7b565b82601f10612f4d57803560ff1916838001178555612f7b565b82800160010185558215612f7b579182015b82811115612f7a578235825591602001919060010190612f5f565b5b509050612f889190612f8c565b5090565b5b80821115612fa5576000816000905550600101612f8d565b5090565b6000612fbc612fb784613fc6565b613fa1565b905082815260208101848484011115612fd857612fd7614468565b5b612fe384828561424f565b509392505050565b600081359050612ffa81614bd9565b92915050565b60008135905061300f81614bf0565b92915050565b60008135905061302481614c07565b92915050565b60008151905061303981614c07565b92915050565b60008135905061304e81614c1e565b92915050565b60008151905061306381614c1e565b92915050565b600082601f83011261307e5761307d61445e565b5b813561308e848260208601612fa9565b91505092915050565b6000813590506130a681614c35565b92915050565b6000815190506130bb81614c4c565b92915050565b60008083601f8401126130d7576130d661445e565b5b8235905067ffffffffffffffff8111156130f4576130f3614459565b5b6020830191508360018202830111156131105761310f614463565b5b9250929050565b60008135905061312681614c63565b92915050565b60008151905061313b81614c63565b92915050565b60006020828403121561315757613156614472565b5b600061316584828501612feb565b91505092915050565b60006020828403121561318457613183614472565b5b600061319284828501613000565b91505092915050565b600080604083850312156131b2576131b1614472565b5b60006131c085828601612feb565b92505060206131d185828601612feb565b9150509250929050565b6000806000606084860312156131f4576131f3614472565b5b600061320286828701612feb565b935050602061321386828701612feb565b925050604061322486828701613117565b9150509250925092565b6000806000806080858703121561324857613247614472565b5b600061325687828801612feb565b945050602061326787828801612feb565b935050604061327887828801613117565b925050606085013567ffffffffffffffff8111156132995761329861446d565b5b6132a587828801613069565b91505092959194509250565b600080604083850312156132c8576132c7614472565b5b60006132d685828601612feb565b92505060206132e785828601613015565b9150509250929050565b6000806040838503121561330857613307614472565b5b600061331685828601612feb565b925050602061332785828601613117565b9150509250929050565b60006020828403121561334757613346614472565b5b60006133558482850161302a565b91505092915050565b60006020828403121561337457613373614472565b5b60006133828482850161303f565b91505092915050565b6000602082840312156133a1576133a0614472565b5b60006133af84828501613054565b91505092915050565b6000602082840312156133ce576133cd614472565b5b60006133dc84828501613097565b91505092915050565b600080604083850312156133fc576133fb614472565b5b600061340a85828601613097565b925050602061341b85828601612feb565b9150509250929050565b60006020828403121561343b5761343a614472565b5b6000613449848285016130ac565b91505092915050565b6000806000806040858703121561346c5761346b614472565b5b600085013567ffffffffffffffff81111561348a5761348961446d565b5b613496878288016130c1565b9450945050602085013567ffffffffffffffff8111156134b9576134b861446d565b5b6134c5878288016130c1565b925092505092959194509250565b6000602082840312156134e9576134e8614472565b5b60006134f784828501613117565b91505092915050565b60006020828403121561351657613515614472565b5b60006135248482850161312c565b91505092915050565b61353681614219565b82525050565b6135458161416f565b82525050565b61355481614193565b82525050565b60006135658261400c565b61356f8185614022565b935061357f81856020860161425e565b61358881614477565b840191505092915050565b600061359e8261400c565b6135a88185614033565b93506135b881856020860161425e565b80840191505092915050565b60006135cf82614017565b6135d9818561403e565b93506135e981856020860161425e565b6135f281614477565b840191505092915050565b600061360882614017565b613612818561404f565b935061362281856020860161425e565b80840191505092915050565b6000815461363b81614291565b613645818661404f565b945060018216600081146136605760018114613671576136a4565b60ff198316865281860193506136a4565b61367a85613ff7565b60005b8381101561369c5781548189015260018201915060208101905061367d565b838801955050505b50505092915050565b60006136ba602b8361403e565b91506136c582614488565b604082019050919050565b60006136dd60328361403e565b91506136e8826144d7565b604082019050919050565b600061370060268361403e565b915061370b82614526565b604082019050919050565b6000613723601c8361403e565b915061372e82614575565b602082019050919050565b600061374660268361403e565b91506137518261459e565b604082019050919050565b600061376960248361403e565b9150613774826145ed565b604082019050919050565b600061378c60198361403e565b91506137978261463c565b602082019050919050565b60006137af603a8361403e565b91506137ba82614665565b604082019050919050565b60006137d2601d8361403e565b91506137dd826146b4565b602082019050919050565b60006137f560268361403e565b9150613800826146dd565b604082019050919050565b6000613818602c8361403e565b91506138238261472c565b604082019050919050565b600061383b602b8361403e565b91506138468261477b565b604082019050919050565b600061385e60388361403e565b9150613869826147ca565b604082019050919050565b6000613881602a8361403e565b915061388c82614819565b604082019050919050565b60006138a460298361403e565b91506138af82614868565b604082019050919050565b60006138c760178361403e565b91506138d2826148b7565b602082019050919050565b60006138ea60208361403e565b91506138f5826148e0565b602082019050919050565b600061390d602c8361403e565b915061391882614909565b604082019050919050565b6000613930601a8361403e565b915061393b82614958565b602082019050919050565b600061395360208361403e565b915061395e82614981565b602082019050919050565b600061397660298361403e565b9150613981826149aa565b604082019050919050565b6000613999602f8361403e565b91506139a4826149f9565b604082019050919050565b60006139bc60218361403e565b91506139c782614a48565b604082019050919050565b60006139df600083614033565b91506139ea82614a97565b600082019050919050565b6000613a0260318361403e565b9150613a0d82614a9a565b604082019050919050565b6000613a25601d8361403e565b9150613a3082614ae9565b602082019050919050565b6000613a4860128361403e565b9150613a5382614b12565b602082019050919050565b6000613a6b602c8361403e565b9150613a7682614b3b565b604082019050919050565b6000613a8e602a8361403e565b9150613a9982614b8a565b604082019050919050565b613aad8161420f565b82525050565b6000613abf8284613593565b915081905092915050565b6000613ad6828661362e565b9150613ae282856135fd565b9150613aee828461362e565b9150819050949350505050565b6000613b06826139d2565b9150819050919050565b6000602082019050613b25600083018461353c565b92915050565b6000604082019050613b40600083018561352d565b613b4d6020830184613aa4565b9392505050565b6000608082019050613b69600083018761353c565b613b76602083018661353c565b613b836040830185613aa4565b8181036060830152613b95818461355a565b905095945050505050565b6000604082019050613bb5600083018561353c565b613bc26020830184613aa4565b9392505050565b6000602082019050613bde600083018461354b565b92915050565b60006020820190508181036000830152613bfe81846135c4565b905092915050565b60006020820190508181036000830152613c1f816136ad565b9050919050565b60006020820190508181036000830152613c3f816136d0565b9050919050565b60006020820190508181036000830152613c5f816136f3565b9050919050565b60006020820190508181036000830152613c7f81613716565b9050919050565b60006020820190508181036000830152613c9f81613739565b9050919050565b60006020820190508181036000830152613cbf8161375c565b9050919050565b60006020820190508181036000830152613cdf8161377f565b9050919050565b60006020820190508181036000830152613cff816137a2565b9050919050565b60006020820190508181036000830152613d1f816137c5565b9050919050565b60006020820190508181036000830152613d3f816137e8565b9050919050565b60006020820190508181036000830152613d5f8161380b565b9050919050565b60006020820190508181036000830152613d7f8161382e565b9050919050565b60006020820190508181036000830152613d9f81613851565b9050919050565b60006020820190508181036000830152613dbf81613874565b9050919050565b60006020820190508181036000830152613ddf81613897565b9050919050565b60006020820190508181036000830152613dff816138ba565b9050919050565b60006020820190508181036000830152613e1f816138dd565b9050919050565b60006020820190508181036000830152613e3f81613900565b9050919050565b60006020820190508181036000830152613e5f81613923565b9050919050565b60006020820190508181036000830152613e7f81613946565b9050919050565b60006020820190508181036000830152613e9f81613969565b9050919050565b60006020820190508181036000830152613ebf8161398c565b9050919050565b60006020820190508181036000830152613edf816139af565b9050919050565b60006020820190508181036000830152613eff816139f5565b9050919050565b60006020820190508181036000830152613f1f81613a18565b9050919050565b60006020820190508181036000830152613f3f81613a3b565b9050919050565b60006020820190508181036000830152613f5f81613a5e565b9050919050565b60006020820190508181036000830152613f7f81613a81565b9050919050565b6000602082019050613f9b6000830184613aa4565b92915050565b6000613fab613fbc565b9050613fb782826142c3565b919050565b6000604051905090565b600067ffffffffffffffff821115613fe157613fe061442a565b5b613fea82614477565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140658261420f565b91506140708361420f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140a5576140a461436e565b5b828201905092915050565b60006140bb8261420f565b91506140c68361420f565b9250826140d6576140d561439d565b5b828204905092915050565b60006140ec8261420f565b91506140f78361420f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141305761412f61436e565b5b828202905092915050565b60006141468261420f565b91506141518361420f565b9250828210156141645761416361436e565b5b828203905092915050565b600061417a826141ef565b9050919050565b600061418c826141ef565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006141d68261416f565b9050919050565b60006141e88261416f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006142248261422b565b9050919050565b60006142368261423d565b9050919050565b6000614248826141ef565b9050919050565b82818337600083830152505050565b60005b8381101561427c578082015181840152602081019050614261565b8381111561428b576000848401525b50505050565b600060028204905060018216806142a957607f821691505b602082108114156142bd576142bc6143cc565b5b50919050565b6142cc82614477565b810181811067ffffffffffffffff821117156142eb576142ea61442a565b5b80604052505050565b60006142ff8261420f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143325761433161436e565b5b600182019050919050565b60006143488261420f565b91506143538361420f565b9250826143635761436261439d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f457863656564206d617820706572207472616e73616374696f6e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4d617820737570706c7920726561636865640000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b614be28161416f565b8114614bed57600080fd5b50565b614bf981614181565b8114614c0457600080fd5b50565b614c1081614193565b8114614c1b57600080fd5b50565b614c278161419f565b8114614c3257600080fd5b50565b614c3e816141cb565b8114614c4957600080fd5b50565b614c55816141dd565b8114614c6057600080fd5b50565b614c6c8161420f565b8114614c7757600080fd5b5056fea2646970667358221220022d13c06c6054091d4d6d2c6dbd33f234c379c66462932e1c5cb9ba89fd48ea64736f6c63430008070033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000cd21906bd3b55daf2dfcbf1d15f881951bfa50200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : openSeaProxyRegistry (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : _payees (address[]): 0x0CD21906bd3B55DaF2DFcbF1D15F881951BFa502
Arg [2] : _shares (uint256[]): 1

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000cd21906bd3b55daf2dfcbf1d15f881951bfa502
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed Bytecode Sourcemap

53875:2295:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22425:40;22441:12;:10;:12::i;:::-;22455:9;22425:40;;;;;;;:::i;:::-;;;;;;;;53875:2295;;;;;52283:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41137:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41949:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41472:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52659:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24211:566;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43008:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53226:588;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54125:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22556:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23685:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43455:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25045:641;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52850:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5280:598;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40744:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55687:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40262:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28497:103;;;;;;;;;;;;;:::i;:::-;;23911:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27846:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41306:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23407:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54065:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54536:642;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42329:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5177:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43711:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55186:493;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23203:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22993:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22741:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55899:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28755:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54173:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18967:98;19020:7;19047:10;19040:17;;18967:98;:::o;52283:300::-;52430:4;52487:35;52472:50;;;:11;:50;;;;:103;;;;52539:36;52563:11;52539:23;:36::i;:::-;52472:103;52452:123;;52283:300;;;:::o;41137:100::-;41191:13;41224:5;41217:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41137:100;:::o;41949:308::-;42070:7;42117:16;42125:7;42117;:16::i;:::-;42095:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;42225:15;:24;42241:7;42225:24;;;;;;;;;;;;;;;;;;;;;42218:31;;41949:308;;;:::o;41472:411::-;41553:13;41569:23;41584:7;41569:14;:23::i;:::-;41553:39;;41617:5;41611:11;;:2;:11;;;;41603:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41711:5;41695:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;41720:37;41737:5;41744:12;:10;:12::i;:::-;41720:16;:37::i;:::-;41695:62;41673:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;41854:21;41863:2;41867:7;41854:8;:21::i;:::-;41542:341;41472:411;;:::o;52659:114::-;52720:7;52764:1;52747:7;:14;;;;:18;;;;:::i;:::-;52740:25;;52659:114;:::o;24211:566::-;24306:1;24287:7;:16;24295:7;24287:16;;;;;;;;;;;;;;;;:20;24279:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24363:21;24411:15;:13;:15::i;:::-;24387:21;:39;;;;:::i;:::-;24363:63;;24437:15;24455:58;24471:7;24480:13;24495:17;24504:7;24495:8;:17::i;:::-;24455:15;:58::i;:::-;24437:76;;24545:1;24534:7;:12;;24526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24629:7;24607:9;:18;24617:7;24607:18;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;24665:7;24647:14;;:25;;;;;;;:::i;:::-;;;;;;;;24685:35;24703:7;24712;24685:17;:35::i;:::-;24736:33;24752:7;24761;24736:33;;;;;;;:::i;:::-;;;;;;;;24268:509;;24211:566;:::o;43008:376::-;43217:41;43236:12;:10;:12::i;:::-;43250:7;43217:18;:41::i;:::-;43195:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43348:28;43358:4;43364:2;43368:7;43348:9;:28::i;:::-;43008:376;;;:::o;53226:588::-;53368:15;53431:16;53441:5;53431:9;:16::i;:::-;53423:5;:24;53401:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;53531:13;53560:9;53555:186;53575:7;:14;;;;53571:1;:18;53555:186;;;53624:7;53632:1;53624:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53615:19;;:5;:19;;;53611:119;;;53668:5;53659;:14;53655:59;;;53682:1;53675:8;;;;;;53655:59;53707:7;;;;;:::i;:::-;;;;53611:119;53591:3;;;;;:::i;:::-;;;;53555:186;;;;53753:53;;;;;;;;;;:::i;:::-;;;;;;;;53226:588;;;;;:::o;54125:41::-;54162:4;54125:41;:::o;22556:91::-;22600:7;22627:12;;22620:19;;22556:91;:::o;23685:135::-;23755:7;23782:14;:21;23797:5;23782:21;;;;;;;;;;;;;;;:30;23804:7;23782:30;;;;;;;;;;;;;;;;23775:37;;23685:135;;;;:::o;43455:185::-;43593:39;43610:4;43616:2;43620:7;43593:39;;;;;;;;;;;;:16;:39::i;:::-;43455:185;;;:::o;25045:641::-;25146:1;25127:7;:16;25135:7;25127:16;;;;;;;;;;;;;;;;:20;25119:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25203:21;25260:20;25274:5;25260:13;:20::i;:::-;25227:5;:15;;;25251:4;25227:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;25203:77;;25291:15;25309:65;25325:7;25334:13;25349:24;25358:5;25365:7;25349:8;:24::i;:::-;25309:15;:65::i;:::-;25291:83;;25406:1;25395:7;:12;;25387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25502:7;25468:14;:21;25483:5;25468:21;;;;;;;;;;;;;;;:30;25490:7;25468:30;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;25550:7;25520:19;:26;25540:5;25520:26;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;25570:47;25593:5;25600:7;25609;25570:22;:47::i;:::-;25654:5;25633:45;;;25661:7;25670;25633:45;;;;;;;:::i;:::-;;;;;;;;25108:578;;25045:641;;:::o;52850:292::-;52970:7;53025;:14;;;;53017:5;:22;52995:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;53129:5;53122:12;;52850:292;;;:::o;5280:598::-;5391:4;5413:22;5438:14;;;;;;;;;;;5413:39;;5495:1;5469:28;;:14;:28;;;5465:381;;5535:1;5518:13;:18;:40;;;;5557:1;5540:13;:18;5518:40;5514:321;;;5685:8;5607:86;;5629:14;5615:37;;;5653:5;5615:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5607:86;;;5579:114;;;;;5514:321;5736:3;5719:13;:20;:46;;;;5760:5;5743:13;:22;5719:46;5715:120;;;5811:8;5793:26;;:14;:26;;;5786:33;;;;;5715:120;5465:381;5865:5;5858:12;;;5280:598;;;;;:::o;40744:326::-;40861:7;40886:13;40902:7;40910;40902:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40886:32;;40968:1;40951:19;;:5;:19;;;;40929:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;41057:5;41050:12;;;40744:326;;;:::o;55687:204::-;28077:12;:10;:12::i;:::-;28066:23;;:7;:5;:7::i;:::-;:23;;;28058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55833:11:::1;;55817:13;:27;;;;;;;:::i;:::-;;55873:10;;55855:15;:28;;;;;;;:::i;:::-;;55687:204:::0;;;;:::o;40262:420::-;40379:7;40443:1;40426:19;;:5;:19;;;;40404:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;40528:13;40557:9;40552:100;40572:7;:14;;;;40568:1;:18;40552:100;;;40621:7;40629:1;40621:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40612:19;;:5;:19;;;40608:32;;;40633:7;;;;:::i;:::-;;;40608:32;40588:3;;;;:::i;:::-;;;40552:100;;;;40669:5;40662:12;;;40262:420;;;:::o;28497:103::-;28077:12;:10;:12::i;:::-;28066:23;;:7;:5;:7::i;:::-;:23;;;28058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28562:30:::1;28589:1;28562:18;:30::i;:::-;28497:103::o:0;23911:100::-;23962:7;23989;23997:5;23989:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23982:21;;23911:100;;;:::o;27846:87::-;27892:7;27919:6;;;;;;;;;;;27912:13;;27846:87;:::o;41306:104::-;41362:13;41395:7;41388:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41306:104;:::o;23407:109::-;23463:7;23490:9;:18;23500:7;23490:18;;;;;;;;;;;;;;;;23483:25;;23407:109;;;:::o;54065:39::-;;;;:::o;54536:642::-;54608:8;;54599:5;:17;;54591:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;54658:14;54675:7;:14;;;;54658:31;;54162:4;54717:5;54708:6;:14;;;;:::i;:::-;:27;54700:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;54782:3;54773:6;:12;:36;;;;;54806:3;54798:5;54789:6;:14;;;;:::i;:::-;:20;54773:36;54769:302;;;54826:16;54862:3;54854:5;54845:6;:14;;;;:::i;:::-;:20;;;;:::i;:::-;54826:39;;54908:9;54899:5;;54888:8;:16;;;;:::i;:::-;:29;54880:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;54811:146;54769:302;;;54977:3;54967:6;:13;54963:108;;55022:9;55013:5;;55005;:13;;;;:::i;:::-;:26;54997:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;54963:108;54769:302;55086:9;55081:90;55101:5;55097:1;:9;55081:90;;;55128:31;55138:10;55150:8;;;;;:::i;:::-;;;55128:9;:31::i;:::-;55108:3;;;;;:::i;:::-;;;;55081:90;;;;54580:598;54536:642;:::o;42329:327::-;42476:12;:10;:12::i;:::-;42464:24;;:8;:24;;;;42456:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42576:8;42531:18;:32;42550:12;:10;:12::i;:::-;42531:32;;;;;;;;;;;;;;;:42;42564:8;42531:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;42629:8;42600:48;;42615:12;:10;:12::i;:::-;42600:48;;;42639:8;42600:48;;;;;;:::i;:::-;;;;;;;;42329:327;;:::o;5177:95::-;5223:7;5250:14;;;;;;;;;;;5243:21;;5177:95;:::o;43711:365::-;43900:41;43919:12;:10;:12::i;:::-;43933:7;43900:18;:41::i;:::-;43878:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44029:39;44043:4;44049:2;44053:7;44062:5;44029:13;:39::i;:::-;43711:365;;;;:::o;55186:493::-;55306:13;55359:16;55367:7;55359;:16::i;:::-;55337:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;55545:13;55581:18;:7;:16;:18::i;:::-;55622:15;55506:150;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55461:210;;55186:493;;;:::o;23203:105::-;23257:7;23284;:16;23292:7;23284:16;;;;;;;;;;;;;;;;23277:23;;23203:105;;;:::o;22993:119::-;23051:7;23078:19;:26;23098:5;23078:26;;;;;;;;;;;;;;;;23071:33;;22993:119;;;:::o;22741:95::-;22787:7;22814:14;;22807:21;;22741:95;:::o;55899:268::-;56024:4;56066:39;56089:5;56096:8;56066:22;:39::i;:::-;:93;;;;56122:37;56143:5;56150:8;56122:20;:37::i;:::-;56066:93;56046:113;;55899:268;;;;:::o;28755:201::-;28077:12;:10;:12::i;:::-;28066:23;;:7;:5;:7::i;:::-;:23;;;28058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28864:1:::1;28844:22;;:8;:22;;;;28836:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28920:28;28939:8;28920:18;:28::i;:::-;28755:201:::0;:::o;54173:28::-;;;;:::o;39843:355::-;39990:4;40047:25;40032:40;;;:11;:40;;;;:105;;;;40104:33;40089:48;;;:11;:48;;;;40032:105;:158;;;;40154:36;40178:11;40154:23;:36::i;:::-;40032:158;40012:178;;39843:355;;;:::o;45623:155::-;45688:4;45722:7;:14;;;;45712:7;:24;:58;;;;;45768:1;45740:30;;:7;45748;45740:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;45712:58;45705:65;;45623:155;;;:::o;49648:174::-;49750:2;49723:15;:24;49739:7;49723:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;49806:7;49802:2;49768:46;;49777:23;49792:7;49777:14;:23::i;:::-;49768:46;;;;;;;;;;;;49648:174;;:::o;25864:248::-;26010:7;26089:15;26074:12;;26054:7;:16;26062:7;26054:16;;;;;;;;;;;;;;;;26038:13;:32;;;;:::i;:::-;26037:49;;;;:::i;:::-;:67;;;;:::i;:::-;26030:74;;25864:248;;;;;:::o;8286:317::-;8401:6;8376:21;:31;;8368:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8455:12;8473:9;:14;;8495:6;8473:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8454:52;;;8525:7;8517:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;8357:246;8286:317;;:::o;45945:452::-;46074:4;46118:16;46126:7;46118;:16::i;:::-;46096:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;46217:13;46233:23;46248:7;46233:14;:23::i;:::-;46217:39;;46286:5;46275:16;;:7;:16;;;:64;;;;46332:7;46308:31;;:20;46320:7;46308:11;:20::i;:::-;:31;;;46275:64;:113;;;;46356:32;46373:5;46380:7;46356:16;:32::i;:::-;46275:113;46267:122;;;45945:452;;;;:::o;48977:553::-;49150:4;49123:31;;:23;49138:7;49123:14;:23::i;:::-;:31;;;49101:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;49256:1;49242:16;;:2;:16;;;;49234:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49312:39;49333:4;49339:2;49343:7;49312:20;:39::i;:::-;49416:29;49433:1;49437:7;49416:8;:29::i;:::-;49475:2;49456:7;49464;49456:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;49514:7;49510:2;49495:27;;49504:4;49495:27;;;;;;;;;;;;48977:553;;;:::o;14992:211::-;15109:86;15129:5;15159:23;;;15184:2;15188:5;15136:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15109:19;:86::i;:::-;14992:211;;;:::o;29116:191::-;29190:16;29209:6;;;;;;;;;;;29190:25;;29235:8;29226:6;;:17;;;;;;;;;;;;;;;;;;29290:8;29259:40;;29280:8;29259:40;;;;;;;;;;;;29179:128;29116:191;:::o;46739:110::-;46815:26;46825:2;46829:7;46815:26;;;;;;;;;;;;:9;:26::i;:::-;46739:110;;:::o;44958:352::-;45115:28;45125:4;45131:2;45135:7;45115:9;:28::i;:::-;45176:48;45199:4;45205:2;45209:7;45218:5;45176:22;:48::i;:::-;45154:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;44958:352;;;;:::o;3262:723::-;3318:13;3548:1;3539:5;:10;3535:53;;;3566:10;;;;;;;;;;;;;;;;;;;;;3535:53;3598:12;3613:5;3598:20;;3629:14;3654:78;3669:1;3661:4;:9;3654:78;;3687:8;;;;;:::i;:::-;;;;3718:2;3710:10;;;;;:::i;:::-;;;3654:78;;;3742:19;3774:6;3764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3742:39;;3792:154;3808:1;3799:5;:10;3792:154;;3836:1;3826:11;;;;;:::i;:::-;;;3903:2;3895:5;:10;;;;:::i;:::-;3882:2;:24;;;;:::i;:::-;3869:39;;3852:6;3859;3852:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3932:2;3923:11;;;;;:::i;:::-;;;3792:154;;;3970:6;3956:21;;;;;3262:723;;;;:::o;42727:214::-;42869:4;42898:18;:25;42917:5;42898:25;;;;;;;;;;;;;;;:35;42924:8;42898:35;;;;;;;;;;;;;;;;;;;;;;;;;42891:42;;42727:214;;;;:::o;32127:157::-;32212:4;32251:25;32236:40;;;:11;:40;;;;32229:47;;32127:157;;;:::o;51939:126::-;;;;:::o;17565:716::-;17989:23;18015:69;18043:4;18015:69;;;;;;;;;;;;;;;;;18023:5;18015:27;;;;:69;;;;;:::i;:::-;17989:95;;18119:1;18099:10;:17;:21;18095:179;;;18196:10;18185:30;;;;;;;;;;;;:::i;:::-;18177:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18095:179;17635:646;17565:716;;:::o;47076:321::-;47206:18;47212:2;47216:7;47206:5;:18::i;:::-;47257:54;47288:1;47292:2;47296:7;47305:5;47257:22;:54::i;:::-;47235:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;47076:321;;;:::o;50387:980::-;50542:4;50563:15;:2;:13;;;:15::i;:::-;50559:801;;;50632:2;50616:36;;;50675:12;:10;:12::i;:::-;50710:4;50737:7;50767:5;50616:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;50595:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50991:1;50974:6;:13;:18;50970:320;;;51017:108;;;;;;;;;;:::i;:::-;;;;;;;;50970:320;51240:6;51234:13;51225:6;51221:2;51217:15;51210:38;50595:710;50865:41;;;50855:51;;;:6;:51;;;;50848:58;;;;;50559:801;51344:4;51337:11;;50387:980;;;;;;;:::o;9770:229::-;9907:12;9939:52;9961:6;9969:4;9975:1;9978:12;9939:21;:52::i;:::-;9932:59;;9770:229;;;;;:::o;47733:346::-;47827:1;47813:16;;:2;:16;;;;47805:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47886:16;47894:7;47886;:16::i;:::-;47885:17;47877:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47948:45;47977:1;47981:2;47985:7;47948:20;:45::i;:::-;48004:7;48017:2;48004:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48063:7;48059:2;48038:33;;48055:1;48038:33;;;;;;;;;;;;47733:346;;:::o;6964:387::-;7024:4;7232:12;7299:7;7287:20;7279:28;;7342:1;7335:4;:8;7328:15;;;6964:387;;;:::o;10890:510::-;11060:12;11118:5;11093:21;:30;;11085:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11185:18;11196:6;11185:10;:18::i;:::-;11177:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11251:12;11265:23;11292:6;:11;;11311:5;11318:4;11292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11250:73;;;;11341:51;11358:7;11367:10;11379:12;11341:16;:51::i;:::-;11334:58;;;;10890:510;;;;;;:::o;13576:712::-;13726:12;13755:7;13751:530;;;13786:10;13779:17;;;;13751:530;13920:1;13900:10;:17;:21;13896:374;;;14098:10;14092:17;14159:15;14146:10;14142:2;14138:19;14131:44;13896:374;14241:12;14234:20;;;;;;;;;;;:::i;:::-;;;;;;;;13576:712;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:155::-;622:5;660:6;647:20;638:29;;676:41;711:5;676:41;:::i;:::-;568:155;;;;:::o;729:133::-;772:5;810:6;797:20;788:29;;826:30;850:5;826:30;:::i;:::-;729:133;;;;:::o;868:137::-;922:5;953:6;947:13;938:22;;969:30;993:5;969:30;:::i;:::-;868:137;;;;:::o;1011:::-;1056:5;1094:6;1081:20;1072:29;;1110:32;1136:5;1110:32;:::i;:::-;1011:137;;;;:::o;1154:141::-;1210:5;1241:6;1235:13;1226:22;;1257:32;1283:5;1257:32;:::i;:::-;1154:141;;;;:::o;1314:338::-;1369:5;1418:3;1411:4;1403:6;1399:17;1395:27;1385:122;;1426:79;;:::i;:::-;1385:122;1543:6;1530:20;1568:78;1642:3;1634:6;1627:4;1619:6;1615:17;1568:78;:::i;:::-;1559:87;;1375:277;1314:338;;;;:::o;1658:165::-;1717:5;1755:6;1742:20;1733:29;;1771:46;1811:5;1771:46;:::i;:::-;1658:165;;;;:::o;1829:199::-;1914:5;1945:6;1939:13;1930:22;;1961:61;2016:5;1961:61;:::i;:::-;1829:199;;;;:::o;2048:553::-;2106:8;2116:6;2166:3;2159:4;2151:6;2147:17;2143:27;2133:122;;2174:79;;:::i;:::-;2133:122;2287:6;2274:20;2264:30;;2317:18;2309:6;2306:30;2303:117;;;2339:79;;:::i;:::-;2303:117;2453:4;2445:6;2441:17;2429:29;;2507:3;2499:4;2491:6;2487:17;2477:8;2473:32;2470:41;2467:128;;;2514:79;;:::i;:::-;2467:128;2048:553;;;;;:::o;2607:139::-;2653:5;2691:6;2678:20;2669:29;;2707:33;2734:5;2707:33;:::i;:::-;2607:139;;;;:::o;2752:143::-;2809:5;2840:6;2834:13;2825:22;;2856:33;2883:5;2856:33;:::i;:::-;2752:143;;;;:::o;2901:329::-;2960:6;3009:2;2997:9;2988:7;2984:23;2980:32;2977:119;;;3015:79;;:::i;:::-;2977:119;3135:1;3160:53;3205:7;3196:6;3185:9;3181:22;3160:53;:::i;:::-;3150:63;;3106:117;2901:329;;;;:::o;3236:345::-;3303:6;3352:2;3340:9;3331:7;3327:23;3323:32;3320:119;;;3358:79;;:::i;:::-;3320:119;3478:1;3503:61;3556:7;3547:6;3536:9;3532:22;3503:61;:::i;:::-;3493:71;;3449:125;3236:345;;;;:::o;3587:474::-;3655:6;3663;3712:2;3700:9;3691:7;3687:23;3683:32;3680:119;;;3718:79;;:::i;:::-;3680:119;3838:1;3863:53;3908:7;3899:6;3888:9;3884:22;3863:53;:::i;:::-;3853:63;;3809:117;3965:2;3991:53;4036:7;4027:6;4016:9;4012:22;3991:53;:::i;:::-;3981:63;;3936:118;3587:474;;;;;:::o;4067:619::-;4144:6;4152;4160;4209:2;4197:9;4188:7;4184:23;4180:32;4177:119;;;4215:79;;:::i;:::-;4177:119;4335:1;4360:53;4405:7;4396:6;4385:9;4381:22;4360:53;:::i;:::-;4350:63;;4306:117;4462:2;4488:53;4533:7;4524:6;4513:9;4509:22;4488:53;:::i;:::-;4478:63;;4433:118;4590:2;4616:53;4661:7;4652:6;4641:9;4637:22;4616:53;:::i;:::-;4606:63;;4561:118;4067:619;;;;;:::o;4692:943::-;4787:6;4795;4803;4811;4860:3;4848:9;4839:7;4835:23;4831:33;4828:120;;;4867:79;;:::i;:::-;4828:120;4987:1;5012:53;5057:7;5048:6;5037:9;5033:22;5012:53;:::i;:::-;5002:63;;4958:117;5114:2;5140:53;5185:7;5176:6;5165:9;5161:22;5140:53;:::i;:::-;5130:63;;5085:118;5242:2;5268:53;5313:7;5304:6;5293:9;5289:22;5268:53;:::i;:::-;5258:63;;5213:118;5398:2;5387:9;5383:18;5370:32;5429:18;5421:6;5418:30;5415:117;;;5451:79;;:::i;:::-;5415:117;5556:62;5610:7;5601:6;5590:9;5586:22;5556:62;:::i;:::-;5546:72;;5341:287;4692:943;;;;;;;:::o;5641:468::-;5706:6;5714;5763:2;5751:9;5742:7;5738:23;5734:32;5731:119;;;5769:79;;:::i;:::-;5731:119;5889:1;5914:53;5959:7;5950:6;5939:9;5935:22;5914:53;:::i;:::-;5904:63;;5860:117;6016:2;6042:50;6084:7;6075:6;6064:9;6060:22;6042:50;:::i;:::-;6032:60;;5987:115;5641:468;;;;;:::o;6115:474::-;6183:6;6191;6240:2;6228:9;6219:7;6215:23;6211:32;6208:119;;;6246:79;;:::i;:::-;6208:119;6366:1;6391:53;6436:7;6427:6;6416:9;6412:22;6391:53;:::i;:::-;6381:63;;6337:117;6493:2;6519:53;6564:7;6555:6;6544:9;6540:22;6519:53;:::i;:::-;6509:63;;6464:118;6115:474;;;;;:::o;6595:345::-;6662:6;6711:2;6699:9;6690:7;6686:23;6682:32;6679:119;;;6717:79;;:::i;:::-;6679:119;6837:1;6862:61;6915:7;6906:6;6895:9;6891:22;6862:61;:::i;:::-;6852:71;;6808:125;6595:345;;;;:::o;6946:327::-;7004:6;7053:2;7041:9;7032:7;7028:23;7024:32;7021:119;;;7059:79;;:::i;:::-;7021:119;7179:1;7204:52;7248:7;7239:6;7228:9;7224:22;7204:52;:::i;:::-;7194:62;;7150:116;6946:327;;;;:::o;7279:349::-;7348:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:119;;;7403:79;;:::i;:::-;7365:119;7523:1;7548:63;7603:7;7594:6;7583:9;7579:22;7548:63;:::i;:::-;7538:73;;7494:127;7279:349;;;;:::o;7634:355::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7881:1;7906:66;7964:7;7955:6;7944:9;7940:22;7906:66;:::i;:::-;7896:76;;7852:130;7634:355;;;;:::o;7995:500::-;8076:6;8084;8133:2;8121:9;8112:7;8108:23;8104:32;8101:119;;;8139:79;;:::i;:::-;8101:119;8259:1;8284:66;8342:7;8333:6;8322:9;8318:22;8284:66;:::i;:::-;8274:76;;8230:130;8399:2;8425:53;8470:7;8461:6;8450:9;8446:22;8425:53;:::i;:::-;8415:63;;8370:118;7995:500;;;;;:::o;8501:407::-;8599:6;8648:2;8636:9;8627:7;8623:23;8619:32;8616:119;;;8654:79;;:::i;:::-;8616:119;8774:1;8799:92;8883:7;8874:6;8863:9;8859:22;8799:92;:::i;:::-;8789:102;;8745:156;8501:407;;;;:::o;8914:874::-;9006:6;9014;9022;9030;9079:2;9067:9;9058:7;9054:23;9050:32;9047:119;;;9085:79;;:::i;:::-;9047:119;9233:1;9222:9;9218:17;9205:31;9263:18;9255:6;9252:30;9249:117;;;9285:79;;:::i;:::-;9249:117;9398:65;9455:7;9446:6;9435:9;9431:22;9398:65;:::i;:::-;9380:83;;;;9176:297;9540:2;9529:9;9525:18;9512:32;9571:18;9563:6;9560:30;9557:117;;;9593:79;;:::i;:::-;9557:117;9706:65;9763:7;9754:6;9743:9;9739:22;9706:65;:::i;:::-;9688:83;;;;9483:298;8914:874;;;;;;;:::o;9794:329::-;9853:6;9902:2;9890:9;9881:7;9877:23;9873:32;9870:119;;;9908:79;;:::i;:::-;9870:119;10028:1;10053:53;10098:7;10089:6;10078:9;10074:22;10053:53;:::i;:::-;10043:63;;9999:117;9794:329;;;;:::o;10129:351::-;10199:6;10248:2;10236:9;10227:7;10223:23;10219:32;10216:119;;;10254:79;;:::i;:::-;10216:119;10374:1;10399:64;10455:7;10446:6;10435:9;10431:22;10399:64;:::i;:::-;10389:74;;10345:128;10129:351;;;;:::o;10486:147::-;10581:45;10620:5;10581:45;:::i;:::-;10576:3;10569:58;10486:147;;:::o;10639:118::-;10726:24;10744:5;10726:24;:::i;:::-;10721:3;10714:37;10639:118;;:::o;10763:109::-;10844:21;10859:5;10844:21;:::i;:::-;10839:3;10832:34;10763:109;;:::o;10878:360::-;10964:3;10992:38;11024:5;10992:38;:::i;:::-;11046:70;11109:6;11104:3;11046:70;:::i;:::-;11039:77;;11125:52;11170:6;11165:3;11158:4;11151:5;11147:16;11125:52;:::i;:::-;11202:29;11224:6;11202:29;:::i;:::-;11197:3;11193:39;11186:46;;10968:270;10878:360;;;;:::o;11244:373::-;11348:3;11376:38;11408:5;11376:38;:::i;:::-;11430:88;11511:6;11506:3;11430:88;:::i;:::-;11423:95;;11527:52;11572:6;11567:3;11560:4;11553:5;11549:16;11527:52;:::i;:::-;11604:6;11599:3;11595:16;11588:23;;11352:265;11244:373;;;;:::o;11623:364::-;11711:3;11739:39;11772:5;11739:39;:::i;:::-;11794:71;11858:6;11853:3;11794:71;:::i;:::-;11787:78;;11874:52;11919:6;11914:3;11907:4;11900:5;11896:16;11874:52;:::i;:::-;11951:29;11973:6;11951:29;:::i;:::-;11946:3;11942:39;11935:46;;11715:272;11623:364;;;;:::o;11993:377::-;12099:3;12127:39;12160:5;12127:39;:::i;:::-;12182:89;12264:6;12259:3;12182:89;:::i;:::-;12175:96;;12280:52;12325:6;12320:3;12313:4;12306:5;12302:16;12280:52;:::i;:::-;12357:6;12352:3;12348:16;12341:23;;12103:267;11993:377;;;;:::o;12400:845::-;12503:3;12540:5;12534:12;12569:36;12595:9;12569:36;:::i;:::-;12621:89;12703:6;12698:3;12621:89;:::i;:::-;12614:96;;12741:1;12730:9;12726:17;12757:1;12752:137;;;;12903:1;12898:341;;;;12719:520;;12752:137;12836:4;12832:9;12821;12817:25;12812:3;12805:38;12872:6;12867:3;12863:16;12856:23;;12752:137;;12898:341;12965:38;12997:5;12965:38;:::i;:::-;13025:1;13039:154;13053:6;13050:1;13047:13;13039:154;;;13127:7;13121:14;13117:1;13112:3;13108:11;13101:35;13177:1;13168:7;13164:15;13153:26;;13075:4;13072:1;13068:12;13063:17;;13039:154;;;13222:6;13217:3;13213:16;13206:23;;12905:334;;12719:520;;12507:738;;12400:845;;;;:::o;13251:366::-;13393:3;13414:67;13478:2;13473:3;13414:67;:::i;:::-;13407:74;;13490:93;13579:3;13490:93;:::i;:::-;13608:2;13603:3;13599:12;13592:19;;13251:366;;;:::o;13623:::-;13765:3;13786:67;13850:2;13845:3;13786:67;:::i;:::-;13779:74;;13862:93;13951:3;13862:93;:::i;:::-;13980:2;13975:3;13971:12;13964:19;;13623:366;;;:::o;13995:::-;14137:3;14158:67;14222:2;14217:3;14158:67;:::i;:::-;14151:74;;14234:93;14323:3;14234:93;:::i;:::-;14352:2;14347:3;14343:12;14336:19;;13995:366;;;:::o;14367:::-;14509:3;14530:67;14594:2;14589:3;14530:67;:::i;:::-;14523:74;;14606:93;14695:3;14606:93;:::i;:::-;14724:2;14719:3;14715:12;14708:19;;14367:366;;;:::o;14739:::-;14881:3;14902:67;14966:2;14961:3;14902:67;:::i;:::-;14895:74;;14978:93;15067:3;14978:93;:::i;:::-;15096:2;15091:3;15087:12;15080:19;;14739:366;;;:::o;15111:::-;15253:3;15274:67;15338:2;15333:3;15274:67;:::i;:::-;15267:74;;15350:93;15439:3;15350:93;:::i;:::-;15468:2;15463:3;15459:12;15452:19;;15111:366;;;:::o;15483:::-;15625:3;15646:67;15710:2;15705:3;15646:67;:::i;:::-;15639:74;;15722:93;15811:3;15722:93;:::i;:::-;15840:2;15835:3;15831:12;15824:19;;15483:366;;;:::o;15855:::-;15997:3;16018:67;16082:2;16077:3;16018:67;:::i;:::-;16011:74;;16094:93;16183:3;16094:93;:::i;:::-;16212:2;16207:3;16203:12;16196:19;;15855:366;;;:::o;16227:::-;16369:3;16390:67;16454:2;16449:3;16390:67;:::i;:::-;16383:74;;16466:93;16555:3;16466:93;:::i;:::-;16584:2;16579:3;16575:12;16568:19;;16227:366;;;:::o;16599:::-;16741:3;16762:67;16826:2;16821:3;16762:67;:::i;:::-;16755:74;;16838:93;16927:3;16838:93;:::i;:::-;16956:2;16951:3;16947:12;16940:19;;16599:366;;;:::o;16971:::-;17113:3;17134:67;17198:2;17193:3;17134:67;:::i;:::-;17127:74;;17210:93;17299:3;17210:93;:::i;:::-;17328:2;17323:3;17319:12;17312:19;;16971:366;;;:::o;17343:::-;17485:3;17506:67;17570:2;17565:3;17506:67;:::i;:::-;17499:74;;17582:93;17671:3;17582:93;:::i;:::-;17700:2;17695:3;17691:12;17684:19;;17343:366;;;:::o;17715:::-;17857:3;17878:67;17942:2;17937:3;17878:67;:::i;:::-;17871:74;;17954:93;18043:3;17954:93;:::i;:::-;18072:2;18067:3;18063:12;18056:19;;17715:366;;;:::o;18087:::-;18229:3;18250:67;18314:2;18309:3;18250:67;:::i;:::-;18243:74;;18326:93;18415:3;18326:93;:::i;:::-;18444:2;18439:3;18435:12;18428:19;;18087:366;;;:::o;18459:::-;18601:3;18622:67;18686:2;18681:3;18622:67;:::i;:::-;18615:74;;18698:93;18787:3;18698:93;:::i;:::-;18816:2;18811:3;18807:12;18800:19;;18459:366;;;:::o;18831:::-;18973:3;18994:67;19058:2;19053:3;18994:67;:::i;:::-;18987:74;;19070:93;19159:3;19070:93;:::i;:::-;19188:2;19183:3;19179:12;19172:19;;18831:366;;;:::o;19203:::-;19345:3;19366:67;19430:2;19425:3;19366:67;:::i;:::-;19359:74;;19442:93;19531:3;19442:93;:::i;:::-;19560:2;19555:3;19551:12;19544:19;;19203:366;;;:::o;19575:::-;19717:3;19738:67;19802:2;19797:3;19738:67;:::i;:::-;19731:74;;19814:93;19903:3;19814:93;:::i;:::-;19932:2;19927:3;19923:12;19916:19;;19575:366;;;:::o;19947:::-;20089:3;20110:67;20174:2;20169:3;20110:67;:::i;:::-;20103:74;;20186:93;20275:3;20186:93;:::i;:::-;20304:2;20299:3;20295:12;20288:19;;19947:366;;;:::o;20319:::-;20461:3;20482:67;20546:2;20541:3;20482:67;:::i;:::-;20475:74;;20558:93;20647:3;20558:93;:::i;:::-;20676:2;20671:3;20667:12;20660:19;;20319:366;;;:::o;20691:::-;20833:3;20854:67;20918:2;20913:3;20854:67;:::i;:::-;20847:74;;20930:93;21019:3;20930:93;:::i;:::-;21048:2;21043:3;21039:12;21032:19;;20691:366;;;:::o;21063:::-;21205:3;21226:67;21290:2;21285:3;21226:67;:::i;:::-;21219:74;;21302:93;21391:3;21302:93;:::i;:::-;21420:2;21415:3;21411:12;21404:19;;21063:366;;;:::o;21435:::-;21577:3;21598:67;21662:2;21657:3;21598:67;:::i;:::-;21591:74;;21674:93;21763:3;21674:93;:::i;:::-;21792:2;21787:3;21783:12;21776:19;;21435:366;;;:::o;21807:398::-;21966:3;21987:83;22068:1;22063:3;21987:83;:::i;:::-;21980:90;;22079:93;22168:3;22079:93;:::i;:::-;22197:1;22192:3;22188:11;22181:18;;21807:398;;;:::o;22211:366::-;22353:3;22374:67;22438:2;22433:3;22374:67;:::i;:::-;22367:74;;22450:93;22539:3;22450:93;:::i;:::-;22568:2;22563:3;22559:12;22552:19;;22211:366;;;:::o;22583:::-;22725:3;22746:67;22810:2;22805:3;22746:67;:::i;:::-;22739:74;;22822:93;22911:3;22822:93;:::i;:::-;22940:2;22935:3;22931:12;22924:19;;22583:366;;;:::o;22955:::-;23097:3;23118:67;23182:2;23177:3;23118:67;:::i;:::-;23111:74;;23194:93;23283:3;23194:93;:::i;:::-;23312:2;23307:3;23303:12;23296:19;;22955:366;;;:::o;23327:::-;23469:3;23490:67;23554:2;23549:3;23490:67;:::i;:::-;23483:74;;23566:93;23655:3;23566:93;:::i;:::-;23684:2;23679:3;23675:12;23668:19;;23327:366;;;:::o;23699:::-;23841:3;23862:67;23926:2;23921:3;23862:67;:::i;:::-;23855:74;;23938:93;24027:3;23938:93;:::i;:::-;24056:2;24051:3;24047:12;24040:19;;23699:366;;;:::o;24071:118::-;24158:24;24176:5;24158:24;:::i;:::-;24153:3;24146:37;24071:118;;:::o;24195:271::-;24325:3;24347:93;24436:3;24427:6;24347:93;:::i;:::-;24340:100;;24457:3;24450:10;;24195:271;;;;:::o;24472:583::-;24694:3;24716:92;24804:3;24795:6;24716:92;:::i;:::-;24709:99;;24825:95;24916:3;24907:6;24825:95;:::i;:::-;24818:102;;24937:92;25025:3;25016:6;24937:92;:::i;:::-;24930:99;;25046:3;25039:10;;24472:583;;;;;;:::o;25061:379::-;25245:3;25267:147;25410:3;25267:147;:::i;:::-;25260:154;;25431:3;25424:10;;25061:379;;;:::o;25446:222::-;25539:4;25577:2;25566:9;25562:18;25554:26;;25590:71;25658:1;25647:9;25643:17;25634:6;25590:71;:::i;:::-;25446:222;;;;:::o;25674:348::-;25803:4;25841:2;25830:9;25826:18;25818:26;;25854:79;25930:1;25919:9;25915:17;25906:6;25854:79;:::i;:::-;25943:72;26011:2;26000:9;25996:18;25987:6;25943:72;:::i;:::-;25674:348;;;;;:::o;26028:640::-;26223:4;26261:3;26250:9;26246:19;26238:27;;26275:71;26343:1;26332:9;26328:17;26319:6;26275:71;:::i;:::-;26356:72;26424:2;26413:9;26409:18;26400:6;26356:72;:::i;:::-;26438;26506:2;26495:9;26491:18;26482:6;26438:72;:::i;:::-;26557:9;26551:4;26547:20;26542:2;26531:9;26527:18;26520:48;26585:76;26656:4;26647:6;26585:76;:::i;:::-;26577:84;;26028:640;;;;;;;:::o;26674:332::-;26795:4;26833:2;26822:9;26818:18;26810:26;;26846:71;26914:1;26903:9;26899:17;26890:6;26846:71;:::i;:::-;26927:72;26995:2;26984:9;26980:18;26971:6;26927:72;:::i;:::-;26674:332;;;;;:::o;27012:210::-;27099:4;27137:2;27126:9;27122:18;27114:26;;27150:65;27212:1;27201:9;27197:17;27188:6;27150:65;:::i;:::-;27012:210;;;;:::o;27228:313::-;27341:4;27379:2;27368:9;27364:18;27356:26;;27428:9;27422:4;27418:20;27414:1;27403:9;27399:17;27392:47;27456:78;27529:4;27520:6;27456:78;:::i;:::-;27448:86;;27228:313;;;;:::o;27547:419::-;27713:4;27751:2;27740:9;27736:18;27728:26;;27800:9;27794:4;27790:20;27786:1;27775:9;27771:17;27764:47;27828:131;27954:4;27828:131;:::i;:::-;27820:139;;27547:419;;;:::o;27972:::-;28138:4;28176:2;28165:9;28161:18;28153:26;;28225:9;28219:4;28215:20;28211:1;28200:9;28196:17;28189:47;28253:131;28379:4;28253:131;:::i;:::-;28245:139;;27972:419;;;:::o;28397:::-;28563:4;28601:2;28590:9;28586:18;28578:26;;28650:9;28644:4;28640:20;28636:1;28625:9;28621:17;28614:47;28678:131;28804:4;28678:131;:::i;:::-;28670:139;;28397:419;;;:::o;28822:::-;28988:4;29026:2;29015:9;29011:18;29003:26;;29075:9;29069:4;29065:20;29061:1;29050:9;29046:17;29039:47;29103:131;29229:4;29103:131;:::i;:::-;29095:139;;28822:419;;;:::o;29247:::-;29413:4;29451:2;29440:9;29436:18;29428:26;;29500:9;29494:4;29490:20;29486:1;29475:9;29471:17;29464:47;29528:131;29654:4;29528:131;:::i;:::-;29520:139;;29247:419;;;:::o;29672:::-;29838:4;29876:2;29865:9;29861:18;29853:26;;29925:9;29919:4;29915:20;29911:1;29900:9;29896:17;29889:47;29953:131;30079:4;29953:131;:::i;:::-;29945:139;;29672:419;;;:::o;30097:::-;30263:4;30301:2;30290:9;30286:18;30278:26;;30350:9;30344:4;30340:20;30336:1;30325:9;30321:17;30314:47;30378:131;30504:4;30378:131;:::i;:::-;30370:139;;30097:419;;;:::o;30522:::-;30688:4;30726:2;30715:9;30711:18;30703:26;;30775:9;30769:4;30765:20;30761:1;30750:9;30746:17;30739:47;30803:131;30929:4;30803:131;:::i;:::-;30795:139;;30522:419;;;:::o;30947:::-;31113:4;31151:2;31140:9;31136:18;31128:26;;31200:9;31194:4;31190:20;31186:1;31175:9;31171:17;31164:47;31228:131;31354:4;31228:131;:::i;:::-;31220:139;;30947:419;;;:::o;31372:::-;31538:4;31576:2;31565:9;31561:18;31553:26;;31625:9;31619:4;31615:20;31611:1;31600:9;31596:17;31589:47;31653:131;31779:4;31653:131;:::i;:::-;31645:139;;31372:419;;;:::o;31797:::-;31963:4;32001:2;31990:9;31986:18;31978:26;;32050:9;32044:4;32040:20;32036:1;32025:9;32021:17;32014:47;32078:131;32204:4;32078:131;:::i;:::-;32070:139;;31797:419;;;:::o;32222:::-;32388:4;32426:2;32415:9;32411:18;32403:26;;32475:9;32469:4;32465:20;32461:1;32450:9;32446:17;32439:47;32503:131;32629:4;32503:131;:::i;:::-;32495:139;;32222:419;;;:::o;32647:::-;32813:4;32851:2;32840:9;32836:18;32828:26;;32900:9;32894:4;32890:20;32886:1;32875:9;32871:17;32864:47;32928:131;33054:4;32928:131;:::i;:::-;32920:139;;32647:419;;;:::o;33072:::-;33238:4;33276:2;33265:9;33261:18;33253:26;;33325:9;33319:4;33315:20;33311:1;33300:9;33296:17;33289:47;33353:131;33479:4;33353:131;:::i;:::-;33345:139;;33072:419;;;:::o;33497:::-;33663:4;33701:2;33690:9;33686:18;33678:26;;33750:9;33744:4;33740:20;33736:1;33725:9;33721:17;33714:47;33778:131;33904:4;33778:131;:::i;:::-;33770:139;;33497:419;;;:::o;33922:::-;34088:4;34126:2;34115:9;34111:18;34103:26;;34175:9;34169:4;34165:20;34161:1;34150:9;34146:17;34139:47;34203:131;34329:4;34203:131;:::i;:::-;34195:139;;33922:419;;;:::o;34347:::-;34513:4;34551:2;34540:9;34536:18;34528:26;;34600:9;34594:4;34590:20;34586:1;34575:9;34571:17;34564:47;34628:131;34754:4;34628:131;:::i;:::-;34620:139;;34347:419;;;:::o;34772:::-;34938:4;34976:2;34965:9;34961:18;34953:26;;35025:9;35019:4;35015:20;35011:1;35000:9;34996:17;34989:47;35053:131;35179:4;35053:131;:::i;:::-;35045:139;;34772:419;;;:::o;35197:::-;35363:4;35401:2;35390:9;35386:18;35378:26;;35450:9;35444:4;35440:20;35436:1;35425:9;35421:17;35414:47;35478:131;35604:4;35478:131;:::i;:::-;35470:139;;35197:419;;;:::o;35622:::-;35788:4;35826:2;35815:9;35811:18;35803:26;;35875:9;35869:4;35865:20;35861:1;35850:9;35846:17;35839:47;35903:131;36029:4;35903:131;:::i;:::-;35895:139;;35622:419;;;:::o;36047:::-;36213:4;36251:2;36240:9;36236:18;36228:26;;36300:9;36294:4;36290:20;36286:1;36275:9;36271:17;36264:47;36328:131;36454:4;36328:131;:::i;:::-;36320:139;;36047:419;;;:::o;36472:::-;36638:4;36676:2;36665:9;36661:18;36653:26;;36725:9;36719:4;36715:20;36711:1;36700:9;36696:17;36689:47;36753:131;36879:4;36753:131;:::i;:::-;36745:139;;36472:419;;;:::o;36897:::-;37063:4;37101:2;37090:9;37086:18;37078:26;;37150:9;37144:4;37140:20;37136:1;37125:9;37121:17;37114:47;37178:131;37304:4;37178:131;:::i;:::-;37170:139;;36897:419;;;:::o;37322:::-;37488:4;37526:2;37515:9;37511:18;37503:26;;37575:9;37569:4;37565:20;37561:1;37550:9;37546:17;37539:47;37603:131;37729:4;37603:131;:::i;:::-;37595:139;;37322:419;;;:::o;37747:::-;37913:4;37951:2;37940:9;37936:18;37928:26;;38000:9;37994:4;37990:20;37986:1;37975:9;37971:17;37964:47;38028:131;38154:4;38028:131;:::i;:::-;38020:139;;37747:419;;;:::o;38172:::-;38338:4;38376:2;38365:9;38361:18;38353:26;;38425:9;38419:4;38415:20;38411:1;38400:9;38396:17;38389:47;38453:131;38579:4;38453:131;:::i;:::-;38445:139;;38172:419;;;:::o;38597:::-;38763:4;38801:2;38790:9;38786:18;38778:26;;38850:9;38844:4;38840:20;38836:1;38825:9;38821:17;38814:47;38878:131;39004:4;38878:131;:::i;:::-;38870:139;;38597:419;;;:::o;39022:::-;39188:4;39226:2;39215:9;39211:18;39203:26;;39275:9;39269:4;39265:20;39261:1;39250:9;39246:17;39239:47;39303:131;39429:4;39303:131;:::i;:::-;39295:139;;39022:419;;;:::o;39447:222::-;39540:4;39578:2;39567:9;39563:18;39555:26;;39591:71;39659:1;39648:9;39644:17;39635:6;39591:71;:::i;:::-;39447:222;;;;:::o;39675:129::-;39709:6;39736:20;;:::i;:::-;39726:30;;39765:33;39793:4;39785:6;39765:33;:::i;:::-;39675:129;;;:::o;39810:75::-;39843:6;39876:2;39870:9;39860:19;;39810:75;:::o;39891:307::-;39952:4;40042:18;40034:6;40031:30;40028:56;;;40064:18;;:::i;:::-;40028:56;40102:29;40124:6;40102:29;:::i;:::-;40094:37;;40186:4;40180;40176:15;40168:23;;39891:307;;;:::o;40204:141::-;40253:4;40276:3;40268:11;;40299:3;40296:1;40289:14;40333:4;40330:1;40320:18;40312:26;;40204:141;;;:::o;40351:98::-;40402:6;40436:5;40430:12;40420:22;;40351:98;;;:::o;40455:99::-;40507:6;40541:5;40535:12;40525:22;;40455:99;;;:::o;40560:168::-;40643:11;40677:6;40672:3;40665:19;40717:4;40712:3;40708:14;40693:29;;40560:168;;;;:::o;40734:147::-;40835:11;40872:3;40857:18;;40734:147;;;;:::o;40887:169::-;40971:11;41005:6;41000:3;40993:19;41045:4;41040:3;41036:14;41021:29;;40887:169;;;;:::o;41062:148::-;41164:11;41201:3;41186:18;;41062:148;;;;:::o;41216:305::-;41256:3;41275:20;41293:1;41275:20;:::i;:::-;41270:25;;41309:20;41327:1;41309:20;:::i;:::-;41304:25;;41463:1;41395:66;41391:74;41388:1;41385:81;41382:107;;;41469:18;;:::i;:::-;41382:107;41513:1;41510;41506:9;41499:16;;41216:305;;;;:::o;41527:185::-;41567:1;41584:20;41602:1;41584:20;:::i;:::-;41579:25;;41618:20;41636:1;41618:20;:::i;:::-;41613:25;;41657:1;41647:35;;41662:18;;:::i;:::-;41647:35;41704:1;41701;41697:9;41692:14;;41527:185;;;;:::o;41718:348::-;41758:7;41781:20;41799:1;41781:20;:::i;:::-;41776:25;;41815:20;41833:1;41815:20;:::i;:::-;41810:25;;42003:1;41935:66;41931:74;41928:1;41925:81;41920:1;41913:9;41906:17;41902:105;41899:131;;;42010:18;;:::i;:::-;41899:131;42058:1;42055;42051:9;42040:20;;41718:348;;;;:::o;42072:191::-;42112:4;42132:20;42150:1;42132:20;:::i;:::-;42127:25;;42166:20;42184:1;42166:20;:::i;:::-;42161:25;;42205:1;42202;42199:8;42196:34;;;42210:18;;:::i;:::-;42196:34;42255:1;42252;42248:9;42240:17;;42072:191;;;;:::o;42269:96::-;42306:7;42335:24;42353:5;42335:24;:::i;:::-;42324:35;;42269:96;;;:::o;42371:104::-;42416:7;42445:24;42463:5;42445:24;:::i;:::-;42434:35;;42371:104;;;:::o;42481:90::-;42515:7;42558:5;42551:13;42544:21;42533:32;;42481:90;;;:::o;42577:149::-;42613:7;42653:66;42646:5;42642:78;42631:89;;42577:149;;;:::o;42732:109::-;42782:7;42811:24;42829:5;42811:24;:::i;:::-;42800:35;;42732:109;;;:::o;42847:124::-;42912:7;42941:24;42959:5;42941:24;:::i;:::-;42930:35;;42847:124;;;:::o;42977:126::-;43014:7;43054:42;43047:5;43043:54;43032:65;;42977:126;;;:::o;43109:77::-;43146:7;43175:5;43164:16;;43109:77;;;:::o;43192:134::-;43250:9;43283:37;43314:5;43283:37;:::i;:::-;43270:50;;43192:134;;;:::o;43332:126::-;43382:9;43415:37;43446:5;43415:37;:::i;:::-;43402:50;;43332:126;;;:::o;43464:113::-;43514:9;43547:24;43565:5;43547:24;:::i;:::-;43534:37;;43464:113;;;:::o;43583:154::-;43667:6;43662:3;43657;43644:30;43729:1;43720:6;43715:3;43711:16;43704:27;43583:154;;;:::o;43743:307::-;43811:1;43821:113;43835:6;43832:1;43829:13;43821:113;;;43920:1;43915:3;43911:11;43905:18;43901:1;43896:3;43892:11;43885:39;43857:2;43854:1;43850:10;43845:15;;43821:113;;;43952:6;43949:1;43946:13;43943:101;;;44032:1;44023:6;44018:3;44014:16;44007:27;43943:101;43792:258;43743:307;;;:::o;44056:320::-;44100:6;44137:1;44131:4;44127:12;44117:22;;44184:1;44178:4;44174:12;44205:18;44195:81;;44261:4;44253:6;44249:17;44239:27;;44195:81;44323:2;44315:6;44312:14;44292:18;44289:38;44286:84;;;44342:18;;:::i;:::-;44286:84;44107:269;44056:320;;;:::o;44382:281::-;44465:27;44487:4;44465:27;:::i;:::-;44457:6;44453:40;44595:6;44583:10;44580:22;44559:18;44547:10;44544:34;44541:62;44538:88;;;44606:18;;:::i;:::-;44538:88;44646:10;44642:2;44635:22;44425:238;44382:281;;:::o;44669:233::-;44708:3;44731:24;44749:5;44731:24;:::i;:::-;44722:33;;44777:66;44770:5;44767:77;44764:103;;;44847:18;;:::i;:::-;44764:103;44894:1;44887:5;44883:13;44876:20;;44669:233;;;:::o;44908:176::-;44940:1;44957:20;44975:1;44957:20;:::i;:::-;44952:25;;44991:20;45009:1;44991:20;:::i;:::-;44986:25;;45030:1;45020:35;;45035:18;;:::i;:::-;45020:35;45076:1;45073;45069:9;45064:14;;44908:176;;;;:::o;45090:180::-;45138:77;45135:1;45128:88;45235:4;45232:1;45225:15;45259:4;45256:1;45249:15;45276:180;45324:77;45321:1;45314:88;45421:4;45418:1;45411:15;45445:4;45442:1;45435:15;45462:180;45510:77;45507:1;45500:88;45607:4;45604:1;45597:15;45631:4;45628:1;45621:15;45648:180;45696:77;45693:1;45686:88;45793:4;45790:1;45783:15;45817:4;45814:1;45807:15;45834:180;45882:77;45879:1;45872:88;45979:4;45976:1;45969:15;46003:4;46000:1;45993:15;46020:117;46129:1;46126;46119:12;46143:117;46252:1;46249;46242:12;46266:117;46375:1;46372;46365:12;46389:117;46498:1;46495;46488:12;46512:117;46621:1;46618;46611:12;46635:117;46744:1;46741;46734:12;46758:102;46799:6;46850:2;46846:7;46841:2;46834:5;46830:14;46826:28;46816:38;;46758:102;;;:::o;46866:230::-;47006:34;47002:1;46994:6;46990:14;46983:58;47075:13;47070:2;47062:6;47058:15;47051:38;46866:230;:::o;47102:237::-;47242:34;47238:1;47230:6;47226:14;47219:58;47311:20;47306:2;47298:6;47294:15;47287:45;47102:237;:::o;47345:225::-;47485:34;47481:1;47473:6;47469:14;47462:58;47554:8;47549:2;47541:6;47537:15;47530:33;47345:225;:::o;47576:178::-;47716:30;47712:1;47704:6;47700:14;47693:54;47576:178;:::o;47760:225::-;47900:34;47896:1;47888:6;47884:14;47877:58;47969:8;47964:2;47956:6;47952:15;47945:33;47760:225;:::o;47991:223::-;48131:34;48127:1;48119:6;48115:14;48108:58;48200:6;48195:2;48187:6;48183:15;48176:31;47991:223;:::o;48220:175::-;48360:27;48356:1;48348:6;48344:14;48337:51;48220:175;:::o;48401:245::-;48541:34;48537:1;48529:6;48525:14;48518:58;48610:28;48605:2;48597:6;48593:15;48586:53;48401:245;:::o;48652:179::-;48792:31;48788:1;48780:6;48776:14;48769:55;48652:179;:::o;48837:225::-;48977:34;48973:1;48965:6;48961:14;48954:58;49046:8;49041:2;49033:6;49029:15;49022:33;48837:225;:::o;49068:231::-;49208:34;49204:1;49196:6;49192:14;49185:58;49277:14;49272:2;49264:6;49260:15;49253:39;49068:231;:::o;49305:230::-;49445:34;49441:1;49433:6;49429:14;49422:58;49514:13;49509:2;49501:6;49497:15;49490:38;49305:230;:::o;49541:243::-;49681:34;49677:1;49669:6;49665:14;49658:58;49750:26;49745:2;49737:6;49733:15;49726:51;49541:243;:::o;49790:229::-;49930:34;49926:1;49918:6;49914:14;49907:58;49999:12;49994:2;49986:6;49982:15;49975:37;49790:229;:::o;50025:228::-;50165:34;50161:1;50153:6;50149:14;50142:58;50234:11;50229:2;50221:6;50217:15;50210:36;50025:228;:::o;50259:173::-;50399:25;50395:1;50387:6;50383:14;50376:49;50259:173;:::o;50438:182::-;50578:34;50574:1;50566:6;50562:14;50555:58;50438:182;:::o;50626:231::-;50766:34;50762:1;50754:6;50750:14;50743:58;50835:14;50830:2;50822:6;50818:15;50811:39;50626:231;:::o;50863:176::-;51003:28;50999:1;50991:6;50987:14;50980:52;50863:176;:::o;51045:182::-;51185:34;51181:1;51173:6;51169:14;51162:58;51045:182;:::o;51233:228::-;51373:34;51369:1;51361:6;51357:14;51350:58;51442:11;51437:2;51429:6;51425:15;51418:36;51233:228;:::o;51467:234::-;51607:34;51603:1;51595:6;51591:14;51584:58;51676:17;51671:2;51663:6;51659:15;51652:42;51467:234;:::o;51707:220::-;51847:34;51843:1;51835:6;51831:14;51824:58;51916:3;51911:2;51903:6;51899:15;51892:28;51707:220;:::o;51933:114::-;;:::o;52053:236::-;52193:34;52189:1;52181:6;52177:14;52170:58;52262:19;52257:2;52249:6;52245:15;52238:44;52053:236;:::o;52295:179::-;52435:31;52431:1;52423:6;52419:14;52412:55;52295:179;:::o;52480:168::-;52620:20;52616:1;52608:6;52604:14;52597:44;52480:168;:::o;52654:231::-;52794:34;52790:1;52782:6;52778:14;52771:58;52863:14;52858:2;52850:6;52846:15;52839:39;52654:231;:::o;52891:229::-;53031:34;53027:1;53019:6;53015:14;53008:58;53100:12;53095:2;53087:6;53083:15;53076:37;52891:229;:::o;53126:122::-;53199:24;53217:5;53199:24;:::i;:::-;53192:5;53189:35;53179:63;;53238:1;53235;53228:12;53179:63;53126:122;:::o;53254:138::-;53335:32;53361:5;53335:32;:::i;:::-;53328:5;53325:43;53315:71;;53382:1;53379;53372:12;53315:71;53254:138;:::o;53398:116::-;53468:21;53483:5;53468:21;:::i;:::-;53461:5;53458:32;53448:60;;53504:1;53501;53494:12;53448:60;53398:116;:::o;53520:120::-;53592:23;53609:5;53592:23;:::i;:::-;53585:5;53582:34;53572:62;;53630:1;53627;53620:12;53572:62;53520:120;:::o;53646:148::-;53732:37;53763:5;53732:37;:::i;:::-;53725:5;53722:48;53712:76;;53784:1;53781;53774:12;53712:76;53646:148;:::o;53800:178::-;53901:52;53947:5;53901:52;:::i;:::-;53894:5;53891:63;53881:91;;53968:1;53965;53958:12;53881:91;53800:178;:::o;53984:122::-;54057:24;54075:5;54057:24;:::i;:::-;54050:5;54047:35;54037:63;;54096:1;54093;54086:12;54037:63;53984:122;:::o

Swarm Source

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