ETH Price: $2,673.24 (+1.36%)

Token

RCS Moments in Attestation (RCSMIA)
 

Overview

Max Total Supply

56 RCSMIA

Holders

37

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mdzdn.eth
Balance
1 RCSMIA
0xd48090757d93ccbb72caca56390fa28b6e3a5efa
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:
RCSMomentsInAttestation

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.0;
// SPDX-License-Identifier: GPL-3.0

//////////////////////////////////////////////////////////////////////
//       _____                      .__                             //
//      /     \   _________________ |  |__   ____  __ __  ______    //
//     /  \ /  \ /  _ \_  __ \____ \|  |  \_/ __ \|  |  \/  ___/    //
//    /    Y    (  <_> )  | \/  |_> >   Y  \  ___/|  |  /\___ \     //
//    \____|__  /\____/|__|  |   __/|___|  /\___  >____//____  >    //
//            \/             |__|        \/     \/           \/     //
//             _________                     .__                    //
//            /   _____/ ____   _____   ____ |__|____               //
//            \_____  \ /  _ \ /     \ /    \|  \__  \              //
//            /        (  <_> )  Y Y  \   |  \  |/ __ \_            //
//           /_______  /\____/|__|_|  /___|  /__(____  /            //
//                   \/             \/     \/        \/             //
//                                                                  //
//                  twitter.com/MorpheusSomnia                      //
//         FAKE RARE DECAL & Morpheus Somnia Collaboration          //
//                                                                  //
//           FRD Twitter: https://twitter.com/fakeraredecal         //
//            FRD Discord: https://discord.gg/gVBQMPu5gy            //
//                                                                  //
//                                                                  //
//           Right Click Share Moments in Attestation               //
//////////////////////////////////////////////////////////////////////

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {

        _status = _NOT_ENTERED;
    }
}

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.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();

    // =============================================================
    //                            STRUCTS
    // =============================================================

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

    // =============================================================
    //                           CONSTANTS
    // =============================================================

    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;

    // =============================================================
    //                            STORAGE
    // =============================================================

    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
    // =============================================================

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

    // =============================================================
    //                   TOKEN COUNTING OPERATIONS
    // =============================================================

    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;
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    // =============================================================
    //                            IERC165
    // =============================================================

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

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

    // =============================================================
    //                        IERC721Metadata
    // =============================================================


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

    // =============================================================
    //                     OWNERSHIPS OPERATIONS
    // =============================================================

    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 {
            owner := and(owner, _BITMASK_ADDRESS)
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }
    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        assembly {
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    // =============================================================
    //                      APPROVAL OPERATIONS
    // =============================================================

    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 &&
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0;
    }

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

    // =============================================================
    //                        MINT OPERATIONS
    // =============================================================

    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);
                if (_currentIndex != end) revert();
            }
        }
    }

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

    // =============================================================
    //                        BURN OPERATIONS
    // =============================================================

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

    // =============================================================
    //                     EXTRA DATA OPERATIONS
    // =============================================================

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

    // =============================================================
    //                       OTHER OPERATIONS
    // =============================================================

    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;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) 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.13;

abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

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

    modifier onlyAllowedOperator(address from) virtual {
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }

    function _checkFilterOperator(address operator) internal view virtual {
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}


pragma solidity ^0.8.13;

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

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


pragma solidity ^0.8.0;

library MerkleProof {

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


    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }


    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

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


pragma solidity >=0.7.0 <0.9.0;

contract RCSMomentsInAttestation is ERC721A, Ownable, ReentrancyGuard, DefaultOperatorFilterer   {


  string public baseURI;
  string public notRevealedUri;
  uint256 public cost = 1 ether;
  uint256 public wlcost = 1 ether;
  uint256 public maxSupply = 256;
  uint256 public WlSupply = 0;
  uint256 public MaxperWallet = 1;
  uint256 public MaxperWalletWl = 1;
  bool public paused = false;
  bool public revealed = true;
  bool public preSale = false;
  bytes32 public merkleRoot;
  mapping (address => uint256) public PublicMintofUser;
  mapping (address => uint256) public WhitelistedMintofUser;

  constructor(
    string memory _initBaseURI,
    string memory _notRevealedUri
  ) ERC721A("RCS Moments in Attestation", "RCSMIA") {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_notRevealedUri);
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }
      function _startTokenId() internal view virtual override returns (uint256) {
        return 1;
    }

  function mint(uint256 tokens) public payable nonReentrant {
    require(!paused, "SYMBOL: Contract is paused");
    require(!preSale, "SYMBOL: Sale Hasn't Started Yet");
    require(tokens <= MaxperWallet, "SYMBOL: max mint amount per tx exceeded");
    require(totalSupply() + tokens <= maxSupply, "SYMBOL: We Soldout");
    require(PublicMintofUser[_msgSenderERC721A()] + tokens <= MaxperWallet, "SYMBOL: Max NFT Per Wallet exceeded");
    require(msg.value >= cost * tokens, "SYMBOL: insufficient funds");

       PublicMintofUser[_msgSenderERC721A()] += tokens;
      _safeMint(_msgSenderERC721A(), tokens);
    
  }
    function presalemint(uint256 tokens, bytes32[] calldata merkleProof) public payable nonReentrant {
    require(!paused, "SYMBOL: oops contract is paused");
    require(preSale, "SYMBOL: Presale Hasn't started yet");
    require(MerkleProof.verify(merkleProof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "SYMBOL: You are not Whitelisted");
    require(WhitelistedMintofUser[_msgSenderERC721A()] + tokens <= MaxperWalletWl, "SYMBOL: Max NFT Per Wallet exceeded");
    require(tokens <= MaxperWalletWl, "SYMBOL: Max Mint per Tx Exceeded");
    require(totalSupply() + tokens <= WlSupply, "SYMBOL: Whitelist MaxSupply exceeded");
    require(msg.value >= wlcost * tokens, "SYMBOL: Insufficient funds");

       WhitelistedMintofUser[_msgSenderERC721A()] += tokens;
      _safeMint(_msgSenderERC721A(), tokens);
    
  }

     function airdrop(uint256 _mintAmount, address destination) public onlyOwner nonReentrant {
    require(totalSupply() + _mintAmount <= maxSupply, "Max NFT Limit Exceeded");

      _safeMint(destination, _mintAmount);
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721AMetadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _toString(tokenId), ".json"))
        : "";
  }

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

      function tokensOfOwner(address owner) public view returns (uint256[] memory) {
        unchecked {
            uint256 tokenIdsIdx;
            address currOwnershipAddr;
            uint256 tokenIdsLength = balanceOf(owner);
            uint256[] memory tokenIds = new uint256[](tokenIdsLength);
            TokenOwnership memory ownership;
            for (uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i) {
                ownership = _ownershipAt(i);
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    tokenIds[tokenIdsIdx++] = i;
                }
            }
            return tokenIds;
        }
    }

  function reveal(bool _state) public onlyOwner {
      revealed = _state;
  }

  function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

  function setMaxPerWallet(uint256 _limit) public onlyOwner {
    MaxperWallet = _limit;
  }

    function setWlMaxPerWallet(uint256 _limit) public onlyOwner {
    MaxperWalletWl = _limit;
  }

  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

    function setWlCost(uint256 _newWlCost) public onlyOwner {
    wlcost = _newWlCost;
  }

    function setMaxsupply(uint256 _newsupply) public onlyOwner {
    maxSupply = _newsupply;
  }

    function setwlsupply(uint256 _newsupply) public onlyOwner {
    WlSupply = _newsupply;
  }

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

  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

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

    function togglepreSale(bool _state) external onlyOwner {
        preSale = _state;
    }

  function withdraw() public payable onlyOwner nonReentrant {
      uint256 balance = address(this).balance;
      payable(_msgSenderERC721A()).transfer(balance);
  }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_notRevealedUri","type":"string"}],"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":"MaxperWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxperWalletWl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"PublicMintofUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"WhitelistedMintofUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WlSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"presalemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newsupply","type":"uint256"}],"name":"setMaxsupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWlCost","type":"uint256"}],"name":"setWlCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setWlMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newsupply","type":"uint256"}],"name":"setwlsupply","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":"bool","name":"_state","type":"bool"}],"name":"togglepreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052670de0b6b3a7640000600c55670de0b6b3a7640000600d55610100600e556000600f55600160105560016011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055503480156200008f57600080fd5b5060405162005305380380620053058339818101604052810190620000b591906200072c565b733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601a81526020017f524353204d6f6d656e747320696e204174746573746174696f6e0000000000008152506040518060400160405280600681526020017f5243534d494100000000000000000000000000000000000000000000000000008152508160029081620001499190620009fc565b5080600390816200015b9190620009fc565b506200016c620003bd60201b60201c565b60008190555050506200019462000188620003c660201b60201c565b620003ce60201b60201c565b600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200039157801562000257576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200021d92919062000b28565b600060405180830381600087803b1580156200023857600080fd5b505af11580156200024d573d6000803e3d6000fd5b5050505062000390565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000311576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d792919062000b28565b600060405180830381600087803b158015620002f257600080fd5b505af115801562000307573d6000803e3d6000fd5b505050506200038f565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200035a919062000b55565b600060405180830381600087803b1580156200037557600080fd5b505af11580156200038a573d6000803e3d6000fd5b505050505b5b5b5050620003a4826200049460201b60201c565b620003b581620004b960201b60201c565b505062000bf5565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004a4620004de60201b60201c565b80600a9081620004b59190620009fc565b5050565b620004c9620004de60201b60201c565b80600b9081620004da9190620009fc565b5050565b620004ee620003c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005146200056f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200056d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005649062000bd3565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200060282620005b7565b810181811067ffffffffffffffff82111715620006245762000623620005c8565b5b80604052505050565b60006200063962000599565b9050620006478282620005f7565b919050565b600067ffffffffffffffff8211156200066a5762000669620005c8565b5b6200067582620005b7565b9050602081019050919050565b60005b83811015620006a257808201518184015260208101905062000685565b60008484015250505050565b6000620006c5620006bf846200064c565b6200062d565b905082815260208101848484011115620006e457620006e3620005b2565b5b620006f184828562000682565b509392505050565b600082601f830112620007115762000710620005ad565b5b815162000723848260208601620006ae565b91505092915050565b60008060408385031215620007465762000745620005a3565b5b600083015167ffffffffffffffff811115620007675762000766620005a8565b5b6200077585828601620006f9565b925050602083015167ffffffffffffffff811115620007995762000798620005a8565b5b620007a785828601620006f9565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200080457607f821691505b6020821081036200081a5762000819620007bc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000845565b62000890868362000845565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008dd620008d7620008d184620008a8565b620008b2565b620008a8565b9050919050565b6000819050919050565b620008f983620008bc565b620009116200090882620008e4565b84845462000852565b825550505050565b600090565b6200092862000919565b62000935818484620008ee565b505050565b5b818110156200095d57620009516000826200091e565b6001810190506200093b565b5050565b601f821115620009ac57620009768162000820565b620009818462000835565b8101602085101562000991578190505b620009a9620009a08562000835565b8301826200093a565b50505b505050565b600082821c905092915050565b6000620009d160001984600802620009b1565b1980831691505092915050565b6000620009ec8383620009be565b9150826002028217905092915050565b62000a0782620007b1565b67ffffffffffffffff81111562000a235762000a22620005c8565b5b62000a2f8254620007eb565b62000a3c82828562000961565b600060209050601f83116001811462000a74576000841562000a5f578287015190505b62000a6b8582620009de565b86555062000adb565b601f19841662000a848662000820565b60005b8281101562000aae5784890151825560018201915060208501945060208101905062000a87565b8683101562000ace578489015162000aca601f891682620009be565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b108262000ae3565b9050919050565b62000b228162000b03565b82525050565b600060408201905062000b3f600083018562000b17565b62000b4e602083018462000b17565b9392505050565b600060208201905062000b6c600083018462000b17565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000bbb60208362000b72565b915062000bc88262000b83565b602082019050919050565b6000602082019050818103600083015262000bee8162000bac565b9050919050565b6147008062000c056000396000f3fe6080604052600436106102c85760003560e01c80636c2d3c4f11610175578063bc63f02e116100dc578063e268e4d311610095578063f2c4ce1e1161006f578063f2c4ce1e14610a82578063f2fde38b14610aab578063fea0e05814610ad4578063fff8d2fc14610afd576102c8565b8063e268e4d3146109f3578063e985e9c514610a1c578063f12f6d5d14610a59576102c8565b8063bc63f02e146108d1578063bd7a1998146108fa578063bde0608a14610925578063c87b56dd1461094e578063d5abeb011461098b578063dc33e681146109b6576102c8565b80638da5cb5b1161012e5780638da5cb5b146107f1578063940cd05b1461081c57806395d89b4114610845578063a0712d6814610870578063a22cb4651461088c578063b88d4fde146108b5576102c8565b80636c2d3c4f146106cf57806370a08231146106fa578063715018a6146107375780637cb647591461074e5780638462151c146107775780638b14966b146107b4576102c8565b806323b872dd11610234578063458c4f9e116101ed5780635a7adf7f116101c75780635a7adf7f146106115780635c975abb1461063c5780636352211e146106675780636c0360eb146106a4576102c8565b8063458c4f9e1461059457806351830227146105bd57806355f804b3146105e8576102c8565b806323b872dd146104d35780632eb4a7ab146104ef5780633ccfd60b1461051a57806341f434341461052457806342842e0e1461054f57806344a0d68a1461056b576102c8565b8063081c8c4411610286578063081c8c44146103e2578063095ea7b31461040d5780630bddb6131461042957806313faede614610454578063149835a01461047f57806318160ddd146104a8576102c8565b806277ec05146102cd57806301ffc9a7146102f857806302329a2914610335578063036e4cb51461035e57806306fdde031461037a578063081812fc146103a5575b600080fd5b3480156102d957600080fd5b506102e2610b3a565b6040516102ef9190612ec3565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190612f4a565b610b40565b60405161032c9190612f92565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612fd9565b610bd2565b005b61037860048036038101906103739190613097565b610bf7565b005b34801561038657600080fd5b5061038f610f4e565b60405161039c9190613187565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c791906131a9565b610fe0565b6040516103d99190613217565b60405180910390f35b3480156103ee57600080fd5b506103f761105f565b6040516104049190613187565b60405180910390f35b6104276004803603810190610422919061325e565b6110ed565b005b34801561043557600080fd5b5061043e611231565b60405161044b9190612ec3565b60405180910390f35b34801561046057600080fd5b50610469611237565b6040516104769190612ec3565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906131a9565b61123d565b005b3480156104b457600080fd5b506104bd61124f565b6040516104ca9190612ec3565b60405180910390f35b6104ed60048036038101906104e8919061329e565b611266565b005b3480156104fb57600080fd5b506105046112b5565b604051610511919061330a565b60405180910390f35b6105226112bb565b005b34801561053057600080fd5b50610539611329565b6040516105469190613384565b60405180910390f35b6105696004803603810190610564919061329e565b61133b565b005b34801561057757600080fd5b50610592600480360381019061058d91906131a9565b61138a565b005b3480156105a057600080fd5b506105bb60048036038101906105b691906131a9565b61139c565b005b3480156105c957600080fd5b506105d26113ae565b6040516105df9190612f92565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a91906134cf565b6113c1565b005b34801561061d57600080fd5b506106266113dc565b6040516106339190612f92565b60405180910390f35b34801561064857600080fd5b506106516113ef565b60405161065e9190612f92565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906131a9565b611402565b60405161069b9190613217565b60405180910390f35b3480156106b057600080fd5b506106b9611414565b6040516106c69190613187565b60405180910390f35b3480156106db57600080fd5b506106e46114a2565b6040516106f19190612ec3565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190613518565b6114a8565b60405161072e9190612ec3565b60405180910390f35b34801561074357600080fd5b5061074c611560565b005b34801561075a57600080fd5b5061077560048036038101906107709190613571565b611574565b005b34801561078357600080fd5b5061079e60048036038101906107999190613518565b611586565b6040516107ab919061365c565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613518565b6116c9565b6040516107e89190612ec3565b60405180910390f35b3480156107fd57600080fd5b506108066116e1565b6040516108139190613217565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190612fd9565b61170b565b005b34801561085157600080fd5b5061085a611730565b6040516108679190613187565b60405180910390f35b61088a600480360381019061088591906131a9565b6117c2565b005b34801561089857600080fd5b506108b360048036038101906108ae919061367e565b611a65565b005b6108cf60048036038101906108ca919061375f565b611b70565b005b3480156108dd57600080fd5b506108f860048036038101906108f391906137e2565b611bc1565b005b34801561090657600080fd5b5061090f611c3e565b60405161091c9190612ec3565b60405180910390f35b34801561093157600080fd5b5061094c600480360381019061094791906131a9565b611c44565b005b34801561095a57600080fd5b50610975600480360381019061097091906131a9565b611c56565b6040516109829190613187565b60405180910390f35b34801561099757600080fd5b506109a0611dab565b6040516109ad9190612ec3565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190613518565b611db1565b6040516109ea9190612ec3565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a1591906131a9565b611dc3565b005b348015610a2857600080fd5b50610a436004803603810190610a3e9190613822565b611dd5565b604051610a509190612f92565b60405180910390f35b348015610a6557600080fd5b50610a806004803603810190610a7b91906131a9565b611e69565b005b348015610a8e57600080fd5b50610aa96004803603810190610aa491906134cf565b611e7b565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190613518565b611e96565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190612fd9565b611f19565b005b348015610b0957600080fd5b50610b246004803603810190610b1f9190613518565b611f3e565b604051610b319190612ec3565b60405180910390f35b60115481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bcb5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610bda611f56565b80601260006101000a81548160ff02191690831515021790555050565b610bff611fd4565b601260009054906101000a900460ff1615610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c46906138ae565b60405180910390fd5b601260029054906101000a900460ff16610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613940565b60405180910390fd5b610d12828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135433604051602001610cf791906139a8565b60405160208183030381529060405280519060200120612023565b610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890613a0f565b60405180910390fd5b6011548360156000610d6161203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da69190613a5e565b1115610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613b04565b60405180910390fd5b601154831115610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2390613b70565b60405180910390fd5b600f5483610e3861124f565b610e429190613a5e565b1115610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90613c02565b60405180910390fd5b82600d54610e919190613c22565b341015610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613cb0565b60405180910390fd5b8260156000610ee061203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f299190613a5e565b92505081905550610f41610f3b61203a565b84612042565b610f49612060565b505050565b606060028054610f5d90613cff565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8990613cff565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b5050505050905090565b6000610feb8261206a565b611021576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b805461106c90613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461109890613cff565b80156110e55780601f106110ba576101008083540402835291602001916110e5565b820191906000526020600020905b8154815290600101906020018083116110c857829003601f168201915b505050505081565b60006110f882611402565b90508073ffffffffffffffffffffffffffffffffffffffff1661111961203a565b73ffffffffffffffffffffffffffffffffffffffff161461117c576111458161114061203a565b611dd5565b61117b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600f5481565b600c5481565b611245611f56565b80600e8190555050565b60006112596120c9565b6001546000540303905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112a4576112a3336120d2565b5b6112af8484846121cf565b50505050565b60135481565b6112c3611f56565b6112cb611fd4565b60004790506112d861203a565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561131d573d6000803e3d6000fd5b5050611327612060565b565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461137957611378336120d2565b5b6113848484846124f1565b50505050565b611392611f56565b80600c8190555050565b6113a4611f56565b80600f8190555050565b601260019054906101000a900460ff1681565b6113c9611f56565b80600a90816113d89190613ed2565b5050565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff1681565b600061140d82612511565b9050919050565b600a805461142190613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461144d90613cff565b801561149a5780601f1061146f5761010080835404028352916020019161149a565b820191906000526020600020905b81548152906001019060200180831161147d57829003601f168201915b505050505081565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361150f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611568611f56565b61157260006125dd565b565b61157c611f56565b8060138190555050565b60606000806000611596856114a8565b905060008167ffffffffffffffff8111156115b4576115b36133a4565b5b6040519080825280602002602001820160405280156115e25781602001602082028036833780820191505090505b5090506115ed612e5b565b60006115f76120c9565b90505b8386146116bb5761160a816126a3565b915081604001516116b057600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461165557816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036116af57808387806001019850815181106116a2576116a1613fa4565b5b6020026020010181815250505b5b8060010190506115fa565b508195505050505050919050565b60156020528060005260406000206000915090505481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611713611f56565b80601260016101000a81548160ff02191690831515021790555050565b60606003805461173f90613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461176b90613cff565b80156117b85780601f1061178d576101008083540402835291602001916117b8565b820191906000526020600020905b81548152906001019060200180831161179b57829003601f168201915b5050505050905090565b6117ca611fd4565b601260009054906101000a900460ff161561181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118119061401f565b60405180910390fd5b601260029054906101000a900460ff161561186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061408b565b60405180910390fd5b6010548111156118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a69061411d565b60405180910390fd5b600e54816118bb61124f565b6118c59190613a5e565b1115611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90614189565b60405180910390fd5b601054816014600061191661203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461195b9190613a5e565b111561199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390613b04565b60405180910390fd5b80600c546119aa9190613c22565b3410156119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e3906141f5565b60405180910390fd5b80601460006119f961203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a429190613a5e565b92505081905550611a5a611a5461203a565b82612042565b611a62612060565b50565b8060076000611a7261203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b1f61203a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b649190612f92565b60405180910390a35050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611bae57611bad336120d2565b5b611bba858585856126ce565b5050505050565b611bc9611f56565b611bd1611fd4565b600e5482611bdd61124f565b611be79190613a5e565b1115611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614261565b60405180910390fd5b611c328183612042565b611c3a612060565b5050565b60105481565b611c4c611f56565b8060118190555050565b6060611c618261206a565b611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906142f3565b60405180910390fd5b60001515601260019054906101000a900460ff16151503611d4d57600b8054611cc890613cff565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf490613cff565b8015611d415780601f10611d1657610100808354040283529160200191611d41565b820191906000526020600020905b815481529060010190602001808311611d2457829003601f168201915b50505050509050611da6565b6000611d57612741565b90506000815111611d775760405180602001604052806000815250611da2565b80611d81846127d3565b604051602001611d9292919061439b565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000611dbc82612823565b9050919050565b611dcb611f56565b8060108190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e71611f56565b80600d8190555050565b611e83611f56565b80600b9081611e929190613ed2565b5050565b611e9e611f56565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f049061443c565b60405180910390fd5b611f16816125dd565b50565b611f21611f56565b80601260026101000a81548160ff02191690831515021790555050565b60146020528060005260406000206000915090505481565b611f5e61287a565b73ffffffffffffffffffffffffffffffffffffffff16611f7c6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc9906144a8565b60405180910390fd5b565b600260095403612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090614514565b60405180910390fd5b6002600981905550565b6000826120308584612882565b1490509392505050565b600033905090565b61205c8282604051806020016040528060008152506128d8565b5050565b6001600981905550565b6000816120756120c9565b11158015612084575060005482105b80156120c2575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006001905090565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156121cc576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612149929190614534565b602060405180830381865afa158015612166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218a9190614572565b6121cb57806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016121c29190613217565b60405180910390fd5b5b50565b60006121da82612511565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612241576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061224d84612975565b91509150612263818761225e61203a565b61299c565b6122af576122788661227361203a565b611dd5565b6122ae576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612315576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232286868660016129e0565b801561232d57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506123fb856123d78888876129e6565b7c020000000000000000000000000000000000000000000000000000000017612a0e565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612481576000600185019050600060046000838152602001908152602001600020540361247f57600054811461247e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124e98686866001612a39565b505050505050565b61250c83838360405180602001604052806000815250611b70565b505050565b600080829050806125206120c9565b116125a6576000548110156125a55760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036125a3575b6000810361259957600460008360019003935083815260200190815260200160002054905061256f565b80925050506125d8565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126ab612e5b565b6126c76004600084815260200190815260200160002054612a3f565b9050919050565b6126d9848484611266565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461273b5761270484848484612af5565b61273a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600a805461275090613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461277c90613cff565b80156127c95780601f1061279e576101008083540402835291602001916127c9565b820191906000526020600020905b8154815290600101906020018083116127ac57829003601f168201915b5050505050905090565b606060a060405101806040526020810391506000825281835b60011561280e57600184039350600a81066030018453600a81049050806127ec575b50828103602084039350808452505050919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b600033905090565b60008082905060005b84518110156128cd576128b8828683815181106128ab576128aa613fa4565b5b6020026020010151612c45565b915080806128c59061459f565b91505061288b565b508091505092915050565b6128e28383612c70565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461297057600080549050600083820390505b6129226000868380600101945086612af5565b612958576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061290f57816000541461296d57600080fd5b50505b505050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86129fd868684612e2b565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b612a47612e5b565b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a082901c816020019067ffffffffffffffff16908167ffffffffffffffff168152505060007c01000000000000000000000000000000000000000000000000000000008316141581604001901515908115158152505060e882901c816060019062ffffff16908162ffffff1681525050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b1b61203a565b8786866040518563ffffffff1660e01b8152600401612b3d949392919061463c565b6020604051808303816000875af1925050508015612b7957506040513d601f19601f82011682018060405250810190612b76919061469d565b60015b612bf2573d8060008114612ba9576040519150601f19603f3d011682016040523d82523d6000602084013e612bae565b606091505b506000815103612bea576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000818310612c5d57612c588284612e34565b612c68565b612c678383612e34565b5b905092915050565b60008054905060008203612cb0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cbd60008483856129e0565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612d3483612d2560008660006129e6565b612d2e85612e4b565b17612a0e565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612dd557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612d9a565b5060008203612e10576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819055505050612e266000848385612a39565b505050565b60009392505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001600062ffffff1681525090565b6000819050919050565b612ebd81612eaa565b82525050565b6000602082019050612ed86000830184612eb4565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2781612ef2565b8114612f3257600080fd5b50565b600081359050612f4481612f1e565b92915050565b600060208284031215612f6057612f5f612ee8565b5b6000612f6e84828501612f35565b91505092915050565b60008115159050919050565b612f8c81612f77565b82525050565b6000602082019050612fa76000830184612f83565b92915050565b612fb681612f77565b8114612fc157600080fd5b50565b600081359050612fd381612fad565b92915050565b600060208284031215612fef57612fee612ee8565b5b6000612ffd84828501612fc4565b91505092915050565b61300f81612eaa565b811461301a57600080fd5b50565b60008135905061302c81613006565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261305757613056613032565b5b8235905067ffffffffffffffff81111561307457613073613037565b5b6020830191508360208202830111156130905761308f61303c565b5b9250929050565b6000806000604084860312156130b0576130af612ee8565b5b60006130be8682870161301d565b935050602084013567ffffffffffffffff8111156130df576130de612eed565b5b6130eb86828701613041565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015613131578082015181840152602081019050613116565b60008484015250505050565b6000601f19601f8301169050919050565b6000613159826130f7565b6131638185613102565b9350613173818560208601613113565b61317c8161313d565b840191505092915050565b600060208201905081810360008301526131a1818461314e565b905092915050565b6000602082840312156131bf576131be612ee8565b5b60006131cd8482850161301d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613201826131d6565b9050919050565b613211816131f6565b82525050565b600060208201905061322c6000830184613208565b92915050565b61323b816131f6565b811461324657600080fd5b50565b60008135905061325881613232565b92915050565b6000806040838503121561327557613274612ee8565b5b600061328385828601613249565b92505060206132948582860161301d565b9150509250929050565b6000806000606084860312156132b7576132b6612ee8565b5b60006132c586828701613249565b93505060206132d686828701613249565b92505060406132e78682870161301d565b9150509250925092565b6000819050919050565b613304816132f1565b82525050565b600060208201905061331f60008301846132fb565b92915050565b6000819050919050565b600061334a613345613340846131d6565b613325565b6131d6565b9050919050565b600061335c8261332f565b9050919050565b600061336e82613351565b9050919050565b61337e81613363565b82525050565b60006020820190506133996000830184613375565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133dc8261313d565b810181811067ffffffffffffffff821117156133fb576133fa6133a4565b5b80604052505050565b600061340e612ede565b905061341a82826133d3565b919050565b600067ffffffffffffffff82111561343a576134396133a4565b5b6134438261313d565b9050602081019050919050565b82818337600083830152505050565b600061347261346d8461341f565b613404565b90508281526020810184848401111561348e5761348d61339f565b5b613499848285613450565b509392505050565b600082601f8301126134b6576134b5613032565b5b81356134c684826020860161345f565b91505092915050565b6000602082840312156134e5576134e4612ee8565b5b600082013567ffffffffffffffff81111561350357613502612eed565b5b61350f848285016134a1565b91505092915050565b60006020828403121561352e5761352d612ee8565b5b600061353c84828501613249565b91505092915050565b61354e816132f1565b811461355957600080fd5b50565b60008135905061356b81613545565b92915050565b60006020828403121561358757613586612ee8565b5b60006135958482850161355c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135d381612eaa565b82525050565b60006135e583836135ca565b60208301905092915050565b6000602082019050919050565b60006136098261359e565b61361381856135a9565b935061361e836135ba565b8060005b8381101561364f57815161363688826135d9565b9750613641836135f1565b925050600181019050613622565b5085935050505092915050565b6000602082019050818103600083015261367681846135fe565b905092915050565b6000806040838503121561369557613694612ee8565b5b60006136a385828601613249565b92505060206136b485828601612fc4565b9150509250929050565b600067ffffffffffffffff8211156136d9576136d86133a4565b5b6136e28261313d565b9050602081019050919050565b60006137026136fd846136be565b613404565b90508281526020810184848401111561371e5761371d61339f565b5b613729848285613450565b509392505050565b600082601f83011261374657613745613032565b5b81356137568482602086016136ef565b91505092915050565b6000806000806080858703121561377957613778612ee8565b5b600061378787828801613249565b945050602061379887828801613249565b93505060406137a98782880161301d565b925050606085013567ffffffffffffffff8111156137ca576137c9612eed565b5b6137d687828801613731565b91505092959194509250565b600080604083850312156137f9576137f8612ee8565b5b60006138078582860161301d565b925050602061381885828601613249565b9150509250929050565b6000806040838503121561383957613838612ee8565b5b600061384785828601613249565b925050602061385885828601613249565b9150509250929050565b7f53594d424f4c3a206f6f707320636f6e74726163742069732070617573656400600082015250565b6000613898601f83613102565b91506138a382613862565b602082019050919050565b600060208201905081810360008301526138c78161388b565b9050919050565b7f53594d424f4c3a2050726573616c65204861736e27742073746172746564207960008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061392a602283613102565b9150613935826138ce565b604082019050919050565b600060208201905081810360008301526139598161391d565b9050919050565b60008160601b9050919050565b600061397882613960565b9050919050565b600061398a8261396d565b9050919050565b6139a261399d826131f6565b61397f565b82525050565b60006139b48284613991565b60148201915081905092915050565b7f53594d424f4c3a20596f7520617265206e6f742057686974656c697374656400600082015250565b60006139f9601f83613102565b9150613a04826139c3565b602082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a6982612eaa565b9150613a7483612eaa565b9250828201905080821115613a8c57613a8b613a2f565b5b92915050565b7f53594d424f4c3a204d6178204e4654205065722057616c6c657420657863656560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b6000613aee602383613102565b9150613af982613a92565b604082019050919050565b60006020820190508181036000830152613b1d81613ae1565b9050919050565b7f53594d424f4c3a204d6178204d696e7420706572205478204578636565646564600082015250565b6000613b5a602083613102565b9150613b6582613b24565b602082019050919050565b60006020820190508181036000830152613b8981613b4d565b9050919050565b7f53594d424f4c3a2057686974656c697374204d6178537570706c79206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b6000613bec602483613102565b9150613bf782613b90565b604082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b6000613c2d82612eaa565b9150613c3883612eaa565b9250828202613c4681612eaa565b91508282048414831517613c5d57613c5c613a2f565b5b5092915050565b7f53594d424f4c3a20496e73756666696369656e742066756e6473000000000000600082015250565b6000613c9a601a83613102565b9150613ca582613c64565b602082019050919050565b60006020820190508181036000830152613cc981613c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d1757607f821691505b602082108103613d2a57613d29613cd0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d55565b613d9c8683613d55565b95508019841693508086168417925050509392505050565b6000613dcf613dca613dc584612eaa565b613325565b612eaa565b9050919050565b6000819050919050565b613de983613db4565b613dfd613df582613dd6565b848454613d62565b825550505050565b600090565b613e12613e05565b613e1d818484613de0565b505050565b5b81811015613e4157613e36600082613e0a565b600181019050613e23565b5050565b601f821115613e8657613e5781613d30565b613e6084613d45565b81016020851015613e6f578190505b613e83613e7b85613d45565b830182613e22565b50505b505050565b600082821c905092915050565b6000613ea960001984600802613e8b565b1980831691505092915050565b6000613ec28383613e98565b9150826002028217905092915050565b613edb826130f7565b67ffffffffffffffff811115613ef457613ef36133a4565b5b613efe8254613cff565b613f09828285613e45565b600060209050601f831160018114613f3c5760008415613f2a578287015190505b613f348582613eb6565b865550613f9c565b601f198416613f4a86613d30565b60005b82811015613f7257848901518255600182019150602085019450602081019050613f4d565b86831015613f8f5784890151613f8b601f891682613e98565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f53594d424f4c3a20436f6e747261637420697320706175736564000000000000600082015250565b6000614009601a83613102565b915061401482613fd3565b602082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b7f53594d424f4c3a2053616c65204861736e277420537461727465642059657400600082015250565b6000614075601f83613102565b91506140808261403f565b602082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b7f53594d424f4c3a206d6178206d696e7420616d6f756e7420706572207478206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b6000614107602783613102565b9150614112826140ab565b604082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f53594d424f4c3a20576520536f6c646f75740000000000000000000000000000600082015250565b6000614173601283613102565b915061417e8261413d565b602082019050919050565b600060208201905081810360008301526141a281614166565b9050919050565b7f53594d424f4c3a20696e73756666696369656e742066756e6473000000000000600082015250565b60006141df601a83613102565b91506141ea826141a9565b602082019050919050565b6000602082019050818103600083015261420e816141d2565b9050919050565b7f4d6178204e4654204c696d697420457863656564656400000000000000000000600082015250565b600061424b601683613102565b915061425682614215565b602082019050919050565b6000602082019050818103600083015261427a8161423e565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b60006142dd603083613102565b91506142e882614281565b604082019050919050565b6000602082019050818103600083015261430c816142d0565b9050919050565b600081905092915050565b6000614329826130f7565b6143338185614313565b9350614343818560208601613113565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614385600583614313565b91506143908261434f565b600582019050919050565b60006143a7828561431e565b91506143b3828461431e565b91506143be82614378565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614426602683613102565b9150614431826143ca565b604082019050919050565b6000602082019050818103600083015261445581614419565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614492602083613102565b915061449d8261445c565b602082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006144fe601f83613102565b9150614509826144c8565b602082019050919050565b6000602082019050818103600083015261452d816144f1565b9050919050565b60006040820190506145496000830185613208565b6145566020830184613208565b9392505050565b60008151905061456c81612fad565b92915050565b60006020828403121561458857614587612ee8565b5b60006145968482850161455d565b91505092915050565b60006145aa82612eaa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145dc576145db613a2f565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b600061460e826145e7565b61461881856145f2565b9350614628818560208601613113565b6146318161313d565b840191505092915050565b60006080820190506146516000830187613208565b61465e6020830186613208565b61466b6040830185612eb4565b818103606083015261467d8184614603565b905095945050505050565b60008151905061469781612f1e565b92915050565b6000602082840312156146b3576146b2612ee8565b5b60006146c184828501614688565b9150509291505056fea2646970667358221220e5a1f055a1c4791ecedac8f2569e926f5a5983058e88c8d52584f99df7850e8064736f6c634300081100330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102c85760003560e01c80636c2d3c4f11610175578063bc63f02e116100dc578063e268e4d311610095578063f2c4ce1e1161006f578063f2c4ce1e14610a82578063f2fde38b14610aab578063fea0e05814610ad4578063fff8d2fc14610afd576102c8565b8063e268e4d3146109f3578063e985e9c514610a1c578063f12f6d5d14610a59576102c8565b8063bc63f02e146108d1578063bd7a1998146108fa578063bde0608a14610925578063c87b56dd1461094e578063d5abeb011461098b578063dc33e681146109b6576102c8565b80638da5cb5b1161012e5780638da5cb5b146107f1578063940cd05b1461081c57806395d89b4114610845578063a0712d6814610870578063a22cb4651461088c578063b88d4fde146108b5576102c8565b80636c2d3c4f146106cf57806370a08231146106fa578063715018a6146107375780637cb647591461074e5780638462151c146107775780638b14966b146107b4576102c8565b806323b872dd11610234578063458c4f9e116101ed5780635a7adf7f116101c75780635a7adf7f146106115780635c975abb1461063c5780636352211e146106675780636c0360eb146106a4576102c8565b8063458c4f9e1461059457806351830227146105bd57806355f804b3146105e8576102c8565b806323b872dd146104d35780632eb4a7ab146104ef5780633ccfd60b1461051a57806341f434341461052457806342842e0e1461054f57806344a0d68a1461056b576102c8565b8063081c8c4411610286578063081c8c44146103e2578063095ea7b31461040d5780630bddb6131461042957806313faede614610454578063149835a01461047f57806318160ddd146104a8576102c8565b806277ec05146102cd57806301ffc9a7146102f857806302329a2914610335578063036e4cb51461035e57806306fdde031461037a578063081812fc146103a5575b600080fd5b3480156102d957600080fd5b506102e2610b3a565b6040516102ef9190612ec3565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190612f4a565b610b40565b60405161032c9190612f92565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612fd9565b610bd2565b005b61037860048036038101906103739190613097565b610bf7565b005b34801561038657600080fd5b5061038f610f4e565b60405161039c9190613187565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c791906131a9565b610fe0565b6040516103d99190613217565b60405180910390f35b3480156103ee57600080fd5b506103f761105f565b6040516104049190613187565b60405180910390f35b6104276004803603810190610422919061325e565b6110ed565b005b34801561043557600080fd5b5061043e611231565b60405161044b9190612ec3565b60405180910390f35b34801561046057600080fd5b50610469611237565b6040516104769190612ec3565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906131a9565b61123d565b005b3480156104b457600080fd5b506104bd61124f565b6040516104ca9190612ec3565b60405180910390f35b6104ed60048036038101906104e8919061329e565b611266565b005b3480156104fb57600080fd5b506105046112b5565b604051610511919061330a565b60405180910390f35b6105226112bb565b005b34801561053057600080fd5b50610539611329565b6040516105469190613384565b60405180910390f35b6105696004803603810190610564919061329e565b61133b565b005b34801561057757600080fd5b50610592600480360381019061058d91906131a9565b61138a565b005b3480156105a057600080fd5b506105bb60048036038101906105b691906131a9565b61139c565b005b3480156105c957600080fd5b506105d26113ae565b6040516105df9190612f92565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a91906134cf565b6113c1565b005b34801561061d57600080fd5b506106266113dc565b6040516106339190612f92565b60405180910390f35b34801561064857600080fd5b506106516113ef565b60405161065e9190612f92565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906131a9565b611402565b60405161069b9190613217565b60405180910390f35b3480156106b057600080fd5b506106b9611414565b6040516106c69190613187565b60405180910390f35b3480156106db57600080fd5b506106e46114a2565b6040516106f19190612ec3565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190613518565b6114a8565b60405161072e9190612ec3565b60405180910390f35b34801561074357600080fd5b5061074c611560565b005b34801561075a57600080fd5b5061077560048036038101906107709190613571565b611574565b005b34801561078357600080fd5b5061079e60048036038101906107999190613518565b611586565b6040516107ab919061365c565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613518565b6116c9565b6040516107e89190612ec3565b60405180910390f35b3480156107fd57600080fd5b506108066116e1565b6040516108139190613217565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190612fd9565b61170b565b005b34801561085157600080fd5b5061085a611730565b6040516108679190613187565b60405180910390f35b61088a600480360381019061088591906131a9565b6117c2565b005b34801561089857600080fd5b506108b360048036038101906108ae919061367e565b611a65565b005b6108cf60048036038101906108ca919061375f565b611b70565b005b3480156108dd57600080fd5b506108f860048036038101906108f391906137e2565b611bc1565b005b34801561090657600080fd5b5061090f611c3e565b60405161091c9190612ec3565b60405180910390f35b34801561093157600080fd5b5061094c600480360381019061094791906131a9565b611c44565b005b34801561095a57600080fd5b50610975600480360381019061097091906131a9565b611c56565b6040516109829190613187565b60405180910390f35b34801561099757600080fd5b506109a0611dab565b6040516109ad9190612ec3565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190613518565b611db1565b6040516109ea9190612ec3565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a1591906131a9565b611dc3565b005b348015610a2857600080fd5b50610a436004803603810190610a3e9190613822565b611dd5565b604051610a509190612f92565b60405180910390f35b348015610a6557600080fd5b50610a806004803603810190610a7b91906131a9565b611e69565b005b348015610a8e57600080fd5b50610aa96004803603810190610aa491906134cf565b611e7b565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190613518565b611e96565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190612fd9565b611f19565b005b348015610b0957600080fd5b50610b246004803603810190610b1f9190613518565b611f3e565b604051610b319190612ec3565b60405180910390f35b60115481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bcb5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610bda611f56565b80601260006101000a81548160ff02191690831515021790555050565b610bff611fd4565b601260009054906101000a900460ff1615610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c46906138ae565b60405180910390fd5b601260029054906101000a900460ff16610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613940565b60405180910390fd5b610d12828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135433604051602001610cf791906139a8565b60405160208183030381529060405280519060200120612023565b610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890613a0f565b60405180910390fd5b6011548360156000610d6161203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da69190613a5e565b1115610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613b04565b60405180910390fd5b601154831115610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2390613b70565b60405180910390fd5b600f5483610e3861124f565b610e429190613a5e565b1115610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90613c02565b60405180910390fd5b82600d54610e919190613c22565b341015610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613cb0565b60405180910390fd5b8260156000610ee061203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f299190613a5e565b92505081905550610f41610f3b61203a565b84612042565b610f49612060565b505050565b606060028054610f5d90613cff565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8990613cff565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b5050505050905090565b6000610feb8261206a565b611021576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b805461106c90613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461109890613cff565b80156110e55780601f106110ba576101008083540402835291602001916110e5565b820191906000526020600020905b8154815290600101906020018083116110c857829003601f168201915b505050505081565b60006110f882611402565b90508073ffffffffffffffffffffffffffffffffffffffff1661111961203a565b73ffffffffffffffffffffffffffffffffffffffff161461117c576111458161114061203a565b611dd5565b61117b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600f5481565b600c5481565b611245611f56565b80600e8190555050565b60006112596120c9565b6001546000540303905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112a4576112a3336120d2565b5b6112af8484846121cf565b50505050565b60135481565b6112c3611f56565b6112cb611fd4565b60004790506112d861203a565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561131d573d6000803e3d6000fd5b5050611327612060565b565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461137957611378336120d2565b5b6113848484846124f1565b50505050565b611392611f56565b80600c8190555050565b6113a4611f56565b80600f8190555050565b601260019054906101000a900460ff1681565b6113c9611f56565b80600a90816113d89190613ed2565b5050565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff1681565b600061140d82612511565b9050919050565b600a805461142190613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461144d90613cff565b801561149a5780601f1061146f5761010080835404028352916020019161149a565b820191906000526020600020905b81548152906001019060200180831161147d57829003601f168201915b505050505081565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361150f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611568611f56565b61157260006125dd565b565b61157c611f56565b8060138190555050565b60606000806000611596856114a8565b905060008167ffffffffffffffff8111156115b4576115b36133a4565b5b6040519080825280602002602001820160405280156115e25781602001602082028036833780820191505090505b5090506115ed612e5b565b60006115f76120c9565b90505b8386146116bb5761160a816126a3565b915081604001516116b057600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461165557816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036116af57808387806001019850815181106116a2576116a1613fa4565b5b6020026020010181815250505b5b8060010190506115fa565b508195505050505050919050565b60156020528060005260406000206000915090505481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611713611f56565b80601260016101000a81548160ff02191690831515021790555050565b60606003805461173f90613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461176b90613cff565b80156117b85780601f1061178d576101008083540402835291602001916117b8565b820191906000526020600020905b81548152906001019060200180831161179b57829003601f168201915b5050505050905090565b6117ca611fd4565b601260009054906101000a900460ff161561181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118119061401f565b60405180910390fd5b601260029054906101000a900460ff161561186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061408b565b60405180910390fd5b6010548111156118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a69061411d565b60405180910390fd5b600e54816118bb61124f565b6118c59190613a5e565b1115611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90614189565b60405180910390fd5b601054816014600061191661203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461195b9190613a5e565b111561199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390613b04565b60405180910390fd5b80600c546119aa9190613c22565b3410156119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e3906141f5565b60405180910390fd5b80601460006119f961203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a429190613a5e565b92505081905550611a5a611a5461203a565b82612042565b611a62612060565b50565b8060076000611a7261203a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b1f61203a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b649190612f92565b60405180910390a35050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611bae57611bad336120d2565b5b611bba858585856126ce565b5050505050565b611bc9611f56565b611bd1611fd4565b600e5482611bdd61124f565b611be79190613a5e565b1115611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614261565b60405180910390fd5b611c328183612042565b611c3a612060565b5050565b60105481565b611c4c611f56565b8060118190555050565b6060611c618261206a565b611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906142f3565b60405180910390fd5b60001515601260019054906101000a900460ff16151503611d4d57600b8054611cc890613cff565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf490613cff565b8015611d415780601f10611d1657610100808354040283529160200191611d41565b820191906000526020600020905b815481529060010190602001808311611d2457829003601f168201915b50505050509050611da6565b6000611d57612741565b90506000815111611d775760405180602001604052806000815250611da2565b80611d81846127d3565b604051602001611d9292919061439b565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000611dbc82612823565b9050919050565b611dcb611f56565b8060108190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e71611f56565b80600d8190555050565b611e83611f56565b80600b9081611e929190613ed2565b5050565b611e9e611f56565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f049061443c565b60405180910390fd5b611f16816125dd565b50565b611f21611f56565b80601260026101000a81548160ff02191690831515021790555050565b60146020528060005260406000206000915090505481565b611f5e61287a565b73ffffffffffffffffffffffffffffffffffffffff16611f7c6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc9906144a8565b60405180910390fd5b565b600260095403612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090614514565b60405180910390fd5b6002600981905550565b6000826120308584612882565b1490509392505050565b600033905090565b61205c8282604051806020016040528060008152506128d8565b5050565b6001600981905550565b6000816120756120c9565b11158015612084575060005482105b80156120c2575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006001905090565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156121cc576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612149929190614534565b602060405180830381865afa158015612166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218a9190614572565b6121cb57806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016121c29190613217565b60405180910390fd5b5b50565b60006121da82612511565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612241576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061224d84612975565b91509150612263818761225e61203a565b61299c565b6122af576122788661227361203a565b611dd5565b6122ae576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612315576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232286868660016129e0565b801561232d57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506123fb856123d78888876129e6565b7c020000000000000000000000000000000000000000000000000000000017612a0e565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612481576000600185019050600060046000838152602001908152602001600020540361247f57600054811461247e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124e98686866001612a39565b505050505050565b61250c83838360405180602001604052806000815250611b70565b505050565b600080829050806125206120c9565b116125a6576000548110156125a55760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036125a3575b6000810361259957600460008360019003935083815260200190815260200160002054905061256f565b80925050506125d8565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126ab612e5b565b6126c76004600084815260200190815260200160002054612a3f565b9050919050565b6126d9848484611266565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461273b5761270484848484612af5565b61273a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600a805461275090613cff565b80601f016020809104026020016040519081016040528092919081815260200182805461277c90613cff565b80156127c95780601f1061279e576101008083540402835291602001916127c9565b820191906000526020600020905b8154815290600101906020018083116127ac57829003601f168201915b5050505050905090565b606060a060405101806040526020810391506000825281835b60011561280e57600184039350600a81066030018453600a81049050806127ec575b50828103602084039350808452505050919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b600033905090565b60008082905060005b84518110156128cd576128b8828683815181106128ab576128aa613fa4565b5b6020026020010151612c45565b915080806128c59061459f565b91505061288b565b508091505092915050565b6128e28383612c70565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461297057600080549050600083820390505b6129226000868380600101945086612af5565b612958576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061290f57816000541461296d57600080fd5b50505b505050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86129fd868684612e2b565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b612a47612e5b565b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a082901c816020019067ffffffffffffffff16908167ffffffffffffffff168152505060007c01000000000000000000000000000000000000000000000000000000008316141581604001901515908115158152505060e882901c816060019062ffffff16908162ffffff1681525050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b1b61203a565b8786866040518563ffffffff1660e01b8152600401612b3d949392919061463c565b6020604051808303816000875af1925050508015612b7957506040513d601f19601f82011682018060405250810190612b76919061469d565b60015b612bf2573d8060008114612ba9576040519150601f19603f3d011682016040523d82523d6000602084013e612bae565b606091505b506000815103612bea576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000818310612c5d57612c588284612e34565b612c68565b612c678383612e34565b5b905092915050565b60008054905060008203612cb0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cbd60008483856129e0565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612d3483612d2560008660006129e6565b612d2e85612e4b565b17612a0e565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612dd557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612d9a565b5060008203612e10576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819055505050612e266000848385612a39565b505050565b60009392505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001600062ffffff1681525090565b6000819050919050565b612ebd81612eaa565b82525050565b6000602082019050612ed86000830184612eb4565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2781612ef2565b8114612f3257600080fd5b50565b600081359050612f4481612f1e565b92915050565b600060208284031215612f6057612f5f612ee8565b5b6000612f6e84828501612f35565b91505092915050565b60008115159050919050565b612f8c81612f77565b82525050565b6000602082019050612fa76000830184612f83565b92915050565b612fb681612f77565b8114612fc157600080fd5b50565b600081359050612fd381612fad565b92915050565b600060208284031215612fef57612fee612ee8565b5b6000612ffd84828501612fc4565b91505092915050565b61300f81612eaa565b811461301a57600080fd5b50565b60008135905061302c81613006565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261305757613056613032565b5b8235905067ffffffffffffffff81111561307457613073613037565b5b6020830191508360208202830111156130905761308f61303c565b5b9250929050565b6000806000604084860312156130b0576130af612ee8565b5b60006130be8682870161301d565b935050602084013567ffffffffffffffff8111156130df576130de612eed565b5b6130eb86828701613041565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015613131578082015181840152602081019050613116565b60008484015250505050565b6000601f19601f8301169050919050565b6000613159826130f7565b6131638185613102565b9350613173818560208601613113565b61317c8161313d565b840191505092915050565b600060208201905081810360008301526131a1818461314e565b905092915050565b6000602082840312156131bf576131be612ee8565b5b60006131cd8482850161301d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613201826131d6565b9050919050565b613211816131f6565b82525050565b600060208201905061322c6000830184613208565b92915050565b61323b816131f6565b811461324657600080fd5b50565b60008135905061325881613232565b92915050565b6000806040838503121561327557613274612ee8565b5b600061328385828601613249565b92505060206132948582860161301d565b9150509250929050565b6000806000606084860312156132b7576132b6612ee8565b5b60006132c586828701613249565b93505060206132d686828701613249565b92505060406132e78682870161301d565b9150509250925092565b6000819050919050565b613304816132f1565b82525050565b600060208201905061331f60008301846132fb565b92915050565b6000819050919050565b600061334a613345613340846131d6565b613325565b6131d6565b9050919050565b600061335c8261332f565b9050919050565b600061336e82613351565b9050919050565b61337e81613363565b82525050565b60006020820190506133996000830184613375565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133dc8261313d565b810181811067ffffffffffffffff821117156133fb576133fa6133a4565b5b80604052505050565b600061340e612ede565b905061341a82826133d3565b919050565b600067ffffffffffffffff82111561343a576134396133a4565b5b6134438261313d565b9050602081019050919050565b82818337600083830152505050565b600061347261346d8461341f565b613404565b90508281526020810184848401111561348e5761348d61339f565b5b613499848285613450565b509392505050565b600082601f8301126134b6576134b5613032565b5b81356134c684826020860161345f565b91505092915050565b6000602082840312156134e5576134e4612ee8565b5b600082013567ffffffffffffffff81111561350357613502612eed565b5b61350f848285016134a1565b91505092915050565b60006020828403121561352e5761352d612ee8565b5b600061353c84828501613249565b91505092915050565b61354e816132f1565b811461355957600080fd5b50565b60008135905061356b81613545565b92915050565b60006020828403121561358757613586612ee8565b5b60006135958482850161355c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135d381612eaa565b82525050565b60006135e583836135ca565b60208301905092915050565b6000602082019050919050565b60006136098261359e565b61361381856135a9565b935061361e836135ba565b8060005b8381101561364f57815161363688826135d9565b9750613641836135f1565b925050600181019050613622565b5085935050505092915050565b6000602082019050818103600083015261367681846135fe565b905092915050565b6000806040838503121561369557613694612ee8565b5b60006136a385828601613249565b92505060206136b485828601612fc4565b9150509250929050565b600067ffffffffffffffff8211156136d9576136d86133a4565b5b6136e28261313d565b9050602081019050919050565b60006137026136fd846136be565b613404565b90508281526020810184848401111561371e5761371d61339f565b5b613729848285613450565b509392505050565b600082601f83011261374657613745613032565b5b81356137568482602086016136ef565b91505092915050565b6000806000806080858703121561377957613778612ee8565b5b600061378787828801613249565b945050602061379887828801613249565b93505060406137a98782880161301d565b925050606085013567ffffffffffffffff8111156137ca576137c9612eed565b5b6137d687828801613731565b91505092959194509250565b600080604083850312156137f9576137f8612ee8565b5b60006138078582860161301d565b925050602061381885828601613249565b9150509250929050565b6000806040838503121561383957613838612ee8565b5b600061384785828601613249565b925050602061385885828601613249565b9150509250929050565b7f53594d424f4c3a206f6f707320636f6e74726163742069732070617573656400600082015250565b6000613898601f83613102565b91506138a382613862565b602082019050919050565b600060208201905081810360008301526138c78161388b565b9050919050565b7f53594d424f4c3a2050726573616c65204861736e27742073746172746564207960008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061392a602283613102565b9150613935826138ce565b604082019050919050565b600060208201905081810360008301526139598161391d565b9050919050565b60008160601b9050919050565b600061397882613960565b9050919050565b600061398a8261396d565b9050919050565b6139a261399d826131f6565b61397f565b82525050565b60006139b48284613991565b60148201915081905092915050565b7f53594d424f4c3a20596f7520617265206e6f742057686974656c697374656400600082015250565b60006139f9601f83613102565b9150613a04826139c3565b602082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a6982612eaa565b9150613a7483612eaa565b9250828201905080821115613a8c57613a8b613a2f565b5b92915050565b7f53594d424f4c3a204d6178204e4654205065722057616c6c657420657863656560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b6000613aee602383613102565b9150613af982613a92565b604082019050919050565b60006020820190508181036000830152613b1d81613ae1565b9050919050565b7f53594d424f4c3a204d6178204d696e7420706572205478204578636565646564600082015250565b6000613b5a602083613102565b9150613b6582613b24565b602082019050919050565b60006020820190508181036000830152613b8981613b4d565b9050919050565b7f53594d424f4c3a2057686974656c697374204d6178537570706c79206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b6000613bec602483613102565b9150613bf782613b90565b604082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b6000613c2d82612eaa565b9150613c3883612eaa565b9250828202613c4681612eaa565b91508282048414831517613c5d57613c5c613a2f565b5b5092915050565b7f53594d424f4c3a20496e73756666696369656e742066756e6473000000000000600082015250565b6000613c9a601a83613102565b9150613ca582613c64565b602082019050919050565b60006020820190508181036000830152613cc981613c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d1757607f821691505b602082108103613d2a57613d29613cd0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d55565b613d9c8683613d55565b95508019841693508086168417925050509392505050565b6000613dcf613dca613dc584612eaa565b613325565b612eaa565b9050919050565b6000819050919050565b613de983613db4565b613dfd613df582613dd6565b848454613d62565b825550505050565b600090565b613e12613e05565b613e1d818484613de0565b505050565b5b81811015613e4157613e36600082613e0a565b600181019050613e23565b5050565b601f821115613e8657613e5781613d30565b613e6084613d45565b81016020851015613e6f578190505b613e83613e7b85613d45565b830182613e22565b50505b505050565b600082821c905092915050565b6000613ea960001984600802613e8b565b1980831691505092915050565b6000613ec28383613e98565b9150826002028217905092915050565b613edb826130f7565b67ffffffffffffffff811115613ef457613ef36133a4565b5b613efe8254613cff565b613f09828285613e45565b600060209050601f831160018114613f3c5760008415613f2a578287015190505b613f348582613eb6565b865550613f9c565b601f198416613f4a86613d30565b60005b82811015613f7257848901518255600182019150602085019450602081019050613f4d565b86831015613f8f5784890151613f8b601f891682613e98565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f53594d424f4c3a20436f6e747261637420697320706175736564000000000000600082015250565b6000614009601a83613102565b915061401482613fd3565b602082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b7f53594d424f4c3a2053616c65204861736e277420537461727465642059657400600082015250565b6000614075601f83613102565b91506140808261403f565b602082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b7f53594d424f4c3a206d6178206d696e7420616d6f756e7420706572207478206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b6000614107602783613102565b9150614112826140ab565b604082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f53594d424f4c3a20576520536f6c646f75740000000000000000000000000000600082015250565b6000614173601283613102565b915061417e8261413d565b602082019050919050565b600060208201905081810360008301526141a281614166565b9050919050565b7f53594d424f4c3a20696e73756666696369656e742066756e6473000000000000600082015250565b60006141df601a83613102565b91506141ea826141a9565b602082019050919050565b6000602082019050818103600083015261420e816141d2565b9050919050565b7f4d6178204e4654204c696d697420457863656564656400000000000000000000600082015250565b600061424b601683613102565b915061425682614215565b602082019050919050565b6000602082019050818103600083015261427a8161423e565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b60006142dd603083613102565b91506142e882614281565b604082019050919050565b6000602082019050818103600083015261430c816142d0565b9050919050565b600081905092915050565b6000614329826130f7565b6143338185614313565b9350614343818560208601613113565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614385600583614313565b91506143908261434f565b600582019050919050565b60006143a7828561431e565b91506143b3828461431e565b91506143be82614378565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614426602683613102565b9150614431826143ca565b604082019050919050565b6000602082019050818103600083015261445581614419565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614492602083613102565b915061449d8261445c565b602082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006144fe601f83613102565b9150614509826144c8565b602082019050919050565b6000602082019050818103600083015261452d816144f1565b9050919050565b60006040820190506145496000830185613208565b6145566020830184613208565b9392505050565b60008151905061456c81612fad565b92915050565b60006020828403121561458857614587612ee8565b5b60006145968482850161455d565b91505092915050565b60006145aa82612eaa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145dc576145db613a2f565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b600061460e826145e7565b61461881856145f2565b9350614628818560208601613113565b6146318161313d565b840191505092915050565b60006080820190506146516000830187613208565b61465e6020830186613208565b61466b6040830185612eb4565b818103606083015261467d8184614603565b905095945050505050565b60008151905061469781612f1e565b92915050565b6000602082840312156146b3576146b2612ee8565b5b60006146c184828501614688565b9150509291505056fea2646970667358221220e5a1f055a1c4791ecedac8f2569e926f5a5983058e88c8d52584f99df7850e8064736f6c63430008110033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string):
Arg [1] : _notRevealedUri (string):

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

35559:6191:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35897:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10877:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40845:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37253:838;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11317:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14966:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35691:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14550:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35829:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35724:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40415:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9126:178;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41197:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36030:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41022:167;;;:::i;:::-;;29648:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41368:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40231:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40517:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35966:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40615:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35998:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35935:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12157:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35665:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35758:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9587:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3168:103;;;;;;;;;;;;;:::i;:::-;;39917:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38946:881;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36117:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2933:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39833:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11425:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36616:631;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15192:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41547:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38100:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35861:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40129:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38329:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35794:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38829:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40029:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15434:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40319:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40719:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3279:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40926:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36060:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35897:33;;;;:::o;10877:241::-;10962:4;11016:10;11001:25;;:11;:25;;;;:67;;;;11058:10;11043:25;;:11;:25;;;;11001:67;:109;;;;11100:10;11085:25;;:11;:25;;;;11001:109;10981:129;;10877:241;;;:::o;40845:73::-;2892:13;:11;:13::i;:::-;40906:6:::1;40897;;:15;;;;;;;;;;;;;;;;;;40845:73:::0;:::o;37253:838::-;1989:21;:19;:21::i;:::-;37366:6:::1;;;;;;;;;;;37365:7;37357:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37423:7;;;;;;;;;;;37415:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37484:84;37503:11;;37484:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37516:10;;37555;37538:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;37528:39;;;;;;37484:18;:84::i;:::-;37476:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;37674:14;;37664:6;37619:21;:42;37641:19;:17;:19::i;:::-;37619:42;;;;;;;;;;;;;;;;:51;;;;:::i;:::-;:69;;37611:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;37753:14;;37743:6;:24;;37735:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37845:8;;37835:6;37819:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:34;;37811:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;37931:6;37922;;:15;;;;:::i;:::-;37909:9;:28;;37901:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38026:6;37980:21;:42;38002:19;:17;:19::i;:::-;37980:42;;;;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;;;;;38041:38;38051:19;:17;:19::i;:::-;38072:6;38041:9;:38::i;:::-;2033:20:::0;:18;:20::i;:::-;37253:838;;;:::o;11317:100::-;11371:13;11404:5;11397:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11317:100;:::o;14966:218::-;15042:7;15067:16;15075:7;15067;:16::i;:::-;15062:64;;15092:34;;;;;;;;;;;;;;15062:64;15146:15;:24;15162:7;15146:24;;;;;;;;;;;:30;;;;;;;;;;;;15139:37;;14966:218;;;:::o;35691:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14550:408::-;14639:13;14655:16;14663:7;14655;:16::i;:::-;14639:32;;14711:5;14688:28;;:19;:17;:19::i;:::-;:28;;;14684:175;;14736:44;14753:5;14760:19;:17;:19::i;:::-;14736:16;:44::i;:::-;14731:128;;14808:35;;;;;;;;;;;;;;14731:128;14684:175;14904:2;14871:15;:24;14887:7;14871:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;14942:7;14938:2;14922:28;;14931:5;14922:28;;;;;;;;;;;;14628:330;14550:408;;:::o;35829:27::-;;;;:::o;35724:29::-;;;;:::o;40415:94::-;2892:13;:11;:13::i;:::-;40493:10:::1;40481:9;:22;;;;40415:94:::0;:::o;9126:178::-;9187:7;9270:15;:13;:15::i;:::-;9255:12;;9239:13;;:28;:46;9232:53;;9126:178;:::o;41197:165::-;41306:4;30515:10;30507:18;;:4;:18;;;30503:83;;30542:32;30563:10;30542:20;:32::i;:::-;30503:83;41319:37:::1;41338:4;41344:2;41348:7;41319:18;:37::i;:::-;41197:165:::0;;;;:::o;36030:25::-;;;;:::o;41022:167::-;2892:13;:11;:13::i;:::-;1989:21:::1;:19;:21::i;:::-;41089:15:::2;41107:21;41089:39;;41145:19;:17;:19::i;:::-;41137:37;;:46;41175:7;41137:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;41080:109;2033:20:::1;:18;:20::i;:::-;41022:167::o:0;29648:143::-;29748:42;29648:143;:::o;41368:173::-;41481:4;30515:10;30507:18;;:4;:18;;;30503:83;;30542:32;30563:10;30542:20;:32::i;:::-;30503:83;41494:41:::1;41517:4;41523:2;41527:7;41494:22;:41::i;:::-;41368:173:::0;;;;:::o;40231:80::-;2892:13;:11;:13::i;:::-;40297:8:::1;40290:4;:15;;;;40231:80:::0;:::o;40517:92::-;2892:13;:11;:13::i;:::-;40593:10:::1;40582:8;:21;;;;40517:92:::0;:::o;35966:27::-;;;;;;;;;;;;;:::o;40615:98::-;2892:13;:11;:13::i;:::-;40696:11:::1;40686:7;:21;;;;;;:::i;:::-;;40615:98:::0;:::o;35998:27::-;;;;;;;;;;;;;:::o;35935:26::-;;;;;;;;;;;;;:::o;12157:152::-;12229:7;12272:27;12291:7;12272:18;:27::i;:::-;12249:52;;12157:152;;;:::o;35665:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35758:31::-;;;;:::o;9587:233::-;9659:7;9700:1;9683:19;;:5;:19;;;9679:60;;9711:28;;;;;;;;;;;;;;9679:60;6857:13;9757:18;:25;9776:5;9757:25;;;;;;;;;;;;;;;;:55;9750:62;;9587:233;;;:::o;3168:103::-;2892:13;:11;:13::i;:::-;3233:30:::1;3260:1;3233:18;:30::i;:::-;3168:103::o:0;39917:106::-;2892:13;:11;:13::i;:::-;40004:11:::1;39991:10;:24;;;;39917:106:::0;:::o;38946:881::-;39005:16;39059:19;39093:25;39133:22;39158:16;39168:5;39158:9;:16::i;:::-;39133:41;;39189:25;39231:14;39217:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39189:57;;39261:31;;:::i;:::-;39312:9;39324:15;:13;:15::i;:::-;39312:27;;39307:472;39356:14;39341:11;:29;39307:472;;39408:15;39421:1;39408:12;:15::i;:::-;39396:27;;39446:9;:16;;;39487:8;39442:73;39563:1;39537:28;;:9;:14;;;:28;;;39533:111;;39610:9;:14;;;39590:34;;39533:111;39687:5;39666:26;;:17;:26;;;39662:102;;39743:1;39717:8;39726:13;;;;;;39717:23;;;;;;;;:::i;:::-;;;;;;;:27;;;;;39662:102;39307:472;39372:3;;;;;39307:472;;;;39800:8;39793:15;;;;;;;38946:881;;;:::o;36117:57::-;;;;;;;;;;;;;;;;;:::o;2933:87::-;2979:7;3006:6;;;;;;;;;;;2999:13;;2933:87;:::o;39833:78::-;2892:13;:11;:13::i;:::-;39899:6:::1;39888:8;;:17;;;;;;;;;;;;;;;;;;39833:78:::0;:::o;11425:104::-;11481:13;11514:7;11507:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11425:104;:::o;36616:631::-;1989:21;:19;:21::i;:::-;36690:6:::1;;;;;;;;;;;36689:7;36681:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36743:7;;;;;;;;;;;36742:8;36734:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;36811:12;;36801:6;:22;;36793:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;36908:9;;36898:6;36882:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;36874:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37005:12;;36995:6;36955:16;:37;36972:19;:17;:19::i;:::-;36955:37;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:62;;36947:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;37092:6;37085:4;;:13;;;;:::i;:::-;37072:9;:26;;37064:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37182:6;37141:16;:37;37158:19;:17;:19::i;:::-;37141:37;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;37197:38;37207:19;:17;:19::i;:::-;37228:6;37197:9;:38::i;:::-;2033:20:::0;:18;:20::i;:::-;36616:631;:::o;15192:234::-;15339:8;15287:18;:39;15306:19;:17;:19::i;:::-;15287:39;;;;;;;;;;;;;;;:49;15327:8;15287:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;15399:8;15363:55;;15378:19;:17;:19::i;:::-;15363:55;;;15409:8;15363:55;;;;;;:::i;:::-;;;;;;;;15192:234;;:::o;41547:198::-;41679:4;30515:10;30507:18;;:4;:18;;;30503:83;;30542:32;30563:10;30542:20;:32::i;:::-;30503:83;41692:47:::1;41715:4;41721:2;41725:7;41734:4;41692:22;:47::i;:::-;41547:198:::0;;;;;:::o;38100:223::-;2892:13;:11;:13::i;:::-;1989:21:::1;:19;:21::i;:::-;38235:9:::2;;38220:11;38204:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;38196:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38282:35;38292:11;38305;38282:9;:35::i;:::-;2033:20:::1;:18;:20::i;:::-;38100:223:::0;;:::o;35861:31::-;;;;:::o;40129:96::-;2892:13;:11;:13::i;:::-;40213:6:::1;40196:14;:23;;;;40129:96:::0;:::o;38329:492::-;38427:13;38468:16;38476:7;38468;:16::i;:::-;38452:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38578:5;38566:17;;:8;;;;;;;;;;;:17;;;38563:62;;38603:14;38596:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38563:62;38633:28;38664:10;:8;:10::i;:::-;38633:41;;38719:1;38694:14;38688:28;:32;:127;;;;;;;;;;;;;;;;;38756:14;38772:18;38782:7;38772:9;:18::i;:::-;38739:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38688:127;38681:134;;;38329:492;;;;:::o;35794:30::-;;;;:::o;38829:107::-;38887:7;38910:20;38924:5;38910:13;:20::i;:::-;38903:27;;38829:107;;;:::o;40029:92::-;2892:13;:11;:13::i;:::-;40109:6:::1;40094:12;:21;;;;40029:92:::0;:::o;15434:164::-;15531:4;15555:18;:25;15574:5;15555:25;;;;;;;;;;;;;;;:35;15581:8;15555:35;;;;;;;;;;;;;;;;;;;;;;;;;15548:42;;15434:164;;;;:::o;40319:88::-;2892:13;:11;:13::i;:::-;40391:10:::1;40382:6;:19;;;;40319:88:::0;:::o;40719:120::-;2892:13;:11;:13::i;:::-;40818:15:::1;40801:14;:32;;;;;;:::i;:::-;;40719:120:::0;:::o;3279:201::-;2892:13;:11;:13::i;:::-;3388:1:::1;3368:22;;:8;:22;;::::0;3360:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3444:28;3463:8;3444:18;:28::i;:::-;3279:201:::0;:::o;40926:90::-;2892:13;:11;:13::i;:::-;41002:6:::1;40992:7;;:16;;;;;;;;;;;;;;;;;;40926:90:::0;:::o;36060:52::-;;;;;;;;;;;;;;;;;:::o;3028:132::-;3103:12;:10;:12::i;:::-;3092:23;;:7;:5;:7::i;:::-;:23;;;3084:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3028:132::o;2069:152::-;1849:1;2127:7;;:19;2119:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1849:1;2195:7;:18;;;;2069:152::o;31390:190::-;31515:4;31568;31539:25;31552:5;31559:4;31539:12;:25::i;:::-;:33;31532:40;;31390:190;;;;;:::o;26621:105::-;26681:7;26708:10;26701:17;;26621:105;:::o;23244:112::-;23321:27;23331:2;23335:8;23321:27;;;;;;;;;;;;:9;:27::i;:::-;23244:112;;:::o;2229:81::-;1805:1;2280:7;:22;;;;2229:81::o;15606:242::-;15671:4;15727:7;15708:15;:13;:15::i;:::-;:26;;:66;;;;;15761:13;;15751:7;:23;15708:66;:132;;;;;15839:1;7219:8;15791:17;:26;15809:7;15791:26;;;;;;;;;;;;:44;:49;15708:132;15688:152;;15606:242;;;:::o;36509:101::-;36574:7;36601:1;36594:8;;36509:101;:::o;30745:313::-;30878:1;29748:42;30830:45;;;:49;30826:225;;;29748:42;30901;;;30952:4;30959:8;30901:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30896:144;;31015:8;30996:28;;;;;;;;;;;:::i;:::-;;;;;;;;30896:144;30826:225;30745:313;:::o;16657:1656::-;16799:27;16829;16848:7;16829:18;:27::i;:::-;16799:57;;16914:4;16873:45;;16889:19;16873:45;;;16869:86;;16927:28;;;;;;;;;;;;;;16869:86;16969:27;16998:23;17025:35;17052:7;17025:26;:35::i;:::-;16968:92;;;;17080:68;17105:15;17122:4;17128:19;:17;:19::i;:::-;17080:24;:68::i;:::-;17075:180;;17168:43;17185:4;17191:19;:17;:19::i;:::-;17168:16;:43::i;:::-;17163:92;;17220:35;;;;;;;;;;;;;;17163:92;17075:180;17286:1;17272:16;;:2;:16;;;17268:52;;17297:23;;;;;;;;;;;;;;17268:52;17333:43;17355:4;17361:2;17365:7;17374:1;17333:21;:43::i;:::-;17419:15;17416:93;;;17492:1;17471:19;17464:30;17416:93;17561:18;:24;17580:4;17561:24;;;;;;;;;;;;;;;;17559:26;;;;;;;;;;;;17602:18;:22;17621:2;17602:22;;;;;;;;;;;;;;;;17600:24;;;;;;;;;;;17670:146;17707:2;17756:45;17771:4;17777:2;17781:19;17756:14;:45::i;:::-;7349:8;17728:73;17670:18;:146::i;:::-;17641:17;:26;17659:7;17641:26;;;;;;;;;;;:175;;;;17888:1;7349:8;17837:19;:47;:52;17833:364;;17910:19;17942:1;17932:7;:11;17910:33;;18000:1;17966:17;:30;17984:11;17966:30;;;;;;;;;;;;:35;17962:220;;18045:13;;18030:11;:28;18026:137;;18120:19;18087:17;:30;18105:11;18087:30;;;;;;;;;;;:52;;;;18026:137;17962:220;17891:306;17833:364;18244:7;18240:2;18225:27;;18234:4;18225:27;;;;;;;;;;;;18263:42;18284:4;18290:2;18294:7;18303:1;18263:20;:42::i;:::-;16788:1525;;;16657:1656;;;:::o;18321:193::-;18467:39;18484:4;18490:2;18494:7;18467:39;;;;;;;;;;;;:16;:39::i;:::-;18321:193;;;:::o;12864:631::-;12931:7;12951:12;12966:7;12951:22;;13034:4;13015:15;:13;:15::i;:::-;:23;13011:417;;13068:13;;13061:4;:20;13057:371;;;13106:14;13123:17;:23;13141:4;13123:23;;;;;;;;;;;;13106:40;;13201:1;7219:8;13173:6;:24;:29;13169:240;;13233:113;13250:1;13240:6;:11;13233:113;;13293:17;:25;13311:6;;;;;;;13293:25;;;;;;;;;;;;13284:34;;13233:113;;;13379:6;13372:13;;;;;;13169:240;13083:345;13057:371;13011:417;13456:31;;;;;;;;;;;;;;12864:631;;;;:::o;3488:191::-;3562:16;3581:6;;;;;;;;;;;3562:25;;3607:8;3598:6;;:17;;;;;;;;;;;;;;;;;;3662:8;3631:40;;3652:8;3631:40;;;;;;;;;;;;3551:128;3488:191;:::o;12491:161::-;12559:21;;:::i;:::-;12600:44;12619:17;:24;12637:5;12619:24;;;;;;;;;;;;12600:18;:44::i;:::-;12593:51;;12491:161;;;:::o;18522:407::-;18697:31;18710:4;18716:2;18720:7;18697:12;:31::i;:::-;18761:1;18743:2;:14;;;:19;18739:183;;18782:56;18813:4;18819:2;18823:7;18832:5;18782:30;:56::i;:::-;18777:145;;18866:40;;;;;;;;;;;;;;18777:145;18739:183;18522:407;;;;:::o;36399:102::-;36459:13;36488:7;36481:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36399:102;:::o;26734:640::-;26799:17;26881:4;26874;26868:11;26864:22;26915:1;26909:4;26902:15;26945:4;26942:1;26938:12;26931:19;;26976:1;26971:3;26964:14;27005:3;27042:5;27024:221;27050:1;27024:221;;;27090:1;27085:3;27081:11;27074:18;;27141:2;27135:4;27131:13;27127:2;27123:22;27118:3;27110:36;27184:2;27178:4;27174:13;27166:21;;27215:4;27024:221;27205:25;27024:221;27028:21;27284:3;27279;27275:13;27318:4;27313:3;27309:14;27302:21;;27349:6;27344:3;27337:19;26838:529;;;26734:640;;;:::o;9828:178::-;9889:7;6857:13;6926:2;9917:18;:25;9936:5;9917:25;;;;;;;;;;;;;;;;:50;;9916:82;9909:89;;9828:178;;;:::o;2377:98::-;2430:7;2457:10;2450:17;;2377:98;:::o;31804:296::-;31887:7;31907:20;31930:4;31907:27;;31950:9;31945:118;31969:5;:12;31965:1;:16;31945:118;;;32018:33;32028:12;32042:5;32048:1;32042:8;;;;;;;;:::i;:::-;;;;;;;;32018:9;:33::i;:::-;32003:48;;31983:3;;;;;:::i;:::-;;;;31945:118;;;;32080:12;32073:19;;;31804:296;;;;:::o;22590:646::-;22721:19;22727:2;22731:8;22721:5;:19::i;:::-;22800:1;22782:2;:14;;;:19;22778:440;;22822:11;22836:13;;22822:27;;22868:13;22890:8;22884:3;:14;22868:30;;22917:233;22948:62;22987:1;22991:2;22995:7;;;;;;23004:5;22948:30;:62::i;:::-;22943:167;;23046:40;;;;;;;;;;;;;;22943:167;23145:3;23137:5;:11;22917:233;;23189:3;23172:13;;:20;23168:34;;23194:8;;;23168:34;22803:415;;22778:440;22590:646;;;:::o;16257:392::-;16359:27;16388:23;16429:38;16470:15;:24;16486:7;16470:24;;;;;;;;;;;16429:65;;16554:18;16531:41;;16611:19;16605:26;16586:45;;16516:126;16257:392;;;:::o;15856:391::-;16005:11;16073:16;16066:5;16062:28;16053:37;;16132:16;16121:9;16117:32;16104:45;;16212:15;16201:9;16198:30;16190:5;16179:9;16176:20;16173:56;16163:66;;15856:391;;;;;:::o;18937:159::-;;;;;:::o;26113:311::-;26248:7;26268:16;7410:3;26294:19;:41;;26268:68;;7410:3;26362:31;26373:4;26379:2;26383:9;26362:10;:31::i;:::-;26354:40;;:62;;26347:69;;;26113:311;;;;;:::o;13877:273::-;13957:14;14028:16;14021:5;14017:28;14008:37;;14125:5;14111:11;14086:23;14082:41;14079:52;14072:5;14069:63;14059:73;;13877:273;;;;:::o;19104:158::-;;;;;:::o;13501:366::-;13567:31;;:::i;:::-;13644:6;13611:9;:14;;:41;;;;;;;;;;;7166:3;13697:6;:33;;13663:9;:24;;:68;;;;;;;;;;;13789:1;7219:8;13761:6;:24;:29;;13742:9;:16;;:48;;;;;;;;;;;7410:3;13830:6;:28;;13801:9;:19;;:58;;;;;;;;;;;13501:366;;;:::o;19270:716::-;19433:4;19479:2;19454:45;;;19500:19;:17;:19::i;:::-;19521:4;19527:7;19536:5;19454:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19450:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19754:1;19737:6;:13;:18;19733:235;;19783:40;;;;;;;;;;;;;;19733:235;19926:6;19920:13;19911:6;19907:2;19903:15;19896:38;19450:529;19623:54;;;19613:64;;;:6;:64;;;;19606:71;;;19270:716;;;;;;:::o;35134:149::-;35197:7;35228:1;35224;:5;:51;;35255:20;35270:1;35273;35255:14;:20::i;:::-;35224:51;;;35232:20;35247:1;35250;35232:14;:20::i;:::-;35224:51;35217:58;;35134:149;;;;:::o;20183:1438::-;20256:20;20279:13;;20256:36;;20319:1;20307:8;:13;20303:44;;20329:18;;;;;;;;;;;;;;20303:44;20360:61;20390:1;20394:2;20398:12;20412:8;20360:21;:61::i;:::-;20530:1;6926:2;20500:1;:26;;20499:32;20487:8;:45;20461:18;:22;20480:2;20461:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;20583:139;20620:2;20674:33;20697:1;20701:2;20705:1;20674:14;:33::i;:::-;20641:30;20662:8;20641:20;:30::i;:::-;:66;20583:18;:139::i;:::-;20549:17;:31;20567:12;20549:31;;;;;;;;;;;:173;;;;20739:16;20770:11;20799:8;20784:12;:23;20770:37;;20877:16;20873:2;20869:25;20857:37;;21092:12;21060:8;21035:1;20987:25;20963:1;20939;20912:212;21204:1;21190:12;21186:20;21144:277;21245:3;21236:7;21233:16;21144:277;;21394:7;21384:8;21381:1;21354:25;21351:1;21348;21343:59;21298:1;21289:7;21285:15;21274:26;;21144:277;;;21148:77;21466:1;21454:8;:13;21450:45;;21476:19;;;;;;;;;;;;;;21450:45;21528:3;21512:13;:19;;;;20434:1109;;21553:60;21582:1;21586:2;21590:12;21604:8;21553:20;:60::i;:::-;20245:1376;20183:1438;;:::o;25960:147::-;26097:6;25960:147;;;;;:::o;35291:224::-;35359:13;35422:1;35416:4;35409:15;35451:1;35445:4;35438:15;35492:4;35486;35476:21;35467:30;;35291:224;;;;:::o;14156:195::-;14226:14;14330:1;14320:8;14317:15;14291:24;14287:46;14277:56;;14156:195;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:116::-;2023:21;2038:5;2023:21;:::i;:::-;2016:5;2013:32;2003:60;;2059:1;2056;2049:12;2003:60;1953:116;:::o;2075:133::-;2118:5;2156:6;2143:20;2134:29;;2172:30;2196:5;2172:30;:::i;:::-;2075:133;;;;:::o;2214:323::-;2270:6;2319:2;2307:9;2298:7;2294:23;2290:32;2287:119;;;2325:79;;:::i;:::-;2287:119;2445:1;2470:50;2512:7;2503:6;2492:9;2488:22;2470:50;:::i;:::-;2460:60;;2416:114;2214:323;;;;:::o;2543:122::-;2616:24;2634:5;2616:24;:::i;:::-;2609:5;2606:35;2596:63;;2655:1;2652;2645:12;2596:63;2543:122;:::o;2671:139::-;2717:5;2755:6;2742:20;2733:29;;2771:33;2798:5;2771:33;:::i;:::-;2671:139;;;;:::o;2816:117::-;2925:1;2922;2915:12;2939:117;3048:1;3045;3038:12;3062:117;3171:1;3168;3161:12;3202:568;3275:8;3285:6;3335:3;3328:4;3320:6;3316:17;3312:27;3302:122;;3343:79;;:::i;:::-;3302:122;3456:6;3443:20;3433:30;;3486:18;3478:6;3475:30;3472:117;;;3508:79;;:::i;:::-;3472:117;3622:4;3614:6;3610:17;3598:29;;3676:3;3668:4;3660:6;3656:17;3646:8;3642:32;3639:41;3636:128;;;3683:79;;:::i;:::-;3636:128;3202:568;;;;;:::o;3776:704::-;3871:6;3879;3887;3936:2;3924:9;3915:7;3911:23;3907:32;3904:119;;;3942:79;;:::i;:::-;3904:119;4062:1;4087:53;4132:7;4123:6;4112:9;4108:22;4087:53;:::i;:::-;4077:63;;4033:117;4217:2;4206:9;4202:18;4189:32;4248:18;4240:6;4237:30;4234:117;;;4270:79;;:::i;:::-;4234:117;4383:80;4455:7;4446:6;4435:9;4431:22;4383:80;:::i;:::-;4365:98;;;;4160:313;3776:704;;;;;:::o;4486:99::-;4538:6;4572:5;4566:12;4556:22;;4486:99;;;:::o;4591:169::-;4675:11;4709:6;4704:3;4697:19;4749:4;4744:3;4740:14;4725:29;;4591:169;;;;:::o;4766:246::-;4847:1;4857:113;4871:6;4868:1;4865:13;4857:113;;;4956:1;4951:3;4947:11;4941:18;4937:1;4932:3;4928:11;4921:39;4893:2;4890:1;4886:10;4881:15;;4857:113;;;5004:1;4995:6;4990:3;4986:16;4979:27;4828:184;4766:246;;;:::o;5018:102::-;5059:6;5110:2;5106:7;5101:2;5094:5;5090:14;5086:28;5076:38;;5018:102;;;:::o;5126:377::-;5214:3;5242:39;5275:5;5242:39;:::i;:::-;5297:71;5361:6;5356:3;5297:71;:::i;:::-;5290:78;;5377:65;5435:6;5430:3;5423:4;5416:5;5412:16;5377:65;:::i;:::-;5467:29;5489:6;5467:29;:::i;:::-;5462:3;5458:39;5451:46;;5218:285;5126:377;;;;:::o;5509:313::-;5622:4;5660:2;5649:9;5645:18;5637:26;;5709:9;5703:4;5699:20;5695:1;5684:9;5680:17;5673:47;5737:78;5810:4;5801:6;5737:78;:::i;:::-;5729:86;;5509:313;;;;:::o;5828:329::-;5887:6;5936:2;5924:9;5915:7;5911:23;5907:32;5904:119;;;5942:79;;:::i;:::-;5904:119;6062:1;6087:53;6132:7;6123:6;6112:9;6108:22;6087:53;:::i;:::-;6077:63;;6033:117;5828:329;;;;:::o;6163:126::-;6200:7;6240:42;6233:5;6229:54;6218:65;;6163:126;;;:::o;6295:96::-;6332:7;6361:24;6379:5;6361:24;:::i;:::-;6350:35;;6295:96;;;:::o;6397:118::-;6484:24;6502:5;6484:24;:::i;:::-;6479:3;6472:37;6397:118;;:::o;6521:222::-;6614:4;6652:2;6641:9;6637:18;6629:26;;6665:71;6733:1;6722:9;6718:17;6709:6;6665:71;:::i;:::-;6521:222;;;;:::o;6749:122::-;6822:24;6840:5;6822:24;:::i;:::-;6815:5;6812:35;6802:63;;6861:1;6858;6851:12;6802:63;6749:122;:::o;6877:139::-;6923:5;6961:6;6948:20;6939:29;;6977:33;7004:5;6977:33;:::i;:::-;6877:139;;;;:::o;7022:474::-;7090:6;7098;7147:2;7135:9;7126:7;7122:23;7118:32;7115:119;;;7153:79;;:::i;:::-;7115:119;7273:1;7298:53;7343:7;7334:6;7323:9;7319:22;7298:53;:::i;:::-;7288:63;;7244:117;7400:2;7426:53;7471:7;7462:6;7451:9;7447:22;7426:53;:::i;:::-;7416:63;;7371:118;7022:474;;;;;:::o;7502:619::-;7579:6;7587;7595;7644:2;7632:9;7623:7;7619:23;7615:32;7612:119;;;7650:79;;:::i;:::-;7612:119;7770:1;7795:53;7840:7;7831:6;7820:9;7816:22;7795:53;:::i;:::-;7785:63;;7741:117;7897:2;7923:53;7968:7;7959:6;7948:9;7944:22;7923:53;:::i;:::-;7913:63;;7868:118;8025:2;8051:53;8096:7;8087:6;8076:9;8072:22;8051:53;:::i;:::-;8041:63;;7996:118;7502:619;;;;;:::o;8127:77::-;8164:7;8193:5;8182:16;;8127:77;;;:::o;8210:118::-;8297:24;8315:5;8297:24;:::i;:::-;8292:3;8285:37;8210:118;;:::o;8334:222::-;8427:4;8465:2;8454:9;8450:18;8442:26;;8478:71;8546:1;8535:9;8531:17;8522:6;8478:71;:::i;:::-;8334:222;;;;:::o;8562:60::-;8590:3;8611:5;8604:12;;8562:60;;;:::o;8628:142::-;8678:9;8711:53;8729:34;8738:24;8756:5;8738:24;:::i;:::-;8729:34;:::i;:::-;8711:53;:::i;:::-;8698:66;;8628:142;;;:::o;8776:126::-;8826:9;8859:37;8890:5;8859:37;:::i;:::-;8846:50;;8776:126;;;:::o;8908:158::-;8990:9;9023:37;9054:5;9023:37;:::i;:::-;9010:50;;8908:158;;;:::o;9072:195::-;9191:69;9254:5;9191:69;:::i;:::-;9186:3;9179:82;9072:195;;:::o;9273:286::-;9398:4;9436:2;9425:9;9421:18;9413:26;;9449:103;9549:1;9538:9;9534:17;9525:6;9449:103;:::i;:::-;9273:286;;;;:::o;9565:117::-;9674:1;9671;9664:12;9688:180;9736:77;9733:1;9726:88;9833:4;9830:1;9823:15;9857:4;9854:1;9847:15;9874:281;9957:27;9979:4;9957:27;:::i;:::-;9949:6;9945:40;10087:6;10075:10;10072:22;10051:18;10039:10;10036:34;10033:62;10030:88;;;10098:18;;:::i;:::-;10030:88;10138:10;10134:2;10127:22;9917:238;9874:281;;:::o;10161:129::-;10195:6;10222:20;;:::i;:::-;10212:30;;10251:33;10279:4;10271:6;10251:33;:::i;:::-;10161:129;;;:::o;10296:308::-;10358:4;10448:18;10440:6;10437:30;10434:56;;;10470:18;;:::i;:::-;10434:56;10508:29;10530:6;10508:29;:::i;:::-;10500:37;;10592:4;10586;10582:15;10574:23;;10296:308;;;:::o;10610:146::-;10707:6;10702:3;10697;10684:30;10748:1;10739:6;10734:3;10730:16;10723:27;10610:146;;;:::o;10762:425::-;10840:5;10865:66;10881:49;10923:6;10881:49;:::i;:::-;10865:66;:::i;:::-;10856:75;;10954:6;10947:5;10940:21;10992:4;10985:5;10981:16;11030:3;11021:6;11016:3;11012:16;11009:25;11006:112;;;11037:79;;:::i;:::-;11006:112;11127:54;11174:6;11169:3;11164;11127:54;:::i;:::-;10846:341;10762:425;;;;;:::o;11207:340::-;11263:5;11312:3;11305:4;11297:6;11293:17;11289:27;11279:122;;11320:79;;:::i;:::-;11279:122;11437:6;11424:20;11462:79;11537:3;11529:6;11522:4;11514:6;11510:17;11462:79;:::i;:::-;11453:88;;11269:278;11207:340;;;;:::o;11553:509::-;11622:6;11671:2;11659:9;11650:7;11646:23;11642:32;11639:119;;;11677:79;;:::i;:::-;11639:119;11825:1;11814:9;11810:17;11797:31;11855:18;11847:6;11844:30;11841:117;;;11877:79;;:::i;:::-;11841:117;11982:63;12037:7;12028:6;12017:9;12013:22;11982:63;:::i;:::-;11972:73;;11768:287;11553:509;;;;:::o;12068:329::-;12127:6;12176:2;12164:9;12155:7;12151:23;12147:32;12144:119;;;12182:79;;:::i;:::-;12144:119;12302:1;12327:53;12372:7;12363:6;12352:9;12348:22;12327:53;:::i;:::-;12317:63;;12273:117;12068:329;;;;:::o;12403:122::-;12476:24;12494:5;12476:24;:::i;:::-;12469:5;12466:35;12456:63;;12515:1;12512;12505:12;12456:63;12403:122;:::o;12531:139::-;12577:5;12615:6;12602:20;12593:29;;12631:33;12658:5;12631:33;:::i;:::-;12531:139;;;;:::o;12676:329::-;12735:6;12784:2;12772:9;12763:7;12759:23;12755:32;12752:119;;;12790:79;;:::i;:::-;12752:119;12910:1;12935:53;12980:7;12971:6;12960:9;12956:22;12935:53;:::i;:::-;12925:63;;12881:117;12676:329;;;;:::o;13011:114::-;13078:6;13112:5;13106:12;13096:22;;13011:114;;;:::o;13131:184::-;13230:11;13264:6;13259:3;13252:19;13304:4;13299:3;13295:14;13280:29;;13131:184;;;;:::o;13321:132::-;13388:4;13411:3;13403:11;;13441:4;13436:3;13432:14;13424:22;;13321:132;;;:::o;13459:108::-;13536:24;13554:5;13536:24;:::i;:::-;13531:3;13524:37;13459:108;;:::o;13573:179::-;13642:10;13663:46;13705:3;13697:6;13663:46;:::i;:::-;13741:4;13736:3;13732:14;13718:28;;13573:179;;;;:::o;13758:113::-;13828:4;13860;13855:3;13851:14;13843:22;;13758:113;;;:::o;13907:732::-;14026:3;14055:54;14103:5;14055:54;:::i;:::-;14125:86;14204:6;14199:3;14125:86;:::i;:::-;14118:93;;14235:56;14285:5;14235:56;:::i;:::-;14314:7;14345:1;14330:284;14355:6;14352:1;14349:13;14330:284;;;14431:6;14425:13;14458:63;14517:3;14502:13;14458:63;:::i;:::-;14451:70;;14544:60;14597:6;14544:60;:::i;:::-;14534:70;;14390:224;14377:1;14374;14370:9;14365:14;;14330:284;;;14334:14;14630:3;14623:10;;14031:608;;;13907:732;;;;:::o;14645:373::-;14788:4;14826:2;14815:9;14811:18;14803:26;;14875:9;14869:4;14865:20;14861:1;14850:9;14846:17;14839:47;14903:108;15006:4;14997:6;14903:108;:::i;:::-;14895:116;;14645:373;;;;:::o;15024:468::-;15089:6;15097;15146:2;15134:9;15125:7;15121:23;15117:32;15114:119;;;15152:79;;:::i;:::-;15114:119;15272:1;15297:53;15342:7;15333:6;15322:9;15318:22;15297:53;:::i;:::-;15287:63;;15243:117;15399:2;15425:50;15467:7;15458:6;15447:9;15443:22;15425:50;:::i;:::-;15415:60;;15370:115;15024:468;;;;;:::o;15498:307::-;15559:4;15649:18;15641:6;15638:30;15635:56;;;15671:18;;:::i;:::-;15635:56;15709:29;15731:6;15709:29;:::i;:::-;15701:37;;15793:4;15787;15783:15;15775:23;;15498:307;;;:::o;15811:423::-;15888:5;15913:65;15929:48;15970:6;15929:48;:::i;:::-;15913:65;:::i;:::-;15904:74;;16001:6;15994:5;15987:21;16039:4;16032:5;16028:16;16077:3;16068:6;16063:3;16059:16;16056:25;16053:112;;;16084:79;;:::i;:::-;16053:112;16174:54;16221:6;16216:3;16211;16174:54;:::i;:::-;15894:340;15811:423;;;;;:::o;16253:338::-;16308:5;16357:3;16350:4;16342:6;16338:17;16334:27;16324:122;;16365:79;;:::i;:::-;16324:122;16482:6;16469:20;16507:78;16581:3;16573:6;16566:4;16558:6;16554:17;16507:78;:::i;:::-;16498:87;;16314:277;16253:338;;;;:::o;16597:943::-;16692:6;16700;16708;16716;16765:3;16753:9;16744:7;16740:23;16736:33;16733:120;;;16772:79;;:::i;:::-;16733:120;16892:1;16917:53;16962:7;16953:6;16942:9;16938:22;16917:53;:::i;:::-;16907:63;;16863:117;17019:2;17045:53;17090:7;17081:6;17070:9;17066:22;17045:53;:::i;:::-;17035:63;;16990:118;17147:2;17173:53;17218:7;17209:6;17198:9;17194:22;17173:53;:::i;:::-;17163:63;;17118:118;17303:2;17292:9;17288:18;17275:32;17334:18;17326:6;17323:30;17320:117;;;17356:79;;:::i;:::-;17320:117;17461:62;17515:7;17506:6;17495:9;17491:22;17461:62;:::i;:::-;17451:72;;17246:287;16597:943;;;;;;;:::o;17546:474::-;17614:6;17622;17671:2;17659:9;17650:7;17646:23;17642:32;17639:119;;;17677:79;;:::i;:::-;17639:119;17797:1;17822:53;17867:7;17858:6;17847:9;17843:22;17822:53;:::i;:::-;17812:63;;17768:117;17924:2;17950:53;17995:7;17986:6;17975:9;17971:22;17950:53;:::i;:::-;17940:63;;17895:118;17546:474;;;;;:::o;18026:::-;18094:6;18102;18151:2;18139:9;18130:7;18126:23;18122:32;18119:119;;;18157:79;;:::i;:::-;18119:119;18277:1;18302:53;18347:7;18338:6;18327:9;18323:22;18302:53;:::i;:::-;18292:63;;18248:117;18404:2;18430:53;18475:7;18466:6;18455:9;18451:22;18430:53;:::i;:::-;18420:63;;18375:118;18026:474;;;;;:::o;18506:181::-;18646:33;18642:1;18634:6;18630:14;18623:57;18506:181;:::o;18693:366::-;18835:3;18856:67;18920:2;18915:3;18856:67;:::i;:::-;18849:74;;18932:93;19021:3;18932:93;:::i;:::-;19050:2;19045:3;19041:12;19034:19;;18693:366;;;:::o;19065:419::-;19231:4;19269:2;19258:9;19254:18;19246:26;;19318:9;19312:4;19308:20;19304:1;19293:9;19289:17;19282:47;19346:131;19472:4;19346:131;:::i;:::-;19338:139;;19065:419;;;:::o;19490:221::-;19630:34;19626:1;19618:6;19614:14;19607:58;19699:4;19694:2;19686:6;19682:15;19675:29;19490:221;:::o;19717:366::-;19859:3;19880:67;19944:2;19939:3;19880:67;:::i;:::-;19873:74;;19956:93;20045:3;19956:93;:::i;:::-;20074:2;20069:3;20065:12;20058:19;;19717:366;;;:::o;20089:419::-;20255:4;20293:2;20282:9;20278:18;20270:26;;20342:9;20336:4;20332:20;20328:1;20317:9;20313:17;20306:47;20370:131;20496:4;20370:131;:::i;:::-;20362:139;;20089:419;;;:::o;20514:94::-;20547:8;20595:5;20591:2;20587:14;20566:35;;20514:94;;;:::o;20614:::-;20653:7;20682:20;20696:5;20682:20;:::i;:::-;20671:31;;20614:94;;;:::o;20714:100::-;20753:7;20782:26;20802:5;20782:26;:::i;:::-;20771:37;;20714:100;;;:::o;20820:157::-;20925:45;20945:24;20963:5;20945:24;:::i;:::-;20925:45;:::i;:::-;20920:3;20913:58;20820:157;;:::o;20983:256::-;21095:3;21110:75;21181:3;21172:6;21110:75;:::i;:::-;21210:2;21205:3;21201:12;21194:19;;21230:3;21223:10;;20983:256;;;;:::o;21245:181::-;21385:33;21381:1;21373:6;21369:14;21362:57;21245:181;:::o;21432:366::-;21574:3;21595:67;21659:2;21654:3;21595:67;:::i;:::-;21588:74;;21671:93;21760:3;21671:93;:::i;:::-;21789:2;21784:3;21780:12;21773:19;;21432:366;;;:::o;21804:419::-;21970:4;22008:2;21997:9;21993:18;21985:26;;22057:9;22051:4;22047:20;22043:1;22032:9;22028:17;22021:47;22085:131;22211:4;22085:131;:::i;:::-;22077:139;;21804:419;;;:::o;22229:180::-;22277:77;22274:1;22267:88;22374:4;22371:1;22364:15;22398:4;22395:1;22388:15;22415:191;22455:3;22474:20;22492:1;22474:20;:::i;:::-;22469:25;;22508:20;22526:1;22508:20;:::i;:::-;22503:25;;22551:1;22548;22544:9;22537:16;;22572:3;22569:1;22566:10;22563:36;;;22579:18;;:::i;:::-;22563:36;22415:191;;;;:::o;22612:222::-;22752:34;22748:1;22740:6;22736:14;22729:58;22821:5;22816:2;22808:6;22804:15;22797:30;22612:222;:::o;22840:366::-;22982:3;23003:67;23067:2;23062:3;23003:67;:::i;:::-;22996:74;;23079:93;23168:3;23079:93;:::i;:::-;23197:2;23192:3;23188:12;23181:19;;22840:366;;;:::o;23212:419::-;23378:4;23416:2;23405:9;23401:18;23393:26;;23465:9;23459:4;23455:20;23451:1;23440:9;23436:17;23429:47;23493:131;23619:4;23493:131;:::i;:::-;23485:139;;23212:419;;;:::o;23637:182::-;23777:34;23773:1;23765:6;23761:14;23754:58;23637:182;:::o;23825:366::-;23967:3;23988:67;24052:2;24047:3;23988:67;:::i;:::-;23981:74;;24064:93;24153:3;24064:93;:::i;:::-;24182:2;24177:3;24173:12;24166:19;;23825:366;;;:::o;24197:419::-;24363:4;24401:2;24390:9;24386:18;24378:26;;24450:9;24444:4;24440:20;24436:1;24425:9;24421:17;24414:47;24478:131;24604:4;24478:131;:::i;:::-;24470:139;;24197:419;;;:::o;24622:223::-;24762:34;24758:1;24750:6;24746:14;24739:58;24831:6;24826:2;24818:6;24814:15;24807:31;24622:223;:::o;24851:366::-;24993:3;25014:67;25078:2;25073:3;25014:67;:::i;:::-;25007:74;;25090:93;25179:3;25090:93;:::i;:::-;25208:2;25203:3;25199:12;25192:19;;24851:366;;;:::o;25223:419::-;25389:4;25427:2;25416:9;25412:18;25404:26;;25476:9;25470:4;25466:20;25462:1;25451:9;25447:17;25440:47;25504:131;25630:4;25504:131;:::i;:::-;25496:139;;25223:419;;;:::o;25648:410::-;25688:7;25711:20;25729:1;25711:20;:::i;:::-;25706:25;;25745:20;25763:1;25745:20;:::i;:::-;25740:25;;25800:1;25797;25793:9;25822:30;25840:11;25822:30;:::i;:::-;25811:41;;26001:1;25992:7;25988:15;25985:1;25982:22;25962:1;25955:9;25935:83;25912:139;;26031:18;;:::i;:::-;25912:139;25696:362;25648:410;;;;:::o;26064:176::-;26204:28;26200:1;26192:6;26188:14;26181:52;26064:176;:::o;26246:366::-;26388:3;26409:67;26473:2;26468:3;26409:67;:::i;:::-;26402:74;;26485:93;26574:3;26485:93;:::i;:::-;26603:2;26598:3;26594:12;26587:19;;26246:366;;;:::o;26618:419::-;26784:4;26822:2;26811:9;26807:18;26799:26;;26871:9;26865:4;26861:20;26857:1;26846:9;26842:17;26835:47;26899:131;27025:4;26899:131;:::i;:::-;26891:139;;26618:419;;;:::o;27043:180::-;27091:77;27088:1;27081:88;27188:4;27185:1;27178:15;27212:4;27209:1;27202:15;27229:320;27273:6;27310:1;27304:4;27300:12;27290:22;;27357:1;27351:4;27347:12;27378:18;27368:81;;27434:4;27426:6;27422:17;27412:27;;27368:81;27496:2;27488:6;27485:14;27465:18;27462:38;27459:84;;27515:18;;:::i;:::-;27459:84;27280:269;27229:320;;;:::o;27555:141::-;27604:4;27627:3;27619:11;;27650:3;27647:1;27640:14;27684:4;27681:1;27671:18;27663:26;;27555:141;;;:::o;27702:93::-;27739:6;27786:2;27781;27774:5;27770:14;27766:23;27756:33;;27702:93;;;:::o;27801:107::-;27845:8;27895:5;27889:4;27885:16;27864:37;;27801:107;;;;:::o;27914:393::-;27983:6;28033:1;28021:10;28017:18;28056:97;28086:66;28075:9;28056:97;:::i;:::-;28174:39;28204:8;28193:9;28174:39;:::i;:::-;28162:51;;28246:4;28242:9;28235:5;28231:21;28222:30;;28295:4;28285:8;28281:19;28274:5;28271:30;28261:40;;27990:317;;27914:393;;;;;:::o;28313:142::-;28363:9;28396:53;28414:34;28423:24;28441:5;28423:24;:::i;:::-;28414:34;:::i;:::-;28396:53;:::i;:::-;28383:66;;28313:142;;;:::o;28461:75::-;28504:3;28525:5;28518:12;;28461:75;;;:::o;28542:269::-;28652:39;28683:7;28652:39;:::i;:::-;28713:91;28762:41;28786:16;28762:41;:::i;:::-;28754:6;28747:4;28741:11;28713:91;:::i;:::-;28707:4;28700:105;28618:193;28542:269;;;:::o;28817:73::-;28862:3;28817:73;:::o;28896:189::-;28973:32;;:::i;:::-;29014:65;29072:6;29064;29058:4;29014:65;:::i;:::-;28949:136;28896:189;;:::o;29091:186::-;29151:120;29168:3;29161:5;29158:14;29151:120;;;29222:39;29259:1;29252:5;29222:39;:::i;:::-;29195:1;29188:5;29184:13;29175:22;;29151:120;;;29091:186;;:::o;29283:543::-;29384:2;29379:3;29376:11;29373:446;;;29418:38;29450:5;29418:38;:::i;:::-;29502:29;29520:10;29502:29;:::i;:::-;29492:8;29488:44;29685:2;29673:10;29670:18;29667:49;;;29706:8;29691:23;;29667:49;29729:80;29785:22;29803:3;29785:22;:::i;:::-;29775:8;29771:37;29758:11;29729:80;:::i;:::-;29388:431;;29373:446;29283:543;;;:::o;29832:117::-;29886:8;29936:5;29930:4;29926:16;29905:37;;29832:117;;;;:::o;29955:169::-;29999:6;30032:51;30080:1;30076:6;30068:5;30065:1;30061:13;30032:51;:::i;:::-;30028:56;30113:4;30107;30103:15;30093:25;;30006:118;29955:169;;;;:::o;30129:295::-;30205:4;30351:29;30376:3;30370:4;30351:29;:::i;:::-;30343:37;;30413:3;30410:1;30406:11;30400:4;30397:21;30389:29;;30129:295;;;;:::o;30429:1395::-;30546:37;30579:3;30546:37;:::i;:::-;30648:18;30640:6;30637:30;30634:56;;;30670:18;;:::i;:::-;30634:56;30714:38;30746:4;30740:11;30714:38;:::i;:::-;30799:67;30859:6;30851;30845:4;30799:67;:::i;:::-;30893:1;30917:4;30904:17;;30949:2;30941:6;30938:14;30966:1;30961:618;;;;31623:1;31640:6;31637:77;;;31689:9;31684:3;31680:19;31674:26;31665:35;;31637:77;31740:67;31800:6;31793:5;31740:67;:::i;:::-;31734:4;31727:81;31596:222;30931:887;;30961:618;31013:4;31009:9;31001:6;30997:22;31047:37;31079:4;31047:37;:::i;:::-;31106:1;31120:208;31134:7;31131:1;31128:14;31120:208;;;31213:9;31208:3;31204:19;31198:26;31190:6;31183:42;31264:1;31256:6;31252:14;31242:24;;31311:2;31300:9;31296:18;31283:31;;31157:4;31154:1;31150:12;31145:17;;31120:208;;;31356:6;31347:7;31344:19;31341:179;;;31414:9;31409:3;31405:19;31399:26;31457:48;31499:4;31491:6;31487:17;31476:9;31457:48;:::i;:::-;31449:6;31442:64;31364:156;31341:179;31566:1;31562;31554:6;31550:14;31546:22;31540:4;31533:36;30968:611;;;30931:887;;30521:1303;;;30429:1395;;:::o;31830:180::-;31878:77;31875:1;31868:88;31975:4;31972:1;31965:15;31999:4;31996:1;31989:15;32016:176;32156:28;32152:1;32144:6;32140:14;32133:52;32016:176;:::o;32198:366::-;32340:3;32361:67;32425:2;32420:3;32361:67;:::i;:::-;32354:74;;32437:93;32526:3;32437:93;:::i;:::-;32555:2;32550:3;32546:12;32539:19;;32198:366;;;:::o;32570:419::-;32736:4;32774:2;32763:9;32759:18;32751:26;;32823:9;32817:4;32813:20;32809:1;32798:9;32794:17;32787:47;32851:131;32977:4;32851:131;:::i;:::-;32843:139;;32570:419;;;:::o;32995:181::-;33135:33;33131:1;33123:6;33119:14;33112:57;32995:181;:::o;33182:366::-;33324:3;33345:67;33409:2;33404:3;33345:67;:::i;:::-;33338:74;;33421:93;33510:3;33421:93;:::i;:::-;33539:2;33534:3;33530:12;33523:19;;33182:366;;;:::o;33554:419::-;33720:4;33758:2;33747:9;33743:18;33735:26;;33807:9;33801:4;33797:20;33793:1;33782:9;33778:17;33771:47;33835:131;33961:4;33835:131;:::i;:::-;33827:139;;33554:419;;;:::o;33979:226::-;34119:34;34115:1;34107:6;34103:14;34096:58;34188:9;34183:2;34175:6;34171:15;34164:34;33979:226;:::o;34211:366::-;34353:3;34374:67;34438:2;34433:3;34374:67;:::i;:::-;34367:74;;34450:93;34539:3;34450:93;:::i;:::-;34568:2;34563:3;34559:12;34552:19;;34211:366;;;:::o;34583:419::-;34749:4;34787:2;34776:9;34772:18;34764:26;;34836:9;34830:4;34826:20;34822:1;34811:9;34807:17;34800:47;34864:131;34990:4;34864:131;:::i;:::-;34856:139;;34583:419;;;:::o;35008:168::-;35148:20;35144:1;35136:6;35132:14;35125:44;35008:168;:::o;35182:366::-;35324:3;35345:67;35409:2;35404:3;35345:67;:::i;:::-;35338:74;;35421:93;35510:3;35421:93;:::i;:::-;35539:2;35534:3;35530:12;35523:19;;35182:366;;;:::o;35554:419::-;35720:4;35758:2;35747:9;35743:18;35735:26;;35807:9;35801:4;35797:20;35793:1;35782:9;35778:17;35771:47;35835:131;35961:4;35835:131;:::i;:::-;35827:139;;35554:419;;;:::o;35979:176::-;36119:28;36115:1;36107:6;36103:14;36096:52;35979:176;:::o;36161:366::-;36303:3;36324:67;36388:2;36383:3;36324:67;:::i;:::-;36317:74;;36400:93;36489:3;36400:93;:::i;:::-;36518:2;36513:3;36509:12;36502:19;;36161:366;;;:::o;36533:419::-;36699:4;36737:2;36726:9;36722:18;36714:26;;36786:9;36780:4;36776:20;36772:1;36761:9;36757:17;36750:47;36814:131;36940:4;36814:131;:::i;:::-;36806:139;;36533:419;;;:::o;36958:172::-;37098:24;37094:1;37086:6;37082:14;37075:48;36958:172;:::o;37136:366::-;37278:3;37299:67;37363:2;37358:3;37299:67;:::i;:::-;37292:74;;37375:93;37464:3;37375:93;:::i;:::-;37493:2;37488:3;37484:12;37477:19;;37136:366;;;:::o;37508:419::-;37674:4;37712:2;37701:9;37697:18;37689:26;;37761:9;37755:4;37751:20;37747:1;37736:9;37732:17;37725:47;37789:131;37915:4;37789:131;:::i;:::-;37781:139;;37508:419;;;:::o;37933:235::-;38073:34;38069:1;38061:6;38057:14;38050:58;38142:18;38137:2;38129:6;38125:15;38118:43;37933:235;:::o;38174:366::-;38316:3;38337:67;38401:2;38396:3;38337:67;:::i;:::-;38330:74;;38413:93;38502:3;38413:93;:::i;:::-;38531:2;38526:3;38522:12;38515:19;;38174:366;;;:::o;38546:419::-;38712:4;38750:2;38739:9;38735:18;38727:26;;38799:9;38793:4;38789:20;38785:1;38774:9;38770:17;38763:47;38827:131;38953:4;38827:131;:::i;:::-;38819:139;;38546:419;;;:::o;38971:148::-;39073:11;39110:3;39095:18;;38971:148;;;;:::o;39125:390::-;39231:3;39259:39;39292:5;39259:39;:::i;:::-;39314:89;39396:6;39391:3;39314:89;:::i;:::-;39307:96;;39412:65;39470:6;39465:3;39458:4;39451:5;39447:16;39412:65;:::i;:::-;39502:6;39497:3;39493:16;39486:23;;39235:280;39125:390;;;;:::o;39521:155::-;39661:7;39657:1;39649:6;39645:14;39638:31;39521:155;:::o;39682:400::-;39842:3;39863:84;39945:1;39940:3;39863:84;:::i;:::-;39856:91;;39956:93;40045:3;39956:93;:::i;:::-;40074:1;40069:3;40065:11;40058:18;;39682:400;;;:::o;40088:701::-;40369:3;40391:95;40482:3;40473:6;40391:95;:::i;:::-;40384:102;;40503:95;40594:3;40585:6;40503:95;:::i;:::-;40496:102;;40615:148;40759:3;40615:148;:::i;:::-;40608:155;;40780:3;40773:10;;40088:701;;;;;:::o;40795:225::-;40935:34;40931:1;40923:6;40919:14;40912:58;41004:8;40999:2;40991:6;40987:15;40980:33;40795:225;:::o;41026:366::-;41168:3;41189:67;41253:2;41248:3;41189:67;:::i;:::-;41182:74;;41265:93;41354:3;41265:93;:::i;:::-;41383:2;41378:3;41374:12;41367:19;;41026:366;;;:::o;41398:419::-;41564:4;41602:2;41591:9;41587:18;41579:26;;41651:9;41645:4;41641:20;41637:1;41626:9;41622:17;41615:47;41679:131;41805:4;41679:131;:::i;:::-;41671:139;;41398:419;;;:::o;41823:182::-;41963:34;41959:1;41951:6;41947:14;41940:58;41823:182;:::o;42011:366::-;42153:3;42174:67;42238:2;42233:3;42174:67;:::i;:::-;42167:74;;42250:93;42339:3;42250:93;:::i;:::-;42368:2;42363:3;42359:12;42352:19;;42011:366;;;:::o;42383:419::-;42549:4;42587:2;42576:9;42572:18;42564:26;;42636:9;42630:4;42626:20;42622:1;42611:9;42607:17;42600:47;42664:131;42790:4;42664:131;:::i;:::-;42656:139;;42383:419;;;:::o;42808:181::-;42948:33;42944:1;42936:6;42932:14;42925:57;42808:181;:::o;42995:366::-;43137:3;43158:67;43222:2;43217:3;43158:67;:::i;:::-;43151:74;;43234:93;43323:3;43234:93;:::i;:::-;43352:2;43347:3;43343:12;43336:19;;42995:366;;;:::o;43367:419::-;43533:4;43571:2;43560:9;43556:18;43548:26;;43620:9;43614:4;43610:20;43606:1;43595:9;43591:17;43584:47;43648:131;43774:4;43648:131;:::i;:::-;43640:139;;43367:419;;;:::o;43792:332::-;43913:4;43951:2;43940:9;43936:18;43928:26;;43964:71;44032:1;44021:9;44017:17;44008:6;43964:71;:::i;:::-;44045:72;44113:2;44102:9;44098:18;44089:6;44045:72;:::i;:::-;43792:332;;;;;:::o;44130:137::-;44184:5;44215:6;44209:13;44200:22;;44231:30;44255:5;44231:30;:::i;:::-;44130:137;;;;:::o;44273:345::-;44340:6;44389:2;44377:9;44368:7;44364:23;44360:32;44357:119;;;44395:79;;:::i;:::-;44357:119;44515:1;44540:61;44593:7;44584:6;44573:9;44569:22;44540:61;:::i;:::-;44530:71;;44486:125;44273:345;;;;:::o;44624:233::-;44663:3;44686:24;44704:5;44686:24;:::i;:::-;44677:33;;44732:66;44725:5;44722:77;44719:103;;44802:18;;:::i;:::-;44719:103;44849:1;44842:5;44838:13;44831:20;;44624:233;;;:::o;44863:98::-;44914:6;44948:5;44942:12;44932:22;;44863:98;;;:::o;44967:168::-;45050:11;45084:6;45079:3;45072:19;45124:4;45119:3;45115:14;45100:29;;44967:168;;;;:::o;45141:373::-;45227:3;45255:38;45287:5;45255:38;:::i;:::-;45309:70;45372:6;45367:3;45309:70;:::i;:::-;45302:77;;45388:65;45446:6;45441:3;45434:4;45427:5;45423:16;45388:65;:::i;:::-;45478:29;45500:6;45478:29;:::i;:::-;45473:3;45469:39;45462:46;;45231:283;45141:373;;;;:::o;45520:640::-;45715:4;45753:3;45742:9;45738:19;45730:27;;45767:71;45835:1;45824:9;45820:17;45811:6;45767:71;:::i;:::-;45848:72;45916:2;45905:9;45901:18;45892:6;45848:72;:::i;:::-;45930;45998:2;45987:9;45983:18;45974:6;45930:72;:::i;:::-;46049:9;46043:4;46039:20;46034:2;46023:9;46019:18;46012:48;46077:76;46148:4;46139:6;46077:76;:::i;:::-;46069:84;;45520:640;;;;;;;:::o;46166:141::-;46222:5;46253:6;46247:13;46238:22;;46269:32;46295:5;46269:32;:::i;:::-;46166:141;;;;:::o;46313:349::-;46382:6;46431:2;46419:9;46410:7;46406:23;46402:32;46399:119;;;46437:79;;:::i;:::-;46399:119;46557:1;46582:63;46637:7;46628:6;46617:9;46613:22;46582:63;:::i;:::-;46572:73;;46528:127;46313:349;;;;:::o

Swarm Source

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