ETH Price: $3,108.08 (+1.16%)
Gas: 8 Gwei

Token

Chad & Brad Family Collection (CHADNFT)
 

Overview

Max Total Supply

2,066 CHADNFT

Holders

528

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
nftcasually.eth
Balance
1 CHADNFT
0xd9e1da631da9b9bd061f47725fa624f407e51dd6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Chad & Brad Family NFT Collection is a group of 5,555 unique characters focused on the famous Chad & Brad stereotypes that are currently plaguing the cannabis industry. The 5 main characters that are here to take over are Chad, Brad, Chad's little brother Thad, Brad's little b...

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChadFamily

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-16
*/

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/utils/[email protected]
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");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]
pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {

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

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

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


// File @openzeppelin/contracts/utils/[email protected]
pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File @openzeppelin/contracts/utils/introspection/[email protected]
pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]
pragma solidity ^0.8.0;

interface IERC721 is IERC165 {
    
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]
pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]
pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {
    
    function name() external view returns (string memory);

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

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





// File @openzeppelin/contracts/utils/[email protected]
pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]
pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {

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


// File @openzeppelin/contracts/token/ERC721/[email protected]
pragma solidity ^0.8.0;

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

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

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

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

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

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

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(address(0), tokenId);

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

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

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {
    
    function totalSupply() external view returns (uint256);

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

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

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

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

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

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

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

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

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

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

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

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

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

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

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

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

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

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

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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 0;

     uint256 internal immutable maxBatchSize;

    string private _name;

    string private _symbol;

    mapping(uint256 => TokenOwnership) private _ownerships;

    mapping(address => AddressData) private _addressData;

    mapping(uint256 => address) private _tokenApprovals;

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

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_
    ) {
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
    }

    function totalSupply() public view override returns (uint256) {
        return currentIndex;
    }

    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }

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

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

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

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

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

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

        revert("ERC721A: unable to determine the owner of token");
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), "ERC721A: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

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

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

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

        uint256 updatedIndex = startTokenId;

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

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        _approve(address(0), tokenId, prevOwnership.addr);

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp);
            }
        }

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

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

    uint256 public nextOwnerToExplicitlySet = 0;

    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > currentIndex - 1) {
            endIndex = currentIndex - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(ownership.addr, ownership.startTimestamp);
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721A: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

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

pragma solidity ^0.8.0;

contract ChadFamily is ERC721A
{
    using Strings for uint256;

    string public baseURI;
    uint256 public cost;
    uint256 public maxSupply;
    uint256 public maxMintAmount = 100;
    uint256 public maxMintPerTransaction = 100;
    address public owner;
    bool public preSaleLive;
    bool public mintLive;

    mapping(address => bool) private whiteList;
    mapping(address => uint256) private mintCount;

    modifier onlyOwner() {
        require(owner == msg.sender, "not owner");
        _;
    }

    modifier preSaleIsLive() {
        require(preSaleLive, "preSale not live");
        _;
    }

    modifier mintIsLive() {
        require(mintLive, "mint not live");
        _;
    }

    constructor(string memory defaultBaseURI) ERC721A("Chad & Brad Family Collection", "CHADNFT", maxMintAmount) {
        owner = msg.sender;
        baseURI = defaultBaseURI;
        maxSupply = 5555;
        maxMintPerTransaction;
        cost = 100000000000000000;
    }

    function isWhiteListed(address _address) public view returns (bool){
        return whiteList[_address];
    }

    function mintedByAddressCount(address _address) public view returns (uint256){
        return mintCount[_address];
    }

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

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setmaxMintPerTransaction(uint256 _newmaxMintPerTransaction) public onlyOwner {
        maxMintPerTransaction = _newmaxMintPerTransaction;
    }

    function mint(uint256 _mintAmount) external payable mintIsLive {
        address _to = msg.sender;
        uint256 minted = mintCount[_to];
        require(minted + _mintAmount <= maxMintAmount, "mint over max");
        require(_mintAmount <= maxMintPerTransaction, "amount must < max");
        require(totalSupply() + _mintAmount <= maxSupply, "mint over supply");
        require(msg.value >= cost * _mintAmount, "insufficient funds");

        mintCount[_to] = minted + _mintAmount;
        _safeMint(msg.sender, _mintAmount);
    }

    function preSaleMint(uint256 _mintAmount) external payable preSaleIsLive {
        address _to = msg.sender;
        uint256 minted = mintCount[_to];
        require(whiteList[_to], "not whitelisted");
        require(minted + _mintAmount <= maxMintAmount, "mint over max");
        require(totalSupply() + _mintAmount <= maxSupply, "mint over supply");
        require(msg.value >= cost * _mintAmount, "insufficient funds");

        mintCount[_to] = minted + _mintAmount;
        _safeMint(msg.sender, _mintAmount);
    }

    function mintByOwner(address _to, uint256 _mintAmount) external onlyOwner {
        require(totalSupply() + _mintAmount <= maxSupply, "mint over supply");
        if (_mintAmount <= maxBatchSize) {
            _safeMint(_to, _mintAmount);
            return;
        }
        
        uint256 leftToMint = _mintAmount;
        while (leftToMint > 0) {
            if (leftToMint <= maxBatchSize) {
                _safeMint(_to, leftToMint);
                return;
            }
            _safeMint(_to, maxBatchSize);
            leftToMint = leftToMint - maxBatchSize;
        }
    }

    function addToWhiteList(address[] calldata _addresses) external onlyOwner {
        for (uint256 i; i < _addresses.length; i++) {
            whiteList[_addresses[i]] = true;
        }
    }

    function togglePreSaleLive() external onlyOwner {
        if (preSaleLive) {
            preSaleLive = false;
            return;
        }
        preSaleLive = true;
    }

    function toggleMintLive() external onlyOwner {
        if (mintLive) {
            mintLive = false;
            return;
        }
        preSaleLive = false;
        mintLive = true;
    }

    function setBaseURI(string memory _newURI) external onlyOwner {
        baseURI = _newURI;
    }

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

    function setOwnersExplicit(uint256 quantity) external onlyOwner {
        _setOwnersExplicit(quantity);
    }

    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(_exists(_tokenId), "URI query for nonexistent token");

        string memory baseTokenURI = _baseURI();
        string memory json = ".json";
        return bytes(baseTokenURI).length > 0
            ? string(abi.encodePacked(baseTokenURI, _tokenId.toString(), json))
            : '';
    }

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

    fallback() external payable { }

    receive() external payable { }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"defaultBaseURI","type":"string"}],"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addToWhiteList","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"mintedByAddressCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","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":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintPerTransaction","type":"uint256"}],"name":"setmaxMintPerTransaction","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":[],"name":"toggleMintLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePreSaleLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000805560006007556064600b556064600c553480156200002457600080fd5b50604051620058c2380380620058c283398181016040528101906200004a9190620002e3565b6040518060400160405280601d81526020017f43686164202620427261642046616d696c7920436f6c6c656374696f6e0000008152506040518060400160405280600781526020017f434841444e465400000000000000000000000000000000000000000000000000815250600b5460008111620000ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f6906200035b565b60405180910390fd5b826001908051906020019062000117929190620001b5565b50816002908051906020019062000130929190620001b5565b50806080818152505050505033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008908051906020019062000195929190620001b5565b506115b3600a8190555067016345785d8a00006009819055505062000561565b828054620001c39062000423565b90600052602060002090601f016020900481019282620001e7576000855562000233565b82601f106200020257805160ff191683800117855562000233565b8280016001018555821562000233579182015b828111156200023257825182559160200191906001019062000215565b5b50905062000242919062000246565b5090565b5b808211156200026157600081600090555060010162000247565b5090565b60006200027c6200027684620003a6565b6200037d565b9050828152602081018484840111156200029b576200029a620004f2565b5b620002a8848285620003ed565b509392505050565b600082601f830112620002c857620002c7620004ed565b5b8151620002da84826020860162000265565b91505092915050565b600060208284031215620002fc57620002fb620004fc565b5b600082015167ffffffffffffffff8111156200031d576200031c620004f7565b5b6200032b84828501620002b0565b91505092915050565b600062000343602783620003dc565b9150620003508262000512565b604082019050919050565b60006020820190508181036000830152620003768162000334565b9050919050565b6000620003896200039c565b905062000397828262000459565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c457620003c3620004be565b5b620003cf8262000501565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200040d578082015181840152602081019050620003f0565b838111156200041d576000848401525b50505050565b600060028204905060018216806200043c57607f821691505b602082108114156200045357620004526200048f565b5b50919050565b620004648262000501565b810181811067ffffffffffffffff82111715620004865762000485620004be565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b60805161531b620005a7600039600081816111250152818161116a015281816111a5015281816111cb01528181612d0801528181612d31015261330e015261531b6000f3fe6080604052600436106102345760003560e01c80635bd90b761161012e5780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd14610804578063d5abeb0114610841578063d7224ba01461086c578063e8656fcc14610897578063e985e9c5146108c25761023b565b80638da5cb5b1461074057806395d89b411461076b578063a0712d6814610796578063a22cb465146107b2578063b88d4fde146107db5761023b565b8063740d73f3116100f2578063740d73f3146106925780637835c635146106bb57806378835f42146106d75780637f00c7a61461070057806389bdeec6146107295761023b565b80635bd90b76146105855780636352211e146105b05780636c0360eb146105ed5780636f9170f61461061857806370a08231146106555761023b565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b146104c357806342842e0e146104cd57806344a0d68a146104f65780634f6ccce71461051f57806355f804b31461055c5761023b565b806323b872dd146103ce5780632d20fb60146103f75780632f745c59146104205780633542aee21461045d57806337351b0f146104865761023b565b8063095ea7b311610203578063095ea7b31461030d578063105739b81461033657806313faede61461034d57806318160ddd14610378578063239c70ae146103a35761023b565b806301f569971461023d57806301ffc9a71461026857806306fdde03146102a5578063081812fc146102d05761023b565b3661023b57005b005b34801561024957600080fd5b506102526108ff565b60405161025f919061460f565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613bcb565b610905565b60405161029c9190614232565b60405180910390f35b3480156102b157600080fd5b506102ba610a4f565b6040516102c7919061424d565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613c6e565b610ae1565b60405161030491906141cb565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190613b3e565b610b66565b005b34801561034257600080fd5b5061034b610c7f565b005b34801561035957600080fd5b50610362610d7d565b60405161036f919061460f565b60405180910390f35b34801561038457600080fd5b5061038d610d83565b60405161039a919061460f565b60405180910390f35b3480156103af57600080fd5b506103b8610d8c565b6040516103c5919061460f565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613a28565b610d92565b005b34801561040357600080fd5b5061041e60048036038101906104199190613c6e565b610da2565b005b34801561042c57600080fd5b5061044760048036038101906104429190613b3e565b610e3e565b604051610454919061460f565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613b3e565b61103c565b005b34801561049257600080fd5b506104ad60048036038101906104a891906139bb565b611202565b6040516104ba919061460f565b60405180910390f35b6104cb61124b565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613a28565b61138a565b005b34801561050257600080fd5b5061051d60048036038101906105189190613c6e565b6113aa565b005b34801561052b57600080fd5b5061054660048036038101906105419190613c6e565b611444565b604051610553919061460f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613c25565b611497565b005b34801561059157600080fd5b5061059a611541565b6040516105a79190614232565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613c6e565b611554565b6040516105e491906141cb565b60405180910390f35b3480156105f957600080fd5b5061060261156a565b60405161060f919061424d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906139bb565b6115f8565b60405161064c9190614232565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906139bb565b61164e565b604051610689919061460f565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613b7e565b611737565b005b6106d560048036038101906106d09190613c6e565b61186c565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190613c6e565b611ae5565b005b34801561070c57600080fd5b5061072760048036038101906107229190613c6e565b611b7f565b005b34801561073557600080fd5b5061073e611c19565b005b34801561074c57600080fd5b50610755611cfc565b60405161076291906141cb565b60405180910390f35b34801561077757600080fd5b50610780611d22565b60405161078d919061424d565b60405180910390f35b6107b060048036038101906107ab9190613c6e565b611db4565b005b3480156107be57600080fd5b506107d960048036038101906107d49190613afe565b611fe6565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a7b565b612167565b005b34801561081057600080fd5b5061082b60048036038101906108269190613c6e565b6121c3565b604051610838919061424d565b60405180910390f35b34801561084d57600080fd5b506108566122a7565b604051610863919061460f565b60405180910390f35b34801561087857600080fd5b506108816122ad565b60405161088e919061460f565b60405180910390f35b3480156108a357600080fd5b506108ac6122b3565b6040516108b99190614232565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906139e8565b6122c6565b6040516108f69190614232565b60405180910390f35b600c5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a485750610a478261235a565b5b9050919050565b606060018054610a5e9061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061498a565b8015610ad75780601f10610aac57610100808354040283529160200191610ad7565b820191906000526020600020905b815481529060010190602001808311610aba57829003601f168201915b5050505050905090565b6000610aec826123c4565b610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b22906145cf565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7182611554565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd99061444f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c016123d1565b73ffffffffffffffffffffffffffffffffffffffff161480610c305750610c2f81610c2a6123d1565b6122c6565b5b610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c669061434f565b60405180910390fd5b610c7a8383836123d9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906145af565b60405180910390fd5b600d60159054906101000a900460ff1615610d44576000600d60156101000a81548160ff021916908315150217905550610d7b565b6000600d60146101000a81548160ff0219169083151502179055506001600d60156101000a81548160ff0219169083151502179055505b565b60095481565b60008054905090565b600b5481565b610d9d83838361248b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906145af565b60405180910390fd5b610e3b81612a44565b50565b6000610e498361164e565b8210610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061426f565b60405180910390fd5b6000610e94610d83565b905060008060005b83811015610ffa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fe65786841415610fd7578195505050505050611036565b8380610fe2906149ed565b9450505b508080610ff2906149ed565b915050610e9c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061454f565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906145af565b60405180910390fd5b600a54816110d8610d83565b6110e29190614745565b1115611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906144cf565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111611159576111548282612c96565b6111fe565b60008190505b60008111156111fc577f0000000000000000000000000000000000000000000000000000000000000000811161119f576111998382612c96565b506111fe565b6111c9837f0000000000000000000000000000000000000000000000000000000000000000612c96565b7f0000000000000000000000000000000000000000000000000000000000000000816111f5919061485a565b905061115f565b505b5050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906145af565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611301906141b6565b60006040518083038185875af1925050503d806000811461133e576040519150601f19603f3d011682016040523d82523d6000602084013e611343565b606091505b5050905080611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906142af565b60405180910390fd5b50565b6113a583838360405180602001604052806000815250612167565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906145af565b60405180910390fd5b8060098190555050565b600061144e610d83565b821061148f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611486906142ef565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906145af565b60405180910390fd5b806008908051906020019061153d92919061373f565b5050565b600d60149054906101000a900460ff1681565b600061155f82612cb4565b600001519050919050565b600880546115779061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546115a39061498a565b80156115f05780601f106115c5576101008083540402835291602001916115f0565b820191906000526020600020905b8154815290600101906020018083116115d357829003601f168201915b505050505081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b69061438f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906145af565b60405180910390fd5b60005b82829050811015611867576001600e60008585858181106117ee576117ed614af4565b5b905060200201602081019061180391906139bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185f906149ed565b9150506117ca565b505050565b600d60149054906101000a900460ff166118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b29061452f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119879061450f565b60405180910390fd5b600b54838261199f9190614745565b11156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d79061442f565b60405180910390fd5b600a54836119ec610d83565b6119f69190614745565b1115611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e906144cf565b60405180910390fd5b82600954611a4591906147cc565b341015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e9061446f565b60405180910390fd5b8281611a939190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ae03384612c96565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906145af565b60405180910390fd5b80600c8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906145af565b60405180910390fd5b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca0906145af565b60405180910390fd5b600d60149054906101000a900460ff1615611cde576000600d60146101000a81548160ff021916908315150217905550611cfa565b6001600d60146101000a81548160ff0219169083151502179055505b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611d319061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5d9061498a565b8015611daa5780601f10611d7f57610100808354040283529160200191611daa565b820191906000526020600020905b815481529060010190602001808311611d8d57829003601f168201915b5050505050905090565b600d60159054906101000a900460ff16611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa9061432f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548382611e5b9190614745565b1115611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061442f565b60405180910390fd5b600c54831115611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed8906143cf565b60405180910390fd5b600a5483611eed610d83565b611ef79190614745565b1115611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906144cf565b60405180910390fd5b82600954611f4691906147cc565b341015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061446f565b60405180910390fd5b8281611f949190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fe13384612c96565b505050565b611fee6123d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612053906143ef565b60405180910390fd5b80600660006120696123d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121166123d1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161215b9190614232565b60405180910390a35050565b61217284848461248b565b61217e84848484612eb7565b6121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b49061448f565b60405180910390fd5b50505050565b60606121ce826123c4565b61220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061428f565b60405180910390fd5b600061221761304e565b905060006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000825111612271576040518060200160405280600081525061229e565b8161227b856130e0565b8260405160200161228e93929190614185565b6040516020818303038152906040525b92505050919050565b600a5481565b60075481565b600d60159054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061249682612cb4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124bd6123d1565b73ffffffffffffffffffffffffffffffffffffffff16148061251957506124e26123d1565b73ffffffffffffffffffffffffffffffffffffffff1661250184610ae1565b73ffffffffffffffffffffffffffffffffffffffff16145b806125355750612534826000015161252f6123d1565b6122c6565b5b905080612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061440f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e0906143af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126509061430f565b60405180910390fd5b6126668585856001613241565b61267660008484600001516123d9565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126e49190614826565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661278891906146ff565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461288e9190614745565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129d457612904816123c4565b156129d3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a3c8686866001613247565b505050505050565b6000600754905060008211612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a859061436f565b60405180910390fd5b600060018383612a9e9190614745565b612aa8919061485a565b90506001600054612ab9919061485a565b811115612ad2576001600054612acf919061485a565b90505b612adb816123c4565b612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b119061456f565b60405180910390fd5b60008290505b818111612c7d57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c6a576000612b9d82612cb4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612c75906149ed565b915050612b20565b50600181612c8b9190614745565b600781905550505050565b612cb082826040518060200160405280600081525061324d565b5050565b612cbc6137c5565b612cc5826123c4565b612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb906142cf565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d685760017f000000000000000000000000000000000000000000000000000000000000000084612d5b919061485a565b612d659190614745565b90505b60008390505b818110612e76576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6257809350505050612eb2565b508080612e6e90614960565b915050612d6e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99061458f565b60405180910390fd5b919050565b6000612ed88473ffffffffffffffffffffffffffffffffffffffff1661372c565b15613041578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f016123d1565b8786866040518563ffffffff1660e01b8152600401612f2394939291906141e6565b602060405180830381600087803b158015612f3d57600080fd5b505af1925050508015612f6e57506040513d601f19601f82011682018060405250810190612f6b9190613bf8565b60015b612ff1573d8060008114612f9e576040519150601f19603f3d011682016040523d82523d6000602084013e612fa3565b606091505b50600081511415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe09061448f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613046565b600190505b949350505050565b60606008805461305d9061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546130899061498a565b80156130d65780601f106130ab576101008083540402835291602001916130d6565b820191906000526020600020905b8154815290600101906020018083116130b957829003601f168201915b5050505050905090565b60606000821415613128576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061323c565b600082905060005b6000821461315a578080613143906149ed565b915050600a82613153919061479b565b9150613130565b60008167ffffffffffffffff81111561317657613175614b23565b5b6040519080825280601f01601f1916602001820160405280156131a85781602001600182028036833780820191505090505b5090505b60008514613235576001826131c1919061485a565b9150600a856131d09190614a36565b60306131dc9190614745565b60f81b8183815181106131f2576131f1614af4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561322e919061479b565b94506131ac565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba906144ef565b60405180910390fd5b6132cc816123c4565b1561330c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613303906144af565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561336f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613366906145ef565b60405180910390fd5b61337c6000858386613241565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161347991906146ff565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134a091906146ff565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561370f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136af6000888488612eb7565b6136ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e59061448f565b60405180910390fd5b81806136f9906149ed565b9250508080613707906149ed565b91505061363e565b50806000819055506137246000878588613247565b505050505050565b600080823b905060008111915050919050565b82805461374b9061498a565b90600052602060002090601f01602090048101928261376d57600085556137b4565b82601f1061378657805160ff19168380011785556137b4565b828001600101855582156137b4579182015b828111156137b3578251825591602001919060010190613798565b5b5090506137c191906137ff565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613818576000816000905550600101613800565b5090565b600061382f61382a8461464f565b61462a565b90508281526020810184848401111561384b5761384a614b61565b5b61385684828561491e565b509392505050565b600061387161386c84614680565b61462a565b90508281526020810184848401111561388d5761388c614b61565b5b61389884828561491e565b509392505050565b6000813590506138af81615289565b92915050565b60008083601f8401126138cb576138ca614b57565b5b8235905067ffffffffffffffff8111156138e8576138e7614b52565b5b60208301915083602082028301111561390457613903614b5c565b5b9250929050565b60008135905061391a816152a0565b92915050565b60008135905061392f816152b7565b92915050565b600081519050613944816152b7565b92915050565b600082601f83011261395f5761395e614b57565b5b813561396f84826020860161381c565b91505092915050565b600082601f83011261398d5761398c614b57565b5b813561399d84826020860161385e565b91505092915050565b6000813590506139b5816152ce565b92915050565b6000602082840312156139d1576139d0614b6b565b5b60006139df848285016138a0565b91505092915050565b600080604083850312156139ff576139fe614b6b565b5b6000613a0d858286016138a0565b9250506020613a1e858286016138a0565b9150509250929050565b600080600060608486031215613a4157613a40614b6b565b5b6000613a4f868287016138a0565b9350506020613a60868287016138a0565b9250506040613a71868287016139a6565b9150509250925092565b60008060008060808587031215613a9557613a94614b6b565b5b6000613aa3878288016138a0565b9450506020613ab4878288016138a0565b9350506040613ac5878288016139a6565b925050606085013567ffffffffffffffff811115613ae657613ae5614b66565b5b613af28782880161394a565b91505092959194509250565b60008060408385031215613b1557613b14614b6b565b5b6000613b23858286016138a0565b9250506020613b348582860161390b565b9150509250929050565b60008060408385031215613b5557613b54614b6b565b5b6000613b63858286016138a0565b9250506020613b74858286016139a6565b9150509250929050565b60008060208385031215613b9557613b94614b6b565b5b600083013567ffffffffffffffff811115613bb357613bb2614b66565b5b613bbf858286016138b5565b92509250509250929050565b600060208284031215613be157613be0614b6b565b5b6000613bef84828501613920565b91505092915050565b600060208284031215613c0e57613c0d614b6b565b5b6000613c1c84828501613935565b91505092915050565b600060208284031215613c3b57613c3a614b6b565b5b600082013567ffffffffffffffff811115613c5957613c58614b66565b5b613c6584828501613978565b91505092915050565b600060208284031215613c8457613c83614b6b565b5b6000613c92848285016139a6565b91505092915050565b613ca48161488e565b82525050565b613cb3816148a0565b82525050565b6000613cc4826146b1565b613cce81856146c7565b9350613cde81856020860161492d565b613ce781614b70565b840191505092915050565b6000613cfd826146bc565b613d0781856146e3565b9350613d1781856020860161492d565b613d2081614b70565b840191505092915050565b6000613d36826146bc565b613d4081856146f4565b9350613d5081856020860161492d565b80840191505092915050565b6000613d696022836146e3565b9150613d7482614b81565b604082019050919050565b6000613d8c601f836146e3565b9150613d9782614bd0565b602082019050919050565b6000613daf600f836146e3565b9150613dba82614bf9565b602082019050919050565b6000613dd2602a836146e3565b9150613ddd82614c22565b604082019050919050565b6000613df56023836146e3565b9150613e0082614c71565b604082019050919050565b6000613e186025836146e3565b9150613e2382614cc0565b604082019050919050565b6000613e3b600d836146e3565b9150613e4682614d0f565b602082019050919050565b6000613e5e6039836146e3565b9150613e6982614d38565b604082019050919050565b6000613e816018836146e3565b9150613e8c82614d87565b602082019050919050565b6000613ea4602b836146e3565b9150613eaf82614db0565b604082019050919050565b6000613ec76026836146e3565b9150613ed282614dff565b604082019050919050565b6000613eea6011836146e3565b9150613ef582614e4e565b602082019050919050565b6000613f0d601a836146e3565b9150613f1882614e77565b602082019050919050565b6000613f306032836146e3565b9150613f3b82614ea0565b604082019050919050565b6000613f53600d836146e3565b9150613f5e82614eef565b602082019050919050565b6000613f766022836146e3565b9150613f8182614f18565b604082019050919050565b6000613f996000836146d8565b9150613fa482614f67565b600082019050919050565b6000613fbc6012836146e3565b9150613fc782614f6a565b602082019050919050565b6000613fdf6033836146e3565b9150613fea82614f93565b604082019050919050565b6000614002601d836146e3565b915061400d82614fe2565b602082019050919050565b60006140256010836146e3565b91506140308261500b565b602082019050919050565b60006140486021836146e3565b915061405382615034565b604082019050919050565b600061406b600f836146e3565b915061407682615083565b602082019050919050565b600061408e6010836146e3565b9150614099826150ac565b602082019050919050565b60006140b1602e836146e3565b91506140bc826150d5565b604082019050919050565b60006140d46026836146e3565b91506140df82615124565b604082019050919050565b60006140f7602f836146e3565b915061410282615173565b604082019050919050565b600061411a6009836146e3565b9150614125826151c2565b602082019050919050565b600061413d602d836146e3565b9150614148826151eb565b604082019050919050565b60006141606022836146e3565b915061416b8261523a565b604082019050919050565b61417f81614914565b82525050565b60006141918286613d2b565b915061419d8285613d2b565b91506141a98284613d2b565b9150819050949350505050565b60006141c182613f8c565b9150819050919050565b60006020820190506141e06000830184613c9b565b92915050565b60006080820190506141fb6000830187613c9b565b6142086020830186613c9b565b6142156040830185614176565b81810360608301526142278184613cb9565b905095945050505050565b60006020820190506142476000830184613caa565b92915050565b600060208201905081810360008301526142678184613cf2565b905092915050565b6000602082019050818103600083015261428881613d5c565b9050919050565b600060208201905081810360008301526142a881613d7f565b9050919050565b600060208201905081810360008301526142c881613da2565b9050919050565b600060208201905081810360008301526142e881613dc5565b9050919050565b6000602082019050818103600083015261430881613de8565b9050919050565b6000602082019050818103600083015261432881613e0b565b9050919050565b6000602082019050818103600083015261434881613e2e565b9050919050565b6000602082019050818103600083015261436881613e51565b9050919050565b6000602082019050818103600083015261438881613e74565b9050919050565b600060208201905081810360008301526143a881613e97565b9050919050565b600060208201905081810360008301526143c881613eba565b9050919050565b600060208201905081810360008301526143e881613edd565b9050919050565b6000602082019050818103600083015261440881613f00565b9050919050565b6000602082019050818103600083015261442881613f23565b9050919050565b6000602082019050818103600083015261444881613f46565b9050919050565b6000602082019050818103600083015261446881613f69565b9050919050565b6000602082019050818103600083015261448881613faf565b9050919050565b600060208201905081810360008301526144a881613fd2565b9050919050565b600060208201905081810360008301526144c881613ff5565b9050919050565b600060208201905081810360008301526144e881614018565b9050919050565b600060208201905081810360008301526145088161403b565b9050919050565b600060208201905081810360008301526145288161405e565b9050919050565b6000602082019050818103600083015261454881614081565b9050919050565b60006020820190508181036000830152614568816140a4565b9050919050565b60006020820190508181036000830152614588816140c7565b9050919050565b600060208201905081810360008301526145a8816140ea565b9050919050565b600060208201905081810360008301526145c88161410d565b9050919050565b600060208201905081810360008301526145e881614130565b9050919050565b6000602082019050818103600083015261460881614153565b9050919050565b60006020820190506146246000830184614176565b92915050565b6000614634614645565b905061464082826149bc565b919050565b6000604051905090565b600067ffffffffffffffff82111561466a57614669614b23565b5b61467382614b70565b9050602081019050919050565b600067ffffffffffffffff82111561469b5761469a614b23565b5b6146a482614b70565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061470a826148d8565b9150614715836148d8565b9250826fffffffffffffffffffffffffffffffff0382111561473a57614739614a67565b5b828201905092915050565b600061475082614914565b915061475b83614914565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147905761478f614a67565b5b828201905092915050565b60006147a682614914565b91506147b183614914565b9250826147c1576147c0614a96565b5b828204905092915050565b60006147d782614914565b91506147e283614914565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481b5761481a614a67565b5b828202905092915050565b6000614831826148d8565b915061483c836148d8565b92508282101561484f5761484e614a67565b5b828203905092915050565b600061486582614914565b915061487083614914565b92508282101561488357614882614a67565b5b828203905092915050565b6000614899826148f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561494b578082015181840152602081019050614930565b8381111561495a576000848401525b50505050565b600061496b82614914565b9150600082141561497f5761497e614a67565b5b600182039050919050565b600060028204905060018216806149a257607f821691505b602082108114156149b6576149b5614ac5565b5b50919050565b6149c582614b70565b810181811067ffffffffffffffff821117156149e4576149e3614b23565b5b80604052505050565b60006149f882614914565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a2b57614a2a614a67565b5b600182019050919050565b6000614a4182614914565b9150614a4c83614914565b925082614a5c57614a5b614a96565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74206d757374203c206d6178000000000000000000000000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206f766572206d617800000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f6d696e74206f76657220737570706c7900000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f70726553616c65206e6f74206c69766500000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152928161488e565b811461529d57600080fd5b50565b6152a9816148a0565b81146152b457600080fd5b50565b6152c0816148ac565b81146152cb57600080fd5b50565b6152d781614914565b81146152e257600080fd5b5056fea264697066735822122027afc98e0670e94d0d673ff788b367075a8af77517ff4aba3ea9f59cc949275864736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d59796148364335706a784a6b4a775755375676524e474c58376936653338613776704b4a4855745066364a4b2f00000000000000000000

Deployed Bytecode

0x6080604052600436106102345760003560e01c80635bd90b761161012e5780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd14610804578063d5abeb0114610841578063d7224ba01461086c578063e8656fcc14610897578063e985e9c5146108c25761023b565b80638da5cb5b1461074057806395d89b411461076b578063a0712d6814610796578063a22cb465146107b2578063b88d4fde146107db5761023b565b8063740d73f3116100f2578063740d73f3146106925780637835c635146106bb57806378835f42146106d75780637f00c7a61461070057806389bdeec6146107295761023b565b80635bd90b76146105855780636352211e146105b05780636c0360eb146105ed5780636f9170f61461061857806370a08231146106555761023b565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b146104c357806342842e0e146104cd57806344a0d68a146104f65780634f6ccce71461051f57806355f804b31461055c5761023b565b806323b872dd146103ce5780632d20fb60146103f75780632f745c59146104205780633542aee21461045d57806337351b0f146104865761023b565b8063095ea7b311610203578063095ea7b31461030d578063105739b81461033657806313faede61461034d57806318160ddd14610378578063239c70ae146103a35761023b565b806301f569971461023d57806301ffc9a71461026857806306fdde03146102a5578063081812fc146102d05761023b565b3661023b57005b005b34801561024957600080fd5b506102526108ff565b60405161025f919061460f565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613bcb565b610905565b60405161029c9190614232565b60405180910390f35b3480156102b157600080fd5b506102ba610a4f565b6040516102c7919061424d565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613c6e565b610ae1565b60405161030491906141cb565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190613b3e565b610b66565b005b34801561034257600080fd5b5061034b610c7f565b005b34801561035957600080fd5b50610362610d7d565b60405161036f919061460f565b60405180910390f35b34801561038457600080fd5b5061038d610d83565b60405161039a919061460f565b60405180910390f35b3480156103af57600080fd5b506103b8610d8c565b6040516103c5919061460f565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613a28565b610d92565b005b34801561040357600080fd5b5061041e60048036038101906104199190613c6e565b610da2565b005b34801561042c57600080fd5b5061044760048036038101906104429190613b3e565b610e3e565b604051610454919061460f565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613b3e565b61103c565b005b34801561049257600080fd5b506104ad60048036038101906104a891906139bb565b611202565b6040516104ba919061460f565b60405180910390f35b6104cb61124b565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613a28565b61138a565b005b34801561050257600080fd5b5061051d60048036038101906105189190613c6e565b6113aa565b005b34801561052b57600080fd5b5061054660048036038101906105419190613c6e565b611444565b604051610553919061460f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613c25565b611497565b005b34801561059157600080fd5b5061059a611541565b6040516105a79190614232565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613c6e565b611554565b6040516105e491906141cb565b60405180910390f35b3480156105f957600080fd5b5061060261156a565b60405161060f919061424d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906139bb565b6115f8565b60405161064c9190614232565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906139bb565b61164e565b604051610689919061460f565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613b7e565b611737565b005b6106d560048036038101906106d09190613c6e565b61186c565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190613c6e565b611ae5565b005b34801561070c57600080fd5b5061072760048036038101906107229190613c6e565b611b7f565b005b34801561073557600080fd5b5061073e611c19565b005b34801561074c57600080fd5b50610755611cfc565b60405161076291906141cb565b60405180910390f35b34801561077757600080fd5b50610780611d22565b60405161078d919061424d565b60405180910390f35b6107b060048036038101906107ab9190613c6e565b611db4565b005b3480156107be57600080fd5b506107d960048036038101906107d49190613afe565b611fe6565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a7b565b612167565b005b34801561081057600080fd5b5061082b60048036038101906108269190613c6e565b6121c3565b604051610838919061424d565b60405180910390f35b34801561084d57600080fd5b506108566122a7565b604051610863919061460f565b60405180910390f35b34801561087857600080fd5b506108816122ad565b60405161088e919061460f565b60405180910390f35b3480156108a357600080fd5b506108ac6122b3565b6040516108b99190614232565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906139e8565b6122c6565b6040516108f69190614232565b60405180910390f35b600c5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a485750610a478261235a565b5b9050919050565b606060018054610a5e9061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061498a565b8015610ad75780601f10610aac57610100808354040283529160200191610ad7565b820191906000526020600020905b815481529060010190602001808311610aba57829003601f168201915b5050505050905090565b6000610aec826123c4565b610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b22906145cf565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7182611554565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd99061444f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c016123d1565b73ffffffffffffffffffffffffffffffffffffffff161480610c305750610c2f81610c2a6123d1565b6122c6565b5b610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c669061434f565b60405180910390fd5b610c7a8383836123d9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906145af565b60405180910390fd5b600d60159054906101000a900460ff1615610d44576000600d60156101000a81548160ff021916908315150217905550610d7b565b6000600d60146101000a81548160ff0219169083151502179055506001600d60156101000a81548160ff0219169083151502179055505b565b60095481565b60008054905090565b600b5481565b610d9d83838361248b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906145af565b60405180910390fd5b610e3b81612a44565b50565b6000610e498361164e565b8210610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061426f565b60405180910390fd5b6000610e94610d83565b905060008060005b83811015610ffa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fe65786841415610fd7578195505050505050611036565b8380610fe2906149ed565b9450505b508080610ff2906149ed565b915050610e9c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061454f565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906145af565b60405180910390fd5b600a54816110d8610d83565b6110e29190614745565b1115611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906144cf565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000648111611159576111548282612c96565b6111fe565b60008190505b60008111156111fc577f0000000000000000000000000000000000000000000000000000000000000064811161119f576111998382612c96565b506111fe565b6111c9837f0000000000000000000000000000000000000000000000000000000000000064612c96565b7f0000000000000000000000000000000000000000000000000000000000000064816111f5919061485a565b905061115f565b505b5050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906145af565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611301906141b6565b60006040518083038185875af1925050503d806000811461133e576040519150601f19603f3d011682016040523d82523d6000602084013e611343565b606091505b5050905080611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906142af565b60405180910390fd5b50565b6113a583838360405180602001604052806000815250612167565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906145af565b60405180910390fd5b8060098190555050565b600061144e610d83565b821061148f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611486906142ef565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906145af565b60405180910390fd5b806008908051906020019061153d92919061373f565b5050565b600d60149054906101000a900460ff1681565b600061155f82612cb4565b600001519050919050565b600880546115779061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546115a39061498a565b80156115f05780601f106115c5576101008083540402835291602001916115f0565b820191906000526020600020905b8154815290600101906020018083116115d357829003601f168201915b505050505081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b69061438f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906145af565b60405180910390fd5b60005b82829050811015611867576001600e60008585858181106117ee576117ed614af4565b5b905060200201602081019061180391906139bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185f906149ed565b9150506117ca565b505050565b600d60149054906101000a900460ff166118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b29061452f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119879061450f565b60405180910390fd5b600b54838261199f9190614745565b11156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d79061442f565b60405180910390fd5b600a54836119ec610d83565b6119f69190614745565b1115611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e906144cf565b60405180910390fd5b82600954611a4591906147cc565b341015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e9061446f565b60405180910390fd5b8281611a939190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ae03384612c96565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906145af565b60405180910390fd5b80600c8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906145af565b60405180910390fd5b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca0906145af565b60405180910390fd5b600d60149054906101000a900460ff1615611cde576000600d60146101000a81548160ff021916908315150217905550611cfa565b6001600d60146101000a81548160ff0219169083151502179055505b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611d319061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5d9061498a565b8015611daa5780601f10611d7f57610100808354040283529160200191611daa565b820191906000526020600020905b815481529060010190602001808311611d8d57829003601f168201915b5050505050905090565b600d60159054906101000a900460ff16611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa9061432f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548382611e5b9190614745565b1115611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061442f565b60405180910390fd5b600c54831115611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed8906143cf565b60405180910390fd5b600a5483611eed610d83565b611ef79190614745565b1115611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906144cf565b60405180910390fd5b82600954611f4691906147cc565b341015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061446f565b60405180910390fd5b8281611f949190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fe13384612c96565b505050565b611fee6123d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612053906143ef565b60405180910390fd5b80600660006120696123d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121166123d1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161215b9190614232565b60405180910390a35050565b61217284848461248b565b61217e84848484612eb7565b6121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b49061448f565b60405180910390fd5b50505050565b60606121ce826123c4565b61220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061428f565b60405180910390fd5b600061221761304e565b905060006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000825111612271576040518060200160405280600081525061229e565b8161227b856130e0565b8260405160200161228e93929190614185565b6040516020818303038152906040525b92505050919050565b600a5481565b60075481565b600d60159054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061249682612cb4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124bd6123d1565b73ffffffffffffffffffffffffffffffffffffffff16148061251957506124e26123d1565b73ffffffffffffffffffffffffffffffffffffffff1661250184610ae1565b73ffffffffffffffffffffffffffffffffffffffff16145b806125355750612534826000015161252f6123d1565b6122c6565b5b905080612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061440f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e0906143af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126509061430f565b60405180910390fd5b6126668585856001613241565b61267660008484600001516123d9565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126e49190614826565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661278891906146ff565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461288e9190614745565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129d457612904816123c4565b156129d3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a3c8686866001613247565b505050505050565b6000600754905060008211612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a859061436f565b60405180910390fd5b600060018383612a9e9190614745565b612aa8919061485a565b90506001600054612ab9919061485a565b811115612ad2576001600054612acf919061485a565b90505b612adb816123c4565b612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b119061456f565b60405180910390fd5b60008290505b818111612c7d57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c6a576000612b9d82612cb4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612c75906149ed565b915050612b20565b50600181612c8b9190614745565b600781905550505050565b612cb082826040518060200160405280600081525061324d565b5050565b612cbc6137c5565b612cc5826123c4565b612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb906142cf565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000648310612d685760017f000000000000000000000000000000000000000000000000000000000000006484612d5b919061485a565b612d659190614745565b90505b60008390505b818110612e76576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6257809350505050612eb2565b508080612e6e90614960565b915050612d6e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99061458f565b60405180910390fd5b919050565b6000612ed88473ffffffffffffffffffffffffffffffffffffffff1661372c565b15613041578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f016123d1565b8786866040518563ffffffff1660e01b8152600401612f2394939291906141e6565b602060405180830381600087803b158015612f3d57600080fd5b505af1925050508015612f6e57506040513d601f19601f82011682018060405250810190612f6b9190613bf8565b60015b612ff1573d8060008114612f9e576040519150601f19603f3d011682016040523d82523d6000602084013e612fa3565b606091505b50600081511415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe09061448f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613046565b600190505b949350505050565b60606008805461305d9061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546130899061498a565b80156130d65780601f106130ab576101008083540402835291602001916130d6565b820191906000526020600020905b8154815290600101906020018083116130b957829003601f168201915b5050505050905090565b60606000821415613128576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061323c565b600082905060005b6000821461315a578080613143906149ed565b915050600a82613153919061479b565b9150613130565b60008167ffffffffffffffff81111561317657613175614b23565b5b6040519080825280601f01601f1916602001820160405280156131a85781602001600182028036833780820191505090505b5090505b60008514613235576001826131c1919061485a565b9150600a856131d09190614a36565b60306131dc9190614745565b60f81b8183815181106131f2576131f1614af4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561322e919061479b565b94506131ac565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba906144ef565b60405180910390fd5b6132cc816123c4565b1561330c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613303906144af565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000006483111561336f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613366906145ef565b60405180910390fd5b61337c6000858386613241565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161347991906146ff565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134a091906146ff565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561370f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136af6000888488612eb7565b6136ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e59061448f565b60405180910390fd5b81806136f9906149ed565b9250508080613707906149ed565b91505061363e565b50806000819055506137246000878588613247565b505050505050565b600080823b905060008111915050919050565b82805461374b9061498a565b90600052602060002090601f01602090048101928261376d57600085556137b4565b82601f1061378657805160ff19168380011785556137b4565b828001600101855582156137b4579182015b828111156137b3578251825591602001919060010190613798565b5b5090506137c191906137ff565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613818576000816000905550600101613800565b5090565b600061382f61382a8461464f565b61462a565b90508281526020810184848401111561384b5761384a614b61565b5b61385684828561491e565b509392505050565b600061387161386c84614680565b61462a565b90508281526020810184848401111561388d5761388c614b61565b5b61389884828561491e565b509392505050565b6000813590506138af81615289565b92915050565b60008083601f8401126138cb576138ca614b57565b5b8235905067ffffffffffffffff8111156138e8576138e7614b52565b5b60208301915083602082028301111561390457613903614b5c565b5b9250929050565b60008135905061391a816152a0565b92915050565b60008135905061392f816152b7565b92915050565b600081519050613944816152b7565b92915050565b600082601f83011261395f5761395e614b57565b5b813561396f84826020860161381c565b91505092915050565b600082601f83011261398d5761398c614b57565b5b813561399d84826020860161385e565b91505092915050565b6000813590506139b5816152ce565b92915050565b6000602082840312156139d1576139d0614b6b565b5b60006139df848285016138a0565b91505092915050565b600080604083850312156139ff576139fe614b6b565b5b6000613a0d858286016138a0565b9250506020613a1e858286016138a0565b9150509250929050565b600080600060608486031215613a4157613a40614b6b565b5b6000613a4f868287016138a0565b9350506020613a60868287016138a0565b9250506040613a71868287016139a6565b9150509250925092565b60008060008060808587031215613a9557613a94614b6b565b5b6000613aa3878288016138a0565b9450506020613ab4878288016138a0565b9350506040613ac5878288016139a6565b925050606085013567ffffffffffffffff811115613ae657613ae5614b66565b5b613af28782880161394a565b91505092959194509250565b60008060408385031215613b1557613b14614b6b565b5b6000613b23858286016138a0565b9250506020613b348582860161390b565b9150509250929050565b60008060408385031215613b5557613b54614b6b565b5b6000613b63858286016138a0565b9250506020613b74858286016139a6565b9150509250929050565b60008060208385031215613b9557613b94614b6b565b5b600083013567ffffffffffffffff811115613bb357613bb2614b66565b5b613bbf858286016138b5565b92509250509250929050565b600060208284031215613be157613be0614b6b565b5b6000613bef84828501613920565b91505092915050565b600060208284031215613c0e57613c0d614b6b565b5b6000613c1c84828501613935565b91505092915050565b600060208284031215613c3b57613c3a614b6b565b5b600082013567ffffffffffffffff811115613c5957613c58614b66565b5b613c6584828501613978565b91505092915050565b600060208284031215613c8457613c83614b6b565b5b6000613c92848285016139a6565b91505092915050565b613ca48161488e565b82525050565b613cb3816148a0565b82525050565b6000613cc4826146b1565b613cce81856146c7565b9350613cde81856020860161492d565b613ce781614b70565b840191505092915050565b6000613cfd826146bc565b613d0781856146e3565b9350613d1781856020860161492d565b613d2081614b70565b840191505092915050565b6000613d36826146bc565b613d4081856146f4565b9350613d5081856020860161492d565b80840191505092915050565b6000613d696022836146e3565b9150613d7482614b81565b604082019050919050565b6000613d8c601f836146e3565b9150613d9782614bd0565b602082019050919050565b6000613daf600f836146e3565b9150613dba82614bf9565b602082019050919050565b6000613dd2602a836146e3565b9150613ddd82614c22565b604082019050919050565b6000613df56023836146e3565b9150613e0082614c71565b604082019050919050565b6000613e186025836146e3565b9150613e2382614cc0565b604082019050919050565b6000613e3b600d836146e3565b9150613e4682614d0f565b602082019050919050565b6000613e5e6039836146e3565b9150613e6982614d38565b604082019050919050565b6000613e816018836146e3565b9150613e8c82614d87565b602082019050919050565b6000613ea4602b836146e3565b9150613eaf82614db0565b604082019050919050565b6000613ec76026836146e3565b9150613ed282614dff565b604082019050919050565b6000613eea6011836146e3565b9150613ef582614e4e565b602082019050919050565b6000613f0d601a836146e3565b9150613f1882614e77565b602082019050919050565b6000613f306032836146e3565b9150613f3b82614ea0565b604082019050919050565b6000613f53600d836146e3565b9150613f5e82614eef565b602082019050919050565b6000613f766022836146e3565b9150613f8182614f18565b604082019050919050565b6000613f996000836146d8565b9150613fa482614f67565b600082019050919050565b6000613fbc6012836146e3565b9150613fc782614f6a565b602082019050919050565b6000613fdf6033836146e3565b9150613fea82614f93565b604082019050919050565b6000614002601d836146e3565b915061400d82614fe2565b602082019050919050565b60006140256010836146e3565b91506140308261500b565b602082019050919050565b60006140486021836146e3565b915061405382615034565b604082019050919050565b600061406b600f836146e3565b915061407682615083565b602082019050919050565b600061408e6010836146e3565b9150614099826150ac565b602082019050919050565b60006140b1602e836146e3565b91506140bc826150d5565b604082019050919050565b60006140d46026836146e3565b91506140df82615124565b604082019050919050565b60006140f7602f836146e3565b915061410282615173565b604082019050919050565b600061411a6009836146e3565b9150614125826151c2565b602082019050919050565b600061413d602d836146e3565b9150614148826151eb565b604082019050919050565b60006141606022836146e3565b915061416b8261523a565b604082019050919050565b61417f81614914565b82525050565b60006141918286613d2b565b915061419d8285613d2b565b91506141a98284613d2b565b9150819050949350505050565b60006141c182613f8c565b9150819050919050565b60006020820190506141e06000830184613c9b565b92915050565b60006080820190506141fb6000830187613c9b565b6142086020830186613c9b565b6142156040830185614176565b81810360608301526142278184613cb9565b905095945050505050565b60006020820190506142476000830184613caa565b92915050565b600060208201905081810360008301526142678184613cf2565b905092915050565b6000602082019050818103600083015261428881613d5c565b9050919050565b600060208201905081810360008301526142a881613d7f565b9050919050565b600060208201905081810360008301526142c881613da2565b9050919050565b600060208201905081810360008301526142e881613dc5565b9050919050565b6000602082019050818103600083015261430881613de8565b9050919050565b6000602082019050818103600083015261432881613e0b565b9050919050565b6000602082019050818103600083015261434881613e2e565b9050919050565b6000602082019050818103600083015261436881613e51565b9050919050565b6000602082019050818103600083015261438881613e74565b9050919050565b600060208201905081810360008301526143a881613e97565b9050919050565b600060208201905081810360008301526143c881613eba565b9050919050565b600060208201905081810360008301526143e881613edd565b9050919050565b6000602082019050818103600083015261440881613f00565b9050919050565b6000602082019050818103600083015261442881613f23565b9050919050565b6000602082019050818103600083015261444881613f46565b9050919050565b6000602082019050818103600083015261446881613f69565b9050919050565b6000602082019050818103600083015261448881613faf565b9050919050565b600060208201905081810360008301526144a881613fd2565b9050919050565b600060208201905081810360008301526144c881613ff5565b9050919050565b600060208201905081810360008301526144e881614018565b9050919050565b600060208201905081810360008301526145088161403b565b9050919050565b600060208201905081810360008301526145288161405e565b9050919050565b6000602082019050818103600083015261454881614081565b9050919050565b60006020820190508181036000830152614568816140a4565b9050919050565b60006020820190508181036000830152614588816140c7565b9050919050565b600060208201905081810360008301526145a8816140ea565b9050919050565b600060208201905081810360008301526145c88161410d565b9050919050565b600060208201905081810360008301526145e881614130565b9050919050565b6000602082019050818103600083015261460881614153565b9050919050565b60006020820190506146246000830184614176565b92915050565b6000614634614645565b905061464082826149bc565b919050565b6000604051905090565b600067ffffffffffffffff82111561466a57614669614b23565b5b61467382614b70565b9050602081019050919050565b600067ffffffffffffffff82111561469b5761469a614b23565b5b6146a482614b70565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061470a826148d8565b9150614715836148d8565b9250826fffffffffffffffffffffffffffffffff0382111561473a57614739614a67565b5b828201905092915050565b600061475082614914565b915061475b83614914565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147905761478f614a67565b5b828201905092915050565b60006147a682614914565b91506147b183614914565b9250826147c1576147c0614a96565b5b828204905092915050565b60006147d782614914565b91506147e283614914565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481b5761481a614a67565b5b828202905092915050565b6000614831826148d8565b915061483c836148d8565b92508282101561484f5761484e614a67565b5b828203905092915050565b600061486582614914565b915061487083614914565b92508282101561488357614882614a67565b5b828203905092915050565b6000614899826148f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561494b578082015181840152602081019050614930565b8381111561495a576000848401525b50505050565b600061496b82614914565b9150600082141561497f5761497e614a67565b5b600182039050919050565b600060028204905060018216806149a257607f821691505b602082108114156149b6576149b5614ac5565b5b50919050565b6149c582614b70565b810181811067ffffffffffffffff821117156149e4576149e3614b23565b5b80604052505050565b60006149f882614914565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a2b57614a2a614a67565b5b600182019050919050565b6000614a4182614914565b9150614a4c83614914565b925082614a5c57614a5b614a96565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74206d757374203c206d6178000000000000000000000000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206f766572206d617800000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f6d696e74206f76657220737570706c7900000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f70726553616c65206e6f74206c69766500000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152928161488e565b811461529d57600080fd5b50565b6152a9816148a0565b81146152b457600080fd5b50565b6152c0816148ac565b81146152cb57600080fd5b50565b6152d781614914565b81146152e257600080fd5b5056fea264697066735822122027afc98e0670e94d0d673ff788b367075a8af77517ff4aba3ea9f59cc949275864736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d59796148364335706a784a6b4a775755375676524e474c58376936653338613776704b4a4855745066364a4b2f00000000000000000000

-----Decoded View---------------
Arg [0] : defaultBaseURI (string): ipfs://QmYyaH6C5pjxJkJwWU7VvRNGLX7i6e38a7vpKJHUtPf6JK/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d59796148364335706a784a6b4a775755375676524e474c
Arg [3] : 58376936653338613776704b4a4855745066364a4b2f00000000000000000000


Deployed Bytecode Sourcemap

31563:4977:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31762:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22402:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24038:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25123:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24702:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35319:197;;;;;;;;;;;;;:::i;:::-;;31664:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21268:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31721:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25813:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35818:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21571:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34316:606;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32704:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35630:180;;;:::i;:::-;;25983:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32834:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21376:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35524:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31838:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23906:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31636:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32584:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22782:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34930:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33775:533;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33058:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32928:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35132:179;;;;;;;;;;;;;:::i;:::-;;31811:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24146:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33220:547;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25345:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26168:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35937:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31690:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29552:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31868:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25641:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31762:42;;;;:::o;22402:372::-;22504:4;22556:25;22541:40;;;:11;:40;;;;:105;;;;22613:33;22598:48;;;:11;:48;;;;22541:105;:172;;;;22678:35;22663:50;;;:11;:50;;;;22541:172;:225;;;;22730:36;22754:11;22730:23;:36::i;:::-;22541:225;22521:245;;22402:372;;;:::o;24038:100::-;24092:13;24125:5;24118:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24038:100;:::o;25123:214::-;25191:7;25219:16;25227:7;25219;:16::i;:::-;25211:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25305:15;:24;25321:7;25305:24;;;;;;;;;;;;;;;;;;;;;25298:31;;25123:214;;;:::o;24702:413::-;24775:13;24791:24;24807:7;24791:15;:24::i;:::-;24775:40;;24840:5;24834:11;;:2;:11;;;;24826:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24935:5;24919:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24944:37;24961:5;24968:12;:10;:12::i;:::-;24944:16;:37::i;:::-;24919:62;24897:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25079:28;25088:2;25092:7;25101:5;25079:8;:28::i;:::-;24764:351;24702:413;;:::o;35319:197::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35379:8:::1;;;;;;;;;;;35375:78;;;35415:5;35404:8;;:16;;;;;;;;;;;;;;;;;;35435:7;;35375:78;35477:5;35463:11;;:19;;;;;;;;;;;;;;;;;;35504:4;35493:8;;:15;;;;;;;;;;;;;;;;;;32084:1;35319:197::o:0;31664:19::-;;;;:::o;21268:100::-;21321:7;21348:12;;21341:19;;21268:100;:::o;31721:34::-;;;;:::o;25813:162::-;25939:28;25949:4;25955:2;25959:7;25939:9;:28::i;:::-;25813:162;;;:::o;35818:111::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35893:28:::1;35912:8;35893:18;:28::i;:::-;35818:111:::0;:::o;21571:823::-;21660:7;21696:16;21706:5;21696:9;:16::i;:::-;21688:5;:24;21680:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:22;21787:13;:11;:13::i;:::-;21762:38;;21811:19;21845:25;21899:9;21894:426;21918:14;21914:1;:18;21894:426;;;21954:31;21988:11;:14;22000:1;21988:14;;;;;;;;;;;21954:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22047:1;22021:28;;:9;:14;;;:28;;;22017:103;;22090:9;:14;;;22070:34;;22017:103;22159:5;22138:26;;:17;:26;;;22134:175;;;22204:5;22189:11;:20;22185:77;;;22241:1;22234:8;;;;;;;;;22185:77;22280:13;;;;;:::i;:::-;;;;22134:175;21939:381;21934:3;;;;;:::i;:::-;;;;21894:426;;;;22330:56;;;;;;;;;;:::i;:::-;;;;;;;;21571:823;;;;;:::o;34316:606::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;34440:9:::1;;34425:11;34409:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;34401:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34500:12;34485:11;:27;34481:108;;34529:27;34539:3;34544:11;34529:9;:27::i;:::-;34571:7;;34481:108;34609:18;34630:11;34609:32;;34652:263;34672:1;34659:10;:14;34652:263;;;34708:12;34694:10;:26;34690:118;;34741:26;34751:3;34756:10;34741:9;:26::i;:::-;34786:7;;;34690:118;34822:28;34832:3;34837:12;34822:9;:28::i;:::-;34891:12;34878:10;:25;;;;:::i;:::-;34865:38;;34652:263;;;34390:532;32084:1;34316:606:::0;;:::o;32704:122::-;32773:7;32799:9;:19;32809:8;32799:19;;;;;;;;;;;;;;;;32792:26;;32704:122;;;:::o;35630:180::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35689:12:::1;35707:10;:15;;35730:21;35707:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35688:68;;;35775:7;35767:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;35677:133;35630:180::o:0;25983:177::-;26113:39;26130:4;26136:2;26140:7;26113:39;;;;;;;;;;;;:16;:39::i;:::-;25983:177;;;:::o;32834:86::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;32904:8:::1;32897:4;:15;;;;32834:86:::0;:::o;21376:187::-;21443:7;21479:13;:11;:13::i;:::-;21471:5;:21;21463:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21550:5;21543:12;;21376:187;;;:::o;35524:98::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35607:7:::1;35597;:17;;;;;;;;;;;;:::i;:::-;;35524:98:::0;:::o;31838:23::-;;;;;;;;;;;;;:::o;23906:124::-;23970:7;23997:20;24009:7;23997:11;:20::i;:::-;:25;;;23990:32;;23906:124;;;:::o;31636:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32584:112::-;32646:4;32669:9;:19;32679:8;32669:19;;;;;;;;;;;;;;;;;;;;;;;;;32662:26;;32584:112;;;:::o;22782:221::-;22846:7;22891:1;22874:19;;:5;:19;;;;22866:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22967:12;:19;22980:5;22967:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;22959:36;;22952:43;;22782:221;;;:::o;34930:194::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35020:9:::1;35015:102;35035:10;;:17;;35031:1;:21;35015:102;;;35101:4;35074:9;:24;35084:10;;35095:1;35084:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35074:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;35054:3;;;;;:::i;:::-;;;;35015:102;;;;34930:194:::0;;:::o;33775:533::-;32145:11;;;;;;;;;;;32137:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33859:11:::1;33873:10;33859:24;;33894:14;33911:9;:14;33921:3;33911:14;;;;;;;;;;;;;;;;33894:31;;33944:9;:14;33954:3;33944:14;;;;;;;;;;;;;;;;;;;;;;;;;33936:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;34021:13;;34006:11;33997:6;:20;;;;:::i;:::-;:37;;33989:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34102:9;;34087:11;34071:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;34063:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34171:11;34164:4;;:18;;;;:::i;:::-;34151:9;:31;;34143:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34244:11;34235:6;:20;;;;:::i;:::-;34218:9;:14;34228:3;34218:14;;;;;;;;;;;;;;;:37;;;;34266:34;34276:10;34288:11;34266:9;:34::i;:::-;33848:460;;33775:533:::0;:::o;33058:154::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33179:25:::1;33155:21;:49;;;;33058:154:::0;:::o;32928:122::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33025:17:::1;33009:13;:33;;;;32928:122:::0;:::o;35132:179::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35195:11:::1;;;;;;;;;;;35191:84;;;35237:5;35223:11;;:19;;;;;;;;;;;;;;;;;;35257:7;;35191:84;35299:4;35285:11;;:18;;;;;;;;;;;;;;;;;;32084:1;35132:179::o:0;31811:20::-;;;;;;;;;;;;;:::o;24146:104::-;24202:13;24235:7;24228:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24146:104;:::o;33220:547::-;32246:8;;;;;;;;;;;32238:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;33294:11:::1;33308:10;33294:24;;33329:14;33346:9;:14;33356:3;33346:14;;;;;;;;;;;;;;;;33329:31;;33403:13;;33388:11;33379:6;:20;;;;:::i;:::-;:37;;33371:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33468:21;;33453:11;:36;;33445:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33561:9;;33546:11;33530:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;33522:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33630:11;33623:4;;:18;;;;:::i;:::-;33610:9;:31;;33602:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33703:11;33694:6;:20;;;;:::i;:::-;33677:9;:14;33687:3;33677:14;;;;;;;;;;;;;;;:37;;;;33725:34;33735:10;33747:11;33725:9;:34::i;:::-;33283:484;;33220:547:::0;:::o;25345:288::-;25452:12;:10;:12::i;:::-;25440:24;;:8;:24;;;;25432:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25553:8;25508:18;:32;25527:12;:10;:12::i;:::-;25508:32;;;;;;;;;;;;;;;:42;25541:8;25508:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25606:8;25577:48;;25592:12;:10;:12::i;:::-;25577:48;;;25616:8;25577:48;;;;;;:::i;:::-;;;;;;;;25345:288;;:::o;26168:355::-;26327:28;26337:4;26343:2;26347:7;26327:9;:28::i;:::-;26388:48;26411:4;26417:2;26421:7;26430:5;26388:22;:48::i;:::-;26366:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;26168:355;;;;:::o;35937:407::-;36011:13;36045:17;36053:8;36045:7;:17::i;:::-;36037:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36111:26;36140:10;:8;:10::i;:::-;36111:39;;36161:18;:28;;;;;;;;;;;;;;;;;;;36236:1;36213:12;36207:26;:30;:129;;;;;;;;;;;;;;;;;36277:12;36291:19;:8;:17;:19::i;:::-;36312:4;36260:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36207:129;36200:136;;;;35937:407;;;:::o;31690:24::-;;;;:::o;29552:43::-;;;;:::o;31868:20::-;;;;;;;;;;;;;:::o;25641:164::-;25738:4;25762:18;:25;25781:5;25762:25;;;;;;;;;;;;;;;:35;25788:8;25762:35;;;;;;;;;;;;;;;;;;;;;;;;;25755:42;;25641:164;;;;:::o;8652:157::-;8737:4;8776:25;8761:40;;;:11;:40;;;;8754:47;;8652:157;;;:::o;26531:111::-;26588:4;26622:12;;26612:7;:22;26605:29;;26531:111;;;:::o;8293:98::-;8346:7;8373:10;8366:17;;8293:98;:::o;29348:196::-;29490:2;29463:15;:24;29479:7;29463:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29528:7;29524:2;29508:28;;29517:5;29508:28;;;;;;;;;;;;29348:196;;;:::o;28045:1295::-;28160:35;28198:20;28210:7;28198:11;:20::i;:::-;28160:58;;28231:22;28273:13;:18;;;28257:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;28332:12;:10;:12::i;:::-;28308:36;;:20;28320:7;28308:11;:20::i;:::-;:36;;;28257:87;:154;;;;28361:50;28378:13;:18;;;28398:12;:10;:12::i;:::-;28361:16;:50::i;:::-;28257:154;28231:181;;28433:17;28425:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28548:4;28526:26;;:13;:18;;;:26;;;28518:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28628:1;28614:16;;:2;:16;;;;28606:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28685:43;28707:4;28713:2;28717:7;28726:1;28685:21;:43::i;:::-;28741:49;28758:1;28762:7;28771:13;:18;;;28741:8;:49::i;:::-;28833:1;28803:12;:18;28816:4;28803:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28873:1;28845:12;:16;28858:2;28845:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28908:43;;;;;;;;28923:2;28908:43;;;;;;28934:15;28908:43;;;;;28885:11;:20;28897:7;28885:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28964:19;28996:1;28986:7;:11;;;;:::i;:::-;28964:33;;29053:1;29012:43;;:11;:24;29024:11;29012:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;29008:227;;;29076:20;29084:11;29076:7;:20::i;:::-;29072:152;;;29144:64;;;;;;;;29159:13;:18;;;29144:64;;;;;;29179:13;:28;;;29144:64;;;;;29117:11;:24;29129:11;29117:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29072:152;29008:227;29271:7;29267:2;29252:27;;29261:4;29252:27;;;;;;;;;;;;29290:42;29311:4;29317:2;29321:7;29330:1;29290:20;:42::i;:::-;28149:1191;;;28045:1295;;;:::o;29604:780::-;29670:25;29698:24;;29670:52;;29752:1;29741:8;:12;29733:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;29793:16;29843:1;29832:8;29812:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;29793:51;;29885:1;29870:12;;:16;;;;:::i;:::-;29859:8;:27;29855:87;;;29929:1;29914:12;;:16;;;;:::i;:::-;29903:27;;29855:87;29960:17;29968:8;29960:7;:17::i;:::-;29952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30036:9;30048:17;30036:29;;30031:296;30072:8;30067:1;:13;30031:296;;30137:1;30106:33;;:11;:14;30118:1;30106:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;30102:214;;;30160:31;30194:14;30206:1;30194:11;:14::i;:::-;30160:48;;30244:56;;;;;;;;30259:9;:14;;;30244:56;;;;;;30275:9;:24;;;30244:56;;;;;30227:11;:14;30239:1;30227:14;;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30141:175;30102:214;30082:3;;;;;:::i;:::-;;;;30031:296;;;;30375:1;30364:8;:12;;;;:::i;:::-;30337:24;:39;;;;29659:725;;29604:780;:::o;26650:104::-;26719:27;26729:2;26733:8;26719:27;;;;;;;;;;;;:9;:27::i;:::-;26650:104;;:::o;23248:650::-;23309:21;;:::i;:::-;23351:16;23359:7;23351;:16::i;:::-;23343:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23427:26;23479:12;23468:7;:23;23464:103;;23554:1;23539:12;23529:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;23508:47;;23464:103;23584:12;23599:7;23584:22;;23579:242;23616:18;23608:4;:26;23579:242;;23659:31;23693:11;:17;23705:4;23693:17;;;;;;;;;;;23659:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23755:1;23729:28;;:9;:14;;;:28;;;23725:85;;23785:9;23778:16;;;;;;;23725:85;23644:177;23636:6;;;;;:::i;:::-;;;;23579:242;;;;23833:57;;;;;;;;;;:::i;:::-;;;;;;;;23248:650;;;;:::o;30392:804::-;30547:4;30568:15;:2;:13;;;:15::i;:::-;30564:625;;;30620:2;30604:36;;;30641:12;:10;:12::i;:::-;30655:4;30661:7;30670:5;30604:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30600:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30867:1;30850:6;:13;:18;30846:273;;;30893:61;;;;;;;;;;:::i;:::-;;;;;;;;30846:273;31069:6;31063:13;31054:6;31050:2;31046:15;31039:38;30600:534;30737:45;;;30727:55;;;:6;:55;;;;30720:62;;;;;30564:625;31173:4;31166:11;;30392:804;;;;;;;:::o;36352:108::-;36412:13;36445:7;36438:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36352:108;:::o;3852:534::-;3908:13;3949:1;3940:5;:10;3936:53;;;3967:10;;;;;;;;;;;;;;;;;;;;;3936:53;3999:12;4014:5;3999:20;;4030:14;4055:78;4070:1;4062:4;:9;4055:78;;4088:8;;;;;:::i;:::-;;;;4119:2;4111:10;;;;;:::i;:::-;;;4055:78;;;4143:19;4175:6;4165:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4143:39;;4193:154;4209:1;4200:5;:10;4193:154;;4237:1;4227:11;;;;;:::i;:::-;;;4304:2;4296:5;:10;;;;:::i;:::-;4283:2;:24;;;;:::i;:::-;4270:39;;4253:6;4260;4253:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4333:2;4324:11;;;;;:::i;:::-;;;4193:154;;;4371:6;4357:21;;;;;3852:534;;;;:::o;31204:159::-;;;;;:::o;31371:158::-;;;;;:::o;26762:1275::-;26885:20;26908:12;;26885:35;;26953:1;26939:16;;:2;:16;;;;26931:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27013:21;27021:12;27013:7;:21::i;:::-;27012:22;27004:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27099:12;27087:8;:24;;27079:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27163:61;27193:1;27197:2;27201:12;27215:8;27163:21;:61::i;:::-;27237:30;27270:12;:16;27283:2;27270:16;;;;;;;;;;;;;;;27237:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27316:135;;;;;;;;27372:8;27342:11;:19;;;:39;;;;:::i;:::-;27316:135;;;;;;27431:8;27396:11;:24;;;:44;;;;:::i;:::-;27316:135;;;;;27297:12;:16;27310:2;27297:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27490:43;;;;;;;;27505:2;27490:43;;;;;;27516:15;27490:43;;;;;27462:11;:25;27474:12;27462:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27546:20;27569:12;27546:35;;27599:9;27594:325;27618:8;27614:1;:12;27594:325;;;27678:12;27674:2;27653:38;;27670:1;27653:38;;;;;;;;;;;;27732:59;27763:1;27767:2;27771:12;27785:5;27732:22;:59::i;:::-;27706:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;27893:14;;;;;:::i;:::-;;;;27628:3;;;;;:::i;:::-;;;;27594:325;;;;27946:12;27931;:27;;;;27969:60;27998:1;28002:2;28006:12;28020:8;27969:20;:60::i;:::-;26874:1163;;;26762:1275;;;:::o;145:198::-;205:4;224:12;291:7;279:20;271:28;;334:1;327:4;:8;320:15;;;145:198;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9672:366::-;9814:3;9835:67;9899:2;9894:3;9835:67;:::i;:::-;9828:74;;9911:93;10000:3;9911:93;:::i;:::-;10029:2;10024:3;10020:12;10013:19;;9672:366;;;:::o;10044:::-;10186:3;10207:67;10271:2;10266:3;10207:67;:::i;:::-;10200:74;;10283:93;10372:3;10283:93;:::i;:::-;10401:2;10396:3;10392:12;10385:19;;10044:366;;;:::o;10416:::-;10558:3;10579:67;10643:2;10638:3;10579:67;:::i;:::-;10572:74;;10655:93;10744:3;10655:93;:::i;:::-;10773:2;10768:3;10764:12;10757:19;;10416:366;;;:::o;10788:::-;10930:3;10951:67;11015:2;11010:3;10951:67;:::i;:::-;10944:74;;11027:93;11116:3;11027:93;:::i;:::-;11145:2;11140:3;11136:12;11129:19;;10788:366;;;:::o;11160:::-;11302:3;11323:67;11387:2;11382:3;11323:67;:::i;:::-;11316:74;;11399:93;11488:3;11399:93;:::i;:::-;11517:2;11512:3;11508:12;11501:19;;11160:366;;;:::o;11532:::-;11674:3;11695:67;11759:2;11754:3;11695:67;:::i;:::-;11688:74;;11771:93;11860:3;11771:93;:::i;:::-;11889:2;11884:3;11880:12;11873:19;;11532:366;;;:::o;11904:::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:::-;12418:3;12439:67;12503:2;12498:3;12439:67;:::i;:::-;12432:74;;12515:93;12604:3;12515:93;:::i;:::-;12633:2;12628:3;12624:12;12617:19;;12276:366;;;:::o;12648:::-;12790:3;12811:67;12875:2;12870:3;12811:67;:::i;:::-;12804:74;;12887:93;12976:3;12887:93;:::i;:::-;13005:2;13000:3;12996:12;12989:19;;12648:366;;;:::o;13020:::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:::-;13534:3;13555:67;13619:2;13614:3;13555:67;:::i;:::-;13548:74;;13631:93;13720:3;13631:93;:::i;:::-;13749:2;13744:3;13740:12;13733:19;;13392:366;;;:::o;13764:::-;13906:3;13927:67;13991:2;13986:3;13927:67;:::i;:::-;13920:74;;14003:93;14092:3;14003:93;:::i;:::-;14121:2;14116:3;14112:12;14105:19;;13764:366;;;:::o;14136:::-;14278:3;14299:67;14363:2;14358:3;14299:67;:::i;:::-;14292:74;;14375:93;14464:3;14375:93;:::i;:::-;14493:2;14488:3;14484:12;14477:19;;14136:366;;;:::o;14508:::-;14650:3;14671:67;14735:2;14730:3;14671:67;:::i;:::-;14664:74;;14747:93;14836:3;14747:93;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14508:366;;;:::o;14880:::-;15022:3;15043:67;15107:2;15102:3;15043:67;:::i;:::-;15036:74;;15119:93;15208:3;15119:93;:::i;:::-;15237:2;15232:3;15228:12;15221:19;;14880:366;;;:::o;15252:::-;15394:3;15415:67;15479:2;15474:3;15415:67;:::i;:::-;15408:74;;15491:93;15580:3;15491:93;:::i;:::-;15609:2;15604:3;15600:12;15593:19;;15252:366;;;:::o;15624:398::-;15783:3;15804:83;15885:1;15880:3;15804:83;:::i;:::-;15797:90;;15896:93;15985:3;15896:93;:::i;:::-;16014:1;16009:3;16005:11;15998:18;;15624:398;;;:::o;16028:366::-;16170:3;16191:67;16255:2;16250:3;16191:67;:::i;:::-;16184:74;;16267:93;16356:3;16267:93;:::i;:::-;16385:2;16380:3;16376:12;16369:19;;16028:366;;;:::o;16400:::-;16542:3;16563:67;16627:2;16622:3;16563:67;:::i;:::-;16556:74;;16639:93;16728:3;16639:93;:::i;:::-;16757:2;16752:3;16748:12;16741:19;;16400:366;;;:::o;16772:::-;16914:3;16935:67;16999:2;16994:3;16935:67;:::i;:::-;16928:74;;17011:93;17100:3;17011:93;:::i;:::-;17129:2;17124:3;17120:12;17113:19;;16772:366;;;:::o;17144:::-;17286:3;17307:67;17371:2;17366:3;17307:67;:::i;:::-;17300:74;;17383:93;17472:3;17383:93;:::i;:::-;17501:2;17496:3;17492:12;17485:19;;17144:366;;;:::o;17516:::-;17658:3;17679:67;17743:2;17738:3;17679:67;:::i;:::-;17672:74;;17755:93;17844:3;17755:93;:::i;:::-;17873:2;17868:3;17864:12;17857:19;;17516:366;;;:::o;17888:::-;18030:3;18051:67;18115:2;18110:3;18051:67;:::i;:::-;18044:74;;18127:93;18216:3;18127:93;:::i;:::-;18245:2;18240:3;18236:12;18229:19;;17888:366;;;:::o;18260:::-;18402:3;18423:67;18487:2;18482:3;18423:67;:::i;:::-;18416:74;;18499:93;18588:3;18499:93;:::i;:::-;18617:2;18612:3;18608:12;18601:19;;18260:366;;;:::o;18632:::-;18774:3;18795:67;18859:2;18854:3;18795:67;:::i;:::-;18788:74;;18871:93;18960:3;18871:93;:::i;:::-;18989:2;18984:3;18980:12;18973:19;;18632:366;;;:::o;19004:::-;19146:3;19167:67;19231:2;19226:3;19167:67;:::i;:::-;19160:74;;19243:93;19332:3;19243:93;:::i;:::-;19361:2;19356:3;19352:12;19345:19;;19004:366;;;:::o;19376:::-;19518:3;19539:67;19603:2;19598:3;19539:67;:::i;:::-;19532:74;;19615:93;19704:3;19615:93;:::i;:::-;19733:2;19728:3;19724:12;19717:19;;19376:366;;;:::o;19748:365::-;19890:3;19911:66;19975:1;19970:3;19911:66;:::i;:::-;19904:73;;19986:93;20075:3;19986:93;:::i;:::-;20104:2;20099:3;20095:12;20088:19;;19748:365;;;:::o;20119:366::-;20261:3;20282:67;20346:2;20341:3;20282:67;:::i;:::-;20275:74;;20358:93;20447:3;20358:93;:::i;:::-;20476:2;20471:3;20467:12;20460:19;;20119:366;;;:::o;20491:::-;20633:3;20654:67;20718:2;20713:3;20654:67;:::i;:::-;20647:74;;20730:93;20819:3;20730:93;:::i;:::-;20848:2;20843:3;20839:12;20832:19;;20491:366;;;:::o;20863:118::-;20950:24;20968:5;20950:24;:::i;:::-;20945:3;20938:37;20863:118;;:::o;20987:595::-;21215:3;21237:95;21328:3;21319:6;21237:95;:::i;:::-;21230:102;;21349:95;21440:3;21431:6;21349:95;:::i;:::-;21342:102;;21461:95;21552:3;21543:6;21461:95;:::i;:::-;21454:102;;21573:3;21566:10;;20987:595;;;;;;:::o;21588:379::-;21772:3;21794:147;21937:3;21794:147;:::i;:::-;21787:154;;21958:3;21951:10;;21588:379;;;:::o;21973:222::-;22066:4;22104:2;22093:9;22089:18;22081:26;;22117:71;22185:1;22174:9;22170:17;22161:6;22117:71;:::i;:::-;21973:222;;;;:::o;22201:640::-;22396:4;22434:3;22423:9;22419:19;22411:27;;22448:71;22516:1;22505:9;22501:17;22492:6;22448:71;:::i;:::-;22529:72;22597:2;22586:9;22582:18;22573:6;22529:72;:::i;:::-;22611;22679:2;22668:9;22664:18;22655:6;22611:72;:::i;:::-;22730:9;22724:4;22720:20;22715:2;22704:9;22700:18;22693:48;22758:76;22829:4;22820:6;22758:76;:::i;:::-;22750:84;;22201:640;;;;;;;:::o;22847:210::-;22934:4;22972:2;22961:9;22957:18;22949:26;;22985:65;23047:1;23036:9;23032:17;23023:6;22985:65;:::i;:::-;22847:210;;;;:::o;23063:313::-;23176:4;23214:2;23203:9;23199:18;23191:26;;23263:9;23257:4;23253:20;23249:1;23238:9;23234:17;23227:47;23291:78;23364:4;23355:6;23291:78;:::i;:::-;23283:86;;23063:313;;;;:::o;23382:419::-;23548:4;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23382:419;;;:::o;23807:::-;23973:4;24011:2;24000:9;23996:18;23988:26;;24060:9;24054:4;24050:20;24046:1;24035:9;24031:17;24024:47;24088:131;24214:4;24088:131;:::i;:::-;24080:139;;23807:419;;;:::o;24232:::-;24398:4;24436:2;24425:9;24421:18;24413:26;;24485:9;24479:4;24475:20;24471:1;24460:9;24456:17;24449:47;24513:131;24639:4;24513:131;:::i;:::-;24505:139;;24232:419;;;:::o;24657:::-;24823:4;24861:2;24850:9;24846:18;24838:26;;24910:9;24904:4;24900:20;24896:1;24885:9;24881:17;24874:47;24938:131;25064:4;24938:131;:::i;:::-;24930:139;;24657:419;;;:::o;25082:::-;25248:4;25286:2;25275:9;25271:18;25263:26;;25335:9;25329:4;25325:20;25321:1;25310:9;25306:17;25299:47;25363:131;25489:4;25363:131;:::i;:::-;25355:139;;25082:419;;;:::o;25507:::-;25673:4;25711:2;25700:9;25696:18;25688:26;;25760:9;25754:4;25750:20;25746:1;25735:9;25731:17;25724:47;25788:131;25914:4;25788:131;:::i;:::-;25780:139;;25507:419;;;:::o;25932:::-;26098:4;26136:2;26125:9;26121:18;26113:26;;26185:9;26179:4;26175:20;26171:1;26160:9;26156:17;26149:47;26213:131;26339:4;26213:131;:::i;:::-;26205:139;;25932:419;;;:::o;26357:::-;26523:4;26561:2;26550:9;26546:18;26538:26;;26610:9;26604:4;26600:20;26596:1;26585:9;26581:17;26574:47;26638:131;26764:4;26638:131;:::i;:::-;26630:139;;26357:419;;;:::o;26782:::-;26948:4;26986:2;26975:9;26971:18;26963:26;;27035:9;27029:4;27025:20;27021:1;27010:9;27006:17;26999:47;27063:131;27189:4;27063:131;:::i;:::-;27055:139;;26782:419;;;:::o;27207:::-;27373:4;27411:2;27400:9;27396:18;27388:26;;27460:9;27454:4;27450:20;27446:1;27435:9;27431:17;27424:47;27488:131;27614:4;27488:131;:::i;:::-;27480:139;;27207:419;;;:::o;27632:::-;27798:4;27836:2;27825:9;27821:18;27813:26;;27885:9;27879:4;27875:20;27871:1;27860:9;27856:17;27849:47;27913:131;28039:4;27913:131;:::i;:::-;27905:139;;27632:419;;;:::o;28057:::-;28223:4;28261:2;28250:9;28246:18;28238:26;;28310:9;28304:4;28300:20;28296:1;28285:9;28281:17;28274:47;28338:131;28464:4;28338:131;:::i;:::-;28330:139;;28057:419;;;:::o;28482:::-;28648:4;28686:2;28675:9;28671:18;28663:26;;28735:9;28729:4;28725:20;28721:1;28710:9;28706:17;28699:47;28763:131;28889:4;28763:131;:::i;:::-;28755:139;;28482:419;;;:::o;28907:::-;29073:4;29111:2;29100:9;29096:18;29088:26;;29160:9;29154:4;29150:20;29146:1;29135:9;29131:17;29124:47;29188:131;29314:4;29188:131;:::i;:::-;29180:139;;28907:419;;;:::o;29332:::-;29498:4;29536:2;29525:9;29521:18;29513:26;;29585:9;29579:4;29575:20;29571:1;29560:9;29556:17;29549:47;29613:131;29739:4;29613:131;:::i;:::-;29605:139;;29332:419;;;:::o;29757:::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:::-;30348:4;30386:2;30375:9;30371:18;30363:26;;30435:9;30429:4;30425:20;30421:1;30410:9;30406:17;30399:47;30463:131;30589:4;30463:131;:::i;:::-;30455:139;;30182:419;;;:::o;30607:::-;30773:4;30811:2;30800:9;30796:18;30788:26;;30860:9;30854:4;30850:20;30846:1;30835:9;30831:17;30824:47;30888:131;31014:4;30888:131;:::i;:::-;30880:139;;30607:419;;;:::o;31032:::-;31198:4;31236:2;31225:9;31221:18;31213:26;;31285:9;31279:4;31275:20;31271:1;31260:9;31256:17;31249:47;31313:131;31439:4;31313:131;:::i;:::-;31305:139;;31032:419;;;:::o;31457:::-;31623:4;31661:2;31650:9;31646:18;31638:26;;31710:9;31704:4;31700:20;31696:1;31685:9;31681:17;31674:47;31738:131;31864:4;31738:131;:::i;:::-;31730:139;;31457:419;;;:::o;31882:::-;32048:4;32086:2;32075:9;32071:18;32063:26;;32135:9;32129:4;32125:20;32121:1;32110:9;32106:17;32099:47;32163:131;32289:4;32163:131;:::i;:::-;32155:139;;31882:419;;;:::o;32307:::-;32473:4;32511:2;32500:9;32496:18;32488:26;;32560:9;32554:4;32550:20;32546:1;32535:9;32531:17;32524:47;32588:131;32714:4;32588:131;:::i;:::-;32580:139;;32307:419;;;:::o;32732:::-;32898:4;32936:2;32925:9;32921:18;32913:26;;32985:9;32979:4;32975:20;32971:1;32960:9;32956:17;32949:47;33013:131;33139:4;33013:131;:::i;:::-;33005:139;;32732:419;;;:::o;33157:::-;33323:4;33361:2;33350:9;33346:18;33338:26;;33410:9;33404:4;33400:20;33396:1;33385:9;33381:17;33374:47;33438:131;33564:4;33438:131;:::i;:::-;33430:139;;33157:419;;;:::o;33582:::-;33748:4;33786:2;33775:9;33771:18;33763:26;;33835:9;33829:4;33825:20;33821:1;33810:9;33806:17;33799:47;33863:131;33989:4;33863:131;:::i;:::-;33855:139;;33582:419;;;:::o;34007:::-;34173:4;34211:2;34200:9;34196:18;34188:26;;34260:9;34254:4;34250:20;34246:1;34235:9;34231:17;34224:47;34288:131;34414:4;34288:131;:::i;:::-;34280:139;;34007:419;;;:::o;34432:::-;34598:4;34636:2;34625:9;34621:18;34613:26;;34685:9;34679:4;34675:20;34671:1;34660:9;34656:17;34649:47;34713:131;34839:4;34713:131;:::i;:::-;34705:139;;34432:419;;;:::o;34857:::-;35023:4;35061:2;35050:9;35046:18;35038:26;;35110:9;35104:4;35100:20;35096:1;35085:9;35081:17;35074:47;35138:131;35264:4;35138:131;:::i;:::-;35130:139;;34857:419;;;:::o;35282:::-;35448:4;35486:2;35475:9;35471:18;35463:26;;35535:9;35529:4;35525:20;35521:1;35510:9;35506:17;35499:47;35563:131;35689:4;35563:131;:::i;:::-;35555:139;;35282:419;;;:::o;35707:222::-;35800:4;35838:2;35827:9;35823:18;35815:26;;35851:71;35919:1;35908:9;35904:17;35895:6;35851:71;:::i;:::-;35707:222;;;;:::o;35935:129::-;35969:6;35996:20;;:::i;:::-;35986:30;;36025:33;36053:4;36045:6;36025:33;:::i;:::-;35935:129;;;:::o;36070:75::-;36103:6;36136:2;36130:9;36120:19;;36070:75;:::o;36151:307::-;36212:4;36302:18;36294:6;36291:30;36288:56;;;36324:18;;:::i;:::-;36288:56;36362:29;36384:6;36362:29;:::i;:::-;36354:37;;36446:4;36440;36436:15;36428:23;;36151:307;;;:::o;36464:308::-;36526:4;36616:18;36608:6;36605:30;36602:56;;;36638:18;;:::i;:::-;36602:56;36676:29;36698:6;36676:29;:::i;:::-;36668:37;;36760:4;36754;36750:15;36742:23;;36464:308;;;:::o;36778:98::-;36829:6;36863:5;36857:12;36847:22;;36778:98;;;:::o;36882:99::-;36934:6;36968:5;36962:12;36952:22;;36882:99;;;:::o;36987:168::-;37070:11;37104:6;37099:3;37092:19;37144:4;37139:3;37135:14;37120:29;;36987:168;;;;:::o;37161:147::-;37262:11;37299:3;37284:18;;37161:147;;;;:::o;37314:169::-;37398:11;37432:6;37427:3;37420:19;37472:4;37467:3;37463:14;37448:29;;37314:169;;;;:::o;37489:148::-;37591:11;37628:3;37613:18;;37489:148;;;;:::o;37643:273::-;37683:3;37702:20;37720:1;37702:20;:::i;:::-;37697:25;;37736:20;37754:1;37736:20;:::i;:::-;37731:25;;37858:1;37822:34;37818:42;37815:1;37812:49;37809:75;;;37864:18;;:::i;:::-;37809:75;37908:1;37905;37901:9;37894:16;;37643:273;;;;:::o;37922:305::-;37962:3;37981:20;37999:1;37981:20;:::i;:::-;37976:25;;38015:20;38033:1;38015:20;:::i;:::-;38010:25;;38169:1;38101:66;38097:74;38094:1;38091:81;38088:107;;;38175:18;;:::i;:::-;38088:107;38219:1;38216;38212:9;38205:16;;37922:305;;;;:::o;38233:185::-;38273:1;38290:20;38308:1;38290:20;:::i;:::-;38285:25;;38324:20;38342:1;38324:20;:::i;:::-;38319:25;;38363:1;38353:35;;38368:18;;:::i;:::-;38353:35;38410:1;38407;38403:9;38398:14;;38233:185;;;;:::o;38424:348::-;38464:7;38487:20;38505:1;38487:20;:::i;:::-;38482:25;;38521:20;38539:1;38521:20;:::i;:::-;38516:25;;38709:1;38641:66;38637:74;38634:1;38631:81;38626:1;38619:9;38612:17;38608:105;38605:131;;;38716:18;;:::i;:::-;38605:131;38764:1;38761;38757:9;38746:20;;38424:348;;;;:::o;38778:191::-;38818:4;38838:20;38856:1;38838:20;:::i;:::-;38833:25;;38872:20;38890:1;38872:20;:::i;:::-;38867:25;;38911:1;38908;38905:8;38902:34;;;38916:18;;:::i;:::-;38902:34;38961:1;38958;38954:9;38946:17;;38778:191;;;;:::o;38975:::-;39015:4;39035:20;39053:1;39035:20;:::i;:::-;39030:25;;39069:20;39087:1;39069:20;:::i;:::-;39064:25;;39108:1;39105;39102:8;39099:34;;;39113:18;;:::i;:::-;39099:34;39158:1;39155;39151:9;39143:17;;38975:191;;;;:::o;39172:96::-;39209:7;39238:24;39256:5;39238:24;:::i;:::-;39227:35;;39172:96;;;:::o;39274:90::-;39308:7;39351:5;39344:13;39337:21;39326:32;;39274:90;;;:::o;39370:149::-;39406:7;39446:66;39439:5;39435:78;39424:89;;39370:149;;;:::o;39525:118::-;39562:7;39602:34;39595:5;39591:46;39580:57;;39525:118;;;:::o;39649:126::-;39686:7;39726:42;39719:5;39715:54;39704:65;;39649:126;;;:::o;39781:77::-;39818:7;39847:5;39836:16;;39781:77;;;:::o;39864:154::-;39948:6;39943:3;39938;39925:30;40010:1;40001:6;39996:3;39992:16;39985:27;39864:154;;;:::o;40024:307::-;40092:1;40102:113;40116:6;40113:1;40110:13;40102:113;;;40201:1;40196:3;40192:11;40186:18;40182:1;40177:3;40173:11;40166:39;40138:2;40135:1;40131:10;40126:15;;40102:113;;;40233:6;40230:1;40227:13;40224:101;;;40313:1;40304:6;40299:3;40295:16;40288:27;40224:101;40073:258;40024:307;;;:::o;40337:171::-;40376:3;40399:24;40417:5;40399:24;:::i;:::-;40390:33;;40445:4;40438:5;40435:15;40432:41;;;40453:18;;:::i;:::-;40432:41;40500:1;40493:5;40489:13;40482:20;;40337:171;;;:::o;40514:320::-;40558:6;40595:1;40589:4;40585:12;40575:22;;40642:1;40636:4;40632:12;40663:18;40653:81;;40719:4;40711:6;40707:17;40697:27;;40653:81;40781:2;40773:6;40770:14;40750:18;40747:38;40744:84;;;40800:18;;:::i;:::-;40744:84;40565:269;40514:320;;;:::o;40840:281::-;40923:27;40945:4;40923:27;:::i;:::-;40915:6;40911:40;41053:6;41041:10;41038:22;41017:18;41005:10;41002:34;40999:62;40996:88;;;41064:18;;:::i;:::-;40996:88;41104:10;41100:2;41093:22;40883:238;40840:281;;:::o;41127:233::-;41166:3;41189:24;41207:5;41189:24;:::i;:::-;41180:33;;41235:66;41228:5;41225:77;41222:103;;;41305:18;;:::i;:::-;41222:103;41352:1;41345:5;41341:13;41334:20;;41127:233;;;:::o;41366:176::-;41398:1;41415:20;41433:1;41415:20;:::i;:::-;41410:25;;41449:20;41467:1;41449:20;:::i;:::-;41444:25;;41488:1;41478:35;;41493:18;;:::i;:::-;41478:35;41534:1;41531;41527:9;41522:14;;41366:176;;;;:::o;41548:180::-;41596:77;41593:1;41586:88;41693:4;41690:1;41683:15;41717:4;41714:1;41707:15;41734:180;41782:77;41779:1;41772:88;41879:4;41876:1;41869:15;41903:4;41900:1;41893:15;41920:180;41968:77;41965:1;41958:88;42065:4;42062:1;42055:15;42089:4;42086:1;42079:15;42106:180;42154:77;42151:1;42144:88;42251:4;42248:1;42241:15;42275:4;42272:1;42265:15;42292:180;42340:77;42337:1;42330:88;42437:4;42434:1;42427:15;42461:4;42458:1;42451:15;42478:117;42587:1;42584;42577:12;42601:117;42710:1;42707;42700:12;42724:117;42833:1;42830;42823:12;42847:117;42956:1;42953;42946:12;42970:117;43079:1;43076;43069:12;43093:117;43202:1;43199;43192:12;43216:102;43257:6;43308:2;43304:7;43299:2;43292:5;43288:14;43284:28;43274:38;;43216:102;;;:::o;43324:221::-;43464:34;43460:1;43452:6;43448:14;43441:58;43533:4;43528:2;43520:6;43516:15;43509:29;43324:221;:::o;43551:181::-;43691:33;43687:1;43679:6;43675:14;43668:57;43551:181;:::o;43738:165::-;43878:17;43874:1;43866:6;43862:14;43855:41;43738:165;:::o;43909:229::-;44049:34;44045:1;44037:6;44033:14;44026:58;44118:12;44113:2;44105:6;44101:15;44094:37;43909:229;:::o;44144:222::-;44284:34;44280:1;44272:6;44268:14;44261:58;44353:5;44348:2;44340:6;44336:15;44329:30;44144:222;:::o;44372:224::-;44512:34;44508:1;44500:6;44496:14;44489:58;44581:7;44576:2;44568:6;44564:15;44557:32;44372:224;:::o;44602:163::-;44742:15;44738:1;44730:6;44726:14;44719:39;44602:163;:::o;44771:244::-;44911:34;44907:1;44899:6;44895:14;44888:58;44980:27;44975:2;44967:6;44963:15;44956:52;44771:244;:::o;45021:174::-;45161:26;45157:1;45149:6;45145:14;45138:50;45021:174;:::o;45201:230::-;45341:34;45337:1;45329:6;45325:14;45318:58;45410:13;45405:2;45397:6;45393:15;45386:38;45201:230;:::o;45437:225::-;45577:34;45573:1;45565:6;45561:14;45554:58;45646:8;45641:2;45633:6;45629:15;45622:33;45437:225;:::o;45668:167::-;45808:19;45804:1;45796:6;45792:14;45785:43;45668:167;:::o;45841:176::-;45981:28;45977:1;45969:6;45965:14;45958:52;45841:176;:::o;46023:237::-;46163:34;46159:1;46151:6;46147:14;46140:58;46232:20;46227:2;46219:6;46215:15;46208:45;46023:237;:::o;46266:163::-;46406:15;46402:1;46394:6;46390:14;46383:39;46266:163;:::o;46435:221::-;46575:34;46571:1;46563:6;46559:14;46552:58;46644:4;46639:2;46631:6;46627:15;46620:29;46435:221;:::o;46662:114::-;;:::o;46782:168::-;46922:20;46918:1;46910:6;46906:14;46899:44;46782:168;:::o;46956:238::-;47096:34;47092:1;47084:6;47080:14;47073:58;47165:21;47160:2;47152:6;47148:15;47141:46;46956:238;:::o;47200:179::-;47340:31;47336:1;47328:6;47324:14;47317:55;47200:179;:::o;47385:166::-;47525:18;47521:1;47513:6;47509:14;47502:42;47385:166;:::o;47557:220::-;47697:34;47693:1;47685:6;47681:14;47674:58;47766:3;47761:2;47753:6;47749:15;47742:28;47557:220;:::o;47783:165::-;47923:17;47919:1;47911:6;47907:14;47900:41;47783:165;:::o;47954:166::-;48094:18;48090:1;48082:6;48078:14;48071:42;47954:166;:::o;48126:233::-;48266:34;48262:1;48254:6;48250:14;48243:58;48335:16;48330:2;48322:6;48318:15;48311:41;48126:233;:::o;48365:225::-;48505:34;48501:1;48493:6;48489:14;48482:58;48574:8;48569:2;48561:6;48557:15;48550:33;48365:225;:::o;48596:234::-;48736:34;48732:1;48724:6;48720:14;48713:58;48805:17;48800:2;48792:6;48788:15;48781:42;48596:234;:::o;48836:159::-;48976:11;48972:1;48964:6;48960:14;48953:35;48836:159;:::o;49001:232::-;49141:34;49137:1;49129:6;49125:14;49118:58;49210:15;49205:2;49197:6;49193:15;49186:40;49001:232;:::o;49239:221::-;49379:34;49375:1;49367:6;49363:14;49356:58;49448:4;49443:2;49435:6;49431:15;49424:29;49239:221;:::o;49466:122::-;49539:24;49557:5;49539:24;:::i;:::-;49532:5;49529:35;49519:63;;49578:1;49575;49568:12;49519:63;49466:122;:::o;49594:116::-;49664:21;49679:5;49664:21;:::i;:::-;49657:5;49654:32;49644:60;;49700:1;49697;49690:12;49644:60;49594:116;:::o;49716:120::-;49788:23;49805:5;49788:23;:::i;:::-;49781:5;49778:34;49768:62;;49826:1;49823;49816:12;49768:62;49716:120;:::o;49842:122::-;49915:24;49933:5;49915:24;:::i;:::-;49908:5;49905:35;49895:63;;49954:1;49951;49944:12;49895:63;49842:122;:::o

Swarm Source

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