ETH Price: $3,113.02 (+1.22%)
Gas: 5 Gwei

Token

MEKAZUKI Genesis (MKZ!)
 

Overview

Max Total Supply

3,887 MKZ!

Holders

328

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
21 MKZ!
0xdc49BEA6f527E7C889969c9380C5232cEa90a3Ed
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MEKAZUKI2

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

//███╗░░░███╗███████╗██╗░░██╗░█████╗░███████╗██╗░░░██╗██╗░░██╗██╗
//████╗░████║██╔════╝██║░██╔╝██╔══██╗╚════██║██║░░░██║██║░██╔╝██║
//██╔████╔██║█████╗░░█████═╝░███████║░░███╔═╝██║░░░██║█████═╝░██║
//██║╚██╔╝██║██╔══╝░░██╔═██╗░██╔══██║██╔══╝░░██║░░░██║██╔═██╗░██║
//██║░╚═╝░██║███████╗██║░╚██╗██║░░██║███████╗╚██████╔╝██║░╚██╗██║
//╚═╝░░░░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚═╝╚══════╝░╚═════╝░╚═╝░░╚═╝╚═╝ REBOOTED


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

interface IERC721 is IERC165 {
    //@dev Emitted when `tokenId` token is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    //@dev Returns the number of tokens in ``owner``'s account.
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from,address to,uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    //@dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface IERC721Metadata is IERC721 {
    //@dev Returns the token collection name.
    function name() external view returns (string memory);

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory);

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Addr: cant send val, rcpt revert");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Addr: low-level call value fail");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Addr: insufficient balance call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Addr: low-level static call fail");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Addr: static call non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Addr: low-level del call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Addr: delegate call 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
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is 0x address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract Functional {
    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);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

contract ERC721 {
    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{}
    
    //Added for Mekazuki contract functionality
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId){}
    
}

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract MEKAZUKI2 is IERC721, Ownable, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Specific Functionality
    bool public mintActive;
    uint256 public price;
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerTxn;
    uint256 public mintStart;
    
    address public BURN_WALLET;
    
    //whitelist for holders
    ERC721 OGContract; ///Define interaction contract

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "MEKAZUKI Genesis";
        _symbol = "MKZ!";
        _baseURI = "https://mekazuki.me/metadata/";
        
        OGContract = ERC721(0x84845C3b92656c3459f8D704dfBC6a3830A94fe3);  //MEKAZUKI MAINNET
        BURN_WALLET = 0x000000000000000000000000000000000000dEaD;
        
        totalTokens = 5001;
        price = 20 * (10 ** 15); // Replace leading value with price in finney
        
        maxPerTxn = 20;
        mintStart = 3411; // Defines the position that we will start minting if that feature is opened.
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == MEKAZUKI2.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function airDrop(address[] memory _to) external onlyOwner {
        uint256 qty = _to.length;
        require((numberMinted + mintStart + qty) > numberMinted, "Math overflow error");
        require((numberMinted + mintStart + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted + mintStart;
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to[i], mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function migrate(uint256 OGtokenId) external reentryLock {
        require(OGtokenId <= 3411);
    	OGContract.transferFrom(_msgSender(), BURN_WALLET, OGtokenId);
        _safeMint(_msgSender(), OGtokenId);    	
    }
    
    function migrateAll() external reentryLock {
    	uint256 numTokens = OGContract.balanceOf(_msgSender());
    	for(uint256 i = 0; i < numTokens; i++){
    		uint256 transferToken = OGContract.tokenOfOwnerByIndex(_msgSender(), 0);
            if (transferToken <= 3411){
    		    OGContract.transferFrom(_msgSender(), BURN_WALLET, transferToken);
                _safeMint(_msgSender(), transferToken);
            }
    	}
    }
    
    function mint(uint256 qty) external payable reentryLock {
        address _to = _msgSender();
        require(mintActive, "Mint not available.");
        require(msg.value == qty * price, "Mint: Insufficient Funds");
        require(qty <= maxPerTxn, "Mint: Above Trxn Threshold!");
        require((qty + mintStart + numberMinted) <= totalTokens, "Mint: Not enough avaialability");
        
        uint256 mintSeedValue = numberMinted + mintStart; //Start minting at the right spot
        numberMinted += qty;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    function setOGContract(address newContract) external onlyOwner {
        OGContract = ERC721(newContract);
    }

    function setMintStart(uint256 mintStartNewValue) external onlyOwner {
    	mintStart = mintStartNewValue;
    }
    
    function setMaxMintThreshold(uint256 maxMints) external onlyOwner {
        maxPerTxn = maxMints;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted + mintStart; //stupid bs for etherscan's call
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: bal qry for zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: own query nonexist tkn");
        return owner;
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval current owner");

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "txfr to non ERC721Reciever");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: op query nonexistent tkn");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    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);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ownerOf(tokenId) == from, "ERC721: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 address");
        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "Nonexistent Token ID");
        string memory tokenuri;
        
        tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
        return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

    receive() external payable {}
    
    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BURN_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"OGtokenId","type":"uint256"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintStart","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":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxMintThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintStartNewValue","type":"uint256"}],"name":"setMintStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newContract","type":"address"}],"name":"setOGContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c62000040620001fc60201b60201c565b6200020460201b60201c565b6040518060400160405280601081526020017f4d454b415a554b492047656e65736973000000000000000000000000000000008152506001908051906020019062000099929190620002c8565b506040518060400160405280600481526020017f4d4b5a210000000000000000000000000000000000000000000000000000000081525060029080519060200190620000e7929190620002c8565b506040518060400160405280601d81526020017f68747470733a2f2f6d656b617a756b692e6d652f6d657461646174612f0000008152506003908051906020019062000135929190620002c8565b507384845c3b92656c3459f8d704dfbc6a3830a94fe3600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611389600a8190555066470de4df8200006009819055506014600c81905550610d53600d81905550620003dd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d69062000378565b90600052602060002090601f016020900481019282620002fa576000855562000346565b82601f106200031557805160ff191683800117855562000346565b8280016001018555821562000346579182015b828111156200034557825182559160200191906001019062000328565b5b50905062000355919062000359565b5090565b5b80821115620003745760008160009055506001016200035a565b5090565b600060028204905060018216806200039157607f821691505b60208210811415620003a857620003a7620003ae565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61487a80620003ed6000396000f3fe60806040526004361061023e5760003560e01c80636352211e1161012e578063a22cb465116100ab578063d78c06fa1161006f578063d78c06fa14610809578063deca6da114610832578063e8a3d4851461085b578063e985e9c514610886578063f2fde38b146108c357610245565b8063a22cb4651461073a578063b0b9226314610763578063b88d4fde1461078c578063c87b56dd146107b5578063c91c0462146107f257610245565b80638da5cb5b116100f25780638da5cb5b1461067457806391b7f5ed1461069f57806395d89b41146106c8578063a035b1fe146106f3578063a0712d681461071e57610245565b80636352211e1461058f57806370a08231146105cc578063715018a6146106095780637960c27f146106205780637e1c0c091461064957610245565b806327060b2b116101bc57806342966c681161018057806342966c68146104d2578063454b0608146104fb57806349a772b5146105245780634a77f8701461054f57806355f804b31461056657610245565b806327060b2b146104255780632e56f71e146104505780633cb51994146104675780633ccfd60b1461049257806342842e0e146104a957610245565b8063150b7a0211610203578063150b7a021461033e57806318160ddd1461037b57806323b872dd146103a6578063255e4685146103cf57806325fd90f3146103fa57610245565b8062b6849f1461024757806301ffc9a71461027057806306fdde03146102ad578063081812fc146102d8578063095ea7b31461031557610245565b3661024557005b005b34801561025357600080fd5b5061026e600480360381019061026991906133cd565b6108ec565b005b34801561027c57600080fd5b5061029760048036038101906102929190613416565b610aaa565b6040516102a49190613b5e565b60405180910390f35b3480156102b957600080fd5b506102c2610c33565b6040516102cf9190613b94565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa91906134b9565b610cc5565b60405161030c9190613a97565b60405180910390f35b34801561032157600080fd5b5061033c6004803603810190610337919061338d565b610d4a565b005b34801561034a57600080fd5b5061036560048036038101906103609190613242565b610e54565b6040516103729190613b79565b60405180910390f35b34801561038757600080fd5b50610390610e69565b60405161039d9190613eb6565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906131ef565b610e80565b005b3480156103db57600080fd5b506103e4610ed9565b6040516103f19190613eb6565b60405180910390f35b34801561040657600080fd5b5061040f610edf565b60405161041c9190613b5e565b60405180910390f35b34801561043157600080fd5b5061043a610ef2565b6040516104479190613a97565b60405180910390f35b34801561045c57600080fd5b50610465610f18565b005b34801561047357600080fd5b5061047c610fb1565b6040516104899190613eb6565b60405180910390f35b34801561049e57600080fd5b506104a7610fb7565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906131ef565b6110e8565b005b3480156104de57600080fd5b506104f960048036038101906104f491906134b9565b611108565b005b34801561050757600080fd5b50610522600480360381019061051d91906134b9565b61115b565b005b34801561053057600080fd5b506105396112bd565b6040516105469190613eb6565b60405180910390f35b34801561055b57600080fd5b506105646112c3565b005b34801561057257600080fd5b5061058d60048036038101906105889190613470565b6115af565b005b34801561059b57600080fd5b506105b660048036038101906105b191906134b9565b611645565b6040516105c39190613a97565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190613182565b6116f7565b6040516106009190613eb6565b60405180910390f35b34801561061557600080fd5b5061061e6117af565b005b34801561062c57600080fd5b50610647600480360381019061064291906134b9565b611837565b005b34801561065557600080fd5b5061065e6118bd565b60405161066b9190613eb6565b60405180910390f35b34801561068057600080fd5b506106896118c3565b6040516106969190613a97565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906134b9565b6118ec565b005b3480156106d457600080fd5b506106dd611972565b6040516106ea9190613b94565b60405180910390f35b3480156106ff57600080fd5b50610708611a04565b6040516107159190613eb6565b60405180910390f35b610738600480360381019061073391906134b9565b611a0a565b005b34801561074657600080fd5b50610761600480360381019061075c919061334d565b611c43565b005b34801561076f57600080fd5b5061078a600480360381019061078591906134b9565b611daf565b005b34801561079857600080fd5b506107b360048036038101906107ae91906132ca565b611e35565b005b3480156107c157600080fd5b506107dc60048036038101906107d791906134b9565b611e90565b6040516107e99190613b94565b60405180910390f35b3480156107fe57600080fd5b50610807611f12565b005b34801561081557600080fd5b50610830600480360381019061082b91906134b9565b611fab565b005b34801561083e57600080fd5b5061085960048036038101906108549190613182565b612031565b005b34801561086757600080fd5b506108706120f1565b60405161087d9190613b94565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906131af565b612119565b6040516108ba9190613b5e565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190613182565b6121ad565b005b6108f46122a5565b73ffffffffffffffffffffffffffffffffffffffff166109126118c3565b73ffffffffffffffffffffffffffffffffffffffff1614610968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095f90613dd6565b60405180910390fd5b600081519050600b5481600d54600b546109829190613fe7565b61098c9190613fe7565b116109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c390613e96565b60405180910390fd5b600a5481600d54600b546109e09190613fe7565b6109ea9190613fe7565b1115610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2290613d16565b60405180910390fd5b6000600d54600b54610a3d9190613fe7565b905060005b82811015610aa457610a79848281518110610a6057610a5f61432e565b5b60200260200101518284610a749190613fe7565b6122ad565b600b6000815480929190610a8c90614227565b91905055508080610a9c90614227565b915050610a42565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610c42906141c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e906141c4565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050505050905090565b6000610cd0826122cb565b610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690613c36565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d5582611645565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613c56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e065750610e058133612119565b5b610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c90613d36565b60405180910390fd5b610e4f8383612337565b505050565b600063150b7a0260e01b905095945050505050565b6000600d54600b54610e7b9190613fe7565b905090565b610e8a33826123f0565b610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613e16565b60405180910390fd5b610ed48383836124ce565b505050565b600d5481565b600860009054906101000a900460ff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f206122a5565b73ffffffffffffffffffffffffffffffffffffffff16610f3e6118c3565b73ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90613dd6565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b600c5481565b610fbf6122a5565b73ffffffffffffffffffffffffffffffffffffffff16610fdd6118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613dd6565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161105e90613a82565b60006040518083038185875af1925050503d806000811461109b576040519150601f19603f3d011682016040523d82523d6000602084013e6110a0565b606091505b50509050806110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613c76565b60405180910390fd5b5050565b61110383838360405180602001604052806000815250611e35565b505050565b61111181611645565b73ffffffffffffffffffffffffffffffffffffffff1661112f6122a5565b73ffffffffffffffffffffffffffffffffffffffff161461114f57600080fd5b6111588161272a565b50565b600060149054906101000a900460ff16156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290613d56565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550610d538111156111d557600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61121b6122a5565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161125d93929190613ab2565b600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050506112a061129a6122a5565b826122ad565b60008060146101000a81548160ff02191690831515021790555050565b600b5481565b600060149054906101000a900460ff1615611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613d56565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316113766122a5565b6040518263ffffffff1660e01b81526004016113929190613a97565b60206040518083038186803b1580156113aa57600080fd5b505afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e291906134e6565b905060005b81811015611591576000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596114376122a5565b60006040518363ffffffff1660e01b8152600401611456929190613b35565b60206040518083038186803b15801561146e57600080fd5b505afa158015611482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a691906134e6565b9050610d53811161157d57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6114f76122a5565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161153993929190613ab2565b600060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b5050505061157c6115766122a5565b826122ad565b5b50808061158990614227565b9150506113e7565b505060008060146101000a81548160ff021916908315150217905550565b6115b76122a5565b73ffffffffffffffffffffffffffffffffffffffff166115d56118c3565b73ffffffffffffffffffffffffffffffffffffffff161461162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290613dd6565b60405180910390fd5b8060039080519060200190611641929190612e8d565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613cd6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90613d96565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117b76122a5565b73ffffffffffffffffffffffffffffffffffffffff166117d56118c3565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613dd6565b60405180910390fd5b611835600061283b565b565b61183f6122a5565b73ffffffffffffffffffffffffffffffffffffffff1661185d6118c3565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613dd6565b60405180910390fd5b80600d8190555050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118f46122a5565b73ffffffffffffffffffffffffffffffffffffffff166119126118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90613dd6565b60405180910390fd5b8060098190555050565b606060028054611981906141c4565b80601f01602080910402602001604051908101604052809291908181526020018280546119ad906141c4565b80156119fa5780601f106119cf576101008083540402835291602001916119fa565b820191906000526020600020905b8154815290600101906020018083116119dd57829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190613d56565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611a7f6122a5565b9050600860009054906101000a900460ff16611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790613e76565b60405180910390fd5b60095482611ade919061406e565b3414611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1690613df6565b60405180910390fd5b600c54821115611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613e36565b60405180910390fd5b600a54600b54600d5484611b789190613fe7565b611b829190613fe7565b1115611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90613bb6565b60405180910390fd5b6000600d54600b54611bd59190613fe7565b905082600b6000828254611be99190613fe7565b9250508190555060005b83811015611c2357611c10838284611c0b9190613fe7565b6122ad565b8080611c1b90614227565b915050611bf3565b50505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca990613cb6565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611da39190613b5e565b60405180910390a35050565b611db76122a5565b73ffffffffffffffffffffffffffffffffffffffff16611dd56118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2290613dd6565b60405180910390fd5b80600a8190555050565b611e3f33836123f0565b611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590613e16565b60405180910390fd5b611e8a848484846128ff565b50505050565b6060611e9b826122cb565b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613e56565b60405180910390fd5b60606003611ee78461295b565b604051602001611ef8929190613a31565b604051602081830303815290604052905080915050919050565b611f1a6122a5565b73ffffffffffffffffffffffffffffffffffffffff16611f386118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590613dd6565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b611fb36122a5565b73ffffffffffffffffffffffffffffffffffffffff16611fd16118c3565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90613dd6565b60405180910390fd5b80600c8190555050565b6120396122a5565b73ffffffffffffffffffffffffffffffffffffffff166120576118c3565b73ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490613dd6565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060036040516020016121059190613a60565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121b56122a5565b73ffffffffffffffffffffffffffffffffffffffff166121d36118c3565b73ffffffffffffffffffffffffffffffffffffffff1614612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090613c96565b60405180910390fd5b6122a28161283b565b50565b600033905090565b6122c7828260405180602001604052806000815250612abc565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123aa83611645565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123fb826122cb565b61243a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243190613bd6565b60405180910390fd5b600061244583611645565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124b457508373ffffffffffffffffffffffffffffffffffffffff1661249c84610cc5565b73ffffffffffffffffffffffffffffffffffffffff16145b806124c557506124c48185612119565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124ee82611645565b73ffffffffffffffffffffffffffffffffffffffff1614612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b90613db6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90613bf6565b60405180910390fd5b6125bf838383612b17565b6125ca600082612337565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261a91906140c8565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126719190613fe7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061273582611645565b905061274381600084612b17565b61274e600083612337565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279e91906140c8565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61290a8484846124ce565b61291684848484612b1c565b612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c90613cf6565b60405180910390fd5b50505050565b606060008214156129a3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ab7565b600082905060005b600082146129d55780806129be90614227565b915050600a826129ce919061403d565b91506129ab565b60008167ffffffffffffffff8111156129f1576129f061435d565b5b6040519080825280601f01601f191660200182016040528015612a235781602001600182028036833780820191505090505b5090505b60008514612ab057600182612a3c91906140c8565b9150600a85612a4b9190614270565b6030612a579190613fe7565b60f81b818381518110612a6d57612a6c61432e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa9919061403d565b9450612a27565b8093505050505b919050565b612ac68383612cac565b612ad36000848484612b1c565b612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990613cf6565b60405180910390fd5b505050565b505050565b6000612b3d8473ffffffffffffffffffffffffffffffffffffffff16612e7a565b15612c9f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612b819493929190613ae9565b602060405180830381600087803b158015612b9b57600080fd5b505af1925050508015612bcc57506040513d601f19601f82011682018060405250810190612bc99190613443565b60015b612c4f573d8060008114612bfc576040519150601f19603f3d011682016040523d82523d6000602084013e612c01565b606091505b50600081511415612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90613cf6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ca4565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390613d76565b60405180910390fd5b612d25816122cb565b15612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90613c16565b60405180910390fd5b612d7160008383612b17565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc19190613fe7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e99906141c4565b90600052602060002090601f016020900481019282612ebb5760008555612f02565b82601f10612ed457805160ff1916838001178555612f02565b82800160010185558215612f02579182015b82811115612f01578251825591602001919060010190612ee6565b5b509050612f0f9190612f13565b5090565b5b80821115612f2c576000816000905550600101612f14565b5090565b6000612f43612f3e84613ef6565b613ed1565b90508083825260208201905082856020860282011115612f6657612f65614396565b5b60005b85811015612f965781612f7c8882613024565b845260208401935060208301925050600181019050612f69565b5050509392505050565b6000612fb3612fae84613f22565b613ed1565b905082815260208101848484011115612fcf57612fce61439b565b5b612fda848285614182565b509392505050565b6000612ff5612ff084613f53565b613ed1565b9050828152602081018484840111156130115761301061439b565b5b61301c848285614182565b509392505050565b600081359050613033816147e8565b92915050565b600082601f83011261304e5761304d614391565b5b813561305e848260208601612f30565b91505092915050565b600081359050613076816147ff565b92915050565b60008135905061308b81614816565b92915050565b6000815190506130a081614816565b92915050565b60008083601f8401126130bc576130bb614391565b5b8235905067ffffffffffffffff8111156130d9576130d861438c565b5b6020830191508360018202830111156130f5576130f4614396565b5b9250929050565b600082601f83011261311157613110614391565b5b8135613121848260208601612fa0565b91505092915050565b600082601f83011261313f5761313e614391565b5b813561314f848260208601612fe2565b91505092915050565b6000813590506131678161482d565b92915050565b60008151905061317c8161482d565b92915050565b600060208284031215613198576131976143a5565b5b60006131a684828501613024565b91505092915050565b600080604083850312156131c6576131c56143a5565b5b60006131d485828601613024565b92505060206131e585828601613024565b9150509250929050565b600080600060608486031215613208576132076143a5565b5b600061321686828701613024565b935050602061322786828701613024565b925050604061323886828701613158565b9150509250925092565b60008060008060006080868803121561325e5761325d6143a5565b5b600061326c88828901613024565b955050602061327d88828901613024565b945050604061328e88828901613158565b935050606086013567ffffffffffffffff8111156132af576132ae6143a0565b5b6132bb888289016130a6565b92509250509295509295909350565b600080600080608085870312156132e4576132e36143a5565b5b60006132f287828801613024565b945050602061330387828801613024565b935050604061331487828801613158565b925050606085013567ffffffffffffffff811115613335576133346143a0565b5b613341878288016130fc565b91505092959194509250565b60008060408385031215613364576133636143a5565b5b600061337285828601613024565b925050602061338385828601613067565b9150509250929050565b600080604083850312156133a4576133a36143a5565b5b60006133b285828601613024565b92505060206133c385828601613158565b9150509250929050565b6000602082840312156133e3576133e26143a5565b5b600082013567ffffffffffffffff811115613401576134006143a0565b5b61340d84828501613039565b91505092915050565b60006020828403121561342c5761342b6143a5565b5b600061343a8482850161307c565b91505092915050565b600060208284031215613459576134586143a5565b5b600061346784828501613091565b91505092915050565b600060208284031215613486576134856143a5565b5b600082013567ffffffffffffffff8111156134a4576134a36143a0565b5b6134b08482850161312a565b91505092915050565b6000602082840312156134cf576134ce6143a5565b5b60006134dd84828501613158565b91505092915050565b6000602082840312156134fc576134fb6143a5565b5b600061350a8482850161316d565b91505092915050565b61351c816140fc565b82525050565b61352b8161410e565b82525050565b61353a8161411a565b82525050565b600061354b82613f99565b6135558185613faf565b9350613565818560208601614191565b61356e816143aa565b840191505092915050565b61358281614170565b82525050565b600061359382613fa4565b61359d8185613fcb565b93506135ad818560208601614191565b6135b6816143aa565b840191505092915050565b60006135cc82613fa4565b6135d68185613fdc565b93506135e6818560208601614191565b80840191505092915050565b600081546135ff816141c4565b6136098186613fdc565b94506001821660008114613624576001811461363557613668565b60ff19831686528186019350613668565b61363e85613f84565b60005b8381101561366057815481890152600182019150602081019050613641565b838801955050505b50505092915050565b600061367e601e83613fcb565b9150613689826143bb565b602082019050919050565b60006136a1602083613fcb565b91506136ac826143e4565b602082019050919050565b60006136c4600d83613fdc565b91506136cf8261440d565b600d82019050919050565b60006136e7601b83613fcb565b91506136f282614436565b602082019050919050565b600061370a601c83613fcb565b91506137158261445f565b602082019050919050565b600061372d602083613fcb565b915061373882614488565b602082019050919050565b6000613750601e83613fcb565b915061375b826144b1565b602082019050919050565b6000613773601883613fcb565b915061377e826144da565b602082019050919050565b6000613796602083613fcb565b91506137a182614503565b602082019050919050565b60006137b9601983613fcb565b91506137c48261452c565b602082019050919050565b60006137dc601e83613fcb565b91506137e782614555565b602082019050919050565b60006137ff601a83613fcb565b915061380a8261457e565b602082019050919050565b6000613822601183613fcb565b915061382d826145a7565b602082019050919050565b6000613845601f83613fcb565b9150613850826145d0565b602082019050919050565b6000613868601f83613fcb565b9150613873826145f9565b602082019050919050565b600061388b602083613fcb565b915061389682614622565b602082019050919050565b60006138ae602083613fcb565b91506138b98261464b565b602082019050919050565b60006138d1600583613fdc565b91506138dc82614674565b600582019050919050565b60006138f4601c83613fcb565b91506138ff8261469d565b602082019050919050565b6000613917602083613fcb565b9150613922826146c6565b602082019050919050565b600061393a601883613fcb565b9150613945826146ef565b602082019050919050565b600061395d601c83613fcb565b915061396882614718565b602082019050919050565b6000613980601b83613fcb565b915061398b82614741565b602082019050919050565b60006139a3600083613fc0565b91506139ae8261476a565b600082019050919050565b60006139c6601483613fcb565b91506139d18261476d565b602082019050919050565b60006139e9601383613fcb565b91506139f482614796565b602082019050919050565b6000613a0c601383613fcb565b9150613a17826147bf565b602082019050919050565b613a2b81614166565b82525050565b6000613a3d82856135f2565b9150613a4982846135c1565b9150613a54826138c4565b91508190509392505050565b6000613a6c82846135f2565b9150613a77826136b7565b915081905092915050565b6000613a8d82613996565b9150819050919050565b6000602082019050613aac6000830184613513565b92915050565b6000606082019050613ac76000830186613513565b613ad46020830185613513565b613ae16040830184613a22565b949350505050565b6000608082019050613afe6000830187613513565b613b0b6020830186613513565b613b186040830185613a22565b8181036060830152613b2a8184613540565b905095945050505050565b6000604082019050613b4a6000830185613513565b613b576020830184613579565b9392505050565b6000602082019050613b736000830184613522565b92915050565b6000602082019050613b8e6000830184613531565b92915050565b60006020820190508181036000830152613bae8184613588565b905092915050565b60006020820190508181036000830152613bcf81613671565b9050919050565b60006020820190508181036000830152613bef81613694565b9050919050565b60006020820190508181036000830152613c0f816136da565b9050919050565b60006020820190508181036000830152613c2f816136fd565b9050919050565b60006020820190508181036000830152613c4f81613720565b9050919050565b60006020820190508181036000830152613c6f81613743565b9050919050565b60006020820190508181036000830152613c8f81613766565b9050919050565b60006020820190508181036000830152613caf81613789565b9050919050565b60006020820190508181036000830152613ccf816137ac565b9050919050565b60006020820190508181036000830152613cef816137cf565b9050919050565b60006020820190508181036000830152613d0f816137f2565b9050919050565b60006020820190508181036000830152613d2f81613815565b9050919050565b60006020820190508181036000830152613d4f81613838565b9050919050565b60006020820190508181036000830152613d6f8161385b565b9050919050565b60006020820190508181036000830152613d8f8161387e565b9050919050565b60006020820190508181036000830152613daf816138a1565b9050919050565b60006020820190508181036000830152613dcf816138e7565b9050919050565b60006020820190508181036000830152613def8161390a565b9050919050565b60006020820190508181036000830152613e0f8161392d565b9050919050565b60006020820190508181036000830152613e2f81613950565b9050919050565b60006020820190508181036000830152613e4f81613973565b9050919050565b60006020820190508181036000830152613e6f816139b9565b9050919050565b60006020820190508181036000830152613e8f816139dc565b9050919050565b60006020820190508181036000830152613eaf816139ff565b9050919050565b6000602082019050613ecb6000830184613a22565b92915050565b6000613edb613eec565b9050613ee782826141f6565b919050565b6000604051905090565b600067ffffffffffffffff821115613f1157613f1061435d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f3d57613f3c61435d565b5b613f46826143aa565b9050602081019050919050565b600067ffffffffffffffff821115613f6e57613f6d61435d565b5b613f77826143aa565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ff282614166565b9150613ffd83614166565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614032576140316142a1565b5b828201905092915050565b600061404882614166565b915061405383614166565b925082614063576140626142d0565b5b828204905092915050565b600061407982614166565b915061408483614166565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140bd576140bc6142a1565b5b828202905092915050565b60006140d382614166565b91506140de83614166565b9250828210156140f1576140f06142a1565b5b828203905092915050565b600061410782614146565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061417b82614166565b9050919050565b82818337600083830152505050565b60005b838110156141af578082015181840152602081019050614194565b838111156141be576000848401525b50505050565b600060028204905060018216806141dc57607f821691505b602082108114156141f0576141ef6142ff565b5b50919050565b6141ff826143aa565b810181811067ffffffffffffffff8211171561421e5761421d61435d565b5b80604052505050565b600061423282614166565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614265576142646142a1565b5b600182019050919050565b600061427b82614166565b915061428683614166565b925082614296576142956142d0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a2041626f7665205472786e205468726573686f6c64210000000000600082015250565b50565b7f4e6f6e6578697374656e7420546f6b656e204944000000000000000000000000600082015250565b7f4d696e74206e6f7420617661696c61626c652e00000000000000000000000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6147f1816140fc565b81146147fc57600080fd5b50565b6148088161410e565b811461481357600080fd5b50565b61481f8161411a565b811461482a57600080fd5b50565b61483681614166565b811461484157600080fd5b5056fea26469706673582212209b4e690da291305958279a2d63781b831072a963ba16dc50997ee0bd3d4dae6c64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023e5760003560e01c80636352211e1161012e578063a22cb465116100ab578063d78c06fa1161006f578063d78c06fa14610809578063deca6da114610832578063e8a3d4851461085b578063e985e9c514610886578063f2fde38b146108c357610245565b8063a22cb4651461073a578063b0b9226314610763578063b88d4fde1461078c578063c87b56dd146107b5578063c91c0462146107f257610245565b80638da5cb5b116100f25780638da5cb5b1461067457806391b7f5ed1461069f57806395d89b41146106c8578063a035b1fe146106f3578063a0712d681461071e57610245565b80636352211e1461058f57806370a08231146105cc578063715018a6146106095780637960c27f146106205780637e1c0c091461064957610245565b806327060b2b116101bc57806342966c681161018057806342966c68146104d2578063454b0608146104fb57806349a772b5146105245780634a77f8701461054f57806355f804b31461056657610245565b806327060b2b146104255780632e56f71e146104505780633cb51994146104675780633ccfd60b1461049257806342842e0e146104a957610245565b8063150b7a0211610203578063150b7a021461033e57806318160ddd1461037b57806323b872dd146103a6578063255e4685146103cf57806325fd90f3146103fa57610245565b8062b6849f1461024757806301ffc9a71461027057806306fdde03146102ad578063081812fc146102d8578063095ea7b31461031557610245565b3661024557005b005b34801561025357600080fd5b5061026e600480360381019061026991906133cd565b6108ec565b005b34801561027c57600080fd5b5061029760048036038101906102929190613416565b610aaa565b6040516102a49190613b5e565b60405180910390f35b3480156102b957600080fd5b506102c2610c33565b6040516102cf9190613b94565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa91906134b9565b610cc5565b60405161030c9190613a97565b60405180910390f35b34801561032157600080fd5b5061033c6004803603810190610337919061338d565b610d4a565b005b34801561034a57600080fd5b5061036560048036038101906103609190613242565b610e54565b6040516103729190613b79565b60405180910390f35b34801561038757600080fd5b50610390610e69565b60405161039d9190613eb6565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906131ef565b610e80565b005b3480156103db57600080fd5b506103e4610ed9565b6040516103f19190613eb6565b60405180910390f35b34801561040657600080fd5b5061040f610edf565b60405161041c9190613b5e565b60405180910390f35b34801561043157600080fd5b5061043a610ef2565b6040516104479190613a97565b60405180910390f35b34801561045c57600080fd5b50610465610f18565b005b34801561047357600080fd5b5061047c610fb1565b6040516104899190613eb6565b60405180910390f35b34801561049e57600080fd5b506104a7610fb7565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906131ef565b6110e8565b005b3480156104de57600080fd5b506104f960048036038101906104f491906134b9565b611108565b005b34801561050757600080fd5b50610522600480360381019061051d91906134b9565b61115b565b005b34801561053057600080fd5b506105396112bd565b6040516105469190613eb6565b60405180910390f35b34801561055b57600080fd5b506105646112c3565b005b34801561057257600080fd5b5061058d60048036038101906105889190613470565b6115af565b005b34801561059b57600080fd5b506105b660048036038101906105b191906134b9565b611645565b6040516105c39190613a97565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190613182565b6116f7565b6040516106009190613eb6565b60405180910390f35b34801561061557600080fd5b5061061e6117af565b005b34801561062c57600080fd5b50610647600480360381019061064291906134b9565b611837565b005b34801561065557600080fd5b5061065e6118bd565b60405161066b9190613eb6565b60405180910390f35b34801561068057600080fd5b506106896118c3565b6040516106969190613a97565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906134b9565b6118ec565b005b3480156106d457600080fd5b506106dd611972565b6040516106ea9190613b94565b60405180910390f35b3480156106ff57600080fd5b50610708611a04565b6040516107159190613eb6565b60405180910390f35b610738600480360381019061073391906134b9565b611a0a565b005b34801561074657600080fd5b50610761600480360381019061075c919061334d565b611c43565b005b34801561076f57600080fd5b5061078a600480360381019061078591906134b9565b611daf565b005b34801561079857600080fd5b506107b360048036038101906107ae91906132ca565b611e35565b005b3480156107c157600080fd5b506107dc60048036038101906107d791906134b9565b611e90565b6040516107e99190613b94565b60405180910390f35b3480156107fe57600080fd5b50610807611f12565b005b34801561081557600080fd5b50610830600480360381019061082b91906134b9565b611fab565b005b34801561083e57600080fd5b5061085960048036038101906108549190613182565b612031565b005b34801561086757600080fd5b506108706120f1565b60405161087d9190613b94565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906131af565b612119565b6040516108ba9190613b5e565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190613182565b6121ad565b005b6108f46122a5565b73ffffffffffffffffffffffffffffffffffffffff166109126118c3565b73ffffffffffffffffffffffffffffffffffffffff1614610968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095f90613dd6565b60405180910390fd5b600081519050600b5481600d54600b546109829190613fe7565b61098c9190613fe7565b116109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c390613e96565b60405180910390fd5b600a5481600d54600b546109e09190613fe7565b6109ea9190613fe7565b1115610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2290613d16565b60405180910390fd5b6000600d54600b54610a3d9190613fe7565b905060005b82811015610aa457610a79848281518110610a6057610a5f61432e565b5b60200260200101518284610a749190613fe7565b6122ad565b600b6000815480929190610a8c90614227565b91905055508080610a9c90614227565b915050610a42565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bdd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610c42906141c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e906141c4565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050505050905090565b6000610cd0826122cb565b610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690613c36565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d5582611645565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613c56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e065750610e058133612119565b5b610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c90613d36565b60405180910390fd5b610e4f8383612337565b505050565b600063150b7a0260e01b905095945050505050565b6000600d54600b54610e7b9190613fe7565b905090565b610e8a33826123f0565b610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613e16565b60405180910390fd5b610ed48383836124ce565b505050565b600d5481565b600860009054906101000a900460ff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f206122a5565b73ffffffffffffffffffffffffffffffffffffffff16610f3e6118c3565b73ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90613dd6565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b600c5481565b610fbf6122a5565b73ffffffffffffffffffffffffffffffffffffffff16610fdd6118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613dd6565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161105e90613a82565b60006040518083038185875af1925050503d806000811461109b576040519150601f19603f3d011682016040523d82523d6000602084013e6110a0565b606091505b50509050806110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613c76565b60405180910390fd5b5050565b61110383838360405180602001604052806000815250611e35565b505050565b61111181611645565b73ffffffffffffffffffffffffffffffffffffffff1661112f6122a5565b73ffffffffffffffffffffffffffffffffffffffff161461114f57600080fd5b6111588161272a565b50565b600060149054906101000a900460ff16156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290613d56565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550610d538111156111d557600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61121b6122a5565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161125d93929190613ab2565b600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050506112a061129a6122a5565b826122ad565b60008060146101000a81548160ff02191690831515021790555050565b600b5481565b600060149054906101000a900460ff1615611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613d56565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316113766122a5565b6040518263ffffffff1660e01b81526004016113929190613a97565b60206040518083038186803b1580156113aa57600080fd5b505afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e291906134e6565b905060005b81811015611591576000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596114376122a5565b60006040518363ffffffff1660e01b8152600401611456929190613b35565b60206040518083038186803b15801561146e57600080fd5b505afa158015611482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a691906134e6565b9050610d53811161157d57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6114f76122a5565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161153993929190613ab2565b600060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b5050505061157c6115766122a5565b826122ad565b5b50808061158990614227565b9150506113e7565b505060008060146101000a81548160ff021916908315150217905550565b6115b76122a5565b73ffffffffffffffffffffffffffffffffffffffff166115d56118c3565b73ffffffffffffffffffffffffffffffffffffffff161461162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290613dd6565b60405180910390fd5b8060039080519060200190611641929190612e8d565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613cd6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90613d96565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117b76122a5565b73ffffffffffffffffffffffffffffffffffffffff166117d56118c3565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613dd6565b60405180910390fd5b611835600061283b565b565b61183f6122a5565b73ffffffffffffffffffffffffffffffffffffffff1661185d6118c3565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613dd6565b60405180910390fd5b80600d8190555050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118f46122a5565b73ffffffffffffffffffffffffffffffffffffffff166119126118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90613dd6565b60405180910390fd5b8060098190555050565b606060028054611981906141c4565b80601f01602080910402602001604051908101604052809291908181526020018280546119ad906141c4565b80156119fa5780601f106119cf576101008083540402835291602001916119fa565b820191906000526020600020905b8154815290600101906020018083116119dd57829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190613d56565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611a7f6122a5565b9050600860009054906101000a900460ff16611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790613e76565b60405180910390fd5b60095482611ade919061406e565b3414611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1690613df6565b60405180910390fd5b600c54821115611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613e36565b60405180910390fd5b600a54600b54600d5484611b789190613fe7565b611b829190613fe7565b1115611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90613bb6565b60405180910390fd5b6000600d54600b54611bd59190613fe7565b905082600b6000828254611be99190613fe7565b9250508190555060005b83811015611c2357611c10838284611c0b9190613fe7565b6122ad565b8080611c1b90614227565b915050611bf3565b50505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca990613cb6565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611da39190613b5e565b60405180910390a35050565b611db76122a5565b73ffffffffffffffffffffffffffffffffffffffff16611dd56118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2290613dd6565b60405180910390fd5b80600a8190555050565b611e3f33836123f0565b611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590613e16565b60405180910390fd5b611e8a848484846128ff565b50505050565b6060611e9b826122cb565b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613e56565b60405180910390fd5b60606003611ee78461295b565b604051602001611ef8929190613a31565b604051602081830303815290604052905080915050919050565b611f1a6122a5565b73ffffffffffffffffffffffffffffffffffffffff16611f386118c3565b73ffffffffffffffffffffffffffffffffffffffff1614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590613dd6565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b611fb36122a5565b73ffffffffffffffffffffffffffffffffffffffff16611fd16118c3565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90613dd6565b60405180910390fd5b80600c8190555050565b6120396122a5565b73ffffffffffffffffffffffffffffffffffffffff166120576118c3565b73ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490613dd6565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060036040516020016121059190613a60565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121b56122a5565b73ffffffffffffffffffffffffffffffffffffffff166121d36118c3565b73ffffffffffffffffffffffffffffffffffffffff1614612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090613c96565b60405180910390fd5b6122a28161283b565b50565b600033905090565b6122c7828260405180602001604052806000815250612abc565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123aa83611645565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123fb826122cb565b61243a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243190613bd6565b60405180910390fd5b600061244583611645565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124b457508373ffffffffffffffffffffffffffffffffffffffff1661249c84610cc5565b73ffffffffffffffffffffffffffffffffffffffff16145b806124c557506124c48185612119565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124ee82611645565b73ffffffffffffffffffffffffffffffffffffffff1614612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b90613db6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90613bf6565b60405180910390fd5b6125bf838383612b17565b6125ca600082612337565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261a91906140c8565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126719190613fe7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061273582611645565b905061274381600084612b17565b61274e600083612337565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279e91906140c8565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61290a8484846124ce565b61291684848484612b1c565b612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c90613cf6565b60405180910390fd5b50505050565b606060008214156129a3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ab7565b600082905060005b600082146129d55780806129be90614227565b915050600a826129ce919061403d565b91506129ab565b60008167ffffffffffffffff8111156129f1576129f061435d565b5b6040519080825280601f01601f191660200182016040528015612a235781602001600182028036833780820191505090505b5090505b60008514612ab057600182612a3c91906140c8565b9150600a85612a4b9190614270565b6030612a579190613fe7565b60f81b818381518110612a6d57612a6c61432e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa9919061403d565b9450612a27565b8093505050505b919050565b612ac68383612cac565b612ad36000848484612b1c565b612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990613cf6565b60405180910390fd5b505050565b505050565b6000612b3d8473ffffffffffffffffffffffffffffffffffffffff16612e7a565b15612c9f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612b819493929190613ae9565b602060405180830381600087803b158015612b9b57600080fd5b505af1925050508015612bcc57506040513d601f19601f82011682018060405250810190612bc99190613443565b60015b612c4f573d8060008114612bfc576040519150601f19603f3d011682016040523d82523d6000602084013e612c01565b606091505b50600081511415612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90613cf6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ca4565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390613d76565b60405180910390fd5b612d25816122cb565b15612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90613c16565b60405180910390fd5b612d7160008383612b17565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc19190613fe7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e99906141c4565b90600052602060002090601f016020900481019282612ebb5760008555612f02565b82601f10612ed457805160ff1916838001178555612f02565b82800160010185558215612f02579182015b82811115612f01578251825591602001919060010190612ee6565b5b509050612f0f9190612f13565b5090565b5b80821115612f2c576000816000905550600101612f14565b5090565b6000612f43612f3e84613ef6565b613ed1565b90508083825260208201905082856020860282011115612f6657612f65614396565b5b60005b85811015612f965781612f7c8882613024565b845260208401935060208301925050600181019050612f69565b5050509392505050565b6000612fb3612fae84613f22565b613ed1565b905082815260208101848484011115612fcf57612fce61439b565b5b612fda848285614182565b509392505050565b6000612ff5612ff084613f53565b613ed1565b9050828152602081018484840111156130115761301061439b565b5b61301c848285614182565b509392505050565b600081359050613033816147e8565b92915050565b600082601f83011261304e5761304d614391565b5b813561305e848260208601612f30565b91505092915050565b600081359050613076816147ff565b92915050565b60008135905061308b81614816565b92915050565b6000815190506130a081614816565b92915050565b60008083601f8401126130bc576130bb614391565b5b8235905067ffffffffffffffff8111156130d9576130d861438c565b5b6020830191508360018202830111156130f5576130f4614396565b5b9250929050565b600082601f83011261311157613110614391565b5b8135613121848260208601612fa0565b91505092915050565b600082601f83011261313f5761313e614391565b5b813561314f848260208601612fe2565b91505092915050565b6000813590506131678161482d565b92915050565b60008151905061317c8161482d565b92915050565b600060208284031215613198576131976143a5565b5b60006131a684828501613024565b91505092915050565b600080604083850312156131c6576131c56143a5565b5b60006131d485828601613024565b92505060206131e585828601613024565b9150509250929050565b600080600060608486031215613208576132076143a5565b5b600061321686828701613024565b935050602061322786828701613024565b925050604061323886828701613158565b9150509250925092565b60008060008060006080868803121561325e5761325d6143a5565b5b600061326c88828901613024565b955050602061327d88828901613024565b945050604061328e88828901613158565b935050606086013567ffffffffffffffff8111156132af576132ae6143a0565b5b6132bb888289016130a6565b92509250509295509295909350565b600080600080608085870312156132e4576132e36143a5565b5b60006132f287828801613024565b945050602061330387828801613024565b935050604061331487828801613158565b925050606085013567ffffffffffffffff811115613335576133346143a0565b5b613341878288016130fc565b91505092959194509250565b60008060408385031215613364576133636143a5565b5b600061337285828601613024565b925050602061338385828601613067565b9150509250929050565b600080604083850312156133a4576133a36143a5565b5b60006133b285828601613024565b92505060206133c385828601613158565b9150509250929050565b6000602082840312156133e3576133e26143a5565b5b600082013567ffffffffffffffff811115613401576134006143a0565b5b61340d84828501613039565b91505092915050565b60006020828403121561342c5761342b6143a5565b5b600061343a8482850161307c565b91505092915050565b600060208284031215613459576134586143a5565b5b600061346784828501613091565b91505092915050565b600060208284031215613486576134856143a5565b5b600082013567ffffffffffffffff8111156134a4576134a36143a0565b5b6134b08482850161312a565b91505092915050565b6000602082840312156134cf576134ce6143a5565b5b60006134dd84828501613158565b91505092915050565b6000602082840312156134fc576134fb6143a5565b5b600061350a8482850161316d565b91505092915050565b61351c816140fc565b82525050565b61352b8161410e565b82525050565b61353a8161411a565b82525050565b600061354b82613f99565b6135558185613faf565b9350613565818560208601614191565b61356e816143aa565b840191505092915050565b61358281614170565b82525050565b600061359382613fa4565b61359d8185613fcb565b93506135ad818560208601614191565b6135b6816143aa565b840191505092915050565b60006135cc82613fa4565b6135d68185613fdc565b93506135e6818560208601614191565b80840191505092915050565b600081546135ff816141c4565b6136098186613fdc565b94506001821660008114613624576001811461363557613668565b60ff19831686528186019350613668565b61363e85613f84565b60005b8381101561366057815481890152600182019150602081019050613641565b838801955050505b50505092915050565b600061367e601e83613fcb565b9150613689826143bb565b602082019050919050565b60006136a1602083613fcb565b91506136ac826143e4565b602082019050919050565b60006136c4600d83613fdc565b91506136cf8261440d565b600d82019050919050565b60006136e7601b83613fcb565b91506136f282614436565b602082019050919050565b600061370a601c83613fcb565b91506137158261445f565b602082019050919050565b600061372d602083613fcb565b915061373882614488565b602082019050919050565b6000613750601e83613fcb565b915061375b826144b1565b602082019050919050565b6000613773601883613fcb565b915061377e826144da565b602082019050919050565b6000613796602083613fcb565b91506137a182614503565b602082019050919050565b60006137b9601983613fcb565b91506137c48261452c565b602082019050919050565b60006137dc601e83613fcb565b91506137e782614555565b602082019050919050565b60006137ff601a83613fcb565b915061380a8261457e565b602082019050919050565b6000613822601183613fcb565b915061382d826145a7565b602082019050919050565b6000613845601f83613fcb565b9150613850826145d0565b602082019050919050565b6000613868601f83613fcb565b9150613873826145f9565b602082019050919050565b600061388b602083613fcb565b915061389682614622565b602082019050919050565b60006138ae602083613fcb565b91506138b98261464b565b602082019050919050565b60006138d1600583613fdc565b91506138dc82614674565b600582019050919050565b60006138f4601c83613fcb565b91506138ff8261469d565b602082019050919050565b6000613917602083613fcb565b9150613922826146c6565b602082019050919050565b600061393a601883613fcb565b9150613945826146ef565b602082019050919050565b600061395d601c83613fcb565b915061396882614718565b602082019050919050565b6000613980601b83613fcb565b915061398b82614741565b602082019050919050565b60006139a3600083613fc0565b91506139ae8261476a565b600082019050919050565b60006139c6601483613fcb565b91506139d18261476d565b602082019050919050565b60006139e9601383613fcb565b91506139f482614796565b602082019050919050565b6000613a0c601383613fcb565b9150613a17826147bf565b602082019050919050565b613a2b81614166565b82525050565b6000613a3d82856135f2565b9150613a4982846135c1565b9150613a54826138c4565b91508190509392505050565b6000613a6c82846135f2565b9150613a77826136b7565b915081905092915050565b6000613a8d82613996565b9150819050919050565b6000602082019050613aac6000830184613513565b92915050565b6000606082019050613ac76000830186613513565b613ad46020830185613513565b613ae16040830184613a22565b949350505050565b6000608082019050613afe6000830187613513565b613b0b6020830186613513565b613b186040830185613a22565b8181036060830152613b2a8184613540565b905095945050505050565b6000604082019050613b4a6000830185613513565b613b576020830184613579565b9392505050565b6000602082019050613b736000830184613522565b92915050565b6000602082019050613b8e6000830184613531565b92915050565b60006020820190508181036000830152613bae8184613588565b905092915050565b60006020820190508181036000830152613bcf81613671565b9050919050565b60006020820190508181036000830152613bef81613694565b9050919050565b60006020820190508181036000830152613c0f816136da565b9050919050565b60006020820190508181036000830152613c2f816136fd565b9050919050565b60006020820190508181036000830152613c4f81613720565b9050919050565b60006020820190508181036000830152613c6f81613743565b9050919050565b60006020820190508181036000830152613c8f81613766565b9050919050565b60006020820190508181036000830152613caf81613789565b9050919050565b60006020820190508181036000830152613ccf816137ac565b9050919050565b60006020820190508181036000830152613cef816137cf565b9050919050565b60006020820190508181036000830152613d0f816137f2565b9050919050565b60006020820190508181036000830152613d2f81613815565b9050919050565b60006020820190508181036000830152613d4f81613838565b9050919050565b60006020820190508181036000830152613d6f8161385b565b9050919050565b60006020820190508181036000830152613d8f8161387e565b9050919050565b60006020820190508181036000830152613daf816138a1565b9050919050565b60006020820190508181036000830152613dcf816138e7565b9050919050565b60006020820190508181036000830152613def8161390a565b9050919050565b60006020820190508181036000830152613e0f8161392d565b9050919050565b60006020820190508181036000830152613e2f81613950565b9050919050565b60006020820190508181036000830152613e4f81613973565b9050919050565b60006020820190508181036000830152613e6f816139b9565b9050919050565b60006020820190508181036000830152613e8f816139dc565b9050919050565b60006020820190508181036000830152613eaf816139ff565b9050919050565b6000602082019050613ecb6000830184613a22565b92915050565b6000613edb613eec565b9050613ee782826141f6565b919050565b6000604051905090565b600067ffffffffffffffff821115613f1157613f1061435d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f3d57613f3c61435d565b5b613f46826143aa565b9050602081019050919050565b600067ffffffffffffffff821115613f6e57613f6d61435d565b5b613f77826143aa565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ff282614166565b9150613ffd83614166565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614032576140316142a1565b5b828201905092915050565b600061404882614166565b915061405383614166565b925082614063576140626142d0565b5b828204905092915050565b600061407982614166565b915061408483614166565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140bd576140bc6142a1565b5b828202905092915050565b60006140d382614166565b91506140de83614166565b9250828210156140f1576140f06142a1565b5b828203905092915050565b600061410782614146565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061417b82614166565b9050919050565b82818337600083830152505050565b60005b838110156141af578082015181840152602081019050614194565b838111156141be576000848401525b50505050565b600060028204905060018216806141dc57607f821691505b602082108114156141f0576141ef6142ff565b5b50919050565b6141ff826143aa565b810181811067ffffffffffffffff8211171561421e5761421d61435d565b5b80604052505050565b600061423282614166565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614265576142646142a1565b5b600182019050919050565b600061427b82614166565b915061428683614166565b925082614296576142956142d0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a2041626f7665205472786e205468726573686f6c64210000000000600082015250565b50565b7f4e6f6e6578697374656e7420546f6b656e204944000000000000000000000000600082015250565b7f4d696e74206e6f7420617661696c61626c652e00000000000000000000000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6147f1816140fc565b81146147fc57600080fd5b50565b6148088161410e565b811461481357600080fd5b50565b61481f8161411a565b811461482a57600080fd5b50565b61483681614166565b811461484157600080fd5b5056fea26469706673582212209b4e690da291305958279a2d63781b831072a963ba16dc50997ee0bd3d4dae6c64736f6c63430008070033

Deployed Bytecode Sourcemap

18790:18176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21305:547;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20629:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36030:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25674:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25236:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34974:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24484:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26544:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19691:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19537:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19728:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24182:80;;;;;;;;;;;;;:::i;:::-;;19660:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21070:223;;;;;;;;;;;;;:::i;:::-;;26929:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23281:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21864:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19626:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22097:438;;;;;;;;;;;;;:::i;:::-;;23986:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24946:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24686:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15764:94;;;;;;;;;;;;;:::i;:::-;;23744:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19593:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15113:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24274:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36171;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19566:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22547:663;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25953:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24374:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27185:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36346:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24093:77;;;;;;;;;;;;;:::i;:::-;;23869:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23622:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36661:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26313:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16013:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21305:547;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21374:11:::1;21388:3;:10;21374:24;;21452:12;;21445:3;21433:9;;21418:12;;:24;;;;:::i;:::-;:30;;;;:::i;:::-;21417:47;21409:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:11;;21535:3;21523:9;;21508:12;;:24;;;;:::i;:::-;:30;;;;:::i;:::-;21507:47;;21499:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21597:21;21636:9;;21621:12;;:24;;;;:::i;:::-;21597:48;;21670:9;21666:179;21689:3;21685:1;:7;21666:179;;;21714:36;21724:3;21728:1;21724:6;;;;;;;;:::i;:::-;;;;;;;;21748:1;21732:13;:17;;;;:::i;:::-;21714:9;:36::i;:::-;21765:12;;:15;;;;;;;;;:::i;:::-;;;;;;21694:3;;;;;:::i;:::-;;;;21666:179;;;;21363:489;;21305:547:::0;:::o;20629:359::-;20714:4;20754:25;20739:40;;;:11;:40;;;;:109;;;;20815:33;20800:48;;;:11;:48;;;;20739:109;:170;;;;20884:25;20869:40;;;:11;:40;;;;20739:170;:241;;;;20945:35;;;20930:50;;;:11;:50;;;;20739:241;20731:249;;20629:359;;;:::o;36030:84::-;36069:13;36101:5;36094:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36030:84;:::o;25674:207::-;25750:7;25778:16;25786:7;25778;:16::i;:::-;25770:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25849:15;:24;25865:7;25849:24;;;;;;;;;;;;;;;;;;;;;25842:31;;25674:207;;;:::o;25236:372::-;25317:13;25333:16;25341:7;25333;:16::i;:::-;25317:32;;25374:5;25368:11;;:2;:11;;;;25360:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25463:5;25449:19;;:10;:19;;;:58;;;;25472:35;25489:5;25496:10;25472:16;:35::i;:::-;25449:58;25427:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25579:21;25588:2;25592:7;25579:8;:21::i;:::-;25306:302;25236:372;;:::o;34974:215::-;35091:6;35151:30;;;35144:37;;34974:215;;;;;;;:::o;24484:138::-;24530:7;24572:9;;24557:12;;:24;;;;:::i;:::-;24550:31;;24484:138;:::o;26544:314::-;26739:39;26758:10;26770:7;26739:18;:39::i;:::-;26731:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26822:28;26832:4;26838:2;26842:7;26822:9;:28::i;:::-;26544:314;;;:::o;19691:24::-;;;;:::o;19537:22::-;;;;;;;;;;;;;:::o;19728:26::-;;;;;;;;;;;;;:::o;24182:80::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24249:5:::1;24236:10;;:18;;;;;;;;;;;;;;;;;;24182:80::o:0;19660:24::-;;;;:::o;21070:223::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21120:18:::1;21141:21;21120:42;;21174:12;21192:10;:15;;21215:10;21192:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21173:57;;;21249:7;21241:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21109:184;;21070:223::o:0;26929:185::-;27067:39;27084:4;27090:2;27094:7;27067:39;;;;;;;;;;;;:16;:39::i;:::-;26929:185;;;:::o;23281:125::-;23356:16;23364:7;23356;:16::i;:::-;23340:32;;:12;:10;:12::i;:::-;:32;;;23332:41;;;;;;23384:14;23390:7;23384:5;:14::i;:::-;23281:125;:::o;21864:221::-;17047:11;;;;;;;;;;;17046:12;17038:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17119:4;17105:11;;:18;;;;;;;;;;;;;;;;;;21953:4:::1;21940:9;:17;;21932:26;;;::::0;::::1;;21966:10;;;;;;;;;;;:23;;;21990:12;:10;:12::i;:::-;22004:11;;;;;;;;;;;22017:9;21966:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22038:34;22048:12;:10;:12::i;:::-;22062:9;22038;:34::i;:::-;17160:5:::0;17146:11;;:19;;;;;;;;;;;;;;;;;;21864:221;:::o;19626:27::-;;;;:::o;22097:438::-;17047:11;;;;;;;;;;;17046:12;17038:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17119:4;17105:11;;:18;;;;;;;;;;;;;;;;;;22148:17:::1;22168:10;;;;;;;;;;;:20;;;22189:12;:10;:12::i;:::-;22168:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22148:54;;22214:9;22210:318;22233:9;22229:1;:13;22210:318;;;22257:21;22281:10;;;;;;;;;;;:30;;;22312:12;:10;:12::i;:::-;22326:1;22281:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22257:71;;22364:4;22347:13;:21;22343:177;;22382:10;;;;;;;;;;;:23;;;22406:12;:10;:12::i;:::-;22420:11;;;;;;;;;;;22433:13;22382:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22466:38;22476:12;:10;:12::i;:::-;22490:13;22466:9;:38::i;:::-;22343:177;22248:280;22244:3;;;;;:::i;:::-;;;;22210:318;;;;22140:395;17160:5:::0;17146:11;;:19;;;;;;;;;;;;;;;;;;22097:438::o;23986:95::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24067:6:::1;24056:8;:17;;;;;;;;;;;;:::i;:::-;;23986:95:::0;:::o;24946:228::-;25018:7;25038:13;25054:7;:16;25062:7;25054:16;;;;;;;;;;;;;;;;;;;;;25038:32;;25106:1;25089:19;;:5;:19;;;;25081:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25161:5;25154:12;;;24946:228;;;:::o;24686:198::-;24758:7;24803:1;24786:19;;:5;:19;;;;24778:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24860:9;:16;24870:5;24860:16;;;;;;;;;;;;;;;;24853:23;;24686:198;;;:::o;15764:94::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15829:21:::1;15847:1;15829:9;:21::i;:::-;15764:94::o:0;23744:113::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23832:17:::1;23820:9;:29;;;;23744:113:::0;:::o;19593:26::-;;;;:::o;15113:87::-;15159:7;15186:6;;;;;;;;;;;15179:13;;15113:87;:::o;24274:88::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24346:8:::1;24338:5;:16;;;;24274:88:::0;:::o;36171:::-;36212:13;36244:7;36237:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36171:88;:::o;19566:20::-;;;;:::o;22547:663::-;17047:11;;;;;;;;;;;17046:12;17038:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17119:4;17105:11;;:18;;;;;;;;;;;;;;;;;;22614:11:::1;22628:12;:10;:12::i;:::-;22614:26;;22659:10;;;;;;;;;;;22651:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;22731:5;;22725:3;:11;;;;:::i;:::-;22712:9;:24;22704:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22791:9;;22784:3;:16;;22776:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22887:11;;22870:12;;22858:9;;22852:3;:15;;;;:::i;:::-;:30;;;;:::i;:::-;22851:47;;22843:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22954:21;22993:9;;22978:12;;:24;;;;:::i;:::-;22954:48;;23063:3;23047:12;;:19;;;;;;;:::i;:::-;;;;;;;;23114:9;23110:93;23133:3;23129:1;:7;23110:93;;;23158:33;23168:3;23189:1;23173:13;:17;;;;:::i;:::-;23158:9;:33::i;:::-;23138:3;;;;;:::i;:::-;;;;23110:93;;;;22603:607;;17160:5:::0;17146:11;;:19;;;;;;;;;;;;;;;;;;22547:663;:::o;25953:289::-;26068:10;26056:22;;:8;:22;;;;26048:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26164:8;26121:18;:30;26140:10;26121:30;;;;;;;;;;;;;;;:40;26152:8;26121:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;26215:8;26188:46;;26203:10;26188:46;;;26225:8;26188:46;;;;;;:::i;:::-;;;;;;;;25953:289;;:::o;24374:102::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24459:9:::1;24445:11;:23;;;;24374:102:::0;:::o;27185:305::-;27360:39;27379:10;27391:7;27360:18;:39::i;:::-;27352:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27443:39;27457:4;27463:2;27467:7;27476:5;27443:13;:39::i;:::-;27185:305;;;;:::o;36346:303::-;36404:13;36437:16;36445:7;36437;:16::i;:::-;36429:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;36489:22;36567:8;36577:17;36586:7;36577:8;:17::i;:::-;36550:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36532:73;;36633:8;36626:15;;;36346:303;;;:::o;24093:77::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24158:4:::1;24145:10;;:17;;;;;;;;;;;;;;;;;;24093:77::o:0;23869:105::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23958:8:::1;23946:9;:20;;;;23869:105:::0;:::o;23622:114::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23716:11:::1;23696:10;;:32;;;;;;;;;;;;;;;;;;23622:114:::0;:::o;36661:135::-;36705:13;36762:8;36745:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;36731:57;;36661:135;:::o;26313:164::-;26410:4;26434:18;:25;26453:5;26434:25;;;;;;;;;;;;;;;:35;26460:8;26434:35;;;;;;;;;;;;;;;;;;;;;;;;;26427:42;;26313:164;;;;:::o;16013:186::-;15344:12;:10;:12::i;:::-;15333:23;;:7;:5;:7::i;:::-;:23;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16122:1:::1;16102:22;;:8;:22;;;;16094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16172:19;16182:8;16172:9;:19::i;:::-;16013:186:::0;:::o;14496:98::-;14549:7;14576:10;14569:17;;14496:98;:::o;29941:110::-;30017:26;30027:2;30031:7;30017:26;;;;;;;;;;;;:9;:26::i;:::-;29941:110;;:::o;28976:127::-;29041:4;29093:1;29065:30;;:7;:16;29073:7;29065:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29058:37;;28976:127;;;:::o;32877:167::-;32979:2;32952:15;:24;32968:7;32952:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33028:7;33024:2;32997:39;;33006:16;33014:7;33006;:16::i;:::-;32997:39;;;;;;;;;;;;32877:167;;:::o;29270:329::-;29363:4;29388:16;29396:7;29388;:16::i;:::-;29380:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29452:13;29468:16;29476:7;29468;:16::i;:::-;29452:32;;29514:5;29503:16;;:7;:16;;;:51;;;;29547:7;29523:31;;:20;29535:7;29523:11;:20::i;:::-;:31;;;29503:51;:87;;;;29558:32;29575:5;29582:7;29558:16;:32::i;:::-;29503:87;29495:96;;;29270:329;;;;:::o;32212:547::-;32364:4;32344:24;;:16;32352:7;32344;:16::i;:::-;:24;;;32336:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32434:1;32420:16;;:2;:16;;;;32412:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32479:39;32500:4;32506:2;32510:7;32479:20;:39::i;:::-;32583:29;32600:1;32604:7;32583:8;:29::i;:::-;32644:1;32625:9;:15;32635:4;32625:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32673:1;32656:9;:13;32666:2;32656:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32704:2;32685:7;:16;32693:7;32685:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32743:7;32739:2;32724:27;;32733:4;32724:27;;;;;;;;;;;;32212:547;;;:::o;31522:353::-;31582:13;31598:16;31606:7;31598;:16::i;:::-;31582:32;;31627:48;31648:5;31663:1;31667:7;31627:20;:48::i;:::-;31716:29;31733:1;31737:7;31716:8;:29::i;:::-;31778:1;31758:9;:16;31768:5;31758:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31797:7;:16;31805:7;31797:16;;;;;;;;;;;;31790:23;;;;;;;;;;;31859:7;31855:1;31831:36;;31840:5;31831:36;;;;;;;;;;;;31571:304;31522:353;:::o;16207:173::-;16263:16;16282:6;;;;;;;;;;;16263:25;;16308:8;16299:6;;:17;;;;;;;;;;;;;;;;;;16363:8;16332:40;;16353:8;16332:40;;;;;;;;;;;;16252:128;16207:173;:::o;28372:291::-;28529:28;28539:4;28545:2;28549:7;28529:9;:28::i;:::-;28576:48;28599:4;28605:2;28609:7;28618:5;28576:22;:48::i;:::-;28568:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:291;;;;:::o;16423:532::-;16479:13;16518:1;16509:5;:10;16505:53;;;16536:10;;;;;;;;;;;;;;;;;;;;;16505:53;16568:12;16583:5;16568:20;;16599:14;16624:78;16639:1;16631:4;:9;16624:78;;16657:8;;;;;:::i;:::-;;;;16688:2;16680:10;;;;;:::i;:::-;;;16624:78;;;16712:19;16744:6;16734:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16712:39;;16762:154;16778:1;16769:5;:10;16762:154;;16806:1;16796:11;;;;;:::i;:::-;;;16873:2;16865:5;:10;;;;:::i;:::-;16852:2;:24;;;;:::i;:::-;16839:39;;16822:6;16829;16822:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16902:2;16893:11;;;;;:::i;:::-;;;16762:154;;;16940:6;16926:21;;;;;16423:532;;;;:::o;30278:297::-;30408:18;30414:2;30418:7;30408:5;:18::i;:::-;30459:54;30490:1;30494:2;30498:7;30507:5;30459:22;:54::i;:::-;30437:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;30278:297;;;:::o;35761:126::-;;;;:::o;33609:777::-;33764:4;33785:15;:2;:13;;;:15::i;:::-;33781:598;;;33837:2;33821:36;;;33858:10;33870:4;33876:7;33885:5;33821:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33817:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34082:1;34065:6;:13;:18;34061:248;;;34108:36;;;;;;;;;;:::i;:::-;;;;;;;;34061:248;34259:6;34253:13;34244:6;34240:2;34236:15;34229:38;33817:507;33952:45;;;33942:55;;;:6;:55;;;;33935:62;;;;;33781:598;34363:4;34356:11;;33609:777;;;;;;;:::o;30911:382::-;31005:1;30991:16;;:2;:16;;;;30983:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31064:16;31072:7;31064;:16::i;:::-;31063:17;31055:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31126:45;31155:1;31159:2;31163:7;31126:20;:45::i;:::-;31201:1;31184:9;:13;31194:2;31184:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31232:2;31213:7;:16;31221:7;31213:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31277:7;31273:2;31252:33;;31269:1;31252:33;;;;;;;;;;;;30911:382;;:::o;7417:387::-;7477:4;7685:12;7752:7;7740:20;7732:28;;7795:1;7788:4;:8;7781:15;;;7417:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:143::-;4043:5;4074:6;4068:13;4059:22;;4090:33;4117:5;4090:33;:::i;:::-;3986:143;;;;:::o;4135:329::-;4194:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:119;;;4249:79;;:::i;:::-;4211:119;4369:1;4394:53;4439:7;4430:6;4419:9;4415:22;4394:53;:::i;:::-;4384:63;;4340:117;4135:329;;;;:::o;4470:474::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:119;;;4601:79;;:::i;:::-;4563:119;4721:1;4746:53;4791:7;4782:6;4771:9;4767:22;4746:53;:::i;:::-;4736:63;;4692:117;4848:2;4874:53;4919:7;4910:6;4899:9;4895:22;4874:53;:::i;:::-;4864:63;;4819:118;4470:474;;;;;:::o;4950:619::-;5027:6;5035;5043;5092:2;5080:9;5071:7;5067:23;5063:32;5060:119;;;5098:79;;:::i;:::-;5060:119;5218:1;5243:53;5288:7;5279:6;5268:9;5264:22;5243:53;:::i;:::-;5233:63;;5189:117;5345:2;5371:53;5416:7;5407:6;5396:9;5392:22;5371:53;:::i;:::-;5361:63;;5316:118;5473:2;5499:53;5544:7;5535:6;5524:9;5520:22;5499:53;:::i;:::-;5489:63;;5444:118;4950:619;;;;;:::o;5575:963::-;5672:6;5680;5688;5696;5704;5753:3;5741:9;5732:7;5728:23;5724:33;5721:120;;;5760:79;;:::i;:::-;5721:120;5880:1;5905:53;5950:7;5941:6;5930:9;5926:22;5905:53;:::i;:::-;5895:63;;5851:117;6007:2;6033:53;6078:7;6069:6;6058:9;6054:22;6033:53;:::i;:::-;6023:63;;5978:118;6135:2;6161:53;6206:7;6197:6;6186:9;6182:22;6161:53;:::i;:::-;6151:63;;6106:118;6291:2;6280:9;6276:18;6263:32;6322:18;6314:6;6311:30;6308:117;;;6344:79;;:::i;:::-;6308:117;6457:64;6513:7;6504:6;6493:9;6489:22;6457:64;:::i;:::-;6439:82;;;;6234:297;5575:963;;;;;;;;:::o;6544:943::-;6639:6;6647;6655;6663;6712:3;6700:9;6691:7;6687:23;6683:33;6680:120;;;6719:79;;:::i;:::-;6680:120;6839:1;6864:53;6909:7;6900:6;6889:9;6885:22;6864:53;:::i;:::-;6854:63;;6810:117;6966:2;6992:53;7037:7;7028:6;7017:9;7013:22;6992:53;:::i;:::-;6982:63;;6937:118;7094:2;7120:53;7165:7;7156:6;7145:9;7141:22;7120:53;:::i;:::-;7110:63;;7065:118;7250:2;7239:9;7235:18;7222:32;7281:18;7273:6;7270:30;7267:117;;;7303:79;;:::i;:::-;7267:117;7408:62;7462:7;7453:6;7442:9;7438:22;7408:62;:::i;:::-;7398:72;;7193:287;6544:943;;;;;;;:::o;7493:468::-;7558:6;7566;7615:2;7603:9;7594:7;7590:23;7586:32;7583:119;;;7621:79;;:::i;:::-;7583:119;7741:1;7766:53;7811:7;7802:6;7791:9;7787:22;7766:53;:::i;:::-;7756:63;;7712:117;7868:2;7894:50;7936:7;7927:6;7916:9;7912:22;7894:50;:::i;:::-;7884:60;;7839:115;7493:468;;;;;:::o;7967:474::-;8035:6;8043;8092:2;8080:9;8071:7;8067:23;8063:32;8060:119;;;8098:79;;:::i;:::-;8060:119;8218:1;8243:53;8288:7;8279:6;8268:9;8264:22;8243:53;:::i;:::-;8233:63;;8189:117;8345:2;8371:53;8416:7;8407:6;8396:9;8392:22;8371:53;:::i;:::-;8361:63;;8316:118;7967:474;;;;;:::o;8447:539::-;8531:6;8580:2;8568:9;8559:7;8555:23;8551:32;8548:119;;;8586:79;;:::i;:::-;8548:119;8734:1;8723:9;8719:17;8706:31;8764:18;8756:6;8753:30;8750:117;;;8786:79;;:::i;:::-;8750:117;8891:78;8961:7;8952:6;8941:9;8937:22;8891:78;:::i;:::-;8881:88;;8677:302;8447:539;;;;:::o;8992:327::-;9050:6;9099:2;9087:9;9078:7;9074:23;9070:32;9067:119;;;9105:79;;:::i;:::-;9067:119;9225:1;9250:52;9294:7;9285:6;9274:9;9270:22;9250:52;:::i;:::-;9240:62;;9196:116;8992:327;;;;:::o;9325:349::-;9394:6;9443:2;9431:9;9422:7;9418:23;9414:32;9411:119;;;9449:79;;:::i;:::-;9411:119;9569:1;9594:63;9649:7;9640:6;9629:9;9625:22;9594:63;:::i;:::-;9584:73;;9540:127;9325:349;;;;:::o;9680:509::-;9749:6;9798:2;9786:9;9777:7;9773:23;9769:32;9766:119;;;9804:79;;:::i;:::-;9766:119;9952:1;9941:9;9937:17;9924:31;9982:18;9974:6;9971:30;9968:117;;;10004:79;;:::i;:::-;9968:117;10109:63;10164:7;10155:6;10144:9;10140:22;10109:63;:::i;:::-;10099:73;;9895:287;9680:509;;;;:::o;10195:329::-;10254:6;10303:2;10291:9;10282:7;10278:23;10274:32;10271:119;;;10309:79;;:::i;:::-;10271:119;10429:1;10454:53;10499:7;10490:6;10479:9;10475:22;10454:53;:::i;:::-;10444:63;;10400:117;10195:329;;;;:::o;10530:351::-;10600:6;10649:2;10637:9;10628:7;10624:23;10620:32;10617:119;;;10655:79;;:::i;:::-;10617:119;10775:1;10800:64;10856:7;10847:6;10836:9;10832:22;10800:64;:::i;:::-;10790:74;;10746:128;10530:351;;;;:::o;10887:118::-;10974:24;10992:5;10974:24;:::i;:::-;10969:3;10962:37;10887:118;;:::o;11011:109::-;11092:21;11107:5;11092:21;:::i;:::-;11087:3;11080:34;11011:109;;:::o;11126:115::-;11211:23;11228:5;11211:23;:::i;:::-;11206:3;11199:36;11126:115;;:::o;11247:360::-;11333:3;11361:38;11393:5;11361:38;:::i;:::-;11415:70;11478:6;11473:3;11415:70;:::i;:::-;11408:77;;11494:52;11539:6;11534:3;11527:4;11520:5;11516:16;11494:52;:::i;:::-;11571:29;11593:6;11571:29;:::i;:::-;11566:3;11562:39;11555:46;;11337:270;11247:360;;;;:::o;11613:147::-;11708:45;11747:5;11708:45;:::i;:::-;11703:3;11696:58;11613:147;;:::o;11766:364::-;11854:3;11882:39;11915:5;11882:39;:::i;:::-;11937:71;12001:6;11996:3;11937:71;:::i;:::-;11930:78;;12017:52;12062:6;12057:3;12050:4;12043:5;12039:16;12017:52;:::i;:::-;12094:29;12116:6;12094:29;:::i;:::-;12089:3;12085:39;12078:46;;11858:272;11766:364;;;;:::o;12136:377::-;12242:3;12270:39;12303:5;12270:39;:::i;:::-;12325:89;12407:6;12402:3;12325:89;:::i;:::-;12318:96;;12423:52;12468:6;12463:3;12456:4;12449:5;12445:16;12423:52;:::i;:::-;12500:6;12495:3;12491:16;12484:23;;12246:267;12136:377;;;;:::o;12543:845::-;12646:3;12683:5;12677:12;12712:36;12738:9;12712:36;:::i;:::-;12764:89;12846:6;12841:3;12764:89;:::i;:::-;12757:96;;12884:1;12873:9;12869:17;12900:1;12895:137;;;;13046:1;13041:341;;;;12862:520;;12895:137;12979:4;12975:9;12964;12960:25;12955:3;12948:38;13015:6;13010:3;13006:16;12999:23;;12895:137;;13041:341;13108:38;13140:5;13108:38;:::i;:::-;13168:1;13182:154;13196:6;13193:1;13190:13;13182:154;;;13270:7;13264:14;13260:1;13255:3;13251:11;13244:35;13320:1;13311:7;13307:15;13296:26;;13218:4;13215:1;13211:12;13206:17;;13182:154;;;13365:6;13360:3;13356:16;13349:23;;13048:334;;12862:520;;12650:738;;12543:845;;;;:::o;13394:366::-;13536:3;13557:67;13621:2;13616:3;13557:67;:::i;:::-;13550:74;;13633:93;13722:3;13633:93;:::i;:::-;13751:2;13746:3;13742:12;13735:19;;13394:366;;;:::o;13766:::-;13908:3;13929:67;13993:2;13988:3;13929:67;:::i;:::-;13922:74;;14005:93;14094:3;14005:93;:::i;:::-;14123:2;14118:3;14114:12;14107:19;;13766:366;;;:::o;14138:402::-;14298:3;14319:85;14401:2;14396:3;14319:85;:::i;:::-;14312:92;;14413:93;14502:3;14413:93;:::i;:::-;14531:2;14526:3;14522:12;14515:19;;14138:402;;;:::o;14546:366::-;14688:3;14709:67;14773:2;14768:3;14709:67;:::i;:::-;14702:74;;14785:93;14874:3;14785:93;:::i;:::-;14903:2;14898:3;14894:12;14887:19;;14546:366;;;:::o;14918:::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;14918:366;;;:::o;15290:::-;15432:3;15453:67;15517:2;15512:3;15453:67;:::i;:::-;15446:74;;15529:93;15618:3;15529:93;:::i;:::-;15647:2;15642:3;15638:12;15631:19;;15290:366;;;:::o;15662:::-;15804:3;15825:67;15889:2;15884:3;15825:67;:::i;:::-;15818:74;;15901:93;15990:3;15901:93;:::i;:::-;16019:2;16014:3;16010:12;16003:19;;15662:366;;;:::o;16034:::-;16176:3;16197:67;16261:2;16256:3;16197:67;:::i;:::-;16190:74;;16273:93;16362:3;16273:93;:::i;:::-;16391:2;16386:3;16382:12;16375:19;;16034:366;;;:::o;16406:::-;16548:3;16569:67;16633:2;16628:3;16569:67;:::i;:::-;16562:74;;16645:93;16734:3;16645:93;:::i;:::-;16763:2;16758:3;16754:12;16747:19;;16406:366;;;:::o;16778:::-;16920:3;16941:67;17005:2;17000:3;16941:67;:::i;:::-;16934:74;;17017:93;17106:3;17017:93;:::i;:::-;17135:2;17130:3;17126:12;17119:19;;16778:366;;;:::o;17150:::-;17292:3;17313:67;17377:2;17372:3;17313:67;:::i;:::-;17306:74;;17389:93;17478:3;17389:93;:::i;:::-;17507:2;17502:3;17498:12;17491:19;;17150:366;;;:::o;17522:::-;17664:3;17685:67;17749:2;17744:3;17685:67;:::i;:::-;17678:74;;17761:93;17850:3;17761:93;:::i;:::-;17879:2;17874:3;17870:12;17863:19;;17522:366;;;:::o;17894:::-;18036:3;18057:67;18121:2;18116:3;18057:67;:::i;:::-;18050:74;;18133:93;18222:3;18133:93;:::i;:::-;18251:2;18246:3;18242:12;18235:19;;17894:366;;;:::o;18266:::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:::-;18780:3;18801:67;18865:2;18860:3;18801:67;:::i;:::-;18794:74;;18877:93;18966:3;18877:93;:::i;:::-;18995:2;18990:3;18986:12;18979:19;;18638:366;;;:::o;19010:::-;19152:3;19173:67;19237:2;19232:3;19173:67;:::i;:::-;19166:74;;19249:93;19338:3;19249:93;:::i;:::-;19367:2;19362:3;19358:12;19351:19;;19010:366;;;:::o;19382:::-;19524:3;19545:67;19609:2;19604:3;19545:67;:::i;:::-;19538:74;;19621:93;19710:3;19621:93;:::i;:::-;19739:2;19734:3;19730:12;19723:19;;19382:366;;;:::o;19754:400::-;19914:3;19935:84;20017:1;20012:3;19935:84;:::i;:::-;19928:91;;20028:93;20117:3;20028:93;:::i;:::-;20146:1;20141:3;20137:11;20130:18;;19754:400;;;:::o;20160:366::-;20302:3;20323:67;20387:2;20382:3;20323:67;:::i;:::-;20316:74;;20399:93;20488:3;20399:93;:::i;:::-;20517:2;20512:3;20508:12;20501:19;;20160:366;;;:::o;20532:::-;20674:3;20695:67;20759:2;20754:3;20695:67;:::i;:::-;20688:74;;20771:93;20860:3;20771:93;:::i;:::-;20889:2;20884:3;20880:12;20873:19;;20532:366;;;:::o;20904:::-;21046:3;21067:67;21131:2;21126:3;21067:67;:::i;:::-;21060:74;;21143:93;21232:3;21143:93;:::i;:::-;21261:2;21256:3;21252:12;21245:19;;20904:366;;;:::o;21276:::-;21418:3;21439:67;21503:2;21498:3;21439:67;:::i;:::-;21432:74;;21515:93;21604:3;21515:93;:::i;:::-;21633:2;21628:3;21624:12;21617:19;;21276:366;;;:::o;21648:::-;21790:3;21811:67;21875:2;21870:3;21811:67;:::i;:::-;21804:74;;21887:93;21976:3;21887:93;:::i;:::-;22005:2;22000:3;21996:12;21989:19;;21648:366;;;:::o;22020:398::-;22179:3;22200:83;22281:1;22276:3;22200:83;:::i;:::-;22193:90;;22292:93;22381:3;22292:93;:::i;:::-;22410:1;22405:3;22401:11;22394:18;;22020:398;;;:::o;22424:366::-;22566:3;22587:67;22651:2;22646:3;22587:67;:::i;:::-;22580:74;;22663:93;22752:3;22663:93;:::i;:::-;22781:2;22776:3;22772:12;22765:19;;22424:366;;;:::o;22796:::-;22938:3;22959:67;23023:2;23018:3;22959:67;:::i;:::-;22952:74;;23035:93;23124:3;23035:93;:::i;:::-;23153:2;23148:3;23144:12;23137:19;;22796:366;;;:::o;23168:::-;23310:3;23331:67;23395:2;23390:3;23331:67;:::i;:::-;23324:74;;23407:93;23496:3;23407:93;:::i;:::-;23525:2;23520:3;23516:12;23509:19;;23168:366;;;:::o;23540:118::-;23627:24;23645:5;23627:24;:::i;:::-;23622:3;23615:37;23540:118;;:::o;23664:695::-;23942:3;23964:92;24052:3;24043:6;23964:92;:::i;:::-;23957:99;;24073:95;24164:3;24155:6;24073:95;:::i;:::-;24066:102;;24185:148;24329:3;24185:148;:::i;:::-;24178:155;;24350:3;24343:10;;23664:695;;;;;:::o;24365:535::-;24595:3;24617:92;24705:3;24696:6;24617:92;:::i;:::-;24610:99;;24726:148;24870:3;24726:148;:::i;:::-;24719:155;;24891:3;24884:10;;24365:535;;;;:::o;24906:379::-;25090:3;25112:147;25255:3;25112:147;:::i;:::-;25105:154;;25276:3;25269:10;;24906:379;;;:::o;25291:222::-;25384:4;25422:2;25411:9;25407:18;25399:26;;25435:71;25503:1;25492:9;25488:17;25479:6;25435:71;:::i;:::-;25291:222;;;;:::o;25519:442::-;25668:4;25706:2;25695:9;25691:18;25683:26;;25719:71;25787:1;25776:9;25772:17;25763:6;25719:71;:::i;:::-;25800:72;25868:2;25857:9;25853:18;25844:6;25800:72;:::i;:::-;25882;25950:2;25939:9;25935:18;25926:6;25882:72;:::i;:::-;25519:442;;;;;;:::o;25967:640::-;26162:4;26200:3;26189:9;26185:19;26177:27;;26214:71;26282:1;26271:9;26267:17;26258:6;26214:71;:::i;:::-;26295:72;26363:2;26352:9;26348:18;26339:6;26295:72;:::i;:::-;26377;26445:2;26434:9;26430:18;26421:6;26377:72;:::i;:::-;26496:9;26490:4;26486:20;26481:2;26470:9;26466:18;26459:48;26524:76;26595:4;26586:6;26524:76;:::i;:::-;26516:84;;25967:640;;;;;;;:::o;26613:348::-;26742:4;26780:2;26769:9;26765:18;26757:26;;26793:71;26861:1;26850:9;26846:17;26837:6;26793:71;:::i;:::-;26874:80;26950:2;26939:9;26935:18;26926:6;26874:80;:::i;:::-;26613:348;;;;;:::o;26967:210::-;27054:4;27092:2;27081:9;27077:18;27069:26;;27105:65;27167:1;27156:9;27152:17;27143:6;27105:65;:::i;:::-;26967:210;;;;:::o;27183:218::-;27274:4;27312:2;27301:9;27297:18;27289:26;;27325:69;27391:1;27380:9;27376:17;27367:6;27325:69;:::i;:::-;27183:218;;;;:::o;27407:313::-;27520:4;27558:2;27547:9;27543:18;27535:26;;27607:9;27601:4;27597:20;27593:1;27582:9;27578:17;27571:47;27635:78;27708:4;27699:6;27635:78;:::i;:::-;27627:86;;27407:313;;;;:::o;27726:419::-;27892:4;27930:2;27919:9;27915:18;27907:26;;27979:9;27973:4;27969:20;27965:1;27954:9;27950:17;27943:47;28007:131;28133:4;28007:131;:::i;:::-;27999:139;;27726:419;;;:::o;28151:::-;28317:4;28355:2;28344:9;28340:18;28332:26;;28404:9;28398:4;28394:20;28390:1;28379:9;28375:17;28368:47;28432:131;28558:4;28432:131;:::i;:::-;28424:139;;28151:419;;;:::o;28576:::-;28742:4;28780:2;28769:9;28765:18;28757:26;;28829:9;28823:4;28819:20;28815:1;28804:9;28800:17;28793:47;28857:131;28983:4;28857:131;:::i;:::-;28849:139;;28576:419;;;:::o;29001:::-;29167:4;29205:2;29194:9;29190:18;29182:26;;29254:9;29248:4;29244:20;29240:1;29229:9;29225:17;29218:47;29282:131;29408:4;29282:131;:::i;:::-;29274:139;;29001:419;;;:::o;29426:::-;29592:4;29630:2;29619:9;29615:18;29607:26;;29679:9;29673:4;29669:20;29665:1;29654:9;29650:17;29643:47;29707:131;29833:4;29707:131;:::i;:::-;29699:139;;29426:419;;;:::o;29851:::-;30017:4;30055:2;30044:9;30040:18;30032:26;;30104:9;30098:4;30094:20;30090:1;30079:9;30075:17;30068:47;30132:131;30258:4;30132:131;:::i;:::-;30124:139;;29851:419;;;:::o;30276:::-;30442:4;30480:2;30469:9;30465:18;30457:26;;30529:9;30523:4;30519:20;30515:1;30504:9;30500:17;30493:47;30557:131;30683:4;30557:131;:::i;:::-;30549:139;;30276:419;;;:::o;30701:::-;30867:4;30905:2;30894:9;30890:18;30882:26;;30954:9;30948:4;30944:20;30940:1;30929:9;30925:17;30918:47;30982:131;31108:4;30982:131;:::i;:::-;30974:139;;30701:419;;;:::o;31126:::-;31292:4;31330:2;31319:9;31315:18;31307:26;;31379:9;31373:4;31369:20;31365:1;31354:9;31350:17;31343:47;31407:131;31533:4;31407:131;:::i;:::-;31399:139;;31126:419;;;:::o;31551:::-;31717:4;31755:2;31744:9;31740:18;31732:26;;31804:9;31798:4;31794:20;31790:1;31779:9;31775:17;31768:47;31832:131;31958:4;31832:131;:::i;:::-;31824:139;;31551:419;;;:::o;31976:::-;32142:4;32180:2;32169:9;32165:18;32157:26;;32229:9;32223:4;32219:20;32215:1;32204:9;32200:17;32193:47;32257:131;32383:4;32257:131;:::i;:::-;32249:139;;31976:419;;;:::o;32401:::-;32567:4;32605:2;32594:9;32590:18;32582:26;;32654:9;32648:4;32644:20;32640:1;32629:9;32625:17;32618:47;32682:131;32808:4;32682:131;:::i;:::-;32674:139;;32401:419;;;:::o;32826:::-;32992:4;33030:2;33019:9;33015:18;33007:26;;33079:9;33073:4;33069:20;33065:1;33054:9;33050:17;33043:47;33107:131;33233:4;33107:131;:::i;:::-;33099:139;;32826:419;;;:::o;33251:::-;33417:4;33455:2;33444:9;33440:18;33432:26;;33504:9;33498:4;33494:20;33490:1;33479:9;33475:17;33468:47;33532:131;33658:4;33532:131;:::i;:::-;33524:139;;33251:419;;;:::o;33676:::-;33842:4;33880:2;33869:9;33865:18;33857:26;;33929:9;33923:4;33919:20;33915:1;33904:9;33900:17;33893:47;33957:131;34083:4;33957:131;:::i;:::-;33949:139;;33676:419;;;:::o;34101:::-;34267:4;34305:2;34294:9;34290:18;34282:26;;34354:9;34348:4;34344:20;34340:1;34329:9;34325:17;34318:47;34382:131;34508:4;34382:131;:::i;:::-;34374:139;;34101:419;;;:::o;34526:::-;34692:4;34730:2;34719:9;34715:18;34707:26;;34779:9;34773:4;34769:20;34765:1;34754:9;34750:17;34743:47;34807:131;34933:4;34807:131;:::i;:::-;34799:139;;34526:419;;;:::o;34951:::-;35117:4;35155:2;35144:9;35140:18;35132:26;;35204:9;35198:4;35194:20;35190:1;35179:9;35175:17;35168:47;35232:131;35358:4;35232:131;:::i;:::-;35224:139;;34951:419;;;:::o;35376:::-;35542:4;35580:2;35569:9;35565:18;35557:26;;35629:9;35623:4;35619:20;35615:1;35604:9;35600:17;35593:47;35657:131;35783:4;35657:131;:::i;:::-;35649:139;;35376:419;;;:::o;35801:::-;35967:4;36005:2;35994:9;35990:18;35982:26;;36054:9;36048:4;36044:20;36040:1;36029:9;36025:17;36018:47;36082:131;36208:4;36082:131;:::i;:::-;36074:139;;35801:419;;;:::o;36226:::-;36392:4;36430:2;36419:9;36415:18;36407:26;;36479:9;36473:4;36469:20;36465:1;36454:9;36450:17;36443:47;36507:131;36633:4;36507:131;:::i;:::-;36499:139;;36226:419;;;:::o;36651:::-;36817:4;36855:2;36844:9;36840:18;36832:26;;36904:9;36898:4;36894:20;36890:1;36879:9;36875:17;36868:47;36932:131;37058:4;36932:131;:::i;:::-;36924:139;;36651:419;;;:::o;37076:::-;37242:4;37280:2;37269:9;37265:18;37257:26;;37329:9;37323:4;37319:20;37315:1;37304:9;37300:17;37293:47;37357:131;37483:4;37357:131;:::i;:::-;37349:139;;37076:419;;;:::o;37501:::-;37667:4;37705:2;37694:9;37690:18;37682:26;;37754:9;37748:4;37744:20;37740:1;37729:9;37725:17;37718:47;37782:131;37908:4;37782:131;:::i;:::-;37774:139;;37501:419;;;:::o;37926:222::-;38019:4;38057:2;38046:9;38042:18;38034:26;;38070:71;38138:1;38127:9;38123:17;38114:6;38070:71;:::i;:::-;37926:222;;;;:::o;38154:129::-;38188:6;38215:20;;:::i;:::-;38205:30;;38244:33;38272:4;38264:6;38244:33;:::i;:::-;38154:129;;;:::o;38289:75::-;38322:6;38355:2;38349:9;38339:19;;38289:75;:::o;38370:311::-;38447:4;38537:18;38529:6;38526:30;38523:56;;;38559:18;;:::i;:::-;38523:56;38609:4;38601:6;38597:17;38589:25;;38669:4;38663;38659:15;38651:23;;38370:311;;;:::o;38687:307::-;38748:4;38838:18;38830:6;38827:30;38824:56;;;38860:18;;:::i;:::-;38824:56;38898:29;38920:6;38898:29;:::i;:::-;38890:37;;38982:4;38976;38972:15;38964:23;;38687:307;;;:::o;39000:308::-;39062:4;39152:18;39144:6;39141:30;39138:56;;;39174:18;;:::i;:::-;39138:56;39212:29;39234:6;39212:29;:::i;:::-;39204:37;;39296:4;39290;39286:15;39278:23;;39000:308;;;:::o;39314:141::-;39363:4;39386:3;39378:11;;39409:3;39406:1;39399:14;39443:4;39440:1;39430:18;39422:26;;39314:141;;;:::o;39461:98::-;39512:6;39546:5;39540:12;39530:22;;39461:98;;;:::o;39565:99::-;39617:6;39651:5;39645:12;39635:22;;39565:99;;;:::o;39670:168::-;39753:11;39787:6;39782:3;39775:19;39827:4;39822:3;39818:14;39803:29;;39670:168;;;;:::o;39844:147::-;39945:11;39982:3;39967:18;;39844:147;;;;:::o;39997:169::-;40081:11;40115:6;40110:3;40103:19;40155:4;40150:3;40146:14;40131:29;;39997:169;;;;:::o;40172:148::-;40274:11;40311:3;40296:18;;40172:148;;;;:::o;40326:305::-;40366:3;40385:20;40403:1;40385:20;:::i;:::-;40380:25;;40419:20;40437:1;40419:20;:::i;:::-;40414:25;;40573:1;40505:66;40501:74;40498:1;40495:81;40492:107;;;40579:18;;:::i;:::-;40492:107;40623:1;40620;40616:9;40609:16;;40326:305;;;;:::o;40637:185::-;40677:1;40694:20;40712:1;40694:20;:::i;:::-;40689:25;;40728:20;40746:1;40728:20;:::i;:::-;40723:25;;40767:1;40757:35;;40772:18;;:::i;:::-;40757:35;40814:1;40811;40807:9;40802:14;;40637:185;;;;:::o;40828:348::-;40868:7;40891:20;40909:1;40891:20;:::i;:::-;40886:25;;40925:20;40943:1;40925:20;:::i;:::-;40920:25;;41113:1;41045:66;41041:74;41038:1;41035:81;41030:1;41023:9;41016:17;41012:105;41009:131;;;41120:18;;:::i;:::-;41009:131;41168:1;41165;41161:9;41150:20;;40828:348;;;;:::o;41182:191::-;41222:4;41242:20;41260:1;41242:20;:::i;:::-;41237:25;;41276:20;41294:1;41276:20;:::i;:::-;41271:25;;41315:1;41312;41309:8;41306:34;;;41320:18;;:::i;:::-;41306:34;41365:1;41362;41358:9;41350:17;;41182:191;;;;:::o;41379:96::-;41416:7;41445:24;41463:5;41445:24;:::i;:::-;41434:35;;41379:96;;;:::o;41481:90::-;41515:7;41558:5;41551:13;41544:21;41533:32;;41481:90;;;:::o;41577:149::-;41613:7;41653:66;41646:5;41642:78;41631:89;;41577:149;;;:::o;41732:126::-;41769:7;41809:42;41802:5;41798:54;41787:65;;41732:126;;;:::o;41864:77::-;41901:7;41930:5;41919:16;;41864:77;;;:::o;41947:121::-;42005:9;42038:24;42056:5;42038:24;:::i;:::-;42025:37;;41947:121;;;:::o;42074:154::-;42158:6;42153:3;42148;42135:30;42220:1;42211:6;42206:3;42202:16;42195:27;42074:154;;;:::o;42234:307::-;42302:1;42312:113;42326:6;42323:1;42320:13;42312:113;;;42411:1;42406:3;42402:11;42396:18;42392:1;42387:3;42383:11;42376:39;42348:2;42345:1;42341:10;42336:15;;42312:113;;;42443:6;42440:1;42437:13;42434:101;;;42523:1;42514:6;42509:3;42505:16;42498:27;42434:101;42283:258;42234:307;;;:::o;42547:320::-;42591:6;42628:1;42622:4;42618:12;42608:22;;42675:1;42669:4;42665:12;42696:18;42686:81;;42752:4;42744:6;42740:17;42730:27;;42686:81;42814:2;42806:6;42803:14;42783:18;42780:38;42777:84;;;42833:18;;:::i;:::-;42777:84;42598:269;42547:320;;;:::o;42873:281::-;42956:27;42978:4;42956:27;:::i;:::-;42948:6;42944:40;43086:6;43074:10;43071:22;43050:18;43038:10;43035:34;43032:62;43029:88;;;43097:18;;:::i;:::-;43029:88;43137:10;43133:2;43126:22;42916:238;42873:281;;:::o;43160:233::-;43199:3;43222:24;43240:5;43222:24;:::i;:::-;43213:33;;43268:66;43261:5;43258:77;43255:103;;;43338:18;;:::i;:::-;43255:103;43385:1;43378:5;43374:13;43367:20;;43160:233;;;:::o;43399:176::-;43431:1;43448:20;43466:1;43448:20;:::i;:::-;43443:25;;43482:20;43500:1;43482:20;:::i;:::-;43477:25;;43521:1;43511:35;;43526:18;;:::i;:::-;43511:35;43567:1;43564;43560:9;43555:14;;43399:176;;;;:::o;43581:180::-;43629:77;43626:1;43619:88;43726:4;43723:1;43716:15;43750:4;43747:1;43740:15;43767:180;43815:77;43812:1;43805:88;43912:4;43909:1;43902:15;43936:4;43933:1;43926:15;43953:180;44001:77;43998:1;43991:88;44098:4;44095:1;44088:15;44122:4;44119:1;44112:15;44139:180;44187:77;44184:1;44177:88;44284:4;44281:1;44274:15;44308:4;44305:1;44298:15;44325:180;44373:77;44370:1;44363:88;44470:4;44467:1;44460:15;44494:4;44491:1;44484:15;44511:117;44620:1;44617;44610:12;44634:117;44743:1;44740;44733:12;44757:117;44866:1;44863;44856:12;44880:117;44989:1;44986;44979:12;45003:117;45112:1;45109;45102:12;45126:117;45235:1;45232;45225:12;45249:102;45290:6;45341:2;45337:7;45332:2;45325:5;45321:14;45317:28;45307:38;;45249:102;;;:::o;45357:180::-;45497:32;45493:1;45485:6;45481:14;45474:56;45357:180;:::o;45543:182::-;45683:34;45679:1;45671:6;45667:14;45660:58;45543:182;:::o;45731:163::-;45871:15;45867:1;45859:6;45855:14;45848:39;45731:163;:::o;45900:177::-;46040:29;46036:1;46028:6;46024:14;46017:53;45900:177;:::o;46083:178::-;46223:30;46219:1;46211:6;46207:14;46200:54;46083:178;:::o;46267:182::-;46407:34;46403:1;46395:6;46391:14;46384:58;46267:182;:::o;46455:180::-;46595:32;46591:1;46583:6;46579:14;46572:56;46455:180;:::o;46641:174::-;46781:26;46777:1;46769:6;46765:14;46758:50;46641:174;:::o;46821:182::-;46961:34;46957:1;46949:6;46945:14;46938:58;46821:182;:::o;47009:175::-;47149:27;47145:1;47137:6;47133:14;47126:51;47009:175;:::o;47190:180::-;47330:32;47326:1;47318:6;47314:14;47307:56;47190:180;:::o;47376:176::-;47516:28;47512:1;47504:6;47500:14;47493:52;47376:176;:::o;47558:167::-;47698:19;47694:1;47686:6;47682:14;47675:43;47558:167;:::o;47731:181::-;47871:33;47867:1;47859:6;47855:14;47848:57;47731:181;:::o;47918:::-;48058:33;48054:1;48046:6;48042:14;48035:57;47918:181;:::o;48105:182::-;48245:34;48241:1;48233:6;48229:14;48222:58;48105:182;:::o;48293:::-;48433:34;48429:1;48421:6;48417:14;48410:58;48293:182;:::o;48481:155::-;48621:7;48617:1;48609:6;48605:14;48598:31;48481:155;:::o;48642:178::-;48782:30;48778:1;48770:6;48766:14;48759:54;48642:178;:::o;48826:182::-;48966:34;48962:1;48954:6;48950:14;48943:58;48826:182;:::o;49014:174::-;49154:26;49150:1;49142:6;49138:14;49131:50;49014:174;:::o;49194:178::-;49334:30;49330:1;49322:6;49318:14;49311:54;49194:178;:::o;49378:177::-;49518:29;49514:1;49506:6;49502:14;49495:53;49378:177;:::o;49561:114::-;;:::o;49681:170::-;49821:22;49817:1;49809:6;49805:14;49798:46;49681:170;:::o;49857:169::-;49997:21;49993:1;49985:6;49981:14;49974:45;49857:169;:::o;50032:::-;50172:21;50168:1;50160:6;50156:14;50149:45;50032:169;:::o;50207:122::-;50280:24;50298:5;50280:24;:::i;:::-;50273:5;50270:35;50260:63;;50319:1;50316;50309:12;50260:63;50207:122;:::o;50335:116::-;50405:21;50420:5;50405:21;:::i;:::-;50398:5;50395:32;50385:60;;50441:1;50438;50431:12;50385:60;50335:116;:::o;50457:120::-;50529:23;50546:5;50529:23;:::i;:::-;50522:5;50519:34;50509:62;;50567:1;50564;50557:12;50509:62;50457:120;:::o;50583:122::-;50656:24;50674:5;50656:24;:::i;:::-;50649:5;50646:35;50636:63;;50695:1;50692;50685:12;50636:63;50583:122;:::o

Swarm Source

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