ETH Price: $3,398.04 (-1.77%)
Gas: 6 Gwei

GoblinImposters (SUS)
 

Overview

TokenID

911

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

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

OVERVIEW

Welcome to the imposter's lobby where things are a little more suspicious than it seems. The quest of taking down the goblin king was always on the list. A total of 5,555 imposters all unique, are on their way toward the land of goblins.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GoblinImposters

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/**
 * @title GoblinImposters
 */
pragma solidity ^0.8.0;
pragma solidity ^0.8.0;
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
pragma solidity ^0.8.0;
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
pragma solidity ^0.8.0;
interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
pragma solidity ^0.8.0;
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
pragma solidity ^0.8.0;
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
pragma solidity ^0.8.1;
library Address {
    function isContract(address account) internal view returns (bool) {

        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
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() {
        _setOwner(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {
    // word because each write operation emits an extra SLOAD to first read the
    // back. This is the compiler's defense against contract upgrades and

    // but in exchange the refund on every call to nonReentrant will be lower in
    // transaction's gas, it is best to keep them low in cases like this one, to
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

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

        _;
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 0;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    string private _name;
    string private _symbol;
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) private _ownerships;
    mapping(address => AddressData) private _addressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }
    function totalSupply() public view override returns (uint256) {
        return currentIndex;
    }
    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view override returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: balance query for the zero address"
        );
        return uint256(_addressData[owner].balance);
    }

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

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

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

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

        revert("ERC721A: unable to determine the owner of token");
    }
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");

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

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

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        require(operator != _msgSender(), "ERC721A: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

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

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

        uint256 updatedIndex = startTokenId;

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

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

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

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

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

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

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

    uint256 public nextOwnerToExplicitlySet = 0;
    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

pragma solidity ^0.8.0;
library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

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

contract GoblinImposters is Ownable, ERC721A, ReentrancyGuard {

    bool public publicSale = false;
    bool public whitelistSale = false;
    bool public revealed = false;
    uint256 public maxPerTx = 4;
    uint256 public maxPerAddress = 4;
    uint256 public maxToken = 10000;
    uint256 public maxPublisale = 9500;
    uint256 public price = 0.0099 ether;
    string private Name="GoblinImposters";
    string private Symbol="SUS";
    string private _baseTokenURI = "";
    string private _notRevealedUri="ipfs://QmQL2ofZ8BhVuGMgGbUvMukSAY3qXGZ8LyPzA4F6wMGqTT";

    bytes32 root;

    constructor()
        ERC721A(Name, Symbol, 1000, maxToken)
    {}

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

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

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

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        if(revealed == false) {
            return _notRevealedUri;
        }
        string memory _tokenURI = super.tokenURI(tokenId);
        return
            bytes(_tokenURI).length > 0
                ? string(abi.encodePacked(_tokenURI, ".json"))
                : "";
    }

    function verify(bytes32[] memory proof) internal view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(proof, root, leaf);
    }

    function mint(uint256 quantity, bytes32[] memory proof) external payable callerIsUser {
        require(whitelistSale || publicSale, "SALE_HAS_NOT_STARTED_YET");
        require(numberMinted(msg.sender) + quantity <= maxPerAddress, "PER_WALLET_LIMIT_REACHED");
        require(quantity > 1, "INVALID_QUANTITY");
        require(quantity <= maxPerTx, "CANNOT_MINT_THAT_MANY");
        require(totalSupply() + quantity <= maxPublisale, "NOT_ENOUGH_SUPPLY_TO_MINT_DESIRED_AMOUNT");
        if(whitelistSale){
            require(verify(proof), "ADDRESS_NOT_WHITELISTED");
        }
        if(numberMinted(msg.sender) > 0){
            require(msg.value >= price * quantity, "INVALID_ETH");
        }else{
            if(whitelistSale || verify(proof)) require(msg.value >= (price * quantity) - 2*price, "INVALID_ETH");
            else require(msg.value >= (price * quantity) - price, "INVALID_ETH");
        }
        _safeMint(msg.sender, quantity);
    }

    function teamAllocationMint(address _address, uint256 quantity) external onlyOwner {
        require(totalSupply() + quantity <= maxToken, "NOT_ENOUGH_SUPPLY_TO_GIVEAWAY_DESIRED_AMOUNT");
        _safeMint(_address, quantity);
    }

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

    function setPrice(uint256 _PriceInWEI) external onlyOwner {
        price = _PriceInWEI;
    }

    function setRoot(bytes32 _root) external onlyOwner {
        root = _root;
    }

    function flipPublicSaleState() external onlyOwner {
        publicSale = !publicSale;
    }

    function flipWhitelistState() external onlyOwner {
        whitelistSale = !whitelistSale;
    }
    function flipRevealedState() external onlyOwner {
        revealed = !revealed;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }
    function setUnrevealedURI(string calldata baseURI) external onlyOwner {
        _notRevealedUri = baseURI;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipRevealedState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhitelistState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublisale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PriceInWEI","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setUnrevealedURI","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":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"teamAllocationMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600060015560006008556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506004600b556004600c55612710600d5561251c600e5566232bff5f46c000600f556040518060400160405280600f81526020017f476f626c696e496d706f7374657273000000000000000000000000000000000081525060109080519060200190620000cd9291906200047c565b506040518060400160405280600381526020017f5355530000000000000000000000000000000000000000000000000000000000815250601190805190602001906200011b9291906200047c565b506040518060200160405280600081525060129080519060200190620001439291906200047c565b5060405180606001604052806035815260200162005a9d6035913960139080519060200190620001759291906200047c565b503480156200018357600080fd5b50601080546200019390620005cf565b80601f0160208091040260200160405190810160405280929190818152602001828054620001c190620005cf565b8015620002125780601f10620001e65761010080835404028352916020019162000212565b820191906000526020600020905b815481529060010190602001808311620001f457829003601f168201915b5050505050601180546200022690620005cf565b80601f01602080910402602001604051908101604052809291908181526020018280546200025490620005cf565b8015620002a55780601f106200027957610100808354040283529160200191620002a5565b820191906000526020600020905b8154815290600101906020018083116200028757829003601f168201915b50505050506103e8600d54620002d0620002c4620003b060201b60201c565b620003b860201b60201c565b6000811162000316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030d906200059c565b60405180910390fd5b600082116200035c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000353906200057a565b60405180910390fd5b8360029080519060200190620003749291906200047c565b5082600390805190602001906200038d9291906200047c565b508160a081815250508060808181525050505050506001600981905550620006d2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200048a90620005cf565b90600052602060002090601f016020900481019282620004ae5760008555620004fa565b82601f10620004c957805160ff1916838001178555620004fa565b82800160010185558215620004fa579182015b82811115620004f9578251825591602001919060010190620004dc565b5b5090506200050991906200050d565b5090565b5b80821115620005285760008160009055506001016200050e565b5090565b60006200053b602783620005be565b9150620005488262000634565b604082019050919050565b600062000562602e83620005be565b91506200056f8262000683565b604082019050919050565b6000602082019050818103600083015262000595816200052c565b9050919050565b60006020820190508181036000830152620005b78162000553565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620005e857607f821691505b60208210811415620005ff57620005fe62000605565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a05161539a62000703600039600081816127a1015281816127ca0152612e3e01526000505061539a6000f3fe60806040526004361061023b5760003560e01c806391b7f5ed1161012e578063ce979712116100ab578063ea50ac821161006f578063ea50ac8214610878578063f2fde38b1461088f578063f6fa26ab146108b8578063f968adbe146108cf578063fe2c7fee146108fa5761023b565b8063ce9797121461077f578063d7224ba0146107aa578063dab5f340146107d5578063dc33e681146107fe578063e985e9c51461083b5761023b565b8063a22cb465116100f2578063a22cb465146106a9578063b88d4fde146106d2578063ba41b0c6146106fb578063c87b56dd14610717578063ca69e323146107545761023b565b806391b7f5ed146105d65780639231ab2a146105ff57806395d89b411461063c578063a035b1fe14610667578063a10866ef146106925761023b565b80633ccfd60b116101bc5780636352211e116101805780636352211e146104ef578063639814e01461052c57806370a0823114610557578063715018a6146105945780638da5cb5b146105ab5761023b565b80633ccfd60b1461041e57806342842e0e146104355780634f6ccce71461045e578063518302271461049b57806355f804b3146104c65761023b565b806318160ddd1161020357806318160ddd1461033757806323b872dd146103625780632f745c591461038b57806331ffd6f1146103c857806333bc1c5c146103f35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55780630aada2781461030e575b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906139d0565b610923565b6040516102749190614139565b60405180910390f35b34801561028957600080fd5b50610292610a6d565b60405161029f9190614154565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613a77565b610aff565b6040516102dc91906140d2565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613963565b610b84565b005b34801561031a57600080fd5b5061033560048036038101906103309190613963565b610c9d565b005b34801561034357600080fd5b5061034c610d7e565b6040516103599190614551565b60405180910390f35b34801561036e57600080fd5b506103896004803603810190610384919061384d565b610d88565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613963565b610d98565b6040516103bf9190614551565b60405180910390f35b3480156103d457600080fd5b506103dd610f96565b6040516103ea9190614139565b60405180910390f35b3480156103ff57600080fd5b50610408610fa9565b6040516104159190614139565b60405180910390f35b34801561042a57600080fd5b50610433610fbc565b005b34801561044157600080fd5b5061045c6004803603810190610457919061384d565b611081565b005b34801561046a57600080fd5b5061048560048036038101906104809190613a77565b6110a1565b6040516104929190614551565b60405180910390f35b3480156104a757600080fd5b506104b06110f4565b6040516104bd9190614139565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190613a2a565b611107565b005b3480156104fb57600080fd5b5061051660048036038101906105119190613a77565b611199565b60405161052391906140d2565b60405180910390f35b34801561053857600080fd5b506105416111af565b60405161054e9190614551565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906137e0565b6111b5565b60405161058b9190614551565b60405180910390f35b3480156105a057600080fd5b506105a961129e565b005b3480156105b757600080fd5b506105c0611326565b6040516105cd91906140d2565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613a77565b61134f565b005b34801561060b57600080fd5b5061062660048036038101906106219190613a77565b6113d5565b6040516106339190614536565b60405180910390f35b34801561064857600080fd5b506106516113ed565b60405161065e9190614154565b60405180910390f35b34801561067357600080fd5b5061067c61147f565b6040516106899190614551565b60405180910390f35b34801561069e57600080fd5b506106a7611485565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190613923565b61152d565b005b3480156106de57600080fd5b506106f960048036038101906106f491906138a0565b6116ae565b005b61071560048036038101906107109190613aa4565b61170a565b005b34801561072357600080fd5b5061073e60048036038101906107399190613a77565b611ad9565b60405161074b9190614154565b60405180910390f35b34801561076057600080fd5b50610769611c26565b6040516107769190614551565b60405180910390f35b34801561078b57600080fd5b50610794611c2c565b6040516107a19190614551565b60405180910390f35b3480156107b657600080fd5b506107bf611c32565b6040516107cc9190614551565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906139a3565b611c38565b005b34801561080a57600080fd5b50610825600480360381019061082091906137e0565b611cbe565b6040516108329190614551565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d919061380d565b611cd0565b60405161086f9190614139565b60405180910390f35b34801561088457600080fd5b5061088d611d64565b005b34801561089b57600080fd5b506108b660048036038101906108b191906137e0565b611e0c565b005b3480156108c457600080fd5b506108cd611f04565b005b3480156108db57600080fd5b506108e4611fac565b6040516108f19190614551565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613a2a565b611fb2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a665750610a6582612044565b5b9050919050565b606060028054610a7c906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa8906148da565b8015610af55780601f10610aca57610100808354040283529160200191610af5565b820191906000526020600020905b815481529060010190602001808311610ad857829003601f168201915b5050505050905090565b6000610b0a826120ae565b610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b40906144f6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8f82611199565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906143d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1f6120bc565b73ffffffffffffffffffffffffffffffffffffffff161480610c4e5750610c4d81610c486120bc565b611cd0565b5b610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c84906142d6565b60405180910390fd5b610c988383836120c4565b505050565b610ca56120bc565b73ffffffffffffffffffffffffffffffffffffffff16610cc3611326565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614336565b60405180910390fd5b600d5481610d25610d7e565b610d2f9190614677565b1115610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790614476565b60405180910390fd5b610d7a8282612176565b5050565b6000600154905090565b610d93838383612194565b505050565b6000610da3836111b5565b8210610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90614176565b60405180910390fd5b6000610dee610d7e565b905060008060005b83811015610f54576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ee857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f405786841415610f31578195505050505050610f90565b8380610f3c9061493d565b9450505b508080610f4c9061493d565b915050610df6565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f87906144b6565b60405180910390fd5b92915050565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b610fc46120bc565b73ffffffffffffffffffffffffffffffffffffffff16610fe2611326565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90614336565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561107e573d6000803e3d6000fd5b50565b61109c838383604051806020016040528060008152506116ae565b505050565b60006110ab610d7e565b82106110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614236565b60405180910390fd5b819050919050565b600a60029054906101000a900460ff1681565b61110f6120bc565b73ffffffffffffffffffffffffffffffffffffffff1661112d611326565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90614336565b60405180910390fd5b818160129190611194929190613521565b505050565b60006111a48261274d565b600001519050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d906142f6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112a66120bc565b73ffffffffffffffffffffffffffffffffffffffff166112c4611326565b73ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190614336565b60405180910390fd5b6113246000612950565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113576120bc565b73ffffffffffffffffffffffffffffffffffffffff16611375611326565b73ffffffffffffffffffffffffffffffffffffffff16146113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290614336565b60405180910390fd5b80600f8190555050565b6113dd6135a7565b6113e68261274d565b9050919050565b6060600380546113fc906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054611428906148da565b80156114755780601f1061144a57610100808354040283529160200191611475565b820191906000526020600020905b81548152906001019060200180831161145857829003601f168201915b5050505050905090565b600f5481565b61148d6120bc565b73ffffffffffffffffffffffffffffffffffffffff166114ab611326565b73ffffffffffffffffffffffffffffffffffffffff1614611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614336565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6115356120bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90614376565b60405180910390fd5b80600760006115b06120bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661165d6120bc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116a29190614139565b60405180910390a35050565b6116b9848484612194565b6116c584848484612a14565b611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90614416565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90614296565b60405180910390fd5b600a60019054906101000a900460ff168061179f5750600a60009054906101000a900460ff165b6117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d5906143f6565b60405180910390fd5b600c54826117eb33611cbe565b6117f59190614677565b1115611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906142b6565b60405180910390fd5b60018211611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614496565b60405180910390fd5b600b548211156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614196565b60405180910390fd5b600e54826118ca610d7e565b6118d49190614677565b1115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c906143b6565b60405180910390fd5b600a60019054906101000a900460ff16156119735761193381612bab565b611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990614216565b60405180910390fd5b5b600061197e33611cbe565b11156119d95781600f5461199291906146fe565b3410156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb906141d6565b60405180910390fd5b611acb565b600a60019054906101000a900460ff16806119f957506119f881612bab565b5b15611a6c57600f546002611a0d91906146fe565b82600f54611a1b91906146fe565b611a25919061478c565b341015611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e906141d6565b60405180910390fd5b611aca565b600f5482600f54611a7d91906146fe565b611a87919061478c565b341015611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac0906141d6565b60405180910390fd5b5b5b611ad53383612176565b5050565b6060611ae4826120ae565b611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614356565b60405180910390fd5b60001515600a60029054906101000a900460ff1615151415611bd15760138054611b4c906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054611b78906148da565b8015611bc55780601f10611b9a57610100808354040283529160200191611bc5565b820191906000526020600020905b815481529060010190602001808311611ba857829003601f168201915b50505050509050611c21565b6000611bdc83612bec565b90506000815111611bfc5760405180602001604052806000815250611c1d565b80604051602001611c0d91906140b0565b6040516020818303038152906040525b9150505b919050565b600d5481565b600e5481565b60085481565b611c406120bc565b73ffffffffffffffffffffffffffffffffffffffff16611c5e611326565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90614336565b60405180910390fd5b8060148190555050565b6000611cc982612c93565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d6c6120bc565b73ffffffffffffffffffffffffffffffffffffffff16611d8a611326565b73ffffffffffffffffffffffffffffffffffffffff1614611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd790614336565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b611e146120bc565b73ffffffffffffffffffffffffffffffffffffffff16611e32611326565b73ffffffffffffffffffffffffffffffffffffffff1614611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90614336565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906141b6565b60405180910390fd5b611f0181612950565b50565b611f0c6120bc565b73ffffffffffffffffffffffffffffffffffffffff16611f2a611326565b73ffffffffffffffffffffffffffffffffffffffff1614611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790614336565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b600b5481565b611fba6120bc565b73ffffffffffffffffffffffffffffffffffffffff16611fd8611326565b73ffffffffffffffffffffffffffffffffffffffff161461202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614336565b60405180910390fd5b81816013919061203f929190613521565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612190828260405180602001604052806000815250612d7c565b5050565b600061219f8261274d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121c66120bc565b73ffffffffffffffffffffffffffffffffffffffff16148061222257506121eb6120bc565b73ffffffffffffffffffffffffffffffffffffffff1661220a84610aff565b73ffffffffffffffffffffffffffffffffffffffff16145b8061223e575061223d82600001516122386120bc565b611cd0565b5b905080612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227790614396565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990614316565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614256565b60405180910390fd5b61236f858585600161325c565b61237f60008484600001516120c4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123ed9190614758565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124919190614631565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846125979190614677565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126dd5761260d816120ae565b156126dc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127458686866001613262565b505050505050565b6127556135a7565b61275e826120ae565b61279d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612794906141f6565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106128015760017f0000000000000000000000000000000000000000000000000000000000000000846127f4919061478c565b6127fe9190614677565b90505b60008390505b81811061290f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128fb5780935050505061294b565b508080612907906148b0565b915050612807565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612942906144d6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612a358473ffffffffffffffffffffffffffffffffffffffff16613268565b15612b9e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a5e6120bc565b8786866040518563ffffffff1660e01b8152600401612a8094939291906140ed565b602060405180830381600087803b158015612a9a57600080fd5b505af1925050508015612acb57506040513d601f19601f82011682018060405250810190612ac891906139fd565b60015b612b4e573d8060008114612afb576040519150601f19603f3d011682016040523d82523d6000602084013e612b00565b606091505b50600081511415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90614416565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ba3565b600190505b949350505050565b60008033604051602001612bbf9190614071565b604051602081830303815290604052805190602001209050612be4836014548361328b565b915050919050565b6060612bf7826120ae565b612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d90614356565b60405180910390fd5b6000612c406132a2565b90506000815111612c605760405180602001604052806000815250612c8b565b80612c6a84613334565b604051602001612c7b92919061408c565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614276565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dea90614456565b60405180910390fd5b612dfc816120ae565b15612e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3390614436565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9690614516565b60405180910390fd5b612eac600085838661325c565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612fa99190614631565b6fffffffffffffffffffffffffffffffff168152602001858360200151612fd09190614631565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561323f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131df6000888488612a14565b61321e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321590614416565b60405180910390fd5b81806132299061493d565b92505080806132379061493d565b91505061316e565b50806001819055506132546000878588613262565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000826132988584613495565b1490509392505050565b6060601280546132b1906148da565b80601f01602080910402602001604051908101604052809291908181526020018280546132dd906148da565b801561332a5780601f106132ff5761010080835404028352916020019161332a565b820191906000526020600020905b81548152906001019060200180831161330d57829003601f168201915b5050505050905090565b6060600082141561337c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613490565b600082905060005b600082146133ae5780806133979061493d565b915050600a826133a791906146cd565b9150613384565b60008167ffffffffffffffff8111156133ca576133c9614a97565b5b6040519080825280601f01601f1916602001820160405280156133fc5781602001600182028036833780820191505090505b5090505b6000851461348957600182613415919061478c565b9150600a8561342491906149aa565b60306134309190614677565b60f81b81838151811061344657613445614a68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561348291906146cd565b9450613400565b8093505050505b919050565b60008082905060005b84518110156134ff5760008582815181106134bc576134bb614a68565b5b602002602001015190508083116134de576134d7838261350a565b92506134eb565b6134e8818461350a565b92505b5080806134f79061493d565b91505061349e565b508091505092915050565b600082600052816020526040600020905092915050565b82805461352d906148da565b90600052602060002090601f01602090048101928261354f5760008555613596565b82601f1061356857803560ff1916838001178555613596565b82800160010185558215613596579182015b8281111561359557823582559160200191906001019061357a565b5b5090506135a391906135e1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156135fa5760008160009055506001016135e2565b5090565b600061361161360c84614591565b61456c565b9050808382526020820190508285602086028201111561363457613633614ad0565b5b60005b85811015613664578161364a8882613708565b845260208401935060208301925050600181019050613637565b5050509392505050565b600061368161367c846145bd565b61456c565b90508281526020810184848401111561369d5761369c614ad5565b5b6136a884828561486e565b509392505050565b6000813590506136bf816152f1565b92915050565b600082601f8301126136da576136d9614acb565b5b81356136ea8482602086016135fe565b91505092915050565b60008135905061370281615308565b92915050565b6000813590506137178161531f565b92915050565b60008135905061372c81615336565b92915050565b60008151905061374181615336565b92915050565b600082601f83011261375c5761375b614acb565b5b813561376c84826020860161366e565b91505092915050565b60008083601f84011261378b5761378a614acb565b5b8235905067ffffffffffffffff8111156137a8576137a7614ac6565b5b6020830191508360018202830111156137c4576137c3614ad0565b5b9250929050565b6000813590506137da8161534d565b92915050565b6000602082840312156137f6576137f5614adf565b5b6000613804848285016136b0565b91505092915050565b6000806040838503121561382457613823614adf565b5b6000613832858286016136b0565b9250506020613843858286016136b0565b9150509250929050565b60008060006060848603121561386657613865614adf565b5b6000613874868287016136b0565b9350506020613885868287016136b0565b9250506040613896868287016137cb565b9150509250925092565b600080600080608085870312156138ba576138b9614adf565b5b60006138c8878288016136b0565b94505060206138d9878288016136b0565b93505060406138ea878288016137cb565b925050606085013567ffffffffffffffff81111561390b5761390a614ada565b5b61391787828801613747565b91505092959194509250565b6000806040838503121561393a57613939614adf565b5b6000613948858286016136b0565b9250506020613959858286016136f3565b9150509250929050565b6000806040838503121561397a57613979614adf565b5b6000613988858286016136b0565b9250506020613999858286016137cb565b9150509250929050565b6000602082840312156139b9576139b8614adf565b5b60006139c784828501613708565b91505092915050565b6000602082840312156139e6576139e5614adf565b5b60006139f48482850161371d565b91505092915050565b600060208284031215613a1357613a12614adf565b5b6000613a2184828501613732565b91505092915050565b60008060208385031215613a4157613a40614adf565b5b600083013567ffffffffffffffff811115613a5f57613a5e614ada565b5b613a6b85828601613775565b92509250509250929050565b600060208284031215613a8d57613a8c614adf565b5b6000613a9b848285016137cb565b91505092915050565b60008060408385031215613abb57613aba614adf565b5b6000613ac9858286016137cb565b925050602083013567ffffffffffffffff811115613aea57613ae9614ada565b5b613af6858286016136c5565b9150509250929050565b613b09816147c0565b82525050565b613b18816147c0565b82525050565b613b2f613b2a826147c0565b614986565b82525050565b613b3e816147d2565b82525050565b6000613b4f826145ee565b613b598185614604565b9350613b6981856020860161487d565b613b7281614ae4565b840191505092915050565b6000613b88826145f9565b613b928185614615565b9350613ba281856020860161487d565b613bab81614ae4565b840191505092915050565b6000613bc1826145f9565b613bcb8185614626565b9350613bdb81856020860161487d565b80840191505092915050565b6000613bf4602283614615565b9150613bff82614b02565b604082019050919050565b6000613c17601583614615565b9150613c2282614b51565b602082019050919050565b6000613c3a602683614615565b9150613c4582614b7a565b604082019050919050565b6000613c5d600b83614615565b9150613c6882614bc9565b602082019050919050565b6000613c80602a83614615565b9150613c8b82614bf2565b604082019050919050565b6000613ca3601783614615565b9150613cae82614c41565b602082019050919050565b6000613cc6602383614615565b9150613cd182614c6a565b604082019050919050565b6000613ce9602583614615565b9150613cf482614cb9565b604082019050919050565b6000613d0c603183614615565b9150613d1782614d08565b604082019050919050565b6000613d2f601e83614615565b9150613d3a82614d57565b602082019050919050565b6000613d52601883614615565b9150613d5d82614d80565b602082019050919050565b6000613d75603983614615565b9150613d8082614da9565b604082019050919050565b6000613d98602b83614615565b9150613da382614df8565b604082019050919050565b6000613dbb602683614615565b9150613dc682614e47565b604082019050919050565b6000613dde600583614626565b9150613de982614e96565b600582019050919050565b6000613e01602083614615565b9150613e0c82614ebf565b602082019050919050565b6000613e24602f83614615565b9150613e2f82614ee8565b604082019050919050565b6000613e47601a83614615565b9150613e5282614f37565b602082019050919050565b6000613e6a603283614615565b9150613e7582614f60565b604082019050919050565b6000613e8d602883614615565b9150613e9882614faf565b604082019050919050565b6000613eb0602283614615565b9150613ebb82614ffe565b604082019050919050565b6000613ed3601883614615565b9150613ede8261504d565b602082019050919050565b6000613ef6603383614615565b9150613f0182615076565b604082019050919050565b6000613f19601d83614615565b9150613f24826150c5565b602082019050919050565b6000613f3c602183614615565b9150613f47826150ee565b604082019050919050565b6000613f5f602c83614615565b9150613f6a8261513d565b604082019050919050565b6000613f82601083614615565b9150613f8d8261518c565b602082019050919050565b6000613fa5602e83614615565b9150613fb0826151b5565b604082019050919050565b6000613fc8602f83614615565b9150613fd382615204565b604082019050919050565b6000613feb602d83614615565b9150613ff682615253565b604082019050919050565b600061400e602283614615565b9150614019826152a2565b604082019050919050565b60408201600082015161403a6000850182613b00565b50602082015161404d6020850182614062565b50505050565b61405c81614850565b82525050565b61406b8161485a565b82525050565b600061407d8284613b1e565b60148201915081905092915050565b60006140988285613bb6565b91506140a48284613bb6565b91508190509392505050565b60006140bc8284613bb6565b91506140c782613dd1565b915081905092915050565b60006020820190506140e76000830184613b0f565b92915050565b60006080820190506141026000830187613b0f565b61410f6020830186613b0f565b61411c6040830185614053565b818103606083015261412e8184613b44565b905095945050505050565b600060208201905061414e6000830184613b35565b92915050565b6000602082019050818103600083015261416e8184613b7d565b905092915050565b6000602082019050818103600083015261418f81613be7565b9050919050565b600060208201905081810360008301526141af81613c0a565b9050919050565b600060208201905081810360008301526141cf81613c2d565b9050919050565b600060208201905081810360008301526141ef81613c50565b9050919050565b6000602082019050818103600083015261420f81613c73565b9050919050565b6000602082019050818103600083015261422f81613c96565b9050919050565b6000602082019050818103600083015261424f81613cb9565b9050919050565b6000602082019050818103600083015261426f81613cdc565b9050919050565b6000602082019050818103600083015261428f81613cff565b9050919050565b600060208201905081810360008301526142af81613d22565b9050919050565b600060208201905081810360008301526142cf81613d45565b9050919050565b600060208201905081810360008301526142ef81613d68565b9050919050565b6000602082019050818103600083015261430f81613d8b565b9050919050565b6000602082019050818103600083015261432f81613dae565b9050919050565b6000602082019050818103600083015261434f81613df4565b9050919050565b6000602082019050818103600083015261436f81613e17565b9050919050565b6000602082019050818103600083015261438f81613e3a565b9050919050565b600060208201905081810360008301526143af81613e5d565b9050919050565b600060208201905081810360008301526143cf81613e80565b9050919050565b600060208201905081810360008301526143ef81613ea3565b9050919050565b6000602082019050818103600083015261440f81613ec6565b9050919050565b6000602082019050818103600083015261442f81613ee9565b9050919050565b6000602082019050818103600083015261444f81613f0c565b9050919050565b6000602082019050818103600083015261446f81613f2f565b9050919050565b6000602082019050818103600083015261448f81613f52565b9050919050565b600060208201905081810360008301526144af81613f75565b9050919050565b600060208201905081810360008301526144cf81613f98565b9050919050565b600060208201905081810360008301526144ef81613fbb565b9050919050565b6000602082019050818103600083015261450f81613fde565b9050919050565b6000602082019050818103600083015261452f81614001565b9050919050565b600060408201905061454b6000830184614024565b92915050565b60006020820190506145666000830184614053565b92915050565b6000614576614587565b9050614582828261490c565b919050565b6000604051905090565b600067ffffffffffffffff8211156145ac576145ab614a97565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145d8576145d7614a97565b5b6145e182614ae4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061463c82614814565b915061464783614814565b9250826fffffffffffffffffffffffffffffffff0382111561466c5761466b6149db565b5b828201905092915050565b600061468282614850565b915061468d83614850565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146c2576146c16149db565b5b828201905092915050565b60006146d882614850565b91506146e383614850565b9250826146f3576146f2614a0a565b5b828204905092915050565b600061470982614850565b915061471483614850565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561474d5761474c6149db565b5b828202905092915050565b600061476382614814565b915061476e83614814565b925082821015614781576147806149db565b5b828203905092915050565b600061479782614850565b91506147a283614850565b9250828210156147b5576147b46149db565b5b828203905092915050565b60006147cb82614830565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561489b578082015181840152602081019050614880565b838111156148aa576000848401525b50505050565b60006148bb82614850565b915060008214156148cf576148ce6149db565b5b600182039050919050565b600060028204905060018216806148f257607f821691505b6020821081141561490657614905614a39565b5b50919050565b61491582614ae4565b810181811067ffffffffffffffff8211171561493457614933614a97565b5b80604052505050565b600061494882614850565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561497b5761497a6149db565b5b600182019050919050565b600061499182614998565b9050919050565b60006149a382614af5565b9050919050565b60006149b582614850565b91506149c083614850565b9250826149d0576149cf614a0a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43414e4e4f545f4d494e545f544841545f4d414e590000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c49445f455448000000000000000000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f414444524553535f4e4f545f57484954454c4953544544000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f5045525f57414c4c45545f4c494d49545f524541434845440000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e4f545f454e4f5547485f535550504c595f544f5f4d494e545f44455349524560008201527f445f414d4f554e54000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f53414c455f4841535f4e4f545f535441525445445f5945540000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e4f545f454e4f5547485f535550504c595f544f5f47495645415741595f444560008201527f53495245445f414d4f554e540000000000000000000000000000000000000000602082015250565b7f494e56414c49445f5155414e5449545900000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152fa816147c0565b811461530557600080fd5b50565b615311816147d2565b811461531c57600080fd5b50565b615328816147de565b811461533357600080fd5b50565b61533f816147e8565b811461534a57600080fd5b50565b61535681614850565b811461536157600080fd5b5056fea2646970667358221220c4406c2a6300c5b6d9d85338c95f6105099877f12cb7d5fc7203e14c0ecde3ea64736f6c63430008070033697066733a2f2f516d514c326f665a3842685675474d67476255764d756b534159337158475a384c79507a41344636774d47715454

Deployed Bytecode

0x60806040526004361061023b5760003560e01c806391b7f5ed1161012e578063ce979712116100ab578063ea50ac821161006f578063ea50ac8214610878578063f2fde38b1461088f578063f6fa26ab146108b8578063f968adbe146108cf578063fe2c7fee146108fa5761023b565b8063ce9797121461077f578063d7224ba0146107aa578063dab5f340146107d5578063dc33e681146107fe578063e985e9c51461083b5761023b565b8063a22cb465116100f2578063a22cb465146106a9578063b88d4fde146106d2578063ba41b0c6146106fb578063c87b56dd14610717578063ca69e323146107545761023b565b806391b7f5ed146105d65780639231ab2a146105ff57806395d89b411461063c578063a035b1fe14610667578063a10866ef146106925761023b565b80633ccfd60b116101bc5780636352211e116101805780636352211e146104ef578063639814e01461052c57806370a0823114610557578063715018a6146105945780638da5cb5b146105ab5761023b565b80633ccfd60b1461041e57806342842e0e146104355780634f6ccce71461045e578063518302271461049b57806355f804b3146104c65761023b565b806318160ddd1161020357806318160ddd1461033757806323b872dd146103625780632f745c591461038b57806331ffd6f1146103c857806333bc1c5c146103f35761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55780630aada2781461030e575b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906139d0565b610923565b6040516102749190614139565b60405180910390f35b34801561028957600080fd5b50610292610a6d565b60405161029f9190614154565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613a77565b610aff565b6040516102dc91906140d2565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613963565b610b84565b005b34801561031a57600080fd5b5061033560048036038101906103309190613963565b610c9d565b005b34801561034357600080fd5b5061034c610d7e565b6040516103599190614551565b60405180910390f35b34801561036e57600080fd5b506103896004803603810190610384919061384d565b610d88565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613963565b610d98565b6040516103bf9190614551565b60405180910390f35b3480156103d457600080fd5b506103dd610f96565b6040516103ea9190614139565b60405180910390f35b3480156103ff57600080fd5b50610408610fa9565b6040516104159190614139565b60405180910390f35b34801561042a57600080fd5b50610433610fbc565b005b34801561044157600080fd5b5061045c6004803603810190610457919061384d565b611081565b005b34801561046a57600080fd5b5061048560048036038101906104809190613a77565b6110a1565b6040516104929190614551565b60405180910390f35b3480156104a757600080fd5b506104b06110f4565b6040516104bd9190614139565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190613a2a565b611107565b005b3480156104fb57600080fd5b5061051660048036038101906105119190613a77565b611199565b60405161052391906140d2565b60405180910390f35b34801561053857600080fd5b506105416111af565b60405161054e9190614551565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906137e0565b6111b5565b60405161058b9190614551565b60405180910390f35b3480156105a057600080fd5b506105a961129e565b005b3480156105b757600080fd5b506105c0611326565b6040516105cd91906140d2565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613a77565b61134f565b005b34801561060b57600080fd5b5061062660048036038101906106219190613a77565b6113d5565b6040516106339190614536565b60405180910390f35b34801561064857600080fd5b506106516113ed565b60405161065e9190614154565b60405180910390f35b34801561067357600080fd5b5061067c61147f565b6040516106899190614551565b60405180910390f35b34801561069e57600080fd5b506106a7611485565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190613923565b61152d565b005b3480156106de57600080fd5b506106f960048036038101906106f491906138a0565b6116ae565b005b61071560048036038101906107109190613aa4565b61170a565b005b34801561072357600080fd5b5061073e60048036038101906107399190613a77565b611ad9565b60405161074b9190614154565b60405180910390f35b34801561076057600080fd5b50610769611c26565b6040516107769190614551565b60405180910390f35b34801561078b57600080fd5b50610794611c2c565b6040516107a19190614551565b60405180910390f35b3480156107b657600080fd5b506107bf611c32565b6040516107cc9190614551565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906139a3565b611c38565b005b34801561080a57600080fd5b50610825600480360381019061082091906137e0565b611cbe565b6040516108329190614551565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d919061380d565b611cd0565b60405161086f9190614139565b60405180910390f35b34801561088457600080fd5b5061088d611d64565b005b34801561089b57600080fd5b506108b660048036038101906108b191906137e0565b611e0c565b005b3480156108c457600080fd5b506108cd611f04565b005b3480156108db57600080fd5b506108e4611fac565b6040516108f19190614551565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613a2a565b611fb2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a665750610a6582612044565b5b9050919050565b606060028054610a7c906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa8906148da565b8015610af55780601f10610aca57610100808354040283529160200191610af5565b820191906000526020600020905b815481529060010190602001808311610ad857829003601f168201915b5050505050905090565b6000610b0a826120ae565b610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b40906144f6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8f82611199565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906143d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1f6120bc565b73ffffffffffffffffffffffffffffffffffffffff161480610c4e5750610c4d81610c486120bc565b611cd0565b5b610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c84906142d6565b60405180910390fd5b610c988383836120c4565b505050565b610ca56120bc565b73ffffffffffffffffffffffffffffffffffffffff16610cc3611326565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614336565b60405180910390fd5b600d5481610d25610d7e565b610d2f9190614677565b1115610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790614476565b60405180910390fd5b610d7a8282612176565b5050565b6000600154905090565b610d93838383612194565b505050565b6000610da3836111b5565b8210610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90614176565b60405180910390fd5b6000610dee610d7e565b905060008060005b83811015610f54576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ee857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f405786841415610f31578195505050505050610f90565b8380610f3c9061493d565b9450505b508080610f4c9061493d565b915050610df6565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f87906144b6565b60405180910390fd5b92915050565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b610fc46120bc565b73ffffffffffffffffffffffffffffffffffffffff16610fe2611326565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90614336565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561107e573d6000803e3d6000fd5b50565b61109c838383604051806020016040528060008152506116ae565b505050565b60006110ab610d7e565b82106110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614236565b60405180910390fd5b819050919050565b600a60029054906101000a900460ff1681565b61110f6120bc565b73ffffffffffffffffffffffffffffffffffffffff1661112d611326565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90614336565b60405180910390fd5b818160129190611194929190613521565b505050565b60006111a48261274d565b600001519050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d906142f6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112a66120bc565b73ffffffffffffffffffffffffffffffffffffffff166112c4611326565b73ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190614336565b60405180910390fd5b6113246000612950565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113576120bc565b73ffffffffffffffffffffffffffffffffffffffff16611375611326565b73ffffffffffffffffffffffffffffffffffffffff16146113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290614336565b60405180910390fd5b80600f8190555050565b6113dd6135a7565b6113e68261274d565b9050919050565b6060600380546113fc906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054611428906148da565b80156114755780601f1061144a57610100808354040283529160200191611475565b820191906000526020600020905b81548152906001019060200180831161145857829003601f168201915b5050505050905090565b600f5481565b61148d6120bc565b73ffffffffffffffffffffffffffffffffffffffff166114ab611326565b73ffffffffffffffffffffffffffffffffffffffff1614611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614336565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6115356120bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90614376565b60405180910390fd5b80600760006115b06120bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661165d6120bc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116a29190614139565b60405180910390a35050565b6116b9848484612194565b6116c584848484612a14565b611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90614416565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90614296565b60405180910390fd5b600a60019054906101000a900460ff168061179f5750600a60009054906101000a900460ff165b6117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d5906143f6565b60405180910390fd5b600c54826117eb33611cbe565b6117f59190614677565b1115611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906142b6565b60405180910390fd5b60018211611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614496565b60405180910390fd5b600b548211156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614196565b60405180910390fd5b600e54826118ca610d7e565b6118d49190614677565b1115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c906143b6565b60405180910390fd5b600a60019054906101000a900460ff16156119735761193381612bab565b611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990614216565b60405180910390fd5b5b600061197e33611cbe565b11156119d95781600f5461199291906146fe565b3410156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb906141d6565b60405180910390fd5b611acb565b600a60019054906101000a900460ff16806119f957506119f881612bab565b5b15611a6c57600f546002611a0d91906146fe565b82600f54611a1b91906146fe565b611a25919061478c565b341015611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e906141d6565b60405180910390fd5b611aca565b600f5482600f54611a7d91906146fe565b611a87919061478c565b341015611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac0906141d6565b60405180910390fd5b5b5b611ad53383612176565b5050565b6060611ae4826120ae565b611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614356565b60405180910390fd5b60001515600a60029054906101000a900460ff1615151415611bd15760138054611b4c906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054611b78906148da565b8015611bc55780601f10611b9a57610100808354040283529160200191611bc5565b820191906000526020600020905b815481529060010190602001808311611ba857829003601f168201915b50505050509050611c21565b6000611bdc83612bec565b90506000815111611bfc5760405180602001604052806000815250611c1d565b80604051602001611c0d91906140b0565b6040516020818303038152906040525b9150505b919050565b600d5481565b600e5481565b60085481565b611c406120bc565b73ffffffffffffffffffffffffffffffffffffffff16611c5e611326565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90614336565b60405180910390fd5b8060148190555050565b6000611cc982612c93565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d6c6120bc565b73ffffffffffffffffffffffffffffffffffffffff16611d8a611326565b73ffffffffffffffffffffffffffffffffffffffff1614611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd790614336565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b611e146120bc565b73ffffffffffffffffffffffffffffffffffffffff16611e32611326565b73ffffffffffffffffffffffffffffffffffffffff1614611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90614336565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906141b6565b60405180910390fd5b611f0181612950565b50565b611f0c6120bc565b73ffffffffffffffffffffffffffffffffffffffff16611f2a611326565b73ffffffffffffffffffffffffffffffffffffffff1614611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790614336565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b600b5481565b611fba6120bc565b73ffffffffffffffffffffffffffffffffffffffff16611fd8611326565b73ffffffffffffffffffffffffffffffffffffffff161461202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614336565b60405180910390fd5b81816013919061203f929190613521565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612190828260405180602001604052806000815250612d7c565b5050565b600061219f8261274d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121c66120bc565b73ffffffffffffffffffffffffffffffffffffffff16148061222257506121eb6120bc565b73ffffffffffffffffffffffffffffffffffffffff1661220a84610aff565b73ffffffffffffffffffffffffffffffffffffffff16145b8061223e575061223d82600001516122386120bc565b611cd0565b5b905080612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227790614396565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990614316565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614256565b60405180910390fd5b61236f858585600161325c565b61237f60008484600001516120c4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123ed9190614758565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124919190614631565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846125979190614677565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126dd5761260d816120ae565b156126dc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127458686866001613262565b505050505050565b6127556135a7565b61275e826120ae565b61279d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612794906141f6565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000003e883106128015760017f00000000000000000000000000000000000000000000000000000000000003e8846127f4919061478c565b6127fe9190614677565b90505b60008390505b81811061290f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128fb5780935050505061294b565b508080612907906148b0565b915050612807565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612942906144d6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612a358473ffffffffffffffffffffffffffffffffffffffff16613268565b15612b9e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a5e6120bc565b8786866040518563ffffffff1660e01b8152600401612a8094939291906140ed565b602060405180830381600087803b158015612a9a57600080fd5b505af1925050508015612acb57506040513d601f19601f82011682018060405250810190612ac891906139fd565b60015b612b4e573d8060008114612afb576040519150601f19603f3d011682016040523d82523d6000602084013e612b00565b606091505b50600081511415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90614416565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ba3565b600190505b949350505050565b60008033604051602001612bbf9190614071565b604051602081830303815290604052805190602001209050612be4836014548361328b565b915050919050565b6060612bf7826120ae565b612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d90614356565b60405180910390fd5b6000612c406132a2565b90506000815111612c605760405180602001604052806000815250612c8b565b80612c6a84613334565b604051602001612c7b92919061408c565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614276565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dea90614456565b60405180910390fd5b612dfc816120ae565b15612e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3390614436565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000003e8831115612e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9690614516565b60405180910390fd5b612eac600085838661325c565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612fa99190614631565b6fffffffffffffffffffffffffffffffff168152602001858360200151612fd09190614631565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561323f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131df6000888488612a14565b61321e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321590614416565b60405180910390fd5b81806132299061493d565b92505080806132379061493d565b91505061316e565b50806001819055506132546000878588613262565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000826132988584613495565b1490509392505050565b6060601280546132b1906148da565b80601f01602080910402602001604051908101604052809291908181526020018280546132dd906148da565b801561332a5780601f106132ff5761010080835404028352916020019161332a565b820191906000526020600020905b81548152906001019060200180831161330d57829003601f168201915b5050505050905090565b6060600082141561337c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613490565b600082905060005b600082146133ae5780806133979061493d565b915050600a826133a791906146cd565b9150613384565b60008167ffffffffffffffff8111156133ca576133c9614a97565b5b6040519080825280601f01601f1916602001820160405280156133fc5781602001600182028036833780820191505090505b5090505b6000851461348957600182613415919061478c565b9150600a8561342491906149aa565b60306134309190614677565b60f81b81838151811061344657613445614a68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561348291906146cd565b9450613400565b8093505050505b919050565b60008082905060005b84518110156134ff5760008582815181106134bc576134bb614a68565b5b602002602001015190508083116134de576134d7838261350a565b92506134eb565b6134e8818461350a565b92505b5080806134f79061493d565b91505061349e565b508091505092915050565b600082600052816020526040600020905092915050565b82805461352d906148da565b90600052602060002090601f01602090048101928261354f5760008555613596565b82601f1061356857803560ff1916838001178555613596565b82800160010185558215613596579182015b8281111561359557823582559160200191906001019061357a565b5b5090506135a391906135e1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156135fa5760008160009055506001016135e2565b5090565b600061361161360c84614591565b61456c565b9050808382526020820190508285602086028201111561363457613633614ad0565b5b60005b85811015613664578161364a8882613708565b845260208401935060208301925050600181019050613637565b5050509392505050565b600061368161367c846145bd565b61456c565b90508281526020810184848401111561369d5761369c614ad5565b5b6136a884828561486e565b509392505050565b6000813590506136bf816152f1565b92915050565b600082601f8301126136da576136d9614acb565b5b81356136ea8482602086016135fe565b91505092915050565b60008135905061370281615308565b92915050565b6000813590506137178161531f565b92915050565b60008135905061372c81615336565b92915050565b60008151905061374181615336565b92915050565b600082601f83011261375c5761375b614acb565b5b813561376c84826020860161366e565b91505092915050565b60008083601f84011261378b5761378a614acb565b5b8235905067ffffffffffffffff8111156137a8576137a7614ac6565b5b6020830191508360018202830111156137c4576137c3614ad0565b5b9250929050565b6000813590506137da8161534d565b92915050565b6000602082840312156137f6576137f5614adf565b5b6000613804848285016136b0565b91505092915050565b6000806040838503121561382457613823614adf565b5b6000613832858286016136b0565b9250506020613843858286016136b0565b9150509250929050565b60008060006060848603121561386657613865614adf565b5b6000613874868287016136b0565b9350506020613885868287016136b0565b9250506040613896868287016137cb565b9150509250925092565b600080600080608085870312156138ba576138b9614adf565b5b60006138c8878288016136b0565b94505060206138d9878288016136b0565b93505060406138ea878288016137cb565b925050606085013567ffffffffffffffff81111561390b5761390a614ada565b5b61391787828801613747565b91505092959194509250565b6000806040838503121561393a57613939614adf565b5b6000613948858286016136b0565b9250506020613959858286016136f3565b9150509250929050565b6000806040838503121561397a57613979614adf565b5b6000613988858286016136b0565b9250506020613999858286016137cb565b9150509250929050565b6000602082840312156139b9576139b8614adf565b5b60006139c784828501613708565b91505092915050565b6000602082840312156139e6576139e5614adf565b5b60006139f48482850161371d565b91505092915050565b600060208284031215613a1357613a12614adf565b5b6000613a2184828501613732565b91505092915050565b60008060208385031215613a4157613a40614adf565b5b600083013567ffffffffffffffff811115613a5f57613a5e614ada565b5b613a6b85828601613775565b92509250509250929050565b600060208284031215613a8d57613a8c614adf565b5b6000613a9b848285016137cb565b91505092915050565b60008060408385031215613abb57613aba614adf565b5b6000613ac9858286016137cb565b925050602083013567ffffffffffffffff811115613aea57613ae9614ada565b5b613af6858286016136c5565b9150509250929050565b613b09816147c0565b82525050565b613b18816147c0565b82525050565b613b2f613b2a826147c0565b614986565b82525050565b613b3e816147d2565b82525050565b6000613b4f826145ee565b613b598185614604565b9350613b6981856020860161487d565b613b7281614ae4565b840191505092915050565b6000613b88826145f9565b613b928185614615565b9350613ba281856020860161487d565b613bab81614ae4565b840191505092915050565b6000613bc1826145f9565b613bcb8185614626565b9350613bdb81856020860161487d565b80840191505092915050565b6000613bf4602283614615565b9150613bff82614b02565b604082019050919050565b6000613c17601583614615565b9150613c2282614b51565b602082019050919050565b6000613c3a602683614615565b9150613c4582614b7a565b604082019050919050565b6000613c5d600b83614615565b9150613c6882614bc9565b602082019050919050565b6000613c80602a83614615565b9150613c8b82614bf2565b604082019050919050565b6000613ca3601783614615565b9150613cae82614c41565b602082019050919050565b6000613cc6602383614615565b9150613cd182614c6a565b604082019050919050565b6000613ce9602583614615565b9150613cf482614cb9565b604082019050919050565b6000613d0c603183614615565b9150613d1782614d08565b604082019050919050565b6000613d2f601e83614615565b9150613d3a82614d57565b602082019050919050565b6000613d52601883614615565b9150613d5d82614d80565b602082019050919050565b6000613d75603983614615565b9150613d8082614da9565b604082019050919050565b6000613d98602b83614615565b9150613da382614df8565b604082019050919050565b6000613dbb602683614615565b9150613dc682614e47565b604082019050919050565b6000613dde600583614626565b9150613de982614e96565b600582019050919050565b6000613e01602083614615565b9150613e0c82614ebf565b602082019050919050565b6000613e24602f83614615565b9150613e2f82614ee8565b604082019050919050565b6000613e47601a83614615565b9150613e5282614f37565b602082019050919050565b6000613e6a603283614615565b9150613e7582614f60565b604082019050919050565b6000613e8d602883614615565b9150613e9882614faf565b604082019050919050565b6000613eb0602283614615565b9150613ebb82614ffe565b604082019050919050565b6000613ed3601883614615565b9150613ede8261504d565b602082019050919050565b6000613ef6603383614615565b9150613f0182615076565b604082019050919050565b6000613f19601d83614615565b9150613f24826150c5565b602082019050919050565b6000613f3c602183614615565b9150613f47826150ee565b604082019050919050565b6000613f5f602c83614615565b9150613f6a8261513d565b604082019050919050565b6000613f82601083614615565b9150613f8d8261518c565b602082019050919050565b6000613fa5602e83614615565b9150613fb0826151b5565b604082019050919050565b6000613fc8602f83614615565b9150613fd382615204565b604082019050919050565b6000613feb602d83614615565b9150613ff682615253565b604082019050919050565b600061400e602283614615565b9150614019826152a2565b604082019050919050565b60408201600082015161403a6000850182613b00565b50602082015161404d6020850182614062565b50505050565b61405c81614850565b82525050565b61406b8161485a565b82525050565b600061407d8284613b1e565b60148201915081905092915050565b60006140988285613bb6565b91506140a48284613bb6565b91508190509392505050565b60006140bc8284613bb6565b91506140c782613dd1565b915081905092915050565b60006020820190506140e76000830184613b0f565b92915050565b60006080820190506141026000830187613b0f565b61410f6020830186613b0f565b61411c6040830185614053565b818103606083015261412e8184613b44565b905095945050505050565b600060208201905061414e6000830184613b35565b92915050565b6000602082019050818103600083015261416e8184613b7d565b905092915050565b6000602082019050818103600083015261418f81613be7565b9050919050565b600060208201905081810360008301526141af81613c0a565b9050919050565b600060208201905081810360008301526141cf81613c2d565b9050919050565b600060208201905081810360008301526141ef81613c50565b9050919050565b6000602082019050818103600083015261420f81613c73565b9050919050565b6000602082019050818103600083015261422f81613c96565b9050919050565b6000602082019050818103600083015261424f81613cb9565b9050919050565b6000602082019050818103600083015261426f81613cdc565b9050919050565b6000602082019050818103600083015261428f81613cff565b9050919050565b600060208201905081810360008301526142af81613d22565b9050919050565b600060208201905081810360008301526142cf81613d45565b9050919050565b600060208201905081810360008301526142ef81613d68565b9050919050565b6000602082019050818103600083015261430f81613d8b565b9050919050565b6000602082019050818103600083015261432f81613dae565b9050919050565b6000602082019050818103600083015261434f81613df4565b9050919050565b6000602082019050818103600083015261436f81613e17565b9050919050565b6000602082019050818103600083015261438f81613e3a565b9050919050565b600060208201905081810360008301526143af81613e5d565b9050919050565b600060208201905081810360008301526143cf81613e80565b9050919050565b600060208201905081810360008301526143ef81613ea3565b9050919050565b6000602082019050818103600083015261440f81613ec6565b9050919050565b6000602082019050818103600083015261442f81613ee9565b9050919050565b6000602082019050818103600083015261444f81613f0c565b9050919050565b6000602082019050818103600083015261446f81613f2f565b9050919050565b6000602082019050818103600083015261448f81613f52565b9050919050565b600060208201905081810360008301526144af81613f75565b9050919050565b600060208201905081810360008301526144cf81613f98565b9050919050565b600060208201905081810360008301526144ef81613fbb565b9050919050565b6000602082019050818103600083015261450f81613fde565b9050919050565b6000602082019050818103600083015261452f81614001565b9050919050565b600060408201905061454b6000830184614024565b92915050565b60006020820190506145666000830184614053565b92915050565b6000614576614587565b9050614582828261490c565b919050565b6000604051905090565b600067ffffffffffffffff8211156145ac576145ab614a97565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156145d8576145d7614a97565b5b6145e182614ae4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061463c82614814565b915061464783614814565b9250826fffffffffffffffffffffffffffffffff0382111561466c5761466b6149db565b5b828201905092915050565b600061468282614850565b915061468d83614850565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146c2576146c16149db565b5b828201905092915050565b60006146d882614850565b91506146e383614850565b9250826146f3576146f2614a0a565b5b828204905092915050565b600061470982614850565b915061471483614850565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561474d5761474c6149db565b5b828202905092915050565b600061476382614814565b915061476e83614814565b925082821015614781576147806149db565b5b828203905092915050565b600061479782614850565b91506147a283614850565b9250828210156147b5576147b46149db565b5b828203905092915050565b60006147cb82614830565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561489b578082015181840152602081019050614880565b838111156148aa576000848401525b50505050565b60006148bb82614850565b915060008214156148cf576148ce6149db565b5b600182039050919050565b600060028204905060018216806148f257607f821691505b6020821081141561490657614905614a39565b5b50919050565b61491582614ae4565b810181811067ffffffffffffffff8211171561493457614933614a97565b5b80604052505050565b600061494882614850565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561497b5761497a6149db565b5b600182019050919050565b600061499182614998565b9050919050565b60006149a382614af5565b9050919050565b60006149b582614850565b91506149c083614850565b9250826149d0576149cf614a0a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43414e4e4f545f4d494e545f544841545f4d414e590000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c49445f455448000000000000000000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f414444524553535f4e4f545f57484954454c4953544544000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f5045525f57414c4c45545f4c494d49545f524541434845440000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e4f545f454e4f5547485f535550504c595f544f5f4d494e545f44455349524560008201527f445f414d4f554e54000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f53414c455f4841535f4e4f545f535441525445445f5945540000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e4f545f454e4f5547485f535550504c595f544f5f47495645415741595f444560008201527f53495245445f414d4f554e540000000000000000000000000000000000000000602082015250565b7f494e56414c49445f5155414e5449545900000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152fa816147c0565b811461530557600080fd5b50565b615311816147d2565b811461531c57600080fd5b50565b615328816147de565b811461533357600080fd5b50565b61533f816147e8565b811461534a57600080fd5b50565b61535681614850565b811461536157600080fd5b5056fea2646970667358221220c4406c2a6300c5b6d9d85338c95f6105099877f12cb7d5fc7203e14c0ecde3ea64736f6c63430008070033

Deployed Bytecode Sourcemap

24259:4064:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13167:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16162:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15743:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27118:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11957:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16997:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12297:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24367:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24330:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28211:109;;;;;;;;;;;;;:::i;:::-;;17165:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12063:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24407:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27977:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14823:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24476:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13595:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7151:94;;;;;;;;;;;;;:::i;:::-;;6932:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27483:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25196:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15059:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24594:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27677:93;;;;;;;;;;;;;:::i;:::-;;16460:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17348:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26139:971;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25371:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24515:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20969:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27587:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25075:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16777:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27882:87;;;;;;;;;;;;;:::i;:::-;;7251:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27778:98;;;;;;;;;;;;;:::i;:::-;;24442:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28089:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13167:422;13314:4;13371:25;13356:40;;;:11;:40;;;;:105;;;;13428:33;13413:48;;;:11;:48;;;;13356:105;:172;;;;13493:35;13478:50;;;:11;:50;;;;13356:172;:225;;;;13545:36;13569:11;13545:23;:36::i;:::-;13356:225;13336:245;;13167:422;;;:::o;14953:100::-;15007:13;15040:5;15033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14953:100;:::o;16162:292::-;16266:7;16313:16;16321:7;16313;:16::i;:::-;16291:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16422:15;:24;16438:7;16422:24;;;;;;;;;;;;;;;;;;;;;16415:31;;16162:292;;;:::o;15743:413::-;15816:13;15832:24;15848:7;15832:15;:24::i;:::-;15816:40;;15881:5;15875:11;;:2;:11;;;;15867:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15976:5;15960:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;15985:37;16002:5;16009:12;:10;:12::i;:::-;15985:16;:37::i;:::-;15960:62;15938:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:28;16129:2;16133:7;16142:5;16120:8;:28::i;:::-;15805:351;15743:413;;:::o;27118:235::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27248:8:::1;;27236;27220:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:36;;27212:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;27316:29;27326:8;27336;27316:9;:29::i;:::-;27118:235:::0;;:::o;11957:100::-;12010:7;12037:12;;12030:19;;11957:100;:::o;16997:162::-;17123:28;17133:4;17139:2;17143:7;17123:9;:28::i;:::-;16997:162;;;:::o;12297:864::-;12422:7;12463:16;12473:5;12463:9;:16::i;:::-;12455:5;:24;12447:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12529:22;12554:13;:11;:13::i;:::-;12529:38;;12578:19;12612:25;12666:9;12661:426;12685:14;12681:1;:18;12661:426;;;12721:31;12755:11;:14;12767:1;12755:14;;;;;;;;;;;12721:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12814:1;12788:28;;:9;:14;;;:28;;;12784:103;;12857:9;:14;;;12837:34;;12784:103;12926:5;12905:26;;:17;:26;;;12901:175;;;12971:5;12956:11;:20;12952:77;;;13008:1;13001:8;;;;;;;;;12952:77;13047:13;;;;;:::i;:::-;;;;12901:175;12706:381;12701:3;;;;;:::i;:::-;;;;12661:426;;;;13097:56;;;;;;;;;;:::i;:::-;;;;;;;;12297:864;;;;;:::o;24367:33::-;;;;;;;;;;;;;:::o;24330:30::-;;;;;;;;;;;;;:::o;28211:109::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28269:10:::1;28261:28;;:51;28290:21;28261:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28211:109::o:0;17165:177::-;17295:39;17312:4;17318:2;17322:7;17295:39;;;;;;;;;;;;:16;:39::i;:::-;17165:177;;;:::o;12063:228::-;12166:7;12207:13;:11;:13::i;:::-;12199:5;:21;12191:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12278:5;12271:12;;12063:228;;;:::o;24407:28::-;;;;;;;;;;;;;:::o;27977:106::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28068:7:::1;;28052:13;:23;;;;;;;:::i;:::-;;27977:106:::0;;:::o;14823:124::-;14887:7;14914:20;14926:7;14914:11;:20::i;:::-;:25;;;14907:32;;14823:124;;;:::o;24476:32::-;;;;:::o;13595:258::-;13659:7;13718:1;13701:19;;:5;:19;;;;13679:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;13817:12;:19;13830:5;13817:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;13809:36;;13802:43;;13595:258;;;:::o;7151:94::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7216:21:::1;7234:1;7216:9;:21::i;:::-;7151:94::o:0;6932:87::-;6978:7;7005:6;;;;;;;;;;;6998:13;;6932:87;:::o;27483:96::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27560:11:::1;27552:5;:19;;;;27483:96:::0;:::o;25196:167::-;25289:21;;:::i;:::-;25335:20;25347:7;25335:11;:20::i;:::-;25328:27;;25196:167;;;:::o;15059:104::-;15115:13;15148:7;15141:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15059:104;:::o;24594:35::-;;;;:::o;27677:93::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27752:10:::1;;;;;;;;;;;27751:11;27738:10;;:24;;;;;;;;;;;;;;;;;;27677:93::o:0;16460:311::-;16590:12;:10;:12::i;:::-;16578:24;;:8;:24;;;;16570:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16691:8;16646:18;:32;16665:12;:10;:12::i;:::-;16646:32;;;;;;;;;;;;;;;:42;16679:8;16646:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16744:8;16715:48;;16730:12;:10;:12::i;:::-;16715:48;;;16754:8;16715:48;;;;;;:::i;:::-;;;;;;;;16460:311;;:::o;17348:355::-;17507:28;17517:4;17523:2;17527:7;17507:9;:28::i;:::-;17568:48;17591:4;17597:2;17601:7;17610:5;17568:22;:48::i;:::-;17546:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;17348:355;;;;:::o;26139:971::-;25002:10;24989:23;;:9;:23;;;24981:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26244:13:::1;;;;;;;;;;;:27;;;;26261:10;;;;;;;;;;;26244:27;26236:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26358:13;;26346:8;26319:24;26332:10;26319:12;:24::i;:::-;:35;;;;:::i;:::-;:52;;26311:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;26430:1;26419:8;:12;26411:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;26483:8;;26471;:20;;26463:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26564:12;;26552:8;26536:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:40;;26528:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;26635:13;;;;;;;;;;;26632:93;;;26672:13;26679:5;26672:6;:13::i;:::-;26664:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;26632:93;26765:1;26738:24;26751:10;26738:12;:24::i;:::-;:28;26735:326;;;26811:8;26803:5;;:16;;;;:::i;:::-;26790:9;:29;;26782:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;26735:326;;;26869:13;;;;;;;;;;;:30;;;;26886:13;26893:5;26886:6;:13::i;:::-;26869:30;26866:183;;;26945:5;;26943:1;:7;;;;:::i;:::-;26931:8;26923:5;;:16;;;;:::i;:::-;26922:28;;;;:::i;:::-;26909:9;:41;;26901:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26866:183;;;27028:5;;27016:8;27008:5;;:16;;;;:::i;:::-;27007:26;;;;:::i;:::-;26994:9;:39;;26986:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26866:183;26735:326;27071:31;27081:10;27093:8;27071:9;:31::i;:::-;26139:971:::0;;:::o;25371:555::-;25489:13;25542:16;25550:7;25542;:16::i;:::-;25520:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;25659:5;25647:17;;:8;;;;;;;;;;;:17;;;25644:71;;;25688:15;25681:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25644:71;25725:23;25751;25766:7;25751:14;:23::i;:::-;25725:49;;25831:1;25811:9;25805:23;:27;:113;;;;;;;;;;;;;;;;;25876:9;25859:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;25805:113;25785:133;;;25371:555;;;;:::o;24515:31::-;;;;:::o;24553:34::-;;;;:::o;20969:43::-;;;;:::o;27587:82::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27656:5:::1;27649:4;:12;;;;27587:82:::0;:::o;25075:113::-;25133:7;25160:20;25174:5;25160:13;:20::i;:::-;25153:27;;25075:113;;;:::o;16777:214::-;16919:4;16948:18;:25;16967:5;16948:25;;;;;;;;;;;;;;;:35;16974:8;16948:35;;;;;;;;;;;;;;;;;;;;;;;;;16941:42;;16777:214;;;;:::o;27882:87::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27953:8:::1;;;;;;;;;;;27952:9;27941:8;;:20;;;;;;;;;;;;;;;;;;27882:87::o:0;7251:229::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7374:1:::1;7354:22;;:8;:22;;;;7332:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7453:19;7463:8;7453:9;:19::i;:::-;7251:229:::0;:::o;27778:98::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27855:13:::1;;;;;;;;;;;27854:14;27838:13;;:30;;;;;;;;;;;;;;;;;;27778:98::o:0;24442:27::-;;;;:::o;28089:114::-;7076:12;:10;:12::i;:::-;7065:23;;:7;:5;:7::i;:::-;:23;;;7057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28188:7:::1;;28170:15;:25;;;;;;;:::i;:::-;;28089:114:::0;;:::o;9464:207::-;9594:4;9638:25;9623:40;;;:11;:40;;;;9616:47;;9464:207;;;:::o;17709:111::-;17766:4;17800:12;;17790:7;:22;17783:29;;17709:111;;;:::o;6439:98::-;6492:7;6519:10;6512:17;;6439:98;:::o;20765:196::-;20907:2;20880:15;:24;20896:7;20880:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;20945:7;20941:2;20925:28;;20934:5;20925:28;;;;;;;;;;;;20765:196;;;:::o;17828:104::-;17897:27;17907:2;17911:8;17897:27;;;;;;;;;;;;:9;:27::i;:::-;17828:104;;:::o;19219:1540::-;19334:35;19372:20;19384:7;19372:11;:20::i;:::-;19334:58;;19405:22;19447:13;:18;;;19431:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;19506:12;:10;:12::i;:::-;19482:36;;:20;19494:7;19482:11;:20::i;:::-;:36;;;19431:87;:154;;;;19535:50;19552:13;:18;;;19572:12;:10;:12::i;:::-;19535:16;:50::i;:::-;19431:154;19405:181;;19621:17;19599:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19773:4;19751:26;;:13;:18;;;:26;;;19729:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;19876:1;19862:16;;:2;:16;;;;19854:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19933:43;19955:4;19961:2;19965:7;19974:1;19933:21;:43::i;:::-;19987:49;20004:1;20008:7;20017:13;:18;;;19987:8;:49::i;:::-;20079:1;20049:12;:18;20062:4;20049:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20119:1;20091:12;:16;20104:2;20091:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20154:43;;;;;;;;20169:2;20154:43;;;;;;20180:15;20154:43;;;;;20131:11;:20;20143:7;20131:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20322:19;20354:1;20344:7;:11;;;;:::i;:::-;20322:33;;20411:1;20370:43;;:11;:24;20382:11;20370:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;20366:288;;;20434:20;20442:11;20434:7;:20::i;:::-;20430:213;;;20502:125;;;;;;;;20539:13;:18;;;20502:125;;;;;;20580:13;:28;;;20502:125;;;;;20475:11;:24;20487:11;20475:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20430:213;20366:288;20690:7;20686:2;20671:27;;20680:4;20671:27;;;;;;;;;;;;20709:42;20730:4;20736:2;20740:7;20749:1;20709:20;:42::i;:::-;19323:1436;;;19219:1540;;;:::o;14135:682::-;14223:21;;:::i;:::-;14270:16;14278:7;14270;:16::i;:::-;14262:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14346:26;14398:12;14387:7;:23;14383:103;;14473:1;14458:12;14448:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;14427:47;;14383:103;14503:12;14518:7;14503:22;;14498:242;14535:18;14527:4;:26;14498:242;;14578:31;14612:11;:17;14624:4;14612:17;;;;;;;;;;;14578:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14674:1;14648:28;;:9;:14;;;:28;;;14644:85;;14704:9;14697:16;;;;;;;14644:85;14563:177;14555:6;;;;;:::i;:::-;;;;14498:242;;;;14752:57;;;;;;;;;;:::i;:::-;;;;;;;;14135:682;;;;:::o;7488:173::-;7544:16;7563:6;;;;;;;;;;;7544:25;;7589:8;7580:6;;:17;;;;;;;;;;;;;;;;;;7644:8;7613:40;;7634:8;7613:40;;;;;;;;;;;;7533:128;7488:173;:::o;21870:985::-;22025:4;22046:15;:2;:13;;;:15::i;:::-;22042:806;;;22115:2;22099:36;;;22158:12;:10;:12::i;:::-;22193:4;22220:7;22250:5;22099:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22078:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22478:1;22461:6;:13;:18;22457:321;;;22504:109;;;;;;;;;;:::i;:::-;;;;;;;;22457:321;22728:6;22722:13;22713:6;22709:2;22705:15;22698:38;22078:715;22348:45;;;22338:55;;;:6;:55;;;;22331:62;;;;;22042:806;22832:4;22825:11;;21870:985;;;;;;;:::o;25934:197::-;25997:4;26014:12;26056:10;26039:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;26029:39;;;;;;26014:54;;26086:37;26105:5;26112:4;;26118;26086:18;:37::i;:::-;26079:44;;;25934:197;;;:::o;15169:468::-;15287:13;15340:16;15348:7;15340;:16::i;:::-;15318:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;15444:21;15468:10;:8;:10::i;:::-;15444:34;;15533:1;15515:7;15509:21;:25;:120;;;;;;;;;;;;;;;;;15578:7;15587:18;:7;:16;:18::i;:::-;15561:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15509:120;15489:140;;;15169:468;;;:::o;13861:266::-;13922:7;13981:1;13964:19;;:5;:19;;;;13942:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;14086:12;:19;14099:5;14086:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;14078:41;;14071:48;;13861:266;;;:::o;17938:1275::-;18061:20;18084:12;;18061:35;;18129:1;18115:16;;:2;:16;;;;18107:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18189:21;18197:12;18189:7;:21::i;:::-;18188:22;18180:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18275:12;18263:8;:24;;18255:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18339:61;18369:1;18373:2;18377:12;18391:8;18339:21;:61::i;:::-;18413:30;18446:12;:16;18459:2;18446:16;;;;;;;;;;;;;;;18413:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18492:135;;;;;;;;18548:8;18518:11;:19;;;:39;;;;:::i;:::-;18492:135;;;;;;18607:8;18572:11;:24;;;:44;;;;:::i;:::-;18492:135;;;;;18473:12;:16;18486:2;18473:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18666:43;;;;;;;;18681:2;18666:43;;;;;;18692:15;18666:43;;;;;18638:11;:25;18650:12;18638:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18722:20;18745:12;18722:35;;18775:9;18770:325;18794:8;18790:1;:12;18770:325;;;18854:12;18850:2;18829:38;;18846:1;18829:38;;;;;;;;;;;;18908:59;18939:1;18943:2;18947:12;18961:5;18908:22;:59::i;:::-;18882:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;19069:14;;;;;:::i;:::-;;;;18804:3;;;;;:::i;:::-;;;;18770:325;;;;19122:12;19107;:27;;;;19145:60;19174:1;19178:2;19182:12;19196:8;19145:20;:60::i;:::-;18050:1163;;;17938:1275;;;:::o;22861:159::-;;;;;:::o;23026:158::-;;;;;:::o;2445:117::-;2505:4;2553:1;2531:7;:19;;;:23;2524:30;;2445:117;;;:::o;23243:190::-;23368:4;23421;23392:25;23405:5;23412:4;23392:12;:25::i;:::-;:33;23385:40;;23243:190;;;;;:::o;27361:114::-;27421:13;27454;27447:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27361:114;:::o;7833:656::-;7889:13;8052:1;8043:5;:10;8039:53;;;8070:10;;;;;;;;;;;;;;;;;;;;;8039:53;8102:12;8117:5;8102:20;;8133:14;8158:78;8173:1;8165:4;:9;8158:78;;8191:8;;;;;:::i;:::-;;;;8222:2;8214:10;;;;;:::i;:::-;;;8158:78;;;8246:19;8278:6;8268:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8246:39;;8296:154;8312:1;8303:5;:10;8296:154;;8340:1;8330:11;;;;;:::i;:::-;;;8407:2;8399:5;:10;;;;:::i;:::-;8386:2;:24;;;;:::i;:::-;8373:39;;8356:6;8363;8356:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8436:2;8427:11;;;;;:::i;:::-;;;8296:154;;;8474:6;8460:21;;;;;7833:656;;;;:::o;23439:549::-;23549:7;23574:20;23597:4;23574:27;;23617:9;23612:339;23636:5;:12;23632:1;:16;23612:339;;;23670:20;23693:5;23699:1;23693:8;;;;;;;;:::i;:::-;;;;;;;;23670:31;;23736:12;23720;:28;23716:224;;23784:42;23799:12;23813;23784:14;:42::i;:::-;23769:57;;23716:224;;;23882:42;23897:12;23911;23882:14;:42::i;:::-;23867:57;;23716:224;23655:296;23650:3;;;;;:::i;:::-;;;;23612:339;;;;23968:12;23961:19;;;23439:549;;;;:::o;23996:256::-;24091:13;24159:1;24153:4;24146:15;24188:1;24182:4;24175:15;24229:4;24223;24213:21;24204:30;;23996:256;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1330:370::-;1401:5;1450:3;1443:4;1435:6;1431:17;1427:27;1417:122;;1458:79;;:::i;:::-;1417:122;1575:6;1562:20;1600:94;1690:3;1682:6;1675:4;1667:6;1663:17;1600:94;:::i;:::-;1591:103;;1407:293;1330:370;;;;:::o;1706:133::-;1749:5;1787:6;1774:20;1765:29;;1803:30;1827:5;1803:30;:::i;:::-;1706:133;;;;:::o;1845:139::-;1891:5;1929:6;1916:20;1907:29;;1945:33;1972:5;1945:33;:::i;:::-;1845:139;;;;:::o;1990:137::-;2035:5;2073:6;2060:20;2051:29;;2089:32;2115:5;2089:32;:::i;:::-;1990:137;;;;:::o;2133:141::-;2189:5;2220:6;2214:13;2205:22;;2236:32;2262:5;2236:32;:::i;:::-;2133:141;;;;:::o;2293:338::-;2348:5;2397:3;2390:4;2382:6;2378:17;2374:27;2364:122;;2405:79;;:::i;:::-;2364:122;2522:6;2509:20;2547:78;2621:3;2613:6;2606:4;2598:6;2594:17;2547:78;:::i;:::-;2538:87;;2354:277;2293:338;;;;:::o;2651:553::-;2709:8;2719:6;2769:3;2762:4;2754:6;2750:17;2746:27;2736:122;;2777:79;;:::i;:::-;2736:122;2890:6;2877:20;2867:30;;2920:18;2912:6;2909:30;2906:117;;;2942:79;;:::i;:::-;2906:117;3056:4;3048:6;3044:17;3032:29;;3110:3;3102:4;3094:6;3090:17;3080:8;3076:32;3073:41;3070:128;;;3117:79;;:::i;:::-;3070:128;2651:553;;;;;:::o;3210:139::-;3256:5;3294:6;3281:20;3272:29;;3310:33;3337:5;3310:33;:::i;:::-;3210:139;;;;:::o;3355:329::-;3414:6;3463:2;3451:9;3442:7;3438:23;3434:32;3431:119;;;3469:79;;:::i;:::-;3431:119;3589:1;3614:53;3659:7;3650:6;3639:9;3635:22;3614:53;:::i;:::-;3604:63;;3560:117;3355:329;;;;:::o;3690:474::-;3758:6;3766;3815:2;3803:9;3794:7;3790:23;3786:32;3783:119;;;3821:79;;:::i;:::-;3783:119;3941:1;3966:53;4011:7;4002:6;3991:9;3987:22;3966:53;:::i;:::-;3956:63;;3912:117;4068:2;4094:53;4139:7;4130:6;4119:9;4115:22;4094:53;:::i;:::-;4084:63;;4039:118;3690:474;;;;;:::o;4170:619::-;4247:6;4255;4263;4312:2;4300:9;4291:7;4287:23;4283:32;4280:119;;;4318:79;;:::i;:::-;4280:119;4438:1;4463:53;4508:7;4499:6;4488:9;4484:22;4463:53;:::i;:::-;4453:63;;4409:117;4565:2;4591:53;4636:7;4627:6;4616:9;4612:22;4591:53;:::i;:::-;4581:63;;4536:118;4693:2;4719:53;4764:7;4755:6;4744:9;4740:22;4719:53;:::i;:::-;4709:63;;4664:118;4170:619;;;;;:::o;4795:943::-;4890:6;4898;4906;4914;4963:3;4951:9;4942:7;4938:23;4934:33;4931:120;;;4970:79;;:::i;:::-;4931:120;5090:1;5115:53;5160:7;5151:6;5140:9;5136:22;5115:53;:::i;:::-;5105:63;;5061:117;5217:2;5243:53;5288:7;5279:6;5268:9;5264:22;5243:53;:::i;:::-;5233:63;;5188:118;5345:2;5371:53;5416:7;5407:6;5396:9;5392:22;5371:53;:::i;:::-;5361:63;;5316:118;5501:2;5490:9;5486:18;5473:32;5532:18;5524:6;5521:30;5518:117;;;5554:79;;:::i;:::-;5518:117;5659:62;5713:7;5704:6;5693:9;5689:22;5659:62;:::i;:::-;5649:72;;5444:287;4795:943;;;;;;;:::o;5744:468::-;5809:6;5817;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:53;6062:7;6053:6;6042:9;6038:22;6017:53;:::i;:::-;6007:63;;5963:117;6119:2;6145:50;6187:7;6178:6;6167:9;6163:22;6145:50;:::i;:::-;6135:60;;6090:115;5744:468;;;;;:::o;6218:474::-;6286:6;6294;6343:2;6331:9;6322:7;6318:23;6314:32;6311:119;;;6349:79;;:::i;:::-;6311:119;6469:1;6494:53;6539:7;6530:6;6519:9;6515:22;6494:53;:::i;:::-;6484:63;;6440:117;6596:2;6622:53;6667:7;6658:6;6647:9;6643:22;6622:53;:::i;:::-;6612:63;;6567:118;6218:474;;;;;:::o;6698:329::-;6757:6;6806:2;6794:9;6785:7;6781:23;6777:32;6774:119;;;6812:79;;:::i;:::-;6774:119;6932:1;6957:53;7002:7;6993:6;6982:9;6978:22;6957:53;:::i;:::-;6947:63;;6903:117;6698:329;;;;:::o;7033:327::-;7091:6;7140:2;7128:9;7119:7;7115:23;7111:32;7108:119;;;7146:79;;:::i;:::-;7108:119;7266:1;7291:52;7335:7;7326:6;7315:9;7311:22;7291:52;:::i;:::-;7281:62;;7237:116;7033:327;;;;:::o;7366:349::-;7435:6;7484:2;7472:9;7463:7;7459:23;7455:32;7452:119;;;7490:79;;:::i;:::-;7452:119;7610:1;7635:63;7690:7;7681:6;7670:9;7666:22;7635:63;:::i;:::-;7625:73;;7581:127;7366:349;;;;:::o;7721:529::-;7792:6;7800;7849:2;7837:9;7828:7;7824:23;7820:32;7817:119;;;7855:79;;:::i;:::-;7817:119;8003:1;7992:9;7988:17;7975:31;8033:18;8025:6;8022:30;8019:117;;;8055:79;;:::i;:::-;8019:117;8168:65;8225:7;8216:6;8205:9;8201:22;8168:65;:::i;:::-;8150:83;;;;7946:297;7721:529;;;;;:::o;8256:329::-;8315:6;8364:2;8352:9;8343:7;8339:23;8335:32;8332:119;;;8370:79;;:::i;:::-;8332:119;8490:1;8515:53;8560:7;8551:6;8540:9;8536:22;8515:53;:::i;:::-;8505:63;;8461:117;8256:329;;;;:::o;8591:684::-;8684:6;8692;8741:2;8729:9;8720:7;8716:23;8712:32;8709:119;;;8747:79;;:::i;:::-;8709:119;8867:1;8892:53;8937:7;8928:6;8917:9;8913:22;8892:53;:::i;:::-;8882:63;;8838:117;9022:2;9011:9;9007:18;8994:32;9053:18;9045:6;9042:30;9039:117;;;9075:79;;:::i;:::-;9039:117;9180:78;9250:7;9241:6;9230:9;9226:22;9180:78;:::i;:::-;9170:88;;8965:303;8591:684;;;;;:::o;9281:108::-;9358:24;9376:5;9358:24;:::i;:::-;9353:3;9346:37;9281:108;;:::o;9395:118::-;9482:24;9500:5;9482:24;:::i;:::-;9477:3;9470:37;9395:118;;:::o;9519:157::-;9624:45;9644:24;9662:5;9644:24;:::i;:::-;9624:45;:::i;:::-;9619:3;9612:58;9519:157;;:::o;9682:109::-;9763:21;9778:5;9763:21;:::i;:::-;9758:3;9751:34;9682:109;;:::o;9797:360::-;9883:3;9911:38;9943:5;9911:38;:::i;:::-;9965:70;10028:6;10023:3;9965:70;:::i;:::-;9958:77;;10044:52;10089:6;10084:3;10077:4;10070:5;10066:16;10044:52;:::i;:::-;10121:29;10143:6;10121:29;:::i;:::-;10116:3;10112:39;10105:46;;9887:270;9797:360;;;;:::o;10163:364::-;10251:3;10279:39;10312:5;10279:39;:::i;:::-;10334:71;10398:6;10393:3;10334:71;:::i;:::-;10327:78;;10414:52;10459:6;10454:3;10447:4;10440:5;10436:16;10414:52;:::i;:::-;10491:29;10513:6;10491:29;:::i;:::-;10486:3;10482:39;10475:46;;10255:272;10163:364;;;;:::o;10533:377::-;10639:3;10667:39;10700:5;10667:39;:::i;:::-;10722:89;10804:6;10799:3;10722:89;:::i;:::-;10715:96;;10820:52;10865:6;10860:3;10853:4;10846:5;10842:16;10820:52;:::i;:::-;10897:6;10892:3;10888:16;10881:23;;10643:267;10533:377;;;;:::o;10916:366::-;11058:3;11079:67;11143:2;11138:3;11079:67;:::i;:::-;11072:74;;11155:93;11244:3;11155:93;:::i;:::-;11273:2;11268:3;11264:12;11257:19;;10916:366;;;:::o;11288:::-;11430:3;11451:67;11515:2;11510:3;11451:67;:::i;:::-;11444:74;;11527:93;11616:3;11527:93;:::i;:::-;11645:2;11640:3;11636:12;11629:19;;11288:366;;;:::o;11660:::-;11802:3;11823:67;11887:2;11882:3;11823:67;:::i;:::-;11816:74;;11899:93;11988:3;11899:93;:::i;:::-;12017:2;12012:3;12008:12;12001:19;;11660:366;;;:::o;12032:::-;12174:3;12195:67;12259:2;12254:3;12195:67;:::i;:::-;12188:74;;12271:93;12360:3;12271:93;:::i;:::-;12389:2;12384:3;12380:12;12373:19;;12032:366;;;:::o;12404:::-;12546:3;12567:67;12631:2;12626:3;12567:67;:::i;:::-;12560:74;;12643:93;12732:3;12643:93;:::i;:::-;12761:2;12756:3;12752:12;12745:19;;12404:366;;;:::o;12776:::-;12918:3;12939:67;13003:2;12998:3;12939:67;:::i;:::-;12932:74;;13015:93;13104:3;13015:93;:::i;:::-;13133:2;13128:3;13124:12;13117:19;;12776:366;;;:::o;13148:::-;13290:3;13311:67;13375:2;13370:3;13311:67;:::i;:::-;13304:74;;13387:93;13476:3;13387:93;:::i;:::-;13505:2;13500:3;13496:12;13489:19;;13148:366;;;:::o;13520:::-;13662:3;13683:67;13747:2;13742:3;13683:67;:::i;:::-;13676:74;;13759:93;13848:3;13759:93;:::i;:::-;13877:2;13872:3;13868:12;13861:19;;13520:366;;;:::o;13892:::-;14034:3;14055:67;14119:2;14114:3;14055:67;:::i;:::-;14048:74;;14131:93;14220:3;14131:93;:::i;:::-;14249:2;14244:3;14240:12;14233:19;;13892:366;;;:::o;14264:::-;14406:3;14427:67;14491:2;14486:3;14427:67;:::i;:::-;14420:74;;14503:93;14592:3;14503:93;:::i;:::-;14621:2;14616:3;14612:12;14605:19;;14264:366;;;:::o;14636:::-;14778:3;14799:67;14863:2;14858:3;14799:67;:::i;:::-;14792:74;;14875:93;14964:3;14875:93;:::i;:::-;14993:2;14988:3;14984:12;14977:19;;14636:366;;;:::o;15008:::-;15150:3;15171:67;15235:2;15230:3;15171:67;:::i;:::-;15164:74;;15247:93;15336:3;15247:93;:::i;:::-;15365:2;15360:3;15356:12;15349:19;;15008:366;;;:::o;15380:::-;15522:3;15543:67;15607:2;15602:3;15543:67;:::i;:::-;15536:74;;15619:93;15708:3;15619:93;:::i;:::-;15737:2;15732:3;15728:12;15721:19;;15380:366;;;:::o;15752:::-;15894:3;15915:67;15979:2;15974:3;15915:67;:::i;:::-;15908:74;;15991:93;16080:3;15991:93;:::i;:::-;16109:2;16104:3;16100:12;16093:19;;15752:366;;;:::o;16124:400::-;16284:3;16305:84;16387:1;16382:3;16305:84;:::i;:::-;16298:91;;16398:93;16487:3;16398:93;:::i;:::-;16516:1;16511:3;16507:11;16500:18;;16124:400;;;:::o;16530:366::-;16672:3;16693:67;16757:2;16752:3;16693:67;:::i;:::-;16686:74;;16769:93;16858:3;16769:93;:::i;:::-;16887:2;16882:3;16878:12;16871:19;;16530:366;;;:::o;16902:::-;17044:3;17065:67;17129:2;17124:3;17065:67;:::i;:::-;17058:74;;17141:93;17230:3;17141:93;:::i;:::-;17259:2;17254:3;17250:12;17243:19;;16902:366;;;:::o;17274:::-;17416:3;17437:67;17501:2;17496:3;17437:67;:::i;:::-;17430:74;;17513:93;17602:3;17513:93;:::i;:::-;17631:2;17626:3;17622:12;17615:19;;17274:366;;;:::o;17646:::-;17788:3;17809:67;17873:2;17868:3;17809:67;:::i;:::-;17802:74;;17885:93;17974:3;17885:93;:::i;:::-;18003:2;17998:3;17994:12;17987:19;;17646:366;;;:::o;18018:::-;18160:3;18181:67;18245:2;18240:3;18181:67;:::i;:::-;18174:74;;18257:93;18346:3;18257:93;:::i;:::-;18375:2;18370:3;18366:12;18359:19;;18018:366;;;:::o;18390:::-;18532:3;18553:67;18617:2;18612:3;18553:67;:::i;:::-;18546:74;;18629:93;18718:3;18629:93;:::i;:::-;18747:2;18742:3;18738:12;18731:19;;18390:366;;;:::o;18762:::-;18904:3;18925:67;18989:2;18984:3;18925:67;:::i;:::-;18918:74;;19001:93;19090:3;19001:93;:::i;:::-;19119:2;19114:3;19110:12;19103:19;;18762:366;;;:::o;19134:::-;19276:3;19297:67;19361:2;19356:3;19297:67;:::i;:::-;19290:74;;19373:93;19462:3;19373:93;:::i;:::-;19491:2;19486:3;19482:12;19475:19;;19134:366;;;:::o;19506:::-;19648:3;19669:67;19733:2;19728:3;19669:67;:::i;:::-;19662:74;;19745:93;19834:3;19745:93;:::i;:::-;19863:2;19858:3;19854:12;19847:19;;19506:366;;;:::o;19878:::-;20020:3;20041:67;20105:2;20100:3;20041:67;:::i;:::-;20034:74;;20117:93;20206:3;20117:93;:::i;:::-;20235:2;20230:3;20226:12;20219:19;;19878:366;;;:::o;20250:::-;20392:3;20413:67;20477:2;20472:3;20413:67;:::i;:::-;20406:74;;20489:93;20578:3;20489:93;:::i;:::-;20607:2;20602:3;20598:12;20591:19;;20250:366;;;:::o;20622:::-;20764:3;20785:67;20849:2;20844:3;20785:67;:::i;:::-;20778:74;;20861:93;20950:3;20861:93;:::i;:::-;20979:2;20974:3;20970:12;20963:19;;20622:366;;;:::o;20994:::-;21136:3;21157:67;21221:2;21216:3;21157:67;:::i;:::-;21150:74;;21233:93;21322:3;21233:93;:::i;:::-;21351:2;21346:3;21342:12;21335:19;;20994:366;;;:::o;21366:::-;21508:3;21529:67;21593:2;21588:3;21529:67;:::i;:::-;21522:74;;21605:93;21694:3;21605:93;:::i;:::-;21723:2;21718:3;21714:12;21707:19;;21366:366;;;:::o;21738:::-;21880:3;21901:67;21965:2;21960:3;21901:67;:::i;:::-;21894:74;;21977:93;22066:3;21977:93;:::i;:::-;22095:2;22090:3;22086:12;22079:19;;21738:366;;;:::o;22110:::-;22252:3;22273:67;22337:2;22332:3;22273:67;:::i;:::-;22266:74;;22349:93;22438:3;22349:93;:::i;:::-;22467:2;22462:3;22458:12;22451:19;;22110:366;;;:::o;22552:527::-;22711:4;22706:3;22702:14;22798:4;22791:5;22787:16;22781:23;22817:63;22874:4;22869:3;22865:14;22851:12;22817:63;:::i;:::-;22726:164;22982:4;22975:5;22971:16;22965:23;23001:61;23056:4;23051:3;23047:14;23033:12;23001:61;:::i;:::-;22900:172;22680:399;22552:527;;:::o;23085:118::-;23172:24;23190:5;23172:24;:::i;:::-;23167:3;23160:37;23085:118;;:::o;23209:105::-;23284:23;23301:5;23284:23;:::i;:::-;23279:3;23272:36;23209:105;;:::o;23320:256::-;23432:3;23447:75;23518:3;23509:6;23447:75;:::i;:::-;23547:2;23542:3;23538:12;23531:19;;23567:3;23560:10;;23320:256;;;;:::o;23582:435::-;23762:3;23784:95;23875:3;23866:6;23784:95;:::i;:::-;23777:102;;23896:95;23987:3;23978:6;23896:95;:::i;:::-;23889:102;;24008:3;24001:10;;23582:435;;;;;:::o;24023:541::-;24256:3;24278:95;24369:3;24360:6;24278:95;:::i;:::-;24271:102;;24390:148;24534:3;24390:148;:::i;:::-;24383:155;;24555:3;24548:10;;24023:541;;;;:::o;24570:222::-;24663:4;24701:2;24690:9;24686:18;24678:26;;24714:71;24782:1;24771:9;24767:17;24758:6;24714:71;:::i;:::-;24570:222;;;;:::o;24798:640::-;24993:4;25031:3;25020:9;25016:19;25008:27;;25045:71;25113:1;25102:9;25098:17;25089:6;25045:71;:::i;:::-;25126:72;25194:2;25183:9;25179:18;25170:6;25126:72;:::i;:::-;25208;25276:2;25265:9;25261:18;25252:6;25208:72;:::i;:::-;25327:9;25321:4;25317:20;25312:2;25301:9;25297:18;25290:48;25355:76;25426:4;25417:6;25355:76;:::i;:::-;25347:84;;24798:640;;;;;;;:::o;25444:210::-;25531:4;25569:2;25558:9;25554:18;25546:26;;25582:65;25644:1;25633:9;25629:17;25620:6;25582:65;:::i;:::-;25444:210;;;;:::o;25660:313::-;25773:4;25811:2;25800:9;25796:18;25788:26;;25860:9;25854:4;25850:20;25846:1;25835:9;25831:17;25824:47;25888:78;25961:4;25952:6;25888:78;:::i;:::-;25880:86;;25660:313;;;;:::o;25979:419::-;26145:4;26183:2;26172:9;26168:18;26160:26;;26232:9;26226:4;26222:20;26218:1;26207:9;26203:17;26196:47;26260:131;26386:4;26260:131;:::i;:::-;26252:139;;25979:419;;;:::o;26404:::-;26570:4;26608:2;26597:9;26593:18;26585:26;;26657:9;26651:4;26647:20;26643:1;26632:9;26628:17;26621:47;26685:131;26811:4;26685:131;:::i;:::-;26677:139;;26404:419;;;:::o;26829:::-;26995:4;27033:2;27022:9;27018:18;27010:26;;27082:9;27076:4;27072:20;27068:1;27057:9;27053:17;27046:47;27110:131;27236:4;27110:131;:::i;:::-;27102:139;;26829:419;;;:::o;27254:::-;27420:4;27458:2;27447:9;27443:18;27435:26;;27507:9;27501:4;27497:20;27493:1;27482:9;27478:17;27471:47;27535:131;27661:4;27535:131;:::i;:::-;27527:139;;27254:419;;;:::o;27679:::-;27845:4;27883:2;27872:9;27868:18;27860:26;;27932:9;27926:4;27922:20;27918:1;27907:9;27903:17;27896:47;27960:131;28086:4;27960:131;:::i;:::-;27952:139;;27679:419;;;:::o;28104:::-;28270:4;28308:2;28297:9;28293:18;28285:26;;28357:9;28351:4;28347:20;28343:1;28332:9;28328:17;28321:47;28385:131;28511:4;28385:131;:::i;:::-;28377:139;;28104:419;;;:::o;28529:::-;28695:4;28733:2;28722:9;28718:18;28710:26;;28782:9;28776:4;28772:20;28768:1;28757:9;28753:17;28746:47;28810:131;28936:4;28810:131;:::i;:::-;28802:139;;28529:419;;;:::o;28954:::-;29120:4;29158:2;29147:9;29143:18;29135:26;;29207:9;29201:4;29197:20;29193:1;29182:9;29178:17;29171:47;29235:131;29361:4;29235:131;:::i;:::-;29227:139;;28954:419;;;:::o;29379:::-;29545:4;29583:2;29572:9;29568:18;29560:26;;29632:9;29626:4;29622:20;29618:1;29607:9;29603:17;29596:47;29660:131;29786:4;29660:131;:::i;:::-;29652:139;;29379:419;;;:::o;29804:::-;29970:4;30008:2;29997:9;29993:18;29985:26;;30057:9;30051:4;30047:20;30043:1;30032:9;30028:17;30021:47;30085:131;30211:4;30085:131;:::i;:::-;30077:139;;29804:419;;;:::o;30229:::-;30395:4;30433:2;30422:9;30418:18;30410:26;;30482:9;30476:4;30472:20;30468:1;30457:9;30453:17;30446:47;30510:131;30636:4;30510:131;:::i;:::-;30502:139;;30229:419;;;:::o;30654:::-;30820:4;30858:2;30847:9;30843:18;30835:26;;30907:9;30901:4;30897:20;30893:1;30882:9;30878:17;30871:47;30935:131;31061:4;30935:131;:::i;:::-;30927:139;;30654:419;;;:::o;31079:::-;31245:4;31283:2;31272:9;31268:18;31260:26;;31332:9;31326:4;31322:20;31318:1;31307:9;31303:17;31296:47;31360:131;31486:4;31360:131;:::i;:::-;31352:139;;31079:419;;;:::o;31504:::-;31670:4;31708:2;31697:9;31693:18;31685:26;;31757:9;31751:4;31747:20;31743:1;31732:9;31728:17;31721:47;31785:131;31911:4;31785:131;:::i;:::-;31777:139;;31504:419;;;:::o;31929:::-;32095:4;32133:2;32122:9;32118:18;32110:26;;32182:9;32176:4;32172:20;32168:1;32157:9;32153:17;32146:47;32210:131;32336:4;32210:131;:::i;:::-;32202:139;;31929:419;;;:::o;32354:::-;32520:4;32558:2;32547:9;32543:18;32535:26;;32607:9;32601:4;32597:20;32593:1;32582:9;32578:17;32571:47;32635:131;32761:4;32635:131;:::i;:::-;32627:139;;32354:419;;;:::o;32779:::-;32945:4;32983:2;32972:9;32968:18;32960:26;;33032:9;33026:4;33022:20;33018:1;33007:9;33003:17;32996:47;33060:131;33186:4;33060:131;:::i;:::-;33052:139;;32779:419;;;:::o;33204:::-;33370:4;33408:2;33397:9;33393:18;33385:26;;33457:9;33451:4;33447:20;33443:1;33432:9;33428:17;33421:47;33485:131;33611:4;33485:131;:::i;:::-;33477:139;;33204:419;;;:::o;33629:::-;33795:4;33833:2;33822:9;33818:18;33810:26;;33882:9;33876:4;33872:20;33868:1;33857:9;33853:17;33846:47;33910:131;34036:4;33910:131;:::i;:::-;33902:139;;33629:419;;;:::o;34054:::-;34220:4;34258:2;34247:9;34243:18;34235:26;;34307:9;34301:4;34297:20;34293:1;34282:9;34278:17;34271:47;34335:131;34461:4;34335:131;:::i;:::-;34327:139;;34054:419;;;:::o;34479:::-;34645:4;34683:2;34672:9;34668:18;34660:26;;34732:9;34726:4;34722:20;34718:1;34707:9;34703:17;34696:47;34760:131;34886:4;34760:131;:::i;:::-;34752:139;;34479:419;;;:::o;34904:::-;35070:4;35108:2;35097:9;35093:18;35085:26;;35157:9;35151:4;35147:20;35143:1;35132:9;35128:17;35121:47;35185:131;35311:4;35185:131;:::i;:::-;35177:139;;34904:419;;;:::o;35329:::-;35495:4;35533:2;35522:9;35518:18;35510:26;;35582:9;35576:4;35572:20;35568:1;35557:9;35553:17;35546:47;35610:131;35736:4;35610:131;:::i;:::-;35602:139;;35329:419;;;:::o;35754:::-;35920:4;35958:2;35947:9;35943:18;35935:26;;36007:9;36001:4;35997:20;35993:1;35982:9;35978:17;35971:47;36035:131;36161:4;36035:131;:::i;:::-;36027:139;;35754:419;;;:::o;36179:::-;36345:4;36383:2;36372:9;36368:18;36360:26;;36432:9;36426:4;36422:20;36418:1;36407:9;36403:17;36396:47;36460:131;36586:4;36460:131;:::i;:::-;36452:139;;36179:419;;;:::o;36604:::-;36770:4;36808:2;36797:9;36793:18;36785:26;;36857:9;36851:4;36847:20;36843:1;36832:9;36828:17;36821:47;36885:131;37011:4;36885:131;:::i;:::-;36877:139;;36604:419;;;:::o;37029:::-;37195:4;37233:2;37222:9;37218:18;37210:26;;37282:9;37276:4;37272:20;37268:1;37257:9;37253:17;37246:47;37310:131;37436:4;37310:131;:::i;:::-;37302:139;;37029:419;;;:::o;37454:::-;37620:4;37658:2;37647:9;37643:18;37635:26;;37707:9;37701:4;37697:20;37693:1;37682:9;37678:17;37671:47;37735:131;37861:4;37735:131;:::i;:::-;37727:139;;37454:419;;;:::o;37879:::-;38045:4;38083:2;38072:9;38068:18;38060:26;;38132:9;38126:4;38122:20;38118:1;38107:9;38103:17;38096:47;38160:131;38286:4;38160:131;:::i;:::-;38152:139;;37879:419;;;:::o;38304:::-;38470:4;38508:2;38497:9;38493:18;38485:26;;38557:9;38551:4;38547:20;38543:1;38532:9;38528:17;38521:47;38585:131;38711:4;38585:131;:::i;:::-;38577:139;;38304:419;;;:::o;38729:346::-;38884:4;38922:2;38911:9;38907:18;38899:26;;38935:133;39065:1;39054:9;39050:17;39041:6;38935:133;:::i;:::-;38729:346;;;;:::o;39081:222::-;39174:4;39212:2;39201:9;39197:18;39189:26;;39225:71;39293:1;39282:9;39278:17;39269:6;39225:71;:::i;:::-;39081:222;;;;:::o;39309:129::-;39343:6;39370:20;;:::i;:::-;39360:30;;39399:33;39427:4;39419:6;39399:33;:::i;:::-;39309:129;;;:::o;39444:75::-;39477:6;39510:2;39504:9;39494:19;;39444:75;:::o;39525:311::-;39602:4;39692:18;39684:6;39681:30;39678:56;;;39714:18;;:::i;:::-;39678:56;39764:4;39756:6;39752:17;39744:25;;39824:4;39818;39814:15;39806:23;;39525:311;;;:::o;39842:307::-;39903:4;39993:18;39985:6;39982:30;39979:56;;;40015:18;;:::i;:::-;39979:56;40053:29;40075:6;40053:29;:::i;:::-;40045:37;;40137:4;40131;40127:15;40119:23;;39842:307;;;:::o;40155:98::-;40206:6;40240:5;40234:12;40224:22;;40155:98;;;:::o;40259:99::-;40311:6;40345:5;40339:12;40329:22;;40259:99;;;:::o;40364:168::-;40447:11;40481:6;40476:3;40469:19;40521:4;40516:3;40512:14;40497:29;;40364:168;;;;:::o;40538:169::-;40622:11;40656:6;40651:3;40644:19;40696:4;40691:3;40687:14;40672:29;;40538:169;;;;:::o;40713:148::-;40815:11;40852:3;40837:18;;40713:148;;;;:::o;40867:273::-;40907:3;40926:20;40944:1;40926:20;:::i;:::-;40921:25;;40960:20;40978:1;40960:20;:::i;:::-;40955:25;;41082:1;41046:34;41042:42;41039:1;41036:49;41033:75;;;41088:18;;:::i;:::-;41033:75;41132:1;41129;41125:9;41118:16;;40867:273;;;;:::o;41146:305::-;41186:3;41205:20;41223:1;41205:20;:::i;:::-;41200:25;;41239:20;41257:1;41239:20;:::i;:::-;41234:25;;41393:1;41325:66;41321:74;41318:1;41315:81;41312:107;;;41399:18;;:::i;:::-;41312:107;41443:1;41440;41436:9;41429:16;;41146:305;;;;:::o;41457:185::-;41497:1;41514:20;41532:1;41514:20;:::i;:::-;41509:25;;41548:20;41566:1;41548:20;:::i;:::-;41543:25;;41587:1;41577:35;;41592:18;;:::i;:::-;41577:35;41634:1;41631;41627:9;41622:14;;41457:185;;;;:::o;41648:348::-;41688:7;41711:20;41729:1;41711:20;:::i;:::-;41706:25;;41745:20;41763:1;41745:20;:::i;:::-;41740:25;;41933:1;41865:66;41861:74;41858:1;41855:81;41850:1;41843:9;41836:17;41832:105;41829:131;;;41940:18;;:::i;:::-;41829:131;41988:1;41985;41981:9;41970:20;;41648:348;;;;:::o;42002:191::-;42042:4;42062:20;42080:1;42062:20;:::i;:::-;42057:25;;42096:20;42114:1;42096:20;:::i;:::-;42091:25;;42135:1;42132;42129:8;42126:34;;;42140:18;;:::i;:::-;42126:34;42185:1;42182;42178:9;42170:17;;42002:191;;;;:::o;42199:::-;42239:4;42259:20;42277:1;42259:20;:::i;:::-;42254:25;;42293:20;42311:1;42293:20;:::i;:::-;42288:25;;42332:1;42329;42326:8;42323:34;;;42337:18;;:::i;:::-;42323:34;42382:1;42379;42375:9;42367:17;;42199:191;;;;:::o;42396:96::-;42433:7;42462:24;42480:5;42462:24;:::i;:::-;42451:35;;42396:96;;;:::o;42498:90::-;42532:7;42575:5;42568:13;42561:21;42550:32;;42498:90;;;:::o;42594:77::-;42631:7;42660:5;42649:16;;42594:77;;;:::o;42677:149::-;42713:7;42753:66;42746:5;42742:78;42731:89;;42677:149;;;:::o;42832:118::-;42869:7;42909:34;42902:5;42898:46;42887:57;;42832:118;;;:::o;42956:126::-;42993:7;43033:42;43026:5;43022:54;43011:65;;42956:126;;;:::o;43088:77::-;43125:7;43154:5;43143:16;;43088:77;;;:::o;43171:101::-;43207:7;43247:18;43240:5;43236:30;43225:41;;43171:101;;;:::o;43278:154::-;43362:6;43357:3;43352;43339:30;43424:1;43415:6;43410:3;43406:16;43399:27;43278:154;;;:::o;43438:307::-;43506:1;43516:113;43530:6;43527:1;43524:13;43516:113;;;43615:1;43610:3;43606:11;43600:18;43596:1;43591:3;43587:11;43580:39;43552:2;43549:1;43545:10;43540:15;;43516:113;;;43647:6;43644:1;43641:13;43638:101;;;43727:1;43718:6;43713:3;43709:16;43702:27;43638:101;43487:258;43438:307;;;:::o;43751:171::-;43790:3;43813:24;43831:5;43813:24;:::i;:::-;43804:33;;43859:4;43852:5;43849:15;43846:41;;;43867:18;;:::i;:::-;43846:41;43914:1;43907:5;43903:13;43896:20;;43751:171;;;:::o;43928:320::-;43972:6;44009:1;44003:4;43999:12;43989:22;;44056:1;44050:4;44046:12;44077:18;44067:81;;44133:4;44125:6;44121:17;44111:27;;44067:81;44195:2;44187:6;44184:14;44164:18;44161:38;44158:84;;;44214:18;;:::i;:::-;44158:84;43979:269;43928:320;;;:::o;44254:281::-;44337:27;44359:4;44337:27;:::i;:::-;44329:6;44325:40;44467:6;44455:10;44452:22;44431:18;44419:10;44416:34;44413:62;44410:88;;;44478:18;;:::i;:::-;44410:88;44518:10;44514:2;44507:22;44297:238;44254:281;;:::o;44541:233::-;44580:3;44603:24;44621:5;44603:24;:::i;:::-;44594:33;;44649:66;44642:5;44639:77;44636:103;;;44719:18;;:::i;:::-;44636:103;44766:1;44759:5;44755:13;44748:20;;44541:233;;;:::o;44780:100::-;44819:7;44848:26;44868:5;44848:26;:::i;:::-;44837:37;;44780:100;;;:::o;44886:94::-;44925:7;44954:20;44968:5;44954:20;:::i;:::-;44943:31;;44886:94;;;:::o;44986:176::-;45018:1;45035:20;45053:1;45035:20;:::i;:::-;45030:25;;45069:20;45087:1;45069:20;:::i;:::-;45064:25;;45108:1;45098:35;;45113:18;;:::i;:::-;45098:35;45154:1;45151;45147:9;45142:14;;44986:176;;;;:::o;45168:180::-;45216:77;45213:1;45206:88;45313:4;45310:1;45303:15;45337:4;45334:1;45327:15;45354:180;45402:77;45399:1;45392:88;45499:4;45496:1;45489:15;45523:4;45520:1;45513:15;45540:180;45588:77;45585:1;45578:88;45685:4;45682:1;45675:15;45709:4;45706:1;45699:15;45726:180;45774:77;45771:1;45764:88;45871:4;45868:1;45861:15;45895:4;45892:1;45885:15;45912:180;45960:77;45957:1;45950:88;46057:4;46054:1;46047:15;46081:4;46078:1;46071:15;46098:117;46207:1;46204;46197:12;46221:117;46330:1;46327;46320:12;46344:117;46453:1;46450;46443:12;46467:117;46576:1;46573;46566:12;46590:117;46699:1;46696;46689:12;46713:117;46822:1;46819;46812:12;46836:102;46877:6;46928:2;46924:7;46919:2;46912:5;46908:14;46904:28;46894:38;;46836:102;;;:::o;46944:94::-;46977:8;47025:5;47021:2;47017:14;46996:35;;46944:94;;;:::o;47044:221::-;47184:34;47180:1;47172:6;47168:14;47161:58;47253:4;47248:2;47240:6;47236:15;47229:29;47044:221;:::o;47271:171::-;47411:23;47407:1;47399:6;47395:14;47388:47;47271:171;:::o;47448:225::-;47588:34;47584:1;47576:6;47572:14;47565:58;47657:8;47652:2;47644:6;47640:15;47633:33;47448:225;:::o;47679:161::-;47819:13;47815:1;47807:6;47803:14;47796:37;47679:161;:::o;47846:229::-;47986:34;47982:1;47974:6;47970:14;47963:58;48055:12;48050:2;48042:6;48038:15;48031:37;47846:229;:::o;48081:173::-;48221:25;48217:1;48209:6;48205:14;48198:49;48081:173;:::o;48260:222::-;48400:34;48396:1;48388:6;48384:14;48377:58;48469:5;48464:2;48456:6;48452:15;48445:30;48260:222;:::o;48488:224::-;48628:34;48624:1;48616:6;48612:14;48605:58;48697:7;48692:2;48684:6;48680:15;48673:32;48488:224;:::o;48718:236::-;48858:34;48854:1;48846:6;48842:14;48835:58;48927:19;48922:2;48914:6;48910:15;48903:44;48718:236;:::o;48960:180::-;49100:32;49096:1;49088:6;49084:14;49077:56;48960:180;:::o;49146:174::-;49286:26;49282:1;49274:6;49270:14;49263:50;49146:174;:::o;49326:244::-;49466:34;49462:1;49454:6;49450:14;49443:58;49535:27;49530:2;49522:6;49518:15;49511:52;49326:244;:::o;49576:230::-;49716:34;49712:1;49704:6;49700:14;49693:58;49785:13;49780:2;49772:6;49768:15;49761:38;49576:230;:::o;49812:225::-;49952:34;49948:1;49940:6;49936:14;49929:58;50021:8;50016:2;50008:6;50004:15;49997:33;49812:225;:::o;50043:155::-;50183:7;50179:1;50171:6;50167:14;50160:31;50043:155;:::o;50204:182::-;50344:34;50340:1;50332:6;50328:14;50321:58;50204:182;:::o;50392:234::-;50532:34;50528:1;50520:6;50516:14;50509:58;50601:17;50596:2;50588:6;50584:15;50577:42;50392:234;:::o;50632:176::-;50772:28;50768:1;50760:6;50756:14;50749:52;50632:176;:::o;50814:237::-;50954:34;50950:1;50942:6;50938:14;50931:58;51023:20;51018:2;51010:6;51006:15;50999:45;50814:237;:::o;51057:227::-;51197:34;51193:1;51185:6;51181:14;51174:58;51266:10;51261:2;51253:6;51249:15;51242:35;51057:227;:::o;51290:221::-;51430:34;51426:1;51418:6;51414:14;51407:58;51499:4;51494:2;51486:6;51482:15;51475:29;51290:221;:::o;51517:174::-;51657:26;51653:1;51645:6;51641:14;51634:50;51517:174;:::o;51697:238::-;51837:34;51833:1;51825:6;51821:14;51814:58;51906:21;51901:2;51893:6;51889:15;51882:46;51697:238;:::o;51941:179::-;52081:31;52077:1;52069:6;52065:14;52058:55;51941:179;:::o;52126:220::-;52266:34;52262:1;52254:6;52250:14;52243:58;52335:3;52330:2;52322:6;52318:15;52311:28;52126:220;:::o;52352:231::-;52492:34;52488:1;52480:6;52476:14;52469:58;52561:14;52556:2;52548:6;52544:15;52537:39;52352:231;:::o;52589:166::-;52729:18;52725:1;52717:6;52713:14;52706:42;52589:166;:::o;52761:233::-;52901:34;52897:1;52889:6;52885:14;52878:58;52970:16;52965:2;52957:6;52953:15;52946:41;52761:233;:::o;53000:234::-;53140:34;53136:1;53128:6;53124:14;53117:58;53209:17;53204:2;53196:6;53192:15;53185:42;53000:234;:::o;53240:232::-;53380:34;53376:1;53368:6;53364:14;53357:58;53449:15;53444:2;53436:6;53432:15;53425:40;53240:232;:::o;53478:221::-;53618:34;53614:1;53606:6;53602:14;53595:58;53687:4;53682:2;53674:6;53670:15;53663:29;53478:221;:::o;53705:122::-;53778:24;53796:5;53778:24;:::i;:::-;53771:5;53768:35;53758:63;;53817:1;53814;53807:12;53758:63;53705:122;:::o;53833:116::-;53903:21;53918:5;53903:21;:::i;:::-;53896:5;53893:32;53883:60;;53939:1;53936;53929:12;53883:60;53833:116;:::o;53955:122::-;54028:24;54046:5;54028:24;:::i;:::-;54021:5;54018:35;54008:63;;54067:1;54064;54057:12;54008:63;53955:122;:::o;54083:120::-;54155:23;54172:5;54155:23;:::i;:::-;54148:5;54145:34;54135:62;;54193:1;54190;54183:12;54135:62;54083:120;:::o;54209:122::-;54282:24;54300:5;54282:24;:::i;:::-;54275:5;54272:35;54262:63;;54321:1;54318;54311:12;54262:63;54209:122;:::o

Swarm Source

ipfs://c4406c2a6300c5b6d9d85338c95f6105099877f12cb7d5fc7203e14c0ecde3ea
Loading...
Loading
Loading...
Loading
[ 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.