ETH Price: $3,267.09 (+3.06%)
Gas: 1 Gwei

Token

PEPE 2.0 NFT (PEPE)
 

Overview

Max Total Supply

976 PEPE

Holders

268

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
macleoud.eth
Balance
2 PEPE
0x2b79e80fe57d21cfeccdb5a960e1838935146c3f
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:
PEPE

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-09
*/

// SPDX-License-Identifier: MIT     

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

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

pragma solidity ^0.8.0;
abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        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);
    }
}

pragma solidity ^0.8.0;

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;
    }
}

pragma solidity ^0.8.0;

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

    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);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

pragma solidity ^0.8.0;


library EnumerableSet {


    struct Set {
        // Storage of set values
        bytes32[] _values;

        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);

            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {

        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastValue;
                
                set._indexes[lastValue] = valueIndex; 
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {

        address addr;

        uint64 startTimestamp;

        bool burned;

        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    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,
        bytes calldata data
    ) external payable;

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

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

    function approve(address to, uint256 tokenId) external payable;

    function setApprovalForAll(address operator, bool _approved) external;

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

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

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

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

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

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

pragma solidity ^0.8.4;

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

contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;

    mapping(address => uint256) private _packedAddressData;

    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {

        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {

        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {

        return
            interfaceId == 0x01ffc9a7 || 
            interfaceId == 0x80ac58cd || 
            interfaceId == 0x5b5e139f; 
    }

    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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

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

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];

                    if (packed & _BITMASK_BURNED == 0) {

                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`.
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public payable virtual override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

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

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }

    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {

            owner := and(owner, _BITMASK_ADDRESS)

            msgSender := and(msgSender, _BITMASK_ADDRESS)

            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];

        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {

                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            --_packedAddressData[from]; 
            ++_packedAddressData[to]; 

            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

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

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

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

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

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {

                toMasked := and(to, _BITMASK_ADDRESS)

                log4(
                    0, 
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {

                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

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

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

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

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        assembly {
            if approvedAddress {
                
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {

            let m := add(mload(0x40), 0xa0)

            mstore(0x40, m)

            str := sub(m, 0x20)

            mstore(str, 0)

            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)

                mstore8(str, add(48, mod(temp, 10)))

                temp := div(temp, 10)

                if iszero(temp) { break }
            }

            let length := sub(end, str)

            str := sub(str, 0x20)

            mstore(str, length)
        }
    }
}

pragma solidity ^0.8.13;

contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry constant operatorFilterRegistry =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator() virtual {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

pragma solidity ^0.8.13;

contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.4;

interface IERC721ABurnable is IERC721A {

    function burn(uint256 tokenId) external;
}

pragma solidity ^0.8.4;
abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}


pragma solidity ^0.8.16;
contract PEPE is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{
string public CONTRACT_URI = "";
mapping(address => uint) public userHasMinted;
bool public REVEALED;
string public UNREVEALED_URI = "";
string public BASE_URI = "";
bool public isPublicMintEnabled = false;
uint public COLLECTION_SIZE = 6969; 
uint public MINT_PRICE = 0.003 ether; 
uint public MAX_BATCH_SIZE = 25;
uint public SUPPLY_PER_WALLET = 150;
uint public FREE_SUPPLY_PER_WALLET = 2;
constructor() ERC721A("PEPE 2.0 NFT", "PEPE") {}


    function MintVip(uint256 quantity, address receiver) public onlyOwner {
        require(
            totalSupply() + quantity <= COLLECTION_SIZE,
            "No more PEPE in stock!"
        );
        
        _safeMint(receiver, quantity);
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    function getPrice(uint quantity) public view returns(uint){
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
        } else {
            price = 0;
        }
        return price;
    }

    function mint(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + free;
        } else {
            price = 0;
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity;
        }

        require(isPublicMintEnabled, "Mint not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more left!");

        require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to mint over over limit");

        require(quantity <= MAX_BATCH_SIZE, "Tried to mint over limit, retry with reduced quantity");
        require(msg.value >= price, "Must send more eth!");

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }
    function setPublicMintEnabled() public onlyOwner {
        isPublicMintEnabled = !isPublicMintEnabled;
    }

    function withdrawFunds() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function CollectionUrI(bool _revealed, string memory _baseURI) public onlyOwner {
        BASE_URI = _baseURI;
        REVEALED = _revealed;
    }

    function contractURI() public view returns (string memory) {
        return CONTRACT_URI;
    }

    function setContract(string memory _contractURI) public onlyOwner {
        CONTRACT_URI = _contractURI;
    }

    function ChangeCollectionSupply(uint256 _new) external onlyOwner {
        COLLECTION_SIZE = _new;
    }

    function ChangePrice(uint256 _newPrice) external onlyOwner {
        MINT_PRICE = _newPrice;
    }

    function ChangeFreePerWallet(uint256 _new) external onlyOwner {
        FREE_SUPPLY_PER_WALLET = _new;
    }

    function ChangeSupplyPerWallet(uint256 _new) external onlyOwner {
        SUPPLY_PER_WALLET = _new;
    }

    function SetMaxBatchSize(uint256 _new) external onlyOwner {
        MAX_BATCH_SIZE = _new;
    }

    function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
        public payable
        override (ERC721A, IERC721A)
        onlyAllowedOperator
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override (ERC721A, IERC721A)
        returns (string memory)
    {
        if (REVEALED) {
            return
                string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId)));
        } else {
            return UNREVEALED_URI;
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeCollectionSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"ChangePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeSupplyPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"CollectionUrI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintVip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":[],"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":"payable","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":"payable","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":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","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":"_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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a9081620000249190620006df565b5060405180602001604052806000815250600d9081620000459190620006df565b5060405180602001604052806000815250600e9081620000669190620006df565b506000600f60006101000a81548160ff021916908315150217905550611b39601055660aa87bee538000601155601960125560966013556002601455348015620000af57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600c81526020017f5045504520322e30204e465400000000000000000000000000000000000000008152506040518060400160405280600481526020017f504550450000000000000000000000000000000000000000000000000000000081525062000153620001476200039460201b60201c565b6200039c60201b60201c565b8160039081620001649190620006df565b508060049081620001769190620006df565b50620001876200046060201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038c57801562000252576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620002189291906200080b565b600060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506200038b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d29291906200080b565b600060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506200038a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000355919062000838565b600060405180830381600087803b1580156200037057600080fd5b505af115801562000385573d6000803e3d6000fd5b505050505b5b5b505062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000604082019050620008226000830185620007fa565b620008316020830184620007fa565b9392505050565b60006020820190506200084f6000830184620007fa565b92915050565b61401780620008656000396000f3fe6080604052600436106102515760003560e01c806375b6447111610139578063c144a4ba116100b6578063e75722301161007a578063e757223014610837578063e8a3d48514610874578063e985e9c51461089f578063f2fde38b146108dc578063f814943d14610905578063fb92488b1461092e57610251565b8063c144a4ba14610750578063c87b56dd14610779578063cfdbf254146107b6578063d8258d95146107e1578063dbddb26a1461080c57610251565b8063a22cb465116100fd578063a22cb4651461069e578063a4cdd719146106c7578063a76a9587146106de578063b88d4fde14610709578063c002d23d1461072557610251565b806375b64471146105da5780638da5cb5b1461060357806395d89b411461062e578063a0712d6814610659578063a1db246e1461067557610251565b806324600fc3116101d257806356b4f6731161019657806356b4f673146104ca5780635fe75587146104f55780636352211e1461052057806370a082311461055d578063715018a61461059a5780637304ff6c146105b157610251565b806324600fc31461041a57806342842e0e1461043157806342966c681461044d578063507862d11461047657806356b48d63146104a157610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d188d7a146103985780631d985778146103c157806323b872dd146103fe57610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612f91565b610cdb565b6040516103f59190612f36565b60405180910390f35b61041860048036038101906104139190612fbe565b610cf3565b005b34801561042657600080fd5b5061042f610dff565b005b61044b60048036038101906104469190612fbe565b610f0b565b005b34801561045957600080fd5b50610474600480360381019061046f9190612e32565b611017565b005b34801561048257600080fd5b5061048b611025565b6040516104989190612dda565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c39190613146565b6110b3565b005b3480156104d657600080fd5b506104df6110ce565b6040516104ec9190612dda565b60405180910390f35b34801561050157600080fd5b5061050a61115c565b6040516105179190612f36565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612e32565b611162565b6040516105549190612ea0565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612f91565b611174565b6040516105919190612f36565b60405180910390f35b3480156105a657600080fd5b506105af61122c565b005b3480156105bd57600080fd5b506105d860048036038101906105d391906131bb565b611240565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190612e32565b611276565b005b34801561060f57600080fd5b50610618611288565b6040516106259190612ea0565b60405180910390f35b34801561063a57600080fd5b506106436112b1565b6040516106509190612dda565b60405180910390f35b610673600480360381019061066e9190612e32565b611343565b005b34801561068157600080fd5b5061069c60048036038101906106979190612e32565b611790565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613217565b6117a2565b005b3480156106d357600080fd5b506106dc6118ad565b005b3480156106ea57600080fd5b506106f36118e1565b6040516107009190612c96565b60405180910390f35b610723600480360381019061071e91906132f8565b6118f4565b005b34801561073157600080fd5b5061073a611a02565b6040516107479190612f36565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b611a08565b005b34801561078557600080fd5b506107a0600480360381019061079b9190612e32565b611a1a565b6040516107ad9190612dda565b60405180910390f35b3480156107c257600080fd5b506107cb611af6565b6040516107d89190612f36565b60405180910390f35b3480156107ed57600080fd5b506107f6611afc565b6040516108039190612f36565b60405180910390f35b34801561081857600080fd5b50610821611b02565b60405161082e9190612dda565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190612e32565b611b90565b60405161086b9190612f36565b60405180910390f35b34801561088057600080fd5b50610889611c1a565b6040516108969190612dda565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c1919061337b565b611cac565b6040516108d39190612c96565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612f91565b611d40565b005b34801561091157600080fd5b5061092c60048036038101906109279190612e32565b611dc3565b005b34801561093a57600080fd5b5061095560048036038101906109509190612e32565b611dd5565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1882611162565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611cac565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b610c76611e53565b60105482610c82610c57565b610c8c919061344a565b1115610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc4906134ca565b60405180910390fd5b610cd78183611ed1565b5050565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610def576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d6a9291906134ea565b6020604051808303816000875af1158015610d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dad9190613528565b610dee57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610de59190612ea0565b60405180910390fd5b5b610dfa838383611eef565b505050565b610e07611e53565b600260095403610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906135a1565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e7a906135f2565b60006040518083038185875af1925050503d8060008114610eb7576040519150601f19603f3d011682016040523d82523d6000602084013e610ebc565b606091505b5050905080610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613653565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611007576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f829291906134ea565b6020604051808303816000875af1158015610fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc59190613528565b61100657336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610ffd9190612ea0565b60405180910390fd5b5b611012838383612211565b505050565b611022816001612231565b50565b600d8054611032906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461105e906133ea565b80156110ab5780601f10611080576101008083540402835291602001916110ab565b820191906000526020600020905b81548152906001019060200180831161108e57829003601f168201915b505050505081565b6110bb611e53565b80600a90816110ca919061381f565b5050565b600a80546110db906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611107906133ea565b80156111545780601f1061112957610100808354040283529160200191611154565b820191906000526020600020905b81548152906001019060200180831161113757829003601f168201915b505050505081565b60135481565b600061116d82612483565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111db576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611234611e53565b61123e600061254f565b565b611248611e53565b80600e9081611257919061381f565b5081600c60006101000a81548160ff0219169083151502179055505050565b61127e611e53565b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c0906133ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec906133ea565b80156113395780601f1061130e57610100808354040283529160200191611339565b820191906000526020600020905b81548152906001019060200180831161131c57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a89061393d565b60405180910390fd5b6002600954036113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed906135a1565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461144e919061395d565b9050808310611505578083611463919061395d565b6011546114709190613991565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114bd919061344a565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611598565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554919061344a565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613a1f565b60405180910390fd5b601054836115f3610c57565b6115fd919061344a565b111561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613a8b565b60405180910390fd5b6013548361164b33611174565b611655919061344a565b1115611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613af7565b60405180910390fd5b6012548311156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613b89565b60405180910390fd5b8134101561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613bf5565b60405180910390fd5b6117283384611ed1565b81341115611783573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611756919061395d565b9081150290604051600060405180830381858888f19350505050158015611781573d6000803e3d6000fd5b505b5050600160098190555050565b611798611e53565b8060148190555050565b80600860006117af611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661185c611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118a19190612c96565b60405180910390a35050565b6118b5611e53565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119f0576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161196b9291906134ea565b6020604051808303816000875af115801561198a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ae9190613528565b6119ef57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119e69190612ea0565b60405180910390fd5b5b6119fc84848484612613565b50505050565b60115481565b611a10611e53565b8060128190555050565b6060600c60009054906101000a900460ff1615611a6357600e611a3c83612686565b604051602001611a4d929190613cd4565b6040516020818303038152906040529050611af1565b600d8054611a70906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9c906133ea565b8015611ae95780601f10611abe57610100808354040283529160200191611ae9565b820191906000526020600020905b815481529060010190602001808311611acc57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611b0f906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b906133ea565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611be2919061395d565b9050808410611c0b578084611bf7919061395d565b601154611c049190613991565b9150611c10565b600091505b8192505050919050565b6060600a8054611c29906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611c55906133ea565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48611e53565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90613d6a565b60405180910390fd5b611dc08161254f565b50565b611dcb611e53565b8060138190555050565b611ddd611e53565b8060118190555050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b611e5b6127e6565b73ffffffffffffffffffffffffffffffffffffffff16611e79611288565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613dd6565b60405180910390fd5b565b611eeb8282604051806020016040528060008152506127ee565b5050565b6000611efa82612483565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f61576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611f6d8461288c565b91509150611f838187611f7e611e46565b6128b3565b611fcf57611f9886611f93611e46565b611cac565b611fce576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612035576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61204286868660016128f7565b801561204d57600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061211b856120f78888876128fd565b7c020000000000000000000000000000000000000000000000000000000017612925565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121a1576000600185019050600060056000838152602001908152602001600020540361219f57600154811461219e578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122098686866001612950565b505050505050565b61222c838383604051806020016040528060008152506118f4565b505050565b600061223c83612483565b9050600081905060008061224f8661288c565b9150915084156122b85761226b8184612266611e46565b6128b3565b6122b7576122808361227b611e46565b611cac565b6122b6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122c68360008860016128f7565b80156122d157600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061237983612336856000886128fd565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612925565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123ff57600060018701905060006005600083815260200190815260200160002054036123fd5760015481146123fc578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612469836000886001612950565b600260008154809291906001019190505550505050505050565b60008082905080612492611e4e565b11612518576001548110156125175760006005600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612515575b6000810361250b5760056000836001900393508381526020019081526020016000205490506124e1565b809250505061254a565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61261e848484610cf3565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613df6565b915050600a826126f89190613e6d565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a61301b565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da57600182612766919061395d565b9150600a856127759190613e9e565b6030612781919061344a565b60f81b81838151811061279757612796613ecf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613e6d565b9450612751565b8093505050505b919050565b600033905090565b6127f88383612aa6565b60008373ffffffffffffffffffffffffffffffffffffffff163b146128875760006001549050600083820390505b6128396000868380600101945086612956565b61286f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061282657816001541461288457600080fd5b50505b505050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612914868684612c62565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190613f53565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190613fb4565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600154905060008203612ae7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612af460008483856128f7565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b6b83612b5c60008660006128fd565b612b6585612c6b565b17612925565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c0c57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bd1565b5060008203612c47576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c5d6000848385612950565b505050565b60009392505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b60008060408385031215612f6857612f67612cbb565b5b6000612f7685828601612e1d565b9250506020612f8785828601612ed2565b9150509250929050565b600060208284031215612fa757612fa6612cbb565b5b6000612fb584828501612ed2565b91505092915050565b600080600060608486031215612fd757612fd6612cbb565b5b6000612fe586828701612ed2565b9350506020612ff686828701612ed2565b925050604061300786828701612e1d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61305382612d90565b810181811067ffffffffffffffff821117156130725761307161301b565b5b80604052505050565b6000613085612cb1565b9050613091828261304a565b919050565b600067ffffffffffffffff8211156130b1576130b061301b565b5b6130ba82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130e96130e484613096565b61307b565b90508281526020810184848401111561310557613104613016565b5b6131108482856130c7565b509392505050565b600082601f83011261312d5761312c613011565b5b813561313d8482602086016130d6565b91505092915050565b60006020828403121561315c5761315b612cbb565b5b600082013567ffffffffffffffff81111561317a57613179612cc0565b5b61318684828501613118565b91505092915050565b61319881612c7b565b81146131a357600080fd5b50565b6000813590506131b58161318f565b92915050565b600080604083850312156131d2576131d1612cbb565b5b60006131e0858286016131a6565b925050602083013567ffffffffffffffff81111561320157613200612cc0565b5b61320d85828601613118565b9150509250929050565b6000806040838503121561322e5761322d612cbb565b5b600061323c85828601612ed2565b925050602061324d858286016131a6565b9150509250929050565b600067ffffffffffffffff8211156132725761327161301b565b5b61327b82612d90565b9050602081019050919050565b600061329b61329684613257565b61307b565b9050828152602081018484840111156132b7576132b6613016565b5b6132c28482856130c7565b509392505050565b600082601f8301126132df576132de613011565b5b81356132ef848260208601613288565b91505092915050565b6000806000806080858703121561331257613311612cbb565b5b600061332087828801612ed2565b945050602061333187828801612ed2565b935050604061334287828801612e1d565b925050606085013567ffffffffffffffff81111561336357613362612cc0565b5b61336f878288016132ca565b91505092959194509250565b6000806040838503121561339257613391612cbb565b5b60006133a085828601612ed2565b92505060206133b185828601612ed2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061345582612dfc565b915061346083612dfc565b92508282019050808211156134785761347761341b565b5b92915050565b7f4e6f206d6f7265205045504520696e2073746f636b2100000000000000000000600082015250565b60006134b4601683612d55565b91506134bf8261347e565b602082019050919050565b600060208201905081810360008301526134e3816134a7565b9050919050565b60006040820190506134ff6000830185612e91565b61350c6020830184612e91565b9392505050565b6000815190506135228161318f565b92915050565b60006020828403121561353e5761353d612cbb565b5b600061354c84828501613513565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061358b601f83612d55565b915061359682613555565b602082019050919050565b600060208201905081810360008301526135ba8161357e565b9050919050565b600081905092915050565b50565b60006135dc6000836135c1565b91506135e7826135cc565b600082019050919050565b60006135fd826135cf565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061363d601083612d55565b915061364882613607565b602082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613698565b6136df8683613698565b95508019841693508086168417925050509392505050565b6000819050919050565b600061371c61371761371284612dfc565b6136f7565b612dfc565b9050919050565b6000819050919050565b61373683613701565b61374a61374282613723565b8484546136a5565b825550505050565b600090565b61375f613752565b61376a81848461372d565b505050565b5b8181101561378e57613783600082613757565b600181019050613770565b5050565b601f8211156137d3576137a481613673565b6137ad84613688565b810160208510156137bc578190505b6137d06137c885613688565b83018261376f565b50505b505050565b600082821c905092915050565b60006137f6600019846008026137d8565b1980831691505092915050565b600061380f83836137e5565b9150826002028217905092915050565b61382882612d4a565b67ffffffffffffffff8111156138415761384061301b565b5b61384b82546133ea565b613856828285613792565b600060209050601f8311600181146138895760008415613877578287015190505b6138818582613803565b8655506138e9565b601f19841661389786613673565b60005b828110156138bf5784890151825560018201915060208501945060208101905061389a565b868310156138dc57848901516138d8601f8916826137e5565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613927601e83612d55565b9150613932826138f1565b602082019050919050565b600060208201905081810360008301526139568161391a565b9050919050565b600061396882612dfc565b915061397383612dfc565b925082820390508181111561398b5761398a61341b565b5b92915050565b600061399c82612dfc565b91506139a783612dfc565b92508282026139b581612dfc565b915082820484148315176139cc576139cb61341b565b5b5092915050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b6000613a09601383612d55565b9150613a14826139d3565b602082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b7f4e6f206d6f7265206c6566742100000000000000000000000000000000000000600082015250565b6000613a75600d83612d55565b9150613a8082613a3f565b602082019050919050565b60006020820190508181036000830152613aa481613a68565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d6974000000600082015250565b6000613ae1601d83612d55565b9150613aec82613aab565b602082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b6000613b73603583612d55565b9150613b7e82613b17565b604082019050919050565b60006020820190508181036000830152613ba281613b66565b9050919050565b7f4d7573742073656e64206d6f7265206574682100000000000000000000000000600082015250565b6000613bdf601383612d55565b9150613bea82613ba9565b602082019050919050565b60006020820190508181036000830152613c0e81613bd2565b9050919050565b600081905092915050565b60008154613c2d816133ea565b613c378186613c15565b94506001821660008114613c525760018114613c6757613c9a565b60ff1983168652811515820286019350613c9a565b613c7085613673565b60005b83811015613c9257815481890152600182019150602081019050613c73565b838801955050505b50505092915050565b6000613cae82612d4a565b613cb88185613c15565b9350613cc8818560208601612d66565b80840191505092915050565b6000613ce08285613c20565b9150613cec8284613ca3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d54602683612d55565b9150613d5f82613cf8565b604082019050919050565b60006020820190508181036000830152613d8381613d47565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc0602083612d55565b9150613dcb82613d8a565b602082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b6000613e0182612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e3357613e3261341b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e7882612dfc565b9150613e8383612dfc565b925082613e9357613e92613e3e565b5b828204905092915050565b6000613ea982612dfc565b9150613eb483612dfc565b925082613ec457613ec3613e3e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613f2582613efe565b613f2f8185613f09565b9350613f3f818560208601612d66565b613f4881612d90565b840191505092915050565b6000608082019050613f686000830187612e91565b613f756020830186612e91565b613f826040830185612f27565b8181036060830152613f948184613f1a565b905095945050505050565b600081519050613fae81612cf1565b92915050565b600060208284031215613fca57613fc9612cbb565b5b6000613fd884828501613f9f565b9150509291505056fea2646970667358221220bde4f8d3c3b6d296bcc8df99f4ea9e4e957b82b50217b6ad4bbea451f19307bf64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102515760003560e01c806375b6447111610139578063c144a4ba116100b6578063e75722301161007a578063e757223014610837578063e8a3d48514610874578063e985e9c51461089f578063f2fde38b146108dc578063f814943d14610905578063fb92488b1461092e57610251565b8063c144a4ba14610750578063c87b56dd14610779578063cfdbf254146107b6578063d8258d95146107e1578063dbddb26a1461080c57610251565b8063a22cb465116100fd578063a22cb4651461069e578063a4cdd719146106c7578063a76a9587146106de578063b88d4fde14610709578063c002d23d1461072557610251565b806375b64471146105da5780638da5cb5b1461060357806395d89b411461062e578063a0712d6814610659578063a1db246e1461067557610251565b806324600fc3116101d257806356b4f6731161019657806356b4f673146104ca5780635fe75587146104f55780636352211e1461052057806370a082311461055d578063715018a61461059a5780637304ff6c146105b157610251565b806324600fc31461041a57806342842e0e1461043157806342966c681461044d578063507862d11461047657806356b48d63146104a157610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d188d7a146103985780631d985778146103c157806323b872dd146103fe57610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612f91565b610cdb565b6040516103f59190612f36565b60405180910390f35b61041860048036038101906104139190612fbe565b610cf3565b005b34801561042657600080fd5b5061042f610dff565b005b61044b60048036038101906104469190612fbe565b610f0b565b005b34801561045957600080fd5b50610474600480360381019061046f9190612e32565b611017565b005b34801561048257600080fd5b5061048b611025565b6040516104989190612dda565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c39190613146565b6110b3565b005b3480156104d657600080fd5b506104df6110ce565b6040516104ec9190612dda565b60405180910390f35b34801561050157600080fd5b5061050a61115c565b6040516105179190612f36565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612e32565b611162565b6040516105549190612ea0565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612f91565b611174565b6040516105919190612f36565b60405180910390f35b3480156105a657600080fd5b506105af61122c565b005b3480156105bd57600080fd5b506105d860048036038101906105d391906131bb565b611240565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190612e32565b611276565b005b34801561060f57600080fd5b50610618611288565b6040516106259190612ea0565b60405180910390f35b34801561063a57600080fd5b506106436112b1565b6040516106509190612dda565b60405180910390f35b610673600480360381019061066e9190612e32565b611343565b005b34801561068157600080fd5b5061069c60048036038101906106979190612e32565b611790565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613217565b6117a2565b005b3480156106d357600080fd5b506106dc6118ad565b005b3480156106ea57600080fd5b506106f36118e1565b6040516107009190612c96565b60405180910390f35b610723600480360381019061071e91906132f8565b6118f4565b005b34801561073157600080fd5b5061073a611a02565b6040516107479190612f36565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b611a08565b005b34801561078557600080fd5b506107a0600480360381019061079b9190612e32565b611a1a565b6040516107ad9190612dda565b60405180910390f35b3480156107c257600080fd5b506107cb611af6565b6040516107d89190612f36565b60405180910390f35b3480156107ed57600080fd5b506107f6611afc565b6040516108039190612f36565b60405180910390f35b34801561081857600080fd5b50610821611b02565b60405161082e9190612dda565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190612e32565b611b90565b60405161086b9190612f36565b60405180910390f35b34801561088057600080fd5b50610889611c1a565b6040516108969190612dda565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c1919061337b565b611cac565b6040516108d39190612c96565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612f91565b611d40565b005b34801561091157600080fd5b5061092c60048036038101906109279190612e32565b611dc3565b005b34801561093a57600080fd5b5061095560048036038101906109509190612e32565b611dd5565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1882611162565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611cac565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b610c76611e53565b60105482610c82610c57565b610c8c919061344a565b1115610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc4906134ca565b60405180910390fd5b610cd78183611ed1565b5050565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610def576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d6a9291906134ea565b6020604051808303816000875af1158015610d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dad9190613528565b610dee57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610de59190612ea0565b60405180910390fd5b5b610dfa838383611eef565b505050565b610e07611e53565b600260095403610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906135a1565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e7a906135f2565b60006040518083038185875af1925050503d8060008114610eb7576040519150601f19603f3d011682016040523d82523d6000602084013e610ebc565b606091505b5050905080610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613653565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611007576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f829291906134ea565b6020604051808303816000875af1158015610fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc59190613528565b61100657336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610ffd9190612ea0565b60405180910390fd5b5b611012838383612211565b505050565b611022816001612231565b50565b600d8054611032906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461105e906133ea565b80156110ab5780601f10611080576101008083540402835291602001916110ab565b820191906000526020600020905b81548152906001019060200180831161108e57829003601f168201915b505050505081565b6110bb611e53565b80600a90816110ca919061381f565b5050565b600a80546110db906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611107906133ea565b80156111545780601f1061112957610100808354040283529160200191611154565b820191906000526020600020905b81548152906001019060200180831161113757829003601f168201915b505050505081565b60135481565b600061116d82612483565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111db576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611234611e53565b61123e600061254f565b565b611248611e53565b80600e9081611257919061381f565b5081600c60006101000a81548160ff0219169083151502179055505050565b61127e611e53565b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c0906133ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec906133ea565b80156113395780601f1061130e57610100808354040283529160200191611339565b820191906000526020600020905b81548152906001019060200180831161131c57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a89061393d565b60405180910390fd5b6002600954036113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed906135a1565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461144e919061395d565b9050808310611505578083611463919061395d565b6011546114709190613991565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114bd919061344a565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611598565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554919061344a565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613a1f565b60405180910390fd5b601054836115f3610c57565b6115fd919061344a565b111561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613a8b565b60405180910390fd5b6013548361164b33611174565b611655919061344a565b1115611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613af7565b60405180910390fd5b6012548311156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613b89565b60405180910390fd5b8134101561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613bf5565b60405180910390fd5b6117283384611ed1565b81341115611783573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611756919061395d565b9081150290604051600060405180830381858888f19350505050158015611781573d6000803e3d6000fd5b505b5050600160098190555050565b611798611e53565b8060148190555050565b80600860006117af611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661185c611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118a19190612c96565b60405180910390a35050565b6118b5611e53565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119f0576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161196b9291906134ea565b6020604051808303816000875af115801561198a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ae9190613528565b6119ef57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119e69190612ea0565b60405180910390fd5b5b6119fc84848484612613565b50505050565b60115481565b611a10611e53565b8060128190555050565b6060600c60009054906101000a900460ff1615611a6357600e611a3c83612686565b604051602001611a4d929190613cd4565b6040516020818303038152906040529050611af1565b600d8054611a70906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9c906133ea565b8015611ae95780601f10611abe57610100808354040283529160200191611ae9565b820191906000526020600020905b815481529060010190602001808311611acc57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611b0f906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b906133ea565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611be2919061395d565b9050808410611c0b578084611bf7919061395d565b601154611c049190613991565b9150611c10565b600091505b8192505050919050565b6060600a8054611c29906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611c55906133ea565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48611e53565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90613d6a565b60405180910390fd5b611dc08161254f565b50565b611dcb611e53565b8060138190555050565b611ddd611e53565b8060118190555050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b611e5b6127e6565b73ffffffffffffffffffffffffffffffffffffffff16611e79611288565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613dd6565b60405180910390fd5b565b611eeb8282604051806020016040528060008152506127ee565b5050565b6000611efa82612483565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f61576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611f6d8461288c565b91509150611f838187611f7e611e46565b6128b3565b611fcf57611f9886611f93611e46565b611cac565b611fce576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612035576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61204286868660016128f7565b801561204d57600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061211b856120f78888876128fd565b7c020000000000000000000000000000000000000000000000000000000017612925565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121a1576000600185019050600060056000838152602001908152602001600020540361219f57600154811461219e578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122098686866001612950565b505050505050565b61222c838383604051806020016040528060008152506118f4565b505050565b600061223c83612483565b9050600081905060008061224f8661288c565b9150915084156122b85761226b8184612266611e46565b6128b3565b6122b7576122808361227b611e46565b611cac565b6122b6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122c68360008860016128f7565b80156122d157600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061237983612336856000886128fd565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612925565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123ff57600060018701905060006005600083815260200190815260200160002054036123fd5760015481146123fc578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612469836000886001612950565b600260008154809291906001019190505550505050505050565b60008082905080612492611e4e565b11612518576001548110156125175760006005600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612515575b6000810361250b5760056000836001900393508381526020019081526020016000205490506124e1565b809250505061254a565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61261e848484610cf3565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613df6565b915050600a826126f89190613e6d565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a61301b565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da57600182612766919061395d565b9150600a856127759190613e9e565b6030612781919061344a565b60f81b81838151811061279757612796613ecf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613e6d565b9450612751565b8093505050505b919050565b600033905090565b6127f88383612aa6565b60008373ffffffffffffffffffffffffffffffffffffffff163b146128875760006001549050600083820390505b6128396000868380600101945086612956565b61286f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061282657816001541461288457600080fd5b50505b505050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612914868684612c62565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190613f53565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190613fb4565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600154905060008203612ae7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612af460008483856128f7565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b6b83612b5c60008660006128fd565b612b6585612c6b565b17612925565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c0c57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bd1565b5060008203612c47576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c5d6000848385612950565b505050565b60009392505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b60008060408385031215612f6857612f67612cbb565b5b6000612f7685828601612e1d565b9250506020612f8785828601612ed2565b9150509250929050565b600060208284031215612fa757612fa6612cbb565b5b6000612fb584828501612ed2565b91505092915050565b600080600060608486031215612fd757612fd6612cbb565b5b6000612fe586828701612ed2565b9350506020612ff686828701612ed2565b925050604061300786828701612e1d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61305382612d90565b810181811067ffffffffffffffff821117156130725761307161301b565b5b80604052505050565b6000613085612cb1565b9050613091828261304a565b919050565b600067ffffffffffffffff8211156130b1576130b061301b565b5b6130ba82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130e96130e484613096565b61307b565b90508281526020810184848401111561310557613104613016565b5b6131108482856130c7565b509392505050565b600082601f83011261312d5761312c613011565b5b813561313d8482602086016130d6565b91505092915050565b60006020828403121561315c5761315b612cbb565b5b600082013567ffffffffffffffff81111561317a57613179612cc0565b5b61318684828501613118565b91505092915050565b61319881612c7b565b81146131a357600080fd5b50565b6000813590506131b58161318f565b92915050565b600080604083850312156131d2576131d1612cbb565b5b60006131e0858286016131a6565b925050602083013567ffffffffffffffff81111561320157613200612cc0565b5b61320d85828601613118565b9150509250929050565b6000806040838503121561322e5761322d612cbb565b5b600061323c85828601612ed2565b925050602061324d858286016131a6565b9150509250929050565b600067ffffffffffffffff8211156132725761327161301b565b5b61327b82612d90565b9050602081019050919050565b600061329b61329684613257565b61307b565b9050828152602081018484840111156132b7576132b6613016565b5b6132c28482856130c7565b509392505050565b600082601f8301126132df576132de613011565b5b81356132ef848260208601613288565b91505092915050565b6000806000806080858703121561331257613311612cbb565b5b600061332087828801612ed2565b945050602061333187828801612ed2565b935050604061334287828801612e1d565b925050606085013567ffffffffffffffff81111561336357613362612cc0565b5b61336f878288016132ca565b91505092959194509250565b6000806040838503121561339257613391612cbb565b5b60006133a085828601612ed2565b92505060206133b185828601612ed2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061345582612dfc565b915061346083612dfc565b92508282019050808211156134785761347761341b565b5b92915050565b7f4e6f206d6f7265205045504520696e2073746f636b2100000000000000000000600082015250565b60006134b4601683612d55565b91506134bf8261347e565b602082019050919050565b600060208201905081810360008301526134e3816134a7565b9050919050565b60006040820190506134ff6000830185612e91565b61350c6020830184612e91565b9392505050565b6000815190506135228161318f565b92915050565b60006020828403121561353e5761353d612cbb565b5b600061354c84828501613513565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061358b601f83612d55565b915061359682613555565b602082019050919050565b600060208201905081810360008301526135ba8161357e565b9050919050565b600081905092915050565b50565b60006135dc6000836135c1565b91506135e7826135cc565b600082019050919050565b60006135fd826135cf565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061363d601083612d55565b915061364882613607565b602082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613698565b6136df8683613698565b95508019841693508086168417925050509392505050565b6000819050919050565b600061371c61371761371284612dfc565b6136f7565b612dfc565b9050919050565b6000819050919050565b61373683613701565b61374a61374282613723565b8484546136a5565b825550505050565b600090565b61375f613752565b61376a81848461372d565b505050565b5b8181101561378e57613783600082613757565b600181019050613770565b5050565b601f8211156137d3576137a481613673565b6137ad84613688565b810160208510156137bc578190505b6137d06137c885613688565b83018261376f565b50505b505050565b600082821c905092915050565b60006137f6600019846008026137d8565b1980831691505092915050565b600061380f83836137e5565b9150826002028217905092915050565b61382882612d4a565b67ffffffffffffffff8111156138415761384061301b565b5b61384b82546133ea565b613856828285613792565b600060209050601f8311600181146138895760008415613877578287015190505b6138818582613803565b8655506138e9565b601f19841661389786613673565b60005b828110156138bf5784890151825560018201915060208501945060208101905061389a565b868310156138dc57848901516138d8601f8916826137e5565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613927601e83612d55565b9150613932826138f1565b602082019050919050565b600060208201905081810360008301526139568161391a565b9050919050565b600061396882612dfc565b915061397383612dfc565b925082820390508181111561398b5761398a61341b565b5b92915050565b600061399c82612dfc565b91506139a783612dfc565b92508282026139b581612dfc565b915082820484148315176139cc576139cb61341b565b5b5092915050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b6000613a09601383612d55565b9150613a14826139d3565b602082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b7f4e6f206d6f7265206c6566742100000000000000000000000000000000000000600082015250565b6000613a75600d83612d55565b9150613a8082613a3f565b602082019050919050565b60006020820190508181036000830152613aa481613a68565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d6974000000600082015250565b6000613ae1601d83612d55565b9150613aec82613aab565b602082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b6000613b73603583612d55565b9150613b7e82613b17565b604082019050919050565b60006020820190508181036000830152613ba281613b66565b9050919050565b7f4d7573742073656e64206d6f7265206574682100000000000000000000000000600082015250565b6000613bdf601383612d55565b9150613bea82613ba9565b602082019050919050565b60006020820190508181036000830152613c0e81613bd2565b9050919050565b600081905092915050565b60008154613c2d816133ea565b613c378186613c15565b94506001821660008114613c525760018114613c6757613c9a565b60ff1983168652811515820286019350613c9a565b613c7085613673565b60005b83811015613c9257815481890152600182019150602081019050613c73565b838801955050505b50505092915050565b6000613cae82612d4a565b613cb88185613c15565b9350613cc8818560208601612d66565b80840191505092915050565b6000613ce08285613c20565b9150613cec8284613ca3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d54602683612d55565b9150613d5f82613cf8565b604082019050919050565b60006020820190508181036000830152613d8381613d47565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc0602083612d55565b9150613dcb82613d8a565b602082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b6000613e0182612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e3357613e3261341b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e7882612dfc565b9150613e8383612dfc565b925082613e9357613e92613e3e565b5b828204905092915050565b6000613ea982612dfc565b9150613eb483612dfc565b925082613ec457613ec3613e3e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613f2582613efe565b613f2f8185613f09565b9350613f3f818560208601612d66565b613f4881612d90565b840191505092915050565b6000608082019050613f686000830187612e91565b613f756020830186612e91565b613f826040830185612f27565b8181036060830152613f948184613f1a565b905095945050505050565b600081519050613fae81612cf1565b92915050565b600060208284031215613fca57613fc9612cbb565b5b6000613fd884828501613f9f565b9150509291505056fea2646970667358221220bde4f8d3c3b6d296bcc8df99f4ea9e4e957b82b50217b6ad4bbea451f19307bf64736f6c63430008120033

Deployed Bytecode Sourcemap

34032:4626:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34298:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14527:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14779:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18355:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17939:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34490:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12890:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34589:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34161:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37660:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36518:191;;;;;;;;;;;;;:::i;:::-;;37853:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33903:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34232:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36979:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34127:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34452:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15427:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13355:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;885:103;;;;;;;;;;;;;:::i;:::-;;36717:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37099:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;650:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14887:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35312:1082;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37321:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18581:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36400:110;;;;;;;;;;;;;:::i;:::-;;34209:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38054:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34378:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37554:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38312:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34418:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34340:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34268:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34980:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36874:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18823:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;998:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37439:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37213:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34298:39;;;;;;;;;;;;;:::o;14527:244::-;14612:4;14666:10;14651:25;;:11;:25;;;;:68;;;;14709:10;14694:25;;:11;:25;;;;14651:68;:111;;;;14752:10;14737:25;;:11;:25;;;;14651:111;14631:131;;14527:244;;;:::o;14779:100::-;14833:13;14866:5;14859:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:100;:::o;18355:218::-;18431:7;18456:16;18464:7;18456;:16::i;:::-;18451:64;;18481:34;;;;;;;;;;;;;;18451:64;18535:15;:24;18551:7;18535:24;;;;;;;;;;;:30;;;;;;;;;;;;18528:37;;18355:218;;;:::o;17939:408::-;18028:13;18044:16;18052:7;18044;:16::i;:::-;18028:32;;18100:5;18077:28;;:19;:17;:19::i;:::-;:28;;;18073:175;;18125:44;18142:5;18149:19;:17;:19::i;:::-;18125:16;:44::i;:::-;18120:128;;18197:35;;;;;;;;;;;;;;18120:128;18073:175;18293:2;18260:15;:24;18276:7;18260:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18331:7;18327:2;18311:28;;18320:5;18311:28;;;;;;;;;;;;18017:330;17939:408;;:::o;34490:38::-;;;;:::o;12890:180::-;12951:7;13036:15;:13;:15::i;:::-;13021:12;;13005:13;;:28;:46;12998:53;;12890:180;:::o;34589:254::-;609:13;:11;:13::i;:::-;34720:15:::1;;34708:8;34692:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;34670:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;34806:29;34816:8;34826;34806:9;:29::i;:::-;34589:254:::0;;:::o;34161:45::-;;;;;;;;;;;;;;;;;:::o;37660:185::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;37800:37:::1;37819:4;37825:2;37829:7;37800:18;:37::i;:::-;37660:185:::0;;;:::o;36518:191::-;609:13;:11;:13::i;:::-;1559:1:::1;1717:7;;:19:::0;1709:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1;1785:7;:18;;;;36587:12:::2;36605:10;:15;;36628:21;36605:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36586:68;;;36673:7;36665:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36575:134;1515:1:::1;1830:7;:22;;;;36518:191::o:0;37853:193::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;37997:41:::1;38020:4;38026:2;38030:7;37997:22;:41::i;:::-;37853:193:::0;;;:::o;33903:94::-;33969:20;33975:7;33984:4;33969:5;:20::i;:::-;33903:94;:::o;34232:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36979:112::-;609:13;:11;:13::i;:::-;37071:12:::1;37056;:27;;;;;;:::i;:::-;;36979:112:::0;:::o;34127:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34452:35::-;;;;:::o;15427:152::-;15499:7;15542:27;15561:7;15542:18;:27::i;:::-;15519:52;;15427:152;;;:::o;13355:233::-;13427:7;13468:1;13451:19;;:5;:19;;;13447:60;;13479:28;;;;;;;;;;;;;;13447:60;11163:13;13525:18;:25;13544:5;13525:25;;;;;;;;;;;;;;;;:55;13518:62;;13355:233;;;:::o;885:103::-;609:13;:11;:13::i;:::-;950:30:::1;977:1;950:18;:30::i;:::-;885:103::o:0;36717:149::-;609:13;:11;:13::i;:::-;36819:8:::1;36808;:19;;;;;;:::i;:::-;;36849:9;36838:8;;:20;;;;;;;;;;;;;;;;;;36717:149:::0;;:::o;37099:106::-;609:13;:11;:13::i;:::-;37193:4:::1;37175:15;:22;;;;37099:106:::0;:::o;650:87::-;696:7;723:6;;;;;;;;;;;716:13;;650:87;:::o;14887:104::-;14943:13;14976:7;14969:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14887:104;:::o;35312:1082::-;34907:10;34894:23;;:9;:23;;;34886:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1:::1;1717:7;;:19:::0;1709:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1;1785:7;:18;;;;35437:10:::2;35458:9:::0;35495:13:::2;:25;35509:10;35495:25;;;;;;;;;;;;;;;;35470:22;;:50;;;;:::i;:::-;35458:62;;35547:4;35535:8;:16;35531:285;;35603:4;35592:8;:15;;;;:::i;:::-;35577:10;;35576:32;;;;:::i;:::-;35568:40;;35679:4;35651:13;:25;35665:10;35651:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;35623:13;:25;35637:10;35623:25;;;;;;;;;;;;;;;:60;;;;35531:285;;;35724:1;35716:9;;35796:8;35768:13;:25;35782:10;35768:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;35740:13;:25;35754:10;35740:25;;;;;;;;;;;;;;;:64;;;;35531:285;35836:19;;;;;;;;;;;35828:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35926:15;;35914:8;35898:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;35890:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36016:17;;36004:8;35980:21;35990:10;35980:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;35972:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36100:14;;36088:8;:26;;36080:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;36204:5;36191:9;:18;;36183:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36246:31;36256:10;36268:8;36246:9;:31::i;:::-;36306:5;36294:9;:17;36290:97;;;36336:10;36328:28;;:47;36369:5;36357:9;:17;;;;:::i;:::-;36328:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;36290:97;35426:968;;1515:1:::1;1830:7;:22;;;;35312:1082:::0;:::o;37321:110::-;609:13;:11;:13::i;:::-;37419:4:::1;37394:22;:29;;;;37321:110:::0;:::o;18581:234::-;18728:8;18676:18;:39;18695:19;:17;:19::i;:::-;18676:39;;;;;;;;;;;;;;;:49;18716:8;18676:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;18788:8;18752:55;;18767:19;:17;:19::i;:::-;18752:55;;;18798:8;18752:55;;;;;;:::i;:::-;;;;;;;;18581:234;;:::o;36400:110::-;609:13;:11;:13::i;:::-;36483:19:::1;;;;;;;;;;;36482:20;36460:19;;:42;;;;;;;;;;;;;;;;;;36400:110::o:0;34209:20::-;;;;;;;;;;;;;:::o;38054:250::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;38249:47:::1;38272:4;38278:2;38282:7;38291:4;38249:22;:47::i;:::-;38054:250:::0;;;;:::o;34378:36::-;;;;:::o;37554:98::-;609:13;:11;:13::i;:::-;37640:4:::1;37623:14;:21;;;;37554:98:::0;:::o;38312:341::-;38434:13;38469:8;;;;;;;;;;;38465:181;;;38542:8;38552:26;38569:8;38552:16;:26::i;:::-;38525:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38494:86;;;;38465:181;38620:14;38613:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38312:341;;;;:::o;34418:31::-;;;;:::o;34340:34::-;;;;:::o;34268:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34980:324::-;35033:4;35049:10;35070:9;35107:13;:25;35121:10;35107:25;;;;;;;;;;;;;;;;35082:22;;:50;;;;:::i;:::-;35070:62;;35159:4;35147:8;:16;35143:131;;35215:4;35204:8;:15;;;;:::i;:::-;35189:10;;35188:32;;;;:::i;:::-;35180:40;;35143:131;;;35261:1;35253:9;;35143:131;35291:5;35284:12;;;;34980:324;;;:::o;36874:97::-;36918:13;36951:12;36944:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36874:97;:::o;18823:164::-;18920:4;18944:18;:25;18963:5;18944:25;;;;;;;;;;;;;;;:35;18970:8;18944:35;;;;;;;;;;;;;;;;;;;;;;;;;18937:42;;18823:164;;;;:::o;998:201::-;609:13;:11;:13::i;:::-;1107:1:::1;1087:22;;:8;:22;;::::0;1079:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1163:28;1182:8;1163:18;:28::i;:::-;998:201:::0;:::o;37439:107::-;609:13;:11;:13::i;:::-;37534:4:::1;37514:17;:24;;;;37439:107:::0;:::o;37213:100::-;609:13;:11;:13::i;:::-;37296:9:::1;37283:10;:22;;;;37213:100:::0;:::o;18995:282::-;19060:4;19116:7;19097:15;:13;:15::i;:::-;:26;;:66;;;;;19150:13;;19140:7;:23;19097:66;:153;;;;;19249:1;11537:8;19201:17;:26;19219:7;19201:26;;;;;;;;;;;;:44;:49;19097:153;19077:173;;18995:282;;;:::o;29375:105::-;29435:7;29462:10;29455:17;;29375:105;:::o;12679:92::-;12735:7;12679:92;:::o;745:132::-;820:12;:10;:12::i;:::-;809:23;;:7;:5;:7::i;:::-;:23;;;801:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;745:132::o;26528:112::-;26605:27;26615:2;26619:8;26605:27;;;;;;;;;;;;:9;:27::i;:::-;26528:112;;:::o;20090:1651::-;20232:27;20262;20281:7;20262:18;:27::i;:::-;20232:57;;20347:4;20306:45;;20322:19;20306:45;;;20302:86;;20360:28;;;;;;;;;;;;;;20302:86;20402:27;20431:23;20458:35;20485:7;20458:26;:35::i;:::-;20401:92;;;;20511:68;20536:15;20553:4;20559:19;:17;:19::i;:::-;20511:24;:68::i;:::-;20506:180;;20599:43;20616:4;20622:19;:17;:19::i;:::-;20599:16;:43::i;:::-;20594:92;;20651:35;;;;;;;;;;;;;;20594:92;20506:180;20717:1;20703:16;;:2;:16;;;20699:52;;20728:23;;;;;;;;;;;;;;20699:52;20764:43;20786:4;20792:2;20796:7;20805:1;20764:21;:43::i;:::-;20847:15;20844:85;;;20912:1;20891:19;20884:30;20844:85;20981:18;:24;21000:4;20981:24;;;;;;;;;;;;;;;;20979:26;;;;;;;;;;;;21023:18;:22;21042:2;21023:22;;;;;;;;;;;;;;;;21021:24;;;;;;;;;;;21092:146;21129:2;21178:45;21193:4;21199:2;21203:19;21178:14;:45::i;:::-;11671:8;21150:73;21092:18;:146::i;:::-;21063:17;:26;21081:7;21063:26;;;;;;;;;;;:175;;;;21310:1;11671:8;21259:19;:47;:52;21255:370;;21332:19;21364:1;21354:7;:11;21332:33;;21424:1;21390:17;:30;21408:11;21390:30;;;;;;;;;;;;:35;21386:224;;21471:13;;21456:11;:28;21452:139;;21548:19;21515:17;:30;21533:11;21515:30;;;;;;;;;;;:52;;;;21452:139;21386:224;21313:312;21255:370;21672:7;21668:2;21653:27;;21662:4;21653:27;;;;;;;;;;;;21691:42;21712:4;21718:2;21722:7;21731:1;21691:20;:42::i;:::-;20221:1520;;;20090:1651;;;:::o;21749:193::-;21895:39;21912:4;21918:2;21922:7;21895:39;;;;;;;;;;;;:16;:39::i;:::-;21749:193;;;:::o;26745:1679::-;26825:27;26855;26874:7;26855:18;:27::i;:::-;26825:57;;26895:12;26926:19;26895:52;;26961:27;26990:23;27017:35;27044:7;27017:26;:35::i;:::-;26960:92;;;;27069:13;27065:244;;;27118:68;27143:15;27160:4;27166:19;:17;:19::i;:::-;27118:24;:68::i;:::-;27113:184;;27210:43;27227:4;27233:19;:17;:19::i;:::-;27210:16;:43::i;:::-;27205:92;;27262:35;;;;;;;;;;;;;;27205:92;27113:184;27065:244;27321:51;27343:4;27357:1;27361:7;27370:1;27321:21;:51::i;:::-;27412:15;27409:101;;;27493:1;27472:19;27465:30;27409:101;27619:1;11294:3;27589:1;:26;;27588:32;27560:18;:24;27579:4;27560:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;27666:176;27703:4;27774:53;27789:4;27803:1;27807:19;27774:14;:53::i;:::-;11671:8;11537;27727:43;27726:101;27666:18;:176::i;:::-;27637:17;:26;27655:7;27637:26;;;;;;;;;;;:205;;;;27914:1;11671:8;27863:19;:47;:52;27859:370;;27936:19;27968:1;27958:7;:11;27936:33;;28028:1;27994:17;:30;28012:11;27994:30;;;;;;;;;;;;:35;27990:224;;28075:13;;28060:11;:28;28056:139;;28152:19;28119:17;:30;28137:11;28119:30;;;;;;;;;;;:52;;;;28056:139;27990:224;27917:312;27859:370;28284:7;28280:1;28257:35;;28266:4;28257:35;;;;;;;;;;;;28303:50;28324:4;28338:1;28342:7;28351:1;28303:20;:50::i;:::-;28391:12;;:14;;;;;;;;;;;;;26814:1610;;;;26745:1679;;:::o;16134:633::-;16201:7;16221:12;16236:7;16221:22;;16304:4;16285:15;:13;:15::i;:::-;:23;16281:419;;16338:13;;16331:4;:20;16327:373;;;16376:14;16393:17;:23;16411:4;16393:23;;;;;;;;;;;;16376:40;;16473:1;11537:8;16445:6;:24;:29;16441:240;;16505:113;16522:1;16512:6;:11;16505:113;;16565:17;:25;16583:6;;;;;;;16565:25;;;;;;;;;;;;16556:34;;16505:113;;;16651:6;16644:13;;;;;;16441:240;16353:347;16327:373;16281:419;16728:31;;;;;;;;;;;;;;16134:633;;;;:::o;1207:191::-;1281:16;1300:6;;;;;;;;;;;1281:25;;1326:8;1317:6;;:17;;;;;;;;;;;;;;;;;;1381:8;1350:40;;1371:8;1350:40;;;;;;;;;;;;1270:128;1207:191;:::o;21950:407::-;22125:31;22138:4;22144:2;22148:7;22125:12;:31::i;:::-;22189:1;22171:2;:14;;;:19;22167:183;;22210:56;22241:4;22247:2;22251:7;22260:5;22210:30;:56::i;:::-;22205:145;;22294:40;;;;;;;;;;;;;;22205:145;22167:183;21950:407;;;;:::o;2034:534::-;2090:13;2131:1;2122:5;:10;2118:53;;2149:10;;;;;;;;;;;;;;;;;;;;;2118:53;2181:12;2196:5;2181:20;;2212:14;2237:78;2252:1;2244:4;:9;2237:78;;2270:8;;;;;:::i;:::-;;;;2301:2;2293:10;;;;;:::i;:::-;;;2237:78;;;2325:19;2357:6;2347:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2325:39;;2375:154;2391:1;2382:5;:10;2375:154;;2419:1;2409:11;;;;;:::i;:::-;;;2486:2;2478:5;:10;;;;:::i;:::-;2465:2;:24;;;;:::i;:::-;2452:39;;2435:6;2442;2435:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2515:2;2506:11;;;;;:::i;:::-;;;2375:154;;;2553:6;2539:21;;;;;2034:534;;;;:::o;98:98::-;151:7;178:10;171:17;;98:98;:::o;25831:689::-;25962:19;25968:2;25972:8;25962:5;:19::i;:::-;26041:1;26023:2;:14;;;:19;26019:483;;26063:11;26077:13;;26063:27;;26109:13;26131:8;26125:3;:14;26109:30;;26158:233;26189:62;26228:1;26232:2;26236:7;;;;;;26245:5;26189:30;:62::i;:::-;26184:167;;26287:40;;;;;;;;;;;;;;26184:167;26386:3;26378:5;:11;26158:233;;26473:3;26456:13;;:20;26452:34;;26478:8;;;26452:34;26044:458;;26019:483;25831:689;;;:::o;19690:392::-;19792:27;19821:23;19862:38;19903:15;:24;19919:7;19903:24;;;;;;;;;;;19862:65;;19987:18;19964:41;;20044:19;20038:26;20019:45;;19949:126;19690:392;;;:::o;19285:397::-;19434:11;19504:16;19497:5;19493:28;19484:37;;19565:16;19554:9;19550:32;19537:45;;19647:15;19636:9;19633:30;19625:5;19614:9;19611:20;19608:56;19598:66;;19285:397;;;;;:::o;22365:159::-;;;;;:::o;29056:311::-;29191:7;29211:16;11734:3;29237:19;:41;;29211:68;;11734:3;29305:31;29316:4;29322:2;29326:9;29305:10;:31::i;:::-;29297:40;;:62;;29290:69;;;29056:311;;;;;:::o;17149:450::-;17229:14;17397:16;17390:5;17386:28;17377:37;;17574:5;17560:11;17535:23;17531:41;17528:52;17521:5;17518:63;17508:73;;17149:450;;;;:::o;22532:158::-;;;;;:::o;22698:716::-;22861:4;22907:2;22882:45;;;22928:19;:17;:19::i;:::-;22949:4;22955:7;22964:5;22882:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22878:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23182:1;23165:6;:13;:18;23161:235;;23211:40;;;;;;;;;;;;;;23161:235;23354:6;23348:13;23339:6;23335:2;23331:15;23324:38;22878:529;23051:54;;;23041:64;;;:6;:64;;;;23034:71;;;22698:716;;;;;;:::o;23422:1442::-;23495:20;23518:13;;23495:36;;23558:1;23546:8;:13;23542:44;;23568:18;;;;;;;;;;;;;;23542:44;23599:61;23629:1;23633:2;23637:12;23651:8;23599:21;:61::i;:::-;23769:1;11234:2;23739:1;:26;;23738:32;23726:8;:45;23700:18;:22;23719:2;23700:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;23822:139;23859:2;23913:33;23936:1;23940:2;23944:1;23913:14;:33::i;:::-;23880:30;23901:8;23880:20;:30::i;:::-;:66;23822:18;:139::i;:::-;23788:17;:31;23806:12;23788:31;;;;;;;;;;;:173;;;;23978:16;24009:11;24038:8;24023:12;:23;24009:37;;24113:16;24109:2;24105:25;24093:37;;24333:12;24301:8;24276:1;24227:25;24202:1;24177;24150:215;24445:1;24431:12;24427:20;24385:279;24486:3;24477:7;24474:16;24385:279;;24637:7;24627:8;24624:1;24597:25;24594:1;24591;24586:59;24539:1;24530:7;24526:15;24515:26;;24385:279;;;24389:77;24709:1;24697:8;:13;24693:45;;24719:19;;;;;;;;;;;;;;24693:45;24771:3;24755:13;:19;;;;23673:1113;;24796:60;24825:1;24829:2;24833:12;24847:8;24796:20;:60::i;:::-;23484:1380;23422:1442;;:::o;28901:147::-;29038:6;28901:147;;;;;:::o;17607:324::-;17677:14;17910:1;17900:8;17897:15;17871:24;17867:46;17857:56;;17607:324;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:474::-;5310:6;5318;5367:2;5355:9;5346:7;5342:23;5338:32;5335:119;;;5373:79;;:::i;:::-;5335:119;5493:1;5518:53;5563:7;5554:6;5543:9;5539:22;5518:53;:::i;:::-;5508:63;;5464:117;5620:2;5646:53;5691:7;5682:6;5671:9;5667:22;5646:53;:::i;:::-;5636:63;;5591:118;5242:474;;;;;:::o;5722:329::-;5781:6;5830:2;5818:9;5809:7;5805:23;5801:32;5798:119;;;5836:79;;:::i;:::-;5798:119;5956:1;5981:53;6026:7;6017:6;6006:9;6002:22;5981:53;:::i;:::-;5971:63;;5927:117;5722:329;;;;:::o;6057:619::-;6134:6;6142;6150;6199:2;6187:9;6178:7;6174:23;6170:32;6167:119;;;6205:79;;:::i;:::-;6167:119;6325:1;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6296:117;6452:2;6478:53;6523:7;6514:6;6503:9;6499:22;6478:53;:::i;:::-;6468:63;;6423:118;6580:2;6606:53;6651:7;6642:6;6631:9;6627:22;6606:53;:::i;:::-;6596:63;;6551:118;6057:619;;;;;:::o;6682:117::-;6791:1;6788;6781:12;6805:117;6914:1;6911;6904:12;6928:180;6976:77;6973:1;6966:88;7073:4;7070:1;7063:15;7097:4;7094:1;7087:15;7114:281;7197:27;7219:4;7197:27;:::i;:::-;7189:6;7185:40;7327:6;7315:10;7312:22;7291:18;7279:10;7276:34;7273:62;7270:88;;;7338:18;;:::i;:::-;7270:88;7378:10;7374:2;7367:22;7157:238;7114:281;;:::o;7401:129::-;7435:6;7462:20;;:::i;:::-;7452:30;;7491:33;7519:4;7511:6;7491:33;:::i;:::-;7401:129;;;:::o;7536:308::-;7598:4;7688:18;7680:6;7677:30;7674:56;;;7710:18;;:::i;:::-;7674:56;7748:29;7770:6;7748:29;:::i;:::-;7740:37;;7832:4;7826;7822:15;7814:23;;7536:308;;;:::o;7850:146::-;7947:6;7942:3;7937;7924:30;7988:1;7979:6;7974:3;7970:16;7963:27;7850:146;;;:::o;8002:425::-;8080:5;8105:66;8121:49;8163:6;8121:49;:::i;:::-;8105:66;:::i;:::-;8096:75;;8194:6;8187:5;8180:21;8232:4;8225:5;8221:16;8270:3;8261:6;8256:3;8252:16;8249:25;8246:112;;;8277:79;;:::i;:::-;8246:112;8367:54;8414:6;8409:3;8404;8367:54;:::i;:::-;8086:341;8002:425;;;;;:::o;8447:340::-;8503:5;8552:3;8545:4;8537:6;8533:17;8529:27;8519:122;;8560:79;;:::i;:::-;8519:122;8677:6;8664:20;8702:79;8777:3;8769:6;8762:4;8754:6;8750:17;8702:79;:::i;:::-;8693:88;;8509:278;8447:340;;;;:::o;8793:509::-;8862:6;8911:2;8899:9;8890:7;8886:23;8882:32;8879:119;;;8917:79;;:::i;:::-;8879:119;9065:1;9054:9;9050:17;9037:31;9095:18;9087:6;9084:30;9081:117;;;9117:79;;:::i;:::-;9081:117;9222:63;9277:7;9268:6;9257:9;9253:22;9222:63;:::i;:::-;9212:73;;9008:287;8793:509;;;;:::o;9308:116::-;9378:21;9393:5;9378:21;:::i;:::-;9371:5;9368:32;9358:60;;9414:1;9411;9404:12;9358:60;9308:116;:::o;9430:133::-;9473:5;9511:6;9498:20;9489:29;;9527:30;9551:5;9527:30;:::i;:::-;9430:133;;;;:::o;9569:648::-;9644:6;9652;9701:2;9689:9;9680:7;9676:23;9672:32;9669:119;;;9707:79;;:::i;:::-;9669:119;9827:1;9852:50;9894:7;9885:6;9874:9;9870:22;9852:50;:::i;:::-;9842:60;;9798:114;9979:2;9968:9;9964:18;9951:32;10010:18;10002:6;9999:30;9996:117;;;10032:79;;:::i;:::-;9996:117;10137:63;10192:7;10183:6;10172:9;10168:22;10137:63;:::i;:::-;10127:73;;9922:288;9569:648;;;;;:::o;10223:468::-;10288:6;10296;10345:2;10333:9;10324:7;10320:23;10316:32;10313:119;;;10351:79;;:::i;:::-;10313:119;10471:1;10496:53;10541:7;10532:6;10521:9;10517:22;10496:53;:::i;:::-;10486:63;;10442:117;10598:2;10624:50;10666:7;10657:6;10646:9;10642:22;10624:50;:::i;:::-;10614:60;;10569:115;10223:468;;;;;:::o;10697:307::-;10758:4;10848:18;10840:6;10837:30;10834:56;;;10870:18;;:::i;:::-;10834:56;10908:29;10930:6;10908:29;:::i;:::-;10900:37;;10992:4;10986;10982:15;10974:23;;10697:307;;;:::o;11010:423::-;11087:5;11112:65;11128:48;11169:6;11128:48;:::i;:::-;11112:65;:::i;:::-;11103:74;;11200:6;11193:5;11186:21;11238:4;11231:5;11227:16;11276:3;11267:6;11262:3;11258:16;11255:25;11252:112;;;11283:79;;:::i;:::-;11252:112;11373:54;11420:6;11415:3;11410;11373:54;:::i;:::-;11093:340;11010:423;;;;;:::o;11452:338::-;11507:5;11556:3;11549:4;11541:6;11537:17;11533:27;11523:122;;11564:79;;:::i;:::-;11523:122;11681:6;11668:20;11706:78;11780:3;11772:6;11765:4;11757:6;11753:17;11706:78;:::i;:::-;11697:87;;11513:277;11452:338;;;;:::o;11796:943::-;11891:6;11899;11907;11915;11964:3;11952:9;11943:7;11939:23;11935:33;11932:120;;;11971:79;;:::i;:::-;11932:120;12091:1;12116:53;12161:7;12152:6;12141:9;12137:22;12116:53;:::i;:::-;12106:63;;12062:117;12218:2;12244:53;12289:7;12280:6;12269:9;12265:22;12244:53;:::i;:::-;12234:63;;12189:118;12346:2;12372:53;12417:7;12408:6;12397:9;12393:22;12372:53;:::i;:::-;12362:63;;12317:118;12502:2;12491:9;12487:18;12474:32;12533:18;12525:6;12522:30;12519:117;;;12555:79;;:::i;:::-;12519:117;12660:62;12714:7;12705:6;12694:9;12690:22;12660:62;:::i;:::-;12650:72;;12445:287;11796:943;;;;;;;:::o;12745:474::-;12813:6;12821;12870:2;12858:9;12849:7;12845:23;12841:32;12838:119;;;12876:79;;:::i;:::-;12838:119;12996:1;13021:53;13066:7;13057:6;13046:9;13042:22;13021:53;:::i;:::-;13011:63;;12967:117;13123:2;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13094:118;12745:474;;;;;:::o;13225:180::-;13273:77;13270:1;13263:88;13370:4;13367:1;13360:15;13394:4;13391:1;13384:15;13411:320;13455:6;13492:1;13486:4;13482:12;13472:22;;13539:1;13533:4;13529:12;13560:18;13550:81;;13616:4;13608:6;13604:17;13594:27;;13550:81;13678:2;13670:6;13667:14;13647:18;13644:38;13641:84;;13697:18;;:::i;:::-;13641:84;13462:269;13411:320;;;:::o;13737:180::-;13785:77;13782:1;13775:88;13882:4;13879:1;13872:15;13906:4;13903:1;13896:15;13923:191;13963:3;13982:20;14000:1;13982:20;:::i;:::-;13977:25;;14016:20;14034:1;14016:20;:::i;:::-;14011:25;;14059:1;14056;14052:9;14045:16;;14080:3;14077:1;14074:10;14071:36;;;14087:18;;:::i;:::-;14071:36;13923:191;;;;:::o;14120:172::-;14260:24;14256:1;14248:6;14244:14;14237:48;14120:172;:::o;14298:366::-;14440:3;14461:67;14525:2;14520:3;14461:67;:::i;:::-;14454:74;;14537:93;14626:3;14537:93;:::i;:::-;14655:2;14650:3;14646:12;14639:19;;14298:366;;;:::o;14670:419::-;14836:4;14874:2;14863:9;14859:18;14851:26;;14923:9;14917:4;14913:20;14909:1;14898:9;14894:17;14887:47;14951:131;15077:4;14951:131;:::i;:::-;14943:139;;14670:419;;;:::o;15095:332::-;15216:4;15254:2;15243:9;15239:18;15231:26;;15267:71;15335:1;15324:9;15320:17;15311:6;15267:71;:::i;:::-;15348:72;15416:2;15405:9;15401:18;15392:6;15348:72;:::i;:::-;15095:332;;;;;:::o;15433:137::-;15487:5;15518:6;15512:13;15503:22;;15534:30;15558:5;15534:30;:::i;:::-;15433:137;;;;:::o;15576:345::-;15643:6;15692:2;15680:9;15671:7;15667:23;15663:32;15660:119;;;15698:79;;:::i;:::-;15660:119;15818:1;15843:61;15896:7;15887:6;15876:9;15872:22;15843:61;:::i;:::-;15833:71;;15789:125;15576:345;;;;:::o;15927:181::-;16067:33;16063:1;16055:6;16051:14;16044:57;15927:181;:::o;16114:366::-;16256:3;16277:67;16341:2;16336:3;16277:67;:::i;:::-;16270:74;;16353:93;16442:3;16353:93;:::i;:::-;16471:2;16466:3;16462:12;16455:19;;16114:366;;;:::o;16486:419::-;16652:4;16690:2;16679:9;16675:18;16667:26;;16739:9;16733:4;16729:20;16725:1;16714:9;16710:17;16703:47;16767:131;16893:4;16767:131;:::i;:::-;16759:139;;16486:419;;;:::o;16911:147::-;17012:11;17049:3;17034:18;;16911:147;;;;:::o;17064:114::-;;:::o;17184:398::-;17343:3;17364:83;17445:1;17440:3;17364:83;:::i;:::-;17357:90;;17456:93;17545:3;17456:93;:::i;:::-;17574:1;17569:3;17565:11;17558:18;;17184:398;;;:::o;17588:379::-;17772:3;17794:147;17937:3;17794:147;:::i;:::-;17787:154;;17958:3;17951:10;;17588:379;;;:::o;17973:166::-;18113:18;18109:1;18101:6;18097:14;18090:42;17973:166;:::o;18145:366::-;18287:3;18308:67;18372:2;18367:3;18308:67;:::i;:::-;18301:74;;18384:93;18473:3;18384:93;:::i;:::-;18502:2;18497:3;18493:12;18486:19;;18145:366;;;:::o;18517:419::-;18683:4;18721:2;18710:9;18706:18;18698:26;;18770:9;18764:4;18760:20;18756:1;18745:9;18741:17;18734:47;18798:131;18924:4;18798:131;:::i;:::-;18790:139;;18517:419;;;:::o;18942:141::-;18991:4;19014:3;19006:11;;19037:3;19034:1;19027:14;19071:4;19068:1;19058:18;19050:26;;18942:141;;;:::o;19089:93::-;19126:6;19173:2;19168;19161:5;19157:14;19153:23;19143:33;;19089:93;;;:::o;19188:107::-;19232:8;19282:5;19276:4;19272:16;19251:37;;19188:107;;;;:::o;19301:393::-;19370:6;19420:1;19408:10;19404:18;19443:97;19473:66;19462:9;19443:97;:::i;:::-;19561:39;19591:8;19580:9;19561:39;:::i;:::-;19549:51;;19633:4;19629:9;19622:5;19618:21;19609:30;;19682:4;19672:8;19668:19;19661:5;19658:30;19648:40;;19377:317;;19301:393;;;;;:::o;19700:60::-;19728:3;19749:5;19742:12;;19700:60;;;:::o;19766:142::-;19816:9;19849:53;19867:34;19876:24;19894:5;19876:24;:::i;:::-;19867:34;:::i;:::-;19849:53;:::i;:::-;19836:66;;19766:142;;;:::o;19914:75::-;19957:3;19978:5;19971:12;;19914:75;;;:::o;19995:269::-;20105:39;20136:7;20105:39;:::i;:::-;20166:91;20215:41;20239:16;20215:41;:::i;:::-;20207:6;20200:4;20194:11;20166:91;:::i;:::-;20160:4;20153:105;20071:193;19995:269;;;:::o;20270:73::-;20315:3;20270:73;:::o;20349:189::-;20426:32;;:::i;:::-;20467:65;20525:6;20517;20511:4;20467:65;:::i;:::-;20402:136;20349:189;;:::o;20544:186::-;20604:120;20621:3;20614:5;20611:14;20604:120;;;20675:39;20712:1;20705:5;20675:39;:::i;:::-;20648:1;20641:5;20637:13;20628:22;;20604:120;;;20544:186;;:::o;20736:543::-;20837:2;20832:3;20829:11;20826:446;;;20871:38;20903:5;20871:38;:::i;:::-;20955:29;20973:10;20955:29;:::i;:::-;20945:8;20941:44;21138:2;21126:10;21123:18;21120:49;;;21159:8;21144:23;;21120:49;21182:80;21238:22;21256:3;21238:22;:::i;:::-;21228:8;21224:37;21211:11;21182:80;:::i;:::-;20841:431;;20826:446;20736:543;;;:::o;21285:117::-;21339:8;21389:5;21383:4;21379:16;21358:37;;21285:117;;;;:::o;21408:169::-;21452:6;21485:51;21533:1;21529:6;21521:5;21518:1;21514:13;21485:51;:::i;:::-;21481:56;21566:4;21560;21556:15;21546:25;;21459:118;21408:169;;;;:::o;21582:295::-;21658:4;21804:29;21829:3;21823:4;21804:29;:::i;:::-;21796:37;;21866:3;21863:1;21859:11;21853:4;21850:21;21842:29;;21582:295;;;;:::o;21882:1395::-;21999:37;22032:3;21999:37;:::i;:::-;22101:18;22093:6;22090:30;22087:56;;;22123:18;;:::i;:::-;22087:56;22167:38;22199:4;22193:11;22167:38;:::i;:::-;22252:67;22312:6;22304;22298:4;22252:67;:::i;:::-;22346:1;22370:4;22357:17;;22402:2;22394:6;22391:14;22419:1;22414:618;;;;23076:1;23093:6;23090:77;;;23142:9;23137:3;23133:19;23127:26;23118:35;;23090:77;23193:67;23253:6;23246:5;23193:67;:::i;:::-;23187:4;23180:81;23049:222;22384:887;;22414:618;22466:4;22462:9;22454:6;22450:22;22500:37;22532:4;22500:37;:::i;:::-;22559:1;22573:208;22587:7;22584:1;22581:14;22573:208;;;22666:9;22661:3;22657:19;22651:26;22643:6;22636:42;22717:1;22709:6;22705:14;22695:24;;22764:2;22753:9;22749:18;22736:31;;22610:4;22607:1;22603:12;22598:17;;22573:208;;;22809:6;22800:7;22797:19;22794:179;;;22867:9;22862:3;22858:19;22852:26;22910:48;22952:4;22944:6;22940:17;22929:9;22910:48;:::i;:::-;22902:6;22895:64;22817:156;22794:179;23019:1;23015;23007:6;23003:14;22999:22;22993:4;22986:36;22421:611;;;22384:887;;21974:1303;;;21882:1395;;:::o;23283:180::-;23423:32;23419:1;23411:6;23407:14;23400:56;23283:180;:::o;23469:366::-;23611:3;23632:67;23696:2;23691:3;23632:67;:::i;:::-;23625:74;;23708:93;23797:3;23708:93;:::i;:::-;23826:2;23821:3;23817:12;23810:19;;23469:366;;;:::o;23841:419::-;24007:4;24045:2;24034:9;24030:18;24022:26;;24094:9;24088:4;24084:20;24080:1;24069:9;24065:17;24058:47;24122:131;24248:4;24122:131;:::i;:::-;24114:139;;23841:419;;;:::o;24266:194::-;24306:4;24326:20;24344:1;24326:20;:::i;:::-;24321:25;;24360:20;24378:1;24360:20;:::i;:::-;24355:25;;24404:1;24401;24397:9;24389:17;;24428:1;24422:4;24419:11;24416:37;;;24433:18;;:::i;:::-;24416:37;24266:194;;;;:::o;24466:410::-;24506:7;24529:20;24547:1;24529:20;:::i;:::-;24524:25;;24563:20;24581:1;24563:20;:::i;:::-;24558:25;;24618:1;24615;24611:9;24640:30;24658:11;24640:30;:::i;:::-;24629:41;;24819:1;24810:7;24806:15;24803:1;24800:22;24780:1;24773:9;24753:83;24730:139;;24849:18;;:::i;:::-;24730:139;24514:362;24466:410;;;;:::o;24882:169::-;25022:21;25018:1;25010:6;25006:14;24999:45;24882:169;:::o;25057:366::-;25199:3;25220:67;25284:2;25279:3;25220:67;:::i;:::-;25213:74;;25296:93;25385:3;25296:93;:::i;:::-;25414:2;25409:3;25405:12;25398:19;;25057:366;;;:::o;25429:419::-;25595:4;25633:2;25622:9;25618:18;25610:26;;25682:9;25676:4;25672:20;25668:1;25657:9;25653:17;25646:47;25710:131;25836:4;25710:131;:::i;:::-;25702:139;;25429:419;;;:::o;25854:163::-;25994:15;25990:1;25982:6;25978:14;25971:39;25854:163;:::o;26023:366::-;26165:3;26186:67;26250:2;26245:3;26186:67;:::i;:::-;26179:74;;26262:93;26351:3;26262:93;:::i;:::-;26380:2;26375:3;26371:12;26364:19;;26023:366;;;:::o;26395:419::-;26561:4;26599:2;26588:9;26584:18;26576:26;;26648:9;26642:4;26638:20;26634:1;26623:9;26619:17;26612:47;26676:131;26802:4;26676:131;:::i;:::-;26668:139;;26395:419;;;:::o;26820:179::-;26960:31;26956:1;26948:6;26944:14;26937:55;26820:179;:::o;27005:366::-;27147:3;27168:67;27232:2;27227:3;27168:67;:::i;:::-;27161:74;;27244:93;27333:3;27244:93;:::i;:::-;27362:2;27357:3;27353:12;27346:19;;27005:366;;;:::o;27377:419::-;27543:4;27581:2;27570:9;27566:18;27558:26;;27630:9;27624:4;27620:20;27616:1;27605:9;27601:17;27594:47;27658:131;27784:4;27658:131;:::i;:::-;27650:139;;27377:419;;;:::o;27802:240::-;27942:34;27938:1;27930:6;27926:14;27919:58;28011:23;28006:2;27998:6;27994:15;27987:48;27802:240;:::o;28048:366::-;28190:3;28211:67;28275:2;28270:3;28211:67;:::i;:::-;28204:74;;28287:93;28376:3;28287:93;:::i;:::-;28405:2;28400:3;28396:12;28389:19;;28048:366;;;:::o;28420:419::-;28586:4;28624:2;28613:9;28609:18;28601:26;;28673:9;28667:4;28663:20;28659:1;28648:9;28644:17;28637:47;28701:131;28827:4;28701:131;:::i;:::-;28693:139;;28420:419;;;:::o;28845:169::-;28985:21;28981:1;28973:6;28969:14;28962:45;28845:169;:::o;29020:366::-;29162:3;29183:67;29247:2;29242:3;29183:67;:::i;:::-;29176:74;;29259:93;29348:3;29259:93;:::i;:::-;29377:2;29372:3;29368:12;29361:19;;29020:366;;;:::o;29392:419::-;29558:4;29596:2;29585:9;29581:18;29573:26;;29645:9;29639:4;29635:20;29631:1;29620:9;29616:17;29609:47;29673:131;29799:4;29673:131;:::i;:::-;29665:139;;29392:419;;;:::o;29817:148::-;29919:11;29956:3;29941:18;;29817:148;;;;:::o;29995:874::-;30098:3;30135:5;30129:12;30164:36;30190:9;30164:36;:::i;:::-;30216:89;30298:6;30293:3;30216:89;:::i;:::-;30209:96;;30336:1;30325:9;30321:17;30352:1;30347:166;;;;30527:1;30522:341;;;;30314:549;;30347:166;30431:4;30427:9;30416;30412:25;30407:3;30400:38;30493:6;30486:14;30479:22;30471:6;30467:35;30462:3;30458:45;30451:52;;30347:166;;30522:341;30589:38;30621:5;30589:38;:::i;:::-;30649:1;30663:154;30677:6;30674:1;30671:13;30663:154;;;30751:7;30745:14;30741:1;30736:3;30732:11;30725:35;30801:1;30792:7;30788:15;30777:26;;30699:4;30696:1;30692:12;30687:17;;30663:154;;;30846:6;30841:3;30837:16;30830:23;;30529:334;;30314:549;;30102:767;;29995:874;;;;:::o;30875:390::-;30981:3;31009:39;31042:5;31009:39;:::i;:::-;31064:89;31146:6;31141:3;31064:89;:::i;:::-;31057:96;;31162:65;31220:6;31215:3;31208:4;31201:5;31197:16;31162:65;:::i;:::-;31252:6;31247:3;31243:16;31236:23;;30985:280;30875:390;;;;:::o;31271:429::-;31448:3;31470:92;31558:3;31549:6;31470:92;:::i;:::-;31463:99;;31579:95;31670:3;31661:6;31579:95;:::i;:::-;31572:102;;31691:3;31684:10;;31271:429;;;;;:::o;31706:225::-;31846:34;31842:1;31834:6;31830:14;31823:58;31915:8;31910:2;31902:6;31898:15;31891:33;31706:225;:::o;31937:366::-;32079:3;32100:67;32164:2;32159:3;32100:67;:::i;:::-;32093:74;;32176:93;32265:3;32176:93;:::i;:::-;32294:2;32289:3;32285:12;32278:19;;31937:366;;;:::o;32309:419::-;32475:4;32513:2;32502:9;32498:18;32490:26;;32562:9;32556:4;32552:20;32548:1;32537:9;32533:17;32526:47;32590:131;32716:4;32590:131;:::i;:::-;32582:139;;32309:419;;;:::o;32734:182::-;32874:34;32870:1;32862:6;32858:14;32851:58;32734:182;:::o;32922:366::-;33064:3;33085:67;33149:2;33144:3;33085:67;:::i;:::-;33078:74;;33161:93;33250:3;33161:93;:::i;:::-;33279:2;33274:3;33270:12;33263:19;;32922:366;;;:::o;33294:419::-;33460:4;33498:2;33487:9;33483:18;33475:26;;33547:9;33541:4;33537:20;33533:1;33522:9;33518:17;33511:47;33575:131;33701:4;33575:131;:::i;:::-;33567:139;;33294:419;;;:::o;33719:233::-;33758:3;33781:24;33799:5;33781:24;:::i;:::-;33772:33;;33827:66;33820:5;33817:77;33814:103;;33897:18;;:::i;:::-;33814:103;33944:1;33937:5;33933:13;33926:20;;33719:233;;;:::o;33958:180::-;34006:77;34003:1;33996:88;34103:4;34100:1;34093:15;34127:4;34124:1;34117:15;34144:185;34184:1;34201:20;34219:1;34201:20;:::i;:::-;34196:25;;34235:20;34253:1;34235:20;:::i;:::-;34230:25;;34274:1;34264:35;;34279:18;;:::i;:::-;34264:35;34321:1;34318;34314:9;34309:14;;34144:185;;;;:::o;34335:176::-;34367:1;34384:20;34402:1;34384:20;:::i;:::-;34379:25;;34418:20;34436:1;34418:20;:::i;:::-;34413:25;;34457:1;34447:35;;34462:18;;:::i;:::-;34447:35;34503:1;34500;34496:9;34491:14;;34335:176;;;;:::o;34517:180::-;34565:77;34562:1;34555:88;34662:4;34659:1;34652:15;34686:4;34683:1;34676:15;34703:98;34754:6;34788:5;34782:12;34772:22;;34703:98;;;:::o;34807:168::-;34890:11;34924:6;34919:3;34912:19;34964:4;34959:3;34955:14;34940:29;;34807:168;;;;:::o;34981:373::-;35067:3;35095:38;35127:5;35095:38;:::i;:::-;35149:70;35212:6;35207:3;35149:70;:::i;:::-;35142:77;;35228:65;35286:6;35281:3;35274:4;35267:5;35263:16;35228:65;:::i;:::-;35318:29;35340:6;35318:29;:::i;:::-;35313:3;35309:39;35302:46;;35071:283;34981:373;;;;:::o;35360:640::-;35555:4;35593:3;35582:9;35578:19;35570:27;;35607:71;35675:1;35664:9;35660:17;35651:6;35607:71;:::i;:::-;35688:72;35756:2;35745:9;35741:18;35732:6;35688:72;:::i;:::-;35770;35838:2;35827:9;35823:18;35814:6;35770:72;:::i;:::-;35889:9;35883:4;35879:20;35874:2;35863:9;35859:18;35852:48;35917:76;35988:4;35979:6;35917:76;:::i;:::-;35909:84;;35360:640;;;;;;;:::o;36006:141::-;36062:5;36093:6;36087:13;36078:22;;36109:32;36135:5;36109:32;:::i;:::-;36006:141;;;;:::o;36153:349::-;36222:6;36271:2;36259:9;36250:7;36246:23;36242:32;36239:119;;;36277:79;;:::i;:::-;36239:119;36397:1;36422:63;36477:7;36468:6;36457:9;36453:22;36422:63;:::i;:::-;36412:73;;36368:127;36153:349;;;;:::o

Swarm Source

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