ETH Price: $3,027.88 (+0.14%)
Gas: 3 Gwei

Token

Elementa (ELEM)
 

Overview

Max Total Supply

451 ELEM

Holders

166

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
7 ELEM
0x6b9625732846ea2764a45c690f23ca6f687b37e6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Elementa is a not just an avatar, Elementa is not just a collectable, Elementa is also the remaining population of a destroyed world called Viridium, the last 5,000 survivors, trying to find a way to save their world.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Elementa

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0; 

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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 {
        //solhint-disable-next-line max-line-length
        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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        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; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

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

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

contract Elementa is ERC721Enumerable, Ownable {
    using SafeMath for uint256;
    using Strings for uint256;

    address proxyRegistryAddress;
    mapping (uint256 => string) private _tokenURIs;
    string private BASE_URI = "ipfs://";
    uint256 public MAX_TOKENS = 10000;
    uint256 public TOKEN_PRICE = 50000000000000000;
    uint256 public REROLL_PRICE = 25000000000000000;
    uint256 public PRESALE_TOKEN_PRICE = 30000000000000000;
    uint public MAX_TOKENS_PER_ORDER = 10;
    uint public MAX_TOKENS_PER_WALLET = 50;
    uint256 public MAX_GAS_PRICE = 100000000000;
    bool public ON_SALE = false;                        
    bool public REROLL = false;  
    bool public ON_PRESALE = false;
    uint256 public MAX_TOKENS_IN_PRESALE = 1;
    bool public ON_PUBLIC_PRESALE = false;
    mapping(address => bool) public presaleWhitelist;    
    
    event Reroll(address indexed roller, uint256 indexed tokenId);                  

    constructor(address _proxyRegistryAddress) ERC721("Elementa", "ELEM") {
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    function changeTokenURI(uint256 tokenId, string memory _tokenURI) external onlyOwner {
        _setTokenURI(tokenId, _tokenURI);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
            require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
            _tokenURIs[tokenId] = _tokenURI;
    }

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

    function reserveTokens(uint256 quantity) external onlyOwner {
        for(uint i = 0; i < quantity; i++) {
            uint mintIndex = totalSupply();
            if (mintIndex < MAX_TOKENS) {
                _safeMint(msg.sender, mintIndex);
            }
        }
    }

    function airdropTokens(uint256 quantity, address userAddress) external onlyOwner {
        for(uint i = 0; i < quantity; i++) {
            uint mintIndex = totalSupply();
            if (mintIndex < MAX_TOKENS) {
                _safeMint(userAddress, mintIndex);
            }
        }
    }

    function mintToken(uint numberOfTokens) external payable  {
        require(totalSupply().add(numberOfTokens) <= MAX_TOKENS, "Sorry, we don't have enough tokens to fulfil your order.");
        require(ON_SALE, "These tokens are not on sale yet, nice try.");
        require(numberOfTokens <= MAX_TOKENS_PER_ORDER, "Tried to buy too many in one go.");
        require(numberOfTokens > 0, "You cannot mint 0 items.");
        require(balanceOf(msg.sender).add(numberOfTokens) <= MAX_TOKENS_PER_WALLET, "Tried to mint more than allowed per wallet");
        require(tx.gasprice <= MAX_GAS_PRICE, "Whoops, you tried to cause a gas war, no thanks!");
        require(TOKEN_PRICE.mul(numberOfTokens) <= msg.value, 'Not enough Ethereum sent to buy that many');
        for(uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = totalSupply();
            if (totalSupply() < MAX_TOKENS) {
                _safeMint(msg.sender, mintIndex);
            }
        }
    }

    function mintPresaleTokenPrivate(uint numberOfTokens) external payable  {
        require(ON_PRESALE, "These tokens are not on presale yet, nice try.");
        require(presaleWhitelist[msg.sender], "Not in whitelist");
        require(numberOfTokens <= MAX_TOKENS_IN_PRESALE, "Tried to buy too many in one go.");
        require(balanceOf(msg.sender).add(numberOfTokens) <= MAX_TOKENS_IN_PRESALE, "No more allowed in presale");
        require(PRESALE_TOKEN_PRICE <= msg.value, 'Not enough Ethereum sent to buy that many');
        uint mintIndex = totalSupply();
        _safeMint(msg.sender, mintIndex);
    }

    function mintPresaleTokenPublic(uint numberOfTokens) external payable  {
        require(ON_PUBLIC_PRESALE, "These tokens are not on presale yet, nice try.");
        require(numberOfTokens <= MAX_TOKENS_IN_PRESALE, "Tried to buy too many in one go.");
        require(balanceOf(msg.sender).add(numberOfTokens) <= MAX_TOKENS_IN_PRESALE, "No more allowed in presale");
        require(PRESALE_TOKEN_PRICE <= msg.value, 'Not enough Ethereum sent to buy that many');
        uint mintIndex = totalSupply();
        _safeMint(msg.sender, mintIndex);
    }

    function rerollToken(uint256 tokenId) external payable  {
        require(REROLL, "Rerolling is not available");
        require(ownerOf(tokenId) == msg.sender, "You do not own this token");
        require(msg.value >= REROLL_PRICE, 'Not enough Ethereum to reroll');
        //_burn(tokenId);
        //uint mintIndex = totalSupply();
        //_safeMint(msg.sender, mintIndex);
        emit Reroll(msg.sender, tokenId);
    }

    function createWhitelist(address[] calldata whitelist) external onlyOwner {
        for(uint i = 0; i < whitelist.length; i++) {
            presaleWhitelist[whitelist[i]] = true;
        }
    }
    function removeFromWhitelist(address walletAddress) external onlyOwner {
        delete presaleWhitelist[walletAddress];
    }

    function startPublicPreSale() external onlyOwner {
        ON_PUBLIC_PRESALE = true;
    }
    function stopPublicPreSale() external onlyOwner {
        ON_PUBLIC_PRESALE = false;
    }
    function startPreSale() external onlyOwner {
        ON_PRESALE = true;
    }
    function stopPreSale() external onlyOwner {
        ON_PRESALE = false;
    }
    function startSale() external onlyOwner {
        ON_SALE = true;
    }
    function stopSale() external onlyOwner {
        ON_SALE = false;
    }
    function enableReroll() external onlyOwner {
        REROLL = true;
    }
    function disableReroll() external onlyOwner {
        REROLL = false;
    }
    function setPresaleLimit(uint256 quantity) external onlyOwner {
        MAX_TOKENS_IN_PRESALE = quantity;
    }
    function setMaxTokensPerOrder(uint256 quantity) external onlyOwner {
        MAX_TOKENS_PER_ORDER = quantity;
    }
    function setMaxTokensPerWallet(uint256 quantity) external onlyOwner {
        MAX_TOKENS_PER_WALLET = quantity;
    }
    function setPresaleTokenPrice(uint256 price) external onlyOwner {
        PRESALE_TOKEN_PRICE = price;
    }
    function setTokenPrice(uint256 price) external onlyOwner {
        TOKEN_PRICE = price;
    }
    function setRerollPrice(uint256 price) external onlyOwner {
        REROLL_PRICE = price;
    }
    function setMaxTokens(uint256 quantity) external onlyOwner {
        MAX_TOKENS = quantity;
    }
    function setMaxGasPrice(uint256 price) external onlyOwner {
        MAX_GAS_PRICE = price;
    }
    
    function setBaseURI(string memory baseURI) external onlyOwner() {
        BASE_URI = baseURI;
    }
    
    function _baseURI() internal view override returns (string memory) {
        return BASE_URI;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
            require(_exists(tokenId), "Token does not exist");

            string memory _tokenURI = _tokenURIs[tokenId];
            string memory base = _baseURI();
            
            if (bytes(base).length == 0) {
                return _tokenURI;
            }
            if (bytes(_tokenURI).length > 0) {
                return string(abi.encodePacked(base, _tokenURI));
            }
            return string(abi.encodePacked(base, tokenId.toString()));
    }
    
    function isApprovedForAll(address owner, address operator)
        override
        public
        view
        returns (bool)
    {
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"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":"roller","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Reroll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_GAS_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS_IN_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS_PER_ORDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ON_PRESALE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ON_PUBLIC_PRESALE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ON_SALE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REROLL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REROLL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"changeTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whitelist","type":"address[]"}],"name":"createWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableReroll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableReroll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPresaleTokenPrivate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPresaleTokenPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"rerollToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMaxGasPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxTokensPerOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setPresaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPresaleTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setRerollPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPublicPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526007608081905266697066733a2f2f60c81b60a09081526200002a91600d91906200019f565b50612710600e5566b1a2bc2ec50000600f556658d15e17628000601055666a94d74f430000601155600a601255603260135564174876e8006014556015805462ffffff1916905560016016556017805460ff191690553480156200008d57600080fd5b50604051620033f7380380620033f7833981016040819052620000b09162000245565b6040805180820182526008815267456c656d656e746160c01b602080830191825283518085019094526004845263454c454d60e01b908401528151919291620000fc916000916200019f565b508051620001129060019060208401906200019f565b5050506000620001276200019b60201b60201c565b600a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b80546001600160a01b0319166001600160a01b0392909216919091179055620002b4565b3390565b828054620001ad9062000277565b90600052602060002090601f016020900481019282620001d157600085556200021c565b82601f10620001ec57805160ff19168380011785556200021c565b828001600101855582156200021c579182015b828111156200021c578251825591602001919060010190620001ff565b506200022a9291506200022e565b5090565b5b808211156200022a57600081556001016200022f565b6000602082840312156200025857600080fd5b81516001600160a01b03811681146200027057600080fd5b9392505050565b600181811c908216806200028c57607f821691505b60208210811415620002ae57634e487b7160e01b600052602260045260246000fd5b50919050565b61313380620002c46000396000f3fe60806040526004361061038c5760003560e01c80638ab1d681116101dc578063c87b56dd11610102578063e985e9c5116100a0578063f30a48ee1161006f578063f30a48ee146109c7578063f47c84c5146109da578063f489e496146109f0578063f8fb336614610a1057600080fd5b8063e985e9c514610944578063eb8835ab14610964578063ee33475414610994578063f2fde38b146109a757600080fd5b8063d2d8cb67116100dc578063d2d8cb67146108e3578063d2fa635e146108f9578063e36b0b3714610919578063e3bbb4f11461092e57600080fd5b8063c87b56dd1461088d578063d031370b146108ad578063d1bdb1d1146108cd57600080fd5b8063aac5d69f1161017a578063bf910c1111610149578063bf910c111461082b578063c45aeefa1461084b578063c634d03214610865578063c6520e411461087857600080fd5b8063aac5d69f146107c0578063b46a6768146107e0578063b66a0e5d146107f6578063b88d4fde1461080b57600080fd5b806395d89b41116101b657806395d89b41146107555780639f51758e1461076a578063a22cb46514610780578063aa7f8141146107a057600080fd5b80638ab1d681146106f85780638da5cb5b146107185780638f97693c1461073657600080fd5b80634f6ccce7116102c15780636a61e5fc1161025f5780637a01e6e31161022e5780637a01e6e3146106825780637fb3a9a2146106a25780637fd255f1146106c2578063866f87a6146106e257600080fd5b80636a61e5fc1461061757806370a0823114610637578063715018a61461065757806375528e0a1461066c57600080fd5b806355f804b31161029b57806355f804b3146105af5780635c98800d146105cf5780635fd8c710146105e25780636352211e146105f757600080fd5b80634f6ccce71461056557806351ffabdc1461058557806355dd574c1461059a57600080fd5b806323b872dd1161032e5780633326194d116103085780633326194d146104fb5780633dd16f461461051057806342842e0e146105305780634c400d221461055057600080fd5b806323b872dd1461049b578063275ac837146104bb5780632f745c59146104db57600080fd5b8063095ea7b31161036a578063095ea7b31461042057806311e776fe1461044257806318160ddd1461046257806321cadc691461048157600080fd5b806301ffc9a71461039157806306fdde03146103c6578063081812fc146103e8575b600080fd5b34801561039d57600080fd5b506103b16103ac366004612c3e565b610a25565b60405190151581526020015b60405180910390f35b3480156103d257600080fd5b506103db610a50565b6040516103bd9190612de7565b3480156103f457600080fd5b50610408610403366004612cca565b610ae2565b6040516001600160a01b0390911681526020016103bd565b34801561042c57600080fd5b5061044061043b366004612b9d565b610b7c565b005b34801561044e57600080fd5b5061044061045d366004612cca565b610c92565b34801561046e57600080fd5b506008545b6040519081526020016103bd565b34801561048d57600080fd5b506015546103b19060ff1681565b3480156104a757600080fd5b506104406104b6366004612aa9565b610cc1565b3480156104c757600080fd5b506015546103b19062010000900460ff1681565b3480156104e757600080fd5b506104736104f6366004612b9d565b610cf2565b34801561050757600080fd5b50610440610d88565b34801561051c57600080fd5b5061044061052b366004612bc9565b610dbf565b34801561053c57600080fd5b5061044061054b366004612aa9565b610e5b565b34801561055c57600080fd5b50610440610e76565b34801561057157600080fd5b50610473610580366004612cca565b610eb1565b34801561059157600080fd5b50610440610f44565b3480156105a657600080fd5b50610440610f7a565b3480156105bb57600080fd5b506104406105ca366004612c95565b610fb7565b6104406105dd366004612cca565b610ff8565b3480156105ee57600080fd5b50610440611161565b34801561060357600080fd5b50610408610612366004612cca565b6111ba565b34801561062357600080fd5b50610440610632366004612cca565b611231565b34801561064357600080fd5b50610473610652366004612a53565b611260565b34801561066357600080fd5b506104406112e7565b34801561067857600080fd5b5061047360125481565b34801561068e57600080fd5b5061044061069d366004612cca565b61135b565b3480156106ae57600080fd5b506104406106bd366004612d08565b61138a565b3480156106ce57600080fd5b506104406106dd366004612cca565b6113be565b3480156106ee57600080fd5b5061047360165481565b34801561070457600080fd5b50610440610713366004612a53565b6113ed565b34801561072457600080fd5b50600a546001600160a01b0316610408565b34801561074257600080fd5b506015546103b190610100900460ff1681565b34801561076157600080fd5b506103db611438565b34801561077657600080fd5b5061047360105481565b34801561078c57600080fd5b5061044061079b366004612b6a565b611447565b3480156107ac57600080fd5b506104406107bb366004612ce3565b61150c565b3480156107cc57600080fd5b506104406107db366004612cca565b611575565b3480156107ec57600080fd5b5061047360115481565b34801561080257600080fd5b506104406115a4565b34801561081757600080fd5b50610440610826366004612aea565b6115dd565b34801561083757600080fd5b50610440610846366004612cca565b611615565b34801561085757600080fd5b506017546103b19060ff1681565b610440610873366004612cca565b611644565b34801561088457600080fd5b50610440611920565b34801561089957600080fd5b506103db6108a8366004612cca565b611959565b3480156108b957600080fd5b506104406108c8366004612cca565b611aba565b3480156108d957600080fd5b5061047360135481565b3480156108ef57600080fd5b50610473600f5481565b34801561090557600080fd5b50610440610914366004612cca565b611b23565b34801561092557600080fd5b50610440611b52565b34801561093a57600080fd5b5061047360145481565b34801561095057600080fd5b506103b161095f366004612a70565b611b88565b34801561097057600080fd5b506103b161097f366004612a53565b60186020526000908152604090205460ff1681565b6104406109a2366004612cca565b611c58565b3480156109b357600080fd5b506104406109c2366004612a53565b611d91565b6104406109d5366004612cca565b611e7c565b3480156109e657600080fd5b50610473600e5481565b3480156109fc57600080fd5b50610440610a0b366004612cca565b611e9e565b348015610a1c57600080fd5b50610440611ecd565b60006001600160e01b0319821663780e9d6360e01b1480610a4a5750610a4a82611f05565b92915050565b606060008054610a5f90612ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b90612ff7565b8015610ad85780601f10610aad57610100808354040283529160200191610ad8565b820191906000526020600020905b815481529060010190602001808311610abb57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b605760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610b87826111ba565b9050806001600160a01b0316836001600160a01b03161415610bf55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b57565b336001600160a01b0382161480610c115750610c118133611b88565b610c835760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b57565b610c8d8383611f55565b505050565b600a546001600160a01b03163314610cbc5760405162461bcd60e51b8152600401610b5790612e9a565b600e55565b610ccb3382611fc3565b610ce75760405162461bcd60e51b8152600401610b5790612ecf565b610c8d838383612092565b6000610cfd83611260565b8210610d5f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610b57565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610db25760405162461bcd60e51b8152600401610b5790612e9a565b6015805461ff0019169055565b600a546001600160a01b03163314610de95760405162461bcd60e51b8152600401610b5790612e9a565b60005b81811015610c8d57600160186000858585818110610e0c57610e0c6130a3565b9050602002016020810190610e219190612a53565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610e5381613032565b915050610dec565b610c8d838383604051806020016040528060008152506115dd565b600a546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610b5790612e9a565b6015805461ff001916610100179055565b6000610ebc60085490565b8210610f1f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610b57565b60088281548110610f3257610f326130a3565b90600052602060002001549050919050565b600a546001600160a01b03163314610f6e5760405162461bcd60e51b8152600401610b5790612e9a565b6017805460ff19169055565b600a546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b5790612e9a565b6015805462ff0000191662010000179055565b600a546001600160a01b03163314610fe15760405162461bcd60e51b8152600401610b5790612e9a565b8051610ff490600d906020840190612924565b5050565b60155462010000900460ff166110205760405162461bcd60e51b8152600401610b5790612dfa565b3360009081526018602052604090205460ff166110725760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b6044820152606401610b57565b6016548111156110c45760405162461bcd60e51b815260206004820181905260248201527f547269656420746f2062757920746f6f206d616e7920696e206f6e6520676f2e6044820152606401610b57565b6016546110da826110d433611260565b9061223d565b11156111285760405162461bcd60e51b815260206004820152601a60248201527f4e6f206d6f726520616c6c6f77656420696e2070726573616c650000000000006044820152606401610b57565b34601154111561114a5760405162461bcd60e51b8152600401610b5790612f20565b600061115560085490565b9050610ff43382612250565b600a546001600160a01b0316331461118b5760405162461bcd60e51b8152600401610b5790612e9a565b6040514790339082156108fc029083906000818181858888f19350505050158015610ff4573d6000803e3d6000fd5b6000818152600260205260408120546001600160a01b031680610a4a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610b57565b600a546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b5790612e9a565b600f55565b60006001600160a01b0382166112cb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610b57565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146113115760405162461bcd60e51b8152600401610b5790612e9a565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b600a546001600160a01b031633146113855760405162461bcd60e51b8152600401610b5790612e9a565b601155565b600a546001600160a01b031633146113b45760405162461bcd60e51b8152600401610b5790612e9a565b610ff4828261226a565b600a546001600160a01b031633146113e85760405162461bcd60e51b8152600401610b5790612e9a565b601655565b600a546001600160a01b031633146114175760405162461bcd60e51b8152600401610b5790612e9a565b6001600160a01b03166000908152601860205260409020805460ff19169055565b606060018054610a5f90612ff7565b6001600160a01b0382163314156114a05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b57565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115365760405162461bcd60e51b8152600401610b5790612e9a565b60005b82811015610c8d57600061154c60085490565b9050600e54811015611562576115628382612250565b508061156d81613032565b915050611539565b600a546001600160a01b0316331461159f5760405162461bcd60e51b8152600401610b5790612e9a565b601355565b600a546001600160a01b031633146115ce5760405162461bcd60e51b8152600401610b5790612e9a565b6015805460ff19166001179055565b6115e73383611fc3565b6116035760405162461bcd60e51b8152600401610b5790612ecf565b61160f84848484612302565b50505050565b600a546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b5790612e9a565b601255565b600e54611654826110d460085490565b11156116c85760405162461bcd60e51b815260206004820152603860248201527f536f7272792c20776520646f6e2774206861766520656e6f75676820746f6b6560448201527f6e7320746f2066756c66696c20796f7572206f726465722e00000000000000006064820152608401610b57565b60155460ff1661172e5760405162461bcd60e51b815260206004820152602b60248201527f546865736520746f6b656e7320617265206e6f74206f6e2073616c652079657460448201526a16103734b1b2903a393c9760a91b6064820152608401610b57565b6012548111156117805760405162461bcd60e51b815260206004820181905260248201527f547269656420746f2062757920746f6f206d616e7920696e206f6e6520676f2e6044820152606401610b57565b600081116117d05760405162461bcd60e51b815260206004820152601860248201527f596f752063616e6e6f74206d696e742030206974656d732e00000000000000006044820152606401610b57565b6013546117e0826110d433611260565b11156118415760405162461bcd60e51b815260206004820152602a60248201527f547269656420746f206d696e74206d6f7265207468616e20616c6c6f776564206044820152691c195c881dd85b1b195d60b21b6064820152608401610b57565b6014543a11156118ac5760405162461bcd60e51b815260206004820152603060248201527f57686f6f70732c20796f7520747269656420746f20636175736520612067617360448201526f207761722c206e6f207468616e6b732160801b6064820152608401610b57565b600f5434906118bb9083612335565b11156118d95760405162461bcd60e51b8152600401610b5790612f20565b60005b81811015610ff45760006118ef60085490565b9050600e546118fd60085490565b101561190d5761190d3382612250565b508061191881613032565b9150506118dc565b600a546001600160a01b0316331461194a5760405162461bcd60e51b8152600401610b5790612e9a565b6017805460ff19166001179055565b6000818152600260205260409020546060906001600160a01b03166119b75760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606401610b57565b6000828152600c6020526040812080546119d090612ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546119fc90612ff7565b8015611a495780601f10611a1e57610100808354040283529160200191611a49565b820191906000526020600020905b815481529060010190602001808311611a2c57829003601f168201915b505050505090506000611a5a612341565b9050805160001415611a6d575092915050565b815115611a9f578082604051602001611a87929190612d7b565b60405160208183030381529060405292505050919050565b80611aa985612350565b604051602001611a87929190612d7b565b600a546001600160a01b03163314611ae45760405162461bcd60e51b8152600401610b5790612e9a565b60005b81811015610ff4576000611afa60085490565b9050600e54811015611b1057611b103382612250565b5080611b1b81613032565b915050611ae7565b600a546001600160a01b03163314611b4d5760405162461bcd60e51b8152600401610b5790612e9a565b601455565b600a546001600160a01b03163314611b7c5760405162461bcd60e51b8152600401610b5790612e9a565b6015805460ff19169055565b600b5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b158015611bd557600080fd5b505afa158015611be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0d9190612c78565b6001600160a01b03161415611c26576001915050610a4a565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b601554610100900460ff16611caf5760405162461bcd60e51b815260206004820152601a60248201527f5265726f6c6c696e67206973206e6f7420617661696c61626c650000000000006044820152606401610b57565b33611cb9826111ba565b6001600160a01b031614611d0f5760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000006044820152606401610b57565b601054341015611d615760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820457468657265756d20746f207265726f6c6c0000006044820152606401610b57565b604051819033907fa38a7485aa4effbf6b0f38a5fd2ba9cbbb2199bc981ce8faf65324afca5b6fe690600090a350565b600a546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610b5790612e9a565b6001600160a01b038116611e205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b57565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60175460ff166110725760405162461bcd60e51b8152600401610b5790612dfa565b600a546001600160a01b03163314611ec85760405162461bcd60e51b8152600401610b5790612e9a565b601055565b600a546001600160a01b03163314611ef75760405162461bcd60e51b8152600401610b5790612e9a565b6015805462ff000019169055565b60006001600160e01b031982166380ac58cd60e01b1480611f3657506001600160e01b03198216635b5e139f60e01b145b80610a4a57506301ffc9a760e01b6001600160e01b0319831614610a4a565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f8a826111ba565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661203c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b57565b6000612047836111ba565b9050806001600160a01b0316846001600160a01b031614806120825750836001600160a01b031661207784610ae2565b6001600160a01b0316145b80611c505750611c508185611b88565b826001600160a01b03166120a5826111ba565b6001600160a01b03161461210d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610b57565b6001600160a01b03821661216f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b57565b61217a83838361244e565b612185600082611f55565b6001600160a01b03831660009081526003602052604081208054600192906121ae908490612fb4565b90915550506001600160a01b03821660009081526003602052604081208054600192906121dc908490612f69565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006122498284612f69565b9392505050565b610ff4828260405180602001604052806000815250612506565b6000828152600260205260409020546001600160a01b03166122e35760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b57565b6000828152600c602090815260409091208251610c8d92840190612924565b61230d848484612092565b61231984848484612539565b61160f5760405162461bcd60e51b8152600401610b5790612e48565b60006122498284612f95565b6060600d8054610a5f90612ff7565b6060816123745750506040805180820190915260018152600360fc1b602082015290565b8160005b811561239e578061238881613032565b91506123979050600a83612f81565b9150612378565b60008167ffffffffffffffff8111156123b9576123b96130b9565b6040519080825280601f01601f1916602001820160405280156123e3576020820181803683370190505b5090505b8415611c50576123f8600183612fb4565b9150612405600a8661304d565b612410906030612f69565b60f81b818381518110612425576124256130a3565b60200101906001600160f81b031916908160001a905350612447600a86612f81565b94506123e7565b6001600160a01b0383166124a9576124a481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6124cc565b816001600160a01b0316836001600160a01b0316146124cc576124cc8382612646565b6001600160a01b0382166124e357610c8d816126e3565b826001600160a01b0316826001600160a01b031614610c8d57610c8d8282612792565b61251083836127d6565b61251d6000848484612539565b610c8d5760405162461bcd60e51b8152600401610b5790612e48565b60006001600160a01b0384163b1561263b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061257d903390899088908890600401612daa565b602060405180830381600087803b15801561259757600080fd5b505af19250505080156125c7575060408051601f3d908101601f191682019092526125c491810190612c5b565b60015b612621573d8080156125f5576040519150601f19603f3d011682016040523d82523d6000602084013e6125fa565b606091505b5080516126195760405162461bcd60e51b8152600401610b5790612e48565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c50565b506001949350505050565b6000600161265384611260565b61265d9190612fb4565b6000838152600760205260409020549091508082146126b0576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126f590600190612fb4565b6000838152600960205260408120546008805493945090928490811061271d5761271d6130a3565b90600052602060002001549050806008838154811061273e5761273e6130a3565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806127765761277661308d565b6001900381819060005260206000200160009055905550505050565b600061279d83611260565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661282c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b57565b6000818152600260205260409020546001600160a01b0316156128915760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b57565b61289d6000838361244e565b6001600160a01b03821660009081526003602052604081208054600192906128c6908490612f69565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461293090612ff7565b90600052602060002090601f0160209004810192826129525760008555612998565b82601f1061296b57805160ff1916838001178555612998565b82800160010185558215612998579182015b8281111561299857825182559160200191906001019061297d565b506129a49291506129a8565b5090565b5b808211156129a457600081556001016129a9565b600067ffffffffffffffff808411156129d8576129d86130b9565b604051601f8501601f19908116603f01168101908282118183101715612a0057612a006130b9565b81604052809350858152868686011115612a1957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612a4457600080fd5b612249838335602085016129bd565b600060208284031215612a6557600080fd5b8135612249816130cf565b60008060408385031215612a8357600080fd5b8235612a8e816130cf565b91506020830135612a9e816130cf565b809150509250929050565b600080600060608486031215612abe57600080fd5b8335612ac9816130cf565b92506020840135612ad9816130cf565b929592945050506040919091013590565b60008060008060808587031215612b0057600080fd5b8435612b0b816130cf565b93506020850135612b1b816130cf565b925060408501359150606085013567ffffffffffffffff811115612b3e57600080fd5b8501601f81018713612b4f57600080fd5b612b5e878235602084016129bd565b91505092959194509250565b60008060408385031215612b7d57600080fd5b8235612b88816130cf565b915060208301358015158114612a9e57600080fd5b60008060408385031215612bb057600080fd5b8235612bbb816130cf565b946020939093013593505050565b60008060208385031215612bdc57600080fd5b823567ffffffffffffffff80821115612bf457600080fd5b818501915085601f830112612c0857600080fd5b813581811115612c1757600080fd5b8660208260051b8501011115612c2c57600080fd5b60209290920196919550909350505050565b600060208284031215612c5057600080fd5b8135612249816130e7565b600060208284031215612c6d57600080fd5b8151612249816130e7565b600060208284031215612c8a57600080fd5b8151612249816130cf565b600060208284031215612ca757600080fd5b813567ffffffffffffffff811115612cbe57600080fd5b611c5084828501612a33565b600060208284031215612cdc57600080fd5b5035919050565b60008060408385031215612cf657600080fd5b823591506020830135612a9e816130cf565b60008060408385031215612d1b57600080fd5b82359150602083013567ffffffffffffffff811115612d3957600080fd5b612d4585828601612a33565b9150509250929050565b60008151808452612d67816020860160208601612fcb565b601f01601f19169290920160200192915050565b60008351612d8d818460208801612fcb565b835190830190612da1818360208801612fcb565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ddd90830184612d4f565b9695505050505050565b6020815260006122496020830184612d4f565b6020808252602e908201527f546865736520746f6b656e7320617265206e6f74206f6e2070726573616c652060408201526d3cb2ba16103734b1b2903a393c9760911b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526029908201527f4e6f7420656e6f75676820457468657265756d2073656e7420746f206275792060408201526874686174206d616e7960b81b606082015260800190565b60008219821115612f7c57612f7c613061565b500190565b600082612f9057612f90613077565b500490565b6000816000190483118215151615612faf57612faf613061565b500290565b600082821015612fc657612fc6613061565b500390565b60005b83811015612fe6578181015183820152602001612fce565b8381111561160f5750506000910152565b600181811c9082168061300b57607f821691505b6020821081141561302c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561304657613046613061565b5060010190565b60008261305c5761305c613077565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146130e457600080fd5b50565b6001600160e01b0319811681146130e457600080fdfea2646970667358221220ca898856be172abab6259a850adc6cc9b8c7750e02b5020bed61c9aa560fa25364736f6c63430008070033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x60806040526004361061038c5760003560e01c80638ab1d681116101dc578063c87b56dd11610102578063e985e9c5116100a0578063f30a48ee1161006f578063f30a48ee146109c7578063f47c84c5146109da578063f489e496146109f0578063f8fb336614610a1057600080fd5b8063e985e9c514610944578063eb8835ab14610964578063ee33475414610994578063f2fde38b146109a757600080fd5b8063d2d8cb67116100dc578063d2d8cb67146108e3578063d2fa635e146108f9578063e36b0b3714610919578063e3bbb4f11461092e57600080fd5b8063c87b56dd1461088d578063d031370b146108ad578063d1bdb1d1146108cd57600080fd5b8063aac5d69f1161017a578063bf910c1111610149578063bf910c111461082b578063c45aeefa1461084b578063c634d03214610865578063c6520e411461087857600080fd5b8063aac5d69f146107c0578063b46a6768146107e0578063b66a0e5d146107f6578063b88d4fde1461080b57600080fd5b806395d89b41116101b657806395d89b41146107555780639f51758e1461076a578063a22cb46514610780578063aa7f8141146107a057600080fd5b80638ab1d681146106f85780638da5cb5b146107185780638f97693c1461073657600080fd5b80634f6ccce7116102c15780636a61e5fc1161025f5780637a01e6e31161022e5780637a01e6e3146106825780637fb3a9a2146106a25780637fd255f1146106c2578063866f87a6146106e257600080fd5b80636a61e5fc1461061757806370a0823114610637578063715018a61461065757806375528e0a1461066c57600080fd5b806355f804b31161029b57806355f804b3146105af5780635c98800d146105cf5780635fd8c710146105e25780636352211e146105f757600080fd5b80634f6ccce71461056557806351ffabdc1461058557806355dd574c1461059a57600080fd5b806323b872dd1161032e5780633326194d116103085780633326194d146104fb5780633dd16f461461051057806342842e0e146105305780634c400d221461055057600080fd5b806323b872dd1461049b578063275ac837146104bb5780632f745c59146104db57600080fd5b8063095ea7b31161036a578063095ea7b31461042057806311e776fe1461044257806318160ddd1461046257806321cadc691461048157600080fd5b806301ffc9a71461039157806306fdde03146103c6578063081812fc146103e8575b600080fd5b34801561039d57600080fd5b506103b16103ac366004612c3e565b610a25565b60405190151581526020015b60405180910390f35b3480156103d257600080fd5b506103db610a50565b6040516103bd9190612de7565b3480156103f457600080fd5b50610408610403366004612cca565b610ae2565b6040516001600160a01b0390911681526020016103bd565b34801561042c57600080fd5b5061044061043b366004612b9d565b610b7c565b005b34801561044e57600080fd5b5061044061045d366004612cca565b610c92565b34801561046e57600080fd5b506008545b6040519081526020016103bd565b34801561048d57600080fd5b506015546103b19060ff1681565b3480156104a757600080fd5b506104406104b6366004612aa9565b610cc1565b3480156104c757600080fd5b506015546103b19062010000900460ff1681565b3480156104e757600080fd5b506104736104f6366004612b9d565b610cf2565b34801561050757600080fd5b50610440610d88565b34801561051c57600080fd5b5061044061052b366004612bc9565b610dbf565b34801561053c57600080fd5b5061044061054b366004612aa9565b610e5b565b34801561055c57600080fd5b50610440610e76565b34801561057157600080fd5b50610473610580366004612cca565b610eb1565b34801561059157600080fd5b50610440610f44565b3480156105a657600080fd5b50610440610f7a565b3480156105bb57600080fd5b506104406105ca366004612c95565b610fb7565b6104406105dd366004612cca565b610ff8565b3480156105ee57600080fd5b50610440611161565b34801561060357600080fd5b50610408610612366004612cca565b6111ba565b34801561062357600080fd5b50610440610632366004612cca565b611231565b34801561064357600080fd5b50610473610652366004612a53565b611260565b34801561066357600080fd5b506104406112e7565b34801561067857600080fd5b5061047360125481565b34801561068e57600080fd5b5061044061069d366004612cca565b61135b565b3480156106ae57600080fd5b506104406106bd366004612d08565b61138a565b3480156106ce57600080fd5b506104406106dd366004612cca565b6113be565b3480156106ee57600080fd5b5061047360165481565b34801561070457600080fd5b50610440610713366004612a53565b6113ed565b34801561072457600080fd5b50600a546001600160a01b0316610408565b34801561074257600080fd5b506015546103b190610100900460ff1681565b34801561076157600080fd5b506103db611438565b34801561077657600080fd5b5061047360105481565b34801561078c57600080fd5b5061044061079b366004612b6a565b611447565b3480156107ac57600080fd5b506104406107bb366004612ce3565b61150c565b3480156107cc57600080fd5b506104406107db366004612cca565b611575565b3480156107ec57600080fd5b5061047360115481565b34801561080257600080fd5b506104406115a4565b34801561081757600080fd5b50610440610826366004612aea565b6115dd565b34801561083757600080fd5b50610440610846366004612cca565b611615565b34801561085757600080fd5b506017546103b19060ff1681565b610440610873366004612cca565b611644565b34801561088457600080fd5b50610440611920565b34801561089957600080fd5b506103db6108a8366004612cca565b611959565b3480156108b957600080fd5b506104406108c8366004612cca565b611aba565b3480156108d957600080fd5b5061047360135481565b3480156108ef57600080fd5b50610473600f5481565b34801561090557600080fd5b50610440610914366004612cca565b611b23565b34801561092557600080fd5b50610440611b52565b34801561093a57600080fd5b5061047360145481565b34801561095057600080fd5b506103b161095f366004612a70565b611b88565b34801561097057600080fd5b506103b161097f366004612a53565b60186020526000908152604090205460ff1681565b6104406109a2366004612cca565b611c58565b3480156109b357600080fd5b506104406109c2366004612a53565b611d91565b6104406109d5366004612cca565b611e7c565b3480156109e657600080fd5b50610473600e5481565b3480156109fc57600080fd5b50610440610a0b366004612cca565b611e9e565b348015610a1c57600080fd5b50610440611ecd565b60006001600160e01b0319821663780e9d6360e01b1480610a4a5750610a4a82611f05565b92915050565b606060008054610a5f90612ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b90612ff7565b8015610ad85780601f10610aad57610100808354040283529160200191610ad8565b820191906000526020600020905b815481529060010190602001808311610abb57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b605760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610b87826111ba565b9050806001600160a01b0316836001600160a01b03161415610bf55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b57565b336001600160a01b0382161480610c115750610c118133611b88565b610c835760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b57565b610c8d8383611f55565b505050565b600a546001600160a01b03163314610cbc5760405162461bcd60e51b8152600401610b5790612e9a565b600e55565b610ccb3382611fc3565b610ce75760405162461bcd60e51b8152600401610b5790612ecf565b610c8d838383612092565b6000610cfd83611260565b8210610d5f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610b57565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610db25760405162461bcd60e51b8152600401610b5790612e9a565b6015805461ff0019169055565b600a546001600160a01b03163314610de95760405162461bcd60e51b8152600401610b5790612e9a565b60005b81811015610c8d57600160186000858585818110610e0c57610e0c6130a3565b9050602002016020810190610e219190612a53565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610e5381613032565b915050610dec565b610c8d838383604051806020016040528060008152506115dd565b600a546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610b5790612e9a565b6015805461ff001916610100179055565b6000610ebc60085490565b8210610f1f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610b57565b60088281548110610f3257610f326130a3565b90600052602060002001549050919050565b600a546001600160a01b03163314610f6e5760405162461bcd60e51b8152600401610b5790612e9a565b6017805460ff19169055565b600a546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b5790612e9a565b6015805462ff0000191662010000179055565b600a546001600160a01b03163314610fe15760405162461bcd60e51b8152600401610b5790612e9a565b8051610ff490600d906020840190612924565b5050565b60155462010000900460ff166110205760405162461bcd60e51b8152600401610b5790612dfa565b3360009081526018602052604090205460ff166110725760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b6044820152606401610b57565b6016548111156110c45760405162461bcd60e51b815260206004820181905260248201527f547269656420746f2062757920746f6f206d616e7920696e206f6e6520676f2e6044820152606401610b57565b6016546110da826110d433611260565b9061223d565b11156111285760405162461bcd60e51b815260206004820152601a60248201527f4e6f206d6f726520616c6c6f77656420696e2070726573616c650000000000006044820152606401610b57565b34601154111561114a5760405162461bcd60e51b8152600401610b5790612f20565b600061115560085490565b9050610ff43382612250565b600a546001600160a01b0316331461118b5760405162461bcd60e51b8152600401610b5790612e9a565b6040514790339082156108fc029083906000818181858888f19350505050158015610ff4573d6000803e3d6000fd5b6000818152600260205260408120546001600160a01b031680610a4a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610b57565b600a546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b5790612e9a565b600f55565b60006001600160a01b0382166112cb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610b57565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146113115760405162461bcd60e51b8152600401610b5790612e9a565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b600a546001600160a01b031633146113855760405162461bcd60e51b8152600401610b5790612e9a565b601155565b600a546001600160a01b031633146113b45760405162461bcd60e51b8152600401610b5790612e9a565b610ff4828261226a565b600a546001600160a01b031633146113e85760405162461bcd60e51b8152600401610b5790612e9a565b601655565b600a546001600160a01b031633146114175760405162461bcd60e51b8152600401610b5790612e9a565b6001600160a01b03166000908152601860205260409020805460ff19169055565b606060018054610a5f90612ff7565b6001600160a01b0382163314156114a05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b57565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115365760405162461bcd60e51b8152600401610b5790612e9a565b60005b82811015610c8d57600061154c60085490565b9050600e54811015611562576115628382612250565b508061156d81613032565b915050611539565b600a546001600160a01b0316331461159f5760405162461bcd60e51b8152600401610b5790612e9a565b601355565b600a546001600160a01b031633146115ce5760405162461bcd60e51b8152600401610b5790612e9a565b6015805460ff19166001179055565b6115e73383611fc3565b6116035760405162461bcd60e51b8152600401610b5790612ecf565b61160f84848484612302565b50505050565b600a546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b5790612e9a565b601255565b600e54611654826110d460085490565b11156116c85760405162461bcd60e51b815260206004820152603860248201527f536f7272792c20776520646f6e2774206861766520656e6f75676820746f6b6560448201527f6e7320746f2066756c66696c20796f7572206f726465722e00000000000000006064820152608401610b57565b60155460ff1661172e5760405162461bcd60e51b815260206004820152602b60248201527f546865736520746f6b656e7320617265206e6f74206f6e2073616c652079657460448201526a16103734b1b2903a393c9760a91b6064820152608401610b57565b6012548111156117805760405162461bcd60e51b815260206004820181905260248201527f547269656420746f2062757920746f6f206d616e7920696e206f6e6520676f2e6044820152606401610b57565b600081116117d05760405162461bcd60e51b815260206004820152601860248201527f596f752063616e6e6f74206d696e742030206974656d732e00000000000000006044820152606401610b57565b6013546117e0826110d433611260565b11156118415760405162461bcd60e51b815260206004820152602a60248201527f547269656420746f206d696e74206d6f7265207468616e20616c6c6f776564206044820152691c195c881dd85b1b195d60b21b6064820152608401610b57565b6014543a11156118ac5760405162461bcd60e51b815260206004820152603060248201527f57686f6f70732c20796f7520747269656420746f20636175736520612067617360448201526f207761722c206e6f207468616e6b732160801b6064820152608401610b57565b600f5434906118bb9083612335565b11156118d95760405162461bcd60e51b8152600401610b5790612f20565b60005b81811015610ff45760006118ef60085490565b9050600e546118fd60085490565b101561190d5761190d3382612250565b508061191881613032565b9150506118dc565b600a546001600160a01b0316331461194a5760405162461bcd60e51b8152600401610b5790612e9a565b6017805460ff19166001179055565b6000818152600260205260409020546060906001600160a01b03166119b75760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606401610b57565b6000828152600c6020526040812080546119d090612ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546119fc90612ff7565b8015611a495780601f10611a1e57610100808354040283529160200191611a49565b820191906000526020600020905b815481529060010190602001808311611a2c57829003601f168201915b505050505090506000611a5a612341565b9050805160001415611a6d575092915050565b815115611a9f578082604051602001611a87929190612d7b565b60405160208183030381529060405292505050919050565b80611aa985612350565b604051602001611a87929190612d7b565b600a546001600160a01b03163314611ae45760405162461bcd60e51b8152600401610b5790612e9a565b60005b81811015610ff4576000611afa60085490565b9050600e54811015611b1057611b103382612250565b5080611b1b81613032565b915050611ae7565b600a546001600160a01b03163314611b4d5760405162461bcd60e51b8152600401610b5790612e9a565b601455565b600a546001600160a01b03163314611b7c5760405162461bcd60e51b8152600401610b5790612e9a565b6015805460ff19169055565b600b5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b158015611bd557600080fd5b505afa158015611be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0d9190612c78565b6001600160a01b03161415611c26576001915050610a4a565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b601554610100900460ff16611caf5760405162461bcd60e51b815260206004820152601a60248201527f5265726f6c6c696e67206973206e6f7420617661696c61626c650000000000006044820152606401610b57565b33611cb9826111ba565b6001600160a01b031614611d0f5760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000006044820152606401610b57565b601054341015611d615760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820457468657265756d20746f207265726f6c6c0000006044820152606401610b57565b604051819033907fa38a7485aa4effbf6b0f38a5fd2ba9cbbb2199bc981ce8faf65324afca5b6fe690600090a350565b600a546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610b5790612e9a565b6001600160a01b038116611e205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b57565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60175460ff166110725760405162461bcd60e51b8152600401610b5790612dfa565b600a546001600160a01b03163314611ec85760405162461bcd60e51b8152600401610b5790612e9a565b601055565b600a546001600160a01b03163314611ef75760405162461bcd60e51b8152600401610b5790612e9a565b6015805462ff000019169055565b60006001600160e01b031982166380ac58cd60e01b1480611f3657506001600160e01b03198216635b5e139f60e01b145b80610a4a57506301ffc9a760e01b6001600160e01b0319831614610a4a565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f8a826111ba565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661203c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b57565b6000612047836111ba565b9050806001600160a01b0316846001600160a01b031614806120825750836001600160a01b031661207784610ae2565b6001600160a01b0316145b80611c505750611c508185611b88565b826001600160a01b03166120a5826111ba565b6001600160a01b03161461210d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610b57565b6001600160a01b03821661216f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b57565b61217a83838361244e565b612185600082611f55565b6001600160a01b03831660009081526003602052604081208054600192906121ae908490612fb4565b90915550506001600160a01b03821660009081526003602052604081208054600192906121dc908490612f69565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006122498284612f69565b9392505050565b610ff4828260405180602001604052806000815250612506565b6000828152600260205260409020546001600160a01b03166122e35760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b57565b6000828152600c602090815260409091208251610c8d92840190612924565b61230d848484612092565b61231984848484612539565b61160f5760405162461bcd60e51b8152600401610b5790612e48565b60006122498284612f95565b6060600d8054610a5f90612ff7565b6060816123745750506040805180820190915260018152600360fc1b602082015290565b8160005b811561239e578061238881613032565b91506123979050600a83612f81565b9150612378565b60008167ffffffffffffffff8111156123b9576123b96130b9565b6040519080825280601f01601f1916602001820160405280156123e3576020820181803683370190505b5090505b8415611c50576123f8600183612fb4565b9150612405600a8661304d565b612410906030612f69565b60f81b818381518110612425576124256130a3565b60200101906001600160f81b031916908160001a905350612447600a86612f81565b94506123e7565b6001600160a01b0383166124a9576124a481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6124cc565b816001600160a01b0316836001600160a01b0316146124cc576124cc8382612646565b6001600160a01b0382166124e357610c8d816126e3565b826001600160a01b0316826001600160a01b031614610c8d57610c8d8282612792565b61251083836127d6565b61251d6000848484612539565b610c8d5760405162461bcd60e51b8152600401610b5790612e48565b60006001600160a01b0384163b1561263b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061257d903390899088908890600401612daa565b602060405180830381600087803b15801561259757600080fd5b505af19250505080156125c7575060408051601f3d908101601f191682019092526125c491810190612c5b565b60015b612621573d8080156125f5576040519150601f19603f3d011682016040523d82523d6000602084013e6125fa565b606091505b5080516126195760405162461bcd60e51b8152600401610b5790612e48565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c50565b506001949350505050565b6000600161265384611260565b61265d9190612fb4565b6000838152600760205260409020549091508082146126b0576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126f590600190612fb4565b6000838152600960205260408120546008805493945090928490811061271d5761271d6130a3565b90600052602060002001549050806008838154811061273e5761273e6130a3565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806127765761277661308d565b6001900381819060005260206000200160009055905550505050565b600061279d83611260565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661282c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b57565b6000818152600260205260409020546001600160a01b0316156128915760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b57565b61289d6000838361244e565b6001600160a01b03821660009081526003602052604081208054600192906128c6908490612f69565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461293090612ff7565b90600052602060002090601f0160209004810192826129525760008555612998565b82601f1061296b57805160ff1916838001178555612998565b82800160010185558215612998579182015b8281111561299857825182559160200191906001019061297d565b506129a49291506129a8565b5090565b5b808211156129a457600081556001016129a9565b600067ffffffffffffffff808411156129d8576129d86130b9565b604051601f8501601f19908116603f01168101908282118183101715612a0057612a006130b9565b81604052809350858152868686011115612a1957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612a4457600080fd5b612249838335602085016129bd565b600060208284031215612a6557600080fd5b8135612249816130cf565b60008060408385031215612a8357600080fd5b8235612a8e816130cf565b91506020830135612a9e816130cf565b809150509250929050565b600080600060608486031215612abe57600080fd5b8335612ac9816130cf565b92506020840135612ad9816130cf565b929592945050506040919091013590565b60008060008060808587031215612b0057600080fd5b8435612b0b816130cf565b93506020850135612b1b816130cf565b925060408501359150606085013567ffffffffffffffff811115612b3e57600080fd5b8501601f81018713612b4f57600080fd5b612b5e878235602084016129bd565b91505092959194509250565b60008060408385031215612b7d57600080fd5b8235612b88816130cf565b915060208301358015158114612a9e57600080fd5b60008060408385031215612bb057600080fd5b8235612bbb816130cf565b946020939093013593505050565b60008060208385031215612bdc57600080fd5b823567ffffffffffffffff80821115612bf457600080fd5b818501915085601f830112612c0857600080fd5b813581811115612c1757600080fd5b8660208260051b8501011115612c2c57600080fd5b60209290920196919550909350505050565b600060208284031215612c5057600080fd5b8135612249816130e7565b600060208284031215612c6d57600080fd5b8151612249816130e7565b600060208284031215612c8a57600080fd5b8151612249816130cf565b600060208284031215612ca757600080fd5b813567ffffffffffffffff811115612cbe57600080fd5b611c5084828501612a33565b600060208284031215612cdc57600080fd5b5035919050565b60008060408385031215612cf657600080fd5b823591506020830135612a9e816130cf565b60008060408385031215612d1b57600080fd5b82359150602083013567ffffffffffffffff811115612d3957600080fd5b612d4585828601612a33565b9150509250929050565b60008151808452612d67816020860160208601612fcb565b601f01601f19169290920160200192915050565b60008351612d8d818460208801612fcb565b835190830190612da1818360208801612fcb565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ddd90830184612d4f565b9695505050505050565b6020815260006122496020830184612d4f565b6020808252602e908201527f546865736520746f6b656e7320617265206e6f74206f6e2070726573616c652060408201526d3cb2ba16103734b1b2903a393c9760911b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526029908201527f4e6f7420656e6f75676820457468657265756d2073656e7420746f206275792060408201526874686174206d616e7960b81b606082015260800190565b60008219821115612f7c57612f7c613061565b500190565b600082612f9057612f90613077565b500490565b6000816000190483118215151615612faf57612faf613061565b500290565b600082821015612fc657612fc6613061565b500390565b60005b83811015612fe6578181015183820152602001612fce565b8381111561160f5750506000910152565b600181811c9082168061300b57607f821691505b6020821081141561302c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561304657613046613061565b5060010190565b60008261305c5761305c613077565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146130e457600080fd5b50565b6001600160e01b0319811681146130e457600080fdfea2646970667358221220ca898856be172abab6259a850adc6cc9b8c7750e02b5020bed61c9aa560fa25364736f6c63430008070033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1


Deployed Bytecode Sourcemap

21786:8006:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18651:237;;;;;;;;;;-1:-1:-1;18651:237:0;;;;;:::i;:::-;;:::i;:::-;;;7761:14:1;;7754:22;7736:41;;7724:2;7709:18;18651:237:0;;;;;;;;12322:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13407:221::-;;;;;;;;;;-1:-1:-1;13407:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7059:32:1;;;7041:51;;7029:2;7014:18;13407:221:0;6895:203:1;13004:397:0;;;;;;;;;;-1:-1:-1;13004:397:0;;;;;:::i;:::-;;:::i;:::-;;28380:99;;;;;;;;;;-1:-1:-1;28380:99:0;;;;;:::i;:::-;;:::i;19156:113::-;;;;;;;;;;-1:-1:-1;19244:10:0;:17;19156:113;;;20682:25:1;;;20670:2;20655:18;19156:113:0;20536:177:1;22384:27:0;;;;;;;;;;-1:-1:-1;22384:27:0;;;;;;;;14105:305;;;;;;;;;;-1:-1:-1;14105:305:0;;;;;:::i;:::-;;:::i;22477:30::-;;;;;;;;;;-1:-1:-1;22477:30:0;;;;;;;;;;;18894:256;;;;;;;;;;-1:-1:-1;18894:256:0;;;;;:::i;:::-;;:::i;27610:77::-;;;;;;;;;;;;;:::i;26664:199::-;;;;;;;;;;-1:-1:-1;26664:199:0;;;;;:::i;:::-;;:::i;14416:151::-;;;;;;;;;;-1:-1:-1;14416:151:0;;;;;:::i;:::-;;:::i;27529:75::-;;;;;;;;;;;;;:::i;19275:233::-;;;;;;;;;;-1:-1:-1;19275:233:0;;;;;:::i;:::-;;:::i;27103:92::-;;;;;;;;;;;;;:::i;27201:79::-;;;;;;;;;;;;;:::i;28595:101::-;;;;;;;;;;-1:-1:-1;28595:101:0;;;;;:::i;:::-;;:::i;25027:620::-;;;;;;:::i;:::-;;:::i;23274:152::-;;;;;;;;;;;;;:::i;12077:239::-;;;;;;;;;;-1:-1:-1;12077:239:0;;;;;:::i;:::-;;:::i;28176:95::-;;;;;;;;;;-1:-1:-1;28176:95:0;;;;;:::i;:::-;;:::i;11863:208::-;;;;;;;;;;-1:-1:-1;11863:208:0;;;;;:::i;:::-;;:::i;10397:148::-;;;;;;;;;;;;;:::i;22245:37::-;;;;;;;;;;;;;;;;28060:110;;;;;;;;;;-1:-1:-1;28060:110:0;;;;;:::i;:::-;;:::i;22899:136::-;;;;;;;;;;-1:-1:-1;22899:136:0;;;;;:::i;:::-;;:::i;27693:113::-;;;;;;;;;;-1:-1:-1;27693:113:0;;;;;:::i;:::-;;:::i;22514:40::-;;;;;;;;;;;;;;;;26869:128;;;;;;;;;;-1:-1:-1;26869:128:0;;;;;:::i;:::-;;:::i;10174:87::-;;;;;;;;;;-1:-1:-1;10247:6:0;;-1:-1:-1;;;;;10247:6:0;10174:87;;22442:26;;;;;;;;;;-1:-1:-1;22442:26:0;;;;;;;;;;;12428:104;;;;;;;;;;;;;:::i;22130:47::-;;;;;;;;;;;;;;;;13634:295;;;;;;;;;;-1:-1:-1;13634:295:0;;;;;:::i;:::-;;:::i;23721:301::-;;;;;;;;;;-1:-1:-1;23721:301:0;;;;;:::i;:::-;;:::i;27935:119::-;;;;;;;;;;-1:-1:-1;27935:119:0;;;;;:::i;:::-;;:::i;22184:54::-;;;;;;;;;;;;;;;;27371:73;;;;;;;;;;;;;:::i;14573:285::-;;;;;;;;;;-1:-1:-1;14573:285:0;;;;;:::i;:::-;;:::i;27812:117::-;;;;;;;;;;-1:-1:-1;27812:117:0;;;;;:::i;:::-;;:::i;22561:37::-;;;;;;;;;;-1:-1:-1;22561:37:0;;;;;;;;24030:989;;;;;;:::i;:::-;;:::i;27005:92::-;;;;;;;;;;;;;:::i;28817:578::-;;;;;;;;;;-1:-1:-1;28817:578:0;;;;;:::i;:::-;;:::i;23434:279::-;;;;;;;;;;-1:-1:-1;23434:279:0;;;;;:::i;:::-;;:::i;22289:38::-;;;;;;;;;;;;;;;;22077:46;;;;;;;;;;;;;;;;28485:98;;;;;;;;;;-1:-1:-1;28485:98:0;;;;;:::i;:::-;;:::i;27450:73::-;;;;;;;;;;;;;:::i;22334:43::-;;;;;;;;;;;;;;;;29407:382;;;;;;;;;;-1:-1:-1;29407:382:0;;;;;:::i;:::-;;:::i;22605:48::-;;;;;;;;;;-1:-1:-1;22605:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26221:435;;;;;;:::i;:::-;;:::i;10553:244::-;;;;;;;;;;-1:-1:-1;10553:244:0;;;;;:::i;:::-;;:::i;25655:558::-;;;;;;:::i;:::-;;:::i;22037:33::-;;;;;;;;;;;;;;;;28277:97;;;;;;;;;;-1:-1:-1;28277:97:0;;;;;:::i;:::-;;:::i;27286:79::-;;;;;;;;;;;;;:::i;18651:237::-;18753:4;-1:-1:-1;;;;;;18777:50:0;;-1:-1:-1;;;18777:50:0;;:103;;;18844:36;18868:11;18844:23;:36::i;:::-;18770:110;18651:237;-1:-1:-1;;18651:237:0:o;12322:100::-;12376:13;12409:5;12402:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12322:100;:::o;13407:221::-;13483:7;15231:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15231:16:0;13503:73;;;;-1:-1:-1;;;13503:73:0;;16071:2:1;13503:73:0;;;16053:21:1;16110:2;16090:18;;;16083:30;16149:34;16129:18;;;16122:62;-1:-1:-1;;;16200:18:1;;;16193:42;16252:19;;13503:73:0;;;;;;;;;-1:-1:-1;13596:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;13596:24:0;;13407:221::o;13004:397::-;13085:13;13101:23;13116:7;13101:14;:23::i;:::-;13085:39;;13149:5;-1:-1:-1;;;;;13143:11:0;:2;-1:-1:-1;;;;;13143:11:0;;;13135:57;;;;-1:-1:-1;;;13135:57:0;;18023:2:1;13135:57:0;;;18005:21:1;18062:2;18042:18;;;18035:30;18101:34;18081:18;;;18074:62;-1:-1:-1;;;18152:18:1;;;18145:31;18193:19;;13135:57:0;17821:397:1;13135:57:0;9577:10;-1:-1:-1;;;;;13213:21:0;;;;:62;;-1:-1:-1;13238:37:0;13255:5;9577:10;29407:382;:::i;13238:37::-;13205:154;;;;-1:-1:-1;;;13205:154:0;;14052:2:1;13205:154:0;;;14034:21:1;14091:2;14071:18;;;14064:30;14130:34;14110:18;;;14103:62;14201:26;14181:18;;;14174:54;14245:19;;13205:154:0;13850:420:1;13205:154:0;13372:21;13381:2;13385:7;13372:8;:21::i;:::-;13074:327;13004:397;;:::o;28380:99::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;28450:10:::1;:21:::0;28380:99::o;14105:305::-;14266:41;9577:10;14299:7;14266:18;:41::i;:::-;14258:103;;;;-1:-1:-1;;;14258:103:0;;;;;;;:::i;:::-;14374:28;14384:4;14390:2;14394:7;14374:9;:28::i;18894:256::-;18991:7;19027:23;19044:5;19027:16;:23::i;:::-;19019:5;:31;19011:87;;;;-1:-1:-1;;;19011:87:0;;8983:2:1;19011:87:0;;;8965:21:1;9022:2;9002:18;;;8995:30;9061:34;9041:18;;;9034:62;-1:-1:-1;;;9112:18:1;;;9105:41;9163:19;;19011:87:0;8781:407:1;19011:87:0;-1:-1:-1;;;;;;19116:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;18894:256::o;27610:77::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27665:6:::1;:14:::0;;-1:-1:-1;;27665:14:0::1;::::0;;27610:77::o;26664:199::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;26753:6:::1;26749:107;26765:20:::0;;::::1;26749:107;;;26840:4;26807:16;:30;26824:9;;26834:1;26824:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26807:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26807:30:0;:37;;-1:-1:-1;;26807:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26787:3;::::1;::::0;::::1;:::i;:::-;;;;26749:107;;14416:151:::0;14520:39;14537:4;14543:2;14547:7;14520:39;;;;;;;;;;;;:16;:39::i;27529:75::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27583:6:::1;:13:::0;;-1:-1:-1;;27583:13:0::1;;;::::0;;27529:75::o;19275:233::-;19350:7;19386:30;19244:10;:17;;19156:113;19386:30;19378:5;:38;19370:95;;;;-1:-1:-1;;;19370:95:0;;19196:2:1;19370:95:0;;;19178:21:1;19235:2;19215:18;;;19208:30;19274:34;19254:18;;;19247:62;-1:-1:-1;;;19325:18:1;;;19318:42;19377:19;;19370:95:0;18994:408:1;19370:95:0;19483:10;19494:5;19483:17;;;;;;;;:::i;:::-;;;;;;;;;19476:24;;19275:233;;;:::o;27103:92::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27162:17:::1;:25:::0;;-1:-1:-1;;27162:25:0::1;::::0;;27103:92::o;27201:79::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27255:10:::1;:17:::0;;-1:-1:-1;;27255:17:0::1;::::0;::::1;::::0;;27201:79::o;28595:101::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;28670:18;;::::1;::::0;:8:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;28595:101:::0;:::o;25027:620::-;25118:10;;;;;;;25110:69;;;;-1:-1:-1;;;25110:69:0;;;;;;;:::i;:::-;25215:10;25198:28;;;;:16;:28;;;;;;;;25190:57;;;;-1:-1:-1;;;25190:57:0;;13707:2:1;25190:57:0;;;13689:21:1;13746:2;13726:18;;;13719:30;-1:-1:-1;;;13765:18:1;;;13758:46;13821:18;;25190:57:0;13505:340:1;25190:57:0;25284:21;;25266:14;:39;;25258:84;;;;-1:-1:-1;;;25258:84:0;;20377:2:1;25258:84:0;;;20359:21:1;;;20396:18;;;20389:30;20455:34;20435:18;;;20428:62;20507:18;;25258:84:0;20175:356:1;25258:84:0;25406:21;;25361:41;25387:14;25361:21;25371:10;25361:9;:21::i;:::-;:25;;:41::i;:::-;:66;;25353:105;;;;-1:-1:-1;;;25353:105:0;;17668:2:1;25353:105:0;;;17650:21:1;17707:2;17687:18;;;17680:30;17746:28;17726:18;;;17719:56;17792:18;;25353:105:0;17466:350:1;25353:105:0;25500:9;25477:19;;:32;;25469:86;;;;-1:-1:-1;;;25469:86:0;;;;;;;:::i;:::-;25566:14;25583:13;19244:10;:17;;19156:113;25583:13;25566:30;;25607:32;25617:10;25629:9;25607;:32::i;23274:152::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;23381:37:::1;::::0;23349:21:::1;::::0;23389:10:::1;::::0;23381:37;::::1;;;::::0;23349:21;;23331:15:::1;23381:37:::0;23331:15;23381:37;23349:21;23389:10;23381:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;12077:239:::0;12149:7;12185:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12185:16:0;12220:19;12212:73;;;;-1:-1:-1;;;12212:73:0;;14888:2:1;12212:73:0;;;14870:21:1;14927:2;14907:18;;;14900:30;14966:34;14946:18;;;14939:62;-1:-1:-1;;;15017:18:1;;;15010:39;15066:19;;12212:73:0;14686:405:1;28176:95:0;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;28244:11:::1;:19:::0;28176:95::o;11863:208::-;11935:7;-1:-1:-1;;;;;11963:19:0;;11955:74;;;;-1:-1:-1;;;11955:74:0;;14477:2:1;11955:74:0;;;14459:21:1;14516:2;14496:18;;;14489:30;14555:34;14535:18;;;14528:62;-1:-1:-1;;;14606:18:1;;;14599:40;14656:19;;11955:74:0;14275:406:1;11955:74:0;-1:-1:-1;;;;;;12047:16:0;;;;;:9;:16;;;;;;;11863:208::o;10397:148::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;10488:6:::1;::::0;10467:40:::1;::::0;10504:1:::1;::::0;-1:-1:-1;;;;;10488:6:0::1;::::0;10467:40:::1;::::0;10504:1;;10467:40:::1;10518:6;:19:::0;;-1:-1:-1;;;;;;10518:19:0::1;::::0;;10397:148::o;28060:110::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;28135:19:::1;:27:::0;28060:110::o;22899:136::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;22995:32:::1;23008:7;23017:9;22995:12;:32::i;27693:113::-:0;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27766:21:::1;:32:::0;27693:113::o;26869:128::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26958:31:0::1;;::::0;;;:16:::1;:31;::::0;;;;26951:38;;-1:-1:-1;;26951:38:0::1;::::0;;26869:128::o;12428:104::-;12484:13;12517:7;12510:14;;;;;:::i;13634:295::-;-1:-1:-1;;;;;13737:24:0;;9577:10;13737:24;;13729:62;;;;-1:-1:-1;;;13729:62:0;;11825:2:1;13729:62:0;;;11807:21:1;11864:2;11844:18;;;11837:30;11903:27;11883:18;;;11876:55;11948:18;;13729:62:0;11623:349:1;13729:62:0;9577:10;13804:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;13804:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;13804:53:0;;;;;;;;;;13873:48;;7736:41:1;;;13804:42:0;;9577:10;13873:48;;7709:18:1;13873:48:0;;;;;;;13634:295;;:::o;23721:301::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;23817:6:::1;23813:202;23833:8;23829:1;:12;23813:202;;;23863:14;23880:13;19244:10:::0;:17;;19156:113;23880:13:::1;23863:30;;23924:10;;23912:9;:22;23908:96;;;23955:33;23965:11;23978:9;23955;:33::i;:::-;-1:-1:-1::0;23843:3:0;::::1;::::0;::::1;:::i;:::-;;;;23813:202;;27935:119:::0;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;28014:21:::1;:32:::0;27935:119::o;27371:73::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27422:7:::1;:14:::0;;-1:-1:-1;;27422:14:0::1;27432:4;27422:14;::::0;;27371:73::o;14573:285::-;14705:41;9577:10;14738:7;14705:18;:41::i;:::-;14697:103;;;;-1:-1:-1;;;14697:103:0;;;;;;;:::i;:::-;14811:39;14825:4;14831:2;14835:7;14844:5;14811:13;:39::i;:::-;14573:285;;;;:::o;27812:117::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27890:20:::1;:31:::0;27812:117::o;24030:989::-;24144:10;;24107:33;24125:14;24107:13;19244:10;:17;;19156:113;24107:33;:47;;24099:116;;;;-1:-1:-1;;;24099:116:0;;9814:2:1;24099:116:0;;;9796:21:1;9853:2;9833:18;;;9826:30;9892:34;9872:18;;;9865:62;9963:26;9943:18;;;9936:54;10007:19;;24099:116:0;9612:420:1;24099:116:0;24234:7;;;;24226:63;;;;-1:-1:-1;;;24226:63:0;;15298:2:1;24226:63:0;;;15280:21:1;15337:2;15317:18;;;15310:30;15376:34;15356:18;;;15349:62;-1:-1:-1;;;15427:18:1;;;15420:41;15478:19;;24226:63:0;15096:407:1;24226:63:0;24326:20;;24308:14;:38;;24300:83;;;;-1:-1:-1;;;24300:83:0;;20377:2:1;24300:83:0;;;20359:21:1;;;20396:18;;;20389:30;20455:34;20435:18;;;20428:62;20507:18;;24300:83:0;20175:356:1;24300:83:0;24419:1;24402:14;:18;24394:55;;;;-1:-1:-1;;;24394:55:0;;18843:2:1;24394:55:0;;;18825:21:1;18882:2;18862:18;;;18855:30;18921:26;18901:18;;;18894:54;18965:18;;24394:55:0;18641:348:1;24394:55:0;24513:21;;24468:41;24494:14;24468:21;24478:10;24468:9;:21::i;:41::-;:66;;24460:121;;;;-1:-1:-1;;;24460:121:0;;13296:2:1;24460:121:0;;;13278:21:1;13335:2;13315:18;;;13308:30;13374:34;13354:18;;;13347:62;-1:-1:-1;;;13425:18:1;;;13418:40;13475:19;;24460:121:0;13094:406:1;24460:121:0;24615:13;;24600:11;:28;;24592:89;;;;-1:-1:-1;;;24592:89:0;;10239:2:1;24592:89:0;;;10221:21:1;10278:2;10258:18;;;10251:30;10317:34;10297:18;;;10290:62;-1:-1:-1;;;10368:18:1;;;10361:46;10424:19;;24592:89:0;10037:412:1;24592:89:0;24700:11;;24735:9;;24700:31;;24716:14;24700:15;:31::i;:::-;:44;;24692:98;;;;-1:-1:-1;;;24692:98:0;;;;;;;:::i;:::-;24805:6;24801:211;24821:14;24817:1;:18;24801:211;;;24857:14;24874:13;19244:10;:17;;19156:113;24874:13;24857:30;;24922:10;;24906:13;19244:10;:17;;19156:113;24906:13;:26;24902:99;;;24953:32;24963:10;24975:9;24953;:32::i;:::-;-1:-1:-1;24837:3:0;;;;:::i;:::-;;;;24801:211;;27005:92;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27065:17:::1;:24:::0;;-1:-1:-1;;27065:24:0::1;27085:4;27065:24;::::0;;27005:92::o;28817:578::-;15207:4;15231:16;;;:7;:16;;;;;;28890:13;;-1:-1:-1;;;;;15231:16:0;28920:49;;;;-1:-1:-1;;;28920:49:0;;12534:2:1;28920:49:0;;;12516:21:1;12573:2;12553:18;;;12546:30;-1:-1:-1;;;12592:18:1;;;12585:50;12652:18;;28920:49:0;12332:344:1;28920:49:0;28986:23;29012:19;;;:10;:19;;;;;28986:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29046:18;29067:10;:8;:10::i;:::-;29046:31;;29116:4;29110:18;29132:1;29110:23;29106:80;;;-1:-1:-1;29161:9:0;28817:578;-1:-1:-1;;28817:578:0:o;29106:80::-;29204:23;;:27;29200:116;;29283:4;29289:9;29266:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29252:48;;;;28817:578;;;:::o;29200:116::-;29361:4;29367:18;:7;:16;:18::i;:::-;29344:42;;;;;;;;;:::i;23434:279::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;23509:6:::1;23505:201;23525:8;23521:1;:12;23505:201;;;23555:14;23572:13;19244:10:::0;:17;;19156:113;23572:13:::1;23555:30;;23616:10;;23604:9;:22;23600:95;;;23647:32;23657:10;23669:9;23647;:32::i;:::-;-1:-1:-1::0;23535:3:0;::::1;::::0;::::1;:::i;:::-;;;;23505:201;;28485:98:::0;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;28554:13:::1;:21:::0;28485:98::o;27450:73::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27500:7:::1;:15:::0;;-1:-1:-1;;27500:15:0::1;::::0;;27450:73::o;29407:382::-;29598:20;;29642:28;;-1:-1:-1;;;29642:28:0;;-1:-1:-1;;;;;7059:32:1;;;29642:28:0;;;7041:51:1;29532:4:0;;29598:20;;;29634:49;;;;29598:20;;29642:21;;7014:18:1;;29642:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29634:49:0;;29630:93;;;29707:4;29700:11;;;;;29630:93;-1:-1:-1;;;;;14056:25:0;;;14032:4;14056:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29742:39;29735:46;29407:382;-1:-1:-1;;;;29407:382:0:o;26221:435::-;26296:6;;;;;;;26288:45;;;;-1:-1:-1;;;26288:45:0;;12179:2:1;26288:45:0;;;12161:21:1;12218:2;12198:18;;;12191:30;12257:28;12237:18;;;12230:56;12303:18;;26288:45:0;11977:350:1;26288:45:0;26372:10;26352:16;26360:7;26352;:16::i;:::-;-1:-1:-1;;;;;26352:30:0;;26344:68;;;;-1:-1:-1;;;26344:68:0;;8214:2:1;26344:68:0;;;8196:21:1;8253:2;8233:18;;;8226:30;8292:27;8272:18;;;8265:55;8337:18;;26344:68:0;8012:349:1;26344:68:0;26444:12;;26431:9;:25;;26423:67;;;;-1:-1:-1;;;26423:67:0;;19609:2:1;26423:67:0;;;19591:21:1;19648:2;19628:18;;;19621:30;19687:31;19667:18;;;19660:59;19736:18;;26423:67:0;19407:353:1;26423:67:0;26621:27;;26640:7;;26628:10;;26621:27;;;;;26221:435;:::o;10553:244::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10642:22:0;::::1;10634:73;;;::::0;-1:-1:-1;;;10634:73:0;;10656:2:1;10634:73:0::1;::::0;::::1;10638:21:1::0;10695:2;10675:18;;;10668:30;10734:34;10714:18;;;10707:62;-1:-1:-1;;;10785:18:1;;;10778:36;10831:19;;10634:73:0::1;10454:402:1::0;10634:73:0::1;10744:6;::::0;10723:38:::1;::::0;-1:-1:-1;;;;;10723:38:0;;::::1;::::0;10744:6:::1;::::0;10723:38:::1;::::0;10744:6:::1;::::0;10723:38:::1;10772:6;:17:::0;;-1:-1:-1;;;;;;10772:17:0::1;-1:-1:-1::0;;;;;10772:17:0;;;::::1;::::0;;;::::1;::::0;;10553:244::o;25655:558::-;25745:17;;;;25737:76;;;;-1:-1:-1;;;25737:76:0;;;;;;;:::i;28277:97::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;28346:12:::1;:20:::0;28277:97::o;27286:79::-;10247:6;;-1:-1:-1;;;;;10247:6:0;9577:10;10309:23;10301:68;;;;-1:-1:-1;;;10301:68:0;;;;;;;:::i;:::-;27339:10:::1;:18:::0;;-1:-1:-1;;27339:18:0::1;::::0;;27286:79::o;11565:292::-;11667:4;-1:-1:-1;;;;;;11691:40:0;;-1:-1:-1;;;11691:40:0;;:105;;-1:-1:-1;;;;;;;11748:48:0;;-1:-1:-1;;;11748:48:0;11691:105;:158;;;-1:-1:-1;;;;;;;;;;10956:40:0;;;11813:36;10847:157;17221:174;17296:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;17296:29:0;-1:-1:-1;;;;;17296:29:0;;;;;;;;:24;;17350:23;17296:24;17350:14;:23::i;:::-;-1:-1:-1;;;;;17341:46:0;;;;;;;;;;;17221:174;;:::o;15275:348::-;15368:4;15231:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15231:16:0;15385:73;;;;-1:-1:-1;;;15385:73:0;;12883:2:1;15385:73:0;;;12865:21:1;12922:2;12902:18;;;12895:30;12961:34;12941:18;;;12934:62;-1:-1:-1;;;13012:18:1;;;13005:42;13064:19;;15385:73:0;12681:408:1;15385:73:0;15469:13;15485:23;15500:7;15485:14;:23::i;:::-;15469:39;;15538:5;-1:-1:-1;;;;;15527:16:0;:7;-1:-1:-1;;;;;15527:16:0;;:51;;;;15571:7;-1:-1:-1;;;;;15547:31:0;:20;15559:7;15547:11;:20::i;:::-;-1:-1:-1;;;;;15547:31:0;;15527:51;:87;;;;15582:32;15599:5;15606:7;15582:16;:32::i;16725:490::-;16850:4;-1:-1:-1;;;;;16823:31:0;:23;16838:7;16823:14;:23::i;:::-;-1:-1:-1;;;;;16823:31:0;;16815:85;;;;-1:-1:-1;;;16815:85:0;;17258:2:1;16815:85:0;;;17240:21:1;17297:2;17277:18;;;17270:30;17336:34;17316:18;;;17309:62;-1:-1:-1;;;17387:18:1;;;17380:39;17436:19;;16815:85:0;17056:405:1;16815:85:0;-1:-1:-1;;;;;16919:16:0;;16911:65;;;;-1:-1:-1;;;16911:65:0;;11420:2:1;16911:65:0;;;11402:21:1;11459:2;11439:18;;;11432:30;11498:34;11478:18;;;11471:62;-1:-1:-1;;;11549:18:1;;;11542:34;11593:19;;16911:65:0;11218:400:1;16911:65:0;16989:39;17010:4;17016:2;17020:7;16989:20;:39::i;:::-;17039:29;17056:1;17060:7;17039:8;:29::i;:::-;-1:-1:-1;;;;;17081:15:0;;;;;;:9;:15;;;;;:20;;17100:1;;17081:15;:20;;17100:1;;17081:20;:::i;:::-;;;;-1:-1:-1;;;;;;;17112:13:0;;;;;;:9;:13;;;;;:18;;17129:1;;17112:13;:18;;17129:1;;17112:18;:::i;:::-;;;;-1:-1:-1;;17141:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;17141:21:0;-1:-1:-1;;;;;17141:21:0;;;;;;;;;17180:27;;17141:16;;17180:27;;;;;;;16725:490;;;:::o;6417:98::-;6475:7;6502:5;6506:1;6502;:5;:::i;:::-;6495:12;6417:98;-1:-1:-1;;;6417:98:0:o;15629:110::-;15705:26;15715:2;15719:7;15705:26;;;;;;;;;;;;:9;:26::i;23043:223::-;15207:4;15231:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15231:16:0;23139:73;;;;-1:-1:-1;;;23139:73:0;;16484:2:1;23139:73:0;;;16466:21:1;16523:2;16503:18;;;16496:30;16562:34;16542:18;;;16535:62;-1:-1:-1;;;16613:18:1;;;16606:42;16665:19;;23139:73:0;16282:408:1;23139:73:0;23227:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;14864:272::-;14978:28;14988:4;14994:2;14998:7;14978:9;:28::i;:::-;15025:48;15048:4;15054:2;15058:7;15067:5;15025:22;:48::i;:::-;15017:111;;;;-1:-1:-1;;;15017:111:0;;;;;;;:::i;6625:98::-;6683:7;6710:5;6714:1;6710;:5;:::i;28708:101::-;28760:13;28793:8;28786:15;;;;;:::i;3756:723::-;3812:13;4033:10;4029:53;;-1:-1:-1;;4060:10:0;;;;;;;;;;;;-1:-1:-1;;;4060:10:0;;;;;3756:723::o;4029:53::-;4107:5;4092:12;4148:78;4155:9;;4148:78;;4181:8;;;;:::i;:::-;;-1:-1:-1;4204:10:0;;-1:-1:-1;4212:2:0;4204:10;;:::i;:::-;;;4148:78;;;4236:19;4268:6;4258:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4258:17:0;;4236:39;;4286:154;4293:10;;4286:154;;4320:11;4330:1;4320:11;;:::i;:::-;;-1:-1:-1;4389:10:0;4397:2;4389:5;:10;:::i;:::-;4376:24;;:2;:24;:::i;:::-;4363:39;;4346:6;4353;4346:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4346:56:0;;;;;;;;-1:-1:-1;4417:11:0;4426:2;4417:11;;:::i;:::-;;;4286:154;;19514:555;-1:-1:-1;;;;;19686:18:0;;19682:187;;19721:40;19753:7;20408:10;:17;;20381:24;;;;:15;:24;;;;;:44;;;20436:24;;;;;;;;;;;;20304:164;19721:40;19682:187;;;19791:2;-1:-1:-1;;;;;19783:10:0;:4;-1:-1:-1;;;;;19783:10:0;;19779:90;;19810:47;19843:4;19849:7;19810:32;:47::i;:::-;-1:-1:-1;;;;;19883:16:0;;19879:183;;19916:45;19953:7;19916:36;:45::i;19879:183::-;19989:4;-1:-1:-1;;;;;19983:10:0;:2;-1:-1:-1;;;;;19983:10:0;;19979:83;;20010:40;20038:2;20042:7;20010:27;:40::i;15745:250::-;15841:18;15847:2;15851:7;15841:5;:18::i;:::-;15878:54;15909:1;15913:2;15917:7;15926:5;15878:22;:54::i;:::-;15870:117;;;;-1:-1:-1;;;15870:117:0;;;;;;;:::i;17401:843::-;17522:4;-1:-1:-1;;;;;17548:13:0;;205:20;244:8;17544:693;;17584:72;;-1:-1:-1;;;17584:72:0;;-1:-1:-1;;;;;17584:36:0;;;;;:72;;9577:10;;17635:4;;17641:7;;17650:5;;17584:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17584:72:0;;;;;;;;-1:-1:-1;;17584:72:0;;;;;;;;;;;;:::i;:::-;;;17580:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17830:13:0;;17826:341;;17873:60;;-1:-1:-1;;;17873:60:0;;;;;;;:::i;17826:341::-;18117:6;18111:13;18102:6;18098:2;18094:15;18087:38;17580:602;-1:-1:-1;;;;;;17707:55:0;-1:-1:-1;;;17707:55:0;;-1:-1:-1;17700:62:0;;17544:693;-1:-1:-1;18221:4:0;17401:843;;;;;;:::o;20474:647::-;20568:22;20618:1;20593:22;20610:4;20593:16;:22::i;:::-;:26;;;;:::i;:::-;20630:18;20651:26;;;:17;:26;;;;;;20568:51;;-1:-1:-1;20692:28:0;;;20688:328;;-1:-1:-1;;;;;20759:18:0;;20737:19;20759:18;;;:12;:18;;;;;;;;:34;;;;;;;;;20810:30;;;;;;:44;;;20927:30;;:17;:30;;;;;:43;;;20688:328;-1:-1:-1;21035:26:0;;;;:17;:26;;;;;;;;21028:33;;;-1:-1:-1;;;;;21079:18:0;;;;;:12;:18;;;;;:34;;;;;;;21072:41;20474:647::o;21127:523::-;21242:10;:17;21217:22;;21242:21;;21262:1;;21242:21;:::i;:::-;21274:18;21295:24;;;:15;:24;;;;;;21352:10;:26;;21217:46;;-1:-1:-1;21295:24:0;;21217:46;;21352:26;;;;;;:::i;:::-;;;;;;;;;21330:48;;21416:11;21391:10;21402;21391:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;21496:28;;;:15;:28;;;;;;;:41;;;21591:24;;;;;21584:31;21626:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21198:452;;;21127:523;:::o;20077:221::-;20162:14;20179:20;20196:2;20179:16;:20::i;:::-;-1:-1:-1;;;;;20210:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;20255:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;20077:221:0:o;16001:382::-;-1:-1:-1;;;;;16081:16:0;;16073:61;;;;-1:-1:-1;;;16073:61:0;;15710:2:1;16073:61:0;;;15692:21:1;;;15729:18;;;15722:30;15788:34;15768:18;;;15761:62;15840:18;;16073:61:0;15508:356:1;16073:61:0;15207:4;15231:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15231:16:0;:30;16145:58;;;;-1:-1:-1;;;16145:58:0;;11063:2:1;16145:58:0;;;11045:21:1;11102:2;11082:18;;;11075:30;11141;11121:18;;;11114:58;11189:18;;16145:58:0;10861:352:1;16145:58:0;16216:45;16245:1;16249:2;16253:7;16216:20;:45::i;:::-;-1:-1:-1;;;;;16274:13:0;;;;;;:9;:13;;;;;:18;;16291:1;;16274:13;:18;;16291:1;;16274:18;:::i;:::-;;;;-1:-1:-1;;16303:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;16303:21:0;-1:-1:-1;;;;;16303:21:0;;;;;;;;16342:33;;16303:16;;;16342:33;;16303:16;;16342:33;16001:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:221::-;693:5;746:3;739:4;731:6;727:17;723:27;713:55;;764:1;761;754:12;713:55;786:79;861:3;852:6;839:20;832:4;824:6;820:17;786:79;:::i;876:247::-;935:6;988:2;976:9;967:7;963:23;959:32;956:52;;;1004:1;1001;994:12;956:52;1043:9;1030:23;1062:31;1087:5;1062:31;:::i;1128:388::-;1196:6;1204;1257:2;1245:9;1236:7;1232:23;1228:32;1225:52;;;1273:1;1270;1263:12;1225:52;1312:9;1299:23;1331:31;1356:5;1331:31;:::i;:::-;1381:5;-1:-1:-1;1438:2:1;1423:18;;1410:32;1451:33;1410:32;1451:33;:::i;:::-;1503:7;1493:17;;;1128:388;;;;;:::o;1521:456::-;1598:6;1606;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:52;;;1683:1;1680;1673:12;1635:52;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1848:2:1;1833:18;;1820:32;1861:33;1820:32;1861:33;:::i;:::-;1521:456;;1913:7;;-1:-1:-1;;;1967:2:1;1952:18;;;;1939:32;;1521:456::o;1982:794::-;2077:6;2085;2093;2101;2154:3;2142:9;2133:7;2129:23;2125:33;2122:53;;;2171:1;2168;2161:12;2122:53;2210:9;2197:23;2229:31;2254:5;2229:31;:::i;:::-;2279:5;-1:-1:-1;2336:2:1;2321:18;;2308:32;2349:33;2308:32;2349:33;:::i;:::-;2401:7;-1:-1:-1;2455:2:1;2440:18;;2427:32;;-1:-1:-1;2510:2:1;2495:18;;2482:32;2537:18;2526:30;;2523:50;;;2569:1;2566;2559:12;2523:50;2592:22;;2645:4;2637:13;;2633:27;-1:-1:-1;2623:55:1;;2674:1;2671;2664:12;2623:55;2697:73;2762:7;2757:2;2744:16;2739:2;2735;2731:11;2697:73;:::i;:::-;2687:83;;;1982:794;;;;;;;:::o;2781:416::-;2846:6;2854;2907:2;2895:9;2886:7;2882:23;2878:32;2875:52;;;2923:1;2920;2913:12;2875:52;2962:9;2949:23;2981:31;3006:5;2981:31;:::i;:::-;3031:5;-1:-1:-1;3088:2:1;3073:18;;3060:32;3130:15;;3123:23;3111:36;;3101:64;;3161:1;3158;3151:12;3202:315;3270:6;3278;3331:2;3319:9;3310:7;3306:23;3302:32;3299:52;;;3347:1;3344;3337:12;3299:52;3386:9;3373:23;3405:31;3430:5;3405:31;:::i;:::-;3455:5;3507:2;3492:18;;;;3479:32;;-1:-1:-1;;;3202:315:1:o;3522:615::-;3608:6;3616;3669:2;3657:9;3648:7;3644:23;3640:32;3637:52;;;3685:1;3682;3675:12;3637:52;3725:9;3712:23;3754:18;3795:2;3787:6;3784:14;3781:34;;;3811:1;3808;3801:12;3781:34;3849:6;3838:9;3834:22;3824:32;;3894:7;3887:4;3883:2;3879:13;3875:27;3865:55;;3916:1;3913;3906:12;3865:55;3956:2;3943:16;3982:2;3974:6;3971:14;3968:34;;;3998:1;3995;3988:12;3968:34;4051:7;4046:2;4036:6;4033:1;4029:14;4025:2;4021:23;4017:32;4014:45;4011:65;;;4072:1;4069;4062:12;4011:65;4103:2;4095:11;;;;;4125:6;;-1:-1:-1;3522:615:1;;-1:-1:-1;;;;3522:615:1:o;4142:245::-;4200:6;4253:2;4241:9;4232:7;4228:23;4224:32;4221:52;;;4269:1;4266;4259:12;4221:52;4308:9;4295:23;4327:30;4351:5;4327:30;:::i;4392:249::-;4461:6;4514:2;4502:9;4493:7;4489:23;4485:32;4482:52;;;4530:1;4527;4520:12;4482:52;4562:9;4556:16;4581:30;4605:5;4581:30;:::i;4646:280::-;4745:6;4798:2;4786:9;4777:7;4773:23;4769:32;4766:52;;;4814:1;4811;4804:12;4766:52;4846:9;4840:16;4865:31;4890:5;4865:31;:::i;4931:322::-;5000:6;5053:2;5041:9;5032:7;5028:23;5024:32;5021:52;;;5069:1;5066;5059:12;5021:52;5109:9;5096:23;5142:18;5134:6;5131:30;5128:50;;;5174:1;5171;5164:12;5128:50;5197;5239:7;5230:6;5219:9;5215:22;5197:50;:::i;5258:180::-;5317:6;5370:2;5358:9;5349:7;5345:23;5341:32;5338:52;;;5386:1;5383;5376:12;5338:52;-1:-1:-1;5409:23:1;;5258:180;-1:-1:-1;5258:180:1:o;5443:315::-;5511:6;5519;5572:2;5560:9;5551:7;5547:23;5543:32;5540:52;;;5588:1;5585;5578:12;5540:52;5624:9;5611:23;5601:33;;5684:2;5673:9;5669:18;5656:32;5697:31;5722:5;5697:31;:::i;5763:390::-;5841:6;5849;5902:2;5890:9;5881:7;5877:23;5873:32;5870:52;;;5918:1;5915;5908:12;5870:52;5954:9;5941:23;5931:33;;6015:2;6004:9;6000:18;5987:32;6042:18;6034:6;6031:30;6028:50;;;6074:1;6071;6064:12;6028:50;6097;6139:7;6130:6;6119:9;6115:22;6097:50;:::i;:::-;6087:60;;;5763:390;;;;;:::o;6158:257::-;6199:3;6237:5;6231:12;6264:6;6259:3;6252:19;6280:63;6336:6;6329:4;6324:3;6320:14;6313:4;6306:5;6302:16;6280:63;:::i;:::-;6397:2;6376:15;-1:-1:-1;;6372:29:1;6363:39;;;;6404:4;6359:50;;6158:257;-1:-1:-1;;6158:257:1:o;6420:470::-;6599:3;6637:6;6631:13;6653:53;6699:6;6694:3;6687:4;6679:6;6675:17;6653:53;:::i;:::-;6769:13;;6728:16;;;;6791:57;6769:13;6728:16;6825:4;6813:17;;6791:57;:::i;:::-;6864:20;;6420:470;-1:-1:-1;;;;6420:470:1:o;7103:488::-;-1:-1:-1;;;;;7372:15:1;;;7354:34;;7424:15;;7419:2;7404:18;;7397:43;7471:2;7456:18;;7449:34;;;7519:3;7514:2;7499:18;;7492:31;;;7297:4;;7540:45;;7565:19;;7557:6;7540:45;:::i;:::-;7532:53;7103:488;-1:-1:-1;;;;;;7103:488:1:o;7788:219::-;7937:2;7926:9;7919:21;7900:4;7957:44;7997:2;7986:9;7982:18;7974:6;7957:44;:::i;8366:410::-;8568:2;8550:21;;;8607:2;8587:18;;;8580:30;8646:34;8641:2;8626:18;;8619:62;-1:-1:-1;;;8712:2:1;8697:18;;8690:44;8766:3;8751:19;;8366:410::o;9193:414::-;9395:2;9377:21;;;9434:2;9414:18;;;9407:30;9473:34;9468:2;9453:18;;9446:62;-1:-1:-1;;;9539:2:1;9524:18;;9517:48;9597:3;9582:19;;9193:414::o;16695:356::-;16897:2;16879:21;;;16916:18;;;16909:30;16975:34;16970:2;16955:18;;16948:62;17042:2;17027:18;;16695:356::o;18223:413::-;18425:2;18407:21;;;18464:2;18444:18;;;18437:30;18503:34;18498:2;18483:18;;18476:62;-1:-1:-1;;;18569:2:1;18554:18;;18547:47;18626:3;18611:19;;18223:413::o;19765:405::-;19967:2;19949:21;;;20006:2;19986:18;;;19979:30;20045:34;20040:2;20025:18;;20018:62;-1:-1:-1;;;20111:2:1;20096:18;;20089:39;20160:3;20145:19;;19765:405::o;20718:128::-;20758:3;20789:1;20785:6;20782:1;20779:13;20776:39;;;20795:18;;:::i;:::-;-1:-1:-1;20831:9:1;;20718:128::o;20851:120::-;20891:1;20917;20907:35;;20922:18;;:::i;:::-;-1:-1:-1;20956:9:1;;20851:120::o;20976:168::-;21016:7;21082:1;21078;21074:6;21070:14;21067:1;21064:21;21059:1;21052:9;21045:17;21041:45;21038:71;;;21089:18;;:::i;:::-;-1:-1:-1;21129:9:1;;20976:168::o;21149:125::-;21189:4;21217:1;21214;21211:8;21208:34;;;21222:18;;:::i;:::-;-1:-1:-1;21259:9:1;;21149:125::o;21279:258::-;21351:1;21361:113;21375:6;21372:1;21369:13;21361:113;;;21451:11;;;21445:18;21432:11;;;21425:39;21397:2;21390:10;21361:113;;;21492:6;21489:1;21486:13;21483:48;;;-1:-1:-1;;21527:1:1;21509:16;;21502:27;21279:258::o;21542:380::-;21621:1;21617:12;;;;21664;;;21685:61;;21739:4;21731:6;21727:17;21717:27;;21685:61;21792:2;21784:6;21781:14;21761:18;21758:38;21755:161;;;21838:10;21833:3;21829:20;21826:1;21819:31;21873:4;21870:1;21863:15;21901:4;21898:1;21891:15;21755:161;;21542:380;;;:::o;21927:135::-;21966:3;-1:-1:-1;;21987:17:1;;21984:43;;;22007:18;;:::i;:::-;-1:-1:-1;22054:1:1;22043:13;;21927:135::o;22067:112::-;22099:1;22125;22115:35;;22130:18;;:::i;:::-;-1:-1:-1;22164:9:1;;22067:112::o;22184:127::-;22245:10;22240:3;22236:20;22233:1;22226:31;22276:4;22273:1;22266:15;22300:4;22297:1;22290:15;22316:127;22377:10;22372:3;22368:20;22365:1;22358:31;22408:4;22405:1;22398:15;22432:4;22429:1;22422:15;22448:127;22509:10;22504:3;22500:20;22497:1;22490:31;22540:4;22537:1;22530:15;22564:4;22561:1;22554:15;22580:127;22641:10;22636:3;22632:20;22629:1;22622:31;22672:4;22669:1;22662:15;22696:4;22693:1;22686:15;22712:127;22773:10;22768:3;22764:20;22761:1;22754:31;22804:4;22801:1;22794:15;22828:4;22825:1;22818:15;22844:131;-1:-1:-1;;;;;22919:31:1;;22909:42;;22899:70;;22965:1;22962;22955:12;22899:70;22844:131;:::o;22980:::-;-1:-1:-1;;;;;;23054:32:1;;23044:43;;23034:71;;23101:1;23098;23091:12

Swarm Source

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