ETH Price: $3,304.48 (-3.15%)
Gas: 17 Gwei

Token

Pepelodeon (PLDN)
 

Overview

Max Total Supply

4,444 PLDN

Holders

3,188

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
rill.eth
Balance
1 PLDN
0x546b4a7a30b3193badf70e1d43d8142928f3db0b
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Pepelodeon

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

// PEPELODEON
// Max Supply = 4444
// Max per wallet = 5
// 1 free, rest 0.005 eth each

pragma solidity ^0.8.0;

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b)
        private
        pure
        returns (bytes32 value)
    {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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 substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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.
     *
     * _Available since v3.4._
     */
    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.
     *
     * _Available since v3.4._
     */
    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.
     *
     * _Available since v3.4._
     */
    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 addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

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

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 1;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    string private _name;
    string private _symbol;
    mapping(uint256 => TokenOwnership) private _ownerships;
    mapping(address => AddressData) private _addressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }

    function totalSupply() public view override returns (uint256) {
        return currentIndex - 1;
    }

    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }

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

    function balanceOf(address owner) public view override returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: balance query for the zero address"
        );
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: number minted query for the zero address"
        );
        return uint256(_addressData[owner].numberMinted);
    }

    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }

        for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(
                    abi.encodePacked(
                        baseURI,
                        tokenId.toString(),
                        _getUriExtension()
                    )
                )
                : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function _getUriExtension() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");

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

        _approve(to, tokenId, owner);
    }

    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721A: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        require(operator != _msgSender(), "ERC721A: approve to caller");

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

    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(
                _checkOnERC721Received(address(0), to, updatedIndex, _data),
                "ERC721A: transfer to non ERC721Receiver implementer"
            );
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(
            isApprovedOrOwner,
            "ERC721A: transfer caller is not owner nor approved"
        );

        require(
            prevOwnership.addr == from,
            "ERC721A: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);
        _approve(address(0), tokenId, prevOwnership.addr);

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    uint256 public nextOwnerToExplicitlySet = 0;

    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract Pepelodeon is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;
    using SafeMath for uint256;

    string public uriSuffix = ".json";

    uint256 public MAX_PER_Transaction = 5; // maximum amount that user can mint per transaction
    uint256 public MAX_PER_Wallet = 5;
    

    //prices
   
    uint256 public price = 0.005 ether; 

    

    uint256 private constant TotalCollectionSize_ = 4444; // total number of nfts
    uint256 private constant MaxMintPerBatch_ = 200; //max mint per traction


    bool public paused = true;
    bool public presaleIsActive = false;

    string private baseTokenURI="ipfs://QmToDGTjhPKFoZknRHpAKWbcCSM71Jvy8E8G3CxVD7AwNh/";
    

    bytes32 public merkleRoot;

    constructor()
        ERC721A(
            "Pepelodeon",
            "PLDN",
             MaxMintPerBatch_,
            TotalCollectionSize_
        )
    {
       
        
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721A)
        returns (bool)
    {
        return
            interfaceId == 0x2a55205a || super.supportsInterface(interfaceId);
    }

    function setMerkleRoot(bytes32 m) public onlyOwner {
        merkleRoot = m;
    }

    function getMerkleRoot() public view returns (bytes32) {
        return merkleRoot;
    }

 

    function mint(uint256 quantity) public payable {
        require(!paused, "mint is paused");
        require(
            totalSupply() + quantity <= TotalCollectionSize_,
            "reached max supply"
        );
        require(numberMinted(msg.sender) + quantity <= MAX_PER_Wallet, "limit per wallet exceeded");
        require(quantity <= MAX_PER_Transaction, "can not mint this many");

        if(msg.value==0 && quantity==1)
        {
        require(balanceOf(msg.sender)<1,"Already minted free!");
            _safeMint(msg.sender, quantity);
        }
        else if(balanceOf(msg.sender)>=1)
        {
        require(msg.value >=_shouldPay(quantity),"Insufficient funds!");
            _safeMint(msg.sender, quantity);
        }
        else
        {
        require(msg.value >=_shouldPay(quantity-1), "Insufficient funds!");
            _safeMint(msg.sender, quantity);
        }
    
    }

    function _shouldPay(uint256 _quantity) 
        private 
        view
        returns(uint256)
    {
        uint256  shouldPay=price*_quantity;
        return shouldPay;
    }

    function isValid(bytes32[] memory merkleproof, bytes32 leaf)
        public
        view
        returns (bool)
    {
        return MerkleProof.verify(merkleproof, merkleRoot, leaf);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
       
            string memory baseURI = _baseURI();
            return
                bytes(baseURI).length > 0
                    ? string(
                        abi.encodePacked(baseURI, tokenId.toString(),uriSuffix)
                    )
                    : "";
       
        
    }



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

    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    function getOwnershipData(uint256 tokenId)
        external
        view
        returns (TokenOwnership memory)
    {
        return ownershipOf(tokenId);
    }

    function withdraw() public onlyOwner nonReentrant {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }


   

    function setMAX_PER_Transaction(uint256 q) public onlyOwner {
        MAX_PER_Transaction = q;
    }
  

    function setMaxPerWallet(uint256 _newLimit) public onlyOwner {
        MAX_PER_Wallet = _newLimit;
    }

   

    function pause(bool _state) public onlyOwner {
        paused = _state;
    }


    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Wallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"setMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"m","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001805560006008556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200005a92919062000323565b506005600b556005600c556611c37937e08000600d556001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506040518060600160405280603681526020016200550e60369139600f9080519060200190620000d792919062000323565b50348015620000e557600080fd5b506040518060400160405280600a81526020017f506570656c6f64656f6e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f504c444e0000000000000000000000000000000000000000000000000000000081525060c861115c620001776200016b6200025760201b60201c565b6200025f60201b60201c565b60008111620001bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b49062000443565b60405180910390fd5b6000821162000203576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001fa9062000421565b60405180910390fd5b83600290805190602001906200021b92919062000323565b5082600390805190602001906200023492919062000323565b508160a08181525050806080818152505050505050600160098190555062000579565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003319062000476565b90600052602060002090601f016020900481019282620003555760008555620003a1565b82601f106200037057805160ff1916838001178555620003a1565b82800160010185558215620003a1579182015b82811115620003a057825182559160200191906001019062000383565b5b509050620003b09190620003b4565b5090565b5b80821115620003cf576000816000905550600101620003b5565b5090565b6000620003e260278362000465565b9150620003ef82620004db565b604082019050919050565b600062000409602e8362000465565b915062000416826200052a565b604082019050919050565b600060208201905081810360008301526200043c81620003d3565b9050919050565b600060208201905081810360008301526200045e81620003fa565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200048f57607f821691505b60208210811415620004a657620004a5620004ac565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a051614f64620005aa600039600081816124340152818161245d0152612ca3015260005050614f646000f3fe6080604052600436106102255760003560e01c80635c975abb11610123578063a0712d68116100ab578063d7224ba01161006f578063d7224ba01461080e578063dc33e68114610839578063e268e4d314610876578063e985e9c51461089f578063f2fde38b146108dc57610225565b8063a0712d6814610726578063a22cb46514610742578063b88d4fde1461076b578063b8a20ed014610794578063c87b56dd146107d157610225565b80637cb64759116100f25780637cb647591461063f5780638da5cb5b146106685780639231ab2a1461069357806395d89b41146106d0578063a035b1fe146106fb57610225565b80635c975abb146105835780636352211e146105ae57806370a08231146105eb578063715018a61461062857610225565b80632eb4a7ab116101b15780634959065711610175578063495906571461049c5780634f6ccce7146104c757806351d7ff93146105045780635503a0e81461052f57806355f804b31461055a57610225565b80632eb4a7ab146103c95780632f745c59146103f457806330f72cd4146104315780633ccfd60b1461045c57806342842e0e1461047357610225565b8063095ea7b3116101f8578063095ea7b3146102f857806317e04a711461032157806318160ddd1461034c57806323b872dd1461037757806325dc45ce146103a057610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906136b2565b610905565b60405161025e9190613dd1565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613658565b610947565b005b34801561029c57600080fd5b506102a56109e0565b6040516102b29190613e07565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190613755565b610a72565b6040516102ef9190613d6a565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a91906135bc565b610af7565b005b34801561032d57600080fd5b50610336610c10565b60405161034391906141c4565b60405180910390f35b34801561035857600080fd5b50610361610c16565b60405161036e91906141c4565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906134a6565b610c2b565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613755565b610c3b565b005b3480156103d557600080fd5b506103de610cc1565b6040516103eb9190613dec565b60405180910390f35b34801561040057600080fd5b5061041b600480360381019061041691906135bc565b610cc7565b60405161042891906141c4565b60405180910390f35b34801561043d57600080fd5b50610446610ec5565b6040516104539190613dd1565b60405180910390f35b34801561046857600080fd5b50610471610ed8565b005b34801561047f57600080fd5b5061049a600480360381019061049591906134a6565b61102a565b005b3480156104a857600080fd5b506104b161104a565b6040516104be9190613dec565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613755565b611054565b6040516104fb91906141c4565b60405180910390f35b34801561051057600080fd5b506105196110a7565b60405161052691906141c4565b60405180910390f35b34801561053b57600080fd5b506105446110ad565b6040516105519190613e07565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c919061370c565b61113b565b005b34801561058f57600080fd5b506105986111d1565b6040516105a59190613dd1565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190613755565b6111e4565b6040516105e29190613d6a565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190613439565b6111fa565b60405161061f91906141c4565b60405180910390f35b34801561063457600080fd5b5061063d6112e3565b005b34801561064b57600080fd5b5061066660048036038101906106619190613685565b61136b565b005b34801561067457600080fd5b5061067d6113f1565b60405161068a9190613d6a565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613755565b61141a565b6040516106c791906141a9565b60405180910390f35b3480156106dc57600080fd5b506106e5611432565b6040516106f29190613e07565b60405180910390f35b34801561070757600080fd5b506107106114c4565b60405161071d91906141c4565b60405180910390f35b610740600480360381019061073b9190613755565b6114ca565b005b34801561074e57600080fd5b506107696004803603810190610764919061357c565b61174d565b005b34801561077757600080fd5b50610792600480360381019061078d91906134f9565b6118ce565b005b3480156107a057600080fd5b506107bb60048036038101906107b691906135fc565b61192a565b6040516107c89190613dd1565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613755565b611941565b6040516108059190613e07565b60405180910390f35b34801561081a57600080fd5b506108236119eb565b60405161083091906141c4565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b9190613439565b6119f1565b60405161086d91906141c4565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613755565b611a03565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613466565b611a89565b6040516108d39190613dd1565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190613439565b611b1d565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610940575061093f82611c15565b5b9050919050565b61094f611d5f565b73ffffffffffffffffffffffffffffffffffffffff1661096d6113f1565b73ffffffffffffffffffffffffffffffffffffffff16146109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba90613f89565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600280546109ef9061459e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b9061459e565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611d67565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390614149565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b02826111e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90614009565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611d5f565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611d5f565b611a89565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613ee9565b60405180910390fd5b610c0b838383611d75565b505050565b600c5481565b600060018054610c269190614450565b905090565b610c36838383611e27565b505050565b610c43611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610c616113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613f89565b60405180910390fd5b80600b8190555050565b60105481565b6000610cd2836111fa565b8210610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90613e29565b60405180910390fd5b6000610d1d610c16565b905060008060005b83811015610e83576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e1757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e6f5786841415610e60578195505050505050610ebf565b8380610e6b90614601565b9450505b508080610e7b90614601565b915050610d25565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb6906140c9565b60405180910390fd5b92915050565b600e60019054906101000a900460ff1681565b610ee0611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610efe6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613f89565b60405180910390fd5b60026009541415610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906140e9565b60405180910390fd5b60026009819055506000610fac6113f1565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fcf90613d55565b60006040518083038185875af1925050503d806000811461100c576040519150601f19603f3d011682016040523d82523d6000602084013e611011565b606091505b505090508061101f57600080fd5b506001600981905550565b611045838383604051806020016040528060008152506118ce565b505050565b6000601054905090565b600061105e610c16565b821061109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690613e89565b60405180910390fd5b819050919050565b600b5481565b600a80546110ba9061459e565b80601f01602080910402602001604051908101604052809291908181526020018280546110e69061459e565b80156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b505050505081565b611143611d5f565b73ffffffffffffffffffffffffffffffffffffffff166111616113f1565b73ffffffffffffffffffffffffffffffffffffffff16146111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90613f89565b60405180910390fd5b80600f90805190602001906111cd929190613160565b5050565b600e60009054906101000a900460ff1681565b60006111ef826123e0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613f09565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112eb611d5f565b73ffffffffffffffffffffffffffffffffffffffff166113096113f1565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613f89565b60405180910390fd5b61136960006125e3565b565b611373611d5f565b73ffffffffffffffffffffffffffffffffffffffff166113916113f1565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613f89565b60405180910390fd5b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114226131e6565b61142b826123e0565b9050919050565b6060600380546114419061459e565b80601f016020809104026020016040519081016040528092919081815260200182805461146d9061459e565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b600d5481565b600e60009054906101000a900460ff161561151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614129565b60405180910390fd5b61115c81611526610c16565b611530919061433b565b1115611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613f29565b60405180910390fd5b600c548161157e336119f1565b611588919061433b565b11156115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613f49565b60405180910390fd5b600b5481111561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590614089565b60405180910390fd5b60003414801561161e5750600181145b1561167d57600161162e336111fa565b1061166e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611665906140a9565b60405180910390fd5b61167833826126a7565b61174a565b6001611688336111fa565b106116e757611696816126c5565b3410156116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614189565b60405180910390fd5b6116e233826126a7565b611749565b6116fc6001826116f79190614450565b6126c5565b34101561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590614189565b60405180910390fd5b61174833826126a7565b5b5b50565b611755611d5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613fc9565b60405180910390fd5b80600760006117d0611d5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187d611d5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c29190613dd1565b60405180910390a35050565b6118d9848484611e27565b6118e5848484846126e1565b611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614029565b60405180910390fd5b50505050565b60006119398360105484612878565b905092915050565b606061194c82611d67565b61198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290613fa9565b60405180910390fd5b600061199561288f565b905060008151116119b557604051806020016040528060008152506119e3565b806119bf84612921565b600a6040516020016119d393929190613d24565b6040516020818303038152906040525b915050919050565b60085481565b60006119fc82612a82565b9050919050565b611a0b611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611a296113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613f89565b60405180910390fd5b80600c8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b25611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611b436113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090613e49565b60405180910390fd5b611c12816125e3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d4857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d585750611d5782612b6b565b5b9050919050565b600033905090565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e32826123e0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e59611d5f565b73ffffffffffffffffffffffffffffffffffffffff161480611eb55750611e7e611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611e9d84610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ed15750611ed08260000151611ecb611d5f565b611a89565b5b905080611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90613fe9565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90613f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613ea9565b60405180910390fd5b6120028585856001612bd5565b6120126000848460000151611d75565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612080919061441c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661212491906142f5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461222a919061433b565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612370576122a081611d67565b1561236f576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123d88686866001612bdb565b505050505050565b6123e86131e6565b6123f182611d67565b612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790613e69565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106124945760017f0000000000000000000000000000000000000000000000000000000000000000846124879190614450565b612491919061433b565b90505b60008390505b8181106125a2576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461258e578093505050506125de565b50808061259a90614574565b91505061249a565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590614109565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126c1828260405180602001604052806000815250612be1565b5050565b60008082600d546126d691906143c2565b905080915050919050565b60006127028473ffffffffffffffffffffffffffffffffffffffff166130c1565b1561286b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261272b611d5f565b8786866040518563ffffffff1660e01b815260040161274d9493929190613d85565b602060405180830381600087803b15801561276757600080fd5b505af192505050801561279857506040513d601f19601f8201168201806040525081019061279591906136df565b60015b61281b573d80600081146127c8576040519150601f19603f3d011682016040523d82523d6000602084013e6127cd565b606091505b50600081511415612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614029565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612870565b600190505b949350505050565b60008261288585846130d4565b1490509392505050565b6060600f805461289e9061459e565b80601f01602080910402602001604051908101604052809291908181526020018280546128ca9061459e565b80156129175780601f106128ec57610100808354040283529160200191612917565b820191906000526020600020905b8154815290600101906020018083116128fa57829003601f168201915b5050505050905090565b60606000821415612969576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a7d565b600082905060005b6000821461299b57808061298490614601565b915050600a826129949190614391565b9150612971565b60008167ffffffffffffffff8111156129b7576129b6614737565b5b6040519080825280601f01601f1916602001820160405280156129e95781602001600182028036833780820191505090505b5090505b60008514612a7657600182612a029190614450565b9150600a85612a11919061464a565b6030612a1d919061433b565b60f81b818381518110612a3357612a32614708565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a6f9190614391565b94506129ed565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90613ec9565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f90614069565b60405180910390fd5b612c6181611d67565b15612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9890614049565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614169565b60405180910390fd5b612d116000858386612bd5565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e0e91906142f5565b6fffffffffffffffffffffffffffffffff168152602001858360200151612e3591906142f5565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156130a457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304460008884886126e1565b613083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307a90614029565b60405180910390fd5b818061308e90614601565b925050808061309c90614601565b915050612fd3565b50806001819055506130b96000878588612bdb565b505050505050565b600080823b905060008111915050919050565b60008082905060005b845181101561313e5760008582815181106130fb576130fa614708565b5b6020026020010151905080831161311d576131168382613149565b925061312a565b6131278184613149565b92505b50808061313690614601565b9150506130dd565b508091505092915050565b600082600052816020526040600020905092915050565b82805461316c9061459e565b90600052602060002090601f01602090048101928261318e57600085556131d5565b82601f106131a757805160ff19168380011785556131d5565b828001600101855582156131d5579182015b828111156131d45782518255916020019190600101906131b9565b5b5090506131e29190613220565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613239576000816000905550600101613221565b5090565b600061325061324b84614204565b6141df565b905080838252602082019050828560208602820111156132735761327261476b565b5b60005b858110156132a357816132898882613389565b845260208401935060208301925050600181019050613276565b5050509392505050565b60006132c06132bb84614230565b6141df565b9050828152602081018484840111156132dc576132db614770565b5b6132e7848285614532565b509392505050565b60006133026132fd84614261565b6141df565b90508281526020810184848401111561331e5761331d614770565b5b613329848285614532565b509392505050565b60008135905061334081614ebb565b92915050565b600082601f83011261335b5761335a614766565b5b813561336b84826020860161323d565b91505092915050565b60008135905061338381614ed2565b92915050565b60008135905061339881614ee9565b92915050565b6000813590506133ad81614f00565b92915050565b6000815190506133c281614f00565b92915050565b600082601f8301126133dd576133dc614766565b5b81356133ed8482602086016132ad565b91505092915050565b600082601f83011261340b5761340a614766565b5b813561341b8482602086016132ef565b91505092915050565b60008135905061343381614f17565b92915050565b60006020828403121561344f5761344e61477a565b5b600061345d84828501613331565b91505092915050565b6000806040838503121561347d5761347c61477a565b5b600061348b85828601613331565b925050602061349c85828601613331565b9150509250929050565b6000806000606084860312156134bf576134be61477a565b5b60006134cd86828701613331565b93505060206134de86828701613331565b92505060406134ef86828701613424565b9150509250925092565b600080600080608085870312156135135761351261477a565b5b600061352187828801613331565b945050602061353287828801613331565b935050604061354387828801613424565b925050606085013567ffffffffffffffff81111561356457613563614775565b5b613570878288016133c8565b91505092959194509250565b600080604083850312156135935761359261477a565b5b60006135a185828601613331565b92505060206135b285828601613374565b9150509250929050565b600080604083850312156135d3576135d261477a565b5b60006135e185828601613331565b92505060206135f285828601613424565b9150509250929050565b600080604083850312156136135761361261477a565b5b600083013567ffffffffffffffff81111561363157613630614775565b5b61363d85828601613346565b925050602061364e85828601613389565b9150509250929050565b60006020828403121561366e5761366d61477a565b5b600061367c84828501613374565b91505092915050565b60006020828403121561369b5761369a61477a565b5b60006136a984828501613389565b91505092915050565b6000602082840312156136c8576136c761477a565b5b60006136d68482850161339e565b91505092915050565b6000602082840312156136f5576136f461477a565b5b6000613703848285016133b3565b91505092915050565b6000602082840312156137225761372161477a565b5b600082013567ffffffffffffffff8111156137405761373f614775565b5b61374c848285016133f6565b91505092915050565b60006020828403121561376b5761376a61477a565b5b600061377984828501613424565b91505092915050565b61378b81614484565b82525050565b61379a81614484565b82525050565b6137a981614496565b82525050565b6137b8816144a2565b82525050565b60006137c9826142a7565b6137d381856142bd565b93506137e3818560208601614541565b6137ec8161477f565b840191505092915050565b6000613802826142b2565b61380c81856142d9565b935061381c818560208601614541565b6138258161477f565b840191505092915050565b600061383b826142b2565b61384581856142ea565b9350613855818560208601614541565b80840191505092915050565b6000815461386e8161459e565b61387881866142ea565b9450600182166000811461389357600181146138a4576138d7565b60ff198316865281860193506138d7565b6138ad85614292565b60005b838110156138cf578154818901526001820191506020810190506138b0565b838801955050505b50505092915050565b60006138ed6022836142d9565b91506138f882614790565b604082019050919050565b60006139106026836142d9565b915061391b826147df565b604082019050919050565b6000613933602a836142d9565b915061393e8261482e565b604082019050919050565b60006139566023836142d9565b91506139618261487d565b604082019050919050565b60006139796025836142d9565b9150613984826148cc565b604082019050919050565b600061399c6031836142d9565b91506139a78261491b565b604082019050919050565b60006139bf6039836142d9565b91506139ca8261496a565b604082019050919050565b60006139e2602b836142d9565b91506139ed826149b9565b604082019050919050565b6000613a056012836142d9565b9150613a1082614a08565b602082019050919050565b6000613a286019836142d9565b9150613a3382614a31565b602082019050919050565b6000613a4b6026836142d9565b9150613a5682614a5a565b604082019050919050565b6000613a6e6020836142d9565b9150613a7982614aa9565b602082019050919050565b6000613a91602f836142d9565b9150613a9c82614ad2565b604082019050919050565b6000613ab4601a836142d9565b9150613abf82614b21565b602082019050919050565b6000613ad76032836142d9565b9150613ae282614b4a565b604082019050919050565b6000613afa6022836142d9565b9150613b0582614b99565b604082019050919050565b6000613b1d6000836142ce565b9150613b2882614be8565b600082019050919050565b6000613b406033836142d9565b9150613b4b82614beb565b604082019050919050565b6000613b63601d836142d9565b9150613b6e82614c3a565b602082019050919050565b6000613b866021836142d9565b9150613b9182614c63565b604082019050919050565b6000613ba96016836142d9565b9150613bb482614cb2565b602082019050919050565b6000613bcc6014836142d9565b9150613bd782614cdb565b602082019050919050565b6000613bef602e836142d9565b9150613bfa82614d04565b604082019050919050565b6000613c12601f836142d9565b9150613c1d82614d53565b602082019050919050565b6000613c35602f836142d9565b9150613c4082614d7c565b604082019050919050565b6000613c58600e836142d9565b9150613c6382614dcb565b602082019050919050565b6000613c7b602d836142d9565b9150613c8682614df4565b604082019050919050565b6000613c9e6022836142d9565b9150613ca982614e43565b604082019050919050565b6000613cc16013836142d9565b9150613ccc82614e92565b602082019050919050565b604082016000820151613ced6000850182613782565b506020820151613d006020850182613d15565b50505050565b613d0f81614514565b82525050565b613d1e8161451e565b82525050565b6000613d308286613830565b9150613d3c8285613830565b9150613d488284613861565b9150819050949350505050565b6000613d6082613b10565b9150819050919050565b6000602082019050613d7f6000830184613791565b92915050565b6000608082019050613d9a6000830187613791565b613da76020830186613791565b613db46040830185613d06565b8181036060830152613dc681846137be565b905095945050505050565b6000602082019050613de660008301846137a0565b92915050565b6000602082019050613e0160008301846137af565b92915050565b60006020820190508181036000830152613e2181846137f7565b905092915050565b60006020820190508181036000830152613e42816138e0565b9050919050565b60006020820190508181036000830152613e6281613903565b9050919050565b60006020820190508181036000830152613e8281613926565b9050919050565b60006020820190508181036000830152613ea281613949565b9050919050565b60006020820190508181036000830152613ec28161396c565b9050919050565b60006020820190508181036000830152613ee28161398f565b9050919050565b60006020820190508181036000830152613f02816139b2565b9050919050565b60006020820190508181036000830152613f22816139d5565b9050919050565b60006020820190508181036000830152613f42816139f8565b9050919050565b60006020820190508181036000830152613f6281613a1b565b9050919050565b60006020820190508181036000830152613f8281613a3e565b9050919050565b60006020820190508181036000830152613fa281613a61565b9050919050565b60006020820190508181036000830152613fc281613a84565b9050919050565b60006020820190508181036000830152613fe281613aa7565b9050919050565b6000602082019050818103600083015261400281613aca565b9050919050565b6000602082019050818103600083015261402281613aed565b9050919050565b6000602082019050818103600083015261404281613b33565b9050919050565b6000602082019050818103600083015261406281613b56565b9050919050565b6000602082019050818103600083015261408281613b79565b9050919050565b600060208201905081810360008301526140a281613b9c565b9050919050565b600060208201905081810360008301526140c281613bbf565b9050919050565b600060208201905081810360008301526140e281613be2565b9050919050565b6000602082019050818103600083015261410281613c05565b9050919050565b6000602082019050818103600083015261412281613c28565b9050919050565b6000602082019050818103600083015261414281613c4b565b9050919050565b6000602082019050818103600083015261416281613c6e565b9050919050565b6000602082019050818103600083015261418281613c91565b9050919050565b600060208201905081810360008301526141a281613cb4565b9050919050565b60006040820190506141be6000830184613cd7565b92915050565b60006020820190506141d96000830184613d06565b92915050565b60006141e96141fa565b90506141f582826145d0565b919050565b6000604051905090565b600067ffffffffffffffff82111561421f5761421e614737565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561424b5761424a614737565b5b6142548261477f565b9050602081019050919050565b600067ffffffffffffffff82111561427c5761427b614737565b5b6142858261477f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614300826144d8565b915061430b836144d8565b9250826fffffffffffffffffffffffffffffffff038211156143305761432f61467b565b5b828201905092915050565b600061434682614514565b915061435183614514565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143865761438561467b565b5b828201905092915050565b600061439c82614514565b91506143a783614514565b9250826143b7576143b66146aa565b5b828204905092915050565b60006143cd82614514565b91506143d883614514565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144115761441061467b565b5b828202905092915050565b6000614427826144d8565b9150614432836144d8565b9250828210156144455761444461467b565b5b828203905092915050565b600061445b82614514565b915061446683614514565b9250828210156144795761447861467b565b5b828203905092915050565b600061448f826144f4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561455f578082015181840152602081019050614544565b8381111561456e576000848401525b50505050565b600061457f82614514565b915060008214156145935761459261467b565b5b600182039050919050565b600060028204905060018216806145b657607f821691505b602082108114156145ca576145c96146d9565b5b50919050565b6145d98261477f565b810181811067ffffffffffffffff821117156145f8576145f7614737565b5b80604052505050565b600061460c82614514565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561463f5761463e61467b565b5b600182019050919050565b600061465582614514565b915061466083614514565b9250826146705761466f6146aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6c696d6974207065722077616c6c657420657863656564656400000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f416c7265616479206d696e746564206672656521000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6d696e7420697320706175736564000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614ec481614484565b8114614ecf57600080fd5b50565b614edb81614496565b8114614ee657600080fd5b50565b614ef2816144a2565b8114614efd57600080fd5b50565b614f09816144ac565b8114614f1457600080fd5b50565b614f2081614514565b8114614f2b57600080fd5b5056fea2646970667358221220a4a8238b75aca3e48f379bf4fe35ea9b1b6d408f5768d85c21ecb043910ff6bb64736f6c63430008070033697066733a2f2f516d546f4447546a68504b466f5a6b6e524870414b57626343534d37314a76793845384733437856443741774e682f

Deployed Bytecode

0x6080604052600436106102255760003560e01c80635c975abb11610123578063a0712d68116100ab578063d7224ba01161006f578063d7224ba01461080e578063dc33e68114610839578063e268e4d314610876578063e985e9c51461089f578063f2fde38b146108dc57610225565b8063a0712d6814610726578063a22cb46514610742578063b88d4fde1461076b578063b8a20ed014610794578063c87b56dd146107d157610225565b80637cb64759116100f25780637cb647591461063f5780638da5cb5b146106685780639231ab2a1461069357806395d89b41146106d0578063a035b1fe146106fb57610225565b80635c975abb146105835780636352211e146105ae57806370a08231146105eb578063715018a61461062857610225565b80632eb4a7ab116101b15780634959065711610175578063495906571461049c5780634f6ccce7146104c757806351d7ff93146105045780635503a0e81461052f57806355f804b31461055a57610225565b80632eb4a7ab146103c95780632f745c59146103f457806330f72cd4146104315780633ccfd60b1461045c57806342842e0e1461047357610225565b8063095ea7b3116101f8578063095ea7b3146102f857806317e04a711461032157806318160ddd1461034c57806323b872dd1461037757806325dc45ce146103a057610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906136b2565b610905565b60405161025e9190613dd1565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613658565b610947565b005b34801561029c57600080fd5b506102a56109e0565b6040516102b29190613e07565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190613755565b610a72565b6040516102ef9190613d6a565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a91906135bc565b610af7565b005b34801561032d57600080fd5b50610336610c10565b60405161034391906141c4565b60405180910390f35b34801561035857600080fd5b50610361610c16565b60405161036e91906141c4565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906134a6565b610c2b565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613755565b610c3b565b005b3480156103d557600080fd5b506103de610cc1565b6040516103eb9190613dec565b60405180910390f35b34801561040057600080fd5b5061041b600480360381019061041691906135bc565b610cc7565b60405161042891906141c4565b60405180910390f35b34801561043d57600080fd5b50610446610ec5565b6040516104539190613dd1565b60405180910390f35b34801561046857600080fd5b50610471610ed8565b005b34801561047f57600080fd5b5061049a600480360381019061049591906134a6565b61102a565b005b3480156104a857600080fd5b506104b161104a565b6040516104be9190613dec565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613755565b611054565b6040516104fb91906141c4565b60405180910390f35b34801561051057600080fd5b506105196110a7565b60405161052691906141c4565b60405180910390f35b34801561053b57600080fd5b506105446110ad565b6040516105519190613e07565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c919061370c565b61113b565b005b34801561058f57600080fd5b506105986111d1565b6040516105a59190613dd1565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190613755565b6111e4565b6040516105e29190613d6a565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190613439565b6111fa565b60405161061f91906141c4565b60405180910390f35b34801561063457600080fd5b5061063d6112e3565b005b34801561064b57600080fd5b5061066660048036038101906106619190613685565b61136b565b005b34801561067457600080fd5b5061067d6113f1565b60405161068a9190613d6a565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613755565b61141a565b6040516106c791906141a9565b60405180910390f35b3480156106dc57600080fd5b506106e5611432565b6040516106f29190613e07565b60405180910390f35b34801561070757600080fd5b506107106114c4565b60405161071d91906141c4565b60405180910390f35b610740600480360381019061073b9190613755565b6114ca565b005b34801561074e57600080fd5b506107696004803603810190610764919061357c565b61174d565b005b34801561077757600080fd5b50610792600480360381019061078d91906134f9565b6118ce565b005b3480156107a057600080fd5b506107bb60048036038101906107b691906135fc565b61192a565b6040516107c89190613dd1565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613755565b611941565b6040516108059190613e07565b60405180910390f35b34801561081a57600080fd5b506108236119eb565b60405161083091906141c4565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b9190613439565b6119f1565b60405161086d91906141c4565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613755565b611a03565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613466565b611a89565b6040516108d39190613dd1565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190613439565b611b1d565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610940575061093f82611c15565b5b9050919050565b61094f611d5f565b73ffffffffffffffffffffffffffffffffffffffff1661096d6113f1565b73ffffffffffffffffffffffffffffffffffffffff16146109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba90613f89565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600280546109ef9061459e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b9061459e565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611d67565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390614149565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b02826111e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90614009565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611d5f565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611d5f565b611a89565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613ee9565b60405180910390fd5b610c0b838383611d75565b505050565b600c5481565b600060018054610c269190614450565b905090565b610c36838383611e27565b505050565b610c43611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610c616113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613f89565b60405180910390fd5b80600b8190555050565b60105481565b6000610cd2836111fa565b8210610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90613e29565b60405180910390fd5b6000610d1d610c16565b905060008060005b83811015610e83576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e1757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e6f5786841415610e60578195505050505050610ebf565b8380610e6b90614601565b9450505b508080610e7b90614601565b915050610d25565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb6906140c9565b60405180910390fd5b92915050565b600e60019054906101000a900460ff1681565b610ee0611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610efe6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613f89565b60405180910390fd5b60026009541415610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906140e9565b60405180910390fd5b60026009819055506000610fac6113f1565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fcf90613d55565b60006040518083038185875af1925050503d806000811461100c576040519150601f19603f3d011682016040523d82523d6000602084013e611011565b606091505b505090508061101f57600080fd5b506001600981905550565b611045838383604051806020016040528060008152506118ce565b505050565b6000601054905090565b600061105e610c16565b821061109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690613e89565b60405180910390fd5b819050919050565b600b5481565b600a80546110ba9061459e565b80601f01602080910402602001604051908101604052809291908181526020018280546110e69061459e565b80156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b505050505081565b611143611d5f565b73ffffffffffffffffffffffffffffffffffffffff166111616113f1565b73ffffffffffffffffffffffffffffffffffffffff16146111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90613f89565b60405180910390fd5b80600f90805190602001906111cd929190613160565b5050565b600e60009054906101000a900460ff1681565b60006111ef826123e0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613f09565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112eb611d5f565b73ffffffffffffffffffffffffffffffffffffffff166113096113f1565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613f89565b60405180910390fd5b61136960006125e3565b565b611373611d5f565b73ffffffffffffffffffffffffffffffffffffffff166113916113f1565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613f89565b60405180910390fd5b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114226131e6565b61142b826123e0565b9050919050565b6060600380546114419061459e565b80601f016020809104026020016040519081016040528092919081815260200182805461146d9061459e565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b600d5481565b600e60009054906101000a900460ff161561151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614129565b60405180910390fd5b61115c81611526610c16565b611530919061433b565b1115611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613f29565b60405180910390fd5b600c548161157e336119f1565b611588919061433b565b11156115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613f49565b60405180910390fd5b600b5481111561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590614089565b60405180910390fd5b60003414801561161e5750600181145b1561167d57600161162e336111fa565b1061166e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611665906140a9565b60405180910390fd5b61167833826126a7565b61174a565b6001611688336111fa565b106116e757611696816126c5565b3410156116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614189565b60405180910390fd5b6116e233826126a7565b611749565b6116fc6001826116f79190614450565b6126c5565b34101561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590614189565b60405180910390fd5b61174833826126a7565b5b5b50565b611755611d5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613fc9565b60405180910390fd5b80600760006117d0611d5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187d611d5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c29190613dd1565b60405180910390a35050565b6118d9848484611e27565b6118e5848484846126e1565b611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614029565b60405180910390fd5b50505050565b60006119398360105484612878565b905092915050565b606061194c82611d67565b61198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290613fa9565b60405180910390fd5b600061199561288f565b905060008151116119b557604051806020016040528060008152506119e3565b806119bf84612921565b600a6040516020016119d393929190613d24565b6040516020818303038152906040525b915050919050565b60085481565b60006119fc82612a82565b9050919050565b611a0b611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611a296113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613f89565b60405180910390fd5b80600c8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b25611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611b436113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090613e49565b60405180910390fd5b611c12816125e3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d4857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d585750611d5782612b6b565b5b9050919050565b600033905090565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e32826123e0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e59611d5f565b73ffffffffffffffffffffffffffffffffffffffff161480611eb55750611e7e611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611e9d84610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ed15750611ed08260000151611ecb611d5f565b611a89565b5b905080611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90613fe9565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90613f69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613ea9565b60405180910390fd5b6120028585856001612bd5565b6120126000848460000151611d75565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612080919061441c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661212491906142f5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461222a919061433b565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612370576122a081611d67565b1561236f576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123d88686866001612bdb565b505050505050565b6123e86131e6565b6123f182611d67565b612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790613e69565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000c883106124945760017f00000000000000000000000000000000000000000000000000000000000000c8846124879190614450565b612491919061433b565b90505b60008390505b8181106125a2576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461258e578093505050506125de565b50808061259a90614574565b91505061249a565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590614109565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126c1828260405180602001604052806000815250612be1565b5050565b60008082600d546126d691906143c2565b905080915050919050565b60006127028473ffffffffffffffffffffffffffffffffffffffff166130c1565b1561286b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261272b611d5f565b8786866040518563ffffffff1660e01b815260040161274d9493929190613d85565b602060405180830381600087803b15801561276757600080fd5b505af192505050801561279857506040513d601f19601f8201168201806040525081019061279591906136df565b60015b61281b573d80600081146127c8576040519150601f19603f3d011682016040523d82523d6000602084013e6127cd565b606091505b50600081511415612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614029565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612870565b600190505b949350505050565b60008261288585846130d4565b1490509392505050565b6060600f805461289e9061459e565b80601f01602080910402602001604051908101604052809291908181526020018280546128ca9061459e565b80156129175780601f106128ec57610100808354040283529160200191612917565b820191906000526020600020905b8154815290600101906020018083116128fa57829003601f168201915b5050505050905090565b60606000821415612969576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a7d565b600082905060005b6000821461299b57808061298490614601565b915050600a826129949190614391565b9150612971565b60008167ffffffffffffffff8111156129b7576129b6614737565b5b6040519080825280601f01601f1916602001820160405280156129e95781602001600182028036833780820191505090505b5090505b60008514612a7657600182612a029190614450565b9150600a85612a11919061464a565b6030612a1d919061433b565b60f81b818381518110612a3357612a32614708565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a6f9190614391565b94506129ed565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90613ec9565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f90614069565b60405180910390fd5b612c6181611d67565b15612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9890614049565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000c8831115612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614169565b60405180910390fd5b612d116000858386612bd5565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e0e91906142f5565b6fffffffffffffffffffffffffffffffff168152602001858360200151612e3591906142f5565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156130a457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304460008884886126e1565b613083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307a90614029565b60405180910390fd5b818061308e90614601565b925050808061309c90614601565b915050612fd3565b50806001819055506130b96000878588612bdb565b505050505050565b600080823b905060008111915050919050565b60008082905060005b845181101561313e5760008582815181106130fb576130fa614708565b5b6020026020010151905080831161311d576131168382613149565b925061312a565b6131278184613149565b92505b50808061313690614601565b9150506130dd565b508091505092915050565b600082600052816020526040600020905092915050565b82805461316c9061459e565b90600052602060002090601f01602090048101928261318e57600085556131d5565b82601f106131a757805160ff19168380011785556131d5565b828001600101855582156131d5579182015b828111156131d45782518255916020019190600101906131b9565b5b5090506131e29190613220565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613239576000816000905550600101613221565b5090565b600061325061324b84614204565b6141df565b905080838252602082019050828560208602820111156132735761327261476b565b5b60005b858110156132a357816132898882613389565b845260208401935060208301925050600181019050613276565b5050509392505050565b60006132c06132bb84614230565b6141df565b9050828152602081018484840111156132dc576132db614770565b5b6132e7848285614532565b509392505050565b60006133026132fd84614261565b6141df565b90508281526020810184848401111561331e5761331d614770565b5b613329848285614532565b509392505050565b60008135905061334081614ebb565b92915050565b600082601f83011261335b5761335a614766565b5b813561336b84826020860161323d565b91505092915050565b60008135905061338381614ed2565b92915050565b60008135905061339881614ee9565b92915050565b6000813590506133ad81614f00565b92915050565b6000815190506133c281614f00565b92915050565b600082601f8301126133dd576133dc614766565b5b81356133ed8482602086016132ad565b91505092915050565b600082601f83011261340b5761340a614766565b5b813561341b8482602086016132ef565b91505092915050565b60008135905061343381614f17565b92915050565b60006020828403121561344f5761344e61477a565b5b600061345d84828501613331565b91505092915050565b6000806040838503121561347d5761347c61477a565b5b600061348b85828601613331565b925050602061349c85828601613331565b9150509250929050565b6000806000606084860312156134bf576134be61477a565b5b60006134cd86828701613331565b93505060206134de86828701613331565b92505060406134ef86828701613424565b9150509250925092565b600080600080608085870312156135135761351261477a565b5b600061352187828801613331565b945050602061353287828801613331565b935050604061354387828801613424565b925050606085013567ffffffffffffffff81111561356457613563614775565b5b613570878288016133c8565b91505092959194509250565b600080604083850312156135935761359261477a565b5b60006135a185828601613331565b92505060206135b285828601613374565b9150509250929050565b600080604083850312156135d3576135d261477a565b5b60006135e185828601613331565b92505060206135f285828601613424565b9150509250929050565b600080604083850312156136135761361261477a565b5b600083013567ffffffffffffffff81111561363157613630614775565b5b61363d85828601613346565b925050602061364e85828601613389565b9150509250929050565b60006020828403121561366e5761366d61477a565b5b600061367c84828501613374565b91505092915050565b60006020828403121561369b5761369a61477a565b5b60006136a984828501613389565b91505092915050565b6000602082840312156136c8576136c761477a565b5b60006136d68482850161339e565b91505092915050565b6000602082840312156136f5576136f461477a565b5b6000613703848285016133b3565b91505092915050565b6000602082840312156137225761372161477a565b5b600082013567ffffffffffffffff8111156137405761373f614775565b5b61374c848285016133f6565b91505092915050565b60006020828403121561376b5761376a61477a565b5b600061377984828501613424565b91505092915050565b61378b81614484565b82525050565b61379a81614484565b82525050565b6137a981614496565b82525050565b6137b8816144a2565b82525050565b60006137c9826142a7565b6137d381856142bd565b93506137e3818560208601614541565b6137ec8161477f565b840191505092915050565b6000613802826142b2565b61380c81856142d9565b935061381c818560208601614541565b6138258161477f565b840191505092915050565b600061383b826142b2565b61384581856142ea565b9350613855818560208601614541565b80840191505092915050565b6000815461386e8161459e565b61387881866142ea565b9450600182166000811461389357600181146138a4576138d7565b60ff198316865281860193506138d7565b6138ad85614292565b60005b838110156138cf578154818901526001820191506020810190506138b0565b838801955050505b50505092915050565b60006138ed6022836142d9565b91506138f882614790565b604082019050919050565b60006139106026836142d9565b915061391b826147df565b604082019050919050565b6000613933602a836142d9565b915061393e8261482e565b604082019050919050565b60006139566023836142d9565b91506139618261487d565b604082019050919050565b60006139796025836142d9565b9150613984826148cc565b604082019050919050565b600061399c6031836142d9565b91506139a78261491b565b604082019050919050565b60006139bf6039836142d9565b91506139ca8261496a565b604082019050919050565b60006139e2602b836142d9565b91506139ed826149b9565b604082019050919050565b6000613a056012836142d9565b9150613a1082614a08565b602082019050919050565b6000613a286019836142d9565b9150613a3382614a31565b602082019050919050565b6000613a4b6026836142d9565b9150613a5682614a5a565b604082019050919050565b6000613a6e6020836142d9565b9150613a7982614aa9565b602082019050919050565b6000613a91602f836142d9565b9150613a9c82614ad2565b604082019050919050565b6000613ab4601a836142d9565b9150613abf82614b21565b602082019050919050565b6000613ad76032836142d9565b9150613ae282614b4a565b604082019050919050565b6000613afa6022836142d9565b9150613b0582614b99565b604082019050919050565b6000613b1d6000836142ce565b9150613b2882614be8565b600082019050919050565b6000613b406033836142d9565b9150613b4b82614beb565b604082019050919050565b6000613b63601d836142d9565b9150613b6e82614c3a565b602082019050919050565b6000613b866021836142d9565b9150613b9182614c63565b604082019050919050565b6000613ba96016836142d9565b9150613bb482614cb2565b602082019050919050565b6000613bcc6014836142d9565b9150613bd782614cdb565b602082019050919050565b6000613bef602e836142d9565b9150613bfa82614d04565b604082019050919050565b6000613c12601f836142d9565b9150613c1d82614d53565b602082019050919050565b6000613c35602f836142d9565b9150613c4082614d7c565b604082019050919050565b6000613c58600e836142d9565b9150613c6382614dcb565b602082019050919050565b6000613c7b602d836142d9565b9150613c8682614df4565b604082019050919050565b6000613c9e6022836142d9565b9150613ca982614e43565b604082019050919050565b6000613cc16013836142d9565b9150613ccc82614e92565b602082019050919050565b604082016000820151613ced6000850182613782565b506020820151613d006020850182613d15565b50505050565b613d0f81614514565b82525050565b613d1e8161451e565b82525050565b6000613d308286613830565b9150613d3c8285613830565b9150613d488284613861565b9150819050949350505050565b6000613d6082613b10565b9150819050919050565b6000602082019050613d7f6000830184613791565b92915050565b6000608082019050613d9a6000830187613791565b613da76020830186613791565b613db46040830185613d06565b8181036060830152613dc681846137be565b905095945050505050565b6000602082019050613de660008301846137a0565b92915050565b6000602082019050613e0160008301846137af565b92915050565b60006020820190508181036000830152613e2181846137f7565b905092915050565b60006020820190508181036000830152613e42816138e0565b9050919050565b60006020820190508181036000830152613e6281613903565b9050919050565b60006020820190508181036000830152613e8281613926565b9050919050565b60006020820190508181036000830152613ea281613949565b9050919050565b60006020820190508181036000830152613ec28161396c565b9050919050565b60006020820190508181036000830152613ee28161398f565b9050919050565b60006020820190508181036000830152613f02816139b2565b9050919050565b60006020820190508181036000830152613f22816139d5565b9050919050565b60006020820190508181036000830152613f42816139f8565b9050919050565b60006020820190508181036000830152613f6281613a1b565b9050919050565b60006020820190508181036000830152613f8281613a3e565b9050919050565b60006020820190508181036000830152613fa281613a61565b9050919050565b60006020820190508181036000830152613fc281613a84565b9050919050565b60006020820190508181036000830152613fe281613aa7565b9050919050565b6000602082019050818103600083015261400281613aca565b9050919050565b6000602082019050818103600083015261402281613aed565b9050919050565b6000602082019050818103600083015261404281613b33565b9050919050565b6000602082019050818103600083015261406281613b56565b9050919050565b6000602082019050818103600083015261408281613b79565b9050919050565b600060208201905081810360008301526140a281613b9c565b9050919050565b600060208201905081810360008301526140c281613bbf565b9050919050565b600060208201905081810360008301526140e281613be2565b9050919050565b6000602082019050818103600083015261410281613c05565b9050919050565b6000602082019050818103600083015261412281613c28565b9050919050565b6000602082019050818103600083015261414281613c4b565b9050919050565b6000602082019050818103600083015261416281613c6e565b9050919050565b6000602082019050818103600083015261418281613c91565b9050919050565b600060208201905081810360008301526141a281613cb4565b9050919050565b60006040820190506141be6000830184613cd7565b92915050565b60006020820190506141d96000830184613d06565b92915050565b60006141e96141fa565b90506141f582826145d0565b919050565b6000604051905090565b600067ffffffffffffffff82111561421f5761421e614737565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561424b5761424a614737565b5b6142548261477f565b9050602081019050919050565b600067ffffffffffffffff82111561427c5761427b614737565b5b6142858261477f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614300826144d8565b915061430b836144d8565b9250826fffffffffffffffffffffffffffffffff038211156143305761432f61467b565b5b828201905092915050565b600061434682614514565b915061435183614514565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143865761438561467b565b5b828201905092915050565b600061439c82614514565b91506143a783614514565b9250826143b7576143b66146aa565b5b828204905092915050565b60006143cd82614514565b91506143d883614514565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144115761441061467b565b5b828202905092915050565b6000614427826144d8565b9150614432836144d8565b9250828210156144455761444461467b565b5b828203905092915050565b600061445b82614514565b915061446683614514565b9250828210156144795761447861467b565b5b828203905092915050565b600061448f826144f4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561455f578082015181840152602081019050614544565b8381111561456e576000848401525b50505050565b600061457f82614514565b915060008214156145935761459261467b565b5b600182039050919050565b600060028204905060018216806145b657607f821691505b602082108114156145ca576145c96146d9565b5b50919050565b6145d98261477f565b810181811067ffffffffffffffff821117156145f8576145f7614737565b5b80604052505050565b600061460c82614514565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561463f5761463e61467b565b5b600182019050919050565b600061465582614514565b915061466083614514565b9250826146705761466f6146aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6c696d6974207065722077616c6c657420657863656564656400000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f416c7265616479206d696e746564206672656521000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6d696e7420697320706175736564000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614ec481614484565b8114614ecf57600080fd5b50565b614edb81614496565b8114614ee657600080fd5b50565b614ef2816144a2565b8114614efd57600080fd5b50565b614f09816144ac565b8114614f1457600080fd5b50565b614f2081614514565b8114614f2b57600080fd5b5056fea2646970667358221220a4a8238b75aca3e48f379bf4fe35ea9b1b6d408f5768d85c21ecb043910ff6bb64736f6c63430008070033

Deployed Bytecode Sourcemap

30486:4351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31447:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34745:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22058:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23545:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23124:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30757:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19046:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24386:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34510:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31216:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19394:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31073:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34333:160;;;;;;;;;;;;;:::i;:::-;;24556:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31784:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19158:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30659:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30617:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33807:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31041:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21926:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20696:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10692:103;;;;;;;;;;;;;:::i;:::-;;31692:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10469:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34158:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22166:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30824:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31888:933;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23845:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24741:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33020:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33223:572;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28256:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34037:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34624:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24164:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10803:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31447:237;31569:4;31626:10;31611:25;;:11;:25;;;;:65;;;;31640:36;31664:11;31640:23;:36::i;:::-;31611:65;31591:85;;31447:237;;;:::o;34745:79::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34810:6:::1;34801;;:15;;;;;;;;;;;;;;;;;;34745:79:::0;:::o;22058:100::-;22112:13;22145:5;22138:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22058:100;:::o;23545:292::-;23649:7;23696:16;23704:7;23696;:16::i;:::-;23674:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23805:15;:24;23821:7;23805:24;;;;;;;;;;;;;;;;;;;;;23798:31;;23545:292;;;:::o;23124:413::-;23197:13;23213:24;23229:7;23213:15;:24::i;:::-;23197:40;;23262:5;23256:11;;:2;:11;;;;23248:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23357:5;23341:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23366:37;23383:5;23390:12;:10;:12::i;:::-;23366:16;:37::i;:::-;23341:62;23319:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;23501:28;23510:2;23514:7;23523:5;23501:8;:28::i;:::-;23186:351;23124:413;;:::o;30757:33::-;;;;:::o;19046:104::-;19099:7;19141:1;19126:12;;:16;;;;:::i;:::-;19119:23;;19046:104;:::o;24386:162::-;24512:28;24522:4;24528:2;24532:7;24512:9;:28::i;:::-;24386:162;;;:::o;34510:102::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34603:1:::1;34581:19;:23;;;;34510:102:::0;:::o;31216:25::-;;;;:::o;19394:864::-;19519:7;19560:16;19570:5;19560:9;:16::i;:::-;19552:5;:24;19544:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19626:22;19651:13;:11;:13::i;:::-;19626:38;;19675:19;19709:25;19763:9;19758:426;19782:14;19778:1;:18;19758:426;;;19818:31;19852:11;:14;19864:1;19852:14;;;;;;;;;;;19818:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19911:1;19885:28;;:9;:14;;;:28;;;19881:103;;19954:9;:14;;;19934:34;;19881:103;20023:5;20002:26;;:17;:26;;;19998:175;;;20068:5;20053:11;:20;20049:77;;;20105:1;20098:8;;;;;;;;;20049:77;20144:13;;;;;:::i;:::-;;;;19998:175;19803:381;19798:3;;;;;:::i;:::-;;;;19758:426;;;;20194:56;;;;;;;;;;:::i;:::-;;;;;;;;19394:864;;;;;:::o;31073:35::-;;;;;;;;;;;;;:::o;34333:160::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1326:1:::1;1474:7;;:19;;1466:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1326:1;1540:7;:18;;;;34395:7:::2;34416;:5;:7::i;:::-;34408:21;;34437;34408:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34394:69;;;34482:2;34474:11;;;::::0;::::2;;34383:110;1282:1:::1;1583:7;:22;;;;34333:160::o:0;24556:177::-;24686:39;24703:4;24709:2;24713:7;24686:39;;;;;;;;;;;;:16;:39::i;:::-;24556:177;;;:::o;31784:91::-;31830:7;31857:10;;31850:17;;31784:91;:::o;19158:228::-;19261:7;19302:13;:11;:13::i;:::-;19294:5;:21;19286:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;19373:5;19366:12;;19158:228;;;:::o;30659:38::-;;;;:::o;30617:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33807:101::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33893:7:::1;33878:12;:22;;;;;;;;;;;;:::i;:::-;;33807:101:::0;:::o;31041:25::-;;;;;;;;;;;;;:::o;21926:124::-;21990:7;22017:20;22029:7;22017:11;:20::i;:::-;:25;;;22010:32;;21926:124;;;:::o;20696:258::-;20760:7;20819:1;20802:19;;:5;:19;;;;20780:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;20918:12;:19;20931:5;20918:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;20910:36;;20903:43;;20696:258;;;:::o;10692:103::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10757:30:::1;10784:1;10757:18;:30::i;:::-;10692:103::o:0;31692:84::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31767:1:::1;31754:10;:14;;;;31692:84:::0;:::o;10469:87::-;10515:7;10542:6;;;;;;;;;;;10535:13;;10469:87;:::o;34158:167::-;34251:21;;:::i;:::-;34297:20;34309:7;34297:11;:20::i;:::-;34290:27;;34158:167;;;:::o;22166:104::-;22222:13;22255:7;22248:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22166:104;:::o;30824:34::-;;;;:::o;31888:933::-;31955:6;;;;;;;;;;;31954:7;31946:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;30924:4;32029:8;32013:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;31991:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;32165:14;;32153:8;32126:24;32139:10;32126:12;:24::i;:::-;:35;;;;:::i;:::-;:53;;32118:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;32240:19;;32228:8;:31;;32220:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32313:1;32302:9;:12;:27;;;;;32328:1;32318:8;:11;32302:27;32299:509;;;32381:1;32359:21;32369:10;32359:9;:21::i;:::-;:23;32351:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32421:31;32431:10;32443:8;32421:9;:31::i;:::-;32299:509;;;32505:1;32482:21;32492:10;32482:9;:21::i;:::-;:24;32479:329;;32548:20;32559:8;32548:10;:20::i;:::-;32536:9;:32;;32528:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32606:31;32616:10;32628:8;32606:9;:31::i;:::-;32479:329;;;32704:22;32724:1;32715:8;:10;;;;:::i;:::-;32704;:22::i;:::-;32692:9;:34;;32684:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32765:31;32775:10;32787:8;32765:9;:31::i;:::-;32479:329;32299:509;31888:933;:::o;23845:311::-;23975:12;:10;:12::i;:::-;23963:24;;:8;:24;;;;23955:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24076:8;24031:18;:32;24050:12;:10;:12::i;:::-;24031:32;;;;;;;;;;;;;;;:42;24064:8;24031:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24129:8;24100:48;;24115:12;:10;:12::i;:::-;24100:48;;;24139:8;24100:48;;;;;;:::i;:::-;;;;;;;;23845:311;;:::o;24741:355::-;24900:28;24910:4;24916:2;24920:7;24900:9;:28::i;:::-;24961:48;24984:4;24990:2;24994:7;25003:5;24961:22;:48::i;:::-;24939:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;24741:355;;;;:::o;33020:195::-;33129:4;33158:49;33177:11;33190:10;;33202:4;33158:18;:49::i;:::-;33151:56;;33020:195;;;;:::o;33223:572::-;33341:13;33394:16;33402:7;33394;:16::i;:::-;33372:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;33509:21;33533:10;:8;:10::i;:::-;33509:34;;33606:1;33588:7;33582:21;:25;:186;;;;;;;;;;;;;;;;;33681:7;33690:18;:7;:16;:18::i;:::-;33709:9;33664:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33582:186;33558:210;;;33223:572;;;:::o;28256:43::-;;;;:::o;34037:113::-;34095:7;34122:20;34136:5;34122:13;:20::i;:::-;34115:27;;34037:113;;;:::o;34624:106::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34713:9:::1;34696:14;:26;;;;34624:106:::0;:::o;24164:214::-;24306:4;24335:18;:25;24354:5;24335:25;;;;;;;;;;;;;;;:35;24361:8;24335:35;;;;;;;;;;;;;;;;;;;;;;;;;24328:42;;24164:214;;;;:::o;10803:238::-;10615:12;:10;:12::i;:::-;10604:23;;:7;:5;:7::i;:::-;:23;;;10596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10926:1:::1;10906:22;;:8;:22;;;;10884:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;11005:28;11024:8;11005:18;:28::i;:::-;10803:238:::0;:::o;20266:422::-;20413:4;20470:25;20455:40;;;:11;:40;;;;:105;;;;20527:33;20512:48;;;:11;:48;;;;20455:105;:172;;;;20592:35;20577:50;;;:11;:50;;;;20455:172;:225;;;;20644:36;20668:11;20644:23;:36::i;:::-;20455:225;20435:245;;20266:422;;;:::o;9990:98::-;10043:7;10070:10;10063:17;;9990:98;:::o;25104:111::-;25161:4;25195:12;;25185:7;:22;25178:29;;25104:111;;;:::o;28052:196::-;28194:2;28167:15;:24;28183:7;28167:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28232:7;28228:2;28212:28;;28221:5;28212:28;;;;;;;;;;;;28052:196;;;:::o;26618:1426::-;26733:35;26771:20;26783:7;26771:11;:20::i;:::-;26733:58;;26804:22;26846:13;:18;;;26830:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;26905:12;:10;:12::i;:::-;26881:36;;:20;26893:7;26881:11;:20::i;:::-;:36;;;26830:87;:154;;;;26934:50;26951:13;:18;;;26971:12;:10;:12::i;:::-;26934:16;:50::i;:::-;26830:154;26804:181;;27020:17;26998:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27172:4;27150:26;;:13;:18;;;:26;;;27128:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;27275:1;27261:16;;:2;:16;;;;27253:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27332:43;27354:4;27360:2;27364:7;27373:1;27332:21;:43::i;:::-;27386:49;27403:1;27407:7;27416:13;:18;;;27386:8;:49::i;:::-;27478:1;27448:12;:18;27461:4;27448:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27518:1;27490:12;:16;27503:2;27490:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27553:43;;;;;;;;27568:2;27553:43;;;;;;27579:15;27553:43;;;;;27530:11;:20;27542:7;27530:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:19;27639:1;27629:7;:11;;;;:::i;:::-;27607:33;;27696:1;27655:43;;:11;:24;27667:11;27655:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;27651:288;;;27719:20;27727:11;27719:7;:20::i;:::-;27715:213;;;27787:125;;;;;;;;27824:13;:18;;;27787:125;;;;;;27865:13;:28;;;27787:125;;;;;27760:11;:24;27772:11;27760:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27715:213;27651:288;27975:7;27971:2;27956:27;;27965:4;27956:27;;;;;;;;;;;;27994:42;28015:4;28021:2;28025:7;28034:1;27994:20;:42::i;:::-;26722:1322;;;26618:1426;;;:::o;21236:682::-;21324:21;;:::i;:::-;21371:16;21379:7;21371;:16::i;:::-;21363:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21447:26;21499:12;21488:7;:23;21484:103;;21574:1;21559:12;21549:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;21528:47;;21484:103;21604:12;21619:7;21604:22;;21599:242;21636:18;21628:4;:26;21599:242;;21679:31;21713:11;:17;21725:4;21713:17;;;;;;;;;;;21679:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21775:1;21749:28;;:9;:14;;;:28;;;21745:85;;21805:9;21798:16;;;;;;;21745:85;21664:177;21656:6;;;;;:::i;:::-;;;;21599:242;;;;21853:57;;;;;;;;;;:::i;:::-;;;;;;;;21236:682;;;;:::o;11049:191::-;11123:16;11142:6;;;;;;;;;;;11123:25;;11168:8;11159:6;;:17;;;;;;;;;;;;;;;;;;11223:8;11192:40;;11213:8;11192:40;;;;;;;;;;;;11112:128;11049:191;:::o;25223:104::-;25292:27;25302:2;25306:8;25292:27;;;;;;;;;;;;:9;:27::i;:::-;25223:104;;:::o;32829:183::-;32918:7;32943:18;32968:9;32962:5;;:15;;;;:::i;:::-;32943:34;;32995:9;32988:16;;;32829:183;;;:::o;29161:985::-;29316:4;29337:15;:2;:13;;;:15::i;:::-;29333:806;;;29406:2;29390:36;;;29449:12;:10;:12::i;:::-;29484:4;29511:7;29541:5;29390:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29369:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29769:1;29752:6;:13;:18;29748:321;;;29795:109;;;;;;;;;;:::i;:::-;;;;;;;;29748:321;30019:6;30013:13;30004:6;30000:2;29996:15;29989:38;29369:715;29639:45;;;29629:55;;;:6;:55;;;;29622:62;;;;;29333:806;30123:4;30116:11;;29161:985;;;;;;;:::o;183:190::-;308:4;361;332:25;345:5;352:4;332:12;:25::i;:::-;:33;325:40;;183:190;;;;;:::o;33916:113::-;33976:13;34009:12;34002:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33916:113;:::o;8579:532::-;8635:13;8674:1;8665:5;:10;8661:53;;;8692:10;;;;;;;;;;;;;;;;;;;;;8661:53;8724:12;8739:5;8724:20;;8755:14;8780:78;8795:1;8787:4;:9;8780:78;;8813:8;;;;;:::i;:::-;;;;8844:2;8836:10;;;;;:::i;:::-;;;8780:78;;;8868:19;8900:6;8890:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8868:39;;8918:154;8934:1;8925:5;:10;8918:154;;8962:1;8952:11;;;;;:::i;:::-;;;9029:2;9021:5;:10;;;;:::i;:::-;9008:2;:24;;;;:::i;:::-;8995:39;;8978:6;8985;8978:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9058:2;9049:11;;;;;:::i;:::-;;;8918:154;;;9096:6;9082:21;;;;;8579:532;;;;:::o;20962:266::-;21023:7;21082:1;21065:19;;:5;:19;;;;21043:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;21187:12;:19;21200:5;21187:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;21179:41;;21172:48;;20962:266;;;:::o;15607:207::-;15737:4;15781:25;15766:40;;;:11;:40;;;;15759:47;;15607:207;;;:::o;30154:159::-;;;;;:::o;30321:158::-;;;;;:::o;25335:1275::-;25458:20;25481:12;;25458:35;;25526:1;25512:16;;:2;:16;;;;25504:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25586:21;25594:12;25586:7;:21::i;:::-;25585:22;25577:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25672:12;25660:8;:24;;25652:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25736:61;25766:1;25770:2;25774:12;25788:8;25736:21;:61::i;:::-;25810:30;25843:12;:16;25856:2;25843:16;;;;;;;;;;;;;;;25810:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25889:135;;;;;;;;25945:8;25915:11;:19;;;:39;;;;:::i;:::-;25889:135;;;;;;26004:8;25969:11;:24;;;:44;;;;:::i;:::-;25889:135;;;;;25870:12;:16;25883:2;25870:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26063:43;;;;;;;;26078:2;26063:43;;;;;;26089:15;26063:43;;;;;26035:11;:25;26047:12;26035:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26119:20;26142:12;26119:35;;26172:9;26167:325;26191:8;26187:1;:12;26167:325;;;26251:12;26247:2;26226:38;;26243:1;26226:38;;;;;;;;;;;;26305:59;26336:1;26340:2;26344:12;26358:5;26305:22;:59::i;:::-;26279:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;26466:14;;;;;:::i;:::-;;;;26201:3;;;;;:::i;:::-;;;;26167:325;;;;26519:12;26504;:27;;;;26542:60;26571:1;26575:2;26579:12;26593:8;26542:20;:60::i;:::-;25447:1163;;;25335:1275;;;:::o;11270:196::-;11330:4;11347:12;11414:7;11402:20;11394:28;;11457:1;11450:4;:8;11443:15;;;11270:196;;;:::o;381:549::-;491:7;516:20;539:4;516:27;;559:9;554:339;578:5;:12;574:1;:16;554:339;;;612:20;635:5;641:1;635:8;;;;;;;;:::i;:::-;;;;;;;;612:31;;678:12;662;:28;658:224;;726:42;741:12;755;726:14;:42::i;:::-;711:57;;658:224;;;824:42;839:12;853;824:14;:42::i;:::-;809:57;;658:224;597:296;592:3;;;;;:::i;:::-;;;;554:339;;;;910:12;903:19;;;381:549;;;;:::o;938:256::-;1033:13;1101:1;1095:4;1088:15;1130:1;1124:4;1117:15;1171:4;1165;1155:21;1146:30;;938:256;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:340::-;3125:5;3174:3;3167:4;3159:6;3155:17;3151:27;3141:122;;3182:79;;:::i;:::-;3141:122;3299:6;3286:20;3324:79;3399:3;3391:6;3384:4;3376:6;3372:17;3324:79;:::i;:::-;3315:88;;3131:278;3069:340;;;;:::o;3415:139::-;3461:5;3499:6;3486:20;3477:29;;3515:33;3542:5;3515:33;:::i;:::-;3415:139;;;;:::o;3560:329::-;3619:6;3668:2;3656:9;3647:7;3643:23;3639:32;3636:119;;;3674:79;;:::i;:::-;3636:119;3794:1;3819:53;3864:7;3855:6;3844:9;3840:22;3819:53;:::i;:::-;3809:63;;3765:117;3560:329;;;;:::o;3895:474::-;3963:6;3971;4020:2;4008:9;3999:7;3995:23;3991:32;3988:119;;;4026:79;;:::i;:::-;3988:119;4146:1;4171:53;4216:7;4207:6;4196:9;4192:22;4171:53;:::i;:::-;4161:63;;4117:117;4273:2;4299:53;4344:7;4335:6;4324:9;4320:22;4299:53;:::i;:::-;4289:63;;4244:118;3895:474;;;;;:::o;4375:619::-;4452:6;4460;4468;4517:2;4505:9;4496:7;4492:23;4488:32;4485:119;;;4523:79;;:::i;:::-;4485:119;4643:1;4668:53;4713:7;4704:6;4693:9;4689:22;4668:53;:::i;:::-;4658:63;;4614:117;4770:2;4796:53;4841:7;4832:6;4821:9;4817:22;4796:53;:::i;:::-;4786:63;;4741:118;4898:2;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4869:118;4375:619;;;;;:::o;5000:943::-;5095:6;5103;5111;5119;5168:3;5156:9;5147:7;5143:23;5139:33;5136:120;;;5175:79;;:::i;:::-;5136:120;5295:1;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5266:117;5422:2;5448:53;5493:7;5484:6;5473:9;5469:22;5448:53;:::i;:::-;5438:63;;5393:118;5550:2;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5521:118;5706:2;5695:9;5691:18;5678:32;5737:18;5729:6;5726:30;5723:117;;;5759:79;;:::i;:::-;5723:117;5864:62;5918:7;5909:6;5898:9;5894:22;5864:62;:::i;:::-;5854:72;;5649:287;5000:943;;;;;;;:::o;5949:468::-;6014:6;6022;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6168:117;6324:2;6350:50;6392:7;6383:6;6372:9;6368:22;6350:50;:::i;:::-;6340:60;;6295:115;5949:468;;;;;:::o;6423:474::-;6491:6;6499;6548:2;6536:9;6527:7;6523:23;6519:32;6516:119;;;6554:79;;:::i;:::-;6516:119;6674:1;6699:53;6744:7;6735:6;6724:9;6720:22;6699:53;:::i;:::-;6689:63;;6645:117;6801:2;6827:53;6872:7;6863:6;6852:9;6848:22;6827:53;:::i;:::-;6817:63;;6772:118;6423:474;;;;;:::o;6903:684::-;6996:6;7004;7053:2;7041:9;7032:7;7028:23;7024:32;7021:119;;;7059:79;;:::i;:::-;7021:119;7207:1;7196:9;7192:17;7179:31;7237:18;7229:6;7226:30;7223:117;;;7259:79;;:::i;:::-;7223:117;7364:78;7434:7;7425:6;7414:9;7410:22;7364:78;:::i;:::-;7354:88;;7150:302;7491:2;7517:53;7562:7;7553:6;7542:9;7538:22;7517:53;:::i;:::-;7507:63;;7462:118;6903:684;;;;;:::o;7593:323::-;7649:6;7698:2;7686:9;7677:7;7673:23;7669:32;7666:119;;;7704:79;;:::i;:::-;7666:119;7824:1;7849:50;7891:7;7882:6;7871:9;7867:22;7849:50;:::i;:::-;7839:60;;7795:114;7593:323;;;;:::o;7922:329::-;7981:6;8030:2;8018:9;8009:7;8005:23;8001:32;7998:119;;;8036:79;;:::i;:::-;7998:119;8156:1;8181:53;8226:7;8217:6;8206:9;8202:22;8181:53;:::i;:::-;8171:63;;8127:117;7922:329;;;;:::o;8257:327::-;8315:6;8364:2;8352:9;8343:7;8339:23;8335:32;8332:119;;;8370:79;;:::i;:::-;8332:119;8490:1;8515:52;8559:7;8550:6;8539:9;8535:22;8515:52;:::i;:::-;8505:62;;8461:116;8257:327;;;;:::o;8590:349::-;8659:6;8708:2;8696:9;8687:7;8683:23;8679:32;8676:119;;;8714:79;;:::i;:::-;8676:119;8834:1;8859:63;8914:7;8905:6;8894:9;8890:22;8859:63;:::i;:::-;8849:73;;8805:127;8590:349;;;;:::o;8945:509::-;9014:6;9063:2;9051:9;9042:7;9038:23;9034:32;9031:119;;;9069:79;;:::i;:::-;9031:119;9217:1;9206:9;9202:17;9189:31;9247:18;9239:6;9236:30;9233:117;;;9269:79;;:::i;:::-;9233:117;9374:63;9429:7;9420:6;9409:9;9405:22;9374:63;:::i;:::-;9364:73;;9160:287;8945:509;;;;:::o;9460:329::-;9519:6;9568:2;9556:9;9547:7;9543:23;9539:32;9536:119;;;9574:79;;:::i;:::-;9536:119;9694:1;9719:53;9764:7;9755:6;9744:9;9740:22;9719:53;:::i;:::-;9709:63;;9665:117;9460:329;;;;:::o;9795:108::-;9872:24;9890:5;9872:24;:::i;:::-;9867:3;9860:37;9795:108;;:::o;9909:118::-;9996:24;10014:5;9996:24;:::i;:::-;9991:3;9984:37;9909:118;;:::o;10033:109::-;10114:21;10129:5;10114:21;:::i;:::-;10109:3;10102:34;10033:109;;:::o;10148:118::-;10235:24;10253:5;10235:24;:::i;:::-;10230:3;10223:37;10148:118;;:::o;10272:360::-;10358:3;10386:38;10418:5;10386:38;:::i;:::-;10440:70;10503:6;10498:3;10440:70;:::i;:::-;10433:77;;10519:52;10564:6;10559:3;10552:4;10545:5;10541:16;10519:52;:::i;:::-;10596:29;10618:6;10596:29;:::i;:::-;10591:3;10587:39;10580:46;;10362:270;10272:360;;;;:::o;10638:364::-;10726:3;10754:39;10787:5;10754:39;:::i;:::-;10809:71;10873:6;10868:3;10809:71;:::i;:::-;10802:78;;10889:52;10934:6;10929:3;10922:4;10915:5;10911:16;10889:52;:::i;:::-;10966:29;10988:6;10966:29;:::i;:::-;10961:3;10957:39;10950:46;;10730:272;10638:364;;;;:::o;11008:377::-;11114:3;11142:39;11175:5;11142:39;:::i;:::-;11197:89;11279:6;11274:3;11197:89;:::i;:::-;11190:96;;11295:52;11340:6;11335:3;11328:4;11321:5;11317:16;11295:52;:::i;:::-;11372:6;11367:3;11363:16;11356:23;;11118:267;11008:377;;;;:::o;11415:845::-;11518:3;11555:5;11549:12;11584:36;11610:9;11584:36;:::i;:::-;11636:89;11718:6;11713:3;11636:89;:::i;:::-;11629:96;;11756:1;11745:9;11741:17;11772:1;11767:137;;;;11918:1;11913:341;;;;11734:520;;11767:137;11851:4;11847:9;11836;11832:25;11827:3;11820:38;11887:6;11882:3;11878:16;11871:23;;11767:137;;11913:341;11980:38;12012:5;11980:38;:::i;:::-;12040:1;12054:154;12068:6;12065:1;12062:13;12054:154;;;12142:7;12136:14;12132:1;12127:3;12123:11;12116:35;12192:1;12183:7;12179:15;12168:26;;12090:4;12087:1;12083:12;12078:17;;12054:154;;;12237:6;12232:3;12228:16;12221:23;;11920:334;;11734:520;;11522:738;;11415:845;;;;:::o;12266:366::-;12408:3;12429:67;12493:2;12488:3;12429:67;:::i;:::-;12422:74;;12505:93;12594:3;12505:93;:::i;:::-;12623:2;12618:3;12614:12;12607:19;;12266:366;;;:::o;12638:::-;12780:3;12801:67;12865:2;12860:3;12801:67;:::i;:::-;12794:74;;12877:93;12966:3;12877:93;:::i;:::-;12995:2;12990:3;12986:12;12979:19;;12638:366;;;:::o;13010:::-;13152:3;13173:67;13237:2;13232:3;13173:67;:::i;:::-;13166:74;;13249:93;13338:3;13249:93;:::i;:::-;13367:2;13362:3;13358:12;13351:19;;13010:366;;;:::o;13382:::-;13524:3;13545:67;13609:2;13604:3;13545:67;:::i;:::-;13538:74;;13621:93;13710:3;13621:93;:::i;:::-;13739:2;13734:3;13730:12;13723:19;;13382:366;;;:::o;13754:::-;13896:3;13917:67;13981:2;13976:3;13917:67;:::i;:::-;13910:74;;13993:93;14082:3;13993:93;:::i;:::-;14111:2;14106:3;14102:12;14095:19;;13754:366;;;:::o;14126:::-;14268:3;14289:67;14353:2;14348:3;14289:67;:::i;:::-;14282:74;;14365:93;14454:3;14365:93;:::i;:::-;14483:2;14478:3;14474:12;14467:19;;14126:366;;;:::o;14498:::-;14640:3;14661:67;14725:2;14720:3;14661:67;:::i;:::-;14654:74;;14737:93;14826:3;14737:93;:::i;:::-;14855:2;14850:3;14846:12;14839:19;;14498:366;;;:::o;14870:::-;15012:3;15033:67;15097:2;15092:3;15033:67;:::i;:::-;15026:74;;15109:93;15198:3;15109:93;:::i;:::-;15227:2;15222:3;15218:12;15211:19;;14870:366;;;:::o;15242:::-;15384:3;15405:67;15469:2;15464:3;15405:67;:::i;:::-;15398:74;;15481:93;15570:3;15481:93;:::i;:::-;15599:2;15594:3;15590:12;15583:19;;15242:366;;;:::o;15614:::-;15756:3;15777:67;15841:2;15836:3;15777:67;:::i;:::-;15770:74;;15853:93;15942:3;15853:93;:::i;:::-;15971:2;15966:3;15962:12;15955:19;;15614:366;;;:::o;15986:::-;16128:3;16149:67;16213:2;16208:3;16149:67;:::i;:::-;16142:74;;16225:93;16314:3;16225:93;:::i;:::-;16343:2;16338:3;16334:12;16327:19;;15986:366;;;:::o;16358:::-;16500:3;16521:67;16585:2;16580:3;16521:67;:::i;:::-;16514:74;;16597:93;16686:3;16597:93;:::i;:::-;16715:2;16710:3;16706:12;16699:19;;16358:366;;;:::o;16730:::-;16872:3;16893:67;16957:2;16952:3;16893:67;:::i;:::-;16886:74;;16969:93;17058:3;16969:93;:::i;:::-;17087:2;17082:3;17078:12;17071:19;;16730:366;;;:::o;17102:::-;17244:3;17265:67;17329:2;17324:3;17265:67;:::i;:::-;17258:74;;17341:93;17430:3;17341:93;:::i;:::-;17459:2;17454:3;17450:12;17443:19;;17102:366;;;:::o;17474:::-;17616:3;17637:67;17701:2;17696:3;17637:67;:::i;:::-;17630:74;;17713:93;17802:3;17713:93;:::i;:::-;17831:2;17826:3;17822:12;17815:19;;17474:366;;;:::o;17846:::-;17988:3;18009:67;18073:2;18068:3;18009:67;:::i;:::-;18002:74;;18085:93;18174:3;18085:93;:::i;:::-;18203:2;18198:3;18194:12;18187:19;;17846:366;;;:::o;18218:398::-;18377:3;18398:83;18479:1;18474:3;18398:83;:::i;:::-;18391:90;;18490:93;18579:3;18490:93;:::i;:::-;18608:1;18603:3;18599:11;18592:18;;18218:398;;;:::o;18622:366::-;18764:3;18785:67;18849:2;18844:3;18785:67;:::i;:::-;18778:74;;18861:93;18950:3;18861:93;:::i;:::-;18979:2;18974:3;18970:12;18963:19;;18622:366;;;:::o;18994:::-;19136:3;19157:67;19221:2;19216:3;19157:67;:::i;:::-;19150:74;;19233:93;19322:3;19233:93;:::i;:::-;19351:2;19346:3;19342:12;19335:19;;18994:366;;;:::o;19366:::-;19508:3;19529:67;19593:2;19588:3;19529:67;:::i;:::-;19522:74;;19605:93;19694:3;19605:93;:::i;:::-;19723:2;19718:3;19714:12;19707:19;;19366:366;;;:::o;19738:::-;19880:3;19901:67;19965:2;19960:3;19901:67;:::i;:::-;19894:74;;19977:93;20066:3;19977:93;:::i;:::-;20095:2;20090:3;20086:12;20079:19;;19738:366;;;:::o;20110:::-;20252:3;20273:67;20337:2;20332:3;20273:67;:::i;:::-;20266:74;;20349:93;20438:3;20349:93;:::i;:::-;20467:2;20462:3;20458:12;20451:19;;20110:366;;;:::o;20482:::-;20624:3;20645:67;20709:2;20704:3;20645:67;:::i;:::-;20638:74;;20721:93;20810:3;20721:93;:::i;:::-;20839:2;20834:3;20830:12;20823:19;;20482:366;;;:::o;20854:::-;20996:3;21017:67;21081:2;21076:3;21017:67;:::i;:::-;21010:74;;21093:93;21182:3;21093:93;:::i;:::-;21211:2;21206:3;21202:12;21195:19;;20854:366;;;:::o;21226:::-;21368:3;21389:67;21453:2;21448:3;21389:67;:::i;:::-;21382:74;;21465:93;21554:3;21465:93;:::i;:::-;21583:2;21578:3;21574:12;21567:19;;21226:366;;;:::o;21598:::-;21740:3;21761:67;21825:2;21820:3;21761:67;:::i;:::-;21754:74;;21837:93;21926:3;21837:93;:::i;:::-;21955:2;21950:3;21946:12;21939:19;;21598:366;;;:::o;21970:::-;22112:3;22133:67;22197:2;22192:3;22133:67;:::i;:::-;22126:74;;22209:93;22298:3;22209:93;:::i;:::-;22327:2;22322:3;22318:12;22311:19;;21970:366;;;:::o;22342:::-;22484:3;22505:67;22569:2;22564:3;22505:67;:::i;:::-;22498:74;;22581:93;22670:3;22581:93;:::i;:::-;22699:2;22694:3;22690:12;22683:19;;22342:366;;;:::o;22714:::-;22856:3;22877:67;22941:2;22936:3;22877:67;:::i;:::-;22870:74;;22953:93;23042:3;22953:93;:::i;:::-;23071:2;23066:3;23062:12;23055:19;;22714:366;;;:::o;23156:529::-;23317:4;23312:3;23308:14;23404:4;23397:5;23393:16;23387:23;23423:63;23480:4;23475:3;23471:14;23457:12;23423:63;:::i;:::-;23332:164;23588:4;23581:5;23577:16;23571:23;23607:61;23662:4;23657:3;23653:14;23639:12;23607:61;:::i;:::-;23506:172;23286:399;23156:529;;:::o;23691:118::-;23778:24;23796:5;23778:24;:::i;:::-;23773:3;23766:37;23691:118;;:::o;23815:105::-;23890:23;23907:5;23890:23;:::i;:::-;23885:3;23878:36;23815:105;;:::o;23926:589::-;24151:3;24173:95;24264:3;24255:6;24173:95;:::i;:::-;24166:102;;24285:95;24376:3;24367:6;24285:95;:::i;:::-;24278:102;;24397:92;24485:3;24476:6;24397:92;:::i;:::-;24390:99;;24506:3;24499:10;;23926:589;;;;;;:::o;24521:379::-;24705:3;24727:147;24870:3;24727:147;:::i;:::-;24720:154;;24891:3;24884:10;;24521:379;;;:::o;24906:222::-;24999:4;25037:2;25026:9;25022:18;25014:26;;25050:71;25118:1;25107:9;25103:17;25094:6;25050:71;:::i;:::-;24906:222;;;;:::o;25134:640::-;25329:4;25367:3;25356:9;25352:19;25344:27;;25381:71;25449:1;25438:9;25434:17;25425:6;25381:71;:::i;:::-;25462:72;25530:2;25519:9;25515:18;25506:6;25462:72;:::i;:::-;25544;25612:2;25601:9;25597:18;25588:6;25544:72;:::i;:::-;25663:9;25657:4;25653:20;25648:2;25637:9;25633:18;25626:48;25691:76;25762:4;25753:6;25691:76;:::i;:::-;25683:84;;25134:640;;;;;;;:::o;25780:210::-;25867:4;25905:2;25894:9;25890:18;25882:26;;25918:65;25980:1;25969:9;25965:17;25956:6;25918:65;:::i;:::-;25780:210;;;;:::o;25996:222::-;26089:4;26127:2;26116:9;26112:18;26104:26;;26140:71;26208:1;26197:9;26193:17;26184:6;26140:71;:::i;:::-;25996:222;;;;:::o;26224:313::-;26337:4;26375:2;26364:9;26360:18;26352:26;;26424:9;26418:4;26414:20;26410:1;26399:9;26395:17;26388:47;26452:78;26525:4;26516:6;26452:78;:::i;:::-;26444:86;;26224:313;;;;:::o;26543:419::-;26709:4;26747:2;26736:9;26732:18;26724:26;;26796:9;26790:4;26786:20;26782:1;26771:9;26767:17;26760:47;26824:131;26950:4;26824:131;:::i;:::-;26816:139;;26543:419;;;:::o;26968:::-;27134:4;27172:2;27161:9;27157:18;27149:26;;27221:9;27215:4;27211:20;27207:1;27196:9;27192:17;27185:47;27249:131;27375:4;27249:131;:::i;:::-;27241:139;;26968:419;;;:::o;27393:::-;27559:4;27597:2;27586:9;27582:18;27574:26;;27646:9;27640:4;27636:20;27632:1;27621:9;27617:17;27610:47;27674:131;27800:4;27674:131;:::i;:::-;27666:139;;27393:419;;;:::o;27818:::-;27984:4;28022:2;28011:9;28007:18;27999:26;;28071:9;28065:4;28061:20;28057:1;28046:9;28042:17;28035:47;28099:131;28225:4;28099:131;:::i;:::-;28091:139;;27818:419;;;:::o;28243:::-;28409:4;28447:2;28436:9;28432:18;28424:26;;28496:9;28490:4;28486:20;28482:1;28471:9;28467:17;28460:47;28524:131;28650:4;28524:131;:::i;:::-;28516:139;;28243:419;;;:::o;28668:::-;28834:4;28872:2;28861:9;28857:18;28849:26;;28921:9;28915:4;28911:20;28907:1;28896:9;28892:17;28885:47;28949:131;29075:4;28949:131;:::i;:::-;28941:139;;28668:419;;;:::o;29093:::-;29259:4;29297:2;29286:9;29282:18;29274:26;;29346:9;29340:4;29336:20;29332:1;29321:9;29317:17;29310:47;29374:131;29500:4;29374:131;:::i;:::-;29366:139;;29093:419;;;:::o;29518:::-;29684:4;29722:2;29711:9;29707:18;29699:26;;29771:9;29765:4;29761:20;29757:1;29746:9;29742:17;29735:47;29799:131;29925:4;29799:131;:::i;:::-;29791:139;;29518:419;;;:::o;29943:::-;30109:4;30147:2;30136:9;30132:18;30124:26;;30196:9;30190:4;30186:20;30182:1;30171:9;30167:17;30160:47;30224:131;30350:4;30224:131;:::i;:::-;30216:139;;29943:419;;;:::o;30368:::-;30534:4;30572:2;30561:9;30557:18;30549:26;;30621:9;30615:4;30611:20;30607:1;30596:9;30592:17;30585:47;30649:131;30775:4;30649:131;:::i;:::-;30641:139;;30368:419;;;:::o;30793:::-;30959:4;30997:2;30986:9;30982:18;30974:26;;31046:9;31040:4;31036:20;31032:1;31021:9;31017:17;31010:47;31074:131;31200:4;31074:131;:::i;:::-;31066:139;;30793:419;;;:::o;31218:::-;31384:4;31422:2;31411:9;31407:18;31399:26;;31471:9;31465:4;31461:20;31457:1;31446:9;31442:17;31435:47;31499:131;31625:4;31499:131;:::i;:::-;31491:139;;31218:419;;;:::o;31643:::-;31809:4;31847:2;31836:9;31832:18;31824:26;;31896:9;31890:4;31886:20;31882:1;31871:9;31867:17;31860:47;31924:131;32050:4;31924:131;:::i;:::-;31916:139;;31643:419;;;:::o;32068:::-;32234:4;32272:2;32261:9;32257:18;32249:26;;32321:9;32315:4;32311:20;32307:1;32296:9;32292:17;32285:47;32349:131;32475:4;32349:131;:::i;:::-;32341:139;;32068:419;;;:::o;32493:::-;32659:4;32697:2;32686:9;32682:18;32674:26;;32746:9;32740:4;32736:20;32732:1;32721:9;32717:17;32710:47;32774:131;32900:4;32774:131;:::i;:::-;32766:139;;32493:419;;;:::o;32918:::-;33084:4;33122:2;33111:9;33107:18;33099:26;;33171:9;33165:4;33161:20;33157:1;33146:9;33142:17;33135:47;33199:131;33325:4;33199:131;:::i;:::-;33191:139;;32918:419;;;:::o;33343:::-;33509:4;33547:2;33536:9;33532:18;33524:26;;33596:9;33590:4;33586:20;33582:1;33571:9;33567:17;33560:47;33624:131;33750:4;33624:131;:::i;:::-;33616:139;;33343:419;;;:::o;33768:::-;33934:4;33972:2;33961:9;33957:18;33949:26;;34021:9;34015:4;34011:20;34007:1;33996:9;33992:17;33985:47;34049:131;34175:4;34049:131;:::i;:::-;34041:139;;33768:419;;;:::o;34193:::-;34359:4;34397:2;34386:9;34382:18;34374:26;;34446:9;34440:4;34436:20;34432:1;34421:9;34417:17;34410:47;34474:131;34600:4;34474:131;:::i;:::-;34466:139;;34193:419;;;:::o;34618:::-;34784:4;34822:2;34811:9;34807:18;34799:26;;34871:9;34865:4;34861:20;34857:1;34846:9;34842:17;34835:47;34899:131;35025:4;34899:131;:::i;:::-;34891:139;;34618:419;;;:::o;35043:::-;35209:4;35247:2;35236:9;35232:18;35224:26;;35296:9;35290:4;35286:20;35282:1;35271:9;35267:17;35260:47;35324:131;35450:4;35324:131;:::i;:::-;35316:139;;35043:419;;;:::o;35468:::-;35634:4;35672:2;35661:9;35657:18;35649:26;;35721:9;35715:4;35711:20;35707:1;35696:9;35692:17;35685:47;35749:131;35875:4;35749:131;:::i;:::-;35741:139;;35468:419;;;:::o;35893:::-;36059:4;36097:2;36086:9;36082:18;36074:26;;36146:9;36140:4;36136:20;36132:1;36121:9;36117:17;36110:47;36174:131;36300:4;36174:131;:::i;:::-;36166:139;;35893:419;;;:::o;36318:::-;36484:4;36522:2;36511:9;36507:18;36499:26;;36571:9;36565:4;36561:20;36557:1;36546:9;36542:17;36535:47;36599:131;36725:4;36599:131;:::i;:::-;36591:139;;36318:419;;;:::o;36743:::-;36909:4;36947:2;36936:9;36932:18;36924:26;;36996:9;36990:4;36986:20;36982:1;36971:9;36967:17;36960:47;37024:131;37150:4;37024:131;:::i;:::-;37016:139;;36743:419;;;:::o;37168:::-;37334:4;37372:2;37361:9;37357:18;37349:26;;37421:9;37415:4;37411:20;37407:1;37396:9;37392:17;37385:47;37449:131;37575:4;37449:131;:::i;:::-;37441:139;;37168:419;;;:::o;37593:::-;37759:4;37797:2;37786:9;37782:18;37774:26;;37846:9;37840:4;37836:20;37832:1;37821:9;37817:17;37810:47;37874:131;38000:4;37874:131;:::i;:::-;37866:139;;37593:419;;;:::o;38018:::-;38184:4;38222:2;38211:9;38207:18;38199:26;;38271:9;38265:4;38261:20;38257:1;38246:9;38242:17;38235:47;38299:131;38425:4;38299:131;:::i;:::-;38291:139;;38018:419;;;:::o;38443:350::-;38600:4;38638:2;38627:9;38623:18;38615:26;;38651:135;38783:1;38772:9;38768:17;38759:6;38651:135;:::i;:::-;38443:350;;;;:::o;38799:222::-;38892:4;38930:2;38919:9;38915:18;38907:26;;38943:71;39011:1;39000:9;38996:17;38987:6;38943:71;:::i;:::-;38799:222;;;;:::o;39027:129::-;39061:6;39088:20;;:::i;:::-;39078:30;;39117:33;39145:4;39137:6;39117:33;:::i;:::-;39027:129;;;:::o;39162:75::-;39195:6;39228:2;39222:9;39212:19;;39162:75;:::o;39243:311::-;39320:4;39410:18;39402:6;39399:30;39396:56;;;39432:18;;:::i;:::-;39396:56;39482:4;39474:6;39470:17;39462:25;;39542:4;39536;39532:15;39524:23;;39243:311;;;:::o;39560:307::-;39621:4;39711:18;39703:6;39700:30;39697:56;;;39733:18;;:::i;:::-;39697:56;39771:29;39793:6;39771:29;:::i;:::-;39763:37;;39855:4;39849;39845:15;39837:23;;39560:307;;;:::o;39873:308::-;39935:4;40025:18;40017:6;40014:30;40011:56;;;40047:18;;:::i;:::-;40011:56;40085:29;40107:6;40085:29;:::i;:::-;40077:37;;40169:4;40163;40159:15;40151:23;;39873:308;;;:::o;40187:141::-;40236:4;40259:3;40251:11;;40282:3;40279:1;40272:14;40316:4;40313:1;40303:18;40295:26;;40187:141;;;:::o;40334:98::-;40385:6;40419:5;40413:12;40403:22;;40334:98;;;:::o;40438:99::-;40490:6;40524:5;40518:12;40508:22;;40438:99;;;:::o;40543:168::-;40626:11;40660:6;40655:3;40648:19;40700:4;40695:3;40691:14;40676:29;;40543:168;;;;:::o;40717:147::-;40818:11;40855:3;40840:18;;40717:147;;;;:::o;40870:169::-;40954:11;40988:6;40983:3;40976:19;41028:4;41023:3;41019:14;41004:29;;40870:169;;;;:::o;41045:148::-;41147:11;41184:3;41169:18;;41045:148;;;;:::o;41199:273::-;41239:3;41258:20;41276:1;41258:20;:::i;:::-;41253:25;;41292:20;41310:1;41292:20;:::i;:::-;41287:25;;41414:1;41378:34;41374:42;41371:1;41368:49;41365:75;;;41420:18;;:::i;:::-;41365:75;41464:1;41461;41457:9;41450:16;;41199:273;;;;:::o;41478:305::-;41518:3;41537:20;41555:1;41537:20;:::i;:::-;41532:25;;41571:20;41589:1;41571:20;:::i;:::-;41566:25;;41725:1;41657:66;41653:74;41650:1;41647:81;41644:107;;;41731:18;;:::i;:::-;41644:107;41775:1;41772;41768:9;41761:16;;41478:305;;;;:::o;41789:185::-;41829:1;41846:20;41864:1;41846:20;:::i;:::-;41841:25;;41880:20;41898:1;41880:20;:::i;:::-;41875:25;;41919:1;41909:35;;41924:18;;:::i;:::-;41909:35;41966:1;41963;41959:9;41954:14;;41789:185;;;;:::o;41980:348::-;42020:7;42043:20;42061:1;42043:20;:::i;:::-;42038:25;;42077:20;42095:1;42077:20;:::i;:::-;42072:25;;42265:1;42197:66;42193:74;42190:1;42187:81;42182:1;42175:9;42168:17;42164:105;42161:131;;;42272:18;;:::i;:::-;42161:131;42320:1;42317;42313:9;42302:20;;41980:348;;;;:::o;42334:191::-;42374:4;42394:20;42412:1;42394:20;:::i;:::-;42389:25;;42428:20;42446:1;42428:20;:::i;:::-;42423:25;;42467:1;42464;42461:8;42458:34;;;42472:18;;:::i;:::-;42458:34;42517:1;42514;42510:9;42502:17;;42334:191;;;;:::o;42531:::-;42571:4;42591:20;42609:1;42591:20;:::i;:::-;42586:25;;42625:20;42643:1;42625:20;:::i;:::-;42620:25;;42664:1;42661;42658:8;42655:34;;;42669:18;;:::i;:::-;42655:34;42714:1;42711;42707:9;42699:17;;42531:191;;;;:::o;42728:96::-;42765:7;42794:24;42812:5;42794:24;:::i;:::-;42783:35;;42728:96;;;:::o;42830:90::-;42864:7;42907:5;42900:13;42893:21;42882:32;;42830:90;;;:::o;42926:77::-;42963:7;42992:5;42981:16;;42926:77;;;:::o;43009:149::-;43045:7;43085:66;43078:5;43074:78;43063:89;;43009:149;;;:::o;43164:118::-;43201:7;43241:34;43234:5;43230:46;43219:57;;43164:118;;;:::o;43288:126::-;43325:7;43365:42;43358:5;43354:54;43343:65;;43288:126;;;:::o;43420:77::-;43457:7;43486:5;43475:16;;43420:77;;;:::o;43503:101::-;43539:7;43579:18;43572:5;43568:30;43557:41;;43503:101;;;:::o;43610:154::-;43694:6;43689:3;43684;43671:30;43756:1;43747:6;43742:3;43738:16;43731:27;43610:154;;;:::o;43770:307::-;43838:1;43848:113;43862:6;43859:1;43856:13;43848:113;;;43947:1;43942:3;43938:11;43932:18;43928:1;43923:3;43919:11;43912:39;43884:2;43881:1;43877:10;43872:15;;43848:113;;;43979:6;43976:1;43973:13;43970:101;;;44059:1;44050:6;44045:3;44041:16;44034:27;43970:101;43819:258;43770:307;;;:::o;44083:171::-;44122:3;44145:24;44163:5;44145:24;:::i;:::-;44136:33;;44191:4;44184:5;44181:15;44178:41;;;44199:18;;:::i;:::-;44178:41;44246:1;44239:5;44235:13;44228:20;;44083:171;;;:::o;44260:320::-;44304:6;44341:1;44335:4;44331:12;44321:22;;44388:1;44382:4;44378:12;44409:18;44399:81;;44465:4;44457:6;44453:17;44443:27;;44399:81;44527:2;44519:6;44516:14;44496:18;44493:38;44490:84;;;44546:18;;:::i;:::-;44490:84;44311:269;44260:320;;;:::o;44586:281::-;44669:27;44691:4;44669:27;:::i;:::-;44661:6;44657:40;44799:6;44787:10;44784:22;44763:18;44751:10;44748:34;44745:62;44742:88;;;44810:18;;:::i;:::-;44742:88;44850:10;44846:2;44839:22;44629:238;44586:281;;:::o;44873:233::-;44912:3;44935:24;44953:5;44935:24;:::i;:::-;44926:33;;44981:66;44974:5;44971:77;44968:103;;;45051:18;;:::i;:::-;44968:103;45098:1;45091:5;45087:13;45080:20;;44873:233;;;:::o;45112:176::-;45144:1;45161:20;45179:1;45161:20;:::i;:::-;45156:25;;45195:20;45213:1;45195:20;:::i;:::-;45190:25;;45234:1;45224:35;;45239:18;;:::i;:::-;45224:35;45280:1;45277;45273:9;45268:14;;45112:176;;;;:::o;45294:180::-;45342:77;45339:1;45332:88;45439:4;45436:1;45429:15;45463:4;45460:1;45453:15;45480:180;45528:77;45525:1;45518:88;45625:4;45622:1;45615:15;45649:4;45646:1;45639:15;45666:180;45714:77;45711:1;45704:88;45811:4;45808:1;45801:15;45835:4;45832:1;45825:15;45852:180;45900:77;45897:1;45890:88;45997:4;45994:1;45987:15;46021:4;46018:1;46011:15;46038:180;46086:77;46083:1;46076:88;46183:4;46180:1;46173:15;46207:4;46204:1;46197:15;46224:117;46333:1;46330;46323:12;46347:117;46456:1;46453;46446:12;46470:117;46579:1;46576;46569:12;46593:117;46702:1;46699;46692:12;46716:117;46825:1;46822;46815:12;46839:102;46880:6;46931:2;46927:7;46922:2;46915:5;46911:14;46907:28;46897:38;;46839:102;;;:::o;46947:221::-;47087:34;47083:1;47075:6;47071:14;47064:58;47156:4;47151:2;47143:6;47139:15;47132:29;46947:221;:::o;47174:225::-;47314:34;47310:1;47302:6;47298:14;47291:58;47383:8;47378:2;47370:6;47366:15;47359:33;47174:225;:::o;47405:229::-;47545:34;47541:1;47533:6;47529:14;47522:58;47614:12;47609:2;47601:6;47597:15;47590:37;47405:229;:::o;47640:222::-;47780:34;47776:1;47768:6;47764:14;47757:58;47849:5;47844:2;47836:6;47832:15;47825:30;47640:222;:::o;47868:224::-;48008:34;48004:1;47996:6;47992:14;47985:58;48077:7;48072:2;48064:6;48060:15;48053:32;47868:224;:::o;48098:236::-;48238:34;48234:1;48226:6;48222:14;48215:58;48307:19;48302:2;48294:6;48290:15;48283:44;48098:236;:::o;48340:244::-;48480:34;48476:1;48468:6;48464:14;48457:58;48549:27;48544:2;48536:6;48532:15;48525:52;48340:244;:::o;48590:230::-;48730:34;48726:1;48718:6;48714:14;48707:58;48799:13;48794:2;48786:6;48782:15;48775:38;48590:230;:::o;48826:168::-;48966:20;48962:1;48954:6;48950:14;48943:44;48826:168;:::o;49000:175::-;49140:27;49136:1;49128:6;49124:14;49117:51;49000:175;:::o;49181:225::-;49321:34;49317:1;49309:6;49305:14;49298:58;49390:8;49385:2;49377:6;49373:15;49366:33;49181:225;:::o;49412:182::-;49552:34;49548:1;49540:6;49536:14;49529:58;49412:182;:::o;49600:234::-;49740:34;49736:1;49728:6;49724:14;49717:58;49809:17;49804:2;49796:6;49792:15;49785:42;49600:234;:::o;49840:176::-;49980:28;49976:1;49968:6;49964:14;49957:52;49840:176;:::o;50022:237::-;50162:34;50158:1;50150:6;50146:14;50139:58;50231:20;50226:2;50218:6;50214:15;50207:45;50022:237;:::o;50265:221::-;50405:34;50401:1;50393:6;50389:14;50382:58;50474:4;50469:2;50461:6;50457:15;50450:29;50265:221;:::o;50492:114::-;;:::o;50612:238::-;50752:34;50748:1;50740:6;50736:14;50729:58;50821:21;50816:2;50808:6;50804:15;50797:46;50612:238;:::o;50856:179::-;50996:31;50992:1;50984:6;50980:14;50973:55;50856:179;:::o;51041:220::-;51181:34;51177:1;51169:6;51165:14;51158:58;51250:3;51245:2;51237:6;51233:15;51226:28;51041:220;:::o;51267:172::-;51407:24;51403:1;51395:6;51391:14;51384:48;51267:172;:::o;51445:170::-;51585:22;51581:1;51573:6;51569:14;51562:46;51445:170;:::o;51621:233::-;51761:34;51757:1;51749:6;51745:14;51738:58;51830:16;51825:2;51817:6;51813:15;51806:41;51621:233;:::o;51860:181::-;52000:33;51996:1;51988:6;51984:14;51977:57;51860:181;:::o;52047:234::-;52187:34;52183:1;52175:6;52171:14;52164:58;52256:17;52251:2;52243:6;52239:15;52232:42;52047:234;:::o;52287:164::-;52427:16;52423:1;52415:6;52411:14;52404:40;52287:164;:::o;52457:232::-;52597:34;52593:1;52585:6;52581:14;52574:58;52666:15;52661:2;52653:6;52649:15;52642:40;52457:232;:::o;52695:221::-;52835:34;52831:1;52823:6;52819:14;52812:58;52904:4;52899:2;52891:6;52887:15;52880:29;52695:221;:::o;52922:169::-;53062:21;53058:1;53050:6;53046:14;53039:45;52922:169;:::o;53097:122::-;53170:24;53188:5;53170:24;:::i;:::-;53163:5;53160:35;53150:63;;53209:1;53206;53199:12;53150:63;53097:122;:::o;53225:116::-;53295:21;53310:5;53295:21;:::i;:::-;53288:5;53285:32;53275:60;;53331:1;53328;53321:12;53275:60;53225:116;:::o;53347:122::-;53420:24;53438:5;53420:24;:::i;:::-;53413:5;53410:35;53400:63;;53459:1;53456;53449:12;53400:63;53347:122;:::o;53475:120::-;53547:23;53564:5;53547:23;:::i;:::-;53540:5;53537:34;53527:62;;53585:1;53582;53575:12;53527:62;53475:120;:::o;53601:122::-;53674:24;53692:5;53674:24;:::i;:::-;53667:5;53664:35;53654:63;;53713:1;53710;53703:12;53654:63;53601:122;:::o

Swarm Source

ipfs://a4a8238b75aca3e48f379bf4fe35ea9b1b6d408f5768d85c21ecb043910ff6bb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.