STONER404 ($STONER)

Overview

TokenID

398

Total Transfers

-

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
STONER404

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2024-12-12
*/

//SPDX-License-Identifier: UNLICENSED AND MIT

pragma solidity ^0.8.0;


/**
 * @dev Standard signed math utilities missing in the Solidity language.
 */
library SignedMath {
    /**
     * @dev Returns the largest of two signed numbers.
     */
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two signed numbers.
     */
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)

/**
 * @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);
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)



/**
 * @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);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}



// "Fantom is Really Cool"
abstract contract STONER is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );

    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Total supply in NFT representation
    uint256 public immutable totalNativeSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;
    mapping(address => uint256[]) internal _contractOwned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    /// @dev Holds the IDs of NFTs that have been burned so that they can be re-used
    uint256[] public availableIds;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalNativeSupply = _totalNativeSupply;
        totalSupply = _totalNativeSupply * (10**decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    function totalAvailableIds() public view returns (uint256) {
        return availableIds.length;
    }

    function totalNFTsOwned(address owner) public view returns (uint256) {
        return _owned[owner].length;
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(address spender, uint256 amountOrId)
        public
        virtual
        returns (bool)
    {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public returns (bool) {
        uint256 allowed = allowance[from][msg.sender];

        require(allowed >= amount, "Not enough allowance.");

        if (allowed != type(uint256).max)
            allowance[from][msg.sender] = allowed - amount;

        _transfer(from, to, amount);
        return true;
    }

    /// @notice Function for fractional transfers
    function transfer(address to, uint256 amount)
        public
        virtual
        returns (bool)
    {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        _nftTransferFrom(msg.sender, from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        _nftTransferFrom(msg.sender, from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    // testing only: delete before deploy
    function contractTokenBalance(address _contract)
        public
        view
        returns (uint256)
    {
        return
            balanceOf[_contract] -
            (_contractOwned[_contract].length * _getUnit());
    }

    function contractNFTBalance(address _contract)
        public
        view
        returns (uint256)
    {
        return _contractOwned[_contract].length;
    }

    function enoughTokenBalance(address _contract, uint256 amount)
        public
        view
        returns (bool)
    {
        uint256 tokenBalance = balanceOf[_contract] -
            (_contractOwned[_contract].length * _getUnit());
        return tokenBalance >= amount;
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        _beforeTokenTransfer(from, to, amount);

        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        if (_isContract(from)) {
            uint256 tokenBalance = balanceBeforeSender -
                (_contractOwned[from].length * unit);
            require(tokenBalance >= amount, "Not enough token balance.");
        }

        balanceOf[from] -= amount;
        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        // Skip minting to smart contracts
        if (!_shouldSkip(from) || _owned[from].length > 0) {
            uint256 nftsToBurn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < nftsToBurn; i++) {
                _burnNFT(from);
            }
        }

        // Skip minting for certain addresses to save gas
        // Skip burning from smart contracts
        if (!_shouldSkip(to)) {
            uint256 nftsToMint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < nftsToMint; i++) {
                _mintNFT(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    function _mint(address recipient, uint256 quantity) internal {
        balanceOf[recipient] += quantity * _getUnit();

        for (uint256 index = 0; index < quantity; index++) {
            _mintNFT(recipient);
        }
    }

    function _nftTransferFrom(
        address msgSender,
        address from,
        address to,
        uint256 id
    ) internal {
        require(from == _ownerOf[id], "Sender is not owner of NFT.");
        require(to != address(0), "Cannot send to null address.");
        require(
            msgSender == from ||
                isApprovedForAll[from][msgSender] ||
                msgSender == getApproved[id],
            "Operator is not approved."
        );

        balanceOf[from] -= _getUnit();
        unchecked {
            balanceOf[to] += _getUnit();
        }

        _removeSpecificNFT(from, id);
        _deliverNFT(to, id);

        emit Transfer(from, to, id);
        emit ERC20Transfer(from, to, _getUnit());
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10**decimals;
    }

    function _mintNFT(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        uint256 id;

        if (availableIds.length == 0) {
            unchecked {
                minted++;
            }
            require(
                minted <= totalNativeSupply,
                "Cannot mint more than given supply."
            );
            id = minted;
        } else {
            id = availableIds[availableIds.length - 1];
            availableIds.pop();
        }

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _deliverNFT(to, id);

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

    function _burnNFT(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        // Indiscriminantly burn last NFT in list of owned NFTs for `from`
        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        availableIds.push(id);

        emit Transfer(from, address(0), id);
    }

    function _removeSpecificNFT(address from, uint256 id) private {
        uint256 lastId;
        if (_isContract(from)) {
            lastId = _contractOwned[from][_contractOwned[from].length - 1];
            _contractOwned[from][_ownedIndex[id]] = lastId;
            _contractOwned[from].pop();
        } else {
            lastId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[id]] = lastId;
            _owned[from].pop();
        }
        _ownedIndex[lastId] = _ownedIndex[id];
        delete getApproved[id];
    }

    function _deliverNFT(address to, uint256 id) private {
        _ownerOf[id] = to;
        if (_isContract(to)) {
            _contractOwned[to].push(id);
            _ownedIndex[id] = _contractOwned[to].length - 1;
        } else {
            _owned[to].push(id);
            _ownedIndex[id] = _owned[to].length - 1;
        }
    }

    function _setNameSymbol(string memory _name, string memory _symbol)
        internal
    {
        name = _name;
        symbol = _symbol;
    }

    function _shouldSkip(address a) private view returns (bool) {
        return whitelist[a] || _isContract(a);
    }

    function _isContract(address a) private view returns (bool result) {
        assembly {
            result := extcodesize(a)
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract STONER404 is STONER, ERC165 {
    string public baseTokenURI;

    uint256 public maxMintable;
    uint256 public royaltyAmount;
    uint256 public maxMintPerTx;

    uint256 public price;

    address public royaltyReceiver;

    mapping(uint256 => mapping(address => uint256)) public phaseMintsRemaining;

    uint256 public phases;
    uint256 public phaseDuration;
    bool public paused;

    bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;

    bool private _mintActive;
    uint256 public startTime;

    constructor(
        address _owner,
        uint256 _startTime
    ) STONER("STONER404", "$STONER", 18, 420, _owner) {
        balanceOf[_owner] = 0 ether;

        whitelist[_owner] = true;
        price = 10 ether;

        maxMintable = 420;
        royaltyAmount = 250;
        _mintActive = false;
        maxMintPerTx = 420;
        startTime = _startTime;
        paused = false;
        royaltyReceiver = _owner;

        baseTokenURI = "ipfs://bafybeibrmm2ovy7aj3sqng256u3bzc2lvtywsmast5glwxs63actlbkenq/";

        phaseDuration = 600; // 10 minutes for each phase
        phases = 2;
    }

    function tokenURI(uint256 id) public view override returns (string memory) {
        return string.concat(baseTokenURI, Strings.toString(id));
    }

    function hasPhaseAccess(
        uint256 phase,
        address account
    ) public view returns (bool) {
        return phaseMintsRemaining[phase][account] > 0;
    }

    function canMintAmountInPhase(
        uint256 phase,
        address account,
        uint256 quantity
    ) public view returns (bool) {
        return phaseMintsRemaining[phase][account] >= quantity;
    }

    function activePhase() public view returns (uint256) {
        if (!mintHasStarted()) {
            return 0;
        } else {
            uint256 secondsPastStart = block.timestamp - startTime;
            uint256 phase = (secondsPastStart / phaseDuration) + 1;

            if (phase > phases) {
                return phases + 1; // +1 for public
            } else {
                return phase;
            }
        }
    }

    function mintHasStarted() public view returns (bool) {
        return block.timestamp >= startTime;
    }

    function secondsUntilStart() public view returns (uint256) {
        if (!mintHasStarted()) {
            return startTime - block.timestamp;
        } else {
            return 0;
        }
    }

    function mintActive() public view returns (bool) {
        return _mintActive || (block.timestamp >= startTime); // use timer w/ability to override
    }

    function mint(uint256 quantity) public payable {
        require(mintActive(), "Minting is not active.");
        require(!paused);

        require(quantity <= maxMintPerTx, "Cannot mint that many at once.");
        require(minted + quantity <= maxMintable, "Finished minting.");
        require(msg.value >= (quantity * price), "Not enough FTM sent.");

        for (uint256 phase = 1; phase <= phases; phase++) {
            if (activePhase() == phase) {
                require(
                    canMintAmountInPhase(phase, msg.sender, quantity),
                    string.concat(
                        "Currently in phase ",
                        Strings.toString(phase),
                        "."
                    )
                );
                phaseMintsRemaining[phase][msg.sender] -= quantity;
            }
        }

        if (msg.value > 0) {
            payable(owner).transfer(msg.value);
        }

        _mint(msg.sender, quantity);
    }

    // ROYALTIES

    function royaltyInfo(
        uint256 _tokenId,
        uint256 _salePrice
    ) external view returns (address receiver, uint256 amount) {
        return (royaltyReceiver, ((_salePrice * royaltyAmount) / 10000));
    }

    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override(ERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == _INTERFACE_ID_ERC2981 ||
            super.supportsInterface(interfaceId);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        if (activePhase() <= phases) {
            // still within a mint phase
            require(
                from == owner || to == owner,
                "Cannot transfer until mint enters public."
            );
            return;
        } else if (
            block.timestamp < (startTime + (phases * phaseDuration) + 180)
        ) {
            // 3 minutes of anti-whale when trading goes live
            require(
                balanceOf[to] <= ((5 * totalSupply) / 1000),
                "No more than 0.5% at this stage."
            );
            return;
        }
    }

    // admin

    function ownerMint(address recipient, uint256 quantity) public onlyOwner {
        _mint(recipient, quantity);
    }

    function grantPhaseAccess(
        uint256 phase,
        address[] memory accounts,
        uint256 quantity
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            phaseMintsRemaining[phase][accounts[i]] += quantity;
        }
    }

    function setPaused(bool _paused) public onlyOwner {
        paused = _paused;
    }

    function setMintActive(bool mintActive_) public onlyOwner {
        _mintActive = mintActive_;
    }

    function setRoyaltyReceiver(address _receiver) public onlyOwner {
        royaltyReceiver = _receiver;
    }

    function setStartTime(uint256 _startTime) public onlyOwner {
        startTime = _startTime;
    }

    function setRoyaltyAmount(uint256 _royaltyAmount) public onlyOwner {
        royaltyAmount = _royaltyAmount;
    }

    function setBaseURI(string memory _baseURI) public onlyOwner {
        baseTokenURI = _baseURI;
    }

    function setMaxPerTx(uint256 _maxMintPerTx) public onlyOwner {
        maxMintPerTx = _maxMintPerTx;
    }

    function setPrice(uint256 _price) public onlyOwner {
        price = _price;
    }
}

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)


/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    /**
     * @dev The `value` string doesn't fit in the specified `length`.
     */
    error StringsInsufficientHexLength(uint256 value, uint256 length);

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        uint256 localValue = value;
        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_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
     * representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
    }

    /**
     * @dev Returns true if the two strings are equal.
     */
    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Muldiv operation overflow.
     */
    error MathOverflowedMulDiv();

    enum Rounding {
        Floor, // Toward negative infinity
        Ceil, // Toward positive infinity
        Trunc, // Toward zero
        Expand // Away from zero
    }

    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds towards infinity instead
     * of rounding towards zero.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            // Guarantee the same behavior as in a regular Solidity division.
            return a / b;
        }

        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
     * denominator == 0.
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
     * Uniswap Labs also under MIT license.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0 = x * y; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            if (denominator <= prod1) {
                revert MathOverflowedMulDiv();
            }

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.
            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.

            uint256 twos = denominator & (0 - denominator);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
            // works in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
     * towards zero.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
        }
    }

    /**
     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
     */
    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)



/**
 * @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`.
     *
     * 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;

    /**
     * @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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * 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 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 address zero.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

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

    /**
     * @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);
}

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)


/**
 * @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);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"activePhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"phase","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"canMintAmountInPhase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractNFTBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enoughTokenBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"phase","type":"uint256"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"grantPhaseAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"phase","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"hasPhaseAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"phaseMintsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondsUntilStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"mintActive_","type":"bool"}],"name":"setMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltyAmount","type":"uint256"}],"name":"setRoyaltyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"setRoyaltyReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","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":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAvailableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"totalNFTsOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNativeSupply","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60e06040523480156200001157600080fd5b50604051620067443803806200674483398181016040528101906200003791906200043e565b6040518060400160405280600981526020017f53544f4e455234303400000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f2453544f4e45520000000000000000000000000000000000000000000000000081525060126101a48580600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000111576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508460019081620001be9190620006f5565b508360029081620001d09190620006f5565b508260ff1660808160ff16815250508160c08181525050608051600a620001f891906200096c565b82620002059190620009bd565b60a0818152505050505050506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550678ac7230489e800006012819055506101a4600f8190555060fa6010819055506000601760016101000a81548160ff0219169083151502179055506101a4601181905550806018819055506000601760006101000a81548160ff02191690831515021790555081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060800160405280604381526020016200670160439139600e90816200037f9190620006f5565b506102586016819055506002601581905550505062000a08565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003cb826200039e565b9050919050565b620003dd81620003be565b8114620003e957600080fd5b50565b600081519050620003fd81620003d2565b92915050565b6000819050919050565b620004188162000403565b81146200042457600080fd5b50565b60008151905062000438816200040d565b92915050565b6000806040838503121562000458576200045762000399565b5b60006200046885828601620003ec565b92505060206200047b8582860162000427565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200050757607f821691505b6020821081036200051d576200051c620004bf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000548565b62000593868362000548565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005d6620005d0620005ca8462000403565b620005ab565b62000403565b9050919050565b6000819050919050565b620005f283620005b5565b6200060a6200060182620005dd565b84845462000555565b825550505050565b600090565b6200062162000612565b6200062e818484620005e7565b505050565b5b8181101562000656576200064a60008262000617565b60018101905062000634565b5050565b601f821115620006a5576200066f8162000523565b6200067a8462000538565b810160208510156200068a578190505b620006a2620006998562000538565b83018262000633565b50505b505050565b600082821c905092915050565b6000620006ca60001984600802620006aa565b1980831691505092915050565b6000620006e58383620006b7565b9150826002028217905092915050565b620007008262000485565b67ffffffffffffffff8111156200071c576200071b62000490565b5b620007288254620004ee565b620007358282856200065a565b600060209050601f8311600181146200076d576000841562000758578287015190505b620007648582620006d7565b865550620007d4565b601f1984166200077d8662000523565b60005b82811015620007a75784890151825560018201915060208501945060208101905062000780565b86831015620007c75784890151620007c3601f891682620006b7565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200086a57808604811115620008425762000841620007dc565b5b6001851615620008525780820291505b808102905062000862856200080b565b945062000822565b94509492505050565b60008262000885576001905062000958565b8162000895576000905062000958565b8160018114620008ae5760028114620008b957620008ef565b600191505062000958565b60ff841115620008ce57620008cd620007dc565b5b8360020a915084821115620008e857620008e7620007dc565b5b5062000958565b5060208310610133831016604e8410600b8410161715620009295782820a905083811115620009235762000922620007dc565b5b62000958565b62000938848484600162000818565b92509050818404811115620009525762000951620007dc565b5b81810290505b9392505050565b600060ff82169050919050565b6000620009798262000403565b915062000986836200095f565b9250620009b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000873565b905092915050565b6000620009ca8262000403565b9150620009d78362000403565b9250828202620009e78162000403565b9150828204841483151762000a015762000a00620007dc565b5b5092915050565b60805160a05160c051615cb462000a4d60003960008181611f420152613ca201526000818161153a01526138630152600081816119390152612da00152615cb46000f3fe60806040526004361061038c5760003560e01c80637c6e551d116101dc578063ac5553ce11610102578063d9adc191116100a0578063ee1cc9441161006f578063ee1cc94414610dd6578063ef1f3ebb14610dff578063f2fde38b14610e3c578063ff6728ad14610e655761038c565b8063d9adc19114610cf4578063dd62ed3e14610d31578063de7fcb1d14610d6e578063e985e9c514610d995761038c565b8063c6f6f216116100dc578063c6f6f21614610c26578063c87b56dd14610c4f578063d528d11814610c8c578063d547cfb714610cc95761038c565b8063ac5553ce14610ba7578063b76b8ced14610bd2578063b88d4fde14610bfd5761038c565b80639fbc87131161017a578063a22cb46511610149578063a22cb46514610adb578063a4fd255914610b04578063a9059cbb14610b2d578063a96fd9d514610b6a5761038c565b80639fbc871314610a3e578063a035b1fe14610a69578063a0712d6814610a94578063a21b5fe914610ab05761038c565b80638dc251e3116101b65780638dc251e31461098457806391b7f5ed146109ad57806395d89b41146109d65780639b19251a14610a015761038c565b80637c6e551d1461090357806381456f481461092e5780638da5cb5b146109595761038c565b80632a55205a116102c15780634f07de091161025f5780636352211e1161022e5780636352211e1461082157806366e3e5e41461085e57806370a082311461089b57806378e97925146108d85761038c565b80634f07de091461077b57806353d6fd59146107a457806355f804b3146107cd5780635c975abb146107f65761038c565b80633e0a322d1161029b5780633e0a322d146106d557806342842e0e146106fe578063484b973c146107275780634f02c420146107505761038c565b80632a55205a146106555780632b96895814610693578063313ce567146106aa5761038c565b80630e1b26c61161032e5780631ae24366116103085780631ae24366146105855780632154dc39146105c257806323b872dd146105ed57806325fd90f31461062a5761038c565b80630e1b26c61461050657806316c38b3c1461053157806318160ddd1461055a5761038c565b806306fdde031161036a57806306fdde0314610424578063081812fc1461044f578063095ea7b31461048c5780630ca793c3146104c95761038c565b806301ffc9a71461039157806304bdc76b146103ce578063051cbd24146103f9575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b391906145b7565b610ea2565b6040516103c591906145ff565b60405180910390f35b3480156103da57600080fd5b506103e3610fd3565b6040516103f09190614633565b60405180910390f35b34801561040557600080fd5b5061040e610fe0565b60405161041b9190614633565b60405180910390f35b34801561043057600080fd5b5061043961100b565b60405161044691906146de565b60405180910390f35b34801561045b57600080fd5b506104766004803603810190610471919061472c565b611099565b604051610483919061479a565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906147e1565b6110cc565b6040516104c091906145ff565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190614821565b6113c5565b6040516104fd91906145ff565b60405180910390f35b34801561051257600080fd5b5061051b611424565b6040516105289190614633565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906148a0565b611496565b005b34801561056657600080fd5b5061056f611538565b60405161057c9190614633565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906147e1565b61155c565b6040516105b991906145ff565b60405180910390f35b3480156105ce57600080fd5b506105d761160d565b6040516105e49190614633565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f91906148cd565b611613565b60405161062191906145ff565b60405180910390f35b34801561063657600080fd5b5061063f6117a4565b60405161064c91906145ff565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614920565b6117c8565b60405161068a929190614960565b60405180910390f35b34801561069f57600080fd5b506106a8611814565b005b3480156106b657600080fd5b506106bf611937565b6040516106cc91906149a5565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f7919061472c565b61195b565b005b34801561070a57600080fd5b50610725600480360381019061072091906148cd565b6119ea565b005b34801561073357600080fd5b5061074e600480360381019061074991906147e1565b611b1e565b005b34801561075c57600080fd5b50610765611bb1565b6040516107729190614633565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d919061472c565b611bb7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906149c0565b611c46565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190614b35565b611d26565b005b34801561080257600080fd5b5061080b611dbe565b60405161081891906145ff565b60405180910390f35b34801561082d57600080fd5b506108486004803603810190610843919061472c565b611dd1565b604051610855919061479a565b60405180910390f35b34801561086a57600080fd5b5061088560048036038101906108809190614b7e565b611e74565b6040516108929190614633565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190614b7e565b611f1c565b6040516108cf9190614633565b60405180910390f35b3480156108e457600080fd5b506108ed611f34565b6040516108fa9190614633565b60405180910390f35b34801561090f57600080fd5b50610918611f3a565b6040516109259190614633565b60405180910390f35b34801561093a57600080fd5b50610943611f40565b6040516109509190614633565b60405180910390f35b34801561096557600080fd5b5061096e611f64565b60405161097b919061479a565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190614b7e565b611f88565b005b3480156109b957600080fd5b506109d460048036038101906109cf919061472c565b612051565b005b3480156109e257600080fd5b506109eb6120e0565b6040516109f891906146de565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190614b7e565b61216e565b604051610a3591906145ff565b60405180910390f35b348015610a4a57600080fd5b50610a5361218e565b604051610a60919061479a565b60405180910390f35b348015610a7557600080fd5b50610a7e6121b4565b604051610a8b9190614633565b60405180910390f35b610aae6004803603810190610aa9919061472c565b6121ba565b005b348015610abc57600080fd5b50610ac561248f565b604051610ad291906145ff565b60405180910390f35b348015610ae757600080fd5b50610b026004803603810190610afd91906149c0565b61249c565b005b348015610b1057600080fd5b50610b2b6004803603810190610b269190614c73565b612599565b005b348015610b3957600080fd5b50610b546004803603810190610b4f91906147e1565b6126c4565b604051610b6191906145ff565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190614ce2565b6126d9565b604051610b9e91906145ff565b60405180910390f35b348015610bb357600080fd5b50610bbc612736565b604051610bc99190614633565b60405180910390f35b348015610bde57600080fd5b50610be761273c565b604051610bf49190614633565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f9190614d7d565b612742565b005b348015610c3257600080fd5b50610c4d6004803603810190610c48919061472c565b61287c565b005b348015610c5b57600080fd5b50610c766004803603810190610c71919061472c565b61290b565b604051610c8391906146de565b60405180910390f35b348015610c9857600080fd5b50610cb36004803603810190610cae919061472c565b61293f565b604051610cc09190614633565b60405180910390f35b348015610cd557600080fd5b50610cde612963565b604051610ceb91906146de565b60405180910390f35b348015610d0057600080fd5b50610d1b6004803603810190610d169190614b7e565b6129f1565b604051610d289190614633565b60405180910390f35b348015610d3d57600080fd5b50610d586004803603810190610d539190614e05565b612a3d565b604051610d659190614633565b60405180910390f35b348015610d7a57600080fd5b50610d83612a62565b604051610d909190614633565b60405180910390f35b348015610da557600080fd5b50610dc06004803603810190610dbb9190614e05565b612a68565b604051610dcd91906145ff565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df891906148a0565b612a97565b005b348015610e0b57600080fd5b50610e266004803603810190610e219190614b7e565b612b39565b604051610e339190614633565b60405180910390f35b348015610e4857600080fd5b50610e636004803603810190610e5e9190614b7e565b612b85565b005b348015610e7157600080fd5b50610e8c6004803603810190610e879190614ce2565b612d0d565b604051610e999190614633565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f6d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fbc5750632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fcc5750610fcb82612d32565b5b9050919050565b6000600d80549050905090565b6000610fea61248f565b6110035742601854610ffc9190614e74565b9050611008565b600090505b90565b6001805461101890614ed7565b80601f016020809104026020016040519081016040528092919081815260200182805461104490614ed7565b80156110915780601f1061106657610100808354040283529160200191611091565b820191906000526020600020905b81548152906001019060200180831161107457829003601f168201915b505050505081565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060035482111580156110e05750600082115b156112d45760006008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156111e05750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611217576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112c69190614633565b60405180910390a3506113bb565b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113b29190614633565b60405180910390a35b6001905092915050565b6000816014600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101590509392505050565b600061142e61248f565b61143b5760009050611493565b60006018544261144b9190614e74565b9050600060016016548361145f9190614f37565b6114699190614f68565b905060155481111561148d5760016015546114849190614f68565b92505050611493565b80925050505b90565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611567612d9c565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506115b49190614f9c565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115fe9190614e74565b90508281101591505092915050565b600f5481565b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf9061502a565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461178c57828161170b9190614e74565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611797858585612dd0565b5060019150509392505050565b6000601760019054906101000a900460ff16806117c357506018544210155b905090565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710601054856117ff9190614f9c565b6118099190614f37565b915091509250929050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611899576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060188190555050565b6119f6338484846131be565b60008273ffffffffffffffffffffffffffffffffffffffff163b14158015611ae2575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611a7d93929190615081565b6020604051808303816000875af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac091906150e0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611b19576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bad82826135c8565b5050565b60035481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060108190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dab576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e9081611dba91906152b9565b5050565b601760009054906101000a900460ff1681565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e6f576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000611e7e612d9c565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611ecb9190614f9c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f159190614e74565b9050919050565b60046020528060005260406000206000915090505481565b60185481565b60105481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461200d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120d6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060128190555050565b600280546120ed90614ed7565b80601f016020809104026020016040519081016040528092919081815260200182805461211990614ed7565b80156121665780601f1061213b57610100808354040283529160200191612166565b820191906000526020600020905b81548152906001019060200180831161214957829003601f168201915b505050505081565b600c6020528060005260406000206000915054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6121c26117a4565b612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f8906153d7565b60405180910390fd5b601760009054906101000a900460ff161561221b57600080fd5b601154811115612260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225790615443565b60405180910390fd5b600f54816003546122719190614f68565b11156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906154af565b60405180910390fd5b601254816122c09190614f9c565b341015612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061551b565b60405180910390fd5b6000600190505b6015548111612410578061231b611424565b036123fd5761232b8133846113c5565b6123348261365c565b60405160200161234491906155c3565b60405160208183030381529060405290612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b91906146de565b60405180910390fd5b50816014600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f59190614e74565b925050819055505b8080612408906155f8565b915050612309565b5060003411156124825760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015612480573d6000803e3d6000fd5b505b61248c33826135c8565b50565b6000601854421015905090565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161258d91906145ff565b60405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461261e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156126be578160146000868152602001908152602001600020600085848151811061265357612652615640565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a49190614f68565b9250508190555080806126b6906155f8565b915050612621565b50505050565b60006126d1338484612dd0565b905092915050565b6000806014600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905092915050565b60165481565b60155481565b61274e338686866131be565b60008473ffffffffffffffffffffffffffffffffffffffff163b1415801561283e575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016127d995949392919061569c565b6020604051808303816000875af11580156127f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281c91906150e0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15612875576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612901576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060118190555050565b6060600e6129188361365c565b60405160200161292992919061576d565b6040516020818303038152906040529050919050565b600d818154811061294f57600080fd5b906000526020600020016000915090505481565b600e805461297090614ed7565b80601f016020809104026020016040519081016040528092919081815260200182805461299c90614ed7565b80156129e95780601f106129be576101008083540402835291602001916129e9565b820191906000526020600020905b8154815290600101906020018083116129cc57829003601f168201915b505050505081565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6005602052816000526040600020602052806000526040600020600091509150505481565b60115481565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b1c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c0a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6014602052816000526040600020602052806000526040600020600091509150505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000600a612dcb91906158c4565b905090565b6000612ddd84848461372a565b6000612de7612d9c565b90506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e7a87613924565b15612f2157600083600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612ecf9190614f9c565b83612eda9190614e74565b905085811015612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f169061595b565b60405180910390fd5b505b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f709190614e74565b9250508190555084600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fcd8761392f565b158061301b57506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b156130af57600083600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9190614f37565b84846130799190614f37565b6130839190614e74565b905060005b818110156130ac5761309989613995565b80806130a4906155f8565b915050613088565b50505b6130b88661392f565b61314b57600083826130ca9190614f37565b84600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131159190614f37565b61311f9190614e74565b905060005b818110156131485761313588613c1a565b8080613140906155f8565b915050613124565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516131a89190614633565b60405180910390a3600193505050509392505050565b6008600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461325f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613256906159c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c590615a33565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061338e5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133f757506006600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d90615a9f565b60405180910390fd5b61343e612d9c565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461348c9190614e74565b9250508190555061349b612d9c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506134f18382613e6d565b6134fb82826141f1565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876135ad612d9c565b6040516135ba9190614633565b60405180910390a350505050565b6135d0612d9c565b816135db9190614f9c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136299190614f68565b9250508190555060005b818110156136575761364483613c1a565b808061364f906155f8565b915050613633565b505050565b60606000600161366b846143f3565b01905060008167ffffffffffffffff81111561368a57613689614a0a565b5b6040519080825280601f01601f1916602001820160405280156136bc5781602001600182028036833780820191505090505b509050600082602001820190505b60011561371f578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161371357613712614f08565b5b049450600085036136ca575b819350505050919050565b613735838383614546565b601554613740611424565b1161382e5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806137ea575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b613829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382090615b31565b60405180910390fd5b61391f565b60b46016546015546138409190614f9c565b60185461384d9190614f68565b6138579190614f68565b42101561391e576103e87f0000000000000000000000000000000000000000000000000000000000000000600561388e9190614f9c565b6138989190614f37565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391090615b9d565b60405180910390fd5b61391f565b5b505050565b6000813b9050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061398e575061398d82613924565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036139fb576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613a8b9190614e74565b81548110613a9c57613a9b615640565b5b90600052602060002001549050600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480613af857613af7615bbd565b5b60019003818190600052602060002001600090559055600b6000828152602001908152602001600020600090556008600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600d81908060018154018082558091505060019003906000526020600020016000909190919091505580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613c80576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600d8054905003613d0f576003600081548092919060010191905055507f00000000000000000000000000000000000000000000000000000000000000006003541115613d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfc90615c5e565b60405180910390fd5b6003549050613d6a565b600d6001600d80549050613d239190614e74565b81548110613d3457613d33615640565b5b90600052602060002001549050600d805480613d5357613d52615bbd565b5b600190038181906000526020600020016000905590555b600073ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e03576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e0d82826141f1565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613e7883613924565b1561400657600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613f0b9190614e74565b81548110613f1c57613f1b615640565b5b9060005260206000200154905080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b60008581526020019081526020016000205481548110613f8e57613f8d615640565b5b9060005260206000200181905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480613feb57613fea615bbd565b5b6001900381819060005260206000200160009055905561418b565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506140949190614e74565b815481106140a5576140a4615640565b5b9060005260206000200154905080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b6000858152602001908152602001600020548154811061411757614116615640565b5b9060005260206000200181905550600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061417457614173615bbd565b5b600190038181906000526020600020016000905590555b600b600083815260200190815260200160002054600b6000838152602001908152602001600020819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061424c82613924565b1561432257600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506143069190614e74565b600b6000838152602001908152602001600020819055506143ef565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506143d79190614e74565b600b6000838152602001908152602001600020819055505b5050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614451577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161444757614446614f08565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061448e576d04ee2d6d415b85acef8100000000838161448457614483614f08565b5b0492506020810190505b662386f26fc1000083106144bd57662386f26fc1000083816144b3576144b2614f08565b5b0492506010810190505b6305f5e10083106144e6576305f5e10083816144dc576144db614f08565b5b0492506008810190505b612710831061450b57612710838161450157614500614f08565b5b0492506004810190505b6064831061452e576064838161452457614523614f08565b5b0492506002810190505b600a831061453d576001810190505b80915050919050565b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6145948161455f565b811461459f57600080fd5b50565b6000813590506145b18161458b565b92915050565b6000602082840312156145cd576145cc614555565b5b60006145db848285016145a2565b91505092915050565b60008115159050919050565b6145f9816145e4565b82525050565b600060208201905061461460008301846145f0565b92915050565b6000819050919050565b61462d8161461a565b82525050565b60006020820190506146486000830184614624565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561468857808201518184015260208101905061466d565b60008484015250505050565b6000601f19601f8301169050919050565b60006146b08261464e565b6146ba8185614659565b93506146ca81856020860161466a565b6146d381614694565b840191505092915050565b600060208201905081810360008301526146f881846146a5565b905092915050565b6147098161461a565b811461471457600080fd5b50565b60008135905061472681614700565b92915050565b60006020828403121561474257614741614555565b5b600061475084828501614717565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061478482614759565b9050919050565b61479481614779565b82525050565b60006020820190506147af600083018461478b565b92915050565b6147be81614779565b81146147c957600080fd5b50565b6000813590506147db816147b5565b92915050565b600080604083850312156147f8576147f7614555565b5b6000614806858286016147cc565b925050602061481785828601614717565b9150509250929050565b60008060006060848603121561483a57614839614555565b5b600061484886828701614717565b9350506020614859868287016147cc565b925050604061486a86828701614717565b9150509250925092565b61487d816145e4565b811461488857600080fd5b50565b60008135905061489a81614874565b92915050565b6000602082840312156148b6576148b5614555565b5b60006148c48482850161488b565b91505092915050565b6000806000606084860312156148e6576148e5614555565b5b60006148f4868287016147cc565b9350506020614905868287016147cc565b925050604061491686828701614717565b9150509250925092565b6000806040838503121561493757614936614555565b5b600061494585828601614717565b925050602061495685828601614717565b9150509250929050565b6000604082019050614975600083018561478b565b6149826020830184614624565b9392505050565b600060ff82169050919050565b61499f81614989565b82525050565b60006020820190506149ba6000830184614996565b92915050565b600080604083850312156149d7576149d6614555565b5b60006149e5858286016147cc565b92505060206149f68582860161488b565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a4282614694565b810181811067ffffffffffffffff82111715614a6157614a60614a0a565b5b80604052505050565b6000614a7461454b565b9050614a808282614a39565b919050565b600067ffffffffffffffff821115614aa057614a9f614a0a565b5b614aa982614694565b9050602081019050919050565b82818337600083830152505050565b6000614ad8614ad384614a85565b614a6a565b905082815260208101848484011115614af457614af3614a05565b5b614aff848285614ab6565b509392505050565b600082601f830112614b1c57614b1b614a00565b5b8135614b2c848260208601614ac5565b91505092915050565b600060208284031215614b4b57614b4a614555565b5b600082013567ffffffffffffffff811115614b6957614b6861455a565b5b614b7584828501614b07565b91505092915050565b600060208284031215614b9457614b93614555565b5b6000614ba2848285016147cc565b91505092915050565b600067ffffffffffffffff821115614bc657614bc5614a0a565b5b602082029050602081019050919050565b600080fd5b6000614bef614bea84614bab565b614a6a565b90508083825260208201905060208402830185811115614c1257614c11614bd7565b5b835b81811015614c3b5780614c2788826147cc565b845260208401935050602081019050614c14565b5050509392505050565b600082601f830112614c5a57614c59614a00565b5b8135614c6a848260208601614bdc565b91505092915050565b600080600060608486031215614c8c57614c8b614555565b5b6000614c9a86828701614717565b935050602084013567ffffffffffffffff811115614cbb57614cba61455a565b5b614cc786828701614c45565b9250506040614cd886828701614717565b9150509250925092565b60008060408385031215614cf957614cf8614555565b5b6000614d0785828601614717565b9250506020614d18858286016147cc565b9150509250929050565b600080fd5b60008083601f840112614d3d57614d3c614a00565b5b8235905067ffffffffffffffff811115614d5a57614d59614d22565b5b602083019150836001820283011115614d7657614d75614bd7565b5b9250929050565b600080600080600060808688031215614d9957614d98614555565b5b6000614da7888289016147cc565b9550506020614db8888289016147cc565b9450506040614dc988828901614717565b935050606086013567ffffffffffffffff811115614dea57614de961455a565b5b614df688828901614d27565b92509250509295509295909350565b60008060408385031215614e1c57614e1b614555565b5b6000614e2a858286016147cc565b9250506020614e3b858286016147cc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e7f8261461a565b9150614e8a8361461a565b9250828203905081811115614ea257614ea1614e45565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614eef57607f821691505b602082108103614f0257614f01614ea8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f428261461a565b9150614f4d8361461a565b925082614f5d57614f5c614f08565b5b828204905092915050565b6000614f738261461a565b9150614f7e8361461a565b9250828201905080821115614f9657614f95614e45565b5b92915050565b6000614fa78261461a565b9150614fb28361461a565b9250828202614fc08161461a565b91508282048414831517614fd757614fd6614e45565b5b5092915050565b7f4e6f7420656e6f75676820616c6c6f77616e63652e0000000000000000000000600082015250565b6000615014601583614659565b915061501f82614fde565b602082019050919050565b6000602082019050818103600083015261504381615007565b9050919050565b600082825260208201905092915050565b50565b600061506b60008361504a565b91506150768261505b565b600082019050919050565b6000608082019050615096600083018661478b565b6150a3602083018561478b565b6150b06040830184614624565b81810360608301526150c18161505e565b9050949350505050565b6000815190506150da8161458b565b92915050565b6000602082840312156150f6576150f5614555565b5b6000615104848285016150cb565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261516f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615132565b6151798683615132565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151b66151b16151ac8461461a565b615191565b61461a565b9050919050565b6000819050919050565b6151d08361519b565b6151e46151dc826151bd565b84845461513f565b825550505050565b600090565b6151f96151ec565b6152048184846151c7565b505050565b5b818110156152285761521d6000826151f1565b60018101905061520a565b5050565b601f82111561526d5761523e8161510d565b61524784615122565b81016020851015615256578190505b61526a61526285615122565b830182615209565b50505b505050565b600082821c905092915050565b600061529060001984600802615272565b1980831691505092915050565b60006152a9838361527f565b9150826002028217905092915050565b6152c28261464e565b67ffffffffffffffff8111156152db576152da614a0a565b5b6152e58254614ed7565b6152f082828561522c565b600060209050601f8311600181146153235760008415615311578287015190505b61531b858261529d565b865550615383565b601f1984166153318661510d565b60005b8281101561535957848901518255600182019150602085019450602081019050615334565b868310156153765784890151615372601f89168261527f565b8355505b6001600288020188555050505b505050505050565b7f4d696e74696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006153c1601683614659565b91506153cc8261538b565b602082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f43616e6e6f74206d696e742074686174206d616e79206174206f6e63652e0000600082015250565b600061542d601e83614659565b9150615438826153f7565b602082019050919050565b6000602082019050818103600083015261545c81615420565b9050919050565b7f46696e6973686564206d696e74696e672e000000000000000000000000000000600082015250565b6000615499601183614659565b91506154a482615463565b602082019050919050565b600060208201905081810360008301526154c88161548c565b9050919050565b7f4e6f7420656e6f7567682046544d2073656e742e000000000000000000000000600082015250565b6000615505601483614659565b9150615510826154cf565b602082019050919050565b60006020820190508181036000830152615534816154f8565b9050919050565b7f43757272656e746c7920696e2070686173652000000000000000000000000000815250565b600081905092915050565b60006155778261464e565b6155818185615561565b935061559181856020860161466a565b80840191505092915050565b7f2e00000000000000000000000000000000000000000000000000000000000000815250565b60006155ce8261553b565b6013820191506155de828461556c565b91506155e98261559d565b60018201915081905092915050565b60006156038261461a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361563557615634614e45565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061567b838561504a565b9350615688838584614ab6565b61569183614694565b840190509392505050565b60006080820190506156b1600083018861478b565b6156be602083018761478b565b6156cb6040830186614624565b81810360608301526156de81848661566f565b90509695505050505050565b600081546156f781614ed7565b6157018186615561565b9450600182166000811461571c576001811461573157615764565b60ff1983168652811515820286019350615764565b61573a8561510d565b60005b8381101561575c5781548189015260018201915060208101905061573d565b838801955050505b50505092915050565b600061577982856156ea565b9150615785828461556c565b91508190509392505050565b60008160011c9050919050565b6000808291508390505b60018511156157e8578086048111156157c4576157c3614e45565b5b60018516156157d35780820291505b80810290506157e185615791565b94506157a8565b94509492505050565b60008261580157600190506158bd565b8161580f57600090506158bd565b8160018114615825576002811461582f5761585e565b60019150506158bd565b60ff84111561584157615840614e45565b5b8360020a91508482111561585857615857614e45565b5b506158bd565b5060208310610133831016604e8410600b84101617156158935782820a90508381111561588e5761588d614e45565b5b6158bd565b6158a0848484600161579e565b925090508184048111156158b7576158b6614e45565b5b81810290505b9392505050565b60006158cf8261461a565b91506158da83614989565b92506159077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846157f1565b905092915050565b7f4e6f7420656e6f75676820746f6b656e2062616c616e63652e00000000000000600082015250565b6000615945601983614659565b91506159508261590f565b602082019050919050565b6000602082019050818103600083015261597481615938565b9050919050565b7f53656e646572206973206e6f74206f776e6572206f66204e46542e0000000000600082015250565b60006159b1601b83614659565b91506159bc8261597b565b602082019050919050565b600060208201905081810360008301526159e0816159a4565b9050919050565b7f43616e6e6f742073656e6420746f206e756c6c20616464726573732e00000000600082015250565b6000615a1d601c83614659565b9150615a28826159e7565b602082019050919050565b60006020820190508181036000830152615a4c81615a10565b9050919050565b7f4f70657261746f72206973206e6f7420617070726f7665642e00000000000000600082015250565b6000615a89601983614659565b9150615a9482615a53565b602082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b7f43616e6e6f74207472616e7366657220756e74696c206d696e7420656e74657260008201527f73207075626c69632e0000000000000000000000000000000000000000000000602082015250565b6000615b1b602983614659565b9150615b2682615abf565b604082019050919050565b60006020820190508181036000830152615b4a81615b0e565b9050919050565b7f4e6f206d6f7265207468616e20302e352520617420746869732073746167652e600082015250565b6000615b87602083614659565b9150615b9282615b51565b602082019050919050565b60006020820190508181036000830152615bb681615b7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b6000615c48602383614659565b9150615c5382615bec565b604082019050919050565b60006020820190508181036000830152615c7781615c3b565b905091905056fea26469706673582212209fd9aed98266c7590ef7da3ec7abdf7904850c691af7020ad39998839e4f522464736f6c63430008130033697066733a2f2f6261667962656962726d6d326f767937616a3373716e673235367533627a63326c76747977736d61737435676c77787336336163746c626b656e712f000000000000000000000000c8d8d19c8aac74a51c562494267305f4b4f0f57800000000000000000000000000000000000000000000000000000000675a6c86

Deployed Bytecode

0x60806040526004361061038c5760003560e01c80637c6e551d116101dc578063ac5553ce11610102578063d9adc191116100a0578063ee1cc9441161006f578063ee1cc94414610dd6578063ef1f3ebb14610dff578063f2fde38b14610e3c578063ff6728ad14610e655761038c565b8063d9adc19114610cf4578063dd62ed3e14610d31578063de7fcb1d14610d6e578063e985e9c514610d995761038c565b8063c6f6f216116100dc578063c6f6f21614610c26578063c87b56dd14610c4f578063d528d11814610c8c578063d547cfb714610cc95761038c565b8063ac5553ce14610ba7578063b76b8ced14610bd2578063b88d4fde14610bfd5761038c565b80639fbc87131161017a578063a22cb46511610149578063a22cb46514610adb578063a4fd255914610b04578063a9059cbb14610b2d578063a96fd9d514610b6a5761038c565b80639fbc871314610a3e578063a035b1fe14610a69578063a0712d6814610a94578063a21b5fe914610ab05761038c565b80638dc251e3116101b65780638dc251e31461098457806391b7f5ed146109ad57806395d89b41146109d65780639b19251a14610a015761038c565b80637c6e551d1461090357806381456f481461092e5780638da5cb5b146109595761038c565b80632a55205a116102c15780634f07de091161025f5780636352211e1161022e5780636352211e1461082157806366e3e5e41461085e57806370a082311461089b57806378e97925146108d85761038c565b80634f07de091461077b57806353d6fd59146107a457806355f804b3146107cd5780635c975abb146107f65761038c565b80633e0a322d1161029b5780633e0a322d146106d557806342842e0e146106fe578063484b973c146107275780634f02c420146107505761038c565b80632a55205a146106555780632b96895814610693578063313ce567146106aa5761038c565b80630e1b26c61161032e5780631ae24366116103085780631ae24366146105855780632154dc39146105c257806323b872dd146105ed57806325fd90f31461062a5761038c565b80630e1b26c61461050657806316c38b3c1461053157806318160ddd1461055a5761038c565b806306fdde031161036a57806306fdde0314610424578063081812fc1461044f578063095ea7b31461048c5780630ca793c3146104c95761038c565b806301ffc9a71461039157806304bdc76b146103ce578063051cbd24146103f9575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b391906145b7565b610ea2565b6040516103c591906145ff565b60405180910390f35b3480156103da57600080fd5b506103e3610fd3565b6040516103f09190614633565b60405180910390f35b34801561040557600080fd5b5061040e610fe0565b60405161041b9190614633565b60405180910390f35b34801561043057600080fd5b5061043961100b565b60405161044691906146de565b60405180910390f35b34801561045b57600080fd5b506104766004803603810190610471919061472c565b611099565b604051610483919061479a565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906147e1565b6110cc565b6040516104c091906145ff565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190614821565b6113c5565b6040516104fd91906145ff565b60405180910390f35b34801561051257600080fd5b5061051b611424565b6040516105289190614633565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906148a0565b611496565b005b34801561056657600080fd5b5061056f611538565b60405161057c9190614633565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906147e1565b61155c565b6040516105b991906145ff565b60405180910390f35b3480156105ce57600080fd5b506105d761160d565b6040516105e49190614633565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f91906148cd565b611613565b60405161062191906145ff565b60405180910390f35b34801561063657600080fd5b5061063f6117a4565b60405161064c91906145ff565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614920565b6117c8565b60405161068a929190614960565b60405180910390f35b34801561069f57600080fd5b506106a8611814565b005b3480156106b657600080fd5b506106bf611937565b6040516106cc91906149a5565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f7919061472c565b61195b565b005b34801561070a57600080fd5b50610725600480360381019061072091906148cd565b6119ea565b005b34801561073357600080fd5b5061074e600480360381019061074991906147e1565b611b1e565b005b34801561075c57600080fd5b50610765611bb1565b6040516107729190614633565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d919061472c565b611bb7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906149c0565b611c46565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190614b35565b611d26565b005b34801561080257600080fd5b5061080b611dbe565b60405161081891906145ff565b60405180910390f35b34801561082d57600080fd5b506108486004803603810190610843919061472c565b611dd1565b604051610855919061479a565b60405180910390f35b34801561086a57600080fd5b5061088560048036038101906108809190614b7e565b611e74565b6040516108929190614633565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190614b7e565b611f1c565b6040516108cf9190614633565b60405180910390f35b3480156108e457600080fd5b506108ed611f34565b6040516108fa9190614633565b60405180910390f35b34801561090f57600080fd5b50610918611f3a565b6040516109259190614633565b60405180910390f35b34801561093a57600080fd5b50610943611f40565b6040516109509190614633565b60405180910390f35b34801561096557600080fd5b5061096e611f64565b60405161097b919061479a565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190614b7e565b611f88565b005b3480156109b957600080fd5b506109d460048036038101906109cf919061472c565b612051565b005b3480156109e257600080fd5b506109eb6120e0565b6040516109f891906146de565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190614b7e565b61216e565b604051610a3591906145ff565b60405180910390f35b348015610a4a57600080fd5b50610a5361218e565b604051610a60919061479a565b60405180910390f35b348015610a7557600080fd5b50610a7e6121b4565b604051610a8b9190614633565b60405180910390f35b610aae6004803603810190610aa9919061472c565b6121ba565b005b348015610abc57600080fd5b50610ac561248f565b604051610ad291906145ff565b60405180910390f35b348015610ae757600080fd5b50610b026004803603810190610afd91906149c0565b61249c565b005b348015610b1057600080fd5b50610b2b6004803603810190610b269190614c73565b612599565b005b348015610b3957600080fd5b50610b546004803603810190610b4f91906147e1565b6126c4565b604051610b6191906145ff565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190614ce2565b6126d9565b604051610b9e91906145ff565b60405180910390f35b348015610bb357600080fd5b50610bbc612736565b604051610bc99190614633565b60405180910390f35b348015610bde57600080fd5b50610be761273c565b604051610bf49190614633565b60405180910390f35b348015610c0957600080fd5b50610c246004803603810190610c1f9190614d7d565b612742565b005b348015610c3257600080fd5b50610c4d6004803603810190610c48919061472c565b61287c565b005b348015610c5b57600080fd5b50610c766004803603810190610c71919061472c565b61290b565b604051610c8391906146de565b60405180910390f35b348015610c9857600080fd5b50610cb36004803603810190610cae919061472c565b61293f565b604051610cc09190614633565b60405180910390f35b348015610cd557600080fd5b50610cde612963565b604051610ceb91906146de565b60405180910390f35b348015610d0057600080fd5b50610d1b6004803603810190610d169190614b7e565b6129f1565b604051610d289190614633565b60405180910390f35b348015610d3d57600080fd5b50610d586004803603810190610d539190614e05565b612a3d565b604051610d659190614633565b60405180910390f35b348015610d7a57600080fd5b50610d83612a62565b604051610d909190614633565b60405180910390f35b348015610da557600080fd5b50610dc06004803603810190610dbb9190614e05565b612a68565b604051610dcd91906145ff565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df891906148a0565b612a97565b005b348015610e0b57600080fd5b50610e266004803603810190610e219190614b7e565b612b39565b604051610e339190614633565b60405180910390f35b348015610e4857600080fd5b50610e636004803603810190610e5e9190614b7e565b612b85565b005b348015610e7157600080fd5b50610e8c6004803603810190610e879190614ce2565b612d0d565b604051610e999190614633565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f6d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fbc5750632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fcc5750610fcb82612d32565b5b9050919050565b6000600d80549050905090565b6000610fea61248f565b6110035742601854610ffc9190614e74565b9050611008565b600090505b90565b6001805461101890614ed7565b80601f016020809104026020016040519081016040528092919081815260200182805461104490614ed7565b80156110915780601f1061106657610100808354040283529160200191611091565b820191906000526020600020905b81548152906001019060200180831161107457829003601f168201915b505050505081565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060035482111580156110e05750600082115b156112d45760006008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156111e05750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611217576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112c69190614633565b60405180910390a3506113bb565b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113b29190614633565b60405180910390a35b6001905092915050565b6000816014600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101590509392505050565b600061142e61248f565b61143b5760009050611493565b60006018544261144b9190614e74565b9050600060016016548361145f9190614f37565b6114699190614f68565b905060155481111561148d5760016015546114849190614f68565b92505050611493565b80925050505b90565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000016c4abbebea010000081565b600080611567612d9c565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506115b49190614f9c565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115fe9190614e74565b90508281101591505092915050565b600f5481565b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf9061502a565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461178c57828161170b9190614e74565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611797858585612dd0565b5060019150509392505050565b6000601760019054906101000a900460ff16806117c357506018544210155b905090565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710601054856117ff9190614f9c565b6118099190614f37565b915091509250929050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611899576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000001281565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060188190555050565b6119f6338484846131be565b60008273ffffffffffffffffffffffffffffffffffffffff163b14158015611ae2575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611a7d93929190615081565b6020604051808303816000875af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac091906150e0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611b19576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bad82826135c8565b5050565b60035481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060108190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dab576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e9081611dba91906152b9565b5050565b601760009054906101000a900460ff1681565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e6f576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000611e7e612d9c565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611ecb9190614f9c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f159190614e74565b9050919050565b60046020528060005260406000206000915090505481565b60185481565b60105481565b7f00000000000000000000000000000000000000000000000000000000000001a481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461200d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120d6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060128190555050565b600280546120ed90614ed7565b80601f016020809104026020016040519081016040528092919081815260200182805461211990614ed7565b80156121665780601f1061213b57610100808354040283529160200191612166565b820191906000526020600020905b81548152906001019060200180831161214957829003601f168201915b505050505081565b600c6020528060005260406000206000915054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6121c26117a4565b612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f8906153d7565b60405180910390fd5b601760009054906101000a900460ff161561221b57600080fd5b601154811115612260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225790615443565b60405180910390fd5b600f54816003546122719190614f68565b11156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906154af565b60405180910390fd5b601254816122c09190614f9c565b341015612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061551b565b60405180910390fd5b6000600190505b6015548111612410578061231b611424565b036123fd5761232b8133846113c5565b6123348261365c565b60405160200161234491906155c3565b60405160208183030381529060405290612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b91906146de565b60405180910390fd5b50816014600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f59190614e74565b925050819055505b8080612408906155f8565b915050612309565b5060003411156124825760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015612480573d6000803e3d6000fd5b505b61248c33826135c8565b50565b6000601854421015905090565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161258d91906145ff565b60405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461261e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156126be578160146000868152602001908152602001600020600085848151811061265357612652615640565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a49190614f68565b9250508190555080806126b6906155f8565b915050612621565b50505050565b60006126d1338484612dd0565b905092915050565b6000806014600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905092915050565b60165481565b60155481565b61274e338686866131be565b60008473ffffffffffffffffffffffffffffffffffffffff163b1415801561283e575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016127d995949392919061569c565b6020604051808303816000875af11580156127f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281c91906150e0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15612875576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612901576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060118190555050565b6060600e6129188361365c565b60405160200161292992919061576d565b6040516020818303038152906040529050919050565b600d818154811061294f57600080fd5b906000526020600020016000915090505481565b600e805461297090614ed7565b80601f016020809104026020016040519081016040528092919081815260200182805461299c90614ed7565b80156129e95780601f106129be576101008083540402835291602001916129e9565b820191906000526020600020905b8154815290600101906020018083116129cc57829003601f168201915b505050505081565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6005602052816000526040600020602052806000526040600020600091509150505481565b60115481565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b1c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c0a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6014602052816000526040600020602052806000526040600020600091509150505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60007f0000000000000000000000000000000000000000000000000000000000000012600a612dcb91906158c4565b905090565b6000612ddd84848461372a565b6000612de7612d9c565b90506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e7a87613924565b15612f2157600083600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612ecf9190614f9c565b83612eda9190614e74565b905085811015612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f169061595b565b60405180910390fd5b505b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f709190614e74565b9250508190555084600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fcd8761392f565b158061301b57506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b156130af57600083600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9190614f37565b84846130799190614f37565b6130839190614e74565b905060005b818110156130ac5761309989613995565b80806130a4906155f8565b915050613088565b50505b6130b88661392f565b61314b57600083826130ca9190614f37565b84600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131159190614f37565b61311f9190614e74565b905060005b818110156131485761313588613c1a565b8080613140906155f8565b915050613124565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516131a89190614633565b60405180910390a3600193505050509392505050565b6008600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461325f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613256906159c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c590615a33565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061338e5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133f757506006600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d90615a9f565b60405180910390fd5b61343e612d9c565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461348c9190614e74565b9250508190555061349b612d9c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506134f18382613e6d565b6134fb82826141f1565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876135ad612d9c565b6040516135ba9190614633565b60405180910390a350505050565b6135d0612d9c565b816135db9190614f9c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136299190614f68565b9250508190555060005b818110156136575761364483613c1a565b808061364f906155f8565b915050613633565b505050565b60606000600161366b846143f3565b01905060008167ffffffffffffffff81111561368a57613689614a0a565b5b6040519080825280601f01601f1916602001820160405280156136bc5781602001600182028036833780820191505090505b509050600082602001820190505b60011561371f578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161371357613712614f08565b5b049450600085036136ca575b819350505050919050565b613735838383614546565b601554613740611424565b1161382e5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806137ea575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b613829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382090615b31565b60405180910390fd5b61391f565b60b46016546015546138409190614f9c565b60185461384d9190614f68565b6138579190614f68565b42101561391e576103e87f000000000000000000000000000000000000000000000016c4abbebea0100000600561388e9190614f9c565b6138989190614f37565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391090615b9d565b60405180910390fd5b61391f565b5b505050565b6000813b9050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061398e575061398d82613924565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036139fb576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613a8b9190614e74565b81548110613a9c57613a9b615640565b5b90600052602060002001549050600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480613af857613af7615bbd565b5b60019003818190600052602060002001600090559055600b6000828152602001908152602001600020600090556008600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600d81908060018154018082558091505060019003906000526020600020016000909190919091505580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613c80576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600d8054905003613d0f576003600081548092919060010191905055507f00000000000000000000000000000000000000000000000000000000000001a46003541115613d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfc90615c5e565b60405180910390fd5b6003549050613d6a565b600d6001600d80549050613d239190614e74565b81548110613d3457613d33615640565b5b90600052602060002001549050600d805480613d5357613d52615bbd565b5b600190038181906000526020600020016000905590555b600073ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e03576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e0d82826141f1565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613e7883613924565b1561400657600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613f0b9190614e74565b81548110613f1c57613f1b615640565b5b9060005260206000200154905080600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b60008581526020019081526020016000205481548110613f8e57613f8d615640565b5b9060005260206000200181905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480613feb57613fea615bbd565b5b6001900381819060005260206000200160009055905561418b565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506140949190614e74565b815481106140a5576140a4615640565b5b9060005260206000200154905080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b6000858152602001908152602001600020548154811061411757614116615640565b5b9060005260206000200181905550600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061417457614173615bbd565b5b600190038181906000526020600020016000905590555b600b600083815260200190815260200160002054600b6000838152602001908152602001600020819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061424c82613924565b1561432257600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506143069190614e74565b600b6000838152602001908152602001600020819055506143ef565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506143d79190614e74565b600b6000838152602001908152602001600020819055505b5050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614451577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161444757614446614f08565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061448e576d04ee2d6d415b85acef8100000000838161448457614483614f08565b5b0492506020810190505b662386f26fc1000083106144bd57662386f26fc1000083816144b3576144b2614f08565b5b0492506010810190505b6305f5e10083106144e6576305f5e10083816144dc576144db614f08565b5b0492506008810190505b612710831061450b57612710838161450157614500614f08565b5b0492506004810190505b6064831061452e576064838161452457614523614f08565b5b0492506002810190505b600a831061453d576001810190505b80915050919050565b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6145948161455f565b811461459f57600080fd5b50565b6000813590506145b18161458b565b92915050565b6000602082840312156145cd576145cc614555565b5b60006145db848285016145a2565b91505092915050565b60008115159050919050565b6145f9816145e4565b82525050565b600060208201905061461460008301846145f0565b92915050565b6000819050919050565b61462d8161461a565b82525050565b60006020820190506146486000830184614624565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561468857808201518184015260208101905061466d565b60008484015250505050565b6000601f19601f8301169050919050565b60006146b08261464e565b6146ba8185614659565b93506146ca81856020860161466a565b6146d381614694565b840191505092915050565b600060208201905081810360008301526146f881846146a5565b905092915050565b6147098161461a565b811461471457600080fd5b50565b60008135905061472681614700565b92915050565b60006020828403121561474257614741614555565b5b600061475084828501614717565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061478482614759565b9050919050565b61479481614779565b82525050565b60006020820190506147af600083018461478b565b92915050565b6147be81614779565b81146147c957600080fd5b50565b6000813590506147db816147b5565b92915050565b600080604083850312156147f8576147f7614555565b5b6000614806858286016147cc565b925050602061481785828601614717565b9150509250929050565b60008060006060848603121561483a57614839614555565b5b600061484886828701614717565b9350506020614859868287016147cc565b925050604061486a86828701614717565b9150509250925092565b61487d816145e4565b811461488857600080fd5b50565b60008135905061489a81614874565b92915050565b6000602082840312156148b6576148b5614555565b5b60006148c48482850161488b565b91505092915050565b6000806000606084860312156148e6576148e5614555565b5b60006148f4868287016147cc565b9350506020614905868287016147cc565b925050604061491686828701614717565b9150509250925092565b6000806040838503121561493757614936614555565b5b600061494585828601614717565b925050602061495685828601614717565b9150509250929050565b6000604082019050614975600083018561478b565b6149826020830184614624565b9392505050565b600060ff82169050919050565b61499f81614989565b82525050565b60006020820190506149ba6000830184614996565b92915050565b600080604083850312156149d7576149d6614555565b5b60006149e5858286016147cc565b92505060206149f68582860161488b565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a4282614694565b810181811067ffffffffffffffff82111715614a6157614a60614a0a565b5b80604052505050565b6000614a7461454b565b9050614a808282614a39565b919050565b600067ffffffffffffffff821115614aa057614a9f614a0a565b5b614aa982614694565b9050602081019050919050565b82818337600083830152505050565b6000614ad8614ad384614a85565b614a6a565b905082815260208101848484011115614af457614af3614a05565b5b614aff848285614ab6565b509392505050565b600082601f830112614b1c57614b1b614a00565b5b8135614b2c848260208601614ac5565b91505092915050565b600060208284031215614b4b57614b4a614555565b5b600082013567ffffffffffffffff811115614b6957614b6861455a565b5b614b7584828501614b07565b91505092915050565b600060208284031215614b9457614b93614555565b5b6000614ba2848285016147cc565b91505092915050565b600067ffffffffffffffff821115614bc657614bc5614a0a565b5b602082029050602081019050919050565b600080fd5b6000614bef614bea84614bab565b614a6a565b90508083825260208201905060208402830185811115614c1257614c11614bd7565b5b835b81811015614c3b5780614c2788826147cc565b845260208401935050602081019050614c14565b5050509392505050565b600082601f830112614c5a57614c59614a00565b5b8135614c6a848260208601614bdc565b91505092915050565b600080600060608486031215614c8c57614c8b614555565b5b6000614c9a86828701614717565b935050602084013567ffffffffffffffff811115614cbb57614cba61455a565b5b614cc786828701614c45565b9250506040614cd886828701614717565b9150509250925092565b60008060408385031215614cf957614cf8614555565b5b6000614d0785828601614717565b9250506020614d18858286016147cc565b9150509250929050565b600080fd5b60008083601f840112614d3d57614d3c614a00565b5b8235905067ffffffffffffffff811115614d5a57614d59614d22565b5b602083019150836001820283011115614d7657614d75614bd7565b5b9250929050565b600080600080600060808688031215614d9957614d98614555565b5b6000614da7888289016147cc565b9550506020614db8888289016147cc565b9450506040614dc988828901614717565b935050606086013567ffffffffffffffff811115614dea57614de961455a565b5b614df688828901614d27565b92509250509295509295909350565b60008060408385031215614e1c57614e1b614555565b5b6000614e2a858286016147cc565b9250506020614e3b858286016147cc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e7f8261461a565b9150614e8a8361461a565b9250828203905081811115614ea257614ea1614e45565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614eef57607f821691505b602082108103614f0257614f01614ea8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f428261461a565b9150614f4d8361461a565b925082614f5d57614f5c614f08565b5b828204905092915050565b6000614f738261461a565b9150614f7e8361461a565b9250828201905080821115614f9657614f95614e45565b5b92915050565b6000614fa78261461a565b9150614fb28361461a565b9250828202614fc08161461a565b91508282048414831517614fd757614fd6614e45565b5b5092915050565b7f4e6f7420656e6f75676820616c6c6f77616e63652e0000000000000000000000600082015250565b6000615014601583614659565b915061501f82614fde565b602082019050919050565b6000602082019050818103600083015261504381615007565b9050919050565b600082825260208201905092915050565b50565b600061506b60008361504a565b91506150768261505b565b600082019050919050565b6000608082019050615096600083018661478b565b6150a3602083018561478b565b6150b06040830184614624565b81810360608301526150c18161505e565b9050949350505050565b6000815190506150da8161458b565b92915050565b6000602082840312156150f6576150f5614555565b5b6000615104848285016150cb565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261516f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615132565b6151798683615132565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151b66151b16151ac8461461a565b615191565b61461a565b9050919050565b6000819050919050565b6151d08361519b565b6151e46151dc826151bd565b84845461513f565b825550505050565b600090565b6151f96151ec565b6152048184846151c7565b505050565b5b818110156152285761521d6000826151f1565b60018101905061520a565b5050565b601f82111561526d5761523e8161510d565b61524784615122565b81016020851015615256578190505b61526a61526285615122565b830182615209565b50505b505050565b600082821c905092915050565b600061529060001984600802615272565b1980831691505092915050565b60006152a9838361527f565b9150826002028217905092915050565b6152c28261464e565b67ffffffffffffffff8111156152db576152da614a0a565b5b6152e58254614ed7565b6152f082828561522c565b600060209050601f8311600181146153235760008415615311578287015190505b61531b858261529d565b865550615383565b601f1984166153318661510d565b60005b8281101561535957848901518255600182019150602085019450602081019050615334565b868310156153765784890151615372601f89168261527f565b8355505b6001600288020188555050505b505050505050565b7f4d696e74696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006153c1601683614659565b91506153cc8261538b565b602082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f43616e6e6f74206d696e742074686174206d616e79206174206f6e63652e0000600082015250565b600061542d601e83614659565b9150615438826153f7565b602082019050919050565b6000602082019050818103600083015261545c81615420565b9050919050565b7f46696e6973686564206d696e74696e672e000000000000000000000000000000600082015250565b6000615499601183614659565b91506154a482615463565b602082019050919050565b600060208201905081810360008301526154c88161548c565b9050919050565b7f4e6f7420656e6f7567682046544d2073656e742e000000000000000000000000600082015250565b6000615505601483614659565b9150615510826154cf565b602082019050919050565b60006020820190508181036000830152615534816154f8565b9050919050565b7f43757272656e746c7920696e2070686173652000000000000000000000000000815250565b600081905092915050565b60006155778261464e565b6155818185615561565b935061559181856020860161466a565b80840191505092915050565b7f2e00000000000000000000000000000000000000000000000000000000000000815250565b60006155ce8261553b565b6013820191506155de828461556c565b91506155e98261559d565b60018201915081905092915050565b60006156038261461a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361563557615634614e45565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061567b838561504a565b9350615688838584614ab6565b61569183614694565b840190509392505050565b60006080820190506156b1600083018861478b565b6156be602083018761478b565b6156cb6040830186614624565b81810360608301526156de81848661566f565b90509695505050505050565b600081546156f781614ed7565b6157018186615561565b9450600182166000811461571c576001811461573157615764565b60ff1983168652811515820286019350615764565b61573a8561510d565b60005b8381101561575c5781548189015260018201915060208101905061573d565b838801955050505b50505092915050565b600061577982856156ea565b9150615785828461556c565b91508190509392505050565b60008160011c9050919050565b6000808291508390505b60018511156157e8578086048111156157c4576157c3614e45565b5b60018516156157d35780820291505b80810290506157e185615791565b94506157a8565b94509492505050565b60008261580157600190506158bd565b8161580f57600090506158bd565b8160018114615825576002811461582f5761585e565b60019150506158bd565b60ff84111561584157615840614e45565b5b8360020a91508482111561585857615857614e45565b5b506158bd565b5060208310610133831016604e8410600b84101617156158935782820a90508381111561588e5761588d614e45565b5b6158bd565b6158a0848484600161579e565b925090508184048111156158b7576158b6614e45565b5b81810290505b9392505050565b60006158cf8261461a565b91506158da83614989565b92506159077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846157f1565b905092915050565b7f4e6f7420656e6f75676820746f6b656e2062616c616e63652e00000000000000600082015250565b6000615945601983614659565b91506159508261590f565b602082019050919050565b6000602082019050818103600083015261597481615938565b9050919050565b7f53656e646572206973206e6f74206f776e6572206f66204e46542e0000000000600082015250565b60006159b1601b83614659565b91506159bc8261597b565b602082019050919050565b600060208201905081810360008301526159e0816159a4565b9050919050565b7f43616e6e6f742073656e6420746f206e756c6c20616464726573732e00000000600082015250565b6000615a1d601c83614659565b9150615a28826159e7565b602082019050919050565b60006020820190508181036000830152615a4c81615a10565b9050919050565b7f4f70657261746f72206973206e6f7420617070726f7665642e00000000000000600082015250565b6000615a89601983614659565b9150615a9482615a53565b602082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b7f43616e6e6f74207472616e7366657220756e74696c206d696e7420656e74657260008201527f73207075626c69632e0000000000000000000000000000000000000000000000602082015250565b6000615b1b602983614659565b9150615b2682615abf565b604082019050919050565b60006020820190508181036000830152615b4a81615b0e565b9050919050565b7f4e6f206d6f7265207468616e20302e352520617420746869732073746167652e600082015250565b6000615b87602083614659565b9150615b9282615b51565b602082019050919050565b60006020820190508181036000830152615bb681615b7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b6000615c48602383614659565b9150615c5382615bec565b604082019050919050565b60006020820190508181036000830152615c7781615c3b565b905091905056fea26469706673582212209fd9aed98266c7590ef7da3ec7abdf7904850c691af7020ad39998839e4f522464736f6c63430008130033

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

000000000000000000000000c8d8d19c8aac74a51c562494267305f4b4f0f57800000000000000000000000000000000000000000000000000000000675a6c86

-----Decoded View---------------
Arg [0] : _owner (address): 0xc8D8D19c8aaC74A51c562494267305F4B4f0F578
Arg [1] : _startTime (uint256): 1733979270

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c8d8d19c8aac74a51c562494267305f4b4f0f578
Arg [1] : 00000000000000000000000000000000000000000000000000000000675a6c86


Deployed Bytecode Sourcemap

16751:6430:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20701:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7305:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19063:202;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4719:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5530:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7827:649;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18275:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18497:443;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22314:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4955:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11038:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16830:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8883:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19273:155;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20469:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3654:151;;;;;;;;;;;;;:::i;:::-;;4855:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22635:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9602:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21901:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5190:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22743:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6921:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22867:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17148:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7104:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10622:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5296:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17273:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16863:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5049:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3095:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22517:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23094:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4773:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6201:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16963:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16934:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19436:1005;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18948:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8527:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22027:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9358:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18094:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17113:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17085:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10118:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17936:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6337:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16795:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7417:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5410:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16898:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5641:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22407:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10863:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3427:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17002:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20701:365;20810:4;20862:25;20847:40;;;:11;:40;;;;:105;;;;20919:33;20904:48;;;:11;:48;;;;20847:105;:158;;;;17223:10;20984:21;;20969:36;;;:11;:36;;;;20847:158;:211;;;;21022:36;21046:11;21022:23;:36::i;:::-;20847:211;20827:231;;20701:365;;;:::o;7305:104::-;7355:7;7382:12;:19;;;;7375:26;;7305:104;:::o;19063:202::-;19113:7;19138:16;:14;:16::i;:::-;19133:125;;19190:15;19178:9;;:27;;;;:::i;:::-;19171:34;;;;19133:125;19245:1;19238:8;;19063:202;;:::o;4719:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5530:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;7827:649::-;7932:4;7972:6;;7958:10;:20;;:38;;;;;7995:1;7982:10;:14;7958:38;7954:491;;;8013:13;8029:8;:20;8038:10;8029:20;;;;;;;;;;;;;;;;;;;;;8013:36;;8084:5;8070:19;;:10;:19;;;;:59;;;;;8094:16;:23;8111:5;8094:23;;;;;;;;;;;;;;;:35;8118:10;8094:35;;;;;;;;;;;;;;;;;;;;;;;;;8093:36;8070:59;8066:121;;;8157:14;;;;;;;;;;;;;;8066:121;8229:7;8203:11;:23;8215:10;8203:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8274:7;8258:36;;8267:5;8258:36;;;8283:10;8258:36;;;;;;:::i;:::-;;;;;;;;7998:308;7954:491;;;8360:10;8327:9;:21;8337:10;8327:21;;;;;;;;;;;;;;;:30;8349:7;8327:30;;;;;;;;;;;;;;;:43;;;;8413:7;8392:41;;8401:10;8392:41;;;8422:10;8392:41;;;;;;:::i;:::-;;;;;;;;7954:491;8464:4;8457:11;;7827:649;;;;:::o;18275:214::-;18410:4;18473:8;18434:19;:26;18454:5;18434:26;;;;;;;;;;;:35;18461:7;18434:35;;;;;;;;;;;;;;;;:47;;18427:54;;18275:214;;;;;:::o;18497:443::-;18541:7;18566:16;:14;:16::i;:::-;18561:372;;18606:1;18599:8;;;;18561:372;18640:24;18685:9;;18667:15;:27;;;;:::i;:::-;18640:54;;18709:13;18762:1;18745:13;;18726:16;:32;;;;:::i;:::-;18725:38;;;;:::i;:::-;18709:54;;18792:6;;18784:5;:14;18780:142;;;18835:1;18826:6;;:10;;;;:::i;:::-;18819:17;;;;;;18780:142;18901:5;18894:12;;;;18497:443;;:::o;22314:85::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;22384:7:::1;22375:6;;:16;;;;;;;;;;;;;;;;;;22314:85:::0;:::o;4955:36::-;;;:::o;11038:287::-;11149:4;11171:20;11266:10;:8;:10::i;:::-;11231:14;:25;11246:9;11231:25;;;;;;;;;;;;;;;:32;;;;:45;;;;:::i;:::-;11194:9;:20;11204:9;11194:20;;;;;;;;;;;;;;;;:83;;;;:::i;:::-;11171:106;;11311:6;11295:12;:22;;11288:29;;;11038:287;;;;:::o;16830:26::-;;;;:::o;8883:416::-;8997:4;9014:15;9032:9;:15;9042:4;9032:15;;;;;;;;;;;;;;;:27;9048:10;9032:27;;;;;;;;;;;;;;;;9014:45;;9091:6;9080:7;:17;;9072:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;9151:17;9140:7;:28;9136:93;;9223:6;9213:7;:16;;;;:::i;:::-;9183:9;:15;9193:4;9183:15;;;;;;;;;;;;;;;:27;9199:10;9183:27;;;;;;;;;;;;;;;:46;;;;9136:93;9242:27;9252:4;9258:2;9262:6;9242:9;:27::i;:::-;;9287:4;9280:11;;;8883:416;;;;;:::o;19273:155::-;19316:4;19340:11;;;;;;;;;;;:45;;;;19375:9;;19356:15;:28;;19340:45;19333:52;;19273:155;:::o;20469:224::-;20576:16;20594:14;20629:15;;;;;;;;;;;20678:5;20661:13;;20648:10;:26;;;;:::i;:::-;20647:36;;;;:::i;:::-;20621:64;;;;20469:224;;;;;:::o;3654:151::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;3733:1:::1;3717:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;3794:1;3753:44;;3774:10;3753:44;;;;;;;;;;;;3654:151::o:0;4855:31::-;;;:::o;22635:100::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;22717:10:::1;22705:9;:22;;;;22635:100:::0;:::o;9602:421::-;9726:42;9743:10;9755:4;9761:2;9765;9726:16;:42::i;:::-;9817:1;9799:2;:14;;;:19;;:154;;;;;9913:40;;;9835:118;;;9850:2;9835:35;;;9871:10;9883:4;9889:2;9835:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;9799:154;9781:235;;;9987:17;;;;;;;;;;;;;;9781:235;9602:421;;;:::o;21901:118::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;21985:26:::1;21991:9;22002:8;21985:5;:26::i;:::-;21901:118:::0;;:::o;5190:21::-;;;;:::o;22743:116::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;22837:14:::1;22821:13;:30;;;;22743:116:::0;:::o;6921:111::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;7019:5:::1;6999:9;:17;7009:6;6999:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;6921:111:::0;;:::o;22867:103::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;22954:8:::1;22939:12;:23;;;;;;:::i;:::-;;22867:103:::0;:::o;17148:18::-;;;;;;;;;;;;;:::o;7104:193::-;7162:13;7196:8;:12;7205:2;7196:12;;;;;;;;;;;;;;;;;;;;;7188:20;;7242:1;7225:19;;:5;:19;;;7221:69;;7268:10;;;;;;;;;;;;;;7221:69;7104:193;;;:::o;10622:233::-;10719:7;10836:10;:8;:10::i;:::-;10801:14;:25;10816:9;10801:25;;;;;;;;;;;;;;;:32;;;;:45;;;;:::i;:::-;10764:9;:20;10774:9;10764:20;;;;;;;;;;;;;;;;:83;;;;:::i;:::-;10744:103;;10622:233;;;:::o;5296:44::-;;;;;;;;;;;;;;;;;:::o;17273:24::-;;;;:::o;16863:28::-;;;;:::o;5049:42::-;;;:::o;3095:20::-;;;;;;;;;;;;:::o;22517:110::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;22610:9:::1;22592:15;;:27;;;;;;;;;;;;;;;;;;22517:110:::0;:::o;23094:84::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;23164:6:::1;23156:5;:14;;;;23094:84:::0;:::o;4773:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6201:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;16963:30::-;;;;;;;;;;;;;:::o;16934:20::-;;;;:::o;19436:1005::-;19502:12;:10;:12::i;:::-;19494:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19561:6;;;;;;;;;;;19560:7;19552:16;;;;;;19601:12;;19589:8;:24;;19581:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19688:11;;19676:8;19667:6;;:17;;;;:::i;:::-;:32;;19659:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19765:5;;19754:8;:16;;;;:::i;:::-;19740:9;:31;;19732:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19814:13;19830:1;19814:17;;19809:493;19842:6;;19833:5;:15;19809:493;;19895:5;19878:13;:11;:13::i;:::-;:22;19874:417;;19951:49;19972:5;19979:10;19991:8;19951:20;:49::i;:::-;20111:23;20128:5;20111:16;:23::i;:::-;20023:164;;;;;;;;:::i;:::-;;;;;;;;;;;;;19921:285;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20267:8;20225:19;:26;20245:5;20225:26;;;;;;;;;;;:38;20252:10;20225:38;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;19874:417;19850:7;;;;;:::i;:::-;;;;19809:493;;;;20330:1;20318:9;:13;20314:80;;;20356:5;;;;;;;;;;20348:23;;:34;20372:9;20348:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20314:80;20406:27;20412:10;20424:8;20406:5;:27::i;:::-;19436:1005;:::o;18948:107::-;18995:4;19038:9;;19019:15;:28;;19012:35;;18948:107;:::o;8527:207::-;8654:8;8613:16;:28;8630:10;8613:28;;;;;;;;;;;;;;;:38;8642:8;8613:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;8707:8;8680:46;;8695:10;8680:46;;;8717:8;8680:46;;;;;;:::i;:::-;;;;;;;;8527:207;;:::o;22027:279::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;22180:9:::1;22175:124;22199:8;:15;22195:1;:19;22175:124;;;22279:8;22236:19;:26;22256:5;22236:26;;;;;;;;;;;:39;22263:8;22272:1;22263:11;;;;;;;;:::i;:::-;;;;;;;;22236:39;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;22216:3;;;;;:::i;:::-;;;;22175:124;;;;22027:279:::0;;;:::o;9358:167::-;9455:4;9484:33;9494:10;9506:2;9510:6;9484:9;:33::i;:::-;9477:40;;9358:167;;;;:::o;18094:173::-;18196:4;18258:1;18220:19;:26;18240:5;18220:26;;;;;;;;;;;:35;18247:7;18220:35;;;;;;;;;;;;;;;;:39;18213:46;;18094:173;;;;:::o;17113:28::-;;;;:::o;17085:21::-;;;;:::o;10118:453::-;10272:42;10289:10;10301:4;10307:2;10311;10272:16;:42::i;:::-;10363:1;10345:2;:14;;;:19;;:156;;;;;10461:40;;;10381:120;;;10396:2;10381:35;;;10417:10;10429:4;10435:2;10439:4;;10381:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;10345:156;10327:237;;;10535:17;;;;;;;;;;;;;;10327:237;10118:453;;;;;:::o;22978:108::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;23065:13:::1;23050:12;:28;;;;22978:108:::0;:::o;17936:150::-;17996:13;18043:12;18057:20;18074:2;18057:16;:20::i;:::-;18029:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18022:56;;17936:150;;;:::o;6337:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16795:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7417:115::-;7477:7;7504:6;:13;7511:5;7504:13;;;;;;;;;;;;;;;:20;;;;7497:27;;7417:115;;;:::o;5410:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16898:27::-;;;;:::o;5641:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22407:102::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;22490:11:::1;22476;;:25;;;;;;;;;;;;;;;;;;22407:102:::0;:::o;10863:167::-;10958:7;10990:14;:25;11005:9;10990:25;;;;;;;;;;;;;;;:32;;;;10983:39;;10863:167;;;:::o;3427:219::-;3182:5;;;;;;;;;;3168:19;;:10;:19;;;3164:46;;3196:14;;;;;;;;;;;;;;3164:46;3528:1:::1;3510:20;;:6;:20;;::::0;3506:47:::1;;3539:14;;;;;;;;;;;;;;3506:47;3574:6;3566:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;3631:6;3598:40;;3619:10;3598:40;;;;;;;;;;;;3427:219:::0;:::o;17002:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2768:148::-;2844:4;2883:25;2868:40;;;:11;:40;;;;2861:47;;2768:148;;;:::o;13936:90::-;13979:7;14010:8;14006:2;:12;;;;:::i;:::-;13999:19;;13936:90;:::o;11393:1488::-;11506:4;11523:38;11544:4;11550:2;11554:6;11523:20;:38::i;:::-;11574:12;11589:10;:8;:10::i;:::-;11574:25;;11610:27;11640:9;:15;11650:4;11640:15;;;;;;;;;;;;;;;;11610:45;;11666:29;11698:9;:13;11708:2;11698:13;;;;;;;;;;;;;;;;11666:45;;11728:17;11740:4;11728:11;:17::i;:::-;11724:223;;;11762:20;11855:4;11825:14;:20;11840:4;11825:20;;;;;;;;;;;;;;;:27;;;;:34;;;;:::i;:::-;11785:19;:75;;;;:::i;:::-;11762:98;;11899:6;11883:12;:22;;11875:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11747:200;11724:223;11978:6;11959:9;:15;11969:4;11959:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;12037:6;12020:9;:13;12030:2;12020:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12172:17;12184:4;12172:11;:17::i;:::-;12171:18;:45;;;;12215:1;12193:6;:12;12200:4;12193:12;;;;;;;;;;;;;;;:19;;;;:23;12171:45;12167:275;;;12233:18;12321:4;12303:9;:15;12313:4;12303:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;12277:4;12255:19;:26;;;;:::i;:::-;12254:72;;;;:::i;:::-;12233:93;;12346:9;12341:90;12365:10;12361:1;:14;12341:90;;;12401:14;12410:4;12401:8;:14::i;:::-;12377:3;;;;;:::i;:::-;;;;12341:90;;;;12218:224;12167:275;12564:15;12576:2;12564:11;:15::i;:::-;12559:244;;12596:18;12684:4;12660:21;:28;;;;:::i;:::-;12634:4;12618:9;:13;12628:2;12618:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;12617:72;;;;:::i;:::-;12596:93;;12709:9;12704:88;12728:10;12724:1;:14;12704:88;;;12764:12;12773:2;12764:8;:12::i;:::-;12740:3;;;;;:::i;:::-;;;;12704:88;;;;12581:222;12559:244;12840:2;12820:31;;12834:4;12820:31;;;12844:6;12820:31;;;;;;:::i;:::-;;;;;;;;12869:4;12862:11;;;;;11393:1488;;;;;:::o;13131:766::-;13293:8;:12;13302:2;13293:12;;;;;;;;;;;;;;;;;;;;;13285:20;;:4;:20;;;13277:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13370:1;13356:16;;:2;:16;;;13348:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13451:4;13438:17;;:9;:17;;;:71;;;;13476:16;:22;13493:4;13476:22;;;;;;;;;;;;;;;:33;13499:9;13476:33;;;;;;;;;;;;;;;;;;;;;;;;;13438:71;:120;;;;13543:11;:15;13555:2;13543:15;;;;;;;;;;;;;;;;;;;;;13530:28;;:9;:28;;;13438:120;13416:195;;;;;;;;;;;;:::i;:::-;;;;;;;;;13643:10;:8;:10::i;:::-;13624:9;:15;13634:4;13624:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;13706:10;:8;:10::i;:::-;13689:9;:13;13699:2;13689:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;13740:28;13759:4;13765:2;13740:18;:28::i;:::-;13779:19;13791:2;13795;13779:11;:19::i;:::-;13835:2;13831;13816:22;;13825:4;13816:22;;;;;;;;;;;;13874:2;13854:35;;13868:4;13854:35;;;13878:10;:8;:10::i;:::-;13854:35;;;;;;:::i;:::-;;;;;;;;13131:766;;;;:::o;12889:234::-;12996:10;:8;:10::i;:::-;12985:8;:21;;;;:::i;:::-;12961:9;:20;12971:9;12961:20;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;13024:13;13019:97;13051:8;13043:5;:16;13019:97;;;13085:19;13094:9;13085:8;:19::i;:::-;13061:7;;;;;:::i;:::-;;;;13019:97;;;;12889:234;;:::o;23953:718::-;24009:13;24060:14;24097:1;24077:17;24088:5;24077:10;:17::i;:::-;:21;24060:38;;24113:20;24147:6;24136:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24113:41;;24169:11;24298:6;24294:2;24290:15;24282:6;24278:28;24271:35;;24335:290;24342:4;24335:290;;;24367:5;;;;;;;;24509:10;24504:2;24497:5;24493:14;24488:32;24483:3;24475:46;24567:2;24558:11;;;;;;:::i;:::-;;;;;24601:1;24592:5;:10;24335:290;24588:21;24335:290;24646:6;24639:13;;;;;23953:718;;;:::o;21074:803::-;21217:44;21244:4;21250:2;21254:6;21217:26;:44::i;:::-;21295:6;;21278:13;:11;:13::i;:::-;:23;21274:596;;21394:5;;;;;;;;;;21386:13;;:4;:13;;;:28;;;;21409:5;;;;;;;;;;21403:11;;:2;:11;;;21386:28;21360:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21506:7;;21274:596;21606:3;21589:13;;21580:6;;:22;;;;:::i;:::-;21567:9;;:36;;;;:::i;:::-;:42;;;;:::i;:::-;21548:15;:62;21530:340;;;21764:4;21749:11;21745:1;:15;;;;:::i;:::-;21744:24;;;;:::i;:::-;21726:9;:13;21736:2;21726:13;;;;;;;;;;;;;;;;:43;;21700:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;21852:7;;21530:340;21074:803;;;;:::o;16467:144::-;16521:11;16591:1;16579:14;16569:24;;16467:144;;;:::o;16343:116::-;16397:4;16421:9;:12;16431:1;16421:12;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;16437:14;16449:1;16437:11;:14::i;:::-;16421:30;16414:37;;16343:116;;;:::o;14769:486::-;14849:1;14833:18;;:4;:18;;;14829:73;;14875:15;;;;;;;;;;;;;;14829:73;14990:10;15003:6;:12;15010:4;15003:12;;;;;;;;;;;;;;;15038:1;15016:6;:12;15023:4;15016:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;15003:37;;;;;;;;:::i;:::-;;;;;;;;;;14990:50;;15051:6;:12;15058:4;15051:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15087:11;:15;15099:2;15087:15;;;;;;;;;;;15080:22;;;15120:8;:12;15129:2;15120:12;;;;;;;;;;;;15113:19;;;;;;;;;;;15150:11;:15;15162:2;15150:15;;;;;;;;;;;;15143:22;;;;;;;;;;;15178:12;15196:2;15178:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15244:2;15240:1;15217:30;;15226:4;15217:30;;;;;;;;;;;;14818:437;14769:486;:::o;14034:727::-;14110:1;14096:16;;:2;:16;;;14092:74;;14136:18;;;;;;;;;;;;;;14092:74;14178:10;14228:1;14205:12;:19;;;;:24;14201:382;;14275:6;;:8;;;;;;;;;;;;;14349:17;14339:6;;:27;;14313:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;14457:6;;14452:11;;14201:382;;;14501:12;14536:1;14514:12;:19;;;;:23;;;;:::i;:::-;14501:37;;;;;;;;:::i;:::-;;;;;;;;;;14496:42;;14553:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14201:382;14623:1;14599:26;;:8;:12;14608:2;14599:12;;;;;;;;;;;;;;;;;;;;;:26;;;14595:81;;14649:15;;;;;;;;;;;;;;14595:81;14688:19;14700:2;14704;14688:11;:19::i;:::-;14750:2;14746;14725:28;;14742:1;14725:28;;;;;;;;;;;;14081:680;14034:727;:::o;15263:565::-;15336:14;15365:17;15377:4;15365:11;:17::i;:::-;15361:379;;;15408:14;:20;15423:4;15408:20;;;;;;;;;;;;;;;15459:1;15429:14;:20;15444:4;15429:20;;;;;;;;;;;;;;;:27;;;;:31;;;;:::i;:::-;15408:53;;;;;;;;:::i;:::-;;;;;;;;;;15399:62;;15516:6;15476:14;:20;15491:4;15476:20;;;;;;;;;;;;;;;15497:11;:15;15509:2;15497:15;;;;;;;;;;;;15476:37;;;;;;;;:::i;:::-;;;;;;;;;:46;;;;15537:14;:20;15552:4;15537:20;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15361:379;;;15605:6;:12;15612:4;15605:12;;;;;;;;;;;;;;;15640:1;15618:6;:12;15625:4;15618:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;15605:37;;;;;;;;:::i;:::-;;;;;;;;;;15596:46;;15689:6;15657;:12;15664:4;15657:12;;;;;;;;;;;;;;;15670:11;:15;15682:2;15670:15;;;;;;;;;;;;15657:29;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;15710:6;:12;15717:4;15710:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15361:379;15772:11;:15;15784:2;15772:15;;;;;;;;;;;;15750:11;:19;15762:6;15750:19;;;;;;;;;;;:37;;;;15805:11;:15;15817:2;15805:15;;;;;;;;;;;;15798:22;;;;;;;;;;;15325:503;15263:565;;:::o;15836:342::-;15915:2;15900:8;:12;15909:2;15900:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;15932:15;15944:2;15932:11;:15::i;:::-;15928:243;;;15964:14;:18;15979:2;15964:18;;;;;;;;;;;;;;;15988:2;15964:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16052:1;16024:14;:18;16039:2;16024:18;;;;;;;;;;;;;;;:25;;;;:29;;;;:::i;:::-;16006:11;:15;16018:2;16006:15;;;;;;;;;;;:47;;;;15928:243;;;16086:6;:10;16093:2;16086:10;;;;;;;;;;;;;;;16102:2;16086:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16158:1;16138:6;:10;16145:2;16138:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;16120:11;:15;16132:2;16120:15;;;;;;;;;;;:39;;;;15928:243;15836:342;;:::o;38961:948::-;39014:7;39034:14;39051:1;39034:18;;39101:8;39092:5;:17;39088:106;;39139:8;39130:17;;;;;;:::i;:::-;;;;;39176:2;39166:12;;;;39088:106;39221:8;39212:5;:17;39208:106;;39259:8;39250:17;;;;;;:::i;:::-;;;;;39296:2;39286:12;;;;39208:106;39341:8;39332:5;:17;39328:106;;39379:8;39370:17;;;;;;:::i;:::-;;;;;39416:2;39406:12;;;;39328:106;39461:7;39452:5;:16;39448:103;;39498:7;39489:16;;;;;;:::i;:::-;;;;;39534:1;39524:11;;;;39448:103;39578:7;39569:5;:16;39565:103;;39615:7;39606:16;;;;;;:::i;:::-;;;;;39651:1;39641:11;;;;39565:103;39695:7;39686:5;:16;39682:103;;39732:7;39723:16;;;;;;:::i;:::-;;;;;39768:1;39758:11;;;;39682:103;39812:7;39803:5;:16;39799:68;;39850:1;39840:11;;;;39799:68;39895:6;39888:13;;;38961:948;;;:::o;16619:125::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:246::-;2314:1;2324:113;2338:6;2335:1;2332:13;2324:113;;;2423:1;2418:3;2414:11;2408:18;2404:1;2399:3;2395:11;2388:39;2360:2;2357:1;2353:10;2348:15;;2324:113;;;2471:1;2462:6;2457:3;2453:16;2446:27;2295:184;2233:246;;;:::o;2485:102::-;2526:6;2577:2;2573:7;2568:2;2561:5;2557:14;2553:28;2543:38;;2485:102;;;:::o;2593:377::-;2681:3;2709:39;2742:5;2709:39;:::i;:::-;2764:71;2828:6;2823:3;2764:71;:::i;:::-;2757:78;;2844:65;2902:6;2897:3;2890:4;2883:5;2879:16;2844:65;:::i;:::-;2934:29;2956:6;2934:29;:::i;:::-;2929:3;2925:39;2918:46;;2685:285;2593:377;;;;:::o;2976:313::-;3089:4;3127:2;3116:9;3112:18;3104:26;;3176:9;3170:4;3166:20;3162:1;3151:9;3147:17;3140:47;3204:78;3277:4;3268:6;3204:78;:::i;:::-;3196:86;;2976:313;;;;:::o;3295:122::-;3368:24;3386:5;3368:24;:::i;:::-;3361:5;3358:35;3348:63;;3407:1;3404;3397:12;3348:63;3295:122;:::o;3423:139::-;3469:5;3507:6;3494:20;3485:29;;3523:33;3550:5;3523:33;:::i;:::-;3423:139;;;;:::o;3568:329::-;3627:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:119;;;3682:79;;:::i;:::-;3644:119;3802:1;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3773:117;3568:329;;;;:::o;3903:126::-;3940:7;3980:42;3973:5;3969:54;3958:65;;3903:126;;;:::o;4035:96::-;4072:7;4101:24;4119:5;4101:24;:::i;:::-;4090:35;;4035:96;;;:::o;4137:118::-;4224:24;4242:5;4224:24;:::i;:::-;4219:3;4212:37;4137:118;;:::o;4261:222::-;4354:4;4392:2;4381:9;4377:18;4369:26;;4405:71;4473:1;4462:9;4458:17;4449:6;4405:71;:::i;:::-;4261:222;;;;:::o;4489:122::-;4562:24;4580:5;4562:24;:::i;:::-;4555:5;4552:35;4542:63;;4601:1;4598;4591:12;4542:63;4489:122;:::o;4617:139::-;4663:5;4701:6;4688:20;4679:29;;4717:33;4744:5;4717:33;:::i;:::-;4617:139;;;;:::o;4762:474::-;4830:6;4838;4887:2;4875:9;4866:7;4862:23;4858:32;4855:119;;;4893:79;;:::i;:::-;4855:119;5013:1;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4984:117;5140:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;:::i;:::-;5156:63;;5111:118;4762:474;;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:116::-;5937:21;5952:5;5937:21;:::i;:::-;5930:5;5927:32;5917:60;;5973:1;5970;5963:12;5917:60;5867:116;:::o;5989:133::-;6032:5;6070:6;6057:20;6048:29;;6086:30;6110:5;6086:30;:::i;:::-;5989:133;;;;:::o;6128:323::-;6184:6;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:50;6426:7;6417:6;6406:9;6402:22;6384:50;:::i;:::-;6374:60;;6330:114;6128:323;;;;:::o;6457:619::-;6534:6;6542;6550;6599:2;6587:9;6578:7;6574:23;6570:32;6567:119;;;6605:79;;:::i;:::-;6567:119;6725:1;6750:53;6795:7;6786:6;6775:9;6771:22;6750:53;:::i;:::-;6740:63;;6696:117;6852:2;6878:53;6923:7;6914:6;6903:9;6899:22;6878:53;:::i;:::-;6868:63;;6823:118;6980:2;7006:53;7051:7;7042:6;7031:9;7027:22;7006:53;:::i;:::-;6996:63;;6951:118;6457:619;;;;;:::o;7082:474::-;7150:6;7158;7207:2;7195:9;7186:7;7182:23;7178:32;7175:119;;;7213:79;;:::i;:::-;7175:119;7333:1;7358:53;7403:7;7394:6;7383:9;7379:22;7358:53;:::i;:::-;7348:63;;7304:117;7460:2;7486:53;7531:7;7522:6;7511:9;7507:22;7486:53;:::i;:::-;7476:63;;7431:118;7082:474;;;;;:::o;7562:332::-;7683:4;7721:2;7710:9;7706:18;7698:26;;7734:71;7802:1;7791:9;7787:17;7778:6;7734:71;:::i;:::-;7815:72;7883:2;7872:9;7868:18;7859:6;7815:72;:::i;:::-;7562:332;;;;;:::o;7900:86::-;7935:7;7975:4;7968:5;7964:16;7953:27;;7900:86;;;:::o;7992:112::-;8075:22;8091:5;8075:22;:::i;:::-;8070:3;8063:35;7992:112;;:::o;8110:214::-;8199:4;8237:2;8226:9;8222:18;8214:26;;8250:67;8314:1;8303:9;8299:17;8290:6;8250:67;:::i;:::-;8110:214;;;;:::o;8330:468::-;8395:6;8403;8452:2;8440:9;8431:7;8427:23;8423:32;8420:119;;;8458:79;;:::i;:::-;8420:119;8578:1;8603:53;8648:7;8639:6;8628:9;8624:22;8603:53;:::i;:::-;8593:63;;8549:117;8705:2;8731:50;8773:7;8764:6;8753:9;8749:22;8731:50;:::i;:::-;8721:60;;8676:115;8330:468;;;;;:::o;8804:117::-;8913:1;8910;8903:12;8927:117;9036:1;9033;9026:12;9050:180;9098:77;9095:1;9088:88;9195:4;9192:1;9185:15;9219:4;9216:1;9209:15;9236:281;9319:27;9341:4;9319:27;:::i;:::-;9311:6;9307:40;9449:6;9437:10;9434:22;9413:18;9401:10;9398:34;9395:62;9392:88;;;9460:18;;:::i;:::-;9392:88;9500:10;9496:2;9489:22;9279:238;9236:281;;:::o;9523:129::-;9557:6;9584:20;;:::i;:::-;9574:30;;9613:33;9641:4;9633:6;9613:33;:::i;:::-;9523:129;;;:::o;9658:308::-;9720:4;9810:18;9802:6;9799:30;9796:56;;;9832:18;;:::i;:::-;9796:56;9870:29;9892:6;9870:29;:::i;:::-;9862:37;;9954:4;9948;9944:15;9936:23;;9658:308;;;:::o;9972:146::-;10069:6;10064:3;10059;10046:30;10110:1;10101:6;10096:3;10092:16;10085:27;9972:146;;;:::o;10124:425::-;10202:5;10227:66;10243:49;10285:6;10243:49;:::i;:::-;10227:66;:::i;:::-;10218:75;;10316:6;10309:5;10302:21;10354:4;10347:5;10343:16;10392:3;10383:6;10378:3;10374:16;10371:25;10368:112;;;10399:79;;:::i;:::-;10368:112;10489:54;10536:6;10531:3;10526;10489:54;:::i;:::-;10208:341;10124:425;;;;;:::o;10569:340::-;10625:5;10674:3;10667:4;10659:6;10655:17;10651:27;10641:122;;10682:79;;:::i;:::-;10641:122;10799:6;10786:20;10824:79;10899:3;10891:6;10884:4;10876:6;10872:17;10824:79;:::i;:::-;10815:88;;10631:278;10569:340;;;;:::o;10915:509::-;10984:6;11033:2;11021:9;11012:7;11008:23;11004:32;11001:119;;;11039:79;;:::i;:::-;11001:119;11187:1;11176:9;11172:17;11159:31;11217:18;11209:6;11206:30;11203:117;;;11239:79;;:::i;:::-;11203:117;11344:63;11399:7;11390:6;11379:9;11375:22;11344:63;:::i;:::-;11334:73;;11130:287;10915:509;;;;:::o;11430:329::-;11489:6;11538:2;11526:9;11517:7;11513:23;11509:32;11506:119;;;11544:79;;:::i;:::-;11506:119;11664:1;11689:53;11734:7;11725:6;11714:9;11710:22;11689:53;:::i;:::-;11679:63;;11635:117;11430:329;;;;:::o;11765:311::-;11842:4;11932:18;11924:6;11921:30;11918:56;;;11954:18;;:::i;:::-;11918:56;12004:4;11996:6;11992:17;11984:25;;12064:4;12058;12054:15;12046:23;;11765:311;;;:::o;12082:117::-;12191:1;12188;12181:12;12222:710;12318:5;12343:81;12359:64;12416:6;12359:64;:::i;:::-;12343:81;:::i;:::-;12334:90;;12444:5;12473:6;12466:5;12459:21;12507:4;12500:5;12496:16;12489:23;;12560:4;12552:6;12548:17;12540:6;12536:30;12589:3;12581:6;12578:15;12575:122;;;12608:79;;:::i;:::-;12575:122;12723:6;12706:220;12740:6;12735:3;12732:15;12706:220;;;12815:3;12844:37;12877:3;12865:10;12844:37;:::i;:::-;12839:3;12832:50;12911:4;12906:3;12902:14;12895:21;;12782:144;12766:4;12761:3;12757:14;12750:21;;12706:220;;;12710:21;12324:608;;12222:710;;;;;:::o;12955:370::-;13026:5;13075:3;13068:4;13060:6;13056:17;13052:27;13042:122;;13083:79;;:::i;:::-;13042:122;13200:6;13187:20;13225:94;13315:3;13307:6;13300:4;13292:6;13288:17;13225:94;:::i;:::-;13216:103;;13032:293;12955:370;;;;:::o;13331:829::-;13433:6;13441;13449;13498:2;13486:9;13477:7;13473:23;13469:32;13466:119;;;13504:79;;:::i;:::-;13466:119;13624:1;13649:53;13694:7;13685:6;13674:9;13670:22;13649:53;:::i;:::-;13639:63;;13595:117;13779:2;13768:9;13764:18;13751:32;13810:18;13802:6;13799:30;13796:117;;;13832:79;;:::i;:::-;13796:117;13937:78;14007:7;13998:6;13987:9;13983:22;13937:78;:::i;:::-;13927:88;;13722:303;14064:2;14090:53;14135:7;14126:6;14115:9;14111:22;14090:53;:::i;:::-;14080:63;;14035:118;13331:829;;;;;:::o;14166:474::-;14234:6;14242;14291:2;14279:9;14270:7;14266:23;14262:32;14259:119;;;14297:79;;:::i;:::-;14259:119;14417:1;14442:53;14487:7;14478:6;14467:9;14463:22;14442:53;:::i;:::-;14432:63;;14388:117;14544:2;14570:53;14615:7;14606:6;14595:9;14591:22;14570:53;:::i;:::-;14560:63;;14515:118;14166:474;;;;;:::o;14646:117::-;14755:1;14752;14745:12;14782:552;14839:8;14849:6;14899:3;14892:4;14884:6;14880:17;14876:27;14866:122;;14907:79;;:::i;:::-;14866:122;15020:6;15007:20;14997:30;;15050:18;15042:6;15039:30;15036:117;;;15072:79;;:::i;:::-;15036:117;15186:4;15178:6;15174:17;15162:29;;15240:3;15232:4;15224:6;15220:17;15210:8;15206:32;15203:41;15200:128;;;15247:79;;:::i;:::-;15200:128;14782:552;;;;;:::o;15340:963::-;15437:6;15445;15453;15461;15469;15518:3;15506:9;15497:7;15493:23;15489:33;15486:120;;;15525:79;;:::i;:::-;15486:120;15645:1;15670:53;15715:7;15706:6;15695:9;15691:22;15670:53;:::i;:::-;15660:63;;15616:117;15772:2;15798:53;15843:7;15834:6;15823:9;15819:22;15798:53;:::i;:::-;15788:63;;15743:118;15900:2;15926:53;15971:7;15962:6;15951:9;15947:22;15926:53;:::i;:::-;15916:63;;15871:118;16056:2;16045:9;16041:18;16028:32;16087:18;16079:6;16076:30;16073:117;;;16109:79;;:::i;:::-;16073:117;16222:64;16278:7;16269:6;16258:9;16254:22;16222:64;:::i;:::-;16204:82;;;;15999:297;15340:963;;;;;;;;:::o;16309:474::-;16377:6;16385;16434:2;16422:9;16413:7;16409:23;16405:32;16402:119;;;16440:79;;:::i;:::-;16402:119;16560:1;16585:53;16630:7;16621:6;16610:9;16606:22;16585:53;:::i;:::-;16575:63;;16531:117;16687:2;16713:53;16758:7;16749:6;16738:9;16734:22;16713:53;:::i;:::-;16703:63;;16658:118;16309:474;;;;;:::o;16789:180::-;16837:77;16834:1;16827:88;16934:4;16931:1;16924:15;16958:4;16955:1;16948:15;16975:194;17015:4;17035:20;17053:1;17035:20;:::i;:::-;17030:25;;17069:20;17087:1;17069:20;:::i;:::-;17064:25;;17113:1;17110;17106:9;17098:17;;17137:1;17131:4;17128:11;17125:37;;;17142:18;;:::i;:::-;17125:37;16975:194;;;;:::o;17175:180::-;17223:77;17220:1;17213:88;17320:4;17317:1;17310:15;17344:4;17341:1;17334:15;17361:320;17405:6;17442:1;17436:4;17432:12;17422:22;;17489:1;17483:4;17479:12;17510:18;17500:81;;17566:4;17558:6;17554:17;17544:27;;17500:81;17628:2;17620:6;17617:14;17597:18;17594:38;17591:84;;17647:18;;:::i;:::-;17591:84;17412:269;17361:320;;;:::o;17687:180::-;17735:77;17732:1;17725:88;17832:4;17829:1;17822:15;17856:4;17853:1;17846:15;17873:185;17913:1;17930:20;17948:1;17930:20;:::i;:::-;17925:25;;17964:20;17982:1;17964:20;:::i;:::-;17959:25;;18003:1;17993:35;;18008:18;;:::i;:::-;17993:35;18050:1;18047;18043:9;18038:14;;17873:185;;;;:::o;18064:191::-;18104:3;18123:20;18141:1;18123:20;:::i;:::-;18118:25;;18157:20;18175:1;18157:20;:::i;:::-;18152:25;;18200:1;18197;18193:9;18186:16;;18221:3;18218:1;18215:10;18212:36;;;18228:18;;:::i;:::-;18212:36;18064:191;;;;:::o;18261:410::-;18301:7;18324:20;18342:1;18324:20;:::i;:::-;18319:25;;18358:20;18376:1;18358:20;:::i;:::-;18353:25;;18413:1;18410;18406:9;18435:30;18453:11;18435:30;:::i;:::-;18424:41;;18614:1;18605:7;18601:15;18598:1;18595:22;18575:1;18568:9;18548:83;18525:139;;18644:18;;:::i;:::-;18525:139;18309:362;18261:410;;;;:::o;18677:171::-;18817:23;18813:1;18805:6;18801:14;18794:47;18677:171;:::o;18854:366::-;18996:3;19017:67;19081:2;19076:3;19017:67;:::i;:::-;19010:74;;19093:93;19182:3;19093:93;:::i;:::-;19211:2;19206:3;19202:12;19195:19;;18854:366;;;:::o;19226:419::-;19392:4;19430:2;19419:9;19415:18;19407:26;;19479:9;19473:4;19469:20;19465:1;19454:9;19450:17;19443:47;19507:131;19633:4;19507:131;:::i;:::-;19499:139;;19226:419;;;:::o;19651:168::-;19734:11;19768:6;19763:3;19756:19;19808:4;19803:3;19799:14;19784:29;;19651:168;;;;:::o;19825:114::-;;:::o;19945:362::-;20086:3;20107:65;20170:1;20165:3;20107:65;:::i;:::-;20100:72;;20181:93;20270:3;20181:93;:::i;:::-;20299:1;20294:3;20290:11;20283:18;;19945:362;;;:::o;20313:748::-;20562:4;20600:3;20589:9;20585:19;20577:27;;20614:71;20682:1;20671:9;20667:17;20658:6;20614:71;:::i;:::-;20695:72;20763:2;20752:9;20748:18;20739:6;20695:72;:::i;:::-;20777;20845:2;20834:9;20830:18;20821:6;20777:72;:::i;:::-;20896:9;20890:4;20886:20;20881:2;20870:9;20866:18;20859:48;20924:130;21049:4;20924:130;:::i;:::-;20916:138;;20313:748;;;;;;:::o;21067:141::-;21123:5;21154:6;21148:13;21139:22;;21170:32;21196:5;21170:32;:::i;:::-;21067:141;;;;:::o;21214:349::-;21283:6;21332:2;21320:9;21311:7;21307:23;21303:32;21300:119;;;21338:79;;:::i;:::-;21300:119;21458:1;21483:63;21538:7;21529:6;21518:9;21514:22;21483:63;:::i;:::-;21473:73;;21429:127;21214:349;;;;:::o;21569:141::-;21618:4;21641:3;21633:11;;21664:3;21661:1;21654:14;21698:4;21695:1;21685:18;21677:26;;21569:141;;;:::o;21716:93::-;21753:6;21800:2;21795;21788:5;21784:14;21780:23;21770:33;;21716:93;;;:::o;21815:107::-;21859:8;21909:5;21903:4;21899:16;21878:37;;21815:107;;;;:::o;21928:393::-;21997:6;22047:1;22035:10;22031:18;22070:97;22100:66;22089:9;22070:97;:::i;:::-;22188:39;22218:8;22207:9;22188:39;:::i;:::-;22176:51;;22260:4;22256:9;22249:5;22245:21;22236:30;;22309:4;22299:8;22295:19;22288:5;22285:30;22275:40;;22004:317;;21928:393;;;;;:::o;22327:60::-;22355:3;22376:5;22369:12;;22327:60;;;:::o;22393:142::-;22443:9;22476:53;22494:34;22503:24;22521:5;22503:24;:::i;:::-;22494:34;:::i;:::-;22476:53;:::i;:::-;22463:66;;22393:142;;;:::o;22541:75::-;22584:3;22605:5;22598:12;;22541:75;;;:::o;22622:269::-;22732:39;22763:7;22732:39;:::i;:::-;22793:91;22842:41;22866:16;22842:41;:::i;:::-;22834:6;22827:4;22821:11;22793:91;:::i;:::-;22787:4;22780:105;22698:193;22622:269;;;:::o;22897:73::-;22942:3;22897:73;:::o;22976:189::-;23053:32;;:::i;:::-;23094:65;23152:6;23144;23138:4;23094:65;:::i;:::-;23029:136;22976:189;;:::o;23171:186::-;23231:120;23248:3;23241:5;23238:14;23231:120;;;23302:39;23339:1;23332:5;23302:39;:::i;:::-;23275:1;23268:5;23264:13;23255:22;;23231:120;;;23171:186;;:::o;23363:543::-;23464:2;23459:3;23456:11;23453:446;;;23498:38;23530:5;23498:38;:::i;:::-;23582:29;23600:10;23582:29;:::i;:::-;23572:8;23568:44;23765:2;23753:10;23750:18;23747:49;;;23786:8;23771:23;;23747:49;23809:80;23865:22;23883:3;23865:22;:::i;:::-;23855:8;23851:37;23838:11;23809:80;:::i;:::-;23468:431;;23453:446;23363:543;;;:::o;23912:117::-;23966:8;24016:5;24010:4;24006:16;23985:37;;23912:117;;;;:::o;24035:169::-;24079:6;24112:51;24160:1;24156:6;24148:5;24145:1;24141:13;24112:51;:::i;:::-;24108:56;24193:4;24187;24183:15;24173:25;;24086:118;24035:169;;;;:::o;24209:295::-;24285:4;24431:29;24456:3;24450:4;24431:29;:::i;:::-;24423:37;;24493:3;24490:1;24486:11;24480:4;24477:21;24469:29;;24209:295;;;;:::o;24509:1395::-;24626:37;24659:3;24626:37;:::i;:::-;24728:18;24720:6;24717:30;24714:56;;;24750:18;;:::i;:::-;24714:56;24794:38;24826:4;24820:11;24794:38;:::i;:::-;24879:67;24939:6;24931;24925:4;24879:67;:::i;:::-;24973:1;24997:4;24984:17;;25029:2;25021:6;25018:14;25046:1;25041:618;;;;25703:1;25720:6;25717:77;;;25769:9;25764:3;25760:19;25754:26;25745:35;;25717:77;25820:67;25880:6;25873:5;25820:67;:::i;:::-;25814:4;25807:81;25676:222;25011:887;;25041:618;25093:4;25089:9;25081:6;25077:22;25127:37;25159:4;25127:37;:::i;:::-;25186:1;25200:208;25214:7;25211:1;25208:14;25200:208;;;25293:9;25288:3;25284:19;25278:26;25270:6;25263:42;25344:1;25336:6;25332:14;25322:24;;25391:2;25380:9;25376:18;25363:31;;25237:4;25234:1;25230:12;25225:17;;25200:208;;;25436:6;25427:7;25424:19;25421:179;;;25494:9;25489:3;25485:19;25479:26;25537:48;25579:4;25571:6;25567:17;25556:9;25537:48;:::i;:::-;25529:6;25522:64;25444:156;25421:179;25646:1;25642;25634:6;25630:14;25626:22;25620:4;25613:36;25048:611;;;25011:887;;24601:1303;;;24509:1395;;:::o;25910:172::-;26050:24;26046:1;26038:6;26034:14;26027:48;25910:172;:::o;26088:366::-;26230:3;26251:67;26315:2;26310:3;26251:67;:::i;:::-;26244:74;;26327:93;26416:3;26327:93;:::i;:::-;26445:2;26440:3;26436:12;26429:19;;26088:366;;;:::o;26460:419::-;26626:4;26664:2;26653:9;26649:18;26641:26;;26713:9;26707:4;26703:20;26699:1;26688:9;26684:17;26677:47;26741:131;26867:4;26741:131;:::i;:::-;26733:139;;26460:419;;;:::o;26885:180::-;27025:32;27021:1;27013:6;27009:14;27002:56;26885:180;:::o;27071:366::-;27213:3;27234:67;27298:2;27293:3;27234:67;:::i;:::-;27227:74;;27310:93;27399:3;27310:93;:::i;:::-;27428:2;27423:3;27419:12;27412:19;;27071:366;;;:::o;27443:419::-;27609:4;27647:2;27636:9;27632:18;27624:26;;27696:9;27690:4;27686:20;27682:1;27671:9;27667:17;27660:47;27724:131;27850:4;27724:131;:::i;:::-;27716:139;;27443:419;;;:::o;27868:167::-;28008:19;28004:1;27996:6;27992:14;27985:43;27868:167;:::o;28041:366::-;28183:3;28204:67;28268:2;28263:3;28204:67;:::i;:::-;28197:74;;28280:93;28369:3;28280:93;:::i;:::-;28398:2;28393:3;28389:12;28382:19;;28041:366;;;:::o;28413:419::-;28579:4;28617:2;28606:9;28602:18;28594:26;;28666:9;28660:4;28656:20;28652:1;28641:9;28637:17;28630:47;28694:131;28820:4;28694:131;:::i;:::-;28686:139;;28413:419;;;:::o;28838:170::-;28978:22;28974:1;28966:6;28962:14;28955:46;28838:170;:::o;29014:366::-;29156:3;29177:67;29241:2;29236:3;29177:67;:::i;:::-;29170:74;;29253:93;29342:3;29253:93;:::i;:::-;29371:2;29366:3;29362:12;29355:19;;29014:366;;;:::o;29386:419::-;29552:4;29590:2;29579:9;29575:18;29567:26;;29639:9;29633:4;29629:20;29625:1;29614:9;29610:17;29603:47;29667:131;29793:4;29667:131;:::i;:::-;29659:139;;29386:419;;;:::o;29811:197::-;29980:21;29975:3;29968:34;29811:197;:::o;30014:148::-;30116:11;30153:3;30138:18;;30014:148;;;;:::o;30168:390::-;30274:3;30302:39;30335:5;30302:39;:::i;:::-;30357:89;30439:6;30434:3;30357:89;:::i;:::-;30350:96;;30455:65;30513:6;30508:3;30501:4;30494:5;30490:16;30455:65;:::i;:::-;30545:6;30540:3;30536:16;30529:23;;30278:280;30168:390;;;;:::o;30564:178::-;30732:3;30727;30720:16;30564:178;:::o;30748:806::-;31061:3;31076:138;31210:3;31076:138;:::i;:::-;31239:2;31234:3;31230:12;31223:19;;31259:95;31350:3;31341:6;31259:95;:::i;:::-;31252:102;;31364:137;31497:3;31364:137;:::i;:::-;31526:1;31521:3;31517:11;31510:18;;31545:3;31538:10;;30748:806;;;;:::o;31560:233::-;31599:3;31622:24;31640:5;31622:24;:::i;:::-;31613:33;;31668:66;31661:5;31658:77;31655:103;;31738:18;;:::i;:::-;31655:103;31785:1;31778:5;31774:13;31767:20;;31560:233;;;:::o;31799:180::-;31847:77;31844:1;31837:88;31944:4;31941:1;31934:15;31968:4;31965:1;31958:15;32007:314;32103:3;32124:70;32187:6;32182:3;32124:70;:::i;:::-;32117:77;;32204:56;32253:6;32248:3;32241:5;32204:56;:::i;:::-;32285:29;32307:6;32285:29;:::i;:::-;32280:3;32276:39;32269:46;;32007:314;;;;;:::o;32327:660::-;32532:4;32570:3;32559:9;32555:19;32547:27;;32584:71;32652:1;32641:9;32637:17;32628:6;32584:71;:::i;:::-;32665:72;32733:2;32722:9;32718:18;32709:6;32665:72;:::i;:::-;32747;32815:2;32804:9;32800:18;32791:6;32747:72;:::i;:::-;32866:9;32860:4;32856:20;32851:2;32840:9;32836:18;32829:48;32894:86;32975:4;32966:6;32958;32894:86;:::i;:::-;32886:94;;32327:660;;;;;;;;:::o;33017:874::-;33120:3;33157:5;33151:12;33186:36;33212:9;33186:36;:::i;:::-;33238:89;33320:6;33315:3;33238:89;:::i;:::-;33231:96;;33358:1;33347:9;33343:17;33374:1;33369:166;;;;33549:1;33544:341;;;;33336:549;;33369:166;33453:4;33449:9;33438;33434:25;33429:3;33422:38;33515:6;33508:14;33501:22;33493:6;33489:35;33484:3;33480:45;33473:52;;33369:166;;33544:341;33611:38;33643:5;33611:38;:::i;:::-;33671:1;33685:154;33699:6;33696:1;33693:13;33685:154;;;33773:7;33767:14;33763:1;33758:3;33754:11;33747:35;33823:1;33814:7;33810:15;33799:26;;33721:4;33718:1;33714:12;33709:17;;33685:154;;;33868:6;33863:3;33859:16;33852:23;;33551:334;;33336:549;;33124:767;;33017:874;;;;:::o;33897:429::-;34074:3;34096:92;34184:3;34175:6;34096:92;:::i;:::-;34089:99;;34205:95;34296:3;34287:6;34205:95;:::i;:::-;34198:102;;34317:3;34310:10;;33897:429;;;;;:::o;34332:102::-;34374:8;34421:5;34418:1;34414:13;34393:34;;34332:102;;;:::o;34440:848::-;34501:5;34508:4;34532:6;34523:15;;34556:5;34547:14;;34570:712;34591:1;34581:8;34578:15;34570:712;;;34686:4;34681:3;34677:14;34671:4;34668:24;34665:50;;;34695:18;;:::i;:::-;34665:50;34745:1;34735:8;34731:16;34728:451;;;35160:4;35153:5;35149:16;35140:25;;34728:451;35210:4;35204;35200:15;35192:23;;35240:32;35263:8;35240:32;:::i;:::-;35228:44;;34570:712;;;34440:848;;;;;;;:::o;35294:1073::-;35348:5;35539:8;35529:40;;35560:1;35551:10;;35562:5;;35529:40;35588:4;35578:36;;35605:1;35596:10;;35607:5;;35578:36;35674:4;35722:1;35717:27;;;;35758:1;35753:191;;;;35667:277;;35717:27;35735:1;35726:10;;35737:5;;;35753:191;35798:3;35788:8;35785:17;35782:43;;;35805:18;;:::i;:::-;35782:43;35854:8;35851:1;35847:16;35838:25;;35889:3;35882:5;35879:14;35876:40;;;35896:18;;:::i;:::-;35876:40;35929:5;;;35667:277;;36053:2;36043:8;36040:16;36034:3;36028:4;36025:13;36021:36;36003:2;35993:8;35990:16;35985:2;35979:4;35976:12;35972:35;35956:111;35953:246;;;36109:8;36103:4;36099:19;36090:28;;36144:3;36137:5;36134:14;36131:40;;;36151:18;;:::i;:::-;36131:40;36184:5;;35953:246;36224:42;36262:3;36252:8;36246:4;36243:1;36224:42;:::i;:::-;36209:57;;;;36298:4;36293:3;36289:14;36282:5;36279:25;36276:51;;;36307:18;;:::i;:::-;36276:51;36356:4;36349:5;36345:16;36336:25;;35294:1073;;;;;;:::o;36373:281::-;36431:5;36455:23;36473:4;36455:23;:::i;:::-;36447:31;;36499:25;36515:8;36499:25;:::i;:::-;36487:37;;36543:104;36580:66;36570:8;36564:4;36543:104;:::i;:::-;36534:113;;36373:281;;;;:::o;36660:175::-;36800:27;36796:1;36788:6;36784:14;36777:51;36660:175;:::o;36841:366::-;36983:3;37004:67;37068:2;37063:3;37004:67;:::i;:::-;36997:74;;37080:93;37169:3;37080:93;:::i;:::-;37198:2;37193:3;37189:12;37182:19;;36841:366;;;:::o;37213:419::-;37379:4;37417:2;37406:9;37402:18;37394:26;;37466:9;37460:4;37456:20;37452:1;37441:9;37437:17;37430:47;37494:131;37620:4;37494:131;:::i;:::-;37486:139;;37213:419;;;:::o;37638:177::-;37778:29;37774:1;37766:6;37762:14;37755:53;37638:177;:::o;37821:366::-;37963:3;37984:67;38048:2;38043:3;37984:67;:::i;:::-;37977:74;;38060:93;38149:3;38060:93;:::i;:::-;38178:2;38173:3;38169:12;38162:19;;37821:366;;;:::o;38193:419::-;38359:4;38397:2;38386:9;38382:18;38374:26;;38446:9;38440:4;38436:20;38432:1;38421:9;38417:17;38410:47;38474:131;38600:4;38474:131;:::i;:::-;38466:139;;38193:419;;;:::o;38618:178::-;38758:30;38754:1;38746:6;38742:14;38735:54;38618:178;:::o;38802:366::-;38944:3;38965:67;39029:2;39024:3;38965:67;:::i;:::-;38958:74;;39041:93;39130:3;39041:93;:::i;:::-;39159:2;39154:3;39150:12;39143:19;;38802:366;;;:::o;39174:419::-;39340:4;39378:2;39367:9;39363:18;39355:26;;39427:9;39421:4;39417:20;39413:1;39402:9;39398:17;39391:47;39455:131;39581:4;39455:131;:::i;:::-;39447:139;;39174:419;;;:::o;39599:175::-;39739:27;39735:1;39727:6;39723:14;39716:51;39599:175;:::o;39780:366::-;39922:3;39943:67;40007:2;40002:3;39943:67;:::i;:::-;39936:74;;40019:93;40108:3;40019:93;:::i;:::-;40137:2;40132:3;40128:12;40121:19;;39780:366;;;:::o;40152:419::-;40318:4;40356:2;40345:9;40341:18;40333:26;;40405:9;40399:4;40395:20;40391:1;40380:9;40376:17;40369:47;40433:131;40559:4;40433:131;:::i;:::-;40425:139;;40152:419;;;:::o;40577:228::-;40717:34;40713:1;40705:6;40701:14;40694:58;40786:11;40781:2;40773:6;40769:15;40762:36;40577:228;:::o;40811:366::-;40953:3;40974:67;41038:2;41033:3;40974:67;:::i;:::-;40967:74;;41050:93;41139:3;41050:93;:::i;:::-;41168:2;41163:3;41159:12;41152:19;;40811:366;;;:::o;41183:419::-;41349:4;41387:2;41376:9;41372:18;41364:26;;41436:9;41430:4;41426:20;41422:1;41411:9;41407:17;41400:47;41464:131;41590:4;41464:131;:::i;:::-;41456:139;;41183:419;;;:::o;41608:182::-;41748:34;41744:1;41736:6;41732:14;41725:58;41608:182;:::o;41796:366::-;41938:3;41959:67;42023:2;42018:3;41959:67;:::i;:::-;41952:74;;42035:93;42124:3;42035:93;:::i;:::-;42153:2;42148:3;42144:12;42137:19;;41796:366;;;:::o;42168:419::-;42334:4;42372:2;42361:9;42357:18;42349:26;;42421:9;42415:4;42411:20;42407:1;42396:9;42392:17;42385:47;42449:131;42575:4;42449:131;:::i;:::-;42441:139;;42168:419;;;:::o;42593:180::-;42641:77;42638:1;42631:88;42738:4;42735:1;42728:15;42762:4;42759:1;42752:15;42779:222;42919:34;42915:1;42907:6;42903:14;42896:58;42988:5;42983:2;42975:6;42971:15;42964:30;42779:222;:::o;43007:366::-;43149:3;43170:67;43234:2;43229:3;43170:67;:::i;:::-;43163:74;;43246:93;43335:3;43246:93;:::i;:::-;43364:2;43359:3;43355:12;43348:19;;43007:366;;;:::o;43379:419::-;43545:4;43583:2;43572:9;43568:18;43560:26;;43632:9;43626:4;43622:20;43618:1;43607:9;43603:17;43596:47;43660:131;43786:4;43660:131;:::i;:::-;43652:139;;43379:419;;;:::o

Swarm Source

ipfs://9fd9aed98266c7590ef7da3ec7abdf7904850c691af7020ad39998839e4f5224
[ 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.