ETH Price: $3,236.63 (-1.26%)

Token

Slimy Snails (SNAIL)
 

Overview

Max Total Supply

138 SNAIL

Holders

85

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SNAIL
0x39c53bb4a3c0d18bc0f8acaf1761be7d5cd7fcb5
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:
slimySnails

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 2021-10-21
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/


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, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @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, "Address: low-level call with value failed");
    }

    /**
     * @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, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @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, "Address: low-level static call failed");
    }

    /**
     * @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), "Address: static call to 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, "Address: low-level delegate 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), "Address: delegate call to non-contract");

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) 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 the zero 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 to reenter a locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

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

contract slimySnails 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;
    
    // PandaBugz Specific Functionality
    bool public mintActive;
    bool public whiteActive;
    bool public greyActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public price;
    uint256 public maxPerWallet;
    uint256 private _greyListPrice;
    uint256 private _whiteListPrice;
    uint256 public totalTokens;
    uint256 public numberMinted;
    
    mapping(address => bool) private _whitelist;
    mapping(address => bool) private _greylist;

    mapping(address => uint256) private _payoutPercent;
    mapping(address => uint256) private _payoutAmount;
    mapping(address => uint256) private _numberPurchased;
    
    address[] private _payoutWallets;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        //*** notes ***//
        // Removed Max per Txn
        // Add wallet tracker
        
        _name = "Slimy Snails";
        _symbol = "SNAIL";
        
        // Set URI to the propper address from the get-go, no secret mission going on here ;)
        _baseURI = "https://slimysnails.io/metadata/";
        _hideTokens = true;
        
        totalTokens = 5555;
        price = 55 * (10 ** 15); // Replace leading value with price in finney
        maxPerWallet = 20;
        _whiteListPrice = price;
        _greyListPrice = price;
        
        _payoutWallets.push(0x5A3e0bB30423fa1B7601a06C5F88b862F7D77C71);
        _payoutPercent[0x5A3e0bB30423fa1B7601a06C5F88b862F7D77C71] = 455;
        _payoutWallets.push(0x1FE4d637C215722C0De4dAba922323Ad228ACF00);
        _payoutPercent[0x1FE4d637C215722C0De4dAba922323Ad228ACF00] = 100; //art
        _payoutWallets.push(0x690360ABbB34649eB3d4D811f8e9362303e95080);
        _payoutPercent[0x690360ABbB34649eB3d4D811f8e9362303e95080] = 50;
        _payoutWallets.push(0x2496286BDB820d40C402802F828ae265b244188A);
        _payoutPercent[0x2496286BDB820d40C402802F828ae265b244188A] = 50; //ogg
        _payoutWallets.push(0x6B1e16029ee4232Be377accbaF9304F5620D39a3);
        _payoutPercent[0x6B1e16029ee4232Be377accbaF9304F5620D39a3] = 50;
        _payoutWallets.push(0x8934CC45DF1aB99Fb75Bc53a617548e1096f3013);
        _payoutPercent[0x8934CC45DF1aB99Fb75Bc53a617548e1096f3013] = 120;
        _payoutWallets.push(0x0c0d73B99d81B237cD67EfAFB7fe6475F360917A);
        _payoutPercent[0x0c0d73B99d81B237cD67EfAFB7fe6475F360917A] = 25;
        _payoutWallets.push(0x9579074285DE0A1166493e7054b0a241907C51dE);
        _payoutPercent[0x9579074285DE0A1166493e7054b0a241907C51dE] = 25;
        _payoutWallets.push(0x4dc6823268ceC81bE1c4F1AeF10F7206cac2d56b);
        _payoutPercent[0x4dc6823268ceC81bE1c4F1AeF10F7206cac2d56b] = 25;
        _payoutWallets.push(0x58B9369f1ed16D38De267663dc9B1389a9571623); 
        _payoutPercent[0x58B9369f1ed16D38De267663dc9B1389a9571623] = 50;  //powi
        _payoutWallets.push(0xA5bBc9FBB516818e875B0e563DE0e60bfd517764);
        _payoutPercent[0xA5bBc9FBB516818e875B0e563DE0e60bfd517764] = 50;
        

    }

    //@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 == slimySnails.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external reentryLock {
        //send to addresses and percentages
        uint256 sendAmount = _payoutAmount[_msgSender()];
        _payoutAmount[_msgSender()] = 0;
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function assignPayouts(uint256 amountReceived) internal {
        require(amountReceived > 0);
        for(uint i; i < _payoutWallets.length; i++){
            _payoutAmount[_payoutWallets[i]] = (_payoutPercent[_payoutWallets[i]] * amountReceived) / 1000;
        }
    }
    
    function ownerMint(address _to, uint256 qty) external onlyOwner {
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) < totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch}
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function mint(uint256 mintType, uint256 qty) external payable reentryLock {
        // mintType 1 for pre-sale (whitelist), 2 for greyList, 3 for regular mint 
        require(((mintType > 0)&&(mintType<4)), "Invalid Mint Txn");
        uint256 mintPrice; // defines the price for this txn
        uint256 walletMax; // defines the max per wallet for this txn
        string memory notAvailable = "Mint type not available at this time.";
        
        if (mintType == 1){
            mintPrice = _whiteListPrice;
            walletMax = 2;
            require(_whitelist[_msgSender()], "Mint: Unauthorized Access");
            require(whiteActive, notAvailable);
            require((_numberPurchased[_msgSender()] + qty) <= walletMax, "mint exceeds allowance");
        }
        if (mintType == 2){
            mintPrice = _greyListPrice;
            walletMax = 1;
            require(_greylist[_msgSender()], "Mint: Unauthorized Access");
            require(greyActive, notAvailable);
            require((_numberPurchased[_msgSender()] + qty) <= walletMax, "mint exceeds allowance");
        }        
        if (mintType == 3){
            mintPrice = price;
            walletMax = maxPerWallet;
            require(mintActive, notAvailable);
        }
        //switch dependent variables
        require(msg.value >= qty * mintPrice, "Mint: Insufficient Funds");
        require((_balances[_msgSender()] + qty) <= walletMax, "Mint: Max tokens per wallet exceeded");
        
        //regular checks
        require((qty + numberMinted) < totalTokens, "Mint: Not enough avaialability");

        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        //wallet transfer scam prevention
        _numberPurchased[_msgSender()] += qty;
        
        //Handle ETH transactions
        uint256 cashIn = msg.value;
        uint256 payment = (qty * price);
        uint256 cashChange = cashIn - payment;
        
        if (payment > 0){assignPayouts(payment);}
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            numberMinted ++;
        }
        
        if (cashChange > 0){
            (bool success, ) = msg.sender.call{value: cashChange}("");
            require(success, "Mint: unable to send change to user");
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    function checkPayout() external view returns(string memory){
        return string(abi.encodePacked(_payoutAmount[_msgSender()]));
    }
    
    function whiteList(address account) external onlyOwner {
        _whitelist[account] = true;
    }
    
    function whiteListMany(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _whitelist[accounts[i]] = true;
        }
    }

    function greyList(address account) external onlyOwner {
        _greylist[account] = true;
    }
    
    function greyListMany(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _greylist[accounts[i]] = true;
        }
    }
    
    function checkWhitelist(address testAddress) external view returns (bool) {
        if (_whitelist[testAddress] == true) { return true; }
        return false;
    }
    
    function checkGreylist(address testAddress) external view returns (bool) {
        if (_greylist[testAddress] == true) { return true; }
        return false;
    }
    
    function setMaxWalletThreshold(uint256 maxWallet) external onlyOwner {
        maxPerWallet = maxWallet;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function activateWhiteMint() public onlyOwner {
        whiteActive = true;
    }
    
    function deactivateWhiteMint() public onlyOwner {
        whiteActive = false;
    }
    
    function activateGreyMint() public onlyOwner {
        greyActive = true;
    }
    
    function deactivateGreyMint() public onlyOwner {
        greyActive = false;
    }
    
    function setPriceAll(uint256 newPrice) public onlyOwner {
        price = newPrice;
        _whiteListPrice = newPrice;
        _greyListPrice = newPrice;
    }
    
    function setPriceMain(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setPriceWhite(uint256 newPrice) public onlyOwner {
        _whiteListPrice = newPrice;
    }
    
    function setPriceGrey(uint256 newPrice) public onlyOwner {
        _greyListPrice = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideTokens() external onlyOwner {
        _hideTokens = true;
    }
    
    function revealTokens() external onlyOwner {
        _hideTokens = false;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the 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: owner query for nonexistent token");
        return owner;
    }

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        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: transfer caller is not owner nor 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: transfer caller is not owner nor 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), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @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: operator query for nonexistent token");
        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),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @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: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero 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("ERC721: transfer to non ERC721Receiver implementer");
                } 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), "ERC721Metadata: URI query for nonexistent token");
        
        string memory tokenuri;
        
        if (_hideTokens) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            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 {
        uint256 payment = msg.value;
        if (payment > 0){assignPayouts(payment);}
    }
    
    fallback() external payable {
        uint256 payment = msg.value;
        if (payment > 0){assignPayouts(payment);}
    }
}

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":"activateGreyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWhiteMint","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":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkGreylist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkPayout","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateGreyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWhiteMint","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":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"greyActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"greyList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"greyListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","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":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintType","type":"uint256"},{"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":"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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"revealTokens","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":"maxWallet","type":"uint256"}],"name":"setMaxWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceGrey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceMain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceWhite","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":"whiteActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whiteListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c6200004062000a7960201b60201c565b62000a8160201b60201c565b6040518060400160405280600c81526020017f536c696d7920536e61696c730000000000000000000000000000000000000000815250600190805190602001906200009992919062000b45565b506040518060400160405280600581526020017f534e41494c00000000000000000000000000000000000000000000000000000081525060029080519060200190620000e792919062000b45565b506040518060400160405280602081526020017f68747470733a2f2f736c696d79736e61696c732e696f2f6d657461646174612f815250600390805190602001906200013592919062000b45565b506001600860036101000a81548160ff0219169083151502179055506115b3600d8190555066c3663566a580006009819055506014600a81905550600954600c81905550600954600b819055506014735a3e0bb30423fa1b7601a06c5f88b862f7d77c719080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101c760116000735a3e0bb30423fa1b7601a06c5f88b862f7d77c7173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014731fe4d637c215722c0de4daba922323ad228acf009080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606460116000731fe4d637c215722c0de4daba922323ad228acf0073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601473690360abbb34649eb3d4d811f8e9362303e950809080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060326011600073690360abbb34649eb3d4d811f8e9362303e9508073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014732496286bdb820d40c402802f828ae265b244188a9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260116000732496286bdb820d40c402802f828ae265b244188a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014736b1e16029ee4232be377accbaf9304f5620d39a39080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260116000736b1e16029ee4232be377accbaf9304f5620d39a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014738934cc45df1ab99fb75bc53a617548e1096f30139080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550607860116000738934cc45df1ab99fb75bc53a617548e1096f301373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014730c0d73b99d81b237cd67efafb7fe6475f360917a9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960116000730c0d73b99d81b237cd67efafb7fe6475f360917a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014739579074285de0a1166493e7054b0a241907c51de9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960116000739579074285de0a1166493e7054b0a241907c51de73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014734dc6823268cec81be1c4f1aef10f7206cac2d56b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960116000734dc6823268cec81be1c4f1aef10f7206cac2d56b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060147358b9369f1ed16d38de267663dc9b1389a95716239080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506032601160007358b9369f1ed16d38de267663dc9b1389a957162373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601473a5bbc9fbb516818e875b0e563de0e60bfd5177649080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060326011600073a5bbc9fbb516818e875b0e563de0e60bfd51776473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000c5a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000b539062000bf5565b90600052602060002090601f01602090048101928262000b77576000855562000bc3565b82601f1062000b9257805160ff191683800117855562000bc3565b8280016001018555821562000bc3579182015b8281111562000bc257825182559160200191906001019062000ba5565b5b50905062000bd2919062000bd6565b5090565b5b8082111562000bf157600081600090555060010162000bd7565b5090565b6000600282049050600182168062000c0e57607f821691505b6020821081141562000c255762000c2462000c2b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615b508062000c6a6000396000f3fe60806040526004361061031e5760003560e01c80635f2f9404116101ab578063b145c013116100f7578063c91c046211610095578063f275d6a71161006f578063f275d6a714610b51578063f2fde38b14610b68578063f8b2cb4f14610b91578063fe779f6c14610bce5761033e565b8063c91c046214610ad2578063e8a3d48514610ae9578063e985e9c514610b145761033e565b8063b5b3e214116100d1578063b5b3e21414610a3e578063b61a413214610a55578063b88d4fde14610a6c578063c87b56dd14610a955761033e565b8063b145c013146109c1578063b3aa8806146109ec578063b4afeed714610a155761033e565b80638da5cb5b11610164578063a035b1fe1161013e578063a035b1fe1461091b578063a22cb46514610946578063a519355a1461096f578063b0b92263146109985761033e565b80638da5cb5b1461089a5780638de801e9146108c557806395d89b41146108f05761033e565b80635f2f94041461079c5780636352211e146107c757806370a0823114610804578063715018a614610841578063756aea54146108585780637e1c0c091461086f5761033e565b8063338431b61161026a57806342966c6811610223578063484b973c116101fd578063484b973c1461070857806349a772b5146107315780634d5a67d81461075c57806355f804b3146107735761033e565b806342966c681461068b57806343d67565146106b4578063453c2310146106dd5761033e565b8063338431b6146105a5578063372c12b1146105e25780633ba5939d1461060b5780633ccfd60b146106225780633d6aa72e1461063957806342842e0e146106625761033e565b80631950c218116102d757806325fd90f3116102b157806325fd90f31461051157806329ccc4781461053c5780632e56f71e1461056557806330e412ad1461057c5761033e565b80631950c2181461048f5780631b2ef1ca146104cc57806323b872dd146104e85761033e565b806301ffc9a71461035957806306fdde0314610396578063081812fc146103c1578063095ea7b3146103fe578063150b7a021461042757806318160ddd146104645761033e565b3661033e576000349050600081111561033b5761033a81610bf7565b5b50005b600034905060008111156103565761035581610bf7565b5b50005b34801561036557600080fd5b50610380600480360381019061037b919061430d565b610d42565b60405161038d9190614ad9565b60405180910390f35b3480156103a257600080fd5b506103ab610ecb565b6040516103b89190614b0f565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906143b0565b610f5d565b6040516103f59190614a72565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614284565b610fe2565b005b34801561043357600080fd5b5061044e60048036038101906104499190614139565b6110ec565b60405161045b9190614af4565b60405180910390f35b34801561047057600080fd5b50610479611101565b6040516104869190614e91565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190614079565b61110b565b6040516104c39190614ad9565b60405180910390f35b6104e660048036038101906104e191906143dd565b611179565b005b3480156104f457600080fd5b5061050f600480360381019061050a91906140e6565b6118d4565b005b34801561051d57600080fd5b5061052661192d565b6040516105339190614ad9565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906143b0565b611940565b005b34801561057157600080fd5b5061057a6119c6565b005b34801561058857600080fd5b506105a3600480360381019061059e9190614079565b611a5f565b005b3480156105b157600080fd5b506105cc60048036038101906105c79190614079565b611b36565b6040516105d99190614ad9565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190614079565b611ba4565b005b34801561061757600080fd5b50610620611c7b565b005b34801561062e57600080fd5b50610637611d14565b005b34801561064557600080fd5b50610660600480360381019061065b91906143b0565b611ee0565b005b34801561066e57600080fd5b50610689600480360381019061068491906140e6565b611f74565b005b34801561069757600080fd5b506106b260048036038101906106ad91906143b0565b611f94565b005b3480156106c057600080fd5b506106db60048036038101906106d691906142c4565b611fe7565b005b3480156106e957600080fd5b506106f26120f8565b6040516106ff9190614e91565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190614284565b6120fe565b005b34801561073d57600080fd5b50610746612274565b6040516107539190614e91565b60405180910390f35b34801561076857600080fd5b5061077161227a565b005b34801561077f57600080fd5b5061079a60048036038101906107959190614367565b612313565b005b3480156107a857600080fd5b506107b16123a9565b6040516107be9190614ad9565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e991906143b0565b6123bc565b6040516107fb9190614a72565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190614079565b61246e565b6040516108389190614e91565b60405180910390f35b34801561084d57600080fd5b50610856612526565b005b34801561086457600080fd5b5061086d6125ae565b005b34801561087b57600080fd5b50610884612647565b6040516108919190614e91565b60405180910390f35b3480156108a657600080fd5b506108af61264d565b6040516108bc9190614a72565b60405180910390f35b3480156108d157600080fd5b506108da612676565b6040516108e79190614ad9565b60405180910390f35b3480156108fc57600080fd5b50610905612689565b6040516109129190614b0f565b60405180910390f35b34801561092757600080fd5b5061093061271b565b60405161093d9190614e91565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190614244565b612721565b005b34801561097b57600080fd5b50610996600480360381019061099191906142c4565b61288d565b005b3480156109a457600080fd5b506109bf60048036038101906109ba91906143b0565b61299e565b005b3480156109cd57600080fd5b506109d6612a24565b6040516109e39190614b0f565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e91906143b0565b612a91565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906143b0565b612b17565b005b348015610a4a57600080fd5b50610a53612b9d565b005b348015610a6157600080fd5b50610a6a612c36565b005b348015610a7857600080fd5b50610a936004803603810190610a8e91906141c1565b612ccf565b005b348015610aa157600080fd5b50610abc6004803603810190610ab791906143b0565b612d2a565b604051610ac99190614b0f565b60405180910390f35b348015610ade57600080fd5b50610ae7612dea565b005b348015610af557600080fd5b50610afe612e83565b604051610b0b9190614b0f565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b3691906140a6565b612eab565b604051610b489190614ad9565b60405180910390f35b348015610b5d57600080fd5b50610b66612f3f565b005b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190614079565b612fd8565b005b348015610b9d57600080fd5b50610bb86004803603810190610bb39190614079565b6130d0565b604051610bc59190614e91565b60405180910390f35b348015610bda57600080fd5b50610bf56004803603810190610bf091906143b0565b61312b565b005b60008111610c0457600080fd5b60005b601480549050811015610d3e576103e8826011600060148581548110610c3057610c2f615301565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ca09190615049565b610caa9190615018565b6012600060148481548110610cc257610cc1615301565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d36906151f0565b915050610c07565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e7557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ec4575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610eda9061518d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f069061518d565b8015610f535780601f10610f2857610100808354040283529160200191610f53565b820191906000526020600020905b815481529060010190602001808311610f3657829003601f168201915b5050505050905090565b6000610f68826131b1565b610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90614d91565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fed826123bc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590614e31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109e575061109d8133612eab565b5b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d490614cd1565b60405180910390fd5b6110e7838361321d565b505050565b600063150b7a0260e01b905095945050505050565b6000600e54905090565b600060011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561116f5760019050611174565b600090505b919050565b600060149054906101000a900460ff16156111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090614cb1565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000821180156111f45750600482105b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90614bd1565b60405180910390fd5b6000806000604051806060016040528060258152602001615af660259139905060018514156113e057600c54925060029150600f60006112716132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614d51565b60405180910390fd5b600860019054906101000a900460ff16819061134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113419190614b0f565b60405180910390fd5b508184601360006113596132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461139e9190614fc2565b11156113df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d690614c51565b60405180910390fd5b5b600285141561156d57600b54925060019150601060006113fe6132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90614d51565b60405180910390fd5b600860029054906101000a900460ff1681906114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce9190614b0f565b60405180910390fd5b508184601360006114e66132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461152b9190614fc2565b111561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614c51565b60405180910390fd5b5b60038514156115d4576009549250600a549150600860009054906101000a900460ff1681906115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c99190614b0f565b60405180910390fd5b505b82846115e09190615049565b341015611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614dd1565b60405180910390fd5b8184600560006116306132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116759190614fc2565b11156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90614bf1565b60405180910390fd5b600d54600e54856116c79190614fc2565b10611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90614b31565b60405180910390fd5b6000600e549050846013600061171b6132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117649190614fc2565b9250508190555060003490506000600954876117809190615049565b90506000818361179091906150a3565b905060008211156117a5576117a482610bf7565b5b60005b888110156117f7576117cc6117bb6132d6565b82876117c79190614fc2565b6132de565b600e60008154809291906117df906151f0565b919050555080806117ef906151f0565b9150506117a8565b5060008111156118af5760003373ffffffffffffffffffffffffffffffffffffffff168260405161182790614a42565b60006040518083038185875af1925050503d8060008114611864576040519150601f19603f3d011682016040523d82523d6000602084013e611869565b606091505b50509050806118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614b51565b60405180910390fd5b505b5050505050505060008060146101000a81548160ff0219169083151502179055505050565b6118de33826132fc565b61191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490614e51565b60405180910390fd5b6119288383836133da565b505050565b600860009054906101000a900460ff1681565b6119486132d6565b73ffffffffffffffffffffffffffffffffffffffff1661196661264d565b73ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390614db1565b60405180910390fd5b8060098190555050565b6119ce6132d6565b73ffffffffffffffffffffffffffffffffffffffff166119ec61264d565b73ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990614db1565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611a676132d6565b73ffffffffffffffffffffffffffffffffffffffff16611a8561264d565b73ffffffffffffffffffffffffffffffffffffffff1614611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290614db1565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611b9a5760019050611b9f565b600090505b919050565b611bac6132d6565b73ffffffffffffffffffffffffffffffffffffffff16611bca61264d565b73ffffffffffffffffffffffffffffffffffffffff1614611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790614db1565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c836132d6565b73ffffffffffffffffffffffffffffffffffffffff16611ca161264d565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614db1565b60405180910390fd5b6000600860036101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b90614cb1565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600060126000611d8d6132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060126000611dd86132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003373ffffffffffffffffffffffffffffffffffffffff1682604051611e3c90614a42565b60006040518083038185875af1925050503d8060008114611e79576040519150601f19603f3d011682016040523d82523d6000602084013e611e7e565b606091505b5050905080611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614c11565b60405180910390fd5b505060008060146101000a81548160ff021916908315150217905550565b611ee86132d6565b73ffffffffffffffffffffffffffffffffffffffff16611f0661264d565b73ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614db1565b60405180910390fd5b8060098190555080600c8190555080600b8190555050565b611f8f83838360405180602001604052806000815250612ccf565b505050565b611f9d816123bc565b73ffffffffffffffffffffffffffffffffffffffff16611fbb6132d6565b73ffffffffffffffffffffffffffffffffffffffff1614611fdb57600080fd5b611fe481613636565b50565b611fef6132d6565b73ffffffffffffffffffffffffffffffffffffffff1661200d61264d565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614db1565b60405180910390fd5b60005b81518110156120f4576001600f600084848151811061208857612087615301565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120ec906151f0565b915050612066565b5050565b600a5481565b6121066132d6565b73ffffffffffffffffffffffffffffffffffffffff1661212461264d565b73ffffffffffffffffffffffffffffffffffffffff161461217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614db1565b60405180910390fd5b600e5481600e5461218b9190614fc2565b116121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614e71565b60405180910390fd5b600d5481600e546121dc9190614fc2565b1061221c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221390614d31565b60405180910390fd5b6000600e54905060005b8281101561226e5761224384828461223e9190614fc2565b6132de565b600e6000815480929190612256906151f0565b91905055508080612266906151f0565b915050612226565b50505050565b600e5481565b6122826132d6565b73ffffffffffffffffffffffffffffffffffffffff166122a061264d565b73ffffffffffffffffffffffffffffffffffffffff16146122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90614db1565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b61231b6132d6565b73ffffffffffffffffffffffffffffffffffffffff1661233961264d565b73ffffffffffffffffffffffffffffffffffffffff161461238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690614db1565b60405180910390fd5b80600390805190602001906123a5929190613d99565b5050565b600860019054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614d11565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614cf1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61252e6132d6565b73ffffffffffffffffffffffffffffffffffffffff1661254c61264d565b73ffffffffffffffffffffffffffffffffffffffff16146125a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259990614db1565b60405180910390fd5b6125ac6000613747565b565b6125b66132d6565b73ffffffffffffffffffffffffffffffffffffffff166125d461264d565b73ffffffffffffffffffffffffffffffffffffffff161461262a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262190614db1565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860029054906101000a900460ff1681565b6060600280546126989061518d565b80601f01602080910402602001604051908101604052809291908181526020018280546126c49061518d565b80156127115780601f106126e657610100808354040283529160200191612711565b820191906000526020600020905b8154815290600101906020018083116126f457829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278790614c71565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128819190614ad9565b60405180910390a35050565b6128956132d6565b73ffffffffffffffffffffffffffffffffffffffff166128b361264d565b73ffffffffffffffffffffffffffffffffffffffff1614612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614db1565b60405180910390fd5b60005b815181101561299a5760016010600084848151811061292e5761292d615301565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612992906151f0565b91505061290c565b5050565b6129a66132d6565b73ffffffffffffffffffffffffffffffffffffffff166129c461264d565b73ffffffffffffffffffffffffffffffffffffffff1614612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1190614db1565b60405180910390fd5b80600d8190555050565b606060126000612a326132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051602001612a7d9190614a57565b604051602081830303815290604052905090565b612a996132d6565b73ffffffffffffffffffffffffffffffffffffffff16612ab761264d565b73ffffffffffffffffffffffffffffffffffffffff1614612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0490614db1565b60405180910390fd5b80600a8190555050565b612b1f6132d6565b73ffffffffffffffffffffffffffffffffffffffff16612b3d61264d565b73ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614db1565b60405180910390fd5b80600b8190555050565b612ba56132d6565b73ffffffffffffffffffffffffffffffffffffffff16612bc361264d565b73ffffffffffffffffffffffffffffffffffffffff1614612c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1090614db1565b60405180910390fd5b6001600860036101000a81548160ff021916908315150217905550565b612c3e6132d6565b73ffffffffffffffffffffffffffffffffffffffff16612c5c61264d565b73ffffffffffffffffffffffffffffffffffffffff1614612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca990614db1565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b612cd933836132fc565b612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90614e51565b60405180910390fd5b612d248484848461380b565b50505050565b6060612d35826131b1565b612d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6b90614e11565b60405180910390fd5b6060600860039054906101000a900460ff1615612db3576003604051602001612d9d9190614a20565b6040516020818303038152906040529050612de1565b6003612dbe84613867565b604051602001612dcf9291906149cf565b60405160208183030381529060405290505b80915050919050565b612df26132d6565b73ffffffffffffffffffffffffffffffffffffffff16612e1061264d565b73ffffffffffffffffffffffffffffffffffffffff1614612e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5d90614db1565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60606003604051602001612e9791906149fe565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f476132d6565b73ffffffffffffffffffffffffffffffffffffffff16612f6561264d565b73ffffffffffffffffffffffffffffffffffffffff1614612fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb290614db1565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b612fe06132d6565b73ffffffffffffffffffffffffffffffffffffffff16612ffe61264d565b73ffffffffffffffffffffffffffffffffffffffff1614613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b90614db1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bb90614b91565b60405180910390fd5b6130cd81613747565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131249190615018565b9050919050565b6131336132d6565b73ffffffffffffffffffffffffffffffffffffffff1661315161264d565b73ffffffffffffffffffffffffffffffffffffffff16146131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319e90614db1565b60405180910390fd5b80600c8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613290836123bc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600033905090565b6132f88282604051806020016040528060008152506139c8565b5050565b6000613307826131b1565b613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90614c91565b60405180910390fd5b6000613351836123bc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133c057508373ffffffffffffffffffffffffffffffffffffffff166133a884610f5d565b73ffffffffffffffffffffffffffffffffffffffff16145b806133d157506133d08185612eab565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133fa826123bc565b73ffffffffffffffffffffffffffffffffffffffff1614613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790614df1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b790614c31565b60405180910390fd5b6134cb838383613a23565b6134d660008261321d565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461352691906150a3565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357d9190614fc2565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613641826123bc565b905061364f81600084613a23565b61365a60008361321d565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136aa91906150a3565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6138168484846133da565b61382284848484613a28565b613861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385890614b71565b60405180910390fd5b50505050565b606060008214156138af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506139c3565b600082905060005b600082146138e15780806138ca906151f0565b915050600a826138da9190615018565b91506138b7565b60008167ffffffffffffffff8111156138fd576138fc615330565b5b6040519080825280601f01601f19166020018201604052801561392f5781602001600182028036833780820191505090505b5090505b600085146139bc5760018261394891906150a3565b9150600a856139579190615243565b60306139639190614fc2565b60f81b81838151811061397957613978615301565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139b59190615018565b9450613933565b8093505050505b919050565b6139d28383613bb8565b6139df6000848484613a28565b613a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1590614b71565b60405180910390fd5b505050565b505050565b6000613a498473ffffffffffffffffffffffffffffffffffffffff16613d86565b15613bab578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613a8d9493929190614a8d565b602060405180830381600087803b158015613aa757600080fd5b505af1925050508015613ad857506040513d601f19601f82011682018060405250810190613ad5919061433a565b60015b613b5b573d8060008114613b08576040519150601f19603f3d011682016040523d82523d6000602084013e613b0d565b606091505b50600081511415613b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4a90614b71565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bb0565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1f90614d71565b60405180910390fd5b613c31816131b1565b15613c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6890614bb1565b60405180910390fd5b613c7d60008383613a23565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ccd9190614fc2565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613da59061518d565b90600052602060002090601f016020900481019282613dc75760008555613e0e565b82601f10613de057805160ff1916838001178555613e0e565b82800160010185558215613e0e579182015b82811115613e0d578251825591602001919060010190613df2565b5b509050613e1b9190613e1f565b5090565b5b80821115613e38576000816000905550600101613e20565b5090565b6000613e4f613e4a84614ed1565b614eac565b90508083825260208201905082856020860282011115613e7257613e71615369565b5b60005b85811015613ea25781613e888882613f30565b845260208401935060208301925050600181019050613e75565b5050509392505050565b6000613ebf613eba84614efd565b614eac565b905082815260208101848484011115613edb57613eda61536e565b5b613ee684828561514b565b509392505050565b6000613f01613efc84614f2e565b614eac565b905082815260208101848484011115613f1d57613f1c61536e565b5b613f2884828561514b565b509392505050565b600081359050613f3f81615a99565b92915050565b600082601f830112613f5a57613f59615364565b5b8135613f6a848260208601613e3c565b91505092915050565b600081359050613f8281615ab0565b92915050565b600081359050613f9781615ac7565b92915050565b600081519050613fac81615ac7565b92915050565b60008083601f840112613fc857613fc7615364565b5b8235905067ffffffffffffffff811115613fe557613fe461535f565b5b60208301915083600182028301111561400157614000615369565b5b9250929050565b600082601f83011261401d5761401c615364565b5b813561402d848260208601613eac565b91505092915050565b600082601f83011261404b5761404a615364565b5b813561405b848260208601613eee565b91505092915050565b60008135905061407381615ade565b92915050565b60006020828403121561408f5761408e615378565b5b600061409d84828501613f30565b91505092915050565b600080604083850312156140bd576140bc615378565b5b60006140cb85828601613f30565b92505060206140dc85828601613f30565b9150509250929050565b6000806000606084860312156140ff576140fe615378565b5b600061410d86828701613f30565b935050602061411e86828701613f30565b925050604061412f86828701614064565b9150509250925092565b60008060008060006080868803121561415557614154615378565b5b600061416388828901613f30565b955050602061417488828901613f30565b945050604061418588828901614064565b935050606086013567ffffffffffffffff8111156141a6576141a5615373565b5b6141b288828901613fb2565b92509250509295509295909350565b600080600080608085870312156141db576141da615378565b5b60006141e987828801613f30565b94505060206141fa87828801613f30565b935050604061420b87828801614064565b925050606085013567ffffffffffffffff81111561422c5761422b615373565b5b61423887828801614008565b91505092959194509250565b6000806040838503121561425b5761425a615378565b5b600061426985828601613f30565b925050602061427a85828601613f73565b9150509250929050565b6000806040838503121561429b5761429a615378565b5b60006142a985828601613f30565b92505060206142ba85828601614064565b9150509250929050565b6000602082840312156142da576142d9615378565b5b600082013567ffffffffffffffff8111156142f8576142f7615373565b5b61430484828501613f45565b91505092915050565b60006020828403121561432357614322615378565b5b600061433184828501613f88565b91505092915050565b6000602082840312156143505761434f615378565b5b600061435e84828501613f9d565b91505092915050565b60006020828403121561437d5761437c615378565b5b600082013567ffffffffffffffff81111561439b5761439a615373565b5b6143a784828501614036565b91505092915050565b6000602082840312156143c6576143c5615378565b5b60006143d484828501614064565b91505092915050565b600080604083850312156143f4576143f3615378565b5b600061440285828601614064565b925050602061441385828601614064565b9150509250929050565b614426816150d7565b82525050565b614435816150e9565b82525050565b614444816150f5565b82525050565b600061445582614f74565b61445f8185614f8a565b935061446f81856020860161515a565b6144788161537d565b840191505092915050565b600061448e82614f7f565b6144988185614fa6565b93506144a881856020860161515a565b6144b18161537d565b840191505092915050565b60006144c782614f7f565b6144d18185614fb7565b93506144e181856020860161515a565b80840191505092915050565b600081546144fa8161518d565b6145048186614fb7565b9450600182166000811461451f576001811461453057614563565b60ff19831686528186019350614563565b61453985614f5f565b60005b8381101561455b5781548189015260018201915060208101905061453c565b838801955050505b50505092915050565b6000614579601e83614fa6565b91506145848261538e565b602082019050919050565b600061459c600d83614fb7565b91506145a7826153b7565b600d82019050919050565b60006145bf602383614fa6565b91506145ca826153e0565b604082019050919050565b60006145e2603283614fa6565b91506145ed8261542f565b604082019050919050565b6000614605602683614fa6565b91506146108261547e565b604082019050919050565b6000614628601c83614fa6565b9150614633826154cd565b602082019050919050565b600061464b601083614fa6565b9150614656826154f6565b602082019050919050565b600061466e602483614fa6565b91506146798261551f565b604082019050919050565b6000614691601883614fa6565b915061469c8261556e565b602082019050919050565b60006146b4602483614fa6565b91506146bf82615597565b604082019050919050565b60006146d7601683614fa6565b91506146e2826155e6565b602082019050919050565b60006146fa601983614fa6565b91506147058261560f565b602082019050919050565b600061471d600c83614fb7565b915061472882615638565b600c82019050919050565b6000614740602c83614fa6565b915061474b82615661565b604082019050919050565b6000614763602483614fa6565b915061476e826156b0565b604082019050919050565b6000614786603883614fa6565b9150614791826156ff565b604082019050919050565b60006147a9602a83614fa6565b91506147b48261574e565b604082019050919050565b60006147cc602983614fa6565b91506147d78261579d565b604082019050919050565b60006147ef601183614fa6565b91506147fa826157ec565b602082019050919050565b6000614812601983614fa6565b915061481d82615815565b602082019050919050565b6000614835602083614fa6565b91506148408261583e565b602082019050919050565b6000614858602c83614fa6565b915061486382615867565b604082019050919050565b600061487b600583614fb7565b9150614886826158b6565b600582019050919050565b600061489e602083614fa6565b91506148a9826158df565b602082019050919050565b60006148c1601883614fa6565b91506148cc82615908565b602082019050919050565b60006148e4602983614fa6565b91506148ef82615931565b604082019050919050565b6000614907602f83614fa6565b915061491282615980565b604082019050919050565b600061492a602183614fa6565b9150614935826159cf565b604082019050919050565b600061494d600083614f9b565b915061495882615a1e565b600082019050919050565b6000614970603183614fa6565b915061497b82615a21565b604082019050919050565b6000614993601383614fa6565b915061499e82615a70565b602082019050919050565b6149b281615141565b82525050565b6149c96149c482615141565b615239565b82525050565b60006149db82856144ed565b91506149e782846144bc565b91506149f28261486e565b91508190509392505050565b6000614a0a82846144ed565b9150614a158261458f565b915081905092915050565b6000614a2c82846144ed565b9150614a3782614710565b915081905092915050565b6000614a4d82614940565b9150819050919050565b6000614a6382846149b8565b60208201915081905092915050565b6000602082019050614a87600083018461441d565b92915050565b6000608082019050614aa2600083018761441d565b614aaf602083018661441d565b614abc60408301856149a9565b8181036060830152614ace818461444a565b905095945050505050565b6000602082019050614aee600083018461442c565b92915050565b6000602082019050614b09600083018461443b565b92915050565b60006020820190508181036000830152614b298184614483565b905092915050565b60006020820190508181036000830152614b4a8161456c565b9050919050565b60006020820190508181036000830152614b6a816145b2565b9050919050565b60006020820190508181036000830152614b8a816145d5565b9050919050565b60006020820190508181036000830152614baa816145f8565b9050919050565b60006020820190508181036000830152614bca8161461b565b9050919050565b60006020820190508181036000830152614bea8161463e565b9050919050565b60006020820190508181036000830152614c0a81614661565b9050919050565b60006020820190508181036000830152614c2a81614684565b9050919050565b60006020820190508181036000830152614c4a816146a7565b9050919050565b60006020820190508181036000830152614c6a816146ca565b9050919050565b60006020820190508181036000830152614c8a816146ed565b9050919050565b60006020820190508181036000830152614caa81614733565b9050919050565b60006020820190508181036000830152614cca81614756565b9050919050565b60006020820190508181036000830152614cea81614779565b9050919050565b60006020820190508181036000830152614d0a8161479c565b9050919050565b60006020820190508181036000830152614d2a816147bf565b9050919050565b60006020820190508181036000830152614d4a816147e2565b9050919050565b60006020820190508181036000830152614d6a81614805565b9050919050565b60006020820190508181036000830152614d8a81614828565b9050919050565b60006020820190508181036000830152614daa8161484b565b9050919050565b60006020820190508181036000830152614dca81614891565b9050919050565b60006020820190508181036000830152614dea816148b4565b9050919050565b60006020820190508181036000830152614e0a816148d7565b9050919050565b60006020820190508181036000830152614e2a816148fa565b9050919050565b60006020820190508181036000830152614e4a8161491d565b9050919050565b60006020820190508181036000830152614e6a81614963565b9050919050565b60006020820190508181036000830152614e8a81614986565b9050919050565b6000602082019050614ea660008301846149a9565b92915050565b6000614eb6614ec7565b9050614ec282826151bf565b919050565b6000604051905090565b600067ffffffffffffffff821115614eec57614eeb615330565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f1857614f17615330565b5b614f218261537d565b9050602081019050919050565b600067ffffffffffffffff821115614f4957614f48615330565b5b614f528261537d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fcd82615141565b9150614fd883615141565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500d5761500c615274565b5b828201905092915050565b600061502382615141565b915061502e83615141565b92508261503e5761503d6152a3565b5b828204905092915050565b600061505482615141565b915061505f83615141565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561509857615097615274565b5b828202905092915050565b60006150ae82615141565b91506150b983615141565b9250828210156150cc576150cb615274565b5b828203905092915050565b60006150e282615121565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561517857808201518184015260208101905061515d565b83811115615187576000848401525b50505050565b600060028204905060018216806151a557607f821691505b602082108114156151b9576151b86152d2565b5b50919050565b6151c88261537d565b810181811067ffffffffffffffff821117156151e7576151e6615330565b5b80604052505050565b60006151fb82615141565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561522e5761522d615274565b5b600182019050919050565b6000819050919050565b600061524e82615141565b915061525983615141565b925082615269576152686152a3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964204d696e742054786e00000000000000000000000000000000600082015250565b7f4d696e743a204d617820746f6b656e73207065722077616c6c6574206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206578636565647320616c6c6f77616e636500000000000000000000600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4d696e743a20556e617574686f72697a65642041636365737300000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615aa2816150d7565b8114615aad57600080fd5b50565b615ab9816150e9565b8114615ac457600080fd5b50565b615ad0816150f5565b8114615adb57600080fd5b50565b615ae781615141565b8114615af257600080fd5b5056fe4d696e742074797065206e6f7420617661696c61626c6520617420746869732074696d652ea2646970667358221220293ac5e1c749fe141a85ffec6e2e04e6a01c9e03206168190a95f6dfa3ecd04364736f6c63430008070033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80635f2f9404116101ab578063b145c013116100f7578063c91c046211610095578063f275d6a71161006f578063f275d6a714610b51578063f2fde38b14610b68578063f8b2cb4f14610b91578063fe779f6c14610bce5761033e565b8063c91c046214610ad2578063e8a3d48514610ae9578063e985e9c514610b145761033e565b8063b5b3e214116100d1578063b5b3e21414610a3e578063b61a413214610a55578063b88d4fde14610a6c578063c87b56dd14610a955761033e565b8063b145c013146109c1578063b3aa8806146109ec578063b4afeed714610a155761033e565b80638da5cb5b11610164578063a035b1fe1161013e578063a035b1fe1461091b578063a22cb46514610946578063a519355a1461096f578063b0b92263146109985761033e565b80638da5cb5b1461089a5780638de801e9146108c557806395d89b41146108f05761033e565b80635f2f94041461079c5780636352211e146107c757806370a0823114610804578063715018a614610841578063756aea54146108585780637e1c0c091461086f5761033e565b8063338431b61161026a57806342966c6811610223578063484b973c116101fd578063484b973c1461070857806349a772b5146107315780634d5a67d81461075c57806355f804b3146107735761033e565b806342966c681461068b57806343d67565146106b4578063453c2310146106dd5761033e565b8063338431b6146105a5578063372c12b1146105e25780633ba5939d1461060b5780633ccfd60b146106225780633d6aa72e1461063957806342842e0e146106625761033e565b80631950c218116102d757806325fd90f3116102b157806325fd90f31461051157806329ccc4781461053c5780632e56f71e1461056557806330e412ad1461057c5761033e565b80631950c2181461048f5780631b2ef1ca146104cc57806323b872dd146104e85761033e565b806301ffc9a71461035957806306fdde0314610396578063081812fc146103c1578063095ea7b3146103fe578063150b7a021461042757806318160ddd146104645761033e565b3661033e576000349050600081111561033b5761033a81610bf7565b5b50005b600034905060008111156103565761035581610bf7565b5b50005b34801561036557600080fd5b50610380600480360381019061037b919061430d565b610d42565b60405161038d9190614ad9565b60405180910390f35b3480156103a257600080fd5b506103ab610ecb565b6040516103b89190614b0f565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906143b0565b610f5d565b6040516103f59190614a72565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614284565b610fe2565b005b34801561043357600080fd5b5061044e60048036038101906104499190614139565b6110ec565b60405161045b9190614af4565b60405180910390f35b34801561047057600080fd5b50610479611101565b6040516104869190614e91565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190614079565b61110b565b6040516104c39190614ad9565b60405180910390f35b6104e660048036038101906104e191906143dd565b611179565b005b3480156104f457600080fd5b5061050f600480360381019061050a91906140e6565b6118d4565b005b34801561051d57600080fd5b5061052661192d565b6040516105339190614ad9565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906143b0565b611940565b005b34801561057157600080fd5b5061057a6119c6565b005b34801561058857600080fd5b506105a3600480360381019061059e9190614079565b611a5f565b005b3480156105b157600080fd5b506105cc60048036038101906105c79190614079565b611b36565b6040516105d99190614ad9565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190614079565b611ba4565b005b34801561061757600080fd5b50610620611c7b565b005b34801561062e57600080fd5b50610637611d14565b005b34801561064557600080fd5b50610660600480360381019061065b91906143b0565b611ee0565b005b34801561066e57600080fd5b50610689600480360381019061068491906140e6565b611f74565b005b34801561069757600080fd5b506106b260048036038101906106ad91906143b0565b611f94565b005b3480156106c057600080fd5b506106db60048036038101906106d691906142c4565b611fe7565b005b3480156106e957600080fd5b506106f26120f8565b6040516106ff9190614e91565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190614284565b6120fe565b005b34801561073d57600080fd5b50610746612274565b6040516107539190614e91565b60405180910390f35b34801561076857600080fd5b5061077161227a565b005b34801561077f57600080fd5b5061079a60048036038101906107959190614367565b612313565b005b3480156107a857600080fd5b506107b16123a9565b6040516107be9190614ad9565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e991906143b0565b6123bc565b6040516107fb9190614a72565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190614079565b61246e565b6040516108389190614e91565b60405180910390f35b34801561084d57600080fd5b50610856612526565b005b34801561086457600080fd5b5061086d6125ae565b005b34801561087b57600080fd5b50610884612647565b6040516108919190614e91565b60405180910390f35b3480156108a657600080fd5b506108af61264d565b6040516108bc9190614a72565b60405180910390f35b3480156108d157600080fd5b506108da612676565b6040516108e79190614ad9565b60405180910390f35b3480156108fc57600080fd5b50610905612689565b6040516109129190614b0f565b60405180910390f35b34801561092757600080fd5b5061093061271b565b60405161093d9190614e91565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190614244565b612721565b005b34801561097b57600080fd5b50610996600480360381019061099191906142c4565b61288d565b005b3480156109a457600080fd5b506109bf60048036038101906109ba91906143b0565b61299e565b005b3480156109cd57600080fd5b506109d6612a24565b6040516109e39190614b0f565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e91906143b0565b612a91565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906143b0565b612b17565b005b348015610a4a57600080fd5b50610a53612b9d565b005b348015610a6157600080fd5b50610a6a612c36565b005b348015610a7857600080fd5b50610a936004803603810190610a8e91906141c1565b612ccf565b005b348015610aa157600080fd5b50610abc6004803603810190610ab791906143b0565b612d2a565b604051610ac99190614b0f565b60405180910390f35b348015610ade57600080fd5b50610ae7612dea565b005b348015610af557600080fd5b50610afe612e83565b604051610b0b9190614b0f565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b3691906140a6565b612eab565b604051610b489190614ad9565b60405180910390f35b348015610b5d57600080fd5b50610b66612f3f565b005b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190614079565b612fd8565b005b348015610b9d57600080fd5b50610bb86004803603810190610bb39190614079565b6130d0565b604051610bc59190614e91565b60405180910390f35b348015610bda57600080fd5b50610bf56004803603810190610bf091906143b0565b61312b565b005b60008111610c0457600080fd5b60005b601480549050811015610d3e576103e8826011600060148581548110610c3057610c2f615301565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ca09190615049565b610caa9190615018565b6012600060148481548110610cc257610cc1615301565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d36906151f0565b915050610c07565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e7557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ec4575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610eda9061518d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f069061518d565b8015610f535780601f10610f2857610100808354040283529160200191610f53565b820191906000526020600020905b815481529060010190602001808311610f3657829003601f168201915b5050505050905090565b6000610f68826131b1565b610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90614d91565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fed826123bc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590614e31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061109e575061109d8133612eab565b5b6110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d490614cd1565b60405180910390fd5b6110e7838361321d565b505050565b600063150b7a0260e01b905095945050505050565b6000600e54905090565b600060011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561116f5760019050611174565b600090505b919050565b600060149054906101000a900460ff16156111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090614cb1565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000821180156111f45750600482105b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90614bd1565b60405180910390fd5b6000806000604051806060016040528060258152602001615af660259139905060018514156113e057600c54925060029150600f60006112716132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614d51565b60405180910390fd5b600860019054906101000a900460ff16819061134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113419190614b0f565b60405180910390fd5b508184601360006113596132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461139e9190614fc2565b11156113df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d690614c51565b60405180910390fd5b5b600285141561156d57600b54925060019150601060006113fe6132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90614d51565b60405180910390fd5b600860029054906101000a900460ff1681906114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce9190614b0f565b60405180910390fd5b508184601360006114e66132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461152b9190614fc2565b111561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614c51565b60405180910390fd5b5b60038514156115d4576009549250600a549150600860009054906101000a900460ff1681906115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c99190614b0f565b60405180910390fd5b505b82846115e09190615049565b341015611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614dd1565b60405180910390fd5b8184600560006116306132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116759190614fc2565b11156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90614bf1565b60405180910390fd5b600d54600e54856116c79190614fc2565b10611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90614b31565b60405180910390fd5b6000600e549050846013600061171b6132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117649190614fc2565b9250508190555060003490506000600954876117809190615049565b90506000818361179091906150a3565b905060008211156117a5576117a482610bf7565b5b60005b888110156117f7576117cc6117bb6132d6565b82876117c79190614fc2565b6132de565b600e60008154809291906117df906151f0565b919050555080806117ef906151f0565b9150506117a8565b5060008111156118af5760003373ffffffffffffffffffffffffffffffffffffffff168260405161182790614a42565b60006040518083038185875af1925050503d8060008114611864576040519150601f19603f3d011682016040523d82523d6000602084013e611869565b606091505b50509050806118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614b51565b60405180910390fd5b505b5050505050505060008060146101000a81548160ff0219169083151502179055505050565b6118de33826132fc565b61191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490614e51565b60405180910390fd5b6119288383836133da565b505050565b600860009054906101000a900460ff1681565b6119486132d6565b73ffffffffffffffffffffffffffffffffffffffff1661196661264d565b73ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390614db1565b60405180910390fd5b8060098190555050565b6119ce6132d6565b73ffffffffffffffffffffffffffffffffffffffff166119ec61264d565b73ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990614db1565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611a676132d6565b73ffffffffffffffffffffffffffffffffffffffff16611a8561264d565b73ffffffffffffffffffffffffffffffffffffffff1614611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290614db1565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611b9a5760019050611b9f565b600090505b919050565b611bac6132d6565b73ffffffffffffffffffffffffffffffffffffffff16611bca61264d565b73ffffffffffffffffffffffffffffffffffffffff1614611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790614db1565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c836132d6565b73ffffffffffffffffffffffffffffffffffffffff16611ca161264d565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614db1565b60405180910390fd5b6000600860036101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b90614cb1565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600060126000611d8d6132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060126000611dd86132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003373ffffffffffffffffffffffffffffffffffffffff1682604051611e3c90614a42565b60006040518083038185875af1925050503d8060008114611e79576040519150601f19603f3d011682016040523d82523d6000602084013e611e7e565b606091505b5050905080611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614c11565b60405180910390fd5b505060008060146101000a81548160ff021916908315150217905550565b611ee86132d6565b73ffffffffffffffffffffffffffffffffffffffff16611f0661264d565b73ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614db1565b60405180910390fd5b8060098190555080600c8190555080600b8190555050565b611f8f83838360405180602001604052806000815250612ccf565b505050565b611f9d816123bc565b73ffffffffffffffffffffffffffffffffffffffff16611fbb6132d6565b73ffffffffffffffffffffffffffffffffffffffff1614611fdb57600080fd5b611fe481613636565b50565b611fef6132d6565b73ffffffffffffffffffffffffffffffffffffffff1661200d61264d565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614db1565b60405180910390fd5b60005b81518110156120f4576001600f600084848151811061208857612087615301565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120ec906151f0565b915050612066565b5050565b600a5481565b6121066132d6565b73ffffffffffffffffffffffffffffffffffffffff1661212461264d565b73ffffffffffffffffffffffffffffffffffffffff161461217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614db1565b60405180910390fd5b600e5481600e5461218b9190614fc2565b116121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614e71565b60405180910390fd5b600d5481600e546121dc9190614fc2565b1061221c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221390614d31565b60405180910390fd5b6000600e54905060005b8281101561226e5761224384828461223e9190614fc2565b6132de565b600e6000815480929190612256906151f0565b91905055508080612266906151f0565b915050612226565b50505050565b600e5481565b6122826132d6565b73ffffffffffffffffffffffffffffffffffffffff166122a061264d565b73ffffffffffffffffffffffffffffffffffffffff16146122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90614db1565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b61231b6132d6565b73ffffffffffffffffffffffffffffffffffffffff1661233961264d565b73ffffffffffffffffffffffffffffffffffffffff161461238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690614db1565b60405180910390fd5b80600390805190602001906123a5929190613d99565b5050565b600860019054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614d11565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614cf1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61252e6132d6565b73ffffffffffffffffffffffffffffffffffffffff1661254c61264d565b73ffffffffffffffffffffffffffffffffffffffff16146125a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259990614db1565b60405180910390fd5b6125ac6000613747565b565b6125b66132d6565b73ffffffffffffffffffffffffffffffffffffffff166125d461264d565b73ffffffffffffffffffffffffffffffffffffffff161461262a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262190614db1565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860029054906101000a900460ff1681565b6060600280546126989061518d565b80601f01602080910402602001604051908101604052809291908181526020018280546126c49061518d565b80156127115780601f106126e657610100808354040283529160200191612711565b820191906000526020600020905b8154815290600101906020018083116126f457829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278790614c71565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128819190614ad9565b60405180910390a35050565b6128956132d6565b73ffffffffffffffffffffffffffffffffffffffff166128b361264d565b73ffffffffffffffffffffffffffffffffffffffff1614612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614db1565b60405180910390fd5b60005b815181101561299a5760016010600084848151811061292e5761292d615301565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612992906151f0565b91505061290c565b5050565b6129a66132d6565b73ffffffffffffffffffffffffffffffffffffffff166129c461264d565b73ffffffffffffffffffffffffffffffffffffffff1614612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1190614db1565b60405180910390fd5b80600d8190555050565b606060126000612a326132d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051602001612a7d9190614a57565b604051602081830303815290604052905090565b612a996132d6565b73ffffffffffffffffffffffffffffffffffffffff16612ab761264d565b73ffffffffffffffffffffffffffffffffffffffff1614612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0490614db1565b60405180910390fd5b80600a8190555050565b612b1f6132d6565b73ffffffffffffffffffffffffffffffffffffffff16612b3d61264d565b73ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614db1565b60405180910390fd5b80600b8190555050565b612ba56132d6565b73ffffffffffffffffffffffffffffffffffffffff16612bc361264d565b73ffffffffffffffffffffffffffffffffffffffff1614612c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1090614db1565b60405180910390fd5b6001600860036101000a81548160ff021916908315150217905550565b612c3e6132d6565b73ffffffffffffffffffffffffffffffffffffffff16612c5c61264d565b73ffffffffffffffffffffffffffffffffffffffff1614612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca990614db1565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b612cd933836132fc565b612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90614e51565b60405180910390fd5b612d248484848461380b565b50505050565b6060612d35826131b1565b612d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6b90614e11565b60405180910390fd5b6060600860039054906101000a900460ff1615612db3576003604051602001612d9d9190614a20565b6040516020818303038152906040529050612de1565b6003612dbe84613867565b604051602001612dcf9291906149cf565b60405160208183030381529060405290505b80915050919050565b612df26132d6565b73ffffffffffffffffffffffffffffffffffffffff16612e1061264d565b73ffffffffffffffffffffffffffffffffffffffff1614612e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5d90614db1565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60606003604051602001612e9791906149fe565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f476132d6565b73ffffffffffffffffffffffffffffffffffffffff16612f6561264d565b73ffffffffffffffffffffffffffffffffffffffff1614612fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb290614db1565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b612fe06132d6565b73ffffffffffffffffffffffffffffffffffffffff16612ffe61264d565b73ffffffffffffffffffffffffffffffffffffffff1614613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b90614db1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bb90614b91565b60405180910390fd5b6130cd81613747565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131249190615018565b9050919050565b6131336132d6565b73ffffffffffffffffffffffffffffffffffffffff1661315161264d565b73ffffffffffffffffffffffffffffffffffffffff16146131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319e90614db1565b60405180910390fd5b80600c8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613290836123bc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600033905090565b6132f88282604051806020016040528060008152506139c8565b5050565b6000613307826131b1565b613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90614c91565b60405180910390fd5b6000613351836123bc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133c057508373ffffffffffffffffffffffffffffffffffffffff166133a884610f5d565b73ffffffffffffffffffffffffffffffffffffffff16145b806133d157506133d08185612eab565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133fa826123bc565b73ffffffffffffffffffffffffffffffffffffffff1614613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790614df1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b790614c31565b60405180910390fd5b6134cb838383613a23565b6134d660008261321d565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461352691906150a3565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357d9190614fc2565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613641826123bc565b905061364f81600084613a23565b61365a60008361321d565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136aa91906150a3565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6138168484846133da565b61382284848484613a28565b613861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385890614b71565b60405180910390fd5b50505050565b606060008214156138af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506139c3565b600082905060005b600082146138e15780806138ca906151f0565b915050600a826138da9190615018565b91506138b7565b60008167ffffffffffffffff8111156138fd576138fc615330565b5b6040519080825280601f01601f19166020018201604052801561392f5781602001600182028036833780820191505090505b5090505b600085146139bc5760018261394891906150a3565b9150600a856139579190615243565b60306139639190614fc2565b60f81b81838151811061397957613978615301565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139b59190615018565b9450613933565b8093505050505b919050565b6139d28383613bb8565b6139df6000848484613a28565b613a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1590614b71565b60405180910390fd5b505050565b505050565b6000613a498473ffffffffffffffffffffffffffffffffffffffff16613d86565b15613bab578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613a8d9493929190614a8d565b602060405180830381600087803b158015613aa757600080fd5b505af1925050508015613ad857506040513d601f19601f82011682018060405250810190613ad5919061433a565b60015b613b5b573d8060008114613b08576040519150601f19603f3d011682016040523d82523d6000602084013e613b0d565b606091505b50600081511415613b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4a90614b71565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bb0565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1f90614d71565b60405180910390fd5b613c31816131b1565b15613c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6890614bb1565b60405180910390fd5b613c7d60008383613a23565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ccd9190614fc2565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613da59061518d565b90600052602060002090601f016020900481019282613dc75760008555613e0e565b82601f10613de057805160ff1916838001178555613e0e565b82800160010185558215613e0e579182015b82811115613e0d578251825591602001919060010190613df2565b5b509050613e1b9190613e1f565b5090565b5b80821115613e38576000816000905550600101613e20565b5090565b6000613e4f613e4a84614ed1565b614eac565b90508083825260208201905082856020860282011115613e7257613e71615369565b5b60005b85811015613ea25781613e888882613f30565b845260208401935060208301925050600181019050613e75565b5050509392505050565b6000613ebf613eba84614efd565b614eac565b905082815260208101848484011115613edb57613eda61536e565b5b613ee684828561514b565b509392505050565b6000613f01613efc84614f2e565b614eac565b905082815260208101848484011115613f1d57613f1c61536e565b5b613f2884828561514b565b509392505050565b600081359050613f3f81615a99565b92915050565b600082601f830112613f5a57613f59615364565b5b8135613f6a848260208601613e3c565b91505092915050565b600081359050613f8281615ab0565b92915050565b600081359050613f9781615ac7565b92915050565b600081519050613fac81615ac7565b92915050565b60008083601f840112613fc857613fc7615364565b5b8235905067ffffffffffffffff811115613fe557613fe461535f565b5b60208301915083600182028301111561400157614000615369565b5b9250929050565b600082601f83011261401d5761401c615364565b5b813561402d848260208601613eac565b91505092915050565b600082601f83011261404b5761404a615364565b5b813561405b848260208601613eee565b91505092915050565b60008135905061407381615ade565b92915050565b60006020828403121561408f5761408e615378565b5b600061409d84828501613f30565b91505092915050565b600080604083850312156140bd576140bc615378565b5b60006140cb85828601613f30565b92505060206140dc85828601613f30565b9150509250929050565b6000806000606084860312156140ff576140fe615378565b5b600061410d86828701613f30565b935050602061411e86828701613f30565b925050604061412f86828701614064565b9150509250925092565b60008060008060006080868803121561415557614154615378565b5b600061416388828901613f30565b955050602061417488828901613f30565b945050604061418588828901614064565b935050606086013567ffffffffffffffff8111156141a6576141a5615373565b5b6141b288828901613fb2565b92509250509295509295909350565b600080600080608085870312156141db576141da615378565b5b60006141e987828801613f30565b94505060206141fa87828801613f30565b935050604061420b87828801614064565b925050606085013567ffffffffffffffff81111561422c5761422b615373565b5b61423887828801614008565b91505092959194509250565b6000806040838503121561425b5761425a615378565b5b600061426985828601613f30565b925050602061427a85828601613f73565b9150509250929050565b6000806040838503121561429b5761429a615378565b5b60006142a985828601613f30565b92505060206142ba85828601614064565b9150509250929050565b6000602082840312156142da576142d9615378565b5b600082013567ffffffffffffffff8111156142f8576142f7615373565b5b61430484828501613f45565b91505092915050565b60006020828403121561432357614322615378565b5b600061433184828501613f88565b91505092915050565b6000602082840312156143505761434f615378565b5b600061435e84828501613f9d565b91505092915050565b60006020828403121561437d5761437c615378565b5b600082013567ffffffffffffffff81111561439b5761439a615373565b5b6143a784828501614036565b91505092915050565b6000602082840312156143c6576143c5615378565b5b60006143d484828501614064565b91505092915050565b600080604083850312156143f4576143f3615378565b5b600061440285828601614064565b925050602061441385828601614064565b9150509250929050565b614426816150d7565b82525050565b614435816150e9565b82525050565b614444816150f5565b82525050565b600061445582614f74565b61445f8185614f8a565b935061446f81856020860161515a565b6144788161537d565b840191505092915050565b600061448e82614f7f565b6144988185614fa6565b93506144a881856020860161515a565b6144b18161537d565b840191505092915050565b60006144c782614f7f565b6144d18185614fb7565b93506144e181856020860161515a565b80840191505092915050565b600081546144fa8161518d565b6145048186614fb7565b9450600182166000811461451f576001811461453057614563565b60ff19831686528186019350614563565b61453985614f5f565b60005b8381101561455b5781548189015260018201915060208101905061453c565b838801955050505b50505092915050565b6000614579601e83614fa6565b91506145848261538e565b602082019050919050565b600061459c600d83614fb7565b91506145a7826153b7565b600d82019050919050565b60006145bf602383614fa6565b91506145ca826153e0565b604082019050919050565b60006145e2603283614fa6565b91506145ed8261542f565b604082019050919050565b6000614605602683614fa6565b91506146108261547e565b604082019050919050565b6000614628601c83614fa6565b9150614633826154cd565b602082019050919050565b600061464b601083614fa6565b9150614656826154f6565b602082019050919050565b600061466e602483614fa6565b91506146798261551f565b604082019050919050565b6000614691601883614fa6565b915061469c8261556e565b602082019050919050565b60006146b4602483614fa6565b91506146bf82615597565b604082019050919050565b60006146d7601683614fa6565b91506146e2826155e6565b602082019050919050565b60006146fa601983614fa6565b91506147058261560f565b602082019050919050565b600061471d600c83614fb7565b915061472882615638565b600c82019050919050565b6000614740602c83614fa6565b915061474b82615661565b604082019050919050565b6000614763602483614fa6565b915061476e826156b0565b604082019050919050565b6000614786603883614fa6565b9150614791826156ff565b604082019050919050565b60006147a9602a83614fa6565b91506147b48261574e565b604082019050919050565b60006147cc602983614fa6565b91506147d78261579d565b604082019050919050565b60006147ef601183614fa6565b91506147fa826157ec565b602082019050919050565b6000614812601983614fa6565b915061481d82615815565b602082019050919050565b6000614835602083614fa6565b91506148408261583e565b602082019050919050565b6000614858602c83614fa6565b915061486382615867565b604082019050919050565b600061487b600583614fb7565b9150614886826158b6565b600582019050919050565b600061489e602083614fa6565b91506148a9826158df565b602082019050919050565b60006148c1601883614fa6565b91506148cc82615908565b602082019050919050565b60006148e4602983614fa6565b91506148ef82615931565b604082019050919050565b6000614907602f83614fa6565b915061491282615980565b604082019050919050565b600061492a602183614fa6565b9150614935826159cf565b604082019050919050565b600061494d600083614f9b565b915061495882615a1e565b600082019050919050565b6000614970603183614fa6565b915061497b82615a21565b604082019050919050565b6000614993601383614fa6565b915061499e82615a70565b602082019050919050565b6149b281615141565b82525050565b6149c96149c482615141565b615239565b82525050565b60006149db82856144ed565b91506149e782846144bc565b91506149f28261486e565b91508190509392505050565b6000614a0a82846144ed565b9150614a158261458f565b915081905092915050565b6000614a2c82846144ed565b9150614a3782614710565b915081905092915050565b6000614a4d82614940565b9150819050919050565b6000614a6382846149b8565b60208201915081905092915050565b6000602082019050614a87600083018461441d565b92915050565b6000608082019050614aa2600083018761441d565b614aaf602083018661441d565b614abc60408301856149a9565b8181036060830152614ace818461444a565b905095945050505050565b6000602082019050614aee600083018461442c565b92915050565b6000602082019050614b09600083018461443b565b92915050565b60006020820190508181036000830152614b298184614483565b905092915050565b60006020820190508181036000830152614b4a8161456c565b9050919050565b60006020820190508181036000830152614b6a816145b2565b9050919050565b60006020820190508181036000830152614b8a816145d5565b9050919050565b60006020820190508181036000830152614baa816145f8565b9050919050565b60006020820190508181036000830152614bca8161461b565b9050919050565b60006020820190508181036000830152614bea8161463e565b9050919050565b60006020820190508181036000830152614c0a81614661565b9050919050565b60006020820190508181036000830152614c2a81614684565b9050919050565b60006020820190508181036000830152614c4a816146a7565b9050919050565b60006020820190508181036000830152614c6a816146ca565b9050919050565b60006020820190508181036000830152614c8a816146ed565b9050919050565b60006020820190508181036000830152614caa81614733565b9050919050565b60006020820190508181036000830152614cca81614756565b9050919050565b60006020820190508181036000830152614cea81614779565b9050919050565b60006020820190508181036000830152614d0a8161479c565b9050919050565b60006020820190508181036000830152614d2a816147bf565b9050919050565b60006020820190508181036000830152614d4a816147e2565b9050919050565b60006020820190508181036000830152614d6a81614805565b9050919050565b60006020820190508181036000830152614d8a81614828565b9050919050565b60006020820190508181036000830152614daa8161484b565b9050919050565b60006020820190508181036000830152614dca81614891565b9050919050565b60006020820190508181036000830152614dea816148b4565b9050919050565b60006020820190508181036000830152614e0a816148d7565b9050919050565b60006020820190508181036000830152614e2a816148fa565b9050919050565b60006020820190508181036000830152614e4a8161491d565b9050919050565b60006020820190508181036000830152614e6a81614963565b9050919050565b60006020820190508181036000830152614e8a81614986565b9050919050565b6000602082019050614ea660008301846149a9565b92915050565b6000614eb6614ec7565b9050614ec282826151bf565b919050565b6000604051905090565b600067ffffffffffffffff821115614eec57614eeb615330565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f1857614f17615330565b5b614f218261537d565b9050602081019050919050565b600067ffffffffffffffff821115614f4957614f48615330565b5b614f528261537d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fcd82615141565b9150614fd883615141565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500d5761500c615274565b5b828201905092915050565b600061502382615141565b915061502e83615141565b92508261503e5761503d6152a3565b5b828204905092915050565b600061505482615141565b915061505f83615141565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561509857615097615274565b5b828202905092915050565b60006150ae82615141565b91506150b983615141565b9250828210156150cc576150cb615274565b5b828203905092915050565b60006150e282615121565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561517857808201518184015260208101905061515d565b83811115615187576000848401525b50505050565b600060028204905060018216806151a557607f821691505b602082108114156151b9576151b86152d2565b5b50919050565b6151c88261537d565b810181811067ffffffffffffffff821117156151e7576151e6615330565b5b80604052505050565b60006151fb82615141565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561522e5761522d615274565b5b600182019050919050565b6000819050919050565b600061524e82615141565b915061525983615141565b925082615269576152686152a3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964204d696e742054786e00000000000000000000000000000000600082015250565b7f4d696e743a204d617820746f6b656e73207065722077616c6c6574206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206578636565647320616c6c6f77616e636500000000000000000000600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4d696e743a20556e617574686f72697a65642041636365737300000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615aa2816150d7565b8114615aad57600080fd5b50565b615ab9816150e9565b8114615ac457600080fd5b50565b615ad0816150f5565b8114615adb57600080fd5b50565b615ae781615141565b8114615af257600080fd5b5056fe4d696e742074797065206e6f7420617661696c61626c6520617420746869732074696d652ea2646970667358221220293ac5e1c749fe141a85ffec6e2e04e6a01c9e03206168190a95f6dfa3ecd04364736f6c63430008070033

Deployed Bytecode Sourcemap

16655:24483:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40912:15;40930:9;40912:27;;40964:1;40954:7;:11;40950:41;;;40967:22;40981:7;40967:13;:22::i;:::-;40950:41;40901:97;16655:24483;;41049:15;41067:9;41049:27;;41101:1;41091:7;:11;41087:41;;;41104:22;41118:7;41104:13;:22::i;:::-;41087:41;41038:97;16655:24483;20551:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39736:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29214:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28748:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38680:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27533:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25763:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22148:2435;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30098:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17414:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27091:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26441:80;;;;;;;;;;;;;:::i;:::-;;25457:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25943:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25151:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27761:81;;;;;;;;;;;;;:::i;:::-;;20994:318;;;;;;;;;;;;;:::i;:::-;;26915:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30506:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24654:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25263:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17581:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21612:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17723:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26533:83;;;;;;;;;;;;;:::i;:::-;;26245:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17443:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28447:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28177:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14833:94;;;;;;;;;;;;;:::i;:::-;;26726:81;;;;;;;;;;;;;:::i;:::-;;17690:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14182:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17473:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39877:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17554:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29507:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25567:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27423:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25001:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26121:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27310:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27671:78;;;;;;;;;;;;;:::i;:::-;;26628:86;;;;;;;;;;;;;:::i;:::-;;30762:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40052:574;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26352:77;;;;;;;;;;;;;:::i;:::-;;40638:140;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29867:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26819:84;;;;;;;;;;;;;:::i;:::-;;15082:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27854:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27195:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21324:276;21416:1;21399:14;:18;21391:27;;;;;;21433:6;21429:164;21445:14;:21;;;;21441:1;:25;21429:164;;;21577:4;21559:14;21523;:33;21538:14;21553:1;21538:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21523:33;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;21522:59;;;;:::i;:::-;21487:13;:32;21501:14;21516:1;21501:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21487:32;;;;;;;;;;;;;;;:94;;;;21468:3;;;;;:::i;:::-;;;;21429:164;;;;21324:276;:::o;20551:361::-;20636:4;20676:25;20661:40;;;:11;:40;;;;:109;;;;20737:33;20722:48;;;:11;:48;;;;20661:109;:170;;;;20806:25;20791:40;;;:11;:40;;;;20661:170;:243;;;;20867:37;;;20852:52;;;:11;:52;;;;20661:243;20653:251;;20551:361;;;:::o;39736:84::-;39775:13;39807:5;39800:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39736:84;:::o;29214:221::-;29290:7;29318:16;29326:7;29318;:16::i;:::-;29310:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29403:15;:24;29419:7;29403:24;;;;;;;;;;;;;;;;;;;;;29396:31;;29214:221;;;:::o;28748:400::-;28829:13;28845:16;28853:7;28845;:16::i;:::-;28829:32;;28886:5;28880:11;;:2;:11;;;;28872:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28978:5;28964:19;;:10;:19;;;:58;;;;28987:35;29004:5;29011:10;28987:16;:35::i;:::-;28964:58;28942:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;29119:21;29128:2;29132:7;29119:8;:21::i;:::-;28818:330;28748:400;;:::o;38680:215::-;38797:6;38857:30;;;38850:37;;38680:215;;;;;;;:::o;27533:126::-;27579:7;27606:12;;27599:19;;27533:126;:::o;25763:168::-;25831:4;25879;25852:31;;:10;:23;25863:11;25852:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;25848:53;;;25894:4;25887:11;;;;25848:53;25918:5;25911:12;;25763:168;;;;:::o;22148:2435::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;22339:1:::1;22328:8;:12;22327:28;;;;;22353:1;22344:8;:10;22327:28;22318:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;22388:17;22450::::0;22521:26:::1;:68;;;;;;;;;;;;;;;;;;;22626:1;22614:8;:13;22610:327;;;22655:15;;22643:27;;22697:1;22685:13;;22721:10;:24;22732:12;:10;:12::i;:::-;22721:24;;;;;;;;;;;;;;;;;;;;;;;;;22713:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22798:11;;;;;;;;;;;22811:12;22790:34;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22889:9;22881:3;22848:16;:30;22865:12;:10;:12::i;:::-;22848:30;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;22847:51;;22839:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22610:327;22963:1;22951:8;:13;22947:324;;;22992:14;;22980:26;;23033:1;23021:13;;23057:9;:23;23067:12;:10;:12::i;:::-;23057:23;;;;;;;;;;;;;;;;;;;;;;;;;23049:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23133:10;;;;;;;;;;;23145:12;23125:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23223:9;23215:3;23182:16;:30;23199:12;:10;:12::i;:::-;23182:30;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;23181:51;;23173:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22947:324;23305:1;23293:8;:13;23289:149;;;23334:5;;23322:17;;23366:12;;23354:24;;23401:10;;;;;;;;;;;23413:12;23393:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23289:149;23513:9;23507:3;:15;;;;:::i;:::-;23494:9;:28;;23486:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23605:9;23597:3;23571:9;:23;23581:12;:10;:12::i;:::-;23571:23;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;23570:44;;23562:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;23733:11;;23717:12;;23711:3;:18;;;;:::i;:::-;23710:34;23702:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23792:21;23816:12;;23792:36;;23971:3;23937:16;:30;23954:12;:10;:12::i;:::-;23937:30;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;24030:14;24047:9;24030:26;;24067:15;24092:5;;24086:3;:11;;;;:::i;:::-;24067:31;;24109:18;24139:7;24130:6;:16;;;;:::i;:::-;24109:37;;24181:1;24171:7;:11;24167:41;;;24184:22;24198:7;24184:13;:22::i;:::-;24167:41;24255:9;24251:132;24274:3;24270:1;:7;24251:132;;;24299:42;24309:12;:10;:12::i;:::-;24339:1;24323:13;:17;;;;:::i;:::-;24299:9;:42::i;:::-;24356:12;;:15;;;;;;;;;:::i;:::-;;;;;;24279:3;;;;;:::i;:::-;;;;24251:132;;;;24420:1;24407:10;:14;24403:173;;;24438:12;24456:10;:15;;24479:10;24456:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24437:57;;;24517:7;24509:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24422:154;24403:173;22222:2361;;;;;;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;22148:2435;;:::o;30098:337::-;30293:39;30312:10;30324:7;30293:18;:39::i;:::-;30285:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;30399:28;30409:4;30415:2;30419:7;30399:9;:28::i;:::-;30098:337;;;:::o;17414:22::-;;;;;;;;;;;;;:::o;27091:92::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27167:8:::1;27159:5;:16;;;;27091:92:::0;:::o;26441:80::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26508:5:::1;26495:10;;:18;;;;;;;;;;;;;;;;;;26441:80::o:0;25457:98::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25543:4:::1;25522:9;:18;25532:7;25522:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25457:98:::0;:::o;25943:166::-;26010:4;26057;26031:30;;:9;:22;26041:11;26031:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;26027:52;;;26072:4;26065:11;;;;26027:52;26096:5;26089:12;;25943:166;;;;:::o;25151:100::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25239:4:::1;25217:10;:19;25228:7;25217:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;25151:100:::0;:::o;27761:81::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27829:5:::1;27815:11;;:19;;;;;;;;;;;;;;;;;;27761:81::o:0;20994:318::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;21091::::1;21112:13;:27;21126:12;:10;:12::i;:::-;21112:27;;;;;;;;;;;;;;;;21091:48;;21180:1;21150:13;:27;21164:12;:10;:12::i;:::-;21150:27;;;;;;;;;;;;;;;:31;;;;21193:12;21211:10;:15;;21234:10;21211:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21192:57;;;21268:7;21260:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21035:277;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;20994:318::o;26915:164::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26990:8:::1;26982:5;:16;;;;27027:8;27009:15;:26;;;;27063:8;27046:14;:25;;;;26915:164:::0;:::o;30506:185::-;30644:39;30661:4;30667:2;30671:7;30644:39;;;;;;;;;;;;:16;:39::i;:::-;30506:185;;;:::o;24654:125::-;24729:16;24737:7;24729;:16::i;:::-;24713:32;;:12;:10;:12::i;:::-;:32;;;24705:41;;;;;;24757:14;24763:7;24757:5;:14::i;:::-;24654:125;:::o;25263:186::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25348:9:::1;25343:99;25363:8;:15;25359:1;:19;25343:99;;;25426:4;25400:10;:23;25411:8;25420:1;25411:11;;;;;;;;:::i;:::-;;;;;;;;25400:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25380:3;;;;;:::i;:::-;;;;25343:99;;;;25263:186:::0;:::o;17581:27::-;;;;:::o;21612:524::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21718:12:::1;;21711:3;21696:12;;:18;;;;:::i;:::-;21695:35;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21796:11;;21789:3;21774:12;;:18;;;;:::i;:::-;21773:34;21765:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21850:21;21874:12;;21850:36;;21957:9;21953:176;21976:3;21972:1;:7;21953:176;;;22001:33;22011:3;22032:1;22016:13;:17;;;;:::i;:::-;22001:9;:33::i;:::-;22049:12;;:15;;;;;;;;;:::i;:::-;;;;;;21981:3;;;;;:::i;:::-;;;;21953:176;;;;21676:460;21612:524:::0;;:::o;17723:27::-;;;;:::o;26533:83::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26604:4:::1;26590:11;;:18;;;;;;;;;;;;;;;;;;26533:83::o:0;26245:95::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26326:6:::1;26315:8;:17;;;;;;;;;;;;:::i;:::-;;26245:95:::0;:::o;17443:23::-;;;;;;;;;;;;;:::o;28447:239::-;28519:7;28539:13;28555:7;:16;28563:7;28555:16;;;;;;;;;;;;;;;;;;;;;28539:32;;28607:1;28590:19;;:5;:19;;;;28582:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28673:5;28666:12;;;28447:239;;;:::o;28177:208::-;28249:7;28294:1;28277:19;;:5;:19;;;;28269:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28361:9;:16;28371:5;28361:16;;;;;;;;;;;;;;;;28354:23;;28177:208;;;:::o;14833:94::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14898:21:::1;14916:1;14898:9;:21::i;:::-;14833:94::o:0;26726:81::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26795:4:::1;26782:10;;:17;;;;;;;;;;;;;;;;;;26726:81::o:0;17690:26::-;;;;:::o;14182:87::-;14228:7;14255:6;;;;;;;;;;;14248:13;;14182:87;:::o;17473:22::-;;;;;;;;;;;;;:::o;39877:88::-;39918:13;39950:7;39943:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39877:88;:::o;17554:20::-;;;;:::o;29507:289::-;29622:10;29610:22;;:8;:22;;;;29602:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29718:8;29675:18;:30;29694:10;29675:30;;;;;;;;;;;;;;;:40;29706:8;29675:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;29769:8;29742:46;;29757:10;29742:46;;;29779:8;29742:46;;;;;;:::i;:::-;;;;;;;;29507:289;;:::o;25567:184::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25651:9:::1;25646:98;25666:8;:15;25662:1;:19;25646:98;;;25728:4;25703:9;:22;25713:8;25722:1;25713:11;;;;;;;;:::i;:::-;;;;;;;;25703:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25683:3;;;;;:::i;:::-;;;;25646:98;;;;25567:184:::0;:::o;27423:102::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:9:::1;27494:11;:23;;;;27423:102:::0;:::o;25001:138::-;25046:13;25102;:27;25116:12;:10;:12::i;:::-;25102:27;;;;;;;;;;;;;;;;25085:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;25071:60;;25001:138;:::o;26121:112::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26216:9:::1;26201:12;:24;;;;26121:112:::0;:::o;27310:101::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27395:8:::1;27378:14;:25;;;;27310:101:::0;:::o;27671:78::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27737:4:::1;27723:11;;:18;;;;;;;;;;;;;;;;;;27671:78::o:0;26628:86::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26701:5:::1;26687:11;;:19;;;;;;;;;;;;;;;;;;26628:86::o:0;30762:326::-;30937:39;30956:10;30968:7;30937:18;:39::i;:::-;30929:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31041:39;31055:4;31061:2;31065:7;31074:5;31041:13;:39::i;:::-;30762:326;;;;:::o;40052:574::-;40110:13;40143:16;40151:7;40143;:16::i;:::-;40135:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40232:22;40279:11;;;;;;;;;;;40275:308;;;40381:8;40364:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;40346:61;;40275:308;;;40533:8;40543:17;40552:7;40543:8;:17::i;:::-;40516:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40498:73;;40275:308;40610:8;40603:15;;;40052:574;;;:::o;26352:77::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26417:4:::1;26404:10;;:17;;;;;;;;;;;;;;;;;;26352:77::o:0;40638:140::-;40682:13;40743:8;40726:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;40712:58;;40638:140;:::o;29867:164::-;29964:4;29988:18;:25;30007:5;29988:25;;;;;;;;;;;;;;;:35;30014:8;29988:35;;;;;;;;;;;;;;;;;;;;;;;;;29981:42;;29867:164;;;;:::o;26819:84::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26890:5:::1;26877:10;;:18;;;;;;;;;;;;;;;;;;26819:84::o:0;15082:192::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15191:1:::1;15171:22;;:8;:22;;;;15163:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15247:19;15257:8;15247:9;:19::i;:::-;15082:192:::0;:::o;27854:259::-;27919:7;28061:6;28034:9;:23;28044:12;28034:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;28027:41;;27854:259;;;:::o;27195:103::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27282:8:::1;27264:15;:26;;;;27195:103:::0;:::o;32598:127::-;32663:4;32715:1;32687:30;;:7;:16;32695:7;32687:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32680:37;;32598:127;;;:::o;36559:167::-;36661:2;36634:15;:24;36650:7;36634:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36710:7;36706:2;36679:39;;36688:16;36696:7;36688;:16::i;:::-;36679:39;;;;;;;;;;;;36559:167;;:::o;13565:98::-;13618:7;13645:10;13638:17;;13565:98;:::o;33575:110::-;33651:26;33661:2;33665:7;33651:26;;;;;;;;;;;;:9;:26::i;:::-;33575:110;;:::o;32892:341::-;32985:4;33010:16;33018:7;33010;:16::i;:::-;33002:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33086:13;33102:16;33110:7;33102;:16::i;:::-;33086:32;;33148:5;33137:16;;:7;:16;;;:51;;;;33181:7;33157:31;;:20;33169:7;33157:11;:20::i;:::-;:31;;;33137:51;:87;;;;33192:32;33209:5;33216:7;33192:16;:32::i;:::-;33137:87;33129:96;;;32892:341;;;;:::o;35870:571::-;36022:4;36002:24;;:16;36010:7;36002;:16::i;:::-;:24;;;35994:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36105:1;36091:16;;:2;:16;;;;36083:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36161:39;36182:4;36188:2;36192:7;36161:20;:39::i;:::-;36265:29;36282:1;36286:7;36265:8;:29::i;:::-;36326:1;36307:9;:15;36317:4;36307:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36355:1;36338:9;:13;36348:2;36338:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36386:2;36367:7;:16;36375:7;36367:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36425:7;36421:2;36406:27;;36415:4;36406:27;;;;;;;;;;;;35870:571;;;:::o;35180:353::-;35240:13;35256:16;35264:7;35256;:16::i;:::-;35240:32;;35285:48;35306:5;35321:1;35325:7;35285:20;:48::i;:::-;35374:29;35391:1;35395:7;35374:8;:29::i;:::-;35436:1;35416:9;:16;35426:5;35416:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35455:7;:16;35463:7;35455:16;;;;;;;;;;;;35448:23;;;;;;;;;;;35517:7;35513:1;35489:36;;35498:5;35489:36;;;;;;;;;;;;35229:304;35180:353;:::o;15282:173::-;15338:16;15357:6;;;;;;;;;;;15338:25;;15383:8;15374:6;;:17;;;;;;;;;;;;;;;;;;15438:8;15407:40;;15428:8;15407:40;;;;;;;;;;;;15327:128;15282:173;:::o;31970:315::-;32127:28;32137:4;32143:2;32147:7;32127:9;:28::i;:::-;32174:48;32197:4;32203:2;32207:7;32216:5;32174:22;:48::i;:::-;32166:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31970:315;;;;:::o;15498:532::-;15554:13;15593:1;15584:5;:10;15580:53;;;15611:10;;;;;;;;;;;;;;;;;;;;;15580:53;15643:12;15658:5;15643:20;;15674:14;15699:78;15714:1;15706:4;:9;15699:78;;15732:8;;;;;:::i;:::-;;;;15763:2;15755:10;;;;;:::i;:::-;;;15699:78;;;15787:19;15819:6;15809:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15787:39;;15837:154;15853:1;15844:5;:10;15837:154;;15881:1;15871:11;;;;;:::i;:::-;;;15948:2;15940:5;:10;;;;:::i;:::-;15927:2;:24;;;;:::i;:::-;15914:39;;15897:6;15904;15897:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15977:2;15968:11;;;;;:::i;:::-;;;15837:154;;;16015:6;16001:21;;;;;15498:532;;;;:::o;33912:321::-;34042:18;34048:2;34052:7;34042:5;:18::i;:::-;34093:54;34124:1;34128:2;34132:7;34141:5;34093:22;:54::i;:::-;34071:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33912:321;;;:::o;39467:126::-;;;;:::o;37291:801::-;37446:4;37467:15;:2;:13;;;:15::i;:::-;37463:622;;;37519:2;37503:36;;;37540:10;37552:4;37558:7;37567:5;37503:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37499:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37764:1;37747:6;:13;:18;37743:272;;;37790:60;;;;;;;;;;:::i;:::-;;;;;;;;37743:272;37965:6;37959:13;37950:6;37946:2;37942:15;37935:38;37499:531;37634:45;;;37624:55;;;:6;:55;;;;37617:62;;;;;37463:622;38069:4;38062:11;;37291:801;;;;;;;:::o;34569:382::-;34663:1;34649:16;;:2;:16;;;;34641:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34722:16;34730:7;34722;:16::i;:::-;34721:17;34713:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34784:45;34813:1;34817:2;34821:7;34784:20;:45::i;:::-;34859:1;34842:9;:13;34852:2;34842:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34890:2;34871:7;:16;34879:7;34871:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34935:7;34931:2;34910:33;;34927:1;34910:33;;;;;;;;;;;;34569:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418: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:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4321:474;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;5196:2;5222:53;5267:7;5258:6;5247:9;5243:22;5222:53;:::i;:::-;5212:63;;5167:118;5324:2;5350:53;5395:7;5386:6;5375:9;5371:22;5350:53;:::i;:::-;5340:63;;5295:118;4801:619;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:120;;;5611:79;;:::i;:::-;5572:120;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6142:2;6131:9;6127:18;6114:32;6173:18;6165:6;6162:30;6159:117;;;6195:79;;:::i;:::-;6159:117;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5426:963;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:120;;;6570:79;;:::i;:::-;6531:120;6690:1;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6661:117;6817:2;6843:53;6888:7;6879:6;6868:9;6864:22;6843:53;:::i;:::-;6833:63;;6788:118;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;7101:2;7090:9;7086:18;7073:32;7132:18;7124:6;7121:30;7118:117;;;7154:79;;:::i;:::-;7118:117;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6395:943;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:50;7787:7;7778:6;7767:9;7763:22;7745:50;:::i;:::-;7735:60;;7690:115;7344:468;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;8069:1;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8040:117;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;7818:474;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8298:539;;;;:::o;8843:327::-;8901:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:119;;;8956:79;;:::i;:::-;8918:119;9076:1;9101:52;9145:7;9136:6;9125:9;9121:22;9101:52;:::i;:::-;9091:62;;9047:116;8843:327;;;;:::o;9176:349::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9391:127;9176:349;;;;:::o;9531:509::-;9600:6;9649:2;9637:9;9628:7;9624:23;9620:32;9617:119;;;9655:79;;:::i;:::-;9617:119;9803:1;9792:9;9788:17;9775:31;9833:18;9825:6;9822:30;9819:117;;;9855:79;;:::i;:::-;9819:117;9960:63;10015:7;10006:6;9995:9;9991:22;9960:63;:::i;:::-;9950:73;;9746:287;9531:509;;;;:::o;10046:329::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10046:329;;;;:::o;10381:474::-;10449:6;10457;10506:2;10494:9;10485:7;10481:23;10477:32;10474:119;;;10512:79;;:::i;:::-;10474:119;10632:1;10657:53;10702:7;10693:6;10682:9;10678:22;10657:53;:::i;:::-;10647:63;;10603:117;10759:2;10785:53;10830:7;10821:6;10810:9;10806:22;10785:53;:::i;:::-;10775:63;;10730:118;10381:474;;;;;:::o;10861:118::-;10948:24;10966:5;10948:24;:::i;:::-;10943:3;10936:37;10861:118;;:::o;10985:109::-;11066:21;11081:5;11066:21;:::i;:::-;11061:3;11054:34;10985:109;;:::o;11100:115::-;11185:23;11202:5;11185:23;:::i;:::-;11180:3;11173:36;11100:115;;:::o;11221:360::-;11307:3;11335:38;11367:5;11335:38;:::i;:::-;11389:70;11452:6;11447:3;11389:70;:::i;:::-;11382:77;;11468:52;11513:6;11508:3;11501:4;11494:5;11490:16;11468:52;:::i;:::-;11545:29;11567:6;11545:29;:::i;:::-;11540:3;11536:39;11529:46;;11311:270;11221:360;;;;:::o;11587:364::-;11675:3;11703:39;11736:5;11703:39;:::i;:::-;11758:71;11822:6;11817:3;11758:71;:::i;:::-;11751:78;;11838:52;11883:6;11878:3;11871:4;11864:5;11860:16;11838:52;:::i;:::-;11915:29;11937:6;11915:29;:::i;:::-;11910:3;11906:39;11899:46;;11679:272;11587:364;;;;:::o;11957:377::-;12063:3;12091:39;12124:5;12091:39;:::i;:::-;12146:89;12228:6;12223:3;12146:89;:::i;:::-;12139:96;;12244:52;12289:6;12284:3;12277:4;12270:5;12266:16;12244:52;:::i;:::-;12321:6;12316:3;12312:16;12305:23;;12067:267;11957:377;;;;:::o;12364:845::-;12467:3;12504:5;12498:12;12533:36;12559:9;12533:36;:::i;:::-;12585:89;12667:6;12662:3;12585:89;:::i;:::-;12578:96;;12705:1;12694:9;12690:17;12721:1;12716:137;;;;12867:1;12862:341;;;;12683:520;;12716:137;12800:4;12796:9;12785;12781:25;12776:3;12769:38;12836:6;12831:3;12827:16;12820:23;;12716:137;;12862:341;12929:38;12961:5;12929:38;:::i;:::-;12989:1;13003:154;13017:6;13014:1;13011:13;13003:154;;;13091:7;13085:14;13081:1;13076:3;13072:11;13065:35;13141:1;13132:7;13128:15;13117:26;;13039:4;13036:1;13032:12;13027:17;;13003:154;;;13186:6;13181:3;13177:16;13170:23;;12869:334;;12683:520;;12471:738;;12364:845;;;;:::o;13215:366::-;13357:3;13378:67;13442:2;13437:3;13378:67;:::i;:::-;13371:74;;13454:93;13543:3;13454:93;:::i;:::-;13572:2;13567:3;13563:12;13556:19;;13215:366;;;:::o;13587:402::-;13747:3;13768:85;13850:2;13845:3;13768:85;:::i;:::-;13761:92;;13862:93;13951:3;13862:93;:::i;:::-;13980:2;13975:3;13971:12;13964:19;;13587:402;;;:::o;13995:366::-;14137:3;14158:67;14222:2;14217:3;14158:67;:::i;:::-;14151:74;;14234:93;14323:3;14234:93;:::i;:::-;14352:2;14347:3;14343:12;14336:19;;13995:366;;;:::o;14367:::-;14509:3;14530:67;14594:2;14589:3;14530:67;:::i;:::-;14523:74;;14606:93;14695:3;14606:93;:::i;:::-;14724:2;14719:3;14715:12;14708:19;;14367:366;;;:::o;14739:::-;14881:3;14902:67;14966:2;14961:3;14902:67;:::i;:::-;14895:74;;14978:93;15067:3;14978:93;:::i;:::-;15096:2;15091:3;15087:12;15080:19;;14739:366;;;:::o;15111:::-;15253:3;15274:67;15338:2;15333:3;15274:67;:::i;:::-;15267:74;;15350:93;15439:3;15350:93;:::i;:::-;15468:2;15463:3;15459:12;15452:19;;15111:366;;;:::o;15483:::-;15625:3;15646:67;15710:2;15705:3;15646:67;:::i;:::-;15639:74;;15722:93;15811:3;15722:93;:::i;:::-;15840:2;15835:3;15831:12;15824:19;;15483:366;;;:::o;15855:::-;15997:3;16018:67;16082:2;16077:3;16018:67;:::i;:::-;16011:74;;16094:93;16183:3;16094:93;:::i;:::-;16212:2;16207:3;16203:12;16196:19;;15855:366;;;:::o;16227:::-;16369:3;16390:67;16454:2;16449:3;16390:67;:::i;:::-;16383:74;;16466:93;16555:3;16466:93;:::i;:::-;16584:2;16579:3;16575:12;16568:19;;16227:366;;;:::o;16599:::-;16741:3;16762:67;16826:2;16821:3;16762:67;:::i;:::-;16755:74;;16838:93;16927:3;16838:93;:::i;:::-;16956:2;16951:3;16947:12;16940:19;;16599:366;;;:::o;16971:::-;17113:3;17134:67;17198:2;17193:3;17134:67;:::i;:::-;17127:74;;17210:93;17299:3;17210:93;:::i;:::-;17328:2;17323:3;17319:12;17312:19;;16971:366;;;:::o;17343:::-;17485:3;17506:67;17570:2;17565:3;17506:67;:::i;:::-;17499:74;;17582:93;17671:3;17582:93;:::i;:::-;17700:2;17695:3;17691:12;17684:19;;17343:366;;;:::o;17715:402::-;17875:3;17896:85;17978:2;17973:3;17896:85;:::i;:::-;17889:92;;17990:93;18079:3;17990:93;:::i;:::-;18108:2;18103:3;18099:12;18092:19;;17715:402;;;:::o;18123:366::-;18265:3;18286:67;18350:2;18345:3;18286:67;:::i;:::-;18279:74;;18362:93;18451:3;18362:93;:::i;:::-;18480:2;18475:3;18471:12;18464:19;;18123:366;;;:::o;18495:::-;18637:3;18658:67;18722:2;18717:3;18658:67;:::i;:::-;18651:74;;18734:93;18823:3;18734:93;:::i;:::-;18852:2;18847:3;18843:12;18836:19;;18495:366;;;:::o;18867:::-;19009:3;19030:67;19094:2;19089:3;19030:67;:::i;:::-;19023:74;;19106:93;19195:3;19106:93;:::i;:::-;19224:2;19219:3;19215:12;19208:19;;18867:366;;;:::o;19239:::-;19381:3;19402:67;19466:2;19461:3;19402:67;:::i;:::-;19395:74;;19478:93;19567:3;19478:93;:::i;:::-;19596:2;19591:3;19587:12;19580:19;;19239:366;;;:::o;19611:::-;19753:3;19774:67;19838:2;19833:3;19774:67;:::i;:::-;19767:74;;19850:93;19939:3;19850:93;:::i;:::-;19968:2;19963:3;19959:12;19952:19;;19611:366;;;:::o;19983:::-;20125:3;20146:67;20210:2;20205:3;20146:67;:::i;:::-;20139:74;;20222:93;20311:3;20222:93;:::i;:::-;20340:2;20335:3;20331:12;20324:19;;19983:366;;;:::o;20355:::-;20497:3;20518:67;20582:2;20577:3;20518:67;:::i;:::-;20511:74;;20594:93;20683:3;20594:93;:::i;:::-;20712:2;20707:3;20703:12;20696:19;;20355:366;;;:::o;20727:::-;20869:3;20890:67;20954:2;20949:3;20890:67;:::i;:::-;20883:74;;20966:93;21055:3;20966:93;:::i;:::-;21084:2;21079:3;21075:12;21068:19;;20727:366;;;:::o;21099:::-;21241:3;21262:67;21326:2;21321:3;21262:67;:::i;:::-;21255:74;;21338:93;21427:3;21338:93;:::i;:::-;21456:2;21451:3;21447:12;21440:19;;21099:366;;;:::o;21471:400::-;21631:3;21652:84;21734:1;21729:3;21652:84;:::i;:::-;21645:91;;21745:93;21834:3;21745:93;:::i;:::-;21863:1;21858:3;21854:11;21847:18;;21471:400;;;:::o;21877:366::-;22019:3;22040:67;22104:2;22099:3;22040:67;:::i;:::-;22033:74;;22116:93;22205:3;22116:93;:::i;:::-;22234:2;22229:3;22225:12;22218:19;;21877:366;;;:::o;22249:::-;22391:3;22412:67;22476:2;22471:3;22412:67;:::i;:::-;22405:74;;22488:93;22577:3;22488:93;:::i;:::-;22606:2;22601:3;22597:12;22590:19;;22249:366;;;:::o;22621:::-;22763:3;22784:67;22848:2;22843:3;22784:67;:::i;:::-;22777:74;;22860:93;22949:3;22860:93;:::i;:::-;22978:2;22973:3;22969:12;22962:19;;22621:366;;;:::o;22993:::-;23135:3;23156:67;23220:2;23215:3;23156:67;:::i;:::-;23149:74;;23232:93;23321:3;23232:93;:::i;:::-;23350:2;23345:3;23341:12;23334:19;;22993:366;;;:::o;23365:::-;23507:3;23528:67;23592:2;23587:3;23528:67;:::i;:::-;23521:74;;23604:93;23693:3;23604:93;:::i;:::-;23722:2;23717:3;23713:12;23706:19;;23365:366;;;:::o;23737:398::-;23896:3;23917:83;23998:1;23993:3;23917:83;:::i;:::-;23910:90;;24009:93;24098:3;24009:93;:::i;:::-;24127:1;24122:3;24118:11;24111:18;;23737:398;;;:::o;24141:366::-;24283:3;24304:67;24368:2;24363:3;24304:67;:::i;:::-;24297:74;;24380:93;24469:3;24380:93;:::i;:::-;24498:2;24493:3;24489:12;24482:19;;24141:366;;;:::o;24513:::-;24655:3;24676:67;24740:2;24735:3;24676:67;:::i;:::-;24669:74;;24752:93;24841:3;24752:93;:::i;:::-;24870:2;24865:3;24861:12;24854:19;;24513:366;;;:::o;24885:118::-;24972:24;24990:5;24972:24;:::i;:::-;24967:3;24960:37;24885:118;;:::o;25009:157::-;25114:45;25134:24;25152:5;25134:24;:::i;:::-;25114:45;:::i;:::-;25109:3;25102:58;25009:157;;:::o;25172:695::-;25450:3;25472:92;25560:3;25551:6;25472:92;:::i;:::-;25465:99;;25581:95;25672:3;25663:6;25581:95;:::i;:::-;25574:102;;25693:148;25837:3;25693:148;:::i;:::-;25686:155;;25858:3;25851:10;;25172:695;;;;;:::o;25873:535::-;26103:3;26125:92;26213:3;26204:6;26125:92;:::i;:::-;26118:99;;26234:148;26378:3;26234:148;:::i;:::-;26227:155;;26399:3;26392:10;;25873:535;;;;:::o;26414:::-;26644:3;26666:92;26754:3;26745:6;26666:92;:::i;:::-;26659:99;;26775:148;26919:3;26775:148;:::i;:::-;26768:155;;26940:3;26933:10;;26414:535;;;;:::o;26955:379::-;27139:3;27161:147;27304:3;27161:147;:::i;:::-;27154:154;;27325:3;27318:10;;26955:379;;;:::o;27340:256::-;27452:3;27467:75;27538:3;27529:6;27467:75;:::i;:::-;27567:2;27562:3;27558:12;27551:19;;27587:3;27580:10;;27340:256;;;;:::o;27602:222::-;27695:4;27733:2;27722:9;27718:18;27710:26;;27746:71;27814:1;27803:9;27799:17;27790:6;27746:71;:::i;:::-;27602:222;;;;:::o;27830:640::-;28025:4;28063:3;28052:9;28048:19;28040:27;;28077:71;28145:1;28134:9;28130:17;28121:6;28077:71;:::i;:::-;28158:72;28226:2;28215:9;28211:18;28202:6;28158:72;:::i;:::-;28240;28308:2;28297:9;28293:18;28284:6;28240:72;:::i;:::-;28359:9;28353:4;28349:20;28344:2;28333:9;28329:18;28322:48;28387:76;28458:4;28449:6;28387:76;:::i;:::-;28379:84;;27830:640;;;;;;;:::o;28476:210::-;28563:4;28601:2;28590:9;28586:18;28578:26;;28614:65;28676:1;28665:9;28661:17;28652:6;28614:65;:::i;:::-;28476:210;;;;:::o;28692:218::-;28783:4;28821:2;28810:9;28806:18;28798:26;;28834:69;28900:1;28889:9;28885:17;28876:6;28834:69;:::i;:::-;28692:218;;;;:::o;28916:313::-;29029:4;29067:2;29056:9;29052:18;29044:26;;29116:9;29110:4;29106:20;29102:1;29091:9;29087:17;29080:47;29144:78;29217:4;29208:6;29144:78;:::i;:::-;29136:86;;28916:313;;;;:::o;29235:419::-;29401:4;29439:2;29428:9;29424:18;29416:26;;29488:9;29482:4;29478:20;29474:1;29463:9;29459:17;29452:47;29516:131;29642:4;29516:131;:::i;:::-;29508:139;;29235:419;;;:::o;29660:::-;29826:4;29864:2;29853:9;29849:18;29841:26;;29913:9;29907:4;29903:20;29899:1;29888:9;29884:17;29877:47;29941:131;30067:4;29941:131;:::i;:::-;29933:139;;29660:419;;;:::o;30085:::-;30251:4;30289:2;30278:9;30274:18;30266:26;;30338:9;30332:4;30328:20;30324:1;30313:9;30309:17;30302:47;30366:131;30492:4;30366:131;:::i;:::-;30358:139;;30085:419;;;:::o;30510:::-;30676:4;30714:2;30703:9;30699:18;30691:26;;30763:9;30757:4;30753:20;30749:1;30738:9;30734:17;30727:47;30791:131;30917:4;30791:131;:::i;:::-;30783:139;;30510:419;;;:::o;30935:::-;31101:4;31139:2;31128:9;31124:18;31116:26;;31188:9;31182:4;31178:20;31174:1;31163:9;31159:17;31152:47;31216:131;31342:4;31216:131;:::i;:::-;31208:139;;30935:419;;;:::o;31360:::-;31526:4;31564:2;31553:9;31549:18;31541:26;;31613:9;31607:4;31603:20;31599:1;31588:9;31584:17;31577:47;31641:131;31767:4;31641:131;:::i;:::-;31633:139;;31360:419;;;:::o;31785:::-;31951:4;31989:2;31978:9;31974:18;31966:26;;32038:9;32032:4;32028:20;32024:1;32013:9;32009:17;32002:47;32066:131;32192:4;32066:131;:::i;:::-;32058:139;;31785:419;;;:::o;32210:::-;32376:4;32414:2;32403:9;32399:18;32391:26;;32463:9;32457:4;32453:20;32449:1;32438:9;32434:17;32427:47;32491:131;32617:4;32491:131;:::i;:::-;32483:139;;32210:419;;;:::o;32635:::-;32801:4;32839:2;32828:9;32824:18;32816:26;;32888:9;32882:4;32878:20;32874:1;32863:9;32859:17;32852:47;32916:131;33042:4;32916:131;:::i;:::-;32908:139;;32635:419;;;:::o;33060:::-;33226:4;33264:2;33253:9;33249:18;33241:26;;33313:9;33307:4;33303:20;33299:1;33288:9;33284:17;33277:47;33341:131;33467:4;33341:131;:::i;:::-;33333:139;;33060:419;;;:::o;33485:::-;33651:4;33689:2;33678:9;33674:18;33666:26;;33738:9;33732:4;33728:20;33724:1;33713:9;33709:17;33702:47;33766:131;33892:4;33766:131;:::i;:::-;33758:139;;33485:419;;;:::o;33910:::-;34076:4;34114:2;34103:9;34099:18;34091:26;;34163:9;34157:4;34153:20;34149:1;34138:9;34134:17;34127:47;34191:131;34317:4;34191:131;:::i;:::-;34183:139;;33910:419;;;:::o;34335:::-;34501:4;34539:2;34528:9;34524:18;34516:26;;34588:9;34582:4;34578:20;34574:1;34563:9;34559:17;34552:47;34616:131;34742:4;34616:131;:::i;:::-;34608:139;;34335:419;;;:::o;34760:::-;34926:4;34964:2;34953:9;34949:18;34941:26;;35013:9;35007:4;35003:20;34999:1;34988:9;34984:17;34977:47;35041:131;35167:4;35041:131;:::i;:::-;35033:139;;34760:419;;;:::o;35185:::-;35351:4;35389:2;35378:9;35374:18;35366:26;;35438:9;35432:4;35428:20;35424:1;35413:9;35409:17;35402:47;35466:131;35592:4;35466:131;:::i;:::-;35458:139;;35185:419;;;:::o;35610:::-;35776:4;35814:2;35803:9;35799:18;35791:26;;35863:9;35857:4;35853:20;35849:1;35838:9;35834:17;35827:47;35891:131;36017:4;35891:131;:::i;:::-;35883:139;;35610:419;;;:::o;36035:::-;36201:4;36239:2;36228:9;36224:18;36216:26;;36288:9;36282:4;36278:20;36274:1;36263:9;36259:17;36252:47;36316:131;36442:4;36316:131;:::i;:::-;36308:139;;36035:419;;;:::o;36460:::-;36626:4;36664:2;36653:9;36649:18;36641:26;;36713:9;36707:4;36703:20;36699:1;36688:9;36684:17;36677:47;36741:131;36867:4;36741:131;:::i;:::-;36733:139;;36460:419;;;:::o;36885:::-;37051:4;37089:2;37078:9;37074:18;37066:26;;37138:9;37132:4;37128:20;37124:1;37113:9;37109:17;37102:47;37166:131;37292:4;37166:131;:::i;:::-;37158:139;;36885:419;;;:::o;37310:::-;37476:4;37514:2;37503:9;37499:18;37491:26;;37563:9;37557:4;37553:20;37549:1;37538:9;37534:17;37527:47;37591:131;37717:4;37591:131;:::i;:::-;37583:139;;37310:419;;;:::o;37735:::-;37901:4;37939:2;37928:9;37924:18;37916:26;;37988:9;37982:4;37978:20;37974:1;37963:9;37959:17;37952:47;38016:131;38142:4;38016:131;:::i;:::-;38008:139;;37735:419;;;:::o;38160:::-;38326:4;38364:2;38353:9;38349:18;38341:26;;38413:9;38407:4;38403:20;38399:1;38388:9;38384:17;38377:47;38441:131;38567:4;38441:131;:::i;:::-;38433:139;;38160:419;;;:::o;38585:::-;38751:4;38789:2;38778:9;38774:18;38766:26;;38838:9;38832:4;38828:20;38824:1;38813:9;38809:17;38802:47;38866:131;38992:4;38866:131;:::i;:::-;38858:139;;38585:419;;;:::o;39010:::-;39176:4;39214:2;39203:9;39199:18;39191:26;;39263:9;39257:4;39253:20;39249:1;39238:9;39234:17;39227:47;39291:131;39417:4;39291:131;:::i;:::-;39283:139;;39010:419;;;:::o;39435:::-;39601:4;39639:2;39628:9;39624:18;39616:26;;39688:9;39682:4;39678:20;39674:1;39663:9;39659:17;39652:47;39716:131;39842:4;39716:131;:::i;:::-;39708:139;;39435:419;;;:::o;39860:::-;40026:4;40064:2;40053:9;40049:18;40041:26;;40113:9;40107:4;40103:20;40099:1;40088:9;40084:17;40077:47;40141:131;40267:4;40141:131;:::i;:::-;40133:139;;39860:419;;;:::o;40285:::-;40451:4;40489:2;40478:9;40474:18;40466:26;;40538:9;40532:4;40528:20;40524:1;40513:9;40509:17;40502:47;40566:131;40692:4;40566:131;:::i;:::-;40558:139;;40285:419;;;:::o;40710:222::-;40803:4;40841:2;40830:9;40826:18;40818:26;;40854:71;40922:1;40911:9;40907:17;40898:6;40854:71;:::i;:::-;40710:222;;;;:::o;40938:129::-;40972:6;40999:20;;:::i;:::-;40989:30;;41028:33;41056:4;41048:6;41028:33;:::i;:::-;40938:129;;;:::o;41073:75::-;41106:6;41139:2;41133:9;41123:19;;41073:75;:::o;41154:311::-;41231:4;41321:18;41313:6;41310:30;41307:56;;;41343:18;;:::i;:::-;41307:56;41393:4;41385:6;41381:17;41373:25;;41453:4;41447;41443:15;41435:23;;41154:311;;;:::o;41471:307::-;41532:4;41622:18;41614:6;41611:30;41608:56;;;41644:18;;:::i;:::-;41608:56;41682:29;41704:6;41682:29;:::i;:::-;41674:37;;41766:4;41760;41756:15;41748:23;;41471:307;;;:::o;41784:308::-;41846:4;41936:18;41928:6;41925:30;41922:56;;;41958:18;;:::i;:::-;41922:56;41996:29;42018:6;41996:29;:::i;:::-;41988:37;;42080:4;42074;42070:15;42062:23;;41784:308;;;:::o;42098:141::-;42147:4;42170:3;42162:11;;42193:3;42190:1;42183:14;42227:4;42224:1;42214:18;42206:26;;42098:141;;;:::o;42245:98::-;42296:6;42330:5;42324:12;42314:22;;42245:98;;;:::o;42349:99::-;42401:6;42435:5;42429:12;42419:22;;42349:99;;;:::o;42454:168::-;42537:11;42571:6;42566:3;42559:19;42611:4;42606:3;42602:14;42587:29;;42454:168;;;;:::o;42628:147::-;42729:11;42766:3;42751:18;;42628:147;;;;:::o;42781:169::-;42865:11;42899:6;42894:3;42887:19;42939:4;42934:3;42930:14;42915:29;;42781:169;;;;:::o;42956:148::-;43058:11;43095:3;43080:18;;42956:148;;;;:::o;43110:305::-;43150:3;43169:20;43187:1;43169:20;:::i;:::-;43164:25;;43203:20;43221:1;43203:20;:::i;:::-;43198:25;;43357:1;43289:66;43285:74;43282:1;43279:81;43276:107;;;43363:18;;:::i;:::-;43276:107;43407:1;43404;43400:9;43393:16;;43110:305;;;;:::o;43421:185::-;43461:1;43478:20;43496:1;43478:20;:::i;:::-;43473:25;;43512:20;43530:1;43512:20;:::i;:::-;43507:25;;43551:1;43541:35;;43556:18;;:::i;:::-;43541:35;43598:1;43595;43591:9;43586:14;;43421:185;;;;:::o;43612:348::-;43652:7;43675:20;43693:1;43675:20;:::i;:::-;43670:25;;43709:20;43727:1;43709:20;:::i;:::-;43704:25;;43897:1;43829:66;43825:74;43822:1;43819:81;43814:1;43807:9;43800:17;43796:105;43793:131;;;43904:18;;:::i;:::-;43793:131;43952:1;43949;43945:9;43934:20;;43612:348;;;;:::o;43966:191::-;44006:4;44026:20;44044:1;44026:20;:::i;:::-;44021:25;;44060:20;44078:1;44060:20;:::i;:::-;44055:25;;44099:1;44096;44093:8;44090:34;;;44104:18;;:::i;:::-;44090:34;44149:1;44146;44142:9;44134:17;;43966:191;;;;:::o;44163:96::-;44200:7;44229:24;44247:5;44229:24;:::i;:::-;44218:35;;44163:96;;;:::o;44265:90::-;44299:7;44342:5;44335:13;44328:21;44317:32;;44265:90;;;:::o;44361:149::-;44397:7;44437:66;44430:5;44426:78;44415:89;;44361:149;;;:::o;44516:126::-;44553:7;44593:42;44586:5;44582:54;44571:65;;44516:126;;;:::o;44648:77::-;44685:7;44714:5;44703:16;;44648:77;;;:::o;44731:154::-;44815:6;44810:3;44805;44792:30;44877:1;44868:6;44863:3;44859:16;44852:27;44731:154;;;:::o;44891:307::-;44959:1;44969:113;44983:6;44980:1;44977:13;44969:113;;;45068:1;45063:3;45059:11;45053:18;45049:1;45044:3;45040:11;45033:39;45005:2;45002:1;44998:10;44993:15;;44969:113;;;45100:6;45097:1;45094:13;45091:101;;;45180:1;45171:6;45166:3;45162:16;45155:27;45091:101;44940:258;44891:307;;;:::o;45204:320::-;45248:6;45285:1;45279:4;45275:12;45265:22;;45332:1;45326:4;45322:12;45353:18;45343:81;;45409:4;45401:6;45397:17;45387:27;;45343:81;45471:2;45463:6;45460:14;45440:18;45437:38;45434:84;;;45490:18;;:::i;:::-;45434:84;45255:269;45204:320;;;:::o;45530:281::-;45613:27;45635:4;45613:27;:::i;:::-;45605:6;45601:40;45743:6;45731:10;45728:22;45707:18;45695:10;45692:34;45689:62;45686:88;;;45754:18;;:::i;:::-;45686:88;45794:10;45790:2;45783:22;45573:238;45530:281;;:::o;45817:233::-;45856:3;45879:24;45897:5;45879:24;:::i;:::-;45870:33;;45925:66;45918:5;45915:77;45912:103;;;45995:18;;:::i;:::-;45912:103;46042:1;46035:5;46031:13;46024:20;;45817:233;;;:::o;46056:79::-;46095:7;46124:5;46113:16;;46056:79;;;:::o;46141:176::-;46173:1;46190:20;46208:1;46190:20;:::i;:::-;46185:25;;46224:20;46242:1;46224:20;:::i;:::-;46219:25;;46263:1;46253:35;;46268:18;;:::i;:::-;46253:35;46309:1;46306;46302:9;46297:14;;46141:176;;;;:::o;46323:180::-;46371:77;46368:1;46361:88;46468:4;46465:1;46458:15;46492:4;46489:1;46482:15;46509:180;46557:77;46554:1;46547:88;46654:4;46651:1;46644:15;46678:4;46675:1;46668:15;46695:180;46743:77;46740:1;46733:88;46840:4;46837:1;46830:15;46864:4;46861:1;46854:15;46881:180;46929:77;46926:1;46919:88;47026:4;47023:1;47016:15;47050:4;47047:1;47040:15;47067:180;47115:77;47112:1;47105:88;47212:4;47209:1;47202:15;47236:4;47233:1;47226:15;47253:117;47362:1;47359;47352:12;47376:117;47485:1;47482;47475:12;47499:117;47608:1;47605;47598:12;47622:117;47731:1;47728;47721:12;47745:117;47854:1;47851;47844:12;47868:117;47977:1;47974;47967:12;47991:102;48032:6;48083:2;48079:7;48074:2;48067:5;48063:14;48059:28;48049:38;;47991:102;;;:::o;48099:180::-;48239:32;48235:1;48227:6;48223:14;48216:56;48099:180;:::o;48285:163::-;48425:15;48421:1;48413:6;48409:14;48402:39;48285:163;:::o;48454:222::-;48594:34;48590:1;48582:6;48578:14;48571:58;48663:5;48658:2;48650:6;48646:15;48639:30;48454:222;:::o;48682:237::-;48822:34;48818:1;48810:6;48806:14;48799:58;48891:20;48886:2;48878:6;48874:15;48867:45;48682:237;:::o;48925:225::-;49065:34;49061:1;49053:6;49049:14;49042:58;49134:8;49129:2;49121:6;49117:15;49110:33;48925:225;:::o;49156:178::-;49296:30;49292:1;49284:6;49280:14;49273:54;49156:178;:::o;49340:166::-;49480:18;49476:1;49468:6;49464:14;49457:42;49340:166;:::o;49512:223::-;49652:34;49648:1;49640:6;49636:14;49629:58;49721:6;49716:2;49708:6;49704:15;49697:31;49512:223;:::o;49741:174::-;49881:26;49877:1;49869:6;49865:14;49858:50;49741:174;:::o;49921:223::-;50061:34;50057:1;50049:6;50045:14;50038:58;50130:6;50125:2;50117:6;50113:15;50106:31;49921:223;:::o;50150:172::-;50290:24;50286:1;50278:6;50274:14;50267:48;50150:172;:::o;50328:175::-;50468:27;50464:1;50456:6;50452:14;50445:51;50328:175;:::o;50509:162::-;50649:14;50645:1;50637:6;50633:14;50626:38;50509:162;:::o;50677:231::-;50817:34;50813:1;50805:6;50801:14;50794:58;50886:14;50881:2;50873:6;50869:15;50862:39;50677:231;:::o;50914:223::-;51054:34;51050:1;51042:6;51038:14;51031:58;51123:6;51118:2;51110:6;51106:15;51099:31;50914:223;:::o;51143:243::-;51283:34;51279:1;51271:6;51267:14;51260:58;51352:26;51347:2;51339:6;51335:15;51328:51;51143:243;:::o;51392:229::-;51532:34;51528:1;51520:6;51516:14;51509:58;51601:12;51596:2;51588:6;51584:15;51577:37;51392:229;:::o;51627:228::-;51767:34;51763:1;51755:6;51751:14;51744:58;51836:11;51831:2;51823:6;51819:15;51812:36;51627:228;:::o;51861:167::-;52001:19;51997:1;51989:6;51985:14;51978:43;51861:167;:::o;52034:175::-;52174:27;52170:1;52162:6;52158:14;52151:51;52034:175;:::o;52215:182::-;52355:34;52351:1;52343:6;52339:14;52332:58;52215:182;:::o;52403:231::-;52543:34;52539:1;52531:6;52527:14;52520:58;52612:14;52607:2;52599:6;52595:15;52588:39;52403:231;:::o;52640:155::-;52780:7;52776:1;52768:6;52764:14;52757:31;52640:155;:::o;52801:182::-;52941:34;52937:1;52929:6;52925:14;52918:58;52801:182;:::o;52989:174::-;53129:26;53125:1;53117:6;53113:14;53106:50;52989:174;:::o;53169:228::-;53309:34;53305:1;53297:6;53293:14;53286:58;53378:11;53373:2;53365:6;53361:15;53354:36;53169:228;:::o;53403:234::-;53543:34;53539:1;53531:6;53527:14;53520:58;53612:17;53607:2;53599:6;53595:15;53588:42;53403:234;:::o;53643:220::-;53783:34;53779:1;53771:6;53767:14;53760:58;53852:3;53847:2;53839:6;53835:15;53828:28;53643:220;:::o;53869:114::-;;:::o;53989:236::-;54129:34;54125:1;54117:6;54113:14;54106:58;54198:19;54193:2;54185:6;54181:15;54174:44;53989:236;:::o;54231:169::-;54371:21;54367:1;54359:6;54355:14;54348:45;54231:169;:::o;54406:122::-;54479:24;54497:5;54479:24;:::i;:::-;54472:5;54469:35;54459:63;;54518:1;54515;54508:12;54459:63;54406:122;:::o;54534:116::-;54604:21;54619:5;54604:21;:::i;:::-;54597:5;54594:32;54584:60;;54640:1;54637;54630:12;54584:60;54534:116;:::o;54656:120::-;54728:23;54745:5;54728:23;:::i;:::-;54721:5;54718:34;54708:62;;54766:1;54763;54756:12;54708:62;54656:120;:::o;54782:122::-;54855:24;54873:5;54855:24;:::i;:::-;54848:5;54845:35;54835:63;;54894:1;54891;54884:12;54835:63;54782:122;:::o

Swarm Source

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