ETH Price: $2,714.12 (+0.64%)

Token

OSRS Loot (OSRSLOOT)
 

Overview

Max Total Supply

113 OSRSLOOT

Holders

28

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 OSRSLOOT
0xF2Fb34C4323F9bf4a5c04fE277f96588dDE5316f
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:
OSRSLoot

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-04
*/

/*OSRSLOOT
LOSRAYT | Perhapsingly.eth
*/
// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.6;


library Address {
  
    function isContract(address account) internal view returns (bool) {
      
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


/*22
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**33
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
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`.
     *
     * See {setApprovalForAll}
     */
    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;
}


/**66
 * @dev ERC721 token with storage based token URI management.
 */

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

 

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
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);
}


/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
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);
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address internal _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
   
    address payable internal  bizz = payable(0xbF5A330B28f7392e27D04C92E3eEB3afe15e23C4);
    address payable internal  losrayt = payable(0x61407c14430F1D78Bae6bAF5DFd0528FCd58BF2B);


    function  _withdrawAll() internal virtual {
    
       uint256 balanceBizz = address(this).balance*333/1000;
       uint256 balanceLosrayt = address(this).balance-balanceBizz;

        payable(bizz).transfer(balanceBizz);
        payable(losrayt).transfer(balanceLosrayt);

    }
    
    
    /**
     * @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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function setLosrayt(address payable _ball) public virtual onlyOwner  {
         losrayt = _ball;
    }
    function setBizz(address payable _balu) public virtual onlyOwner  {
         bizz = _balu;
    }
      
}



/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}



/**44
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // 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;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @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 {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

        require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()),
            "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 != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), 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(_msgSender(), 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(_msgSender(), 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 = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || ERC721.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 = ERC721.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(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // 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(ERC721.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(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 { }
}

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

/**55
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

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

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

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

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

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

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

contract OSRSLoot is ERC721Enumerable, Ownable {
    uint public constant MAX_OSRSLOOT = 2007;
    uint private lootCount = 0;
    uint public  basePrice = 0.01e18; // 0.01 ETH
	string _baseTokenURI;
    bool saleEnable = false;


    
    function setsaleEnable(bool  _saleEnable) public onlyOwner {
         saleEnable = _saleEnable;
    }
    
    function endPresale() public onlyOwner {
         basePrice = 0.02e18; //0.02 ETH
    }
    
    
    constructor(string memory baseURI) ERC721("OSRS Loot", "OSRSLOOT")  {
        setBaseURI(baseURI);
    }


    function mintLoot(address _to, uint _count) public payable {
        require(msg.sender == _owner || saleEnable, "Sale is not enabled");
        require(lootCount <= MAX_OSRSLOOT, "Sale ended");
        require(lootCount + _count <= MAX_OSRSLOOT, "Transaction would be above max mint count (2007)");
        require(_count <= 10, "Exceeds max transaction mint count (10)");
        require(msg.value >= price(_count), "Value below price");
      
        for(uint i = 0; i < _count; i++){
            _safeMint(_to, lootCount);
             lootCount++;
        }
    }
    

    function mintOwner(uint _count) external onlyOwner {
        require(_count <= MAX_OSRSLOOT);
        require(lootCount + _count <= MAX_OSRSLOOT);

        for (uint i = 0; i < _count; i++) {
            _mint(_owner, lootCount);
            lootCount++;
        }
    }

    function price(uint _count) public view virtual returns (uint256) {
          return basePrice * _count; 
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] memory) {
        uint tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint i = 0; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokensId;
    }

    function withdrawAll() public payable onlyOwner {
        _withdrawAll();
       
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_OSRSLOOT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintLoot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_balu","type":"address"}],"name":"setBizz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_ball","type":"address"}],"name":"setLosrayt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnable","type":"bool"}],"name":"setsaleEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

608060405273bf5a330b28f7392e27d04c92e3eeb3afe15e23c4600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507361407c14430f1d78bae6baf5dfd0528fcd58bf2b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d55662386f26fc10000600e556000601060006101000a81548160ff021916908315150217905550348015620000e657600080fd5b5060405162004c8838038062004c8883398181016040528101906200010c919062000480565b6040518060400160405280600981526020017f4f535253204c6f6f7400000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4f5352534c4f4f5400000000000000000000000000000000000000000000000081525081600090805190602001906200019092919062000352565b508060019080519060200190620001a992919062000352565b5050506000620001be6200027560201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200026e816200027d60201b60201c565b50620006d8565b600033905090565b6200028d6200027560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b36200032860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200030c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030390620004f8565b60405180910390fd5b80600f90805190602001906200032492919062000352565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200036090620005c0565b90600052602060002090601f016020900481019282620003845760008555620003d0565b82601f106200039f57805160ff1916838001178555620003d0565b82800160010185558215620003d0579182015b82811115620003cf578251825591602001919060010190620003b2565b5b509050620003df9190620003e3565b5090565b5b80821115620003fe576000816000905550600101620003e4565b5090565b600062000419620004138462000543565b6200051a565b9050828152602081018484840111156200043857620004376200068f565b5b620004458482856200058a565b509392505050565b600082601f8301126200046557620004646200068a565b5b81516200047784826020860162000402565b91505092915050565b60006020828403121562000499576200049862000699565b5b600082015167ffffffffffffffff811115620004ba57620004b962000694565b5b620004c8848285016200044d565b91505092915050565b6000620004e060208362000579565b9150620004ed82620006af565b602082019050919050565b600060208201905081810360008301526200051381620004d1565b9050919050565b60006200052662000539565b9050620005348282620005f6565b919050565b6000604051905090565b600067ffffffffffffffff8211156200056157620005606200065b565b5b6200056c826200069e565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005aa5780820151818401526020810190506200058d565b83811115620005ba576000848401525b50505050565b60006002820490506001821680620005d957607f821691505b60208210811415620005f057620005ef6200062c565b5b50919050565b62000601826200069e565b810181811067ffffffffffffffff821117156200062357620006226200065b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6145a080620006e86000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063b02636fd11610095578063e0e0c21011610064578063e0e0c2101461069e578063e679d5a9146106c9578063e985e9c5146106f2578063f2fde38b1461072f576101d8565b8063b02636fd146105e4578063b88d4fde1461060d578063c7876ea414610636578063c87b56dd14610661576101d8565b80638da5cb5b116100d15780638da5cb5b1461054e57806395d89b4114610579578063a22cb465146105a4578063a43be57b146105cd576101d8565b806370a08231146104b3578063715018a6146104f05780638462151c14610507578063853828b614610544576101d8565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146103f457806355f804b31461043157806359cb2f061461045a5780636352211e14610476576101d8565b80632f745c591461033c57806333f88d221461037957806342842e0e146103a257806344471f5a146103cb576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d657806326a49e37146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906130bd565b610758565b60405161021191906136b4565b60405180910390f35b34801561022657600080fd5b5061022f6107d2565b60405161023c91906136cf565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613160565b610864565b604051610279919061362b565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613050565b6108e9565b005b3480156102b757600080fd5b506102c0610a01565b6040516102cd91906139d1565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612f3a565b610a0e565b005b34801561030b57600080fd5b5061032660048036038101906103219190613160565b610a6e565b60405161033391906139d1565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190613050565b610a85565b60405161037091906139d1565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613160565b610b2a565b005b3480156103ae57600080fd5b506103c960048036038101906103c49190612f3a565b610c39565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612ecd565b610c59565b005b34801561040057600080fd5b5061041b60048036038101906104169190613160565b610d19565b60405161042891906139d1565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190613117565b610d8a565b005b610474600480360381019061046f9190613050565b610e20565b005b34801561048257600080fd5b5061049d60048036038101906104989190613160565b611036565b6040516104aa919061362b565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190612ea0565b6110e8565b6040516104e791906139d1565b60405180910390f35b3480156104fc57600080fd5b506105056111a0565b005b34801561051357600080fd5b5061052e60048036038101906105299190612ea0565b6112dd565b60405161053b9190613692565b60405180910390f35b61054c61138b565b005b34801561055a57600080fd5b50610563611411565b604051610570919061362b565b60405180910390f35b34801561058557600080fd5b5061058e61143b565b60405161059b91906136cf565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613010565b6114cd565b005b3480156105d957600080fd5b506105e261164e565b005b3480156105f057600080fd5b5061060b60048036038101906106069190613090565b6116da565b005b34801561061957600080fd5b50610634600480360381019061062f9190612f8d565b611773565b005b34801561064257600080fd5b5061064b6117d5565b60405161065891906139d1565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190613160565b6117db565b60405161069591906136cf565b60405180910390f35b3480156106aa57600080fd5b506106b3611882565b6040516106c091906139d1565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190612ecd565b611888565b005b3480156106fe57600080fd5b5061071960048036038101906107149190612efa565b611948565b60405161072691906136b4565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190612ea0565b6119dc565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107cb57506107ca82611b88565b5b9050919050565b6060600080546107e190613ccc565b80601f016020809104026020016040519081016040528092919081815260200182805461080d90613ccc565b801561085a5780601f1061082f5761010080835404028352916020019161085a565b820191906000526020600020905b81548152906001019060200180831161083d57829003601f168201915b5050505050905090565b600061086f82611c6a565b6108ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a590613891565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f482611036565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c90613951565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610984611cd6565b73ffffffffffffffffffffffffffffffffffffffff1614806109b357506109b2816109ad611cd6565b611948565b5b6109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e9906137f1565b60405180910390fd5b6109fc8383611cde565b505050565b6000600880549050905090565b610a1f610a19611cd6565b82611d97565b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590613991565b60405180910390fd5b610a69838383611e75565b505050565b600081600e54610a7e9190613b76565b9050919050565b6000610a90836110e8565b8210610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac890613711565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b32611cd6565b73ffffffffffffffffffffffffffffffffffffffff16610b50611411565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906138b1565b60405180910390fd5b6107d7811115610bb557600080fd5b6107d781600d54610bc69190613aef565b1115610bd157600080fd5b60005b81811015610c3557610c0a600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d546120d1565b600d6000815480929190610c1d90613d2f565b91905055508080610c2d90613d2f565b915050610bd4565b5050565b610c5483838360405180602001604052806000815250611773565b505050565b610c61611cd6565b73ffffffffffffffffffffffffffffffffffffffff16610c7f611411565b73ffffffffffffffffffffffffffffffffffffffff1614610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc906138b1565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d23610a01565b8210610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b906139b1565b60405180910390fd5b60088281548110610d7857610d77613e65565b5b90600052602060002001549050919050565b610d92611cd6565b73ffffffffffffffffffffffffffffffffffffffff16610db0611411565b73ffffffffffffffffffffffffffffffffffffffff1614610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd906138b1565b60405180910390fd5b80600f9080519060200190610e1c929190612c9f565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e885750601060009054906101000a900460ff165b610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90613851565b60405180910390fd5b6107d7600d541115610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590613931565b60405180910390fd5b6107d781600d54610f1f9190613aef565b1115610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613971565b60405180910390fd5b600a811115610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b906136f1565b60405180910390fd5b610fad81610a6e565b341015610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690613911565b60405180910390fd5b60005b818110156110315761100683600d5461229f565b600d600081548092919061101990613d2f565b9190505550808061102990613d2f565b915050610ff2565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690613831565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613811565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111a8611cd6565b73ffffffffffffffffffffffffffffffffffffffff166111c6611411565b73ffffffffffffffffffffffffffffffffffffffff161461121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906138b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060006112ea836110e8565b905060008167ffffffffffffffff81111561130857611307613e94565b5b6040519080825280602002602001820160405280156113365781602001602082028036833780820191505090505b50905060005b828110156113805761134e8582610a85565b82828151811061136157611360613e65565b5b602002602001018181525050808061137890613d2f565b91505061133c565b508092505050919050565b611393611cd6565b73ffffffffffffffffffffffffffffffffffffffff166113b1611411565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe906138b1565b60405180910390fd5b61140f6122bd565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461144a90613ccc565b80601f016020809104026020016040519081016040528092919081815260200182805461147690613ccc565b80156114c35780601f10611498576101008083540402835291602001916114c3565b820191906000526020600020905b8154815290600101906020018083116114a657829003601f168201915b5050505050905090565b6114d5611cd6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906137b1565b60405180910390fd5b8060056000611550611cd6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115fd611cd6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161164291906136b4565b60405180910390a35050565b611656611cd6565b73ffffffffffffffffffffffffffffffffffffffff16611674611411565b73ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c1906138b1565b60405180910390fd5b66470de4df820000600e81905550565b6116e2611cd6565b73ffffffffffffffffffffffffffffffffffffffff16611700611411565b73ffffffffffffffffffffffffffffffffffffffff1614611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d906138b1565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b61178461177e611cd6565b83611d97565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613991565b60405180910390fd5b6117cf848484846123c2565b50505050565b600e5481565b60606117e682611c6a565b611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906138f1565b60405180910390fd5b600061182f61241e565b9050600081511161184f576040518060200160405280600081525061187a565b80611859846124b0565b60405160200161186a929190613607565b6040516020818303038152906040525b915050919050565b6107d781565b611890611cd6565b73ffffffffffffffffffffffffffffffffffffffff166118ae611411565b73ffffffffffffffffffffffffffffffffffffffff1614611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb906138b1565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119e4611cd6565b73ffffffffffffffffffffffffffffffffffffffff16611a02611411565b73ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f906138b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90613751565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c5357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c635750611c6282612611565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5183611036565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611da282611c6a565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906137d1565b60405180910390fd5b6000611dec83611036565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e5b57508373ffffffffffffffffffffffffffffffffffffffff16611e4384610864565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e6c5750611e6b8185611948565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e9582611036565b73ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee2906138d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290613791565b60405180910390fd5b611f6683838361267b565b611f71600082611cde565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc19190613bd0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120189190613aef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613871565b60405180910390fd5b61214a81611c6a565b1561218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218190613771565b60405180910390fd5b6121966000838361267b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e69190613aef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6122b982826040518060200160405280600081525061278f565b5050565b60006103e861014d476122d09190613b76565b6122da9190613b45565b9050600081476122ea9190613bd0565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612354573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156123bd573d6000803e3d6000fd5b505050565b6123cd848484611e75565b6123d9848484846127ea565b612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90613731565b60405180910390fd5b50505050565b6060600f805461242d90613ccc565b80601f016020809104026020016040519081016040528092919081815260200182805461245990613ccc565b80156124a65780601f1061247b576101008083540402835291602001916124a6565b820191906000526020600020905b81548152906001019060200180831161248957829003601f168201915b5050505050905090565b606060008214156124f8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061260c565b600082905060005b6000821461252a57808061251390613d2f565b915050600a826125239190613b45565b9150612500565b60008167ffffffffffffffff81111561254657612545613e94565b5b6040519080825280601f01601f1916602001820160405280156125785781602001600182028036833780820191505090505b5090505b60008514612605576001826125919190613bd0565b9150600a856125a09190613d78565b60306125ac9190613aef565b60f81b8183815181106125c2576125c1613e65565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125fe9190613b45565b945061257c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612686838383612981565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c9576126c481612986565b612708565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127075761270683826129cf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274b5761274681612b3c565b61278a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612789576127888282612c0d565b5b5b505050565b61279983836120d1565b6127a660008484846127ea565b6127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90613731565b60405180910390fd5b505050565b600061280b8473ffffffffffffffffffffffffffffffffffffffff16612c8c565b15612974578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612834611cd6565b8786866040518563ffffffff1660e01b81526004016128569493929190613646565b602060405180830381600087803b15801561287057600080fd5b505af19250505080156128a157506040513d601f19601f8201168201806040525081019061289e91906130ea565b60015b612924573d80600081146128d1576040519150601f19603f3d011682016040523d82523d6000602084013e6128d6565b606091505b5060008151141561291c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291390613731565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612979565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129dc846110e8565b6129e69190613bd0565b9050600060076000848152602001908152602001600020549050818114612acb576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b509190613bd0565b9050600060096000848152602001908152602001600020549050600060088381548110612b8057612b7f613e65565b5b906000526020600020015490508060088381548110612ba257612ba1613e65565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bf157612bf0613e36565b5b6001900381819060005260206000200160009055905550505050565b6000612c18836110e8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612cab90613ccc565b90600052602060002090601f016020900481019282612ccd5760008555612d14565b82601f10612ce657805160ff1916838001178555612d14565b82800160010185558215612d14579182015b82811115612d13578251825591602001919060010190612cf8565b5b509050612d219190612d25565b5090565b5b80821115612d3e576000816000905550600101612d26565b5090565b6000612d55612d5084613a11565b6139ec565b905082815260208101848484011115612d7157612d70613ec8565b5b612d7c848285613c8a565b509392505050565b6000612d97612d9284613a42565b6139ec565b905082815260208101848484011115612db357612db2613ec8565b5b612dbe848285613c8a565b509392505050565b600081359050612dd5816144f7565b92915050565b600081359050612dea8161450e565b92915050565b600081359050612dff81614525565b92915050565b600081359050612e148161453c565b92915050565b600081519050612e298161453c565b92915050565b600082601f830112612e4457612e43613ec3565b5b8135612e54848260208601612d42565b91505092915050565b600082601f830112612e7257612e71613ec3565b5b8135612e82848260208601612d84565b91505092915050565b600081359050612e9a81614553565b92915050565b600060208284031215612eb657612eb5613ed2565b5b6000612ec484828501612dc6565b91505092915050565b600060208284031215612ee357612ee2613ed2565b5b6000612ef184828501612ddb565b91505092915050565b60008060408385031215612f1157612f10613ed2565b5b6000612f1f85828601612dc6565b9250506020612f3085828601612dc6565b9150509250929050565b600080600060608486031215612f5357612f52613ed2565b5b6000612f6186828701612dc6565b9350506020612f7286828701612dc6565b9250506040612f8386828701612e8b565b9150509250925092565b60008060008060808587031215612fa757612fa6613ed2565b5b6000612fb587828801612dc6565b9450506020612fc687828801612dc6565b9350506040612fd787828801612e8b565b925050606085013567ffffffffffffffff811115612ff857612ff7613ecd565b5b61300487828801612e2f565b91505092959194509250565b6000806040838503121561302757613026613ed2565b5b600061303585828601612dc6565b925050602061304685828601612df0565b9150509250929050565b6000806040838503121561306757613066613ed2565b5b600061307585828601612dc6565b925050602061308685828601612e8b565b9150509250929050565b6000602082840312156130a6576130a5613ed2565b5b60006130b484828501612df0565b91505092915050565b6000602082840312156130d3576130d2613ed2565b5b60006130e184828501612e05565b91505092915050565b600060208284031215613100576130ff613ed2565b5b600061310e84828501612e1a565b91505092915050565b60006020828403121561312d5761312c613ed2565b5b600082013567ffffffffffffffff81111561314b5761314a613ecd565b5b61315784828501612e5d565b91505092915050565b60006020828403121561317657613175613ed2565b5b600061318484828501612e8b565b91505092915050565b600061319983836135e9565b60208301905092915050565b6131ae81613c04565b82525050565b60006131bf82613a83565b6131c98185613ab1565b93506131d483613a73565b8060005b838110156132055781516131ec888261318d565b97506131f783613aa4565b9250506001810190506131d8565b5085935050505092915050565b61321b81613c28565b82525050565b600061322c82613a8e565b6132368185613ac2565b9350613246818560208601613c99565b61324f81613ed7565b840191505092915050565b600061326582613a99565b61326f8185613ad3565b935061327f818560208601613c99565b61328881613ed7565b840191505092915050565b600061329e82613a99565b6132a88185613ae4565b93506132b8818560208601613c99565b80840191505092915050565b60006132d1602783613ad3565b91506132dc82613ee8565b604082019050919050565b60006132f4602b83613ad3565b91506132ff82613f37565b604082019050919050565b6000613317603283613ad3565b915061332282613f86565b604082019050919050565b600061333a602683613ad3565b915061334582613fd5565b604082019050919050565b600061335d601c83613ad3565b915061336882614024565b602082019050919050565b6000613380602483613ad3565b915061338b8261404d565b604082019050919050565b60006133a3601983613ad3565b91506133ae8261409c565b602082019050919050565b60006133c6602c83613ad3565b91506133d1826140c5565b604082019050919050565b60006133e9603883613ad3565b91506133f482614114565b604082019050919050565b600061340c602a83613ad3565b915061341782614163565b604082019050919050565b600061342f602983613ad3565b915061343a826141b2565b604082019050919050565b6000613452601383613ad3565b915061345d82614201565b602082019050919050565b6000613475602083613ad3565b91506134808261422a565b602082019050919050565b6000613498602c83613ad3565b91506134a382614253565b604082019050919050565b60006134bb602083613ad3565b91506134c6826142a2565b602082019050919050565b60006134de602983613ad3565b91506134e9826142cb565b604082019050919050565b6000613501602f83613ad3565b915061350c8261431a565b604082019050919050565b6000613524601183613ad3565b915061352f82614369565b602082019050919050565b6000613547600a83613ad3565b915061355282614392565b602082019050919050565b600061356a602183613ad3565b9150613575826143bb565b604082019050919050565b600061358d603083613ad3565b91506135988261440a565b604082019050919050565b60006135b0603183613ad3565b91506135bb82614459565b604082019050919050565b60006135d3602c83613ad3565b91506135de826144a8565b604082019050919050565b6135f281613c80565b82525050565b61360181613c80565b82525050565b60006136138285613293565b915061361f8284613293565b91508190509392505050565b600060208201905061364060008301846131a5565b92915050565b600060808201905061365b60008301876131a5565b61366860208301866131a5565b61367560408301856135f8565b81810360608301526136878184613221565b905095945050505050565b600060208201905081810360008301526136ac81846131b4565b905092915050565b60006020820190506136c96000830184613212565b92915050565b600060208201905081810360008301526136e9818461325a565b905092915050565b6000602082019050818103600083015261370a816132c4565b9050919050565b6000602082019050818103600083015261372a816132e7565b9050919050565b6000602082019050818103600083015261374a8161330a565b9050919050565b6000602082019050818103600083015261376a8161332d565b9050919050565b6000602082019050818103600083015261378a81613350565b9050919050565b600060208201905081810360008301526137aa81613373565b9050919050565b600060208201905081810360008301526137ca81613396565b9050919050565b600060208201905081810360008301526137ea816133b9565b9050919050565b6000602082019050818103600083015261380a816133dc565b9050919050565b6000602082019050818103600083015261382a816133ff565b9050919050565b6000602082019050818103600083015261384a81613422565b9050919050565b6000602082019050818103600083015261386a81613445565b9050919050565b6000602082019050818103600083015261388a81613468565b9050919050565b600060208201905081810360008301526138aa8161348b565b9050919050565b600060208201905081810360008301526138ca816134ae565b9050919050565b600060208201905081810360008301526138ea816134d1565b9050919050565b6000602082019050818103600083015261390a816134f4565b9050919050565b6000602082019050818103600083015261392a81613517565b9050919050565b6000602082019050818103600083015261394a8161353a565b9050919050565b6000602082019050818103600083015261396a8161355d565b9050919050565b6000602082019050818103600083015261398a81613580565b9050919050565b600060208201905081810360008301526139aa816135a3565b9050919050565b600060208201905081810360008301526139ca816135c6565b9050919050565b60006020820190506139e660008301846135f8565b92915050565b60006139f6613a07565b9050613a028282613cfe565b919050565b6000604051905090565b600067ffffffffffffffff821115613a2c57613a2b613e94565b5b613a3582613ed7565b9050602081019050919050565b600067ffffffffffffffff821115613a5d57613a5c613e94565b5b613a6682613ed7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613afa82613c80565b9150613b0583613c80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3a57613b39613da9565b5b828201905092915050565b6000613b5082613c80565b9150613b5b83613c80565b925082613b6b57613b6a613dd8565b5b828204905092915050565b6000613b8182613c80565b9150613b8c83613c80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bc557613bc4613da9565b5b828202905092915050565b6000613bdb82613c80565b9150613be683613c80565b925082821015613bf957613bf8613da9565b5b828203905092915050565b6000613c0f82613c60565b9050919050565b6000613c2182613c60565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cb7578082015181840152602081019050613c9c565b83811115613cc6576000848401525b50505050565b60006002820490506001821680613ce457607f821691505b60208210811415613cf857613cf7613e07565b5b50919050565b613d0782613ed7565b810181811067ffffffffffffffff82111715613d2657613d25613e94565b5b80604052505050565b6000613d3a82613c80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d6d57613d6c613da9565b5b600182019050919050565b6000613d8382613c80565b9150613d8e83613c80565b925082613d9e57613d9d613dd8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365656473206d6178207472616e73616374696f6e206d696e7420636f7560008201527f6e74202831302900000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20776f756c642062652061626f7665206d6178206d60008201527f696e7420636f756e742028323030372900000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61450081613c04565b811461450b57600080fd5b50565b61451781613c16565b811461452257600080fd5b50565b61452e81613c28565b811461453957600080fd5b50565b61454581613c34565b811461455057600080fd5b50565b61455c81613c80565b811461456757600080fd5b5056fea26469706673582212202d4c5e8d21fab834a27688335d456e23fd41710c714b48890fa32ca9c8cd61e964736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101d85760003560e01c806370a0823111610102578063b02636fd11610095578063e0e0c21011610064578063e0e0c2101461069e578063e679d5a9146106c9578063e985e9c5146106f2578063f2fde38b1461072f576101d8565b8063b02636fd146105e4578063b88d4fde1461060d578063c7876ea414610636578063c87b56dd14610661576101d8565b80638da5cb5b116100d15780638da5cb5b1461054e57806395d89b4114610579578063a22cb465146105a4578063a43be57b146105cd576101d8565b806370a08231146104b3578063715018a6146104f05780638462151c14610507578063853828b614610544576101d8565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146103f457806355f804b31461043157806359cb2f061461045a5780636352211e14610476576101d8565b80632f745c591461033c57806333f88d221461037957806342842e0e146103a257806344471f5a146103cb576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d657806326a49e37146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906130bd565b610758565b60405161021191906136b4565b60405180910390f35b34801561022657600080fd5b5061022f6107d2565b60405161023c91906136cf565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613160565b610864565b604051610279919061362b565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613050565b6108e9565b005b3480156102b757600080fd5b506102c0610a01565b6040516102cd91906139d1565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612f3a565b610a0e565b005b34801561030b57600080fd5b5061032660048036038101906103219190613160565b610a6e565b60405161033391906139d1565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190613050565b610a85565b60405161037091906139d1565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613160565b610b2a565b005b3480156103ae57600080fd5b506103c960048036038101906103c49190612f3a565b610c39565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612ecd565b610c59565b005b34801561040057600080fd5b5061041b60048036038101906104169190613160565b610d19565b60405161042891906139d1565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190613117565b610d8a565b005b610474600480360381019061046f9190613050565b610e20565b005b34801561048257600080fd5b5061049d60048036038101906104989190613160565b611036565b6040516104aa919061362b565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190612ea0565b6110e8565b6040516104e791906139d1565b60405180910390f35b3480156104fc57600080fd5b506105056111a0565b005b34801561051357600080fd5b5061052e60048036038101906105299190612ea0565b6112dd565b60405161053b9190613692565b60405180910390f35b61054c61138b565b005b34801561055a57600080fd5b50610563611411565b604051610570919061362b565b60405180910390f35b34801561058557600080fd5b5061058e61143b565b60405161059b91906136cf565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613010565b6114cd565b005b3480156105d957600080fd5b506105e261164e565b005b3480156105f057600080fd5b5061060b60048036038101906106069190613090565b6116da565b005b34801561061957600080fd5b50610634600480360381019061062f9190612f8d565b611773565b005b34801561064257600080fd5b5061064b6117d5565b60405161065891906139d1565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190613160565b6117db565b60405161069591906136cf565b60405180910390f35b3480156106aa57600080fd5b506106b3611882565b6040516106c091906139d1565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190612ecd565b611888565b005b3480156106fe57600080fd5b5061071960048036038101906107149190612efa565b611948565b60405161072691906136b4565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190612ea0565b6119dc565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107cb57506107ca82611b88565b5b9050919050565b6060600080546107e190613ccc565b80601f016020809104026020016040519081016040528092919081815260200182805461080d90613ccc565b801561085a5780601f1061082f5761010080835404028352916020019161085a565b820191906000526020600020905b81548152906001019060200180831161083d57829003601f168201915b5050505050905090565b600061086f82611c6a565b6108ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a590613891565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f482611036565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c90613951565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610984611cd6565b73ffffffffffffffffffffffffffffffffffffffff1614806109b357506109b2816109ad611cd6565b611948565b5b6109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e9906137f1565b60405180910390fd5b6109fc8383611cde565b505050565b6000600880549050905090565b610a1f610a19611cd6565b82611d97565b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590613991565b60405180910390fd5b610a69838383611e75565b505050565b600081600e54610a7e9190613b76565b9050919050565b6000610a90836110e8565b8210610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac890613711565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b32611cd6565b73ffffffffffffffffffffffffffffffffffffffff16610b50611411565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906138b1565b60405180910390fd5b6107d7811115610bb557600080fd5b6107d781600d54610bc69190613aef565b1115610bd157600080fd5b60005b81811015610c3557610c0a600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d546120d1565b600d6000815480929190610c1d90613d2f565b91905055508080610c2d90613d2f565b915050610bd4565b5050565b610c5483838360405180602001604052806000815250611773565b505050565b610c61611cd6565b73ffffffffffffffffffffffffffffffffffffffff16610c7f611411565b73ffffffffffffffffffffffffffffffffffffffff1614610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc906138b1565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d23610a01565b8210610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b906139b1565b60405180910390fd5b60088281548110610d7857610d77613e65565b5b90600052602060002001549050919050565b610d92611cd6565b73ffffffffffffffffffffffffffffffffffffffff16610db0611411565b73ffffffffffffffffffffffffffffffffffffffff1614610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd906138b1565b60405180910390fd5b80600f9080519060200190610e1c929190612c9f565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e885750601060009054906101000a900460ff165b610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90613851565b60405180910390fd5b6107d7600d541115610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590613931565b60405180910390fd5b6107d781600d54610f1f9190613aef565b1115610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613971565b60405180910390fd5b600a811115610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b906136f1565b60405180910390fd5b610fad81610a6e565b341015610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690613911565b60405180910390fd5b60005b818110156110315761100683600d5461229f565b600d600081548092919061101990613d2f565b9190505550808061102990613d2f565b915050610ff2565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690613831565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613811565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111a8611cd6565b73ffffffffffffffffffffffffffffffffffffffff166111c6611411565b73ffffffffffffffffffffffffffffffffffffffff161461121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906138b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060006112ea836110e8565b905060008167ffffffffffffffff81111561130857611307613e94565b5b6040519080825280602002602001820160405280156113365781602001602082028036833780820191505090505b50905060005b828110156113805761134e8582610a85565b82828151811061136157611360613e65565b5b602002602001018181525050808061137890613d2f565b91505061133c565b508092505050919050565b611393611cd6565b73ffffffffffffffffffffffffffffffffffffffff166113b1611411565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe906138b1565b60405180910390fd5b61140f6122bd565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461144a90613ccc565b80601f016020809104026020016040519081016040528092919081815260200182805461147690613ccc565b80156114c35780601f10611498576101008083540402835291602001916114c3565b820191906000526020600020905b8154815290600101906020018083116114a657829003601f168201915b5050505050905090565b6114d5611cd6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906137b1565b60405180910390fd5b8060056000611550611cd6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115fd611cd6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161164291906136b4565b60405180910390a35050565b611656611cd6565b73ffffffffffffffffffffffffffffffffffffffff16611674611411565b73ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c1906138b1565b60405180910390fd5b66470de4df820000600e81905550565b6116e2611cd6565b73ffffffffffffffffffffffffffffffffffffffff16611700611411565b73ffffffffffffffffffffffffffffffffffffffff1614611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d906138b1565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b61178461177e611cd6565b83611d97565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613991565b60405180910390fd5b6117cf848484846123c2565b50505050565b600e5481565b60606117e682611c6a565b611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906138f1565b60405180910390fd5b600061182f61241e565b9050600081511161184f576040518060200160405280600081525061187a565b80611859846124b0565b60405160200161186a929190613607565b6040516020818303038152906040525b915050919050565b6107d781565b611890611cd6565b73ffffffffffffffffffffffffffffffffffffffff166118ae611411565b73ffffffffffffffffffffffffffffffffffffffff1614611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb906138b1565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119e4611cd6565b73ffffffffffffffffffffffffffffffffffffffff16611a02611411565b73ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f906138b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90613751565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c5357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c635750611c6282612611565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5183611036565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611da282611c6a565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906137d1565b60405180910390fd5b6000611dec83611036565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e5b57508373ffffffffffffffffffffffffffffffffffffffff16611e4384610864565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e6c5750611e6b8185611948565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e9582611036565b73ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee2906138d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290613791565b60405180910390fd5b611f6683838361267b565b611f71600082611cde565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc19190613bd0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120189190613aef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890613871565b60405180910390fd5b61214a81611c6a565b1561218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218190613771565b60405180910390fd5b6121966000838361267b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e69190613aef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6122b982826040518060200160405280600081525061278f565b5050565b60006103e861014d476122d09190613b76565b6122da9190613b45565b9050600081476122ea9190613bd0565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612354573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156123bd573d6000803e3d6000fd5b505050565b6123cd848484611e75565b6123d9848484846127ea565b612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90613731565b60405180910390fd5b50505050565b6060600f805461242d90613ccc565b80601f016020809104026020016040519081016040528092919081815260200182805461245990613ccc565b80156124a65780601f1061247b576101008083540402835291602001916124a6565b820191906000526020600020905b81548152906001019060200180831161248957829003601f168201915b5050505050905090565b606060008214156124f8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061260c565b600082905060005b6000821461252a57808061251390613d2f565b915050600a826125239190613b45565b9150612500565b60008167ffffffffffffffff81111561254657612545613e94565b5b6040519080825280601f01601f1916602001820160405280156125785781602001600182028036833780820191505090505b5090505b60008514612605576001826125919190613bd0565b9150600a856125a09190613d78565b60306125ac9190613aef565b60f81b8183815181106125c2576125c1613e65565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125fe9190613b45565b945061257c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612686838383612981565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c9576126c481612986565b612708565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127075761270683826129cf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274b5761274681612b3c565b61278a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612789576127888282612c0d565b5b5b505050565b61279983836120d1565b6127a660008484846127ea565b6127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90613731565b60405180910390fd5b505050565b600061280b8473ffffffffffffffffffffffffffffffffffffffff16612c8c565b15612974578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612834611cd6565b8786866040518563ffffffff1660e01b81526004016128569493929190613646565b602060405180830381600087803b15801561287057600080fd5b505af19250505080156128a157506040513d601f19601f8201168201806040525081019061289e91906130ea565b60015b612924573d80600081146128d1576040519150601f19603f3d011682016040523d82523d6000602084013e6128d6565b606091505b5060008151141561291c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291390613731565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612979565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129dc846110e8565b6129e69190613bd0565b9050600060076000848152602001908152602001600020549050818114612acb576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b509190613bd0565b9050600060096000848152602001908152602001600020549050600060088381548110612b8057612b7f613e65565b5b906000526020600020015490508060088381548110612ba257612ba1613e65565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bf157612bf0613e36565b5b6001900381819060005260206000200160009055905550505050565b6000612c18836110e8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612cab90613ccc565b90600052602060002090601f016020900481019282612ccd5760008555612d14565b82601f10612ce657805160ff1916838001178555612d14565b82800160010185558215612d14579182015b82811115612d13578251825591602001919060010190612cf8565b5b509050612d219190612d25565b5090565b5b80821115612d3e576000816000905550600101612d26565b5090565b6000612d55612d5084613a11565b6139ec565b905082815260208101848484011115612d7157612d70613ec8565b5b612d7c848285613c8a565b509392505050565b6000612d97612d9284613a42565b6139ec565b905082815260208101848484011115612db357612db2613ec8565b5b612dbe848285613c8a565b509392505050565b600081359050612dd5816144f7565b92915050565b600081359050612dea8161450e565b92915050565b600081359050612dff81614525565b92915050565b600081359050612e148161453c565b92915050565b600081519050612e298161453c565b92915050565b600082601f830112612e4457612e43613ec3565b5b8135612e54848260208601612d42565b91505092915050565b600082601f830112612e7257612e71613ec3565b5b8135612e82848260208601612d84565b91505092915050565b600081359050612e9a81614553565b92915050565b600060208284031215612eb657612eb5613ed2565b5b6000612ec484828501612dc6565b91505092915050565b600060208284031215612ee357612ee2613ed2565b5b6000612ef184828501612ddb565b91505092915050565b60008060408385031215612f1157612f10613ed2565b5b6000612f1f85828601612dc6565b9250506020612f3085828601612dc6565b9150509250929050565b600080600060608486031215612f5357612f52613ed2565b5b6000612f6186828701612dc6565b9350506020612f7286828701612dc6565b9250506040612f8386828701612e8b565b9150509250925092565b60008060008060808587031215612fa757612fa6613ed2565b5b6000612fb587828801612dc6565b9450506020612fc687828801612dc6565b9350506040612fd787828801612e8b565b925050606085013567ffffffffffffffff811115612ff857612ff7613ecd565b5b61300487828801612e2f565b91505092959194509250565b6000806040838503121561302757613026613ed2565b5b600061303585828601612dc6565b925050602061304685828601612df0565b9150509250929050565b6000806040838503121561306757613066613ed2565b5b600061307585828601612dc6565b925050602061308685828601612e8b565b9150509250929050565b6000602082840312156130a6576130a5613ed2565b5b60006130b484828501612df0565b91505092915050565b6000602082840312156130d3576130d2613ed2565b5b60006130e184828501612e05565b91505092915050565b600060208284031215613100576130ff613ed2565b5b600061310e84828501612e1a565b91505092915050565b60006020828403121561312d5761312c613ed2565b5b600082013567ffffffffffffffff81111561314b5761314a613ecd565b5b61315784828501612e5d565b91505092915050565b60006020828403121561317657613175613ed2565b5b600061318484828501612e8b565b91505092915050565b600061319983836135e9565b60208301905092915050565b6131ae81613c04565b82525050565b60006131bf82613a83565b6131c98185613ab1565b93506131d483613a73565b8060005b838110156132055781516131ec888261318d565b97506131f783613aa4565b9250506001810190506131d8565b5085935050505092915050565b61321b81613c28565b82525050565b600061322c82613a8e565b6132368185613ac2565b9350613246818560208601613c99565b61324f81613ed7565b840191505092915050565b600061326582613a99565b61326f8185613ad3565b935061327f818560208601613c99565b61328881613ed7565b840191505092915050565b600061329e82613a99565b6132a88185613ae4565b93506132b8818560208601613c99565b80840191505092915050565b60006132d1602783613ad3565b91506132dc82613ee8565b604082019050919050565b60006132f4602b83613ad3565b91506132ff82613f37565b604082019050919050565b6000613317603283613ad3565b915061332282613f86565b604082019050919050565b600061333a602683613ad3565b915061334582613fd5565b604082019050919050565b600061335d601c83613ad3565b915061336882614024565b602082019050919050565b6000613380602483613ad3565b915061338b8261404d565b604082019050919050565b60006133a3601983613ad3565b91506133ae8261409c565b602082019050919050565b60006133c6602c83613ad3565b91506133d1826140c5565b604082019050919050565b60006133e9603883613ad3565b91506133f482614114565b604082019050919050565b600061340c602a83613ad3565b915061341782614163565b604082019050919050565b600061342f602983613ad3565b915061343a826141b2565b604082019050919050565b6000613452601383613ad3565b915061345d82614201565b602082019050919050565b6000613475602083613ad3565b91506134808261422a565b602082019050919050565b6000613498602c83613ad3565b91506134a382614253565b604082019050919050565b60006134bb602083613ad3565b91506134c6826142a2565b602082019050919050565b60006134de602983613ad3565b91506134e9826142cb565b604082019050919050565b6000613501602f83613ad3565b915061350c8261431a565b604082019050919050565b6000613524601183613ad3565b915061352f82614369565b602082019050919050565b6000613547600a83613ad3565b915061355282614392565b602082019050919050565b600061356a602183613ad3565b9150613575826143bb565b604082019050919050565b600061358d603083613ad3565b91506135988261440a565b604082019050919050565b60006135b0603183613ad3565b91506135bb82614459565b604082019050919050565b60006135d3602c83613ad3565b91506135de826144a8565b604082019050919050565b6135f281613c80565b82525050565b61360181613c80565b82525050565b60006136138285613293565b915061361f8284613293565b91508190509392505050565b600060208201905061364060008301846131a5565b92915050565b600060808201905061365b60008301876131a5565b61366860208301866131a5565b61367560408301856135f8565b81810360608301526136878184613221565b905095945050505050565b600060208201905081810360008301526136ac81846131b4565b905092915050565b60006020820190506136c96000830184613212565b92915050565b600060208201905081810360008301526136e9818461325a565b905092915050565b6000602082019050818103600083015261370a816132c4565b9050919050565b6000602082019050818103600083015261372a816132e7565b9050919050565b6000602082019050818103600083015261374a8161330a565b9050919050565b6000602082019050818103600083015261376a8161332d565b9050919050565b6000602082019050818103600083015261378a81613350565b9050919050565b600060208201905081810360008301526137aa81613373565b9050919050565b600060208201905081810360008301526137ca81613396565b9050919050565b600060208201905081810360008301526137ea816133b9565b9050919050565b6000602082019050818103600083015261380a816133dc565b9050919050565b6000602082019050818103600083015261382a816133ff565b9050919050565b6000602082019050818103600083015261384a81613422565b9050919050565b6000602082019050818103600083015261386a81613445565b9050919050565b6000602082019050818103600083015261388a81613468565b9050919050565b600060208201905081810360008301526138aa8161348b565b9050919050565b600060208201905081810360008301526138ca816134ae565b9050919050565b600060208201905081810360008301526138ea816134d1565b9050919050565b6000602082019050818103600083015261390a816134f4565b9050919050565b6000602082019050818103600083015261392a81613517565b9050919050565b6000602082019050818103600083015261394a8161353a565b9050919050565b6000602082019050818103600083015261396a8161355d565b9050919050565b6000602082019050818103600083015261398a81613580565b9050919050565b600060208201905081810360008301526139aa816135a3565b9050919050565b600060208201905081810360008301526139ca816135c6565b9050919050565b60006020820190506139e660008301846135f8565b92915050565b60006139f6613a07565b9050613a028282613cfe565b919050565b6000604051905090565b600067ffffffffffffffff821115613a2c57613a2b613e94565b5b613a3582613ed7565b9050602081019050919050565b600067ffffffffffffffff821115613a5d57613a5c613e94565b5b613a6682613ed7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613afa82613c80565b9150613b0583613c80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3a57613b39613da9565b5b828201905092915050565b6000613b5082613c80565b9150613b5b83613c80565b925082613b6b57613b6a613dd8565b5b828204905092915050565b6000613b8182613c80565b9150613b8c83613c80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bc557613bc4613da9565b5b828202905092915050565b6000613bdb82613c80565b9150613be683613c80565b925082821015613bf957613bf8613da9565b5b828203905092915050565b6000613c0f82613c60565b9050919050565b6000613c2182613c60565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cb7578082015181840152602081019050613c9c565b83811115613cc6576000848401525b50505050565b60006002820490506001821680613ce457607f821691505b60208210811415613cf857613cf7613e07565b5b50919050565b613d0782613ed7565b810181811067ffffffffffffffff82111715613d2657613d25613e94565b5b80604052505050565b6000613d3a82613c80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d6d57613d6c613da9565b5b600182019050919050565b6000613d8382613c80565b9150613d8e83613c80565b925082613d9e57613d9d613dd8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365656473206d6178207472616e73616374696f6e206d696e7420636f7560008201527f6e74202831302900000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20776f756c642062652061626f7665206d6178206d60008201527f696e7420636f756e742028323030372900000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61450081613c04565b811461450b57600080fd5b50565b61451781613c16565b811461452257600080fd5b50565b61452e81613c28565b811461453957600080fd5b50565b61454581613c34565b811461455057600080fd5b50565b61455c81613c80565b811461456757600080fd5b5056fea26469706673582212202d4c5e8d21fab834a27688335d456e23fd41710c714b48890fa32ca9c8cd61e964736f6c63430008060033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40193:2269:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34066:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20626:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22093:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21623:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34719:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22983:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41660:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34387:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41374:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23359:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16249:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34909:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41907:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40780:580;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20320:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20050:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15192:148;;;;;;;;;;;;;:::i;:::-;;42017:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42369:90;;;:::i;:::-;;14542:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20795:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22386:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40557:89;;;;;;;;;;;;;:::i;:::-;;40442:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23581:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40327:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20970:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40247:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16359:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22752:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15993:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34066:237;34168:4;34207:35;34192:50;;;:11;:50;;;;:103;;;;34259:36;34283:11;34259:23;:36::i;:::-;34192:103;34185:110;;34066:237;;;:::o;20626:100::-;20680:13;20713:5;20706:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20626:100;:::o;22093:221::-;22169:7;22197:16;22205:7;22197;:16::i;:::-;22189:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22282:15;:24;22298:7;22282:24;;;;;;;;;;;;;;;;;;;;;22275:31;;22093:221;;;:::o;21623:404::-;21704:13;21720:23;21735:7;21720:14;:23::i;:::-;21704:39;;21768:5;21762:11;;:2;:11;;;;21754:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21848:5;21832:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;21857:44;21881:5;21888:12;:10;:12::i;:::-;21857:23;:44::i;:::-;21832:69;21824:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;21998:21;22007:2;22011:7;21998:8;:21::i;:::-;21693:334;21623:404;;:::o;34719:113::-;34780:7;34807:10;:17;;;;34800:24;;34719:113;:::o;22983:305::-;23144:41;23163:12;:10;:12::i;:::-;23177:7;23144:18;:41::i;:::-;23136:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23252:28;23262:4;23268:2;23272:7;23252:9;:28::i;:::-;22983:305;;;:::o;41660:113::-;41717:7;41758:6;41746:9;;:18;;;;:::i;:::-;41739:25;;41660:113;;;:::o;34387:256::-;34484:7;34520:23;34537:5;34520:16;:23::i;:::-;34512:5;:31;34504:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34609:12;:19;34622:5;34609:19;;;;;;;;;;;;;;;:26;34629:5;34609:26;;;;;;;;;;;;34602:33;;34387:256;;;;:::o;41374:278::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40283:4:::1;41444:6;:22;;41436:31;;;::::0;::::1;;40283:4;41498:6;41486:9;;:18;;;;:::i;:::-;:34;;41478:43;;;::::0;::::1;;41539:6;41534:111;41555:6;41551:1;:10;41534:111;;;41583:24;41589:6;;;;;;;;;;;41597:9;;41583:5;:24::i;:::-;41622:9;;:11;;;;;;;;;:::i;:::-;;;;;;41563:3;;;;;:::i;:::-;;;;41534:111;;;;41374:278:::0;:::o;23359:151::-;23463:39;23480:4;23486:2;23490:7;23463:39;;;;;;;;;;;;:16;:39::i;:::-;23359:151;;;:::o;16249:104::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16340:5:::1;16330:7;;:15;;;;;;;;;;;;;;;;;;16249:104:::0;:::o;34909:233::-;34984:7;35020:30;:28;:30::i;:::-;35012:5;:38;35004:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35117:10;35128:5;35117:17;;;;;;;;:::i;:::-;;;;;;;;;;35110:24;;34909:233;;;:::o;41907:102::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41994:7:::1;41978:13;:23;;;;;;;;;;;;:::i;:::-;;41907:102:::0;:::o;40780:580::-;40872:6;;;;;;;;;;;40858:20;;:10;:20;;;:34;;;;40882:10;;;;;;;;;;;40858:34;40850:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40283:4;40935:9;;:25;;40927:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40283:4;41006:6;40994:9;;:18;;;;:::i;:::-;:34;;40986:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41110:2;41100:6;:12;;41092:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41188:13;41194:6;41188:5;:13::i;:::-;41175:9;:26;;41167:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41246:6;41242:111;41262:6;41258:1;:10;41242:111;;;41289:25;41299:3;41304:9;;41289;:25::i;:::-;41330:9;;:11;;;;;;;;;:::i;:::-;;;;;;41270:3;;;;;:::i;:::-;;;;41242:111;;;;40780:580;;:::o;20320:239::-;20392:7;20412:13;20428:7;:16;20436:7;20428:16;;;;;;;;;;;;;;;;;;;;;20412:32;;20480:1;20463:19;;:5;:19;;;;20455:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20546:5;20539:12;;;20320:239;;;:::o;20050:208::-;20122:7;20167:1;20150:19;;:5;:19;;;;20142:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20234:9;:16;20244:5;20234:16;;;;;;;;;;;;;;;;20227:23;;20050:208;;;:::o;15192:148::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15299:1:::1;15262:40;;15283:6;;;;;;;;;;;15262:40;;;;;;;;;;;;15330:1;15313:6;;:19;;;;;;;;;;;;;;;;;;15192:148::o:0;42017:344::-;42078:16;42107:15;42125:17;42135:6;42125:9;:17::i;:::-;42107:35;;42155:25;42197:10;42183:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42155:53;;42223:6;42219:107;42239:10;42235:1;:14;42219:107;;;42284:30;42304:6;42312:1;42284:19;:30::i;:::-;42270:8;42279:1;42270:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;42251:3;;;;;:::i;:::-;;;;42219:107;;;;42345:8;42338:15;;;;42017:344;;;:::o;42369:90::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42428:14:::1;:12;:14::i;:::-;42369:90::o:0;14542:87::-;14588:7;14615:6;;;;;;;;;;;14608:13;;14542:87;:::o;20795:104::-;20851:13;20884:7;20877:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20795:104;:::o;22386:295::-;22501:12;:10;:12::i;:::-;22489:24;;:8;:24;;;;22481:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22601:8;22556:18;:32;22575:12;:10;:12::i;:::-;22556:32;;;;;;;;;;;;;;;:42;22589:8;22556:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22654:8;22625:48;;22640:12;:10;:12::i;:::-;22625:48;;;22664:8;22625:48;;;;;;:::i;:::-;;;;;;;;22386:295;;:::o;40557:89::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40620:7:::1;40608:9;:19;;;;40557:89::o:0;40442:103::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40526:11:::1;40513:10;;:24;;;;;;;;;;;;;;;;;;40442:103:::0;:::o;23581:285::-;23713:41;23732:12;:10;:12::i;:::-;23746:7;23713:18;:41::i;:::-;23705:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23819:39;23833:4;23839:2;23843:7;23852:5;23819:13;:39::i;:::-;23581:285;;;;:::o;40327:32::-;;;;:::o;20970:360::-;21043:13;21077:16;21085:7;21077;:16::i;:::-;21069:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21158:21;21182:10;:8;:10::i;:::-;21158:34;;21234:1;21216:7;21210:21;:25;:112;;;;;;;;;;;;;;;;;21275:7;21284:18;:7;:16;:18::i;:::-;21258:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21210:112;21203:119;;;20970:360;;;:::o;40247:40::-;40283:4;40247:40;:::o;16359:98::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16444:5:::1;16437:4;;:12;;;;;;;;;;;;;;;;;;16359:98:::0;:::o;22752:164::-;22849:4;22873:18;:25;22892:5;22873:25;;;;;;;;;;;;;;;:35;22899:8;22873:35;;;;;;;;;;;;;;;;;;;;;;;;;22866:42;;22752:164;;;;:::o;15993:244::-;14773:12;:10;:12::i;:::-;14762:23;;:7;:5;:7::i;:::-;:23;;;14754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16102:1:::1;16082:22;;:8;:22;;;;16074:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16192:8;16163:38;;16184:6;;;;;;;;;;;16163:38;;;;;;;;;;;;16221:8;16212:6;;:17;;;;;;;;;;;;;;;;;;15993:244:::0;:::o;19694:292::-;19796:4;19835:25;19820:40;;;:11;:40;;;;:105;;;;19892:33;19877:48;;;:11;:48;;;;19820:105;:158;;;;19942:36;19966:11;19942:23;:36::i;:::-;19820:158;19813:165;;19694:292;;;:::o;25333:127::-;25398:4;25450:1;25422:30;;:7;:16;25430:7;25422:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25415:37;;25333:127;;;:::o;5306:98::-;5359:7;5386:10;5379:17;;5306:98;:::o;29217:174::-;29319:2;29292:15;:24;29308:7;29292:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29375:7;29371:2;29337:46;;29346:23;29361:7;29346:14;:23::i;:::-;29337:46;;;;;;;;;;;;29217:174;;:::o;25627:355::-;25720:4;25745:16;25753:7;25745;:16::i;:::-;25737:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25821:13;25837:23;25852:7;25837:14;:23::i;:::-;25821:39;;25890:5;25879:16;;:7;:16;;;:51;;;;25923:7;25899:31;;:20;25911:7;25899:11;:20::i;:::-;:31;;;25879:51;:94;;;;25934:39;25958:5;25965:7;25934:23;:39::i;:::-;25879:94;25871:103;;;25627:355;;;;:::o;28555:544::-;28680:4;28653:31;;:23;28668:7;28653:14;:23::i;:::-;:31;;;28645:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28763:1;28749:16;;:2;:16;;;;28741:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28819:39;28840:4;28846:2;28850:7;28819:20;:39::i;:::-;28923:29;28940:1;28944:7;28923:8;:29::i;:::-;28984:1;28965:9;:15;28975:4;28965:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29013:1;28996:9;:13;29006:2;28996:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29044:2;29025:7;:16;29033:7;29025:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29083:7;29079:2;29064:27;;29073:4;29064:27;;;;;;;;;;;;28555:544;;;:::o;27247:382::-;27341:1;27327:16;;:2;:16;;;;27319:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27400:16;27408:7;27400;:16::i;:::-;27399:17;27391:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27462:45;27491:1;27495:2;27499:7;27462:20;:45::i;:::-;27537:1;27520:9;:13;27530:2;27520:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27568:2;27549:7;:16;27557:7;27549:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27613:7;27609:2;27588:33;;27605:1;27588:33;;;;;;;;;;;;27247:382;;:::o;26324:110::-;26400:26;26410:2;26414:7;26400:26;;;;;;;;;;;;:9;:26::i;:::-;26324:110;;:::o;15540:288::-;15598:19;15646:4;15642:3;15620:21;:25;;;;:::i;:::-;:30;;;;:::i;:::-;15598:52;;15660:22;15707:11;15685:21;:33;;;;:::i;:::-;15660:58;;15739:4;;;;;;;;;;;15731:22;;:35;15754:11;15731:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15785:7;;;;;;;;;;;15777:25;;:41;15803:14;15777:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15582:246;;15540:288::o;24748:272::-;24862:28;24872:4;24878:2;24882:7;24862:9;:28::i;:::-;24909:48;24932:4;24938:2;24942:7;24951:5;24909:22;:48::i;:::-;24901:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24748:272;;;;:::o;41781:114::-;41841:13;41874;41867:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41781:114;:::o;16698:723::-;16754:13;16984:1;16975:5;:10;16971:53;;;17002:10;;;;;;;;;;;;;;;;;;;;;16971:53;17034:12;17049:5;17034:20;;17065:14;17090:78;17105:1;17097:4;:9;17090:78;;17123:8;;;;;:::i;:::-;;;;17154:2;17146:10;;;;;:::i;:::-;;;17090:78;;;17178:19;17210:6;17200:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17178:39;;17228:154;17244:1;17235:5;:10;17228:154;;17272:1;17262:11;;;;;:::i;:::-;;;17339:2;17331:5;:10;;;;:::i;:::-;17318:2;:24;;;;:::i;:::-;17305:39;;17288:6;17295;17288:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17368:2;17359:11;;;;;:::i;:::-;;;17228:154;;;17406:6;17392:21;;;;;16698:723;;;;:::o;6356:157::-;6441:4;6480:25;6465:40;;;:11;:40;;;;6458:47;;6356:157;;;:::o;35755:555::-;35865:45;35892:4;35898:2;35902:7;35865:26;:45::i;:::-;35943:1;35927:18;;:4;:18;;;35923:187;;;35962:40;35994:7;35962:31;:40::i;:::-;35923:187;;;36032:2;36024:10;;:4;:10;;;36020:90;;36051:47;36084:4;36090:7;36051:32;:47::i;:::-;36020:90;35923:187;36138:1;36124:16;;:2;:16;;;36120:183;;;36157:45;36194:7;36157:36;:45::i;:::-;36120:183;;;36230:4;36224:10;;:2;:10;;;36220:83;;36251:40;36279:2;36283:7;36251:27;:40::i;:::-;36220:83;36120:183;35755:555;;;:::o;26661:250::-;26757:18;26763:2;26767:7;26757:5;:18::i;:::-;26794:54;26825:1;26829:2;26833:7;26842:5;26794:22;:54::i;:::-;26786:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26661:250;;;:::o;29956:843::-;30077:4;30103:15;:2;:13;;;:15::i;:::-;30099:693;;;30155:2;30139:36;;;30176:12;:10;:12::i;:::-;30190:4;30196:7;30205:5;30139:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30135:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30402:1;30385:6;:13;:18;30381:341;;;30428:60;;;;;;;;;;:::i;:::-;;;;;;;;30381:341;30672:6;30666:13;30657:6;30653:2;30649:15;30642:38;30135:602;30272:45;;;30262:55;;;:6;:55;;;;30255:62;;;;;30099:693;30776:4;30769:11;;29956:843;;;;;;;:::o;31412:93::-;;;;:::o;37033:164::-;37137:10;:17;;;;37110:15;:24;37126:7;37110:24;;;;;;;;;;;:44;;;;37165:10;37181:7;37165:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37033:164;:::o;37824:988::-;38090:22;38140:1;38115:22;38132:4;38115:16;:22::i;:::-;:26;;;;:::i;:::-;38090:51;;38152:18;38173:17;:26;38191:7;38173:26;;;;;;;;;;;;38152:47;;38320:14;38306:10;:28;38302:328;;38351:19;38373:12;:18;38386:4;38373:18;;;;;;;;;;;;;;;:34;38392:14;38373:34;;;;;;;;;;;;38351:56;;38457:11;38424:12;:18;38437:4;38424:18;;;;;;;;;;;;;;;:30;38443:10;38424:30;;;;;;;;;;;:44;;;;38574:10;38541:17;:30;38559:11;38541:30;;;;;;;;;;;:43;;;;38336:294;38302:328;38726:17;:26;38744:7;38726:26;;;;;;;;;;;38719:33;;;38770:12;:18;38783:4;38770:18;;;;;;;;;;;;;;;:34;38789:14;38770:34;;;;;;;;;;;38763:41;;;37905:907;;37824:988;;:::o;39107:1079::-;39360:22;39405:1;39385:10;:17;;;;:21;;;;:::i;:::-;39360:46;;39417:18;39438:15;:24;39454:7;39438:24;;;;;;;;;;;;39417:45;;39789:19;39811:10;39822:14;39811:26;;;;;;;;:::i;:::-;;;;;;;;;;39789:48;;39875:11;39850:10;39861;39850:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39986:10;39955:15;:28;39971:11;39955:28;;;;;;;;;;;:41;;;;40127:15;:24;40143:7;40127:24;;;;;;;;;;;40120:31;;;40162:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39178:1008;;;39107:1079;:::o;36611:221::-;36696:14;36713:20;36730:2;36713:16;:20::i;:::-;36696:37;;36771:7;36744:12;:16;36757:2;36744:16;;;;;;;;;;;;;;;:24;36761:6;36744:24;;;;;;;;;;;:34;;;;36818:6;36789:17;:26;36807:7;36789:26;;;;;;;;;;;:35;;;;36685:147;36611:221;;:::o;142:239::-;202:4;227:12;338:7;326:20;318:28;;372:1;365:4;:8;358:15;;;142:239;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:155::-;1040:5;1078:6;1065:20;1056:29;;1094:41;1129:5;1094:41;:::i;:::-;1046:95;;;;:::o;1147:133::-;1190:5;1228:6;1215:20;1206:29;;1244:30;1268:5;1244:30;:::i;:::-;1196:84;;;;:::o;1286:137::-;1331:5;1369:6;1356:20;1347:29;;1385:32;1411:5;1385:32;:::i;:::-;1337:86;;;;:::o;1429:141::-;1485:5;1516:6;1510:13;1501:22;;1532:32;1558:5;1532:32;:::i;:::-;1491:79;;;;:::o;1589:338::-;1644:5;1693:3;1686:4;1678:6;1674:17;1670:27;1660:2;;1701:79;;:::i;:::-;1660:2;1818:6;1805:20;1843:78;1917:3;1909:6;1902:4;1894:6;1890:17;1843:78;:::i;:::-;1834:87;;1650:277;;;;;:::o;1947:340::-;2003:5;2052:3;2045:4;2037:6;2033:17;2029:27;2019:2;;2060:79;;:::i;:::-;2019:2;2177:6;2164:20;2202:79;2277:3;2269:6;2262:4;2254:6;2250:17;2202:79;:::i;:::-;2193:88;;2009:278;;;;;:::o;2293:139::-;2339:5;2377:6;2364:20;2355:29;;2393:33;2420:5;2393:33;:::i;:::-;2345:87;;;;:::o;2438:329::-;2497:6;2546:2;2534:9;2525:7;2521:23;2517:32;2514:2;;;2552:79;;:::i;:::-;2514:2;2672:1;2697:53;2742:7;2733:6;2722:9;2718:22;2697:53;:::i;:::-;2687:63;;2643:117;2504:263;;;;:::o;2773:345::-;2840:6;2889:2;2877:9;2868:7;2864:23;2860:32;2857:2;;;2895:79;;:::i;:::-;2857:2;3015:1;3040:61;3093:7;3084:6;3073:9;3069:22;3040:61;:::i;:::-;3030:71;;2986:125;2847:271;;;;:::o;3124:474::-;3192:6;3200;3249:2;3237:9;3228:7;3224:23;3220:32;3217:2;;;3255:79;;:::i;:::-;3217:2;3375:1;3400:53;3445:7;3436:6;3425:9;3421:22;3400:53;:::i;:::-;3390:63;;3346:117;3502:2;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3473:118;3207:391;;;;;:::o;3604:619::-;3681:6;3689;3697;3746:2;3734:9;3725:7;3721:23;3717:32;3714:2;;;3752:79;;:::i;:::-;3714:2;3872:1;3897:53;3942:7;3933:6;3922:9;3918:22;3897:53;:::i;:::-;3887:63;;3843:117;3999:2;4025:53;4070:7;4061:6;4050:9;4046:22;4025:53;:::i;:::-;4015:63;;3970:118;4127:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;:::i;:::-;4143:63;;4098:118;3704:519;;;;;:::o;4229:943::-;4324:6;4332;4340;4348;4397:3;4385:9;4376:7;4372:23;4368:33;4365:2;;;4404:79;;:::i;:::-;4365:2;4524:1;4549:53;4594:7;4585:6;4574:9;4570:22;4549:53;:::i;:::-;4539:63;;4495:117;4651:2;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4622:118;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4935:2;4924:9;4920:18;4907:32;4966:18;4958:6;4955:30;4952:2;;;4988:79;;:::i;:::-;4952:2;5093:62;5147:7;5138:6;5127:9;5123:22;5093:62;:::i;:::-;5083:72;;4878:287;4355:817;;;;;;;:::o;5178:468::-;5243:6;5251;5300:2;5288:9;5279:7;5275:23;5271:32;5268:2;;;5306:79;;:::i;:::-;5268:2;5426:1;5451:53;5496:7;5487:6;5476:9;5472:22;5451:53;:::i;:::-;5441:63;;5397:117;5553:2;5579:50;5621:7;5612:6;5601:9;5597:22;5579:50;:::i;:::-;5569:60;;5524:115;5258:388;;;;;:::o;5652:474::-;5720:6;5728;5777:2;5765:9;5756:7;5752:23;5748:32;5745:2;;;5783:79;;:::i;:::-;5745:2;5903:1;5928:53;5973:7;5964:6;5953:9;5949:22;5928:53;:::i;:::-;5918:63;;5874:117;6030:2;6056:53;6101:7;6092:6;6081:9;6077:22;6056:53;:::i;:::-;6046:63;;6001:118;5735:391;;;;;:::o;6132:323::-;6188:6;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6243:79;;:::i;:::-;6205:2;6363:1;6388:50;6430:7;6421:6;6410:9;6406:22;6388:50;:::i;:::-;6378:60;;6334:114;6195:260;;;;:::o;6461:327::-;6519:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:2;;;6574:79;;:::i;:::-;6536:2;6694:1;6719:52;6763:7;6754:6;6743:9;6739:22;6719:52;:::i;:::-;6709:62;;6665:116;6526:262;;;;:::o;6794:349::-;6863:6;6912:2;6900:9;6891:7;6887:23;6883:32;6880:2;;;6918:79;;:::i;:::-;6880:2;7038:1;7063:63;7118:7;7109:6;7098:9;7094:22;7063:63;:::i;:::-;7053:73;;7009:127;6870:273;;;;:::o;7149:509::-;7218:6;7267:2;7255:9;7246:7;7242:23;7238:32;7235:2;;;7273:79;;:::i;:::-;7235:2;7421:1;7410:9;7406:17;7393:31;7451:18;7443:6;7440:30;7437:2;;;7473:79;;:::i;:::-;7437:2;7578:63;7633:7;7624:6;7613:9;7609:22;7578:63;:::i;:::-;7568:73;;7364:287;7225:433;;;;:::o;7664:329::-;7723:6;7772:2;7760:9;7751:7;7747:23;7743:32;7740:2;;;7778:79;;:::i;:::-;7740:2;7898:1;7923:53;7968:7;7959:6;7948:9;7944:22;7923:53;:::i;:::-;7913:63;;7869:117;7730:263;;;;:::o;7999:179::-;8068:10;8089:46;8131:3;8123:6;8089:46;:::i;:::-;8167:4;8162:3;8158:14;8144:28;;8079:99;;;;:::o;8184:118::-;8271:24;8289:5;8271:24;:::i;:::-;8266:3;8259:37;8249:53;;:::o;8338:732::-;8457:3;8486:54;8534:5;8486:54;:::i;:::-;8556:86;8635:6;8630:3;8556:86;:::i;:::-;8549:93;;8666:56;8716:5;8666:56;:::i;:::-;8745:7;8776:1;8761:284;8786:6;8783:1;8780:13;8761:284;;;8862:6;8856:13;8889:63;8948:3;8933:13;8889:63;:::i;:::-;8882:70;;8975:60;9028:6;8975:60;:::i;:::-;8965:70;;8821:224;8808:1;8805;8801:9;8796:14;;8761:284;;;8765:14;9061:3;9054:10;;8462:608;;;;;;;:::o;9076:109::-;9157:21;9172:5;9157:21;:::i;:::-;9152:3;9145:34;9135:50;;:::o;9191:360::-;9277:3;9305:38;9337:5;9305:38;:::i;:::-;9359:70;9422:6;9417:3;9359:70;:::i;:::-;9352:77;;9438:52;9483:6;9478:3;9471:4;9464:5;9460:16;9438:52;:::i;:::-;9515:29;9537:6;9515:29;:::i;:::-;9510:3;9506:39;9499:46;;9281:270;;;;;:::o;9557:364::-;9645:3;9673:39;9706:5;9673:39;:::i;:::-;9728:71;9792:6;9787:3;9728:71;:::i;:::-;9721:78;;9808:52;9853:6;9848:3;9841:4;9834:5;9830:16;9808:52;:::i;:::-;9885:29;9907:6;9885:29;:::i;:::-;9880:3;9876:39;9869:46;;9649:272;;;;;:::o;9927:377::-;10033:3;10061:39;10094:5;10061:39;:::i;:::-;10116:89;10198:6;10193:3;10116:89;:::i;:::-;10109:96;;10214:52;10259:6;10254:3;10247:4;10240:5;10236:16;10214:52;:::i;:::-;10291:6;10286:3;10282:16;10275:23;;10037:267;;;;;:::o;10310:366::-;10452:3;10473:67;10537:2;10532:3;10473:67;:::i;:::-;10466:74;;10549:93;10638:3;10549:93;:::i;:::-;10667:2;10662:3;10658:12;10651:19;;10456:220;;;:::o;10682:366::-;10824:3;10845:67;10909:2;10904:3;10845:67;:::i;:::-;10838:74;;10921:93;11010:3;10921:93;:::i;:::-;11039:2;11034:3;11030:12;11023:19;;10828:220;;;:::o;11054:366::-;11196:3;11217:67;11281:2;11276:3;11217:67;:::i;:::-;11210:74;;11293:93;11382:3;11293:93;:::i;:::-;11411:2;11406:3;11402:12;11395:19;;11200:220;;;:::o;11426:366::-;11568:3;11589:67;11653:2;11648:3;11589:67;:::i;:::-;11582:74;;11665:93;11754:3;11665:93;:::i;:::-;11783:2;11778:3;11774:12;11767:19;;11572:220;;;:::o;11798:366::-;11940:3;11961:67;12025:2;12020:3;11961:67;:::i;:::-;11954:74;;12037:93;12126:3;12037:93;:::i;:::-;12155:2;12150:3;12146:12;12139:19;;11944:220;;;:::o;12170:366::-;12312:3;12333:67;12397:2;12392:3;12333:67;:::i;:::-;12326:74;;12409:93;12498:3;12409:93;:::i;:::-;12527:2;12522:3;12518:12;12511:19;;12316:220;;;:::o;12542:366::-;12684:3;12705:67;12769:2;12764:3;12705:67;:::i;:::-;12698:74;;12781:93;12870:3;12781:93;:::i;:::-;12899:2;12894:3;12890:12;12883:19;;12688:220;;;:::o;12914:366::-;13056:3;13077:67;13141:2;13136:3;13077:67;:::i;:::-;13070:74;;13153:93;13242:3;13153:93;:::i;:::-;13271:2;13266:3;13262:12;13255:19;;13060:220;;;:::o;13286:366::-;13428:3;13449:67;13513:2;13508:3;13449:67;:::i;:::-;13442:74;;13525:93;13614:3;13525:93;:::i;:::-;13643:2;13638:3;13634:12;13627:19;;13432:220;;;:::o;13658:366::-;13800:3;13821:67;13885:2;13880:3;13821:67;:::i;:::-;13814:74;;13897:93;13986:3;13897:93;:::i;:::-;14015:2;14010:3;14006:12;13999:19;;13804:220;;;:::o;14030:366::-;14172:3;14193:67;14257:2;14252:3;14193:67;:::i;:::-;14186:74;;14269:93;14358:3;14269:93;:::i;:::-;14387:2;14382:3;14378:12;14371:19;;14176:220;;;:::o;14402:366::-;14544:3;14565:67;14629:2;14624:3;14565:67;:::i;:::-;14558:74;;14641:93;14730:3;14641:93;:::i;:::-;14759:2;14754:3;14750:12;14743:19;;14548:220;;;:::o;14774:366::-;14916:3;14937:67;15001:2;14996:3;14937:67;:::i;:::-;14930:74;;15013:93;15102:3;15013:93;:::i;:::-;15131:2;15126:3;15122:12;15115:19;;14920:220;;;:::o;15146:366::-;15288:3;15309:67;15373:2;15368:3;15309:67;:::i;:::-;15302:74;;15385:93;15474:3;15385:93;:::i;:::-;15503:2;15498:3;15494:12;15487:19;;15292:220;;;:::o;15518:366::-;15660:3;15681:67;15745:2;15740:3;15681:67;:::i;:::-;15674:74;;15757:93;15846:3;15757:93;:::i;:::-;15875:2;15870:3;15866:12;15859:19;;15664:220;;;:::o;15890:366::-;16032:3;16053:67;16117:2;16112:3;16053:67;:::i;:::-;16046:74;;16129:93;16218:3;16129:93;:::i;:::-;16247:2;16242:3;16238:12;16231:19;;16036:220;;;:::o;16262:366::-;16404:3;16425:67;16489:2;16484:3;16425:67;:::i;:::-;16418:74;;16501:93;16590:3;16501:93;:::i;:::-;16619:2;16614:3;16610:12;16603:19;;16408:220;;;:::o;16634:366::-;16776:3;16797:67;16861:2;16856:3;16797:67;:::i;:::-;16790:74;;16873:93;16962:3;16873:93;:::i;:::-;16991:2;16986:3;16982:12;16975:19;;16780:220;;;:::o;17006:366::-;17148:3;17169:67;17233:2;17228:3;17169:67;:::i;:::-;17162:74;;17245:93;17334:3;17245:93;:::i;:::-;17363:2;17358:3;17354:12;17347:19;;17152:220;;;:::o;17378:366::-;17520:3;17541:67;17605:2;17600:3;17541:67;:::i;:::-;17534:74;;17617:93;17706:3;17617:93;:::i;:::-;17735:2;17730:3;17726:12;17719:19;;17524:220;;;:::o;17750:366::-;17892:3;17913:67;17977:2;17972:3;17913:67;:::i;:::-;17906:74;;17989:93;18078:3;17989:93;:::i;:::-;18107:2;18102:3;18098:12;18091:19;;17896:220;;;:::o;18122:366::-;18264:3;18285:67;18349:2;18344:3;18285:67;:::i;:::-;18278:74;;18361:93;18450:3;18361:93;:::i;:::-;18479:2;18474:3;18470:12;18463:19;;18268:220;;;:::o;18494:366::-;18636:3;18657:67;18721:2;18716:3;18657:67;:::i;:::-;18650:74;;18733:93;18822:3;18733:93;:::i;:::-;18851:2;18846:3;18842:12;18835:19;;18640:220;;;:::o;18866:108::-;18943:24;18961:5;18943:24;:::i;:::-;18938:3;18931:37;18921:53;;:::o;18980:118::-;19067:24;19085:5;19067:24;:::i;:::-;19062:3;19055:37;19045:53;;:::o;19104:435::-;19284:3;19306:95;19397:3;19388:6;19306:95;:::i;:::-;19299:102;;19418:95;19509:3;19500:6;19418:95;:::i;:::-;19411:102;;19530:3;19523:10;;19288:251;;;;;:::o;19545:222::-;19638:4;19676:2;19665:9;19661:18;19653:26;;19689:71;19757:1;19746:9;19742:17;19733:6;19689:71;:::i;:::-;19643:124;;;;:::o;19773:640::-;19968:4;20006:3;19995:9;19991:19;19983:27;;20020:71;20088:1;20077:9;20073:17;20064:6;20020:71;:::i;:::-;20101:72;20169:2;20158:9;20154:18;20145:6;20101:72;:::i;:::-;20183;20251:2;20240:9;20236:18;20227:6;20183:72;:::i;:::-;20302:9;20296:4;20292:20;20287:2;20276:9;20272:18;20265:48;20330:76;20401:4;20392:6;20330:76;:::i;:::-;20322:84;;19973:440;;;;;;;:::o;20419:373::-;20562:4;20600:2;20589:9;20585:18;20577:26;;20649:9;20643:4;20639:20;20635:1;20624:9;20620:17;20613:47;20677:108;20780:4;20771:6;20677:108;:::i;:::-;20669:116;;20567:225;;;;:::o;20798:210::-;20885:4;20923:2;20912:9;20908:18;20900:26;;20936:65;20998:1;20987:9;20983:17;20974:6;20936:65;:::i;:::-;20890:118;;;;:::o;21014:313::-;21127:4;21165:2;21154:9;21150:18;21142:26;;21214:9;21208:4;21204:20;21200:1;21189:9;21185:17;21178:47;21242:78;21315:4;21306:6;21242:78;:::i;:::-;21234:86;;21132:195;;;;:::o;21333:419::-;21499:4;21537:2;21526:9;21522:18;21514:26;;21586:9;21580:4;21576:20;21572:1;21561:9;21557:17;21550:47;21614:131;21740:4;21614:131;:::i;:::-;21606:139;;21504:248;;;:::o;21758:419::-;21924:4;21962:2;21951:9;21947:18;21939:26;;22011:9;22005:4;22001:20;21997:1;21986:9;21982:17;21975:47;22039:131;22165:4;22039:131;:::i;:::-;22031:139;;21929:248;;;:::o;22183:419::-;22349:4;22387:2;22376:9;22372:18;22364:26;;22436:9;22430:4;22426:20;22422:1;22411:9;22407:17;22400:47;22464:131;22590:4;22464:131;:::i;:::-;22456:139;;22354:248;;;:::o;22608:419::-;22774:4;22812:2;22801:9;22797:18;22789:26;;22861:9;22855:4;22851:20;22847:1;22836:9;22832:17;22825:47;22889:131;23015:4;22889:131;:::i;:::-;22881:139;;22779:248;;;:::o;23033:419::-;23199:4;23237:2;23226:9;23222:18;23214:26;;23286:9;23280:4;23276:20;23272:1;23261:9;23257:17;23250:47;23314:131;23440:4;23314:131;:::i;:::-;23306:139;;23204:248;;;:::o;23458:419::-;23624:4;23662:2;23651:9;23647:18;23639:26;;23711:9;23705:4;23701:20;23697:1;23686:9;23682:17;23675:47;23739:131;23865:4;23739:131;:::i;:::-;23731:139;;23629:248;;;:::o;23883:419::-;24049:4;24087:2;24076:9;24072:18;24064:26;;24136:9;24130:4;24126:20;24122:1;24111:9;24107:17;24100:47;24164:131;24290:4;24164:131;:::i;:::-;24156:139;;24054:248;;;:::o;24308:419::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24561:9;24555:4;24551:20;24547:1;24536:9;24532:17;24525:47;24589:131;24715:4;24589:131;:::i;:::-;24581:139;;24479:248;;;:::o;24733:419::-;24899:4;24937:2;24926:9;24922:18;24914:26;;24986:9;24980:4;24976:20;24972:1;24961:9;24957:17;24950:47;25014:131;25140:4;25014:131;:::i;:::-;25006:139;;24904:248;;;:::o;25158:419::-;25324:4;25362:2;25351:9;25347:18;25339:26;;25411:9;25405:4;25401:20;25397:1;25386:9;25382:17;25375:47;25439:131;25565:4;25439:131;:::i;:::-;25431:139;;25329:248;;;:::o;25583:419::-;25749:4;25787:2;25776:9;25772:18;25764:26;;25836:9;25830:4;25826:20;25822:1;25811:9;25807:17;25800:47;25864:131;25990:4;25864:131;:::i;:::-;25856:139;;25754:248;;;:::o;26008:419::-;26174:4;26212:2;26201:9;26197:18;26189:26;;26261:9;26255:4;26251:20;26247:1;26236:9;26232:17;26225:47;26289:131;26415:4;26289:131;:::i;:::-;26281:139;;26179:248;;;:::o;26433:419::-;26599:4;26637:2;26626:9;26622:18;26614:26;;26686:9;26680:4;26676:20;26672:1;26661:9;26657:17;26650:47;26714:131;26840:4;26714:131;:::i;:::-;26706:139;;26604:248;;;:::o;26858:419::-;27024:4;27062:2;27051:9;27047:18;27039:26;;27111:9;27105:4;27101:20;27097:1;27086:9;27082:17;27075:47;27139:131;27265:4;27139:131;:::i;:::-;27131:139;;27029:248;;;:::o;27283:419::-;27449:4;27487:2;27476:9;27472:18;27464:26;;27536:9;27530:4;27526:20;27522:1;27511:9;27507:17;27500:47;27564:131;27690:4;27564:131;:::i;:::-;27556:139;;27454:248;;;:::o;27708:419::-;27874:4;27912:2;27901:9;27897:18;27889:26;;27961:9;27955:4;27951:20;27947:1;27936:9;27932:17;27925:47;27989:131;28115:4;27989:131;:::i;:::-;27981:139;;27879:248;;;:::o;28133:419::-;28299:4;28337:2;28326:9;28322:18;28314:26;;28386:9;28380:4;28376:20;28372:1;28361:9;28357:17;28350:47;28414:131;28540:4;28414:131;:::i;:::-;28406:139;;28304:248;;;:::o;28558:419::-;28724:4;28762:2;28751:9;28747:18;28739:26;;28811:9;28805:4;28801:20;28797:1;28786:9;28782:17;28775:47;28839:131;28965:4;28839:131;:::i;:::-;28831:139;;28729:248;;;:::o;28983:419::-;29149:4;29187:2;29176:9;29172:18;29164:26;;29236:9;29230:4;29226:20;29222:1;29211:9;29207:17;29200:47;29264:131;29390:4;29264:131;:::i;:::-;29256:139;;29154:248;;;:::o;29408:419::-;29574:4;29612:2;29601:9;29597:18;29589:26;;29661:9;29655:4;29651:20;29647:1;29636:9;29632:17;29625:47;29689:131;29815:4;29689:131;:::i;:::-;29681:139;;29579:248;;;:::o;29833:419::-;29999:4;30037:2;30026:9;30022:18;30014:26;;30086:9;30080:4;30076:20;30072:1;30061:9;30057:17;30050:47;30114:131;30240:4;30114:131;:::i;:::-;30106:139;;30004:248;;;:::o;30258:419::-;30424:4;30462:2;30451:9;30447:18;30439:26;;30511:9;30505:4;30501:20;30497:1;30486:9;30482:17;30475:47;30539:131;30665:4;30539:131;:::i;:::-;30531:139;;30429:248;;;:::o;30683:419::-;30849:4;30887:2;30876:9;30872:18;30864:26;;30936:9;30930:4;30926:20;30922:1;30911:9;30907:17;30900:47;30964:131;31090:4;30964:131;:::i;:::-;30956:139;;30854:248;;;:::o;31108:222::-;31201:4;31239:2;31228:9;31224:18;31216:26;;31252:71;31320:1;31309:9;31305:17;31296:6;31252:71;:::i;:::-;31206:124;;;;:::o;31336:129::-;31370:6;31397:20;;:::i;:::-;31387:30;;31426:33;31454:4;31446:6;31426:33;:::i;:::-;31377:88;;;:::o;31471:75::-;31504:6;31537:2;31531:9;31521:19;;31511:35;:::o;31552:307::-;31613:4;31703:18;31695:6;31692:30;31689:2;;;31725:18;;:::i;:::-;31689:2;31763:29;31785:6;31763:29;:::i;:::-;31755:37;;31847:4;31841;31837:15;31829:23;;31618:241;;;:::o;31865:308::-;31927:4;32017:18;32009:6;32006:30;32003:2;;;32039:18;;:::i;:::-;32003:2;32077:29;32099:6;32077:29;:::i;:::-;32069:37;;32161:4;32155;32151:15;32143:23;;31932:241;;;:::o;32179:132::-;32246:4;32269:3;32261:11;;32299:4;32294:3;32290:14;32282:22;;32251:60;;;:::o;32317:114::-;32384:6;32418:5;32412:12;32402:22;;32391:40;;;:::o;32437:98::-;32488:6;32522:5;32516:12;32506:22;;32495:40;;;:::o;32541:99::-;32593:6;32627:5;32621:12;32611:22;;32600:40;;;:::o;32646:113::-;32716:4;32748;32743:3;32739:14;32731:22;;32721:38;;;:::o;32765:184::-;32864:11;32898:6;32893:3;32886:19;32938:4;32933:3;32929:14;32914:29;;32876:73;;;;:::o;32955:168::-;33038:11;33072:6;33067:3;33060:19;33112:4;33107:3;33103:14;33088:29;;33050:73;;;;:::o;33129:169::-;33213:11;33247:6;33242:3;33235:19;33287:4;33282:3;33278:14;33263:29;;33225:73;;;;:::o;33304:148::-;33406:11;33443:3;33428:18;;33418:34;;;;:::o;33458:305::-;33498:3;33517:20;33535:1;33517:20;:::i;:::-;33512:25;;33551:20;33569:1;33551:20;:::i;:::-;33546:25;;33705:1;33637:66;33633:74;33630:1;33627:81;33624:2;;;33711:18;;:::i;:::-;33624:2;33755:1;33752;33748:9;33741:16;;33502:261;;;;:::o;33769:185::-;33809:1;33826:20;33844:1;33826:20;:::i;:::-;33821:25;;33860:20;33878:1;33860:20;:::i;:::-;33855:25;;33899:1;33889:2;;33904:18;;:::i;:::-;33889:2;33946:1;33943;33939:9;33934:14;;33811:143;;;;:::o;33960:348::-;34000:7;34023:20;34041:1;34023:20;:::i;:::-;34018:25;;34057:20;34075:1;34057:20;:::i;:::-;34052:25;;34245:1;34177:66;34173:74;34170:1;34167:81;34162:1;34155:9;34148:17;34144:105;34141:2;;;34252:18;;:::i;:::-;34141:2;34300:1;34297;34293:9;34282:20;;34008:300;;;;:::o;34314:191::-;34354:4;34374:20;34392:1;34374:20;:::i;:::-;34369:25;;34408:20;34426:1;34408:20;:::i;:::-;34403:25;;34447:1;34444;34441:8;34438:2;;;34452:18;;:::i;:::-;34438:2;34497:1;34494;34490:9;34482:17;;34359:146;;;;:::o;34511:96::-;34548:7;34577:24;34595:5;34577:24;:::i;:::-;34566:35;;34556:51;;;:::o;34613:104::-;34658:7;34687:24;34705:5;34687:24;:::i;:::-;34676:35;;34666:51;;;:::o;34723:90::-;34757:7;34800:5;34793:13;34786:21;34775:32;;34765:48;;;:::o;34819:149::-;34855:7;34895:66;34888:5;34884:78;34873:89;;34863:105;;;:::o;34974:126::-;35011:7;35051:42;35044:5;35040:54;35029:65;;35019:81;;;:::o;35106:77::-;35143:7;35172:5;35161:16;;35151:32;;;:::o;35189:154::-;35273:6;35268:3;35263;35250:30;35335:1;35326:6;35321:3;35317:16;35310:27;35240:103;;;:::o;35349:307::-;35417:1;35427:113;35441:6;35438:1;35435:13;35427:113;;;35526:1;35521:3;35517:11;35511:18;35507:1;35502:3;35498:11;35491:39;35463:2;35460:1;35456:10;35451:15;;35427:113;;;35558:6;35555:1;35552:13;35549:2;;;35638:1;35629:6;35624:3;35620:16;35613:27;35549:2;35398:258;;;;:::o;35662:320::-;35706:6;35743:1;35737:4;35733:12;35723:22;;35790:1;35784:4;35780:12;35811:18;35801:2;;35867:4;35859:6;35855:17;35845:27;;35801:2;35929;35921:6;35918:14;35898:18;35895:38;35892:2;;;35948:18;;:::i;:::-;35892:2;35713:269;;;;:::o;35988:281::-;36071:27;36093:4;36071:27;:::i;:::-;36063:6;36059:40;36201:6;36189:10;36186:22;36165:18;36153:10;36150:34;36147:62;36144:2;;;36212:18;;:::i;:::-;36144:2;36252:10;36248:2;36241:22;36031:238;;;:::o;36275:233::-;36314:3;36337:24;36355:5;36337:24;:::i;:::-;36328:33;;36383:66;36376:5;36373:77;36370:2;;;36453:18;;:::i;:::-;36370:2;36500:1;36493:5;36489:13;36482:20;;36318:190;;;:::o;36514:176::-;36546:1;36563:20;36581:1;36563:20;:::i;:::-;36558:25;;36597:20;36615:1;36597:20;:::i;:::-;36592:25;;36636:1;36626:2;;36641:18;;:::i;:::-;36626:2;36682:1;36679;36675:9;36670:14;;36548:142;;;;:::o;36696:180::-;36744:77;36741:1;36734:88;36841:4;36838:1;36831:15;36865:4;36862:1;36855:15;36882:180;36930:77;36927:1;36920:88;37027:4;37024:1;37017:15;37051:4;37048:1;37041:15;37068:180;37116:77;37113:1;37106:88;37213:4;37210:1;37203:15;37237:4;37234:1;37227:15;37254:180;37302:77;37299:1;37292:88;37399:4;37396:1;37389:15;37423:4;37420:1;37413:15;37440:180;37488:77;37485:1;37478:88;37585:4;37582:1;37575:15;37609:4;37606:1;37599:15;37626:180;37674:77;37671:1;37664:88;37771:4;37768:1;37761:15;37795:4;37792:1;37785:15;37812:117;37921:1;37918;37911:12;37935:117;38044:1;38041;38034:12;38058:117;38167:1;38164;38157:12;38181:117;38290:1;38287;38280:12;38304:102;38345:6;38396:2;38392:7;38387:2;38380:5;38376:14;38372:28;38362:38;;38352:54;;;:::o;38412:226::-;38552:34;38548:1;38540:6;38536:14;38529:58;38621:9;38616:2;38608:6;38604:15;38597:34;38518:120;:::o;38644:230::-;38784:34;38780:1;38772:6;38768:14;38761:58;38853:13;38848:2;38840:6;38836:15;38829:38;38750:124;:::o;38880:237::-;39020:34;39016:1;39008:6;39004:14;38997:58;39089:20;39084:2;39076:6;39072:15;39065:45;38986:131;:::o;39123:225::-;39263:34;39259:1;39251:6;39247:14;39240:58;39332:8;39327:2;39319:6;39315:15;39308:33;39229:119;:::o;39354:178::-;39494:30;39490:1;39482:6;39478:14;39471:54;39460:72;:::o;39538:223::-;39678:34;39674:1;39666:6;39662:14;39655:58;39747:6;39742:2;39734:6;39730:15;39723:31;39644:117;:::o;39767:175::-;39907:27;39903:1;39895:6;39891:14;39884:51;39873:69;:::o;39948:231::-;40088:34;40084:1;40076:6;40072:14;40065:58;40157:14;40152:2;40144:6;40140:15;40133:39;40054:125;:::o;40185:243::-;40325:34;40321:1;40313:6;40309:14;40302:58;40394:26;40389:2;40381:6;40377:15;40370:51;40291:137;:::o;40434:229::-;40574:34;40570:1;40562:6;40558:14;40551:58;40643:12;40638:2;40630:6;40626:15;40619:37;40540:123;:::o;40669:228::-;40809:34;40805:1;40797:6;40793:14;40786:58;40878:11;40873:2;40865:6;40861:15;40854:36;40775:122;:::o;40903:169::-;41043:21;41039:1;41031:6;41027:14;41020:45;41009:63;:::o;41078:182::-;41218:34;41214:1;41206:6;41202:14;41195:58;41184:76;:::o;41266:231::-;41406:34;41402:1;41394:6;41390:14;41383:58;41475:14;41470:2;41462:6;41458:15;41451:39;41372:125;:::o;41503:182::-;41643:34;41639:1;41631:6;41627:14;41620:58;41609:76;:::o;41691:228::-;41831:34;41827:1;41819:6;41815:14;41808:58;41900:11;41895:2;41887:6;41883:15;41876:36;41797:122;:::o;41925:234::-;42065:34;42061:1;42053:6;42049:14;42042:58;42134:17;42129:2;42121:6;42117:15;42110:42;42031:128;:::o;42165:167::-;42305:19;42301:1;42293:6;42289:14;42282:43;42271:61;:::o;42338:160::-;42478:12;42474:1;42466:6;42462:14;42455:36;42444:54;:::o;42504:220::-;42644:34;42640:1;42632:6;42628:14;42621:58;42713:3;42708:2;42700:6;42696:15;42689:28;42610:114;:::o;42730:235::-;42870:34;42866:1;42858:6;42854:14;42847:58;42939:18;42934:2;42926:6;42922:15;42915:43;42836:129;:::o;42971:236::-;43111:34;43107:1;43099:6;43095:14;43088:58;43180:19;43175:2;43167:6;43163:15;43156:44;43077:130;:::o;43213:231::-;43353:34;43349:1;43341:6;43337:14;43330:58;43422:14;43417:2;43409:6;43405:15;43398:39;43319:125;:::o;43450:122::-;43523:24;43541:5;43523:24;:::i;:::-;43516:5;43513:35;43503:2;;43562:1;43559;43552:12;43503:2;43493:79;:::o;43578:138::-;43659:32;43685:5;43659:32;:::i;:::-;43652:5;43649:43;43639:2;;43706:1;43703;43696:12;43639:2;43629:87;:::o;43722:116::-;43792:21;43807:5;43792:21;:::i;:::-;43785:5;43782:32;43772:2;;43828:1;43825;43818:12;43772:2;43762:76;:::o;43844:120::-;43916:23;43933:5;43916:23;:::i;:::-;43909:5;43906:34;43896:2;;43954:1;43951;43944:12;43896:2;43886:78;:::o;43970:122::-;44043:24;44061:5;44043:24;:::i;:::-;44036:5;44033:35;44023:2;;44082:1;44079;44072:12;44023:2;44013:79;:::o

Swarm Source

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