ETH Price: $3,409.51 (+6.81%)
Gas: 20 Gwei

Token

NOVA ($NOVA)
 

Overview

Max Total Supply

200 $NOVA

Holders

134

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 $NOVA
0xfd859761259cf78d3a90a621844b2bcadd7b0485
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
NOVA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

interface IERC721 is IERC165 {

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

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

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

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

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

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

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

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

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

interface IERC721Enumerable is IERC721 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

interface IERC721Receiver {

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

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

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

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

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

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

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

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

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

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: 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 virtual override {
        
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }


    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }


    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

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

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
       
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex; 

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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

contract NOVA is ERC721Enumerable, Ownable {
    using Strings for uint256;

    bytes32 public merkleRoot = 0x76765983cc75651bd6f7ecd7cd9ed638b4debd80a928cbf5753f6e67f1c44dc8;
    string baseURI = "ipfs://QmNy4rAu15yEFXbmT5rLcR7TnW4r1p6R1xdVJYoS2qatAY/";
    string notRevealedURI = "ipfs://QmRWHnHG2mpvRktstSnCmovrxJvDMxqGths36CaW3sXrYw/unrevealed.json";
    string private baseExtension = ".json";
    uint256 public cost = 0 ether;
    uint256 constant public maxSupply = 2022;
    uint256 public maxMintPerWallet = 2;
    bool public isPresaleStart = false;
    bool public isPublicStart = false;
    bool public revealed = false;
    bool public paused = false;
    uint256 private _numAvailableTokens = maxSupply;
    uint256[maxSupply] private _availableTokens;
    mapping(address=>uint256) public mintedNFTs;

    modifier whitelistMintCompliance(uint256 _mintAmount) {
        require(paused == false, "Minting not started yet!");
        require(isPresaleStart == true, "WhitelistMint not started yet!");
        require(_mintAmount <= maxMintPerWallet, "You can mint up to 2 NFTs!");
        require(mintedNFTs[msg.sender] + _mintAmount <= maxMintPerWallet, "You can mint max 2 NFTs!");
        require(totalSupply() + _mintAmount <= maxSupply, "Maximum Supply mint limit exceeded!");
        require(_mintAmount > 0, "You need to mint at least 1 NFT!");
        _;
    }
    modifier mintCompliance(uint256 _mintAmount){
        require(paused == false, "Minting not started yet!");
        require(isPublicStart == true, "Minting not started yet!");
        require(_mintAmount <= maxMintPerWallet, "You can mint up to 2 NFTs!");
        require(mintedNFTs[msg.sender] + _mintAmount <= maxMintPerWallet, "You can mint max 2 NFTs!");
        require(totalSupply() + _mintAmount <= maxSupply, "Maximum Supply mint limit exceeded!");
        require(_mintAmount > 0, "You need to mint at least 1 NFT!");
        _;
  }

    constructor() ERC721("NOVA", "$NOVA") {
        setBaseURI(baseURI);
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    //PUBLIC
    function whitelistMint(bytes32[] calldata _merkleProof, uint256[] calldata _position, uint256 _mintAmount) 
    external payable 
    whitelistMintCompliance(_mintAmount) {
        require(msg.value >= cost * _mintAmount, "insufficient fund!"); 
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(verify(merkleRoot, leaf, _merkleProof, _position), "You're not whitelisted: Invalid proof!");
        _mintLoop(msg.sender, _mintAmount);
        mintedNFTs[msg.sender] += _mintAmount;
    }

    function mint(uint256 _mintAmount) external payable mintCompliance(_mintAmount) {
        require(msg.value >= cost * _mintAmount, "insufficient fund!"); 
        _mintLoop(msg.sender, _mintAmount);
        mintedNFTs[msg.sender] += _mintAmount;
    }

    function verify(bytes32 root, bytes32 leaf, bytes32[] memory proof, uint256[] memory positions)
        internal
        pure
        returns (bool){
    bytes32 computedHash = leaf;

    for (uint256 i = 0; i < proof.length; i++) {
      bytes32 proofElement = proof[i];

      if (positions[i] == 1) {
        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
      } else {
        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
      }
    }

    return computedHash == root;
  }

    function setMerkleroot(bytes32 _root) public onlyOwner{
        merkleRoot = _root;
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

   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 currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), baseExtension))
            : "";
    }

    function setContractStatus(bool _status) external onlyOwner{
        paused = _status;
    }

    function reveal() public onlyOwner {
        revealed = true;
    }

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

    function startWhitelistMint() public onlyOwner{
        isPresaleStart = true;
    }

    function startPublicMint() public onlyOwner{
        isPublicStart = true;
        isPresaleStart = false;
    }

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

     function setNotRevealedURI(string memory _newURI) public onlyOwner {
        notRevealedURI = _newURI;
    }

    function _mintLoop(address _receiver, uint256 _mintAmount) internal {
        for (uint8 i = 0; i < _mintAmount; i++) {
        uint256 tokenId = useRandomAvailableToken(_mintAmount, i);
        _safeMint(_receiver, tokenId);
        }
    }

    function useRandomAvailableToken(uint256 _numToFetch, uint256 _i) internal returns (uint256){
        uint256 randomNum = uint256(
            keccak256(
                abi.encode(msg.sender,tx.gasprice,block.number,block.timestamp,blockhash(block.number - 1),_numToFetch,_i
                )
            )
        );

        uint256 randomIndex = randomNum % _numAvailableTokens;

        uint256 valAtIndex = _availableTokens[randomIndex];
        uint256 result;
        if (valAtIndex == 0) {
            result = randomIndex;
        } else {
            result = valAtIndex;
        }

        uint256 lastIndex = _numAvailableTokens - 1;
        if (randomIndex != lastIndex) {
            uint256 lastValInArray = _availableTokens[lastIndex];
            if (lastValInArray == 0) {
                _availableTokens[randomIndex] = lastIndex;
            } else {
                _availableTokens[randomIndex] = lastValInArray;
            }
        }

        _numAvailableTokens--;
        return result + 1;
    }

    function withdraw() public onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
        require(success);
    }

}

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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setContractStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setMerkleroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setMintCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256[]","name":"_position","type":"uint256[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040527f76765983cc75651bd6f7ecd7cd9ed638b4debd80a928cbf5753f6e67f1c44dc860001b600b55604051806060016040528060368152602001620059a060369139600c90805190602001906200005c92919062000473565b506040518060800160405280604581526020016200595b60459139600d90805190602001906200008e92919062000473565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000dc92919062000473565b506000600f5560026010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506000601160036101000a81548160ff0219169083151502179055506107e66012553480156200016657600080fd5b506040518060400160405280600481526020017f4e4f5641000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f244e4f56410000000000000000000000000000000000000000000000000000008152508160009080519060200190620001eb92919062000473565b5080600190805190602001906200020492919062000473565b505050620002276200021b620002d060201b60201c565b620002d860201b60201c565b620002ca600c80546200023a9062000598565b80601f0160208091040260200160405190810160405280929190818152602001828054620002689062000598565b8015620002b95780601f106200028d57610100808354040283529160200191620002b9565b820191906000526020600020905b8154815290600101906020018083116200029b57829003601f168201915b50505050506200039e60201b60201c565b620005fd565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003ae620002d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003d46200044960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200042d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004249062000565565b60405180910390fd5b80600c90805190602001906200044592919062000473565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004819062000598565b90600052602060002090601f016020900481019282620004a55760008555620004f1565b82601f10620004c057805160ff1916838001178555620004f1565b82800160010185558215620004f1579182015b82811115620004f0578251825591602001919060010190620004d3565b5b50905062000500919062000504565b5090565b5b808211156200051f57600081600090555060010162000505565b5090565b60006200053260208362000587565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620005808162000523565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620005b157607f821691505b60208210811415620005c857620005c7620005ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61534e806200060d6000396000f3fe60806040526004361061023b5760003560e01c806376c64c621161012e578063b228d925116100ab578063d5abeb011161006f578063d5abeb011461083e578063e985e9c514610869578063eb912568146108a6578063f2c4ce1e146108c2578063f2fde38b146108eb5761023b565b8063b228d92514610759578063b70196d714610784578063b88d4fde1461079b578063ba060bed146107c4578063c87b56dd146108015761023b565b806392f6c439116100f257806392f6c439146106a957806395d89b41146106d2578063a0712d68146106fd578063a22cb46514610719578063a475b5dd146107425761023b565b806376c64c62146105ea5780637fe8dfe1146106015780638545f4ea1461062c57806388b8084f146106555780638da5cb5b1461067e5761023b565b80633ccfd60b116101bc57806355f804b31161018057806355f804b3146105055780635c975abb1461052e5780636352211e1461055957806370a0823114610596578063715018a6146105d35761023b565b80633ccfd60b1461042057806342842e0e14610437578063438b6300146104605780634f6ccce71461049d57806351830227146104da5761023b565b806313faede61161020357806313faede61461033957806318160ddd1461036457806323b872dd1461038f5780632eb4a7ab146103b85780632f745c59146103e35761023b565b806301ffc9a71461024057806303da91dc1461027d57806306fdde03146102a8578063081812fc146102d3578063095ea7b314610310575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c8f565b610914565b60405161027491906149db565b60405180910390f35b34801561028957600080fd5b5061029261098e565b60405161029f91906149db565b60405180910390f35b3480156102b457600080fd5b506102bd6109a1565b6040516102ca9190614a11565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613d22565b610a33565b60405161030791906148e3565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190613b78565b610ab8565b005b34801561034557600080fd5b5061034e610bd0565b60405161035b9190614d73565b60405180910390f35b34801561037057600080fd5b50610379610bd6565b6040516103869190614d73565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a72565b610be3565b005b3480156103c457600080fd5b506103cd610c43565b6040516103da91906149f6565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613b78565b610c49565b6040516104179190614d73565b60405180910390f35b34801561042c57600080fd5b50610435610cee565b005b34801561044357600080fd5b5061045e60048036038101906104599190613a72565b610de3565b005b34801561046c57600080fd5b5061048760048036038101906104829190613a0d565b610e03565b60405161049491906149b9565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190613d22565b610efd565b6040516104d19190614d73565b60405180910390f35b3480156104e657600080fd5b506104ef610f94565b6040516104fc91906149db565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613ce1565b610fa7565b005b34801561053a57600080fd5b5061054361103d565b60405161055091906149db565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190613d22565b611050565b60405161058d91906148e3565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190613a0d565b611102565b6040516105ca9190614d73565b60405180910390f35b3480156105df57600080fd5b506105e86111ba565b005b3480156105f657600080fd5b506105ff611242565b005b34801561060d57600080fd5b506106166112f6565b60405161062391906149db565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613d22565b611309565b005b34801561066157600080fd5b5061067c60048036038101906106779190613c3d565b61138f565b005b34801561068a57600080fd5b50610693611428565b6040516106a091906148e3565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613c66565b611452565b005b3480156106de57600080fd5b506106e76114d8565b6040516106f49190614a11565b60405180910390f35b61071760048036038101906107129190613d22565b61156a565b005b34801561072557600080fd5b50610740600480360381019061073b9190613b3c565b61183b565b005b34801561074e57600080fd5b506107576119bc565b005b34801561076557600080fd5b5061076e611a55565b60405161077b9190614d73565b60405180910390f35b34801561079057600080fd5b50610799611a5b565b005b3480156107a757600080fd5b506107c260048036038101906107bd9190613ac1565b611af4565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190613a0d565b611b56565b6040516107f89190614d73565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613d22565b611b6f565b6040516108359190614a11565b60405180910390f35b34801561084a57600080fd5b50610853611cc8565b6040516108609190614d73565b60405180910390f35b34801561087557600080fd5b50610890600480360381019061088b9190613a36565b611cce565b60405161089d91906149db565b60405180910390f35b6108c060048036038101906108bb9190613bb4565b611d62565b005b3480156108ce57600080fd5b506108e960048036038101906108e49190613ce1565b612132565b005b3480156108f757600080fd5b50610912600480360381019061090d9190613a0d565b6121c8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109875750610986826122c0565b5b9050919050565b601160019054906101000a900460ff1681565b6060600080546109b0906150c7565b80601f01602080910402602001604051908101604052809291908181526020018280546109dc906150c7565b8015610a295780601f106109fe57610100808354040283529160200191610a29565b820191906000526020600020905b815481529060010190602001808311610a0c57829003601f168201915b5050505050905090565b6000610a3e826123a2565b610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490614c53565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac382611050565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90614cf3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b5361240e565b73ffffffffffffffffffffffffffffffffffffffff161480610b825750610b8181610b7c61240e565b611cce565b5b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614b73565b60405180910390fd5b610bcb8383612416565b505050565b600f5481565b6000600880549050905090565b610bf4610bee61240e565b826124cf565b610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90614d13565b60405180910390fd5b610c3e8383836125ad565b505050565b600b5481565b6000610c5483611102565b8210610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614a33565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cf661240e565b73ffffffffffffffffffffffffffffffffffffffff16610d14611428565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190614c93565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610d90906148ce565b60006040518083038185875af1925050503d8060008114610dcd576040519150601f19603f3d011682016040523d82523d6000602084013e610dd2565b606091505b5050905080610de057600080fd5b50565b610dfe83838360405180602001604052806000815250611af4565b505050565b60606000610e1083611102565b905060008167ffffffffffffffff811115610e54577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e825781602001602082028036833780820191505090505b50905060005b82811015610ef257610e9a8582610c49565b828281518110610ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610eea906150f9565b915050610e88565b508092505050919050565b6000610f07610bd6565b8210610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614d33565b60405180910390fd5b60088281548110610f82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160029054906101000a900460ff1681565b610faf61240e565b73ffffffffffffffffffffffffffffffffffffffff16610fcd611428565b73ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614c93565b60405180910390fd5b80600c9080519060200190611039929190613788565b5050565b601160039054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090614bb3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90614b93565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c261240e565b73ffffffffffffffffffffffffffffffffffffffff166111e0611428565b73ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90614c93565b60405180910390fd5b6112406000612809565b565b61124a61240e565b73ffffffffffffffffffffffffffffffffffffffff16611268611428565b73ffffffffffffffffffffffffffffffffffffffff16146112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614c93565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506000601160006101000a81548160ff021916908315150217905550565b601160009054906101000a900460ff1681565b61131161240e565b73ffffffffffffffffffffffffffffffffffffffff1661132f611428565b73ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90614c93565b60405180910390fd5b80600f8190555050565b61139761240e565b73ffffffffffffffffffffffffffffffffffffffff166113b5611428565b73ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290614c93565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61145a61240e565b73ffffffffffffffffffffffffffffffffffffffff16611478611428565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614c93565b60405180910390fd5b80600b8190555050565b6060600180546114e7906150c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611513906150c7565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b5050505050905090565b8060001515601160039054906101000a900460ff161515146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614d53565b60405180910390fd5b60011515601160019054906101000a900460ff16151514611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90614d53565b60405180910390fd5b60105481111561165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390614b53565b60405180910390fd5b601054816107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ab9190614ebb565b11156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390614bd3565b60405180910390fd5b6107e6816116f8610bd6565b6117029190614ebb565b1115611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90614bf3565b60405180910390fd5b60008111611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90614af3565b60405180910390fd5b81600f546117949190614f42565b3410156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614b33565b60405180910390fd5b6117e033836128cf565b816107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118309190614ebb565b925050819055505050565b61184361240e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614ad3565b60405180910390fd5b80600560006118be61240e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661196b61240e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119b091906149db565b60405180910390a35050565b6119c461240e565b73ffffffffffffffffffffffffffffffffffffffff166119e2611428565b73ffffffffffffffffffffffffffffffffffffffff1614611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90614c93565b60405180910390fd5b6001601160026101000a81548160ff021916908315150217905550565b60105481565b611a6361240e565b73ffffffffffffffffffffffffffffffffffffffff16611a81611428565b73ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90614c93565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b611b05611aff61240e565b836124cf565b611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90614d13565b60405180910390fd5b611b5084848484612911565b50505050565b6107f96020528060005260406000206000915090505481565b6060611b7a826123a2565b611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090614cd3565b60405180910390fd5b60001515601160029054906101000a900460ff1615151415611c6757600d8054611be2906150c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0e906150c7565b8015611c5b5780601f10611c3057610100808354040283529160200191611c5b565b820191906000526020600020905b815481529060010190602001808311611c3e57829003601f168201915b50505050509050611cc3565b6000611c7161296d565b90506000815111611c915760405180602001604052806000815250611cbf565b80611c9b846129ff565b600e604051602001611caf9392919061489d565b6040516020818303038152906040525b9150505b919050565b6107e681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8060001515601160039054906101000a900460ff16151514611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090614d53565b60405180910390fd5b60011515601160009054906101000a900460ff16151514611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614c33565b60405180910390fd5b601054811115611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90614b53565b60405180910390fd5b601054816107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea39190614ebb565b1115611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90614bd3565b60405180910390fd5b6107e681611ef0610bd6565b611efa9190614ebb565b1115611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290614bf3565b60405180910390fd5b60008111611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7590614af3565b60405180910390fd5b81600f54611f8c9190614f42565b341015611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc590614b33565b60405180910390fd5b600033604051602001611fe19190614856565b604051602081830303815290604052805190602001209050612089600b5482898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612bac565b6120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90614c73565b60405180910390fd5b6120d233846128cf565b826107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121229190614ebb565b9250508190555050505050505050565b61213a61240e565b73ffffffffffffffffffffffffffffffffffffffff16612158611428565b73ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590614c93565b60405180910390fd5b80600d90805190602001906121c4929190613788565b5050565b6121d061240e565b73ffffffffffffffffffffffffffffffffffffffff166121ee611428565b73ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90614c93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614a73565b60405180910390fd5b6122bd81612809565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061238b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061239b575061239a82612ccb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661248983611050565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124da826123a2565b612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614b13565b60405180910390fd5b600061252483611050565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061259357508373ffffffffffffffffffffffffffffffffffffffff1661257b84610a33565b73ffffffffffffffffffffffffffffffffffffffff16145b806125a457506125a38185611cce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125cd82611050565b73ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614cb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a90614ab3565b60405180910390fd5b61269e838383612d35565b6126a9600082612416565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f99190614f9c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127509190614ebb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818160ff16101561290c5760006128ec838360ff16612e49565b90506128f8848261301a565b50808061290490615142565b9150506128d2565b505050565b61291c8484846125ad565b61292884848484613038565b612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614a53565b60405180910390fd5b50505050565b6060600c805461297c906150c7565b80601f01602080910402602001604051908101604052809291908181526020018280546129a8906150c7565b80156129f55780601f106129ca576101008083540402835291602001916129f5565b820191906000526020600020905b8154815290600101906020018083116129d857829003601f168201915b5050505050905090565b60606000821415612a47576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ba7565b600082905060005b60008214612a79578080612a62906150f9565b915050600a82612a729190614f11565b9150612a4f565b60008167ffffffffffffffff811115612abb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612aed5781602001600182028036833780820191505090505b5090505b60008514612ba057600182612b069190614f9c565b9150600a85612b15919061519a565b6030612b219190614ebb565b60f81b818381518110612b5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b999190614f11565b9450612af1565b8093505050505b919050565b60008084905060005b8451811015612cbc576000858281518110612bf9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001858381518110612c3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415612c7c578281604051602001612c5f929190614871565b604051602081830303815290604052805190602001209250612ca8565b8083604051602001612c8f929190614871565b6040516020818303038152906040528051906020012092505b508080612cb4906150f9565b915050612bb5565b50858114915050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d408383836131cf565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8357612d7e816131d4565b612dc2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dc157612dc0838261321d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0557612e008161338a565b612e44565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e4357612e4282826134cd565b5b5b505050565b600080333a4342600143612e5d9190614f9c565b408888604051602001612e76979695949392919061494a565b6040516020818303038152906040528051906020012060001c9050600060125482612ea1919061519a565b905060006013826107e68110612ee0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01549050600080821415612ef657829050612efa565b8190505b60006001601254612f0b9190614f9c565b9050808414612fe85760006013826107e68110612f51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015490506000811415612fa457816013866107e68110612f9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0181905550612fe6565b806013866107e68110612fe0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01819055505b505b60126000815480929190612ffb9061509d565b919050555060018261300d9190614ebb565b9550505050505092915050565b61303482826040518060200160405280600081525061354c565b5050565b60006130598473ffffffffffffffffffffffffffffffffffffffff166135a7565b156131c2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261308261240e565b8786866040518563ffffffff1660e01b81526004016130a494939291906148fe565b602060405180830381600087803b1580156130be57600080fd5b505af19250505080156130ef57506040513d601f19601f820116820180604052508101906130ec9190613cb8565b60015b613172573d806000811461311f576040519150601f19603f3d011682016040523d82523d6000602084013e613124565b606091505b5060008151141561316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614a53565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131c7565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161322a84611102565b6132349190614f9c565b9050600060076000848152602001908152602001600020549050818114613319576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061339e9190614f9c565b90506000600960008481526020019081526020016000205490506000600883815481106133f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061343c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006134d883611102565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b61355683836135ba565b6135636000848484613038565b6135a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359990614a53565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561362a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362190614c13565b60405180910390fd5b613633816123a2565b15613673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366a90614a93565b60405180910390fd5b61367f60008383612d35565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136cf9190614ebb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613794906150c7565b90600052602060002090601f0160209004810192826137b657600085556137fd565b82601f106137cf57805160ff19168380011785556137fd565b828001600101855582156137fd579182015b828111156137fc5782518255916020019190600101906137e1565b5b50905061380a919061380e565b5090565b5b8082111561382757600081600090555060010161380f565b5090565b600061383e61383984614dbf565b614d8e565b90508281526020810184848401111561385657600080fd5b61386184828561505b565b509392505050565b600061387c61387784614def565b614d8e565b90508281526020810184848401111561389457600080fd5b61389f84828561505b565b509392505050565b6000813590506138b6816152a5565b92915050565b60008083601f8401126138ce57600080fd5b8235905067ffffffffffffffff8111156138e757600080fd5b6020830191508360208202830111156138ff57600080fd5b9250929050565b60008083601f84011261391857600080fd5b8235905067ffffffffffffffff81111561393157600080fd5b60208301915083602082028301111561394957600080fd5b9250929050565b60008135905061395f816152bc565b92915050565b600081359050613974816152d3565b92915050565b600081359050613989816152ea565b92915050565b60008151905061399e816152ea565b92915050565b600082601f8301126139b557600080fd5b81356139c584826020860161382b565b91505092915050565b600082601f8301126139df57600080fd5b81356139ef848260208601613869565b91505092915050565b600081359050613a0781615301565b92915050565b600060208284031215613a1f57600080fd5b6000613a2d848285016138a7565b91505092915050565b60008060408385031215613a4957600080fd5b6000613a57858286016138a7565b9250506020613a68858286016138a7565b9150509250929050565b600080600060608486031215613a8757600080fd5b6000613a95868287016138a7565b9350506020613aa6868287016138a7565b9250506040613ab7868287016139f8565b9150509250925092565b60008060008060808587031215613ad757600080fd5b6000613ae5878288016138a7565b9450506020613af6878288016138a7565b9350506040613b07878288016139f8565b925050606085013567ffffffffffffffff811115613b2457600080fd5b613b30878288016139a4565b91505092959194509250565b60008060408385031215613b4f57600080fd5b6000613b5d858286016138a7565b9250506020613b6e85828601613950565b9150509250929050565b60008060408385031215613b8b57600080fd5b6000613b99858286016138a7565b9250506020613baa858286016139f8565b9150509250929050565b600080600080600060608688031215613bcc57600080fd5b600086013567ffffffffffffffff811115613be657600080fd5b613bf2888289016138bc565b9550955050602086013567ffffffffffffffff811115613c1157600080fd5b613c1d88828901613906565b93509350506040613c30888289016139f8565b9150509295509295909350565b600060208284031215613c4f57600080fd5b6000613c5d84828501613950565b91505092915050565b600060208284031215613c7857600080fd5b6000613c8684828501613965565b91505092915050565b600060208284031215613ca157600080fd5b6000613caf8482850161397a565b91505092915050565b600060208284031215613cca57600080fd5b6000613cd88482850161398f565b91505092915050565b600060208284031215613cf357600080fd5b600082013567ffffffffffffffff811115613d0d57600080fd5b613d19848285016139ce565b91505092915050565b600060208284031215613d3457600080fd5b6000613d42848285016139f8565b91505092915050565b6000613d578383614838565b60208301905092915050565b613d6c81614fd0565b82525050565b613d83613d7e82614fd0565b61516c565b82525050565b6000613d9482614e44565b613d9e8185614e72565b9350613da983614e1f565b8060005b83811015613dda578151613dc18882613d4b565b9750613dcc83614e65565b925050600181019050613dad565b5085935050505092915050565b613df081614fe2565b82525050565b613dff81614fee565b82525050565b613e16613e1182614fee565b61517e565b82525050565b6000613e2782614e4f565b613e318185614e83565b9350613e4181856020860161506a565b613e4a81615287565b840191505092915050565b6000613e6082614e5a565b613e6a8185614e9f565b9350613e7a81856020860161506a565b613e8381615287565b840191505092915050565b6000613e9982614e5a565b613ea38185614eb0565b9350613eb381856020860161506a565b80840191505092915050565b60008154613ecc816150c7565b613ed68186614eb0565b94506001821660008114613ef15760018114613f0257613f35565b60ff19831686528186019350613f35565b613f0b85614e2f565b60005b83811015613f2d57815481890152600182019150602081019050613f0e565b838801955050505b50505092915050565b6000613f4b602b83614e9f565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613fb1603283614e9f565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614017602683614e9f565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061407d601c83614e9f565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006140bd602483614e9f565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614123601983614e9f565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614163602083614e9f565b91507f596f75206e65656420746f206d696e74206174206c656173742031204e4654216000830152602082019050919050565b60006141a3602c83614e9f565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614209601283614e9f565b91507f696e73756666696369656e742066756e642100000000000000000000000000006000830152602082019050919050565b6000614249601a83614e9f565b91507f596f752063616e206d696e7420757020746f2032204e465473210000000000006000830152602082019050919050565b6000614289603883614e9f565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006142ef602a83614e9f565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614355602983614e9f565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006143bb601883614e9f565b91507f596f752063616e206d696e74206d61782032204e4654732100000000000000006000830152602082019050919050565b60006143fb602383614e9f565b91507f4d6178696d756d20537570706c79206d696e74206c696d69742065786365656460008301527f65642100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614461602083614e9f565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006144a1601e83614e9f565b91507f57686974656c6973744d696e74206e6f742073746172746564207965742100006000830152602082019050919050565b60006144e1602c83614e9f565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614547602683614e9f565b91507f596f75277265206e6f742077686974656c69737465643a20496e76616c69642060008301527f70726f6f662100000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145ad602083614e9f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006145ed602983614e9f565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614653602f83614e9f565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006146b9602183614e9f565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061471f600083614e94565b9150600082019050919050565b6000614739603183614e9f565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061479f602c83614e9f565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614805601883614e9f565b91507f4d696e74696e67206e6f742073746172746564207965742100000000000000006000830152602082019050919050565b61484181615044565b82525050565b61485081615044565b82525050565b60006148628284613d72565b60148201915081905092915050565b600061487d8285613e05565b60208201915061488d8284613e05565b6020820191508190509392505050565b60006148a98286613e8e565b91506148b58285613e8e565b91506148c18284613ebf565b9150819050949350505050565b60006148d982614712565b9150819050919050565b60006020820190506148f86000830184613d63565b92915050565b60006080820190506149136000830187613d63565b6149206020830186613d63565b61492d6040830185614847565b818103606083015261493f8184613e1c565b905095945050505050565b600060e08201905061495f600083018a613d63565b61496c6020830189614847565b6149796040830188614847565b6149866060830187614847565b6149936080830186613df6565b6149a060a0830185614847565b6149ad60c0830184614847565b98975050505050505050565b600060208201905081810360008301526149d38184613d89565b905092915050565b60006020820190506149f06000830184613de7565b92915050565b6000602082019050614a0b6000830184613df6565b92915050565b60006020820190508181036000830152614a2b8184613e55565b905092915050565b60006020820190508181036000830152614a4c81613f3e565b9050919050565b60006020820190508181036000830152614a6c81613fa4565b9050919050565b60006020820190508181036000830152614a8c8161400a565b9050919050565b60006020820190508181036000830152614aac81614070565b9050919050565b60006020820190508181036000830152614acc816140b0565b9050919050565b60006020820190508181036000830152614aec81614116565b9050919050565b60006020820190508181036000830152614b0c81614156565b9050919050565b60006020820190508181036000830152614b2c81614196565b9050919050565b60006020820190508181036000830152614b4c816141fc565b9050919050565b60006020820190508181036000830152614b6c8161423c565b9050919050565b60006020820190508181036000830152614b8c8161427c565b9050919050565b60006020820190508181036000830152614bac816142e2565b9050919050565b60006020820190508181036000830152614bcc81614348565b9050919050565b60006020820190508181036000830152614bec816143ae565b9050919050565b60006020820190508181036000830152614c0c816143ee565b9050919050565b60006020820190508181036000830152614c2c81614454565b9050919050565b60006020820190508181036000830152614c4c81614494565b9050919050565b60006020820190508181036000830152614c6c816144d4565b9050919050565b60006020820190508181036000830152614c8c8161453a565b9050919050565b60006020820190508181036000830152614cac816145a0565b9050919050565b60006020820190508181036000830152614ccc816145e0565b9050919050565b60006020820190508181036000830152614cec81614646565b9050919050565b60006020820190508181036000830152614d0c816146ac565b9050919050565b60006020820190508181036000830152614d2c8161472c565b9050919050565b60006020820190508181036000830152614d4c81614792565b9050919050565b60006020820190508181036000830152614d6c816147f8565b9050919050565b6000602082019050614d886000830184614847565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614db557614db4615258565b5b8060405250919050565b600067ffffffffffffffff821115614dda57614dd9615258565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614e0a57614e09615258565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ec682615044565b9150614ed183615044565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f0657614f056151cb565b5b828201905092915050565b6000614f1c82615044565b9150614f2783615044565b925082614f3757614f366151fa565b5b828204905092915050565b6000614f4d82615044565b9150614f5883615044565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f9157614f906151cb565b5b828202905092915050565b6000614fa782615044565b9150614fb283615044565b925082821015614fc557614fc46151cb565b5b828203905092915050565b6000614fdb82615024565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561508857808201518184015260208101905061506d565b83811115615097576000848401525b50505050565b60006150a882615044565b915060008214156150bc576150bb6151cb565b5b600182039050919050565b600060028204905060018216806150df57607f821691505b602082108114156150f3576150f2615229565b5b50919050565b600061510482615044565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615137576151366151cb565b5b600182019050919050565b600061514d8261504e565b915060ff821415615161576151606151cb565b5b600182019050919050565b600061517782615188565b9050919050565b6000819050919050565b600061519382615298565b9050919050565b60006151a582615044565b91506151b083615044565b9250826151c0576151bf6151fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b6152ae81614fd0565b81146152b957600080fd5b50565b6152c581614fe2565b81146152d057600080fd5b50565b6152dc81614fee565b81146152e757600080fd5b50565b6152f381614ff8565b81146152fe57600080fd5b50565b61530a81615044565b811461531557600080fd5b5056fea264697066735822122006b6679d714e05f4dcb857eb41e6125d1bdb0c03b98defd8e5cf7367804c47da64736f6c63430008000033697066733a2f2f516d5257486e4847326d7076526b747374536e436d6f7672784a76444d78714774687333364361573373587259772f756e72657665616c65642e6a736f6e697066733a2f2f516d4e7934724175313579454658626d5435724c635237546e57347231703652317864564a596f533271617441592f

Deployed Bytecode

0x60806040526004361061023b5760003560e01c806376c64c621161012e578063b228d925116100ab578063d5abeb011161006f578063d5abeb011461083e578063e985e9c514610869578063eb912568146108a6578063f2c4ce1e146108c2578063f2fde38b146108eb5761023b565b8063b228d92514610759578063b70196d714610784578063b88d4fde1461079b578063ba060bed146107c4578063c87b56dd146108015761023b565b806392f6c439116100f257806392f6c439146106a957806395d89b41146106d2578063a0712d68146106fd578063a22cb46514610719578063a475b5dd146107425761023b565b806376c64c62146105ea5780637fe8dfe1146106015780638545f4ea1461062c57806388b8084f146106555780638da5cb5b1461067e5761023b565b80633ccfd60b116101bc57806355f804b31161018057806355f804b3146105055780635c975abb1461052e5780636352211e1461055957806370a0823114610596578063715018a6146105d35761023b565b80633ccfd60b1461042057806342842e0e14610437578063438b6300146104605780634f6ccce71461049d57806351830227146104da5761023b565b806313faede61161020357806313faede61461033957806318160ddd1461036457806323b872dd1461038f5780632eb4a7ab146103b85780632f745c59146103e35761023b565b806301ffc9a71461024057806303da91dc1461027d57806306fdde03146102a8578063081812fc146102d3578063095ea7b314610310575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c8f565b610914565b60405161027491906149db565b60405180910390f35b34801561028957600080fd5b5061029261098e565b60405161029f91906149db565b60405180910390f35b3480156102b457600080fd5b506102bd6109a1565b6040516102ca9190614a11565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613d22565b610a33565b60405161030791906148e3565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190613b78565b610ab8565b005b34801561034557600080fd5b5061034e610bd0565b60405161035b9190614d73565b60405180910390f35b34801561037057600080fd5b50610379610bd6565b6040516103869190614d73565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a72565b610be3565b005b3480156103c457600080fd5b506103cd610c43565b6040516103da91906149f6565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613b78565b610c49565b6040516104179190614d73565b60405180910390f35b34801561042c57600080fd5b50610435610cee565b005b34801561044357600080fd5b5061045e60048036038101906104599190613a72565b610de3565b005b34801561046c57600080fd5b5061048760048036038101906104829190613a0d565b610e03565b60405161049491906149b9565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190613d22565b610efd565b6040516104d19190614d73565b60405180910390f35b3480156104e657600080fd5b506104ef610f94565b6040516104fc91906149db565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613ce1565b610fa7565b005b34801561053a57600080fd5b5061054361103d565b60405161055091906149db565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190613d22565b611050565b60405161058d91906148e3565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190613a0d565b611102565b6040516105ca9190614d73565b60405180910390f35b3480156105df57600080fd5b506105e86111ba565b005b3480156105f657600080fd5b506105ff611242565b005b34801561060d57600080fd5b506106166112f6565b60405161062391906149db565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613d22565b611309565b005b34801561066157600080fd5b5061067c60048036038101906106779190613c3d565b61138f565b005b34801561068a57600080fd5b50610693611428565b6040516106a091906148e3565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613c66565b611452565b005b3480156106de57600080fd5b506106e76114d8565b6040516106f49190614a11565b60405180910390f35b61071760048036038101906107129190613d22565b61156a565b005b34801561072557600080fd5b50610740600480360381019061073b9190613b3c565b61183b565b005b34801561074e57600080fd5b506107576119bc565b005b34801561076557600080fd5b5061076e611a55565b60405161077b9190614d73565b60405180910390f35b34801561079057600080fd5b50610799611a5b565b005b3480156107a757600080fd5b506107c260048036038101906107bd9190613ac1565b611af4565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190613a0d565b611b56565b6040516107f89190614d73565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613d22565b611b6f565b6040516108359190614a11565b60405180910390f35b34801561084a57600080fd5b50610853611cc8565b6040516108609190614d73565b60405180910390f35b34801561087557600080fd5b50610890600480360381019061088b9190613a36565b611cce565b60405161089d91906149db565b60405180910390f35b6108c060048036038101906108bb9190613bb4565b611d62565b005b3480156108ce57600080fd5b506108e960048036038101906108e49190613ce1565b612132565b005b3480156108f757600080fd5b50610912600480360381019061090d9190613a0d565b6121c8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109875750610986826122c0565b5b9050919050565b601160019054906101000a900460ff1681565b6060600080546109b0906150c7565b80601f01602080910402602001604051908101604052809291908181526020018280546109dc906150c7565b8015610a295780601f106109fe57610100808354040283529160200191610a29565b820191906000526020600020905b815481529060010190602001808311610a0c57829003601f168201915b5050505050905090565b6000610a3e826123a2565b610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490614c53565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac382611050565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90614cf3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b5361240e565b73ffffffffffffffffffffffffffffffffffffffff161480610b825750610b8181610b7c61240e565b611cce565b5b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614b73565b60405180910390fd5b610bcb8383612416565b505050565b600f5481565b6000600880549050905090565b610bf4610bee61240e565b826124cf565b610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90614d13565b60405180910390fd5b610c3e8383836125ad565b505050565b600b5481565b6000610c5483611102565b8210610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614a33565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cf661240e565b73ffffffffffffffffffffffffffffffffffffffff16610d14611428565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190614c93565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610d90906148ce565b60006040518083038185875af1925050503d8060008114610dcd576040519150601f19603f3d011682016040523d82523d6000602084013e610dd2565b606091505b5050905080610de057600080fd5b50565b610dfe83838360405180602001604052806000815250611af4565b505050565b60606000610e1083611102565b905060008167ffffffffffffffff811115610e54577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e825781602001602082028036833780820191505090505b50905060005b82811015610ef257610e9a8582610c49565b828281518110610ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610eea906150f9565b915050610e88565b508092505050919050565b6000610f07610bd6565b8210610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614d33565b60405180910390fd5b60088281548110610f82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160029054906101000a900460ff1681565b610faf61240e565b73ffffffffffffffffffffffffffffffffffffffff16610fcd611428565b73ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614c93565b60405180910390fd5b80600c9080519060200190611039929190613788565b5050565b601160039054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090614bb3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90614b93565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c261240e565b73ffffffffffffffffffffffffffffffffffffffff166111e0611428565b73ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90614c93565b60405180910390fd5b6112406000612809565b565b61124a61240e565b73ffffffffffffffffffffffffffffffffffffffff16611268611428565b73ffffffffffffffffffffffffffffffffffffffff16146112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614c93565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506000601160006101000a81548160ff021916908315150217905550565b601160009054906101000a900460ff1681565b61131161240e565b73ffffffffffffffffffffffffffffffffffffffff1661132f611428565b73ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90614c93565b60405180910390fd5b80600f8190555050565b61139761240e565b73ffffffffffffffffffffffffffffffffffffffff166113b5611428565b73ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290614c93565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61145a61240e565b73ffffffffffffffffffffffffffffffffffffffff16611478611428565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614c93565b60405180910390fd5b80600b8190555050565b6060600180546114e7906150c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611513906150c7565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b5050505050905090565b8060001515601160039054906101000a900460ff161515146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614d53565b60405180910390fd5b60011515601160019054906101000a900460ff16151514611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90614d53565b60405180910390fd5b60105481111561165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390614b53565b60405180910390fd5b601054816107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ab9190614ebb565b11156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390614bd3565b60405180910390fd5b6107e6816116f8610bd6565b6117029190614ebb565b1115611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90614bf3565b60405180910390fd5b60008111611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90614af3565b60405180910390fd5b81600f546117949190614f42565b3410156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614b33565b60405180910390fd5b6117e033836128cf565b816107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118309190614ebb565b925050819055505050565b61184361240e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614ad3565b60405180910390fd5b80600560006118be61240e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661196b61240e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119b091906149db565b60405180910390a35050565b6119c461240e565b73ffffffffffffffffffffffffffffffffffffffff166119e2611428565b73ffffffffffffffffffffffffffffffffffffffff1614611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90614c93565b60405180910390fd5b6001601160026101000a81548160ff021916908315150217905550565b60105481565b611a6361240e565b73ffffffffffffffffffffffffffffffffffffffff16611a81611428565b73ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90614c93565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b611b05611aff61240e565b836124cf565b611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90614d13565b60405180910390fd5b611b5084848484612911565b50505050565b6107f96020528060005260406000206000915090505481565b6060611b7a826123a2565b611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090614cd3565b60405180910390fd5b60001515601160029054906101000a900460ff1615151415611c6757600d8054611be2906150c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0e906150c7565b8015611c5b5780601f10611c3057610100808354040283529160200191611c5b565b820191906000526020600020905b815481529060010190602001808311611c3e57829003601f168201915b50505050509050611cc3565b6000611c7161296d565b90506000815111611c915760405180602001604052806000815250611cbf565b80611c9b846129ff565b600e604051602001611caf9392919061489d565b6040516020818303038152906040525b9150505b919050565b6107e681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8060001515601160039054906101000a900460ff16151514611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090614d53565b60405180910390fd5b60011515601160009054906101000a900460ff16151514611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614c33565b60405180910390fd5b601054811115611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90614b53565b60405180910390fd5b601054816107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea39190614ebb565b1115611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90614bd3565b60405180910390fd5b6107e681611ef0610bd6565b611efa9190614ebb565b1115611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290614bf3565b60405180910390fd5b60008111611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7590614af3565b60405180910390fd5b81600f54611f8c9190614f42565b341015611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc590614b33565b60405180910390fd5b600033604051602001611fe19190614856565b604051602081830303815290604052805190602001209050612089600b5482898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612bac565b6120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90614c73565b60405180910390fd5b6120d233846128cf565b826107f960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121229190614ebb565b9250508190555050505050505050565b61213a61240e565b73ffffffffffffffffffffffffffffffffffffffff16612158611428565b73ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590614c93565b60405180910390fd5b80600d90805190602001906121c4929190613788565b5050565b6121d061240e565b73ffffffffffffffffffffffffffffffffffffffff166121ee611428565b73ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90614c93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614a73565b60405180910390fd5b6122bd81612809565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061238b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061239b575061239a82612ccb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661248983611050565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124da826123a2565b612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614b13565b60405180910390fd5b600061252483611050565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061259357508373ffffffffffffffffffffffffffffffffffffffff1661257b84610a33565b73ffffffffffffffffffffffffffffffffffffffff16145b806125a457506125a38185611cce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125cd82611050565b73ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614cb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a90614ab3565b60405180910390fd5b61269e838383612d35565b6126a9600082612416565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f99190614f9c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127509190614ebb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818160ff16101561290c5760006128ec838360ff16612e49565b90506128f8848261301a565b50808061290490615142565b9150506128d2565b505050565b61291c8484846125ad565b61292884848484613038565b612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614a53565b60405180910390fd5b50505050565b6060600c805461297c906150c7565b80601f01602080910402602001604051908101604052809291908181526020018280546129a8906150c7565b80156129f55780601f106129ca576101008083540402835291602001916129f5565b820191906000526020600020905b8154815290600101906020018083116129d857829003601f168201915b5050505050905090565b60606000821415612a47576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ba7565b600082905060005b60008214612a79578080612a62906150f9565b915050600a82612a729190614f11565b9150612a4f565b60008167ffffffffffffffff811115612abb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612aed5781602001600182028036833780820191505090505b5090505b60008514612ba057600182612b069190614f9c565b9150600a85612b15919061519a565b6030612b219190614ebb565b60f81b818381518110612b5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b999190614f11565b9450612af1565b8093505050505b919050565b60008084905060005b8451811015612cbc576000858281518110612bf9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001858381518110612c3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415612c7c578281604051602001612c5f929190614871565b604051602081830303815290604052805190602001209250612ca8565b8083604051602001612c8f929190614871565b6040516020818303038152906040528051906020012092505b508080612cb4906150f9565b915050612bb5565b50858114915050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d408383836131cf565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8357612d7e816131d4565b612dc2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dc157612dc0838261321d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0557612e008161338a565b612e44565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e4357612e4282826134cd565b5b5b505050565b600080333a4342600143612e5d9190614f9c565b408888604051602001612e76979695949392919061494a565b6040516020818303038152906040528051906020012060001c9050600060125482612ea1919061519a565b905060006013826107e68110612ee0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01549050600080821415612ef657829050612efa565b8190505b60006001601254612f0b9190614f9c565b9050808414612fe85760006013826107e68110612f51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015490506000811415612fa457816013866107e68110612f9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0181905550612fe6565b806013866107e68110612fe0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01819055505b505b60126000815480929190612ffb9061509d565b919050555060018261300d9190614ebb565b9550505050505092915050565b61303482826040518060200160405280600081525061354c565b5050565b60006130598473ffffffffffffffffffffffffffffffffffffffff166135a7565b156131c2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261308261240e565b8786866040518563ffffffff1660e01b81526004016130a494939291906148fe565b602060405180830381600087803b1580156130be57600080fd5b505af19250505080156130ef57506040513d601f19601f820116820180604052508101906130ec9190613cb8565b60015b613172573d806000811461311f576040519150601f19603f3d011682016040523d82523d6000602084013e613124565b606091505b5060008151141561316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614a53565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131c7565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161322a84611102565b6132349190614f9c565b9050600060076000848152602001908152602001600020549050818114613319576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061339e9190614f9c565b90506000600960008481526020019081526020016000205490506000600883815481106133f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061343c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006134d883611102565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b61355683836135ba565b6135636000848484613038565b6135a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359990614a53565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561362a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362190614c13565b60405180910390fd5b613633816123a2565b15613673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366a90614a93565b60405180910390fd5b61367f60008383612d35565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136cf9190614ebb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613794906150c7565b90600052602060002090601f0160209004810192826137b657600085556137fd565b82601f106137cf57805160ff19168380011785556137fd565b828001600101855582156137fd579182015b828111156137fc5782518255916020019190600101906137e1565b5b50905061380a919061380e565b5090565b5b8082111561382757600081600090555060010161380f565b5090565b600061383e61383984614dbf565b614d8e565b90508281526020810184848401111561385657600080fd5b61386184828561505b565b509392505050565b600061387c61387784614def565b614d8e565b90508281526020810184848401111561389457600080fd5b61389f84828561505b565b509392505050565b6000813590506138b6816152a5565b92915050565b60008083601f8401126138ce57600080fd5b8235905067ffffffffffffffff8111156138e757600080fd5b6020830191508360208202830111156138ff57600080fd5b9250929050565b60008083601f84011261391857600080fd5b8235905067ffffffffffffffff81111561393157600080fd5b60208301915083602082028301111561394957600080fd5b9250929050565b60008135905061395f816152bc565b92915050565b600081359050613974816152d3565b92915050565b600081359050613989816152ea565b92915050565b60008151905061399e816152ea565b92915050565b600082601f8301126139b557600080fd5b81356139c584826020860161382b565b91505092915050565b600082601f8301126139df57600080fd5b81356139ef848260208601613869565b91505092915050565b600081359050613a0781615301565b92915050565b600060208284031215613a1f57600080fd5b6000613a2d848285016138a7565b91505092915050565b60008060408385031215613a4957600080fd5b6000613a57858286016138a7565b9250506020613a68858286016138a7565b9150509250929050565b600080600060608486031215613a8757600080fd5b6000613a95868287016138a7565b9350506020613aa6868287016138a7565b9250506040613ab7868287016139f8565b9150509250925092565b60008060008060808587031215613ad757600080fd5b6000613ae5878288016138a7565b9450506020613af6878288016138a7565b9350506040613b07878288016139f8565b925050606085013567ffffffffffffffff811115613b2457600080fd5b613b30878288016139a4565b91505092959194509250565b60008060408385031215613b4f57600080fd5b6000613b5d858286016138a7565b9250506020613b6e85828601613950565b9150509250929050565b60008060408385031215613b8b57600080fd5b6000613b99858286016138a7565b9250506020613baa858286016139f8565b9150509250929050565b600080600080600060608688031215613bcc57600080fd5b600086013567ffffffffffffffff811115613be657600080fd5b613bf2888289016138bc565b9550955050602086013567ffffffffffffffff811115613c1157600080fd5b613c1d88828901613906565b93509350506040613c30888289016139f8565b9150509295509295909350565b600060208284031215613c4f57600080fd5b6000613c5d84828501613950565b91505092915050565b600060208284031215613c7857600080fd5b6000613c8684828501613965565b91505092915050565b600060208284031215613ca157600080fd5b6000613caf8482850161397a565b91505092915050565b600060208284031215613cca57600080fd5b6000613cd88482850161398f565b91505092915050565b600060208284031215613cf357600080fd5b600082013567ffffffffffffffff811115613d0d57600080fd5b613d19848285016139ce565b91505092915050565b600060208284031215613d3457600080fd5b6000613d42848285016139f8565b91505092915050565b6000613d578383614838565b60208301905092915050565b613d6c81614fd0565b82525050565b613d83613d7e82614fd0565b61516c565b82525050565b6000613d9482614e44565b613d9e8185614e72565b9350613da983614e1f565b8060005b83811015613dda578151613dc18882613d4b565b9750613dcc83614e65565b925050600181019050613dad565b5085935050505092915050565b613df081614fe2565b82525050565b613dff81614fee565b82525050565b613e16613e1182614fee565b61517e565b82525050565b6000613e2782614e4f565b613e318185614e83565b9350613e4181856020860161506a565b613e4a81615287565b840191505092915050565b6000613e6082614e5a565b613e6a8185614e9f565b9350613e7a81856020860161506a565b613e8381615287565b840191505092915050565b6000613e9982614e5a565b613ea38185614eb0565b9350613eb381856020860161506a565b80840191505092915050565b60008154613ecc816150c7565b613ed68186614eb0565b94506001821660008114613ef15760018114613f0257613f35565b60ff19831686528186019350613f35565b613f0b85614e2f565b60005b83811015613f2d57815481890152600182019150602081019050613f0e565b838801955050505b50505092915050565b6000613f4b602b83614e9f565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613fb1603283614e9f565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614017602683614e9f565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061407d601c83614e9f565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006140bd602483614e9f565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614123601983614e9f565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614163602083614e9f565b91507f596f75206e65656420746f206d696e74206174206c656173742031204e4654216000830152602082019050919050565b60006141a3602c83614e9f565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614209601283614e9f565b91507f696e73756666696369656e742066756e642100000000000000000000000000006000830152602082019050919050565b6000614249601a83614e9f565b91507f596f752063616e206d696e7420757020746f2032204e465473210000000000006000830152602082019050919050565b6000614289603883614e9f565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006142ef602a83614e9f565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614355602983614e9f565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006143bb601883614e9f565b91507f596f752063616e206d696e74206d61782032204e4654732100000000000000006000830152602082019050919050565b60006143fb602383614e9f565b91507f4d6178696d756d20537570706c79206d696e74206c696d69742065786365656460008301527f65642100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614461602083614e9f565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006144a1601e83614e9f565b91507f57686974656c6973744d696e74206e6f742073746172746564207965742100006000830152602082019050919050565b60006144e1602c83614e9f565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614547602683614e9f565b91507f596f75277265206e6f742077686974656c69737465643a20496e76616c69642060008301527f70726f6f662100000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145ad602083614e9f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006145ed602983614e9f565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614653602f83614e9f565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006146b9602183614e9f565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061471f600083614e94565b9150600082019050919050565b6000614739603183614e9f565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061479f602c83614e9f565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614805601883614e9f565b91507f4d696e74696e67206e6f742073746172746564207965742100000000000000006000830152602082019050919050565b61484181615044565b82525050565b61485081615044565b82525050565b60006148628284613d72565b60148201915081905092915050565b600061487d8285613e05565b60208201915061488d8284613e05565b6020820191508190509392505050565b60006148a98286613e8e565b91506148b58285613e8e565b91506148c18284613ebf565b9150819050949350505050565b60006148d982614712565b9150819050919050565b60006020820190506148f86000830184613d63565b92915050565b60006080820190506149136000830187613d63565b6149206020830186613d63565b61492d6040830185614847565b818103606083015261493f8184613e1c565b905095945050505050565b600060e08201905061495f600083018a613d63565b61496c6020830189614847565b6149796040830188614847565b6149866060830187614847565b6149936080830186613df6565b6149a060a0830185614847565b6149ad60c0830184614847565b98975050505050505050565b600060208201905081810360008301526149d38184613d89565b905092915050565b60006020820190506149f06000830184613de7565b92915050565b6000602082019050614a0b6000830184613df6565b92915050565b60006020820190508181036000830152614a2b8184613e55565b905092915050565b60006020820190508181036000830152614a4c81613f3e565b9050919050565b60006020820190508181036000830152614a6c81613fa4565b9050919050565b60006020820190508181036000830152614a8c8161400a565b9050919050565b60006020820190508181036000830152614aac81614070565b9050919050565b60006020820190508181036000830152614acc816140b0565b9050919050565b60006020820190508181036000830152614aec81614116565b9050919050565b60006020820190508181036000830152614b0c81614156565b9050919050565b60006020820190508181036000830152614b2c81614196565b9050919050565b60006020820190508181036000830152614b4c816141fc565b9050919050565b60006020820190508181036000830152614b6c8161423c565b9050919050565b60006020820190508181036000830152614b8c8161427c565b9050919050565b60006020820190508181036000830152614bac816142e2565b9050919050565b60006020820190508181036000830152614bcc81614348565b9050919050565b60006020820190508181036000830152614bec816143ae565b9050919050565b60006020820190508181036000830152614c0c816143ee565b9050919050565b60006020820190508181036000830152614c2c81614454565b9050919050565b60006020820190508181036000830152614c4c81614494565b9050919050565b60006020820190508181036000830152614c6c816144d4565b9050919050565b60006020820190508181036000830152614c8c8161453a565b9050919050565b60006020820190508181036000830152614cac816145a0565b9050919050565b60006020820190508181036000830152614ccc816145e0565b9050919050565b60006020820190508181036000830152614cec81614646565b9050919050565b60006020820190508181036000830152614d0c816146ac565b9050919050565b60006020820190508181036000830152614d2c8161472c565b9050919050565b60006020820190508181036000830152614d4c81614792565b9050919050565b60006020820190508181036000830152614d6c816147f8565b9050919050565b6000602082019050614d886000830184614847565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614db557614db4615258565b5b8060405250919050565b600067ffffffffffffffff821115614dda57614dd9615258565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614e0a57614e09615258565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ec682615044565b9150614ed183615044565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f0657614f056151cb565b5b828201905092915050565b6000614f1c82615044565b9150614f2783615044565b925082614f3757614f366151fa565b5b828204905092915050565b6000614f4d82615044565b9150614f5883615044565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f9157614f906151cb565b5b828202905092915050565b6000614fa782615044565b9150614fb283615044565b925082821015614fc557614fc46151cb565b5b828203905092915050565b6000614fdb82615024565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561508857808201518184015260208101905061506d565b83811115615097576000848401525b50505050565b60006150a882615044565b915060008214156150bc576150bb6151cb565b5b600182039050919050565b600060028204905060018216806150df57607f821691505b602082108114156150f3576150f2615229565b5b50919050565b600061510482615044565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615137576151366151cb565b5b600182019050919050565b600061514d8261504e565b915060ff821415615161576151606151cb565b5b600182019050919050565b600061517782615188565b9050919050565b6000819050919050565b600061519382615298565b9050919050565b60006151a582615044565b91506151b083615044565b9250826151c0576151bf6151fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b6152ae81614fd0565b81146152b957600080fd5b50565b6152c581614fe2565b81146152d057600080fd5b50565b6152dc81614fee565b81146152e757600080fd5b50565b6152f381614ff8565b81146152fe57600080fd5b50565b61530a81615044565b811461531557600080fd5b5056fea264697066735822122006b6679d714e05f4dcb857eb41e6125d1bdb0c03b98defd8e5cf7367804c47da64736f6c63430008000033

Deployed Bytecode Sourcemap

22359:6706:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18550:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22937:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11966:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13049:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12630:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22771:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19046:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13753:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22443:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18782:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28900:160;;;;;;;;;;;;;:::i;:::-;;14057:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25999:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19167:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22977:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27353:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23012:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11719:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11503:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21877:94;;;;;;;;;;;;;:::i;:::-;;27230:115;;;;;;;;;;;;;:::i;:::-;;22896:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27038:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26853:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21654:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25900:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12074:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25082:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13278:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26955:69;;;;;;;;;;;;;:::i;:::-;;22854:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27136:86;;;;;;;;;;;;;:::i;:::-;;14250:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23149:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26364:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22807:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13581:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24550:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27466:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21979:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18550:224;18652:4;18691:35;18676:50;;;:11;:50;;;;:90;;;;18730:36;18754:11;18730:23;:36::i;:::-;18676:90;18669:97;;18550:224;;;:::o;22937:33::-;;;;;;;;;;;;;:::o;11966:100::-;12020:13;12053:5;12046:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11966:100;:::o;13049:221::-;13125:7;13153:16;13161:7;13153;:16::i;:::-;13145:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13238:15;:24;13254:7;13238:24;;;;;;;;;;;;;;;;;;;;;13231:31;;13049:221;;;:::o;12630:411::-;12711:13;12727:23;12742:7;12727:14;:23::i;:::-;12711:39;;12775:5;12769:11;;:2;:11;;;;12761:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;12869:5;12853:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;12878:37;12895:5;12902:12;:10;:12::i;:::-;12878:16;:37::i;:::-;12853:62;12831:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;13012:21;13021:2;13025:7;13012:8;:21::i;:::-;12630:411;;;:::o;22771:29::-;;;;:::o;19046:113::-;19107:7;19134:10;:17;;;;19127:24;;19046:113;:::o;13753:296::-;13905:41;13924:12;:10;:12::i;:::-;13938:7;13905:18;:41::i;:::-;13897:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14013:28;14023:4;14029:2;14033:7;14013:9;:28::i;:::-;13753:296;;;:::o;22443:94::-;;;;:::o;18782:256::-;18879:7;18915:23;18932:5;18915:16;:23::i;:::-;18907:5;:31;18899:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19004:12;:19;19017:5;19004:19;;;;;;;;;;;;;;;:26;19024:5;19004:26;;;;;;;;;;;;18997:33;;18782:256;;;;:::o;28900:160::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28949:12:::1;28975:10;28967:24;;28999:21;28967:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28948:77;;;29044:7;29036:16;;;::::0;::::1;;21860:1;28900:160::o:0;14057:185::-;14195:39;14212:4;14218:2;14222:7;14195:39;;;;;;;;;;;;:16;:39::i;:::-;14057:185;;;:::o;25999:358::-;26059:16;26088:23;26114:17;26124:6;26114:9;:17::i;:::-;26088:43;;26142:25;26184:15;26170:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26142:58;;26216:9;26211:113;26231:15;26227:1;:19;26211:113;;;26282:30;26302:6;26310:1;26282:19;:30::i;:::-;26268:8;26277:1;26268:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;26248:3;;;;;:::i;:::-;;;;26211:113;;;;26341:8;26334:15;;;;25999:358;;;:::o;19167:233::-;19242:7;19278:30;:28;:30::i;:::-;19270:5;:38;19262:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19375:10;19386:5;19375:17;;;;;;;;;;;;;;;;;;;;;;;;19368:24;;19167:233;;;:::o;22977:28::-;;;;;;;;;;;;;:::o;27353:104::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27438:11:::1;27428:7;:21;;;;;;;;;;;;:::i;:::-;;27353:104:::0;:::o;23012:26::-;;;;;;;;;;;;;:::o;11719:239::-;11791:7;11811:13;11827:7;:16;11835:7;11827:16;;;;;;;;;;;;;;;;;;;;;11811:32;;11879:1;11862:19;;:5;:19;;;;11854:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11945:5;11938:12;;;11719:239;;;:::o;11503:208::-;11575:7;11620:1;11603:19;;:5;:19;;;;11595:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11687:9;:16;11697:5;11687:16;;;;;;;;;;;;;;;;11680:23;;11503:208;;;:::o;21877:94::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21942:21:::1;21960:1;21942:9;:21::i;:::-;21877:94::o:0;27230:115::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27300:4:::1;27284:13;;:20;;;;;;;;;;;;;;;;;;27332:5;27315:14;;:22;;;;;;;;;;;;;;;;;;27230:115::o:0;22896:34::-;;;;;;;;;;;;;:::o;27038:90::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27112:8:::1;27105:4;:15;;;;27038:90:::0;:::o;26853:94::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26932:7:::1;26923:6;;:16;;;;;;;;;;;;;;;;;;26853:94:::0;:::o;21654:87::-;21700:7;21727:6;;;;;;;;;;;21720:13;;21654:87;:::o;25900:91::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25978:5:::1;25965:10;:18;;;;25900:91:::0;:::o;12074:104::-;12130:13;12163:7;12156:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12074:104;:::o;25082:255::-;25149:11;23848:5;23838:15;;:6;;;;;;;;;;;:15;;;23830:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23918:4;23901:21;;:13;;;;;;;;;;;:21;;;23893:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23985:16;;23970:11;:31;;23962:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24091:16;;24076:11;24051:10;:22;24062:10;24051:22;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:56;;24043:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;22843:4;24171:11;24155:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;24147:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24268:1;24254:11;:15;24246:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25201:11:::1;25194:4;;:18;;;;:::i;:::-;25181:9;:31;;25173:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25247:34;25257:10;25269:11;25247:9;:34::i;:::-;25318:11;25292:10;:22;25303:10;25292:22;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;25082:255:::0;;:::o;13278:295::-;13393:12;:10;:12::i;:::-;13381:24;;:8;:24;;;;13373:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;13493:8;13448:18;:32;13467:12;:10;:12::i;:::-;13448:32;;;;;;;;;;;;;;;:42;13481:8;13448:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;13546:8;13517:48;;13532:12;:10;:12::i;:::-;13517:48;;;13556:8;13517:48;;;;;;:::i;:::-;;;;;;;;13278:295;;:::o;26955:69::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27012:4:::1;27001:8;;:15;;;;;;;;;;;;;;;;;;26955:69::o:0;22854:35::-;;;;:::o;27136:86::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27210:4:::1;27193:14;;:21;;;;;;;;;;;;;;;;;;27136:86::o:0;14250:328::-;14425:41;14444:12;:10;:12::i;:::-;14458:7;14425:18;:41::i;:::-;14417:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14531:39;14545:4;14551:2;14555:7;14564:5;14531:13;:39::i;:::-;14250:328;;;;:::o;23149:43::-;;;;;;;;;;;;;;;;;:::o;26364:481::-;26438:13;26471:17;26479:8;26471:7;:17::i;:::-;26463:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26569:5;26557:17;;:8;;;;;;;;;;;:17;;;26553:71;;;26598:14;26591:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26553:71;26636:28;26667:10;:8;:10::i;:::-;26636:41;;26726:1;26701:14;26695:28;:32;:142;;;;;;;;;;;;;;;;;26767:14;26783:19;:8;:17;:19::i;:::-;26804:13;26750:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26695:142;26688:149;;;26364:481;;;;:::o;22807:40::-;22843:4;22807:40;:::o;13581:164::-;13678:4;13702:18;:25;13721:5;13702:25;;;;;;;;;;;;;;;:35;13728:8;13702:35;;;;;;;;;;;;;;;;;;;;;;;;;13695:42;;13581:164;;;;:::o;24550:524::-;24710:11;23284:5;23274:15;;:6;;;;;;;;;;;:15;;;23266:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23355:4;23337:22;;:14;;;;;;;;;;;:22;;;23329:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23428:16;;23413:11;:31;;23405:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23534:16;;23519:11;23494:10;:22;23505:10;23494:22;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:56;;23486:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;22843:4;23614:11;23598:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;23590:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;23711:1;23697:11;:15;23689:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24762:11:::1;24755:4;;:18;;;;:::i;:::-;24742:9;:31;;24734:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24808:12;24850:10;24833:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;24823:39;;;;;;24808:54;;24881:49;24888:10;;24900:4;24906:12;;24881:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24920:9;;24881:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;:49::i;:::-;24873:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;24984:34;24994:10;25006:11;24984:9;:34::i;:::-;25055:11;25029:10;:22;25040:10;25029:22;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;23760:1;24550:524:::0;;;;;;:::o;27466:110::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27561:7:::1;27544:14;:24;;;;;;;;;;;;:::i;:::-;;27466:110:::0;:::o;21979:192::-;21800:12;:10;:12::i;:::-;21789:23;;:7;:5;:7::i;:::-;:23;;;21781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22088:1:::1;22068:22;;:8;:22;;;;22060:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22144:19;22154:8;22144:9;:19::i;:::-;21979:192:::0;:::o;11190:305::-;11292:4;11344:25;11329:40;;;:11;:40;;;;:105;;;;11401:33;11386:48;;;:11;:48;;;;11329:105;:158;;;;11451:36;11475:11;11451:23;:36::i;:::-;11329:158;11309:178;;11190:305;;;:::o;14913:127::-;14978:4;15030:1;15002:30;;:7;:16;15010:7;15002:16;;;;;;;;;;;;;;;;;;;;;:30;;;;14995:37;;14913:127;;;:::o;10412:98::-;10465:7;10492:10;10485:17;;10412:98;:::o;17115:174::-;17217:2;17190:15;:24;17206:7;17190:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;17273:7;17269:2;17235:46;;17244:23;17259:7;17244:14;:23::i;:::-;17235:46;;;;;;;;;;;;17115:174;;:::o;15048:348::-;15141:4;15166:16;15174:7;15166;:16::i;:::-;15158:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15242:13;15258:23;15273:7;15258:14;:23::i;:::-;15242:39;;15311:5;15300:16;;:7;:16;;;:51;;;;15344:7;15320:31;;:20;15332:7;15320:11;:20::i;:::-;:31;;;15300:51;:87;;;;15355:32;15372:5;15379:7;15355:16;:32::i;:::-;15300:87;15292:96;;;15048:348;;;;:::o;16581:526::-;16740:4;16713:31;;:23;16728:7;16713:14;:23::i;:::-;:31;;;16705:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16823:1;16809:16;;:2;:16;;;;16801:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;16879:39;16900:4;16906:2;16910:7;16879:20;:39::i;:::-;16931:29;16948:1;16952:7;16931:8;:29::i;:::-;16992:1;16973:9;:15;16983:4;16973:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;17021:1;17004:9;:13;17014:2;17004:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;17052:2;17033:7;:16;17041:7;17033:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;17091:7;17087:2;17072:27;;17081:4;17072:27;;;;;;;;;;;;16581:526;;;:::o;22179:173::-;22235:16;22254:6;;;;;;;;;;;22235:25;;22280:8;22271:6;;:17;;;;;;;;;;;;;;;;;;22335:8;22304:40;;22325:8;22304:40;;;;;;;;;;;;22179:173;;:::o;27584:246::-;27668:7;27663:160;27685:11;27681:1;:15;;;27663:160;;;27714:15;27732:39;27756:11;27769:1;27732:39;;:23;:39::i;:::-;27714:57;;27782:29;27792:9;27803:7;27782:9;:29::i;:::-;27663:160;27698:3;;;;;:::i;:::-;;;;27663:160;;;;27584:246;;:::o;14588:315::-;14745:28;14755:4;14761:2;14765:7;14745:9;:28::i;:::-;14792:48;14815:4;14821:2;14825:7;14834:5;14792:22;:48::i;:::-;14784:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;14588:315;;;;:::o;24420:108::-;24480:13;24513:7;24506:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24420:108;:::o;1954:542::-;2010:13;2059:1;2050:5;:10;2046:53;;;2077:10;;;;;;;;;;;;;;;;;;;;;2046:53;2109:12;2124:5;2109:20;;2140:14;2165:78;2180:1;2172:4;:9;2165:78;;2198:8;;;;;:::i;:::-;;;;2229:2;2221:10;;;;;:::i;:::-;;;2165:78;;;2253:19;2285:6;2275:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2253:39;;2303:154;2319:1;2310:5;:10;2303:154;;2347:1;2337:11;;;;;:::i;:::-;;;2414:2;2406:5;:10;;;;:::i;:::-;2393:2;:24;;;;:::i;:::-;2380:39;;2363:6;2370;2363:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2443:2;2434:11;;;;;:::i;:::-;;;2303:154;;;2481:6;2467:21;;;;;1954:542;;;;:::o;25345:547::-;25491:4;25503:20;25526:4;25503:27;;25544:9;25539:312;25563:5;:12;25559:1;:16;25539:312;;;25591:20;25614:5;25620:1;25614:8;;;;;;;;;;;;;;;;;;;;;;25591:31;;25653:1;25637:9;25647:1;25637:12;;;;;;;;;;;;;;;;;;;;;;:17;25633:211;;;25709:12;25723;25692:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25682:55;;;;;;25667:70;;25633:211;;;25806:12;25820;25789:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25779:55;;;;;;25764:70;;25633:211;25539:312;25577:3;;;;;:::i;:::-;;;;25539:312;;;;25882:4;25866:12;:20;25859:27;;;25345:547;;;;;;:::o;1700:157::-;1785:4;1824:25;1809:40;;;:11;:40;;;;1802:47;;1700:157;;;:::o;19408:589::-;19552:45;19579:4;19585:2;19589:7;19552:26;:45::i;:::-;19630:1;19614:18;;:4;:18;;;19610:187;;;19649:40;19681:7;19649:31;:40::i;:::-;19610:187;;;19719:2;19711:10;;:4;:10;;;19707:90;;19738:47;19771:4;19777:7;19738:32;:47::i;:::-;19707:90;19610:187;19825:1;19811:16;;:2;:16;;;19807:183;;;19844:45;19881:7;19844:36;:45::i;:::-;19807:183;;;19917:4;19911:10;;:2;:10;;;19907:83;;19938:40;19966:2;19970:7;19938:27;:40::i;:::-;19907:83;19807:183;19408:589;;;:::o;27838:1054::-;27922:7;27941:17;28022:10;28033:11;28045:12;28058:15;28099:1;28084:12;:16;;;;:::i;:::-;28074:27;28102:11;28114:2;28011:124;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27983:167;;;;;;27961:200;;27941:220;;28174:19;28208;;28196:9;:31;;;;:::i;:::-;28174:53;;28240:18;28261:16;28278:11;28261:29;;;;;;;;;;;;;;;;;28240:50;;28301:14;28344:1;28330:10;:15;28326:120;;;28371:11;28362:20;;28326:120;;;28424:10;28415:19;;28326:120;28458:17;28500:1;28478:19;;:23;;;;:::i;:::-;28458:43;;28531:9;28516:11;:24;28512:311;;28557:22;28582:16;28599:9;28582:27;;;;;;;;;;;;;;;;;28557:52;;28646:1;28628:14;:19;28624:188;;;28700:9;28668:16;28685:11;28668:29;;;;;;;;;;;;;;;;:41;;;;28624:188;;;28782:14;28750:16;28767:11;28750:29;;;;;;;;;;;;;;;;:46;;;;28624:188;28512:311;;28835:19;;:21;;;;;;;;;:::i;:::-;;;;;;28883:1;28874:6;:10;;;;:::i;:::-;28867:17;;;;;;;27838:1054;;;;:::o;15404:110::-;15480:26;15490:2;15494:7;15480:26;;;;;;;;;;;;:9;:26::i;:::-;15404:110;;:::o;17297:799::-;17452:4;17473:15;:2;:13;;;:15::i;:::-;17469:620;;;17525:2;17509:36;;;17546:12;:10;:12::i;:::-;17560:4;17566:7;17575:5;17509:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17505:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17768:1;17751:6;:13;:18;17747:272;;;17794:60;;;;;;;;;;:::i;:::-;;;;;;;;17747:272;17969:6;17963:13;17954:6;17950:2;17946:15;17939:38;17505:529;17642:41;;;17632:51;;;:6;:51;;;;17625:58;;;;;17469:620;18073:4;18066:11;;17297:799;;;;;;;:::o;18104:126::-;;;;:::o;20234:164::-;20338:10;:17;;;;20311:15;:24;20327:7;20311:24;;;;;;;;;;;:44;;;;20366:10;20382:7;20366:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20234:164;:::o;20406:567::-;20500:22;20550:1;20525:22;20542:4;20525:16;:22::i;:::-;:26;;;;:::i;:::-;20500:51;;20562:18;20583:17;:26;20601:7;20583:26;;;;;;;;;;;;20562:47;;20650:14;20636:10;:28;20632:236;;20681:19;20703:12;:18;20716:4;20703:18;;;;;;;;;;;;;;;:34;20722:14;20703:34;;;;;;;;;;;;20681:56;;20787:11;20754:12;:18;20767:4;20754:18;;;;;;;;;;;;;;;:30;20773:10;20754:30;;;;;;;;;;;:44;;;;20846:10;20813:17;:30;20831:11;20813:30;;;;;;;;;;;:43;;;;20632:236;;20887:17;:26;20905:7;20887:26;;;;;;;;;;;20880:33;;;20931:12;:18;20944:4;20931:18;;;;;;;;;;;;;;;:34;20950:14;20931:34;;;;;;;;;;;20924:41;;;20406:567;;;;:::o;20981:435::-;21072:22;21117:1;21097:10;:17;;;;:21;;;;:::i;:::-;21072:46;;21129:18;21150:15;:24;21166:7;21150:24;;;;;;;;;;;;21129:45;;21187:19;21209:10;21220:14;21209:26;;;;;;;;;;;;;;;;;;;;;;;;21187:48;;21273:11;21248:10;21259;21248:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;21326:10;21295:15;:28;21311:11;21295:28;;;;;;;;;;;:41;;;;21357:15;:24;21373:7;21357:24;;;;;;;;;;;21350:31;;;21392:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20981:435;;;;:::o;20005:221::-;20090:14;20107:20;20124:2;20107:16;:20::i;:::-;20090:37;;20165:7;20138:12;:16;20151:2;20138:16;;;;;;;;;;;;;;;:24;20155:6;20138:24;;;;;;;;;;;:34;;;;20212:6;20183:17;:26;20201:7;20183:26;;;;;;;;;;;:35;;;;20005:221;;;:::o;15522:321::-;15652:18;15658:2;15662:7;15652:5;:18::i;:::-;15703:54;15734:1;15738:2;15742:7;15751:5;15703:22;:54::i;:::-;15681:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;15522:321;;;:::o;3335:198::-;3395:4;3414:12;3481:7;3469:20;3461:28;;3524:1;3517:4;:8;3510:15;;;3335:198;;;:::o;15851:382::-;15945:1;15931:16;;:2;:16;;;;15923:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16004:16;16012:7;16004;:16::i;:::-;16003:17;15995:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16066:45;16095:1;16099:2;16103:7;16066:20;:45::i;:::-;16141:1;16124:9;:13;16134:2;16124:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;16172:2;16153:7;:16;16161:7;16153:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;16217:7;16213:2;16192:33;;16209:1;16192:33;;;;;;;;;;;;15851:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;867:367::-;;;1000:3;993:4;985:6;981:17;977:27;967:2;;1018:1;1015;1008:12;967:2;1054:6;1041:20;1031:30;;1084:18;1076:6;1073:30;1070:2;;;1116:1;1113;1106:12;1070:2;1153:4;1145:6;1141:17;1129:29;;1207:3;1199:4;1191:6;1187:17;1177:8;1173:32;1170:41;1167:2;;;1224:1;1221;1214:12;1167:2;957:277;;;;;:::o;1257:367::-;;;1390:3;1383:4;1375:6;1371:17;1367:27;1357:2;;1408:1;1405;1398:12;1357:2;1444:6;1431:20;1421:30;;1474:18;1466:6;1463:30;1460:2;;;1506:1;1503;1496:12;1460:2;1543:4;1535:6;1531:17;1519:29;;1597:3;1589:4;1581:6;1577:17;1567:8;1563:32;1560:41;1557:2;;;1614:1;1611;1604:12;1557:2;1347:277;;;;;:::o;1630:133::-;;1711:6;1698:20;1689:29;;1727:30;1751:5;1727:30;:::i;:::-;1679:84;;;;:::o;1769:139::-;;1853:6;1840:20;1831:29;;1869:33;1896:5;1869:33;:::i;:::-;1821:87;;;;:::o;1914:137::-;;1997:6;1984:20;1975:29;;2013:32;2039:5;2013:32;:::i;:::-;1965:86;;;;:::o;2057:141::-;;2144:6;2138:13;2129:22;;2160:32;2186:5;2160:32;:::i;:::-;2119:79;;;;:::o;2217:271::-;;2321:3;2314:4;2306:6;2302:17;2298:27;2288:2;;2339:1;2336;2329:12;2288:2;2379:6;2366:20;2404:78;2478:3;2470:6;2463:4;2455:6;2451:17;2404:78;:::i;:::-;2395:87;;2278:210;;;;;:::o;2508:273::-;;2613:3;2606:4;2598:6;2594:17;2590:27;2580:2;;2631:1;2628;2621:12;2580:2;2671:6;2658:20;2696:79;2771:3;2763:6;2756:4;2748:6;2744:17;2696:79;:::i;:::-;2687:88;;2570:211;;;;;:::o;2787:139::-;;2871:6;2858:20;2849:29;;2887:33;2914:5;2887:33;:::i;:::-;2839:87;;;;:::o;2932:262::-;;3040:2;3028:9;3019:7;3015:23;3011:32;3008:2;;;3056:1;3053;3046:12;3008:2;3099:1;3124:53;3169:7;3160:6;3149:9;3145:22;3124:53;:::i;:::-;3114:63;;3070:117;2998:196;;;;:::o;3200:407::-;;;3325:2;3313:9;3304:7;3300:23;3296:32;3293:2;;;3341:1;3338;3331:12;3293:2;3384:1;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3355:117;3511:2;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3482:118;3283:324;;;;;:::o;3613:552::-;;;;3755:2;3743:9;3734:7;3730:23;3726:32;3723:2;;;3771:1;3768;3761:12;3723:2;3814:1;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3785:117;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:2;4095:53;4140:7;4131:6;4120:9;4116:22;4095:53;:::i;:::-;4085:63;;4040:118;3713:452;;;;;:::o;4171:809::-;;;;;4339:3;4327:9;4318:7;4314:23;4310:33;4307:2;;;4356:1;4353;4346:12;4307:2;4399:1;4424:53;4469:7;4460:6;4449:9;4445:22;4424:53;:::i;:::-;4414:63;;4370:117;4526:2;4552:53;4597:7;4588:6;4577:9;4573:22;4552:53;:::i;:::-;4542:63;;4497:118;4654:2;4680:53;4725:7;4716:6;4705:9;4701:22;4680:53;:::i;:::-;4670:63;;4625:118;4810:2;4799:9;4795:18;4782:32;4841:18;4833:6;4830:30;4827:2;;;4873:1;4870;4863:12;4827:2;4901:62;4955:7;4946:6;4935:9;4931:22;4901:62;:::i;:::-;4891:72;;4753:220;4297:683;;;;;;;:::o;4986:401::-;;;5108:2;5096:9;5087:7;5083:23;5079:32;5076:2;;;5124:1;5121;5114:12;5076:2;5167:1;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5138:117;5294:2;5320:50;5362:7;5353:6;5342:9;5338:22;5320:50;:::i;:::-;5310:60;;5265:115;5066:321;;;;;:::o;5393:407::-;;;5518:2;5506:9;5497:7;5493:23;5489:32;5486:2;;;5534:1;5531;5524:12;5486:2;5577:1;5602:53;5647:7;5638:6;5627:9;5623:22;5602:53;:::i;:::-;5592:63;;5548:117;5704:2;5730:53;5775:7;5766:6;5755:9;5751:22;5730:53;:::i;:::-;5720:63;;5675:118;5476:324;;;;;:::o;5806:878::-;;;;;;6018:2;6006:9;5997:7;5993:23;5989:32;5986:2;;;6034:1;6031;6024:12;5986:2;6105:1;6094:9;6090:17;6077:31;6135:18;6127:6;6124:30;6121:2;;;6167:1;6164;6157:12;6121:2;6203:80;6275:7;6266:6;6255:9;6251:22;6203:80;:::i;:::-;6185:98;;;;6048:245;6360:2;6349:9;6345:18;6332:32;6391:18;6383:6;6380:30;6377:2;;;6423:1;6420;6413:12;6377:2;6459:80;6531:7;6522:6;6511:9;6507:22;6459:80;:::i;:::-;6441:98;;;;6303:246;6588:2;6614:53;6659:7;6650:6;6639:9;6635:22;6614:53;:::i;:::-;6604:63;;6559:118;5976:708;;;;;;;;:::o;6690:256::-;;6795:2;6783:9;6774:7;6770:23;6766:32;6763:2;;;6811:1;6808;6801:12;6763:2;6854:1;6879:50;6921:7;6912:6;6901:9;6897:22;6879:50;:::i;:::-;6869:60;;6825:114;6753:193;;;;:::o;6952:262::-;;7060:2;7048:9;7039:7;7035:23;7031:32;7028:2;;;7076:1;7073;7066:12;7028:2;7119:1;7144:53;7189:7;7180:6;7169:9;7165:22;7144:53;:::i;:::-;7134:63;;7090:117;7018:196;;;;:::o;7220:260::-;;7327:2;7315:9;7306:7;7302:23;7298:32;7295:2;;;7343:1;7340;7333:12;7295:2;7386:1;7411:52;7455:7;7446:6;7435:9;7431:22;7411:52;:::i;:::-;7401:62;;7357:116;7285:195;;;;:::o;7486:282::-;;7604:2;7592:9;7583:7;7579:23;7575:32;7572:2;;;7620:1;7617;7610:12;7572:2;7663:1;7688:63;7743:7;7734:6;7723:9;7719:22;7688:63;:::i;:::-;7678:73;;7634:127;7562:206;;;;:::o;7774:375::-;;7892:2;7880:9;7871:7;7867:23;7863:32;7860:2;;;7908:1;7905;7898:12;7860:2;7979:1;7968:9;7964:17;7951:31;8009:18;8001:6;7998:30;7995:2;;;8041:1;8038;8031:12;7995:2;8069:63;8124:7;8115:6;8104:9;8100:22;8069:63;:::i;:::-;8059:73;;7922:220;7850:299;;;;:::o;8155:262::-;;8263:2;8251:9;8242:7;8238:23;8234:32;8231:2;;;8279:1;8276;8269:12;8231:2;8322:1;8347:53;8392:7;8383:6;8372:9;8368:22;8347:53;:::i;:::-;8337:63;;8293:117;8221:196;;;;:::o;8423:179::-;;8513:46;8555:3;8547:6;8513:46;:::i;:::-;8591:4;8586:3;8582:14;8568:28;;8503:99;;;;:::o;8608:118::-;8695:24;8713:5;8695:24;:::i;:::-;8690:3;8683:37;8673:53;;:::o;8732:157::-;8837:45;8857:24;8875:5;8857:24;:::i;:::-;8837:45;:::i;:::-;8832:3;8825:58;8815:74;;:::o;8925:732::-;;9073:54;9121:5;9073:54;:::i;:::-;9143:86;9222:6;9217:3;9143:86;:::i;:::-;9136:93;;9253:56;9303:5;9253:56;:::i;:::-;9332:7;9363:1;9348:284;9373:6;9370:1;9367:13;9348:284;;;9449:6;9443:13;9476:63;9535:3;9520:13;9476:63;:::i;:::-;9469:70;;9562:60;9615:6;9562:60;:::i;:::-;9552:70;;9408:224;9395:1;9392;9388:9;9383:14;;9348:284;;;9352:14;9648:3;9641:10;;9049:608;;;;;;;:::o;9663:109::-;9744:21;9759:5;9744:21;:::i;:::-;9739:3;9732:34;9722:50;;:::o;9778:118::-;9865:24;9883:5;9865:24;:::i;:::-;9860:3;9853:37;9843:53;;:::o;9902:157::-;10007:45;10027:24;10045:5;10027:24;:::i;:::-;10007:45;:::i;:::-;10002:3;9995:58;9985:74;;:::o;10065:360::-;;10179:38;10211:5;10179:38;:::i;:::-;10233:70;10296:6;10291:3;10233:70;:::i;:::-;10226:77;;10312:52;10357:6;10352:3;10345:4;10338:5;10334:16;10312:52;:::i;:::-;10389:29;10411:6;10389:29;:::i;:::-;10384:3;10380:39;10373:46;;10155:270;;;;;:::o;10431:364::-;;10547:39;10580:5;10547:39;:::i;:::-;10602:71;10666:6;10661:3;10602:71;:::i;:::-;10595:78;;10682:52;10727:6;10722:3;10715:4;10708:5;10704:16;10682:52;:::i;:::-;10759:29;10781:6;10759:29;:::i;:::-;10754:3;10750:39;10743:46;;10523:272;;;;;:::o;10801:377::-;;10935:39;10968:5;10935:39;:::i;:::-;10990:89;11072:6;11067:3;10990:89;:::i;:::-;10983:96;;11088:52;11133:6;11128:3;11121:4;11114:5;11110:16;11088:52;:::i;:::-;11165:6;11160:3;11156:16;11149:23;;10911:267;;;;;:::o;11208:845::-;;11348:5;11342:12;11377:36;11403:9;11377:36;:::i;:::-;11429:89;11511:6;11506:3;11429:89;:::i;:::-;11422:96;;11549:1;11538:9;11534:17;11565:1;11560:137;;;;11711:1;11706:341;;;;11527:520;;11560:137;11644:4;11640:9;11629;11625:25;11620:3;11613:38;11680:6;11675:3;11671:16;11664:23;;11560:137;;11706:341;11773:38;11805:5;11773:38;:::i;:::-;11833:1;11847:154;11861:6;11858:1;11855:13;11847:154;;;11935:7;11929:14;11925:1;11920:3;11916:11;11909:35;11985:1;11976:7;11972:15;11961:26;;11883:4;11880:1;11876:12;11871:17;;11847:154;;;12030:6;12025:3;12021:16;12014:23;;11713:334;;11527:520;;11315:738;;;;;;:::o;12059:375::-;;12222:67;12286:2;12281:3;12222:67;:::i;:::-;12215:74;;12319:34;12315:1;12310:3;12306:11;12299:55;12385:13;12380:2;12375:3;12371:12;12364:35;12425:2;12420:3;12416:12;12409:19;;12205:229;;;:::o;12440:382::-;;12603:67;12667:2;12662:3;12603:67;:::i;:::-;12596:74;;12700:34;12696:1;12691:3;12687:11;12680:55;12766:20;12761:2;12756:3;12752:12;12745:42;12813:2;12808:3;12804:12;12797:19;;12586:236;;;:::o;12828:370::-;;12991:67;13055:2;13050:3;12991:67;:::i;:::-;12984:74;;13088:34;13084:1;13079:3;13075:11;13068:55;13154:8;13149:2;13144:3;13140:12;13133:30;13189:2;13184:3;13180:12;13173:19;;12974:224;;;:::o;13204:326::-;;13367:67;13431:2;13426:3;13367:67;:::i;:::-;13360:74;;13464:30;13460:1;13455:3;13451:11;13444:51;13521:2;13516:3;13512:12;13505:19;;13350:180;;;:::o;13536:368::-;;13699:67;13763:2;13758:3;13699:67;:::i;:::-;13692:74;;13796:34;13792:1;13787:3;13783:11;13776:55;13862:6;13857:2;13852:3;13848:12;13841:28;13895:2;13890:3;13886:12;13879:19;;13682:222;;;:::o;13910:323::-;;14073:67;14137:2;14132:3;14073:67;:::i;:::-;14066:74;;14170:27;14166:1;14161:3;14157:11;14150:48;14224:2;14219:3;14215:12;14208:19;;14056:177;;;:::o;14239:330::-;;14402:67;14466:2;14461:3;14402:67;:::i;:::-;14395:74;;14499:34;14495:1;14490:3;14486:11;14479:55;14560:2;14555:3;14551:12;14544:19;;14385:184;;;:::o;14575:376::-;;14738:67;14802:2;14797:3;14738:67;:::i;:::-;14731:74;;14835:34;14831:1;14826:3;14822:11;14815:55;14901:14;14896:2;14891:3;14887:12;14880:36;14942:2;14937:3;14933:12;14926:19;;14721:230;;;:::o;14957:316::-;;15120:67;15184:2;15179:3;15120:67;:::i;:::-;15113:74;;15217:20;15213:1;15208:3;15204:11;15197:41;15264:2;15259:3;15255:12;15248:19;;15103:170;;;:::o;15279:324::-;;15442:67;15506:2;15501:3;15442:67;:::i;:::-;15435:74;;15539:28;15535:1;15530:3;15526:11;15519:49;15594:2;15589:3;15585:12;15578:19;;15425:178;;;:::o;15609:388::-;;15772:67;15836:2;15831:3;15772:67;:::i;:::-;15765:74;;15869:34;15865:1;15860:3;15856:11;15849:55;15935:26;15930:2;15925:3;15921:12;15914:48;15988:2;15983:3;15979:12;15972:19;;15755:242;;;:::o;16003:374::-;;16166:67;16230:2;16225:3;16166:67;:::i;:::-;16159:74;;16263:34;16259:1;16254:3;16250:11;16243:55;16329:12;16324:2;16319:3;16315:12;16308:34;16368:2;16363:3;16359:12;16352:19;;16149:228;;;:::o;16383:373::-;;16546:67;16610:2;16605:3;16546:67;:::i;:::-;16539:74;;16643:34;16639:1;16634:3;16630:11;16623:55;16709:11;16704:2;16699:3;16695:12;16688:33;16747:2;16742:3;16738:12;16731:19;;16529:227;;;:::o;16762:322::-;;16925:67;16989:2;16984:3;16925:67;:::i;:::-;16918:74;;17022:26;17018:1;17013:3;17009:11;17002:47;17075:2;17070:3;17066:12;17059:19;;16908:176;;;:::o;17090:367::-;;17253:67;17317:2;17312:3;17253:67;:::i;:::-;17246:74;;17350:34;17346:1;17341:3;17337:11;17330:55;17416:5;17411:2;17406:3;17402:12;17395:27;17448:2;17443:3;17439:12;17432:19;;17236:221;;;:::o;17463:330::-;;17626:67;17690:2;17685:3;17626:67;:::i;:::-;17619:74;;17723:34;17719:1;17714:3;17710:11;17703:55;17784:2;17779:3;17775:12;17768:19;;17609:184;;;:::o;17799:328::-;;17962:67;18026:2;18021:3;17962:67;:::i;:::-;17955:74;;18059:32;18055:1;18050:3;18046:11;18039:53;18118:2;18113:3;18109:12;18102:19;;17945:182;;;:::o;18133:376::-;;18296:67;18360:2;18355:3;18296:67;:::i;:::-;18289:74;;18393:34;18389:1;18384:3;18380:11;18373:55;18459:14;18454:2;18449:3;18445:12;18438:36;18500:2;18495:3;18491:12;18484:19;;18279:230;;;:::o;18515:370::-;;18678:67;18742:2;18737:3;18678:67;:::i;:::-;18671:74;;18775:34;18771:1;18766:3;18762:11;18755:55;18841:8;18836:2;18831:3;18827:12;18820:30;18876:2;18871:3;18867:12;18860:19;;18661:224;;;:::o;18891:330::-;;19054:67;19118:2;19113:3;19054:67;:::i;:::-;19047:74;;19151:34;19147:1;19142:3;19138:11;19131:55;19212:2;19207:3;19203:12;19196:19;;19037:184;;;:::o;19227:373::-;;19390:67;19454:2;19449:3;19390:67;:::i;:::-;19383:74;;19487:34;19483:1;19478:3;19474:11;19467:55;19553:11;19548:2;19543:3;19539:12;19532:33;19591:2;19586:3;19582:12;19575:19;;19373:227;;;:::o;19606:379::-;;19769:67;19833:2;19828:3;19769:67;:::i;:::-;19762:74;;19866:34;19862:1;19857:3;19853:11;19846:55;19932:17;19927:2;19922:3;19918:12;19911:39;19976:2;19971:3;19967:12;19960:19;;19752:233;;;:::o;19991:365::-;;20154:67;20218:2;20213:3;20154:67;:::i;:::-;20147:74;;20251:34;20247:1;20242:3;20238:11;20231:55;20317:3;20312:2;20307:3;20303:12;20296:25;20347:2;20342:3;20338:12;20331:19;;20137:219;;;:::o;20362:297::-;;20542:83;20623:1;20618:3;20542:83;:::i;:::-;20535:90;;20651:1;20646:3;20642:11;20635:18;;20525:134;;;:::o;20665:381::-;;20828:67;20892:2;20887:3;20828:67;:::i;:::-;20821:74;;20925:34;20921:1;20916:3;20912:11;20905:55;20991:19;20986:2;20981:3;20977:12;20970:41;21037:2;21032:3;21028:12;21021:19;;20811:235;;;:::o;21052:376::-;;21215:67;21279:2;21274:3;21215:67;:::i;:::-;21208:74;;21312:34;21308:1;21303:3;21299:11;21292:55;21378:14;21373:2;21368:3;21364:12;21357:36;21419:2;21414:3;21410:12;21403:19;;21198:230;;;:::o;21434:322::-;;21597:67;21661:2;21656:3;21597:67;:::i;:::-;21590:74;;21694:26;21690:1;21685:3;21681:11;21674:47;21747:2;21742:3;21738:12;21731:19;;21580:176;;;:::o;21762:108::-;21839:24;21857:5;21839:24;:::i;:::-;21834:3;21827:37;21817:53;;:::o;21876:118::-;21963:24;21981:5;21963:24;:::i;:::-;21958:3;21951:37;21941:53;;:::o;22000:256::-;;22127:75;22198:3;22189:6;22127:75;:::i;:::-;22227:2;22222:3;22218:12;22211:19;;22247:3;22240:10;;22116:140;;;;:::o;22262:397::-;;22417:75;22488:3;22479:6;22417:75;:::i;:::-;22517:2;22512:3;22508:12;22501:19;;22530:75;22601:3;22592:6;22530:75;:::i;:::-;22630:2;22625:3;22621:12;22614:19;;22650:3;22643:10;;22406:253;;;;;:::o;22665:589::-;;22912:95;23003:3;22994:6;22912:95;:::i;:::-;22905:102;;23024:95;23115:3;23106:6;23024:95;:::i;:::-;23017:102;;23136:92;23224:3;23215:6;23136:92;:::i;:::-;23129:99;;23245:3;23238:10;;22894:360;;;;;;:::o;23260:379::-;;23466:147;23609:3;23466:147;:::i;:::-;23459:154;;23630:3;23623:10;;23448:191;;;:::o;23645:222::-;;23776:2;23765:9;23761:18;23753:26;;23789:71;23857:1;23846:9;23842:17;23833:6;23789:71;:::i;:::-;23743:124;;;;:::o;23873:640::-;;24106:3;24095:9;24091:19;24083:27;;24120:71;24188:1;24177:9;24173:17;24164:6;24120:71;:::i;:::-;24201:72;24269:2;24258:9;24254:18;24245:6;24201:72;:::i;:::-;24283;24351:2;24340:9;24336:18;24327:6;24283:72;:::i;:::-;24402:9;24396:4;24392:20;24387:2;24376:9;24372:18;24365:48;24430:76;24501:4;24492:6;24430:76;:::i;:::-;24422:84;;24073:440;;;;;;;:::o;24519:886::-;;24818:3;24807:9;24803:19;24795:27;;24832:71;24900:1;24889:9;24885:17;24876:6;24832:71;:::i;:::-;24913:72;24981:2;24970:9;24966:18;24957:6;24913:72;:::i;:::-;24995;25063:2;25052:9;25048:18;25039:6;24995:72;:::i;:::-;25077;25145:2;25134:9;25130:18;25121:6;25077:72;:::i;:::-;25159:73;25227:3;25216:9;25212:19;25203:6;25159:73;:::i;:::-;25242;25310:3;25299:9;25295:19;25286:6;25242:73;:::i;:::-;25325;25393:3;25382:9;25378:19;25369:6;25325:73;:::i;:::-;24785:620;;;;;;;;;;:::o;25411:373::-;;25592:2;25581:9;25577:18;25569:26;;25641:9;25635:4;25631:20;25627:1;25616:9;25612:17;25605:47;25669:108;25772:4;25763:6;25669:108;:::i;:::-;25661:116;;25559:225;;;;:::o;25790:210::-;;25915:2;25904:9;25900:18;25892:26;;25928:65;25990:1;25979:9;25975:17;25966:6;25928:65;:::i;:::-;25882:118;;;;:::o;26006:222::-;;26137:2;26126:9;26122:18;26114:26;;26150:71;26218:1;26207:9;26203:17;26194:6;26150:71;:::i;:::-;26104:124;;;;:::o;26234:313::-;;26385:2;26374:9;26370:18;26362:26;;26434:9;26428:4;26424:20;26420:1;26409:9;26405:17;26398:47;26462:78;26535:4;26526:6;26462:78;:::i;:::-;26454:86;;26352:195;;;;:::o;26553:419::-;;26757:2;26746:9;26742:18;26734:26;;26806:9;26800:4;26796:20;26792:1;26781:9;26777:17;26770:47;26834:131;26960:4;26834:131;:::i;:::-;26826:139;;26724:248;;;:::o;26978:419::-;;27182:2;27171:9;27167:18;27159:26;;27231:9;27225:4;27221:20;27217:1;27206:9;27202:17;27195:47;27259:131;27385:4;27259:131;:::i;:::-;27251:139;;27149:248;;;:::o;27403:419::-;;27607:2;27596:9;27592:18;27584:26;;27656:9;27650:4;27646:20;27642:1;27631:9;27627:17;27620:47;27684:131;27810:4;27684:131;:::i;:::-;27676:139;;27574:248;;;:::o;27828:419::-;;28032:2;28021:9;28017:18;28009:26;;28081:9;28075:4;28071:20;28067:1;28056:9;28052:17;28045:47;28109:131;28235:4;28109:131;:::i;:::-;28101:139;;27999:248;;;:::o;28253:419::-;;28457:2;28446:9;28442:18;28434:26;;28506:9;28500:4;28496:20;28492:1;28481:9;28477:17;28470:47;28534:131;28660:4;28534:131;:::i;:::-;28526:139;;28424:248;;;:::o;28678:419::-;;28882:2;28871:9;28867:18;28859:26;;28931:9;28925:4;28921:20;28917:1;28906:9;28902:17;28895:47;28959:131;29085:4;28959:131;:::i;:::-;28951:139;;28849:248;;;:::o;29103:419::-;;29307:2;29296:9;29292:18;29284:26;;29356:9;29350:4;29346:20;29342:1;29331:9;29327:17;29320:47;29384:131;29510:4;29384:131;:::i;:::-;29376:139;;29274:248;;;:::o;29528:419::-;;29732:2;29721:9;29717:18;29709:26;;29781:9;29775:4;29771:20;29767:1;29756:9;29752:17;29745:47;29809:131;29935:4;29809:131;:::i;:::-;29801:139;;29699:248;;;:::o;29953:419::-;;30157:2;30146:9;30142:18;30134:26;;30206:9;30200:4;30196:20;30192:1;30181:9;30177:17;30170:47;30234:131;30360:4;30234:131;:::i;:::-;30226:139;;30124:248;;;:::o;30378:419::-;;30582:2;30571:9;30567:18;30559:26;;30631:9;30625:4;30621:20;30617:1;30606:9;30602:17;30595:47;30659:131;30785:4;30659:131;:::i;:::-;30651:139;;30549:248;;;:::o;30803:419::-;;31007:2;30996:9;30992:18;30984:26;;31056:9;31050:4;31046:20;31042:1;31031:9;31027:17;31020:47;31084:131;31210:4;31084:131;:::i;:::-;31076:139;;30974:248;;;:::o;31228:419::-;;31432:2;31421:9;31417:18;31409:26;;31481:9;31475:4;31471:20;31467:1;31456:9;31452:17;31445:47;31509:131;31635:4;31509:131;:::i;:::-;31501:139;;31399:248;;;:::o;31653:419::-;;31857:2;31846:9;31842:18;31834:26;;31906:9;31900:4;31896:20;31892:1;31881:9;31877:17;31870:47;31934:131;32060:4;31934:131;:::i;:::-;31926:139;;31824:248;;;:::o;32078:419::-;;32282:2;32271:9;32267:18;32259:26;;32331:9;32325:4;32321:20;32317:1;32306:9;32302:17;32295:47;32359:131;32485:4;32359:131;:::i;:::-;32351:139;;32249:248;;;:::o;32503:419::-;;32707:2;32696:9;32692:18;32684:26;;32756:9;32750:4;32746:20;32742:1;32731:9;32727:17;32720:47;32784:131;32910:4;32784:131;:::i;:::-;32776:139;;32674:248;;;:::o;32928:419::-;;33132:2;33121:9;33117:18;33109:26;;33181:9;33175:4;33171:20;33167:1;33156:9;33152:17;33145:47;33209:131;33335:4;33209:131;:::i;:::-;33201:139;;33099:248;;;:::o;33353:419::-;;33557:2;33546:9;33542:18;33534:26;;33606:9;33600:4;33596:20;33592:1;33581:9;33577:17;33570:47;33634:131;33760:4;33634:131;:::i;:::-;33626:139;;33524:248;;;:::o;33778:419::-;;33982:2;33971:9;33967:18;33959:26;;34031:9;34025:4;34021:20;34017:1;34006:9;34002:17;33995:47;34059:131;34185:4;34059:131;:::i;:::-;34051:139;;33949:248;;;:::o;34203:419::-;;34407:2;34396:9;34392:18;34384:26;;34456:9;34450:4;34446:20;34442:1;34431:9;34427:17;34420:47;34484:131;34610:4;34484:131;:::i;:::-;34476:139;;34374:248;;;:::o;34628:419::-;;34832:2;34821:9;34817:18;34809:26;;34881:9;34875:4;34871:20;34867:1;34856:9;34852:17;34845:47;34909:131;35035:4;34909:131;:::i;:::-;34901:139;;34799:248;;;:::o;35053:419::-;;35257:2;35246:9;35242:18;35234:26;;35306:9;35300:4;35296:20;35292:1;35281:9;35277:17;35270:47;35334:131;35460:4;35334:131;:::i;:::-;35326:139;;35224:248;;;:::o;35478:419::-;;35682:2;35671:9;35667:18;35659:26;;35731:9;35725:4;35721:20;35717:1;35706:9;35702:17;35695:47;35759:131;35885:4;35759:131;:::i;:::-;35751:139;;35649:248;;;:::o;35903:419::-;;36107:2;36096:9;36092:18;36084:26;;36156:9;36150:4;36146:20;36142:1;36131:9;36127:17;36120:47;36184:131;36310:4;36184:131;:::i;:::-;36176:139;;36074:248;;;:::o;36328:419::-;;36532:2;36521:9;36517:18;36509:26;;36581:9;36575:4;36571:20;36567:1;36556:9;36552:17;36545:47;36609:131;36735:4;36609:131;:::i;:::-;36601:139;;36499:248;;;:::o;36753:419::-;;36957:2;36946:9;36942:18;36934:26;;37006:9;37000:4;36996:20;36992:1;36981:9;36977:17;36970:47;37034:131;37160:4;37034:131;:::i;:::-;37026:139;;36924:248;;;:::o;37178:419::-;;37382:2;37371:9;37367:18;37359:26;;37431:9;37425:4;37421:20;37417:1;37406:9;37402:17;37395:47;37459:131;37585:4;37459:131;:::i;:::-;37451:139;;37349:248;;;:::o;37603:222::-;;37734:2;37723:9;37719:18;37711:26;;37747:71;37815:1;37804:9;37800:17;37791:6;37747:71;:::i;:::-;37701:124;;;;:::o;37831:283::-;;37897:2;37891:9;37881:19;;37939:4;37931:6;37927:17;38046:6;38034:10;38031:22;38010:18;37998:10;37995:34;37992:62;37989:2;;;38057:18;;:::i;:::-;37989:2;38097:10;38093:2;38086:22;37871:243;;;;:::o;38120:331::-;;38271:18;38263:6;38260:30;38257:2;;;38293:18;;:::i;:::-;38257:2;38378:4;38374:9;38367:4;38359:6;38355:17;38351:33;38343:41;;38439:4;38433;38429:15;38421:23;;38186:265;;;:::o;38457:332::-;;38609:18;38601:6;38598:30;38595:2;;;38631:18;;:::i;:::-;38595:2;38716:4;38712:9;38705:4;38697:6;38693:17;38689:33;38681:41;;38777:4;38771;38767:15;38759:23;;38524:265;;;:::o;38795:132::-;;38885:3;38877:11;;38915:4;38910:3;38906:14;38898:22;;38867:60;;;:::o;38933:141::-;;39005:3;38997:11;;39028:3;39025:1;39018:14;39062:4;39059:1;39049:18;39041:26;;38987:87;;;:::o;39080:114::-;;39181:5;39175:12;39165:22;;39154:40;;;:::o;39200:98::-;;39285:5;39279:12;39269:22;;39258:40;;;:::o;39304:99::-;;39390:5;39384:12;39374:22;;39363:40;;;:::o;39409:113::-;;39511:4;39506:3;39502:14;39494:22;;39484:38;;;:::o;39528:184::-;;39661:6;39656:3;39649:19;39701:4;39696:3;39692:14;39677:29;;39639:73;;;;:::o;39718:168::-;;39835:6;39830:3;39823:19;39875:4;39870:3;39866:14;39851:29;;39813:73;;;;:::o;39892:147::-;;40030:3;40015:18;;40005:34;;;;:::o;40045:169::-;;40163:6;40158:3;40151:19;40203:4;40198:3;40194:14;40179:29;;40141:73;;;;:::o;40220:148::-;;40359:3;40344:18;;40334:34;;;;:::o;40374:305::-;;40433:20;40451:1;40433:20;:::i;:::-;40428:25;;40467:20;40485:1;40467:20;:::i;:::-;40462:25;;40621:1;40553:66;40549:74;40546:1;40543:81;40540:2;;;40627:18;;:::i;:::-;40540:2;40671:1;40668;40664:9;40657:16;;40418:261;;;;:::o;40685:185::-;;40742:20;40760:1;40742:20;:::i;:::-;40737:25;;40776:20;40794:1;40776:20;:::i;:::-;40771:25;;40815:1;40805:2;;40820:18;;:::i;:::-;40805:2;40862:1;40859;40855:9;40850:14;;40727:143;;;;:::o;40876:348::-;;40939:20;40957:1;40939:20;:::i;:::-;40934:25;;40973:20;40991:1;40973:20;:::i;:::-;40968:25;;41161:1;41093:66;41089:74;41086:1;41083:81;41078:1;41071:9;41064:17;41060:105;41057:2;;;41168:18;;:::i;:::-;41057:2;41216:1;41213;41209:9;41198:20;;40924:300;;;;:::o;41230:191::-;;41290:20;41308:1;41290:20;:::i;:::-;41285:25;;41324:20;41342:1;41324:20;:::i;:::-;41319:25;;41363:1;41360;41357:8;41354:2;;;41368:18;;:::i;:::-;41354:2;41413:1;41410;41406:9;41398:17;;41275:146;;;;:::o;41427:96::-;;41493:24;41511:5;41493:24;:::i;:::-;41482:35;;41472:51;;;:::o;41529:90::-;;41606:5;41599:13;41592:21;41581:32;;41571:48;;;:::o;41625:77::-;;41691:5;41680:16;;41670:32;;;:::o;41708:149::-;;41784:66;41777:5;41773:78;41762:89;;41752:105;;;:::o;41863:126::-;;41940:42;41933:5;41929:54;41918:65;;41908:81;;;:::o;41995:77::-;;42061:5;42050:16;;42040:32;;;:::o;42078:86::-;;42153:4;42146:5;42142:16;42131:27;;42121:43;;;:::o;42170:154::-;42254:6;42249:3;42244;42231:30;42316:1;42307:6;42302:3;42298:16;42291:27;42221:103;;;:::o;42330:307::-;42398:1;42408:113;42422:6;42419:1;42416:13;42408:113;;;42507:1;42502:3;42498:11;42492:18;42488:1;42483:3;42479:11;42472:39;42444:2;42441:1;42437:10;42432:15;;42408:113;;;42539:6;42536:1;42533:13;42530:2;;;42619:1;42610:6;42605:3;42601:16;42594:27;42530:2;42379:258;;;;:::o;42643:171::-;;42705:24;42723:5;42705:24;:::i;:::-;42696:33;;42751:4;42744:5;42741:15;42738:2;;;42759:18;;:::i;:::-;42738:2;42806:1;42799:5;42795:13;42788:20;;42686:128;;;:::o;42820:320::-;;42901:1;42895:4;42891:12;42881:22;;42948:1;42942:4;42938:12;42969:18;42959:2;;43025:4;43017:6;43013:17;43003:27;;42959:2;43087;43079:6;43076:14;43056:18;43053:38;43050:2;;;43106:18;;:::i;:::-;43050:2;42871:269;;;;:::o;43146:233::-;;43208:24;43226:5;43208:24;:::i;:::-;43199:33;;43254:66;43247:5;43244:77;43241:2;;;43324:18;;:::i;:::-;43241:2;43371:1;43364:5;43360:13;43353:20;;43189:190;;;:::o;43385:167::-;;43445:22;43461:5;43445:22;:::i;:::-;43436:31;;43489:4;43482:5;43479:15;43476:2;;;43497:18;;:::i;:::-;43476:2;43544:1;43537:5;43533:13;43526:20;;43426:126;;;:::o;43558:100::-;;43626:26;43646:5;43626:26;:::i;:::-;43615:37;;43605:53;;;:::o;43664:79::-;;43732:5;43721:16;;43711:32;;;:::o;43749:94::-;;43817:20;43831:5;43817:20;:::i;:::-;43806:31;;43796:47;;;:::o;43849:176::-;;43898:20;43916:1;43898:20;:::i;:::-;43893:25;;43932:20;43950:1;43932:20;:::i;:::-;43927:25;;43971:1;43961:2;;43976:18;;:::i;:::-;43961:2;44017:1;44014;44010:9;44005:14;;43883:142;;;;:::o;44031:180::-;44079:77;44076:1;44069:88;44176:4;44173:1;44166:15;44200:4;44197:1;44190:15;44217:180;44265:77;44262:1;44255:88;44362:4;44359:1;44352:15;44386:4;44383:1;44376:15;44403:180;44451:77;44448:1;44441:88;44548:4;44545:1;44538:15;44572:4;44569:1;44562:15;44589:180;44637:77;44634:1;44627:88;44734:4;44731:1;44724:15;44758:4;44755:1;44748:15;44775:102;;44867:2;44863:7;44858:2;44851:5;44847:14;44843:28;44833:38;;44823:54;;;:::o;44883:94::-;;44964:5;44960:2;44956:14;44935:35;;44925:52;;;:::o;44983:122::-;45056:24;45074:5;45056:24;:::i;:::-;45049:5;45046:35;45036:2;;45095:1;45092;45085:12;45036:2;45026:79;:::o;45111:116::-;45181:21;45196:5;45181:21;:::i;:::-;45174:5;45171:32;45161:2;;45217:1;45214;45207:12;45161:2;45151:76;:::o;45233:122::-;45306:24;45324:5;45306:24;:::i;:::-;45299:5;45296:35;45286:2;;45345:1;45342;45335:12;45286:2;45276:79;:::o;45361:120::-;45433:23;45450:5;45433:23;:::i;:::-;45426:5;45423:34;45413:2;;45471:1;45468;45461:12;45413:2;45403:78;:::o;45487:122::-;45560:24;45578:5;45560:24;:::i;:::-;45553:5;45550:35;45540:2;;45599:1;45596;45589:12;45540:2;45530:79;:::o

Swarm Source

ipfs://06b6679d714e05f4dcb857eb41e6125d1bdb0c03b98defd8e5cf7367804c47da
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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