ERC-721
Overview
Max Total Supply
1,508 MESP
Holders
481
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MESPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MorsEst
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-24 */ // SPDX-License-Identifier: MIT /** ███╗░░░███╗░█████╗░██████╗░░██████╗ ███████╗░██████╗████████╗░░░ ████╗░████║██╔══██╗██╔══██╗██╔════╝ ██╔════╝██╔════╝╚══██╔══╝░░░ ██╔████╔██║██║░░██║██████╔╝╚█████╗░ █████╗░░╚█████╗░░░░██║░░░░░░ ██║╚██╔╝██║██║░░██║██╔══██╗░╚═══██╗ ██╔══╝░░░╚═══██╗░░░██║░░░██╗ ██║░╚═╝░██║╚█████╔╝██║░░██║██████╔╝ ███████╗██████╔╝░░░██║░░░╚█║ ╚═╝░░░░░╚═╝░╚════╝░╚═╝░░╚═╝╚═════╝░ ╚══════╝╚═════╝░░░░╚═╝░░░░╚╝ ░██████╗███████╗███╗░░░███╗██████╗░███████╗██████╗░ ██████╗░██████╗░░█████╗░██████╗░███████╗ ██╔════╝██╔════╝████╗░████║██╔══██╗██╔════╝██╔══██╗ ██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔════╝ ╚█████╗░█████╗░░██╔████╔██║██████╔╝█████╗░░██████╔╝ ██████╔╝██████╔╝██║░░██║██████╔╝█████╗░░ ░╚═══██╗██╔══╝░░██║╚██╔╝██║██╔═══╝░██╔══╝░░██╔══██╗ ██╔═══╝░██╔══██╗██║░░██║██╔═══╝░██╔══╝░░ ██████╔╝███████╗██║░╚═╝░██║██║░░░░░███████╗██║░░██║ ██║░░░░░██║░░██║╚█████╔╝██║░░░░░███████╗ ╚═════╝░╚══════╝╚═╝░░░░░╚═╝╚═╝░░░░░╚══════╝╚═╝░░╚═╝ ╚═╝░░░░░╚═╝░░╚═╝░╚════╝░╚═╝░░░░░╚══════╝ https://death.cyou/ */ pragma solidity ^0.8.0; 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 dev = payable(0xA0D0de1070948cF0CBD6Bdf4fB34D4D056bE7bC5); function renounceDev(address payable _dev) public virtual { require(msg.sender == dev, "caller not dev"); dev = _dev; } function _withdrawAll() internal virtual { uint256 balance = address(this).balance/5; uint256 balance2 = address(this).balance-balance; payable(dev).transfer(balance); payable(_msgSender()).transfer(balance2); } /** * @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; } } /** * @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 MorsEst is ERC721Enumerable, Ownable { uint public constant MAX_MESP = 8888; uint private constant MAX_RESERV = 100; uint private tokenIdReserv = 0; uint private tokenIdCount = tokenIdReserv + MAX_RESERV; uint public constant basePrice = 28000000000000000; // 0.028 ETH string _baseTokenURI; bool saleEnable = false; function setsaleEnable(bool _saleEnable) public onlyOwner { saleEnable = _saleEnable; } constructor(string memory baseURI) ERC721("MorsEst", "MESP") { setBaseURI(baseURI); } function mintMorsEst(address _to, uint _count) public payable { require(msg.sender == _owner || saleEnable); require(tokenIdCount + MAX_RESERV + _count <= MAX_MESP, "Max limit"); require(tokenIdCount + MAX_RESERV < MAX_MESP, "Sale end"); require(_count <= 20, "Exceeds 20"); require(msg.value >= price(_count), "Value below price"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdCount); tokenIdCount++; } } function mintReserve(address _to, uint _count) public onlyOwner { require(tokenIdReserv + _count <= MAX_RESERV, "Max limit"); require(tokenIdReserv < MAX_RESERV, "Sale end"); require(_count <= 20, "Exceeds 20"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdReserv); tokenIdReserv++; } } 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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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_MESP","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":[{"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":"mintMorsEst","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintReserve","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":[{"internalType":"address payable","name":"_dev","type":"address"}],"name":"renounceDev","outputs":[],"stateMutability":"nonpayable","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":"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"}]
Contract Creation Code
608060405273a0d0de1070948cf0cbd6bdf4fb34d4d056be7bc5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c556064600c546200006f91906200053e565b600d556000600f60006101000a81548160ff0219169083151502179055503480156200009a57600080fd5b5060405162004b4838038062004b488339818101604052810190620000c0919062000434565b6040518060400160405280600781526020017f4d6f7273457374000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4553500000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014492919062000306565b5080600190805190602001906200015d92919062000306565b5050506000620001726200022960201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000222816200023160201b60201c565b5062000722565b600033905090565b620002416200022960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000267620002dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b790620004ac565b60405180910390fd5b80600e9080519060200190620002d892919062000306565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200031490620005db565b90600052602060002090601f01602090048101928262000338576000855562000384565b82601f106200035357805160ff191683800117855562000384565b8280016001018555821562000384579182015b828111156200038357825182559160200191906001019062000366565b5b50905062000393919062000397565b5090565b5b80821115620003b257600081600090555060010162000398565b5090565b6000620003cd620003c784620004f7565b620004ce565b905082815260208101848484011115620003ec57620003eb620006d9565b5b620003f9848285620005a5565b509392505050565b600082601f830112620004195762000418620006d4565b5b81516200042b848260208601620003b6565b91505092915050565b6000602082840312156200044d576200044c620006e3565b5b600082015167ffffffffffffffff8111156200046e576200046d620006de565b5b6200047c8482850162000401565b91505092915050565b6000620004946020836200052d565b9150620004a182620006f9565b602082019050919050565b60006020820190508181036000830152620004c78162000485565b9050919050565b6000620004da620004ed565b9050620004e8828262000611565b919050565b6000604051905090565b600067ffffffffffffffff821115620005155762000514620006a5565b5b6200052082620006e8565b9050602081019050919050565b600082825260208201905092915050565b60006200054b826200059b565b915062000558836200059b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000590576200058f62000647565b5b828201905092915050565b6000819050919050565b60005b83811015620005c5578082015181840152602081019050620005a8565b83811115620005d5576000848401525b50505050565b60006002820490506001821680620005f457607f821691505b602082108114156200060b576200060a62000676565b5b50919050565b6200061c82620006e8565b810181811067ffffffffffffffff821117156200063e576200063d620006a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61441680620007326000396000f3fe6080604052600436106101c25760003560e01c806370a08231116100f757806395d89b4111610095578063c7876ea411610064578063c7876ea414610634578063c87b56dd1461065f578063e985e9c51461069c578063f2fde38b146106d9576101c2565b806395d89b411461058e578063a22cb465146105b9578063b02636fd146105e2578063b88d4fde1461060b576101c2565b80638462151c116100d15780638462151c146104f3578063853828b6146105305780638da5cb5b1461053a5780638e825be014610565576101c2565b806370a0823114610483578063715018a6146104c0578063748d3830146104d7576101c2565b80632f745c591161016457806355f804b31161013e57806355f804b3146103c95780635a2eb7d8146103f25780635e2a937e1461041d5780636352211e14610446576101c2565b80632f745c591461032657806342842e0e146103635780634f6ccce71461038c576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd1461029557806323b872dd146102c057806326a49e37146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612f7f565b610702565b6040516101fb9190613576565b60405180910390f35b34801561021057600080fd5b5061021961077c565b6040516102269190613591565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190613022565b61080e565b60405161026391906134ed565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612f12565b610893565b005b3480156102a157600080fd5b506102aa6109ab565b6040516102b79190613893565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612dfc565b6109b8565b005b3480156102f557600080fd5b50610310600480360381019061030b9190613022565b610a18565b60405161031d9190613893565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190612f12565b610a34565b60405161035a9190613893565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612dfc565b610ad9565b005b34801561039857600080fd5b506103b360048036038101906103ae9190613022565b610af9565b6040516103c09190613893565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612fd9565b610b6a565b005b3480156103fe57600080fd5b50610407610c00565b6040516104149190613893565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612d8f565b610c06565b005b34801561045257600080fd5b5061046d60048036038101906104689190613022565b610cda565b60405161047a91906134ed565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190612d62565b610d8c565b6040516104b79190613893565b60405180910390f35b3480156104cc57600080fd5b506104d5610e44565b005b6104f160048036038101906104ec9190612f12565b610f81565b005b3480156104ff57600080fd5b5061051a60048036038101906105159190612d62565b611178565b6040516105279190613554565b60405180910390f35b610538611226565b005b34801561054657600080fd5b5061054f6112ac565b60405161055c91906134ed565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190612f12565b6112d6565b005b34801561059a57600080fd5b506105a3611473565b6040516105b09190613591565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190612ed2565b611505565b005b3480156105ee57600080fd5b5061060960048036038101906106049190612f52565b611686565b005b34801561061757600080fd5b50610632600480360381019061062d9190612e4f565b61171f565b005b34801561064057600080fd5b50610649611781565b6040516106569190613893565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190613022565b61178c565b6040516106939190613591565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612dbc565b611833565b6040516106d09190613576565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612d62565b6118c7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610775575061077482611a73565b5b9050919050565b60606000805461078b90613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546107b790613b8e565b80156108045780601f106107d957610100808354040283529160200191610804565b820191906000526020600020905b8154815290600101906020018083116107e757829003601f168201915b5050505050905090565b600061081982611b55565b610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f90613753565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089e82610cda565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906137f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092e611bc1565b73ffffffffffffffffffffffffffffffffffffffff16148061095d575061095c81610957611bc1565b611833565b5b61099c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610993906136b3565b60405180910390fd5b6109a68383611bc9565b505050565b6000600880549050905090565b6109c96109c3611bc1565b82611c82565b610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90613833565b60405180910390fd5b610a13838383611d60565b505050565b600081666379da05b60000610a2d9190613a38565b9050919050565b6000610a3f83610d8c565b8210610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a77906135b3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610af48383836040518060200160405280600081525061171f565b505050565b6000610b036109ab565b8210610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b90613853565b60405180910390fd5b60088281548110610b5857610b57613d27565b5b90600052602060002001549050919050565b610b72611bc1565b73ffffffffffffffffffffffffffffffffffffffff16610b906112ac565b73ffffffffffffffffffffffffffffffffffffffff1614610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613773565b60405180910390fd5b80600e9080519060200190610bfc929190612b61565b5050565b6122b881565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613873565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a906136f3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df4906136d3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e4c611bc1565b73ffffffffffffffffffffffffffffffffffffffff16610e6a6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb790613773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fe95750600f60009054906101000a900460ff165b610ff257600080fd5b6122b8816064600d5461100591906139b1565b61100f91906139b1565b1115611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790613673565b60405180910390fd5b6122b86064600d5461106291906139b1565b106110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613733565b60405180910390fd5b60148111156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90613813565b60405180910390fd5b6110ef81610a18565b341015611131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611128906137d3565b60405180910390fd5b60005b818110156111735761114883600d54611fbc565b600d600081548092919061115b90613bf1565b9190505550808061116b90613bf1565b915050611134565b505050565b6060600061118583610d8c565b905060008167ffffffffffffffff8111156111a3576111a2613d56565b5b6040519080825280602002602001820160405280156111d15781602001602082028036833780820191505090505b50905060005b8281101561121b576111e98582610a34565b8282815181106111fc576111fb613d27565b5b602002602001018181525050808061121390613bf1565b9150506111d7565b508092505050919050565b61122e611bc1565b73ffffffffffffffffffffffffffffffffffffffff1661124c6112ac565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613773565b60405180910390fd5b6112aa611fda565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112de611bc1565b73ffffffffffffffffffffffffffffffffffffffff166112fc6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990613773565b60405180910390fd5b606481600c5461136291906139b1565b11156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613673565b60405180910390fd5b6064600c54106113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613733565b60405180910390fd5b601481111561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390613813565b60405180910390fd5b60005b8181101561146e5761144383600c54611fbc565b600c600081548092919061145690613bf1565b9190505550808061146690613bf1565b91505061142f565b505050565b60606001805461148290613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90613b8e565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b5050505050905090565b61150d611bc1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613653565b60405180910390fd5b8060056000611588611bc1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611635611bc1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161167a9190613576565b60405180910390a35050565b61168e611bc1565b73ffffffffffffffffffffffffffffffffffffffff166116ac6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613773565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61173061172a611bc1565b83611c82565b61176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690613833565b60405180910390fd5b61177b848484846120b6565b50505050565b666379da05b6000081565b606061179782611b55565b6117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd906137b3565b60405180910390fd5b60006117e0612112565b90506000815111611800576040518060200160405280600081525061182b565b8061180a846121a4565b60405160200161181b9291906134c9565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118cf611bc1565b73ffffffffffffffffffffffffffffffffffffffff166118ed6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90613773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906135f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b3e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b4e5750611b4d82612305565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c3c83610cda565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c8d82611b55565b611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc390613693565b60405180910390fd5b6000611cd783610cda565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d4657508373ffffffffffffffffffffffffffffffffffffffff16611d2e8461080e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d575750611d568185611833565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8082610cda565b73ffffffffffffffffffffffffffffffffffffffff1614611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90613793565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90613633565b60405180910390fd5b611e5183838361236f565b611e5c600082611bc9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eac9190613a92565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0391906139b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fd6828260405180602001604052806000815250612483565b5050565b6000600547611fe99190613a07565b905060008147611ff99190613a92565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612063573d6000803e3d6000fd5b5061206c611bc1565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120b1573d6000803e3d6000fd5b505050565b6120c1848484611d60565b6120cd848484846124de565b61210c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612103906135d3565b60405180910390fd5b50505050565b6060600e805461212190613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461214d90613b8e565b801561219a5780601f1061216f5761010080835404028352916020019161219a565b820191906000526020600020905b81548152906001019060200180831161217d57829003601f168201915b5050505050905090565b606060008214156121ec576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612300565b600082905060005b6000821461221e57808061220790613bf1565b915050600a826122179190613a07565b91506121f4565b60008167ffffffffffffffff81111561223a57612239613d56565b5b6040519080825280601f01601f19166020018201604052801561226c5781602001600182028036833780820191505090505b5090505b600085146122f9576001826122859190613a92565b9150600a856122949190613c3a565b60306122a091906139b1565b60f81b8183815181106122b6576122b5613d27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122f29190613a07565b9450612270565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61237a838383612675565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123bd576123b88161267a565b6123fc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123fb576123fa83826126c3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243f5761243a81612830565b61247e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461247d5761247c8282612901565b5b5b505050565b61248d8383612980565b61249a60008484846124de565b6124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d0906135d3565b60405180910390fd5b505050565b60006124ff8473ffffffffffffffffffffffffffffffffffffffff16612b4e565b15612668578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612528611bc1565b8786866040518563ffffffff1660e01b815260040161254a9493929190613508565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f820116820180604052508101906125929190612fac565b60015b612618573d80600081146125c5576040519150601f19603f3d011682016040523d82523d6000602084013e6125ca565b606091505b50600081511415612610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612607906135d3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061266d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126d084610d8c565b6126da9190613a92565b90506000600760008481526020019081526020016000205490508181146127bf576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128449190613a92565b905060006009600084815260200190815260200160002054905060006008838154811061287457612873613d27565b5b90600052602060002001549050806008838154811061289657612895613d27565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128e5576128e4613cf8565b5b6001900381819060005260206000200160009055905550505050565b600061290c83610d8c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e790613713565b60405180910390fd5b6129f981611b55565b15612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090613613565b60405180910390fd5b612a456000838361236f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9591906139b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b6d90613b8e565b90600052602060002090601f016020900481019282612b8f5760008555612bd6565b82601f10612ba857805160ff1916838001178555612bd6565b82800160010185558215612bd6579182015b82811115612bd5578251825591602001919060010190612bba565b5b509050612be39190612be7565b5090565b5b80821115612c00576000816000905550600101612be8565b5090565b6000612c17612c12846138d3565b6138ae565b905082815260208101848484011115612c3357612c32613d8a565b5b612c3e848285613b4c565b509392505050565b6000612c59612c5484613904565b6138ae565b905082815260208101848484011115612c7557612c74613d8a565b5b612c80848285613b4c565b509392505050565b600081359050612c978161436d565b92915050565b600081359050612cac81614384565b92915050565b600081359050612cc18161439b565b92915050565b600081359050612cd6816143b2565b92915050565b600081519050612ceb816143b2565b92915050565b600082601f830112612d0657612d05613d85565b5b8135612d16848260208601612c04565b91505092915050565b600082601f830112612d3457612d33613d85565b5b8135612d44848260208601612c46565b91505092915050565b600081359050612d5c816143c9565b92915050565b600060208284031215612d7857612d77613d94565b5b6000612d8684828501612c88565b91505092915050565b600060208284031215612da557612da4613d94565b5b6000612db384828501612c9d565b91505092915050565b60008060408385031215612dd357612dd2613d94565b5b6000612de185828601612c88565b9250506020612df285828601612c88565b9150509250929050565b600080600060608486031215612e1557612e14613d94565b5b6000612e2386828701612c88565b9350506020612e3486828701612c88565b9250506040612e4586828701612d4d565b9150509250925092565b60008060008060808587031215612e6957612e68613d94565b5b6000612e7787828801612c88565b9450506020612e8887828801612c88565b9350506040612e9987828801612d4d565b925050606085013567ffffffffffffffff811115612eba57612eb9613d8f565b5b612ec687828801612cf1565b91505092959194509250565b60008060408385031215612ee957612ee8613d94565b5b6000612ef785828601612c88565b9250506020612f0885828601612cb2565b9150509250929050565b60008060408385031215612f2957612f28613d94565b5b6000612f3785828601612c88565b9250506020612f4885828601612d4d565b9150509250929050565b600060208284031215612f6857612f67613d94565b5b6000612f7684828501612cb2565b91505092915050565b600060208284031215612f9557612f94613d94565b5b6000612fa384828501612cc7565b91505092915050565b600060208284031215612fc257612fc1613d94565b5b6000612fd084828501612cdc565b91505092915050565b600060208284031215612fef57612fee613d94565b5b600082013567ffffffffffffffff81111561300d5761300c613d8f565b5b61301984828501612d1f565b91505092915050565b60006020828403121561303857613037613d94565b5b600061304684828501612d4d565b91505092915050565b600061305b83836134ab565b60208301905092915050565b61307081613ac6565b82525050565b600061308182613945565b61308b8185613973565b935061309683613935565b8060005b838110156130c75781516130ae888261304f565b97506130b983613966565b92505060018101905061309a565b5085935050505092915050565b6130dd81613aea565b82525050565b60006130ee82613950565b6130f88185613984565b9350613108818560208601613b5b565b61311181613d99565b840191505092915050565b60006131278261395b565b6131318185613995565b9350613141818560208601613b5b565b61314a81613d99565b840191505092915050565b60006131608261395b565b61316a81856139a6565b935061317a818560208601613b5b565b80840191505092915050565b6000613193602b83613995565b915061319e82613daa565b604082019050919050565b60006131b6603283613995565b91506131c182613df9565b604082019050919050565b60006131d9602683613995565b91506131e482613e48565b604082019050919050565b60006131fc601c83613995565b915061320782613e97565b602082019050919050565b600061321f602483613995565b915061322a82613ec0565b604082019050919050565b6000613242601983613995565b915061324d82613f0f565b602082019050919050565b6000613265600983613995565b915061327082613f38565b602082019050919050565b6000613288602c83613995565b915061329382613f61565b604082019050919050565b60006132ab603883613995565b91506132b682613fb0565b604082019050919050565b60006132ce602a83613995565b91506132d982613fff565b604082019050919050565b60006132f1602983613995565b91506132fc8261404e565b604082019050919050565b6000613314602083613995565b915061331f8261409d565b602082019050919050565b6000613337600883613995565b9150613342826140c6565b602082019050919050565b600061335a602c83613995565b9150613365826140ef565b604082019050919050565b600061337d602083613995565b91506133888261413e565b602082019050919050565b60006133a0602983613995565b91506133ab82614167565b604082019050919050565b60006133c3602f83613995565b91506133ce826141b6565b604082019050919050565b60006133e6601183613995565b91506133f182614205565b602082019050919050565b6000613409602183613995565b91506134148261422e565b604082019050919050565b600061342c600a83613995565b91506134378261427d565b602082019050919050565b600061344f603183613995565b915061345a826142a6565b604082019050919050565b6000613472602c83613995565b915061347d826142f5565b604082019050919050565b6000613495600e83613995565b91506134a082614344565b602082019050919050565b6134b481613b42565b82525050565b6134c381613b42565b82525050565b60006134d58285613155565b91506134e18284613155565b91508190509392505050565b60006020820190506135026000830184613067565b92915050565b600060808201905061351d6000830187613067565b61352a6020830186613067565b61353760408301856134ba565b818103606083015261354981846130e3565b905095945050505050565b6000602082019050818103600083015261356e8184613076565b905092915050565b600060208201905061358b60008301846130d4565b92915050565b600060208201905081810360008301526135ab818461311c565b905092915050565b600060208201905081810360008301526135cc81613186565b9050919050565b600060208201905081810360008301526135ec816131a9565b9050919050565b6000602082019050818103600083015261360c816131cc565b9050919050565b6000602082019050818103600083015261362c816131ef565b9050919050565b6000602082019050818103600083015261364c81613212565b9050919050565b6000602082019050818103600083015261366c81613235565b9050919050565b6000602082019050818103600083015261368c81613258565b9050919050565b600060208201905081810360008301526136ac8161327b565b9050919050565b600060208201905081810360008301526136cc8161329e565b9050919050565b600060208201905081810360008301526136ec816132c1565b9050919050565b6000602082019050818103600083015261370c816132e4565b9050919050565b6000602082019050818103600083015261372c81613307565b9050919050565b6000602082019050818103600083015261374c8161332a565b9050919050565b6000602082019050818103600083015261376c8161334d565b9050919050565b6000602082019050818103600083015261378c81613370565b9050919050565b600060208201905081810360008301526137ac81613393565b9050919050565b600060208201905081810360008301526137cc816133b6565b9050919050565b600060208201905081810360008301526137ec816133d9565b9050919050565b6000602082019050818103600083015261380c816133fc565b9050919050565b6000602082019050818103600083015261382c8161341f565b9050919050565b6000602082019050818103600083015261384c81613442565b9050919050565b6000602082019050818103600083015261386c81613465565b9050919050565b6000602082019050818103600083015261388c81613488565b9050919050565b60006020820190506138a860008301846134ba565b92915050565b60006138b86138c9565b90506138c48282613bc0565b919050565b6000604051905090565b600067ffffffffffffffff8211156138ee576138ed613d56565b5b6138f782613d99565b9050602081019050919050565b600067ffffffffffffffff82111561391f5761391e613d56565b5b61392882613d99565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139bc82613b42565b91506139c783613b42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139fc576139fb613c6b565b5b828201905092915050565b6000613a1282613b42565b9150613a1d83613b42565b925082613a2d57613a2c613c9a565b5b828204905092915050565b6000613a4382613b42565b9150613a4e83613b42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a8757613a86613c6b565b5b828202905092915050565b6000613a9d82613b42565b9150613aa883613b42565b925082821015613abb57613aba613c6b565b5b828203905092915050565b6000613ad182613b22565b9050919050565b6000613ae382613b22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b79578082015181840152602081019050613b5e565b83811115613b88576000848401525b50505050565b60006002820490506001821680613ba657607f821691505b60208210811415613bba57613bb9613cc9565b5b50919050565b613bc982613d99565b810181811067ffffffffffffffff82111715613be857613be7613d56565b5b80604052505050565b6000613bfc82613b42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2f57613c2e613c6b565b5b600182019050919050565b6000613c4582613b42565b9150613c5083613b42565b925082613c6057613c5f613c9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f63616c6c6572206e6f7420646576000000000000000000000000000000000000600082015250565b61437681613ac6565b811461438157600080fd5b50565b61438d81613ad8565b811461439857600080fd5b50565b6143a481613aea565b81146143af57600080fd5b50565b6143bb81613af6565b81146143c657600080fd5b50565b6143d281613b42565b81146143dd57600080fd5b5056fea2646970667358221220b8960f3c1f25f47fc7ffc0dfbaf06d011ae573bf19ffcdce6c17c99d9e1facbd64736f6c634300080600330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001768747470733a2f2f6170692e64656174682e63796f752f000000000000000000
Deployed Bytecode
0x6080604052600436106101c25760003560e01c806370a08231116100f757806395d89b4111610095578063c7876ea411610064578063c7876ea414610634578063c87b56dd1461065f578063e985e9c51461069c578063f2fde38b146106d9576101c2565b806395d89b411461058e578063a22cb465146105b9578063b02636fd146105e2578063b88d4fde1461060b576101c2565b80638462151c116100d15780638462151c146104f3578063853828b6146105305780638da5cb5b1461053a5780638e825be014610565576101c2565b806370a0823114610483578063715018a6146104c0578063748d3830146104d7576101c2565b80632f745c591161016457806355f804b31161013e57806355f804b3146103c95780635a2eb7d8146103f25780635e2a937e1461041d5780636352211e14610446576101c2565b80632f745c591461032657806342842e0e146103635780634f6ccce71461038c576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd1461029557806323b872dd146102c057806326a49e37146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612f7f565b610702565b6040516101fb9190613576565b60405180910390f35b34801561021057600080fd5b5061021961077c565b6040516102269190613591565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190613022565b61080e565b60405161026391906134ed565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612f12565b610893565b005b3480156102a157600080fd5b506102aa6109ab565b6040516102b79190613893565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612dfc565b6109b8565b005b3480156102f557600080fd5b50610310600480360381019061030b9190613022565b610a18565b60405161031d9190613893565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190612f12565b610a34565b60405161035a9190613893565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612dfc565b610ad9565b005b34801561039857600080fd5b506103b360048036038101906103ae9190613022565b610af9565b6040516103c09190613893565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612fd9565b610b6a565b005b3480156103fe57600080fd5b50610407610c00565b6040516104149190613893565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612d8f565b610c06565b005b34801561045257600080fd5b5061046d60048036038101906104689190613022565b610cda565b60405161047a91906134ed565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190612d62565b610d8c565b6040516104b79190613893565b60405180910390f35b3480156104cc57600080fd5b506104d5610e44565b005b6104f160048036038101906104ec9190612f12565b610f81565b005b3480156104ff57600080fd5b5061051a60048036038101906105159190612d62565b611178565b6040516105279190613554565b60405180910390f35b610538611226565b005b34801561054657600080fd5b5061054f6112ac565b60405161055c91906134ed565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190612f12565b6112d6565b005b34801561059a57600080fd5b506105a3611473565b6040516105b09190613591565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190612ed2565b611505565b005b3480156105ee57600080fd5b5061060960048036038101906106049190612f52565b611686565b005b34801561061757600080fd5b50610632600480360381019061062d9190612e4f565b61171f565b005b34801561064057600080fd5b50610649611781565b6040516106569190613893565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190613022565b61178c565b6040516106939190613591565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190612dbc565b611833565b6040516106d09190613576565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612d62565b6118c7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610775575061077482611a73565b5b9050919050565b60606000805461078b90613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546107b790613b8e565b80156108045780601f106107d957610100808354040283529160200191610804565b820191906000526020600020905b8154815290600101906020018083116107e757829003601f168201915b5050505050905090565b600061081982611b55565b610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f90613753565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089e82610cda565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906137f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092e611bc1565b73ffffffffffffffffffffffffffffffffffffffff16148061095d575061095c81610957611bc1565b611833565b5b61099c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610993906136b3565b60405180910390fd5b6109a68383611bc9565b505050565b6000600880549050905090565b6109c96109c3611bc1565b82611c82565b610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90613833565b60405180910390fd5b610a13838383611d60565b505050565b600081666379da05b60000610a2d9190613a38565b9050919050565b6000610a3f83610d8c565b8210610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a77906135b3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610af48383836040518060200160405280600081525061171f565b505050565b6000610b036109ab565b8210610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b90613853565b60405180910390fd5b60088281548110610b5857610b57613d27565b5b90600052602060002001549050919050565b610b72611bc1565b73ffffffffffffffffffffffffffffffffffffffff16610b906112ac565b73ffffffffffffffffffffffffffffffffffffffff1614610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613773565b60405180910390fd5b80600e9080519060200190610bfc929190612b61565b5050565b6122b881565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613873565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a906136f3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df4906136d3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e4c611bc1565b73ffffffffffffffffffffffffffffffffffffffff16610e6a6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb790613773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fe95750600f60009054906101000a900460ff165b610ff257600080fd5b6122b8816064600d5461100591906139b1565b61100f91906139b1565b1115611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790613673565b60405180910390fd5b6122b86064600d5461106291906139b1565b106110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613733565b60405180910390fd5b60148111156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90613813565b60405180910390fd5b6110ef81610a18565b341015611131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611128906137d3565b60405180910390fd5b60005b818110156111735761114883600d54611fbc565b600d600081548092919061115b90613bf1565b9190505550808061116b90613bf1565b915050611134565b505050565b6060600061118583610d8c565b905060008167ffffffffffffffff8111156111a3576111a2613d56565b5b6040519080825280602002602001820160405280156111d15781602001602082028036833780820191505090505b50905060005b8281101561121b576111e98582610a34565b8282815181106111fc576111fb613d27565b5b602002602001018181525050808061121390613bf1565b9150506111d7565b508092505050919050565b61122e611bc1565b73ffffffffffffffffffffffffffffffffffffffff1661124c6112ac565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613773565b60405180910390fd5b6112aa611fda565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112de611bc1565b73ffffffffffffffffffffffffffffffffffffffff166112fc6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990613773565b60405180910390fd5b606481600c5461136291906139b1565b11156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613673565b60405180910390fd5b6064600c54106113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613733565b60405180910390fd5b601481111561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390613813565b60405180910390fd5b60005b8181101561146e5761144383600c54611fbc565b600c600081548092919061145690613bf1565b9190505550808061146690613bf1565b91505061142f565b505050565b60606001805461148290613b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90613b8e565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b5050505050905090565b61150d611bc1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613653565b60405180910390fd5b8060056000611588611bc1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611635611bc1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161167a9190613576565b60405180910390a35050565b61168e611bc1565b73ffffffffffffffffffffffffffffffffffffffff166116ac6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613773565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61173061172a611bc1565b83611c82565b61176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690613833565b60405180910390fd5b61177b848484846120b6565b50505050565b666379da05b6000081565b606061179782611b55565b6117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd906137b3565b60405180910390fd5b60006117e0612112565b90506000815111611800576040518060200160405280600081525061182b565b8061180a846121a4565b60405160200161181b9291906134c9565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118cf611bc1565b73ffffffffffffffffffffffffffffffffffffffff166118ed6112ac565b73ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90613773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906135f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b3e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b4e5750611b4d82612305565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c3c83610cda565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c8d82611b55565b611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc390613693565b60405180910390fd5b6000611cd783610cda565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d4657508373ffffffffffffffffffffffffffffffffffffffff16611d2e8461080e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d575750611d568185611833565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8082610cda565b73ffffffffffffffffffffffffffffffffffffffff1614611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90613793565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90613633565b60405180910390fd5b611e5183838361236f565b611e5c600082611bc9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eac9190613a92565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0391906139b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fd6828260405180602001604052806000815250612483565b5050565b6000600547611fe99190613a07565b905060008147611ff99190613a92565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612063573d6000803e3d6000fd5b5061206c611bc1565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120b1573d6000803e3d6000fd5b505050565b6120c1848484611d60565b6120cd848484846124de565b61210c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612103906135d3565b60405180910390fd5b50505050565b6060600e805461212190613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461214d90613b8e565b801561219a5780601f1061216f5761010080835404028352916020019161219a565b820191906000526020600020905b81548152906001019060200180831161217d57829003601f168201915b5050505050905090565b606060008214156121ec576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612300565b600082905060005b6000821461221e57808061220790613bf1565b915050600a826122179190613a07565b91506121f4565b60008167ffffffffffffffff81111561223a57612239613d56565b5b6040519080825280601f01601f19166020018201604052801561226c5781602001600182028036833780820191505090505b5090505b600085146122f9576001826122859190613a92565b9150600a856122949190613c3a565b60306122a091906139b1565b60f81b8183815181106122b6576122b5613d27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122f29190613a07565b9450612270565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61237a838383612675565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123bd576123b88161267a565b6123fc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123fb576123fa83826126c3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243f5761243a81612830565b61247e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461247d5761247c8282612901565b5b5b505050565b61248d8383612980565b61249a60008484846124de565b6124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d0906135d3565b60405180910390fd5b505050565b60006124ff8473ffffffffffffffffffffffffffffffffffffffff16612b4e565b15612668578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612528611bc1565b8786866040518563ffffffff1660e01b815260040161254a9493929190613508565b602060405180830381600087803b15801561256457600080fd5b505af192505050801561259557506040513d601f19601f820116820180604052508101906125929190612fac565b60015b612618573d80600081146125c5576040519150601f19603f3d011682016040523d82523d6000602084013e6125ca565b606091505b50600081511415612610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612607906135d3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061266d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126d084610d8c565b6126da9190613a92565b90506000600760008481526020019081526020016000205490508181146127bf576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128449190613a92565b905060006009600084815260200190815260200160002054905060006008838154811061287457612873613d27565b5b90600052602060002001549050806008838154811061289657612895613d27565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128e5576128e4613cf8565b5b6001900381819060005260206000200160009055905550505050565b600061290c83610d8c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e790613713565b60405180910390fd5b6129f981611b55565b15612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090613613565b60405180910390fd5b612a456000838361236f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9591906139b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b6d90613b8e565b90600052602060002090601f016020900481019282612b8f5760008555612bd6565b82601f10612ba857805160ff1916838001178555612bd6565b82800160010185558215612bd6579182015b82811115612bd5578251825591602001919060010190612bba565b5b509050612be39190612be7565b5090565b5b80821115612c00576000816000905550600101612be8565b5090565b6000612c17612c12846138d3565b6138ae565b905082815260208101848484011115612c3357612c32613d8a565b5b612c3e848285613b4c565b509392505050565b6000612c59612c5484613904565b6138ae565b905082815260208101848484011115612c7557612c74613d8a565b5b612c80848285613b4c565b509392505050565b600081359050612c978161436d565b92915050565b600081359050612cac81614384565b92915050565b600081359050612cc18161439b565b92915050565b600081359050612cd6816143b2565b92915050565b600081519050612ceb816143b2565b92915050565b600082601f830112612d0657612d05613d85565b5b8135612d16848260208601612c04565b91505092915050565b600082601f830112612d3457612d33613d85565b5b8135612d44848260208601612c46565b91505092915050565b600081359050612d5c816143c9565b92915050565b600060208284031215612d7857612d77613d94565b5b6000612d8684828501612c88565b91505092915050565b600060208284031215612da557612da4613d94565b5b6000612db384828501612c9d565b91505092915050565b60008060408385031215612dd357612dd2613d94565b5b6000612de185828601612c88565b9250506020612df285828601612c88565b9150509250929050565b600080600060608486031215612e1557612e14613d94565b5b6000612e2386828701612c88565b9350506020612e3486828701612c88565b9250506040612e4586828701612d4d565b9150509250925092565b60008060008060808587031215612e6957612e68613d94565b5b6000612e7787828801612c88565b9450506020612e8887828801612c88565b9350506040612e9987828801612d4d565b925050606085013567ffffffffffffffff811115612eba57612eb9613d8f565b5b612ec687828801612cf1565b91505092959194509250565b60008060408385031215612ee957612ee8613d94565b5b6000612ef785828601612c88565b9250506020612f0885828601612cb2565b9150509250929050565b60008060408385031215612f2957612f28613d94565b5b6000612f3785828601612c88565b9250506020612f4885828601612d4d565b9150509250929050565b600060208284031215612f6857612f67613d94565b5b6000612f7684828501612cb2565b91505092915050565b600060208284031215612f9557612f94613d94565b5b6000612fa384828501612cc7565b91505092915050565b600060208284031215612fc257612fc1613d94565b5b6000612fd084828501612cdc565b91505092915050565b600060208284031215612fef57612fee613d94565b5b600082013567ffffffffffffffff81111561300d5761300c613d8f565b5b61301984828501612d1f565b91505092915050565b60006020828403121561303857613037613d94565b5b600061304684828501612d4d565b91505092915050565b600061305b83836134ab565b60208301905092915050565b61307081613ac6565b82525050565b600061308182613945565b61308b8185613973565b935061309683613935565b8060005b838110156130c75781516130ae888261304f565b97506130b983613966565b92505060018101905061309a565b5085935050505092915050565b6130dd81613aea565b82525050565b60006130ee82613950565b6130f88185613984565b9350613108818560208601613b5b565b61311181613d99565b840191505092915050565b60006131278261395b565b6131318185613995565b9350613141818560208601613b5b565b61314a81613d99565b840191505092915050565b60006131608261395b565b61316a81856139a6565b935061317a818560208601613b5b565b80840191505092915050565b6000613193602b83613995565b915061319e82613daa565b604082019050919050565b60006131b6603283613995565b91506131c182613df9565b604082019050919050565b60006131d9602683613995565b91506131e482613e48565b604082019050919050565b60006131fc601c83613995565b915061320782613e97565b602082019050919050565b600061321f602483613995565b915061322a82613ec0565b604082019050919050565b6000613242601983613995565b915061324d82613f0f565b602082019050919050565b6000613265600983613995565b915061327082613f38565b602082019050919050565b6000613288602c83613995565b915061329382613f61565b604082019050919050565b60006132ab603883613995565b91506132b682613fb0565b604082019050919050565b60006132ce602a83613995565b91506132d982613fff565b604082019050919050565b60006132f1602983613995565b91506132fc8261404e565b604082019050919050565b6000613314602083613995565b915061331f8261409d565b602082019050919050565b6000613337600883613995565b9150613342826140c6565b602082019050919050565b600061335a602c83613995565b9150613365826140ef565b604082019050919050565b600061337d602083613995565b91506133888261413e565b602082019050919050565b60006133a0602983613995565b91506133ab82614167565b604082019050919050565b60006133c3602f83613995565b91506133ce826141b6565b604082019050919050565b60006133e6601183613995565b91506133f182614205565b602082019050919050565b6000613409602183613995565b91506134148261422e565b604082019050919050565b600061342c600a83613995565b91506134378261427d565b602082019050919050565b600061344f603183613995565b915061345a826142a6565b604082019050919050565b6000613472602c83613995565b915061347d826142f5565b604082019050919050565b6000613495600e83613995565b91506134a082614344565b602082019050919050565b6134b481613b42565b82525050565b6134c381613b42565b82525050565b60006134d58285613155565b91506134e18284613155565b91508190509392505050565b60006020820190506135026000830184613067565b92915050565b600060808201905061351d6000830187613067565b61352a6020830186613067565b61353760408301856134ba565b818103606083015261354981846130e3565b905095945050505050565b6000602082019050818103600083015261356e8184613076565b905092915050565b600060208201905061358b60008301846130d4565b92915050565b600060208201905081810360008301526135ab818461311c565b905092915050565b600060208201905081810360008301526135cc81613186565b9050919050565b600060208201905081810360008301526135ec816131a9565b9050919050565b6000602082019050818103600083015261360c816131cc565b9050919050565b6000602082019050818103600083015261362c816131ef565b9050919050565b6000602082019050818103600083015261364c81613212565b9050919050565b6000602082019050818103600083015261366c81613235565b9050919050565b6000602082019050818103600083015261368c81613258565b9050919050565b600060208201905081810360008301526136ac8161327b565b9050919050565b600060208201905081810360008301526136cc8161329e565b9050919050565b600060208201905081810360008301526136ec816132c1565b9050919050565b6000602082019050818103600083015261370c816132e4565b9050919050565b6000602082019050818103600083015261372c81613307565b9050919050565b6000602082019050818103600083015261374c8161332a565b9050919050565b6000602082019050818103600083015261376c8161334d565b9050919050565b6000602082019050818103600083015261378c81613370565b9050919050565b600060208201905081810360008301526137ac81613393565b9050919050565b600060208201905081810360008301526137cc816133b6565b9050919050565b600060208201905081810360008301526137ec816133d9565b9050919050565b6000602082019050818103600083015261380c816133fc565b9050919050565b6000602082019050818103600083015261382c8161341f565b9050919050565b6000602082019050818103600083015261384c81613442565b9050919050565b6000602082019050818103600083015261386c81613465565b9050919050565b6000602082019050818103600083015261388c81613488565b9050919050565b60006020820190506138a860008301846134ba565b92915050565b60006138b86138c9565b90506138c48282613bc0565b919050565b6000604051905090565b600067ffffffffffffffff8211156138ee576138ed613d56565b5b6138f782613d99565b9050602081019050919050565b600067ffffffffffffffff82111561391f5761391e613d56565b5b61392882613d99565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139bc82613b42565b91506139c783613b42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139fc576139fb613c6b565b5b828201905092915050565b6000613a1282613b42565b9150613a1d83613b42565b925082613a2d57613a2c613c9a565b5b828204905092915050565b6000613a4382613b42565b9150613a4e83613b42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a8757613a86613c6b565b5b828202905092915050565b6000613a9d82613b42565b9150613aa883613b42565b925082821015613abb57613aba613c6b565b5b828203905092915050565b6000613ad182613b22565b9050919050565b6000613ae382613b22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b79578082015181840152602081019050613b5e565b83811115613b88576000848401525b50505050565b60006002820490506001821680613ba657607f821691505b60208210811415613bba57613bb9613cc9565b5b50919050565b613bc982613d99565b810181811067ffffffffffffffff82111715613be857613be7613d56565b5b80604052505050565b6000613bfc82613b42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2f57613c2e613c6b565b5b600182019050919050565b6000613c4582613b42565b9150613c5083613b42565b925082613c6057613c5f613c9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f63616c6c6572206e6f7420646576000000000000000000000000000000000000600082015250565b61437681613ac6565b811461438157600080fd5b50565b61438d81613ad8565b811461439857600080fd5b50565b6143a481613aea565b81146143af57600080fd5b50565b6143bb81613af6565b81146143c657600080fd5b50565b6143d281613b42565b81146143dd57600080fd5b5056fea2646970667358221220b8960f3c1f25f47fc7ffc0dfbaf06d011ae573bf19ffcdce6c17c99d9e1facbd64736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001768747470733a2f2f6170692e64656174682e63796f752f000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://api.death.cyou/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [2] : 68747470733a2f2f6170692e64656174682e63796f752f000000000000000000
Deployed Bytecode Sourcemap
42870:2329:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36743:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23303:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24770:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24300:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37396:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25660:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44397:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37064:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26036:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37586:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44644:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42923:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18303:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22997:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22727:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18042:148;;;;;;;;;;;;;:::i;:::-;;43470:519;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44754:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45106:90;;;:::i;:::-;;17392:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44008:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23472:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25063:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43239:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26258:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43109:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23647:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25429:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18898:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36743:237;36845:4;36884:35;36869:50;;;:11;:50;;;;:103;;;;36936:36;36960:11;36936:23;:36::i;:::-;36869:103;36862:110;;36743:237;;;:::o;23303:100::-;23357:13;23390:5;23383:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23303:100;:::o;24770:221::-;24846:7;24874:16;24882:7;24874;:16::i;:::-;24866:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24959:15;:24;24975:7;24959:24;;;;;;;;;;;;;;;;;;;;;24952:31;;24770:221;;;:::o;24300:404::-;24381:13;24397:23;24412:7;24397:14;:23::i;:::-;24381:39;;24445:5;24439:11;;:2;:11;;;;24431:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24525:5;24509:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;24534:44;24558:5;24565:12;:10;:12::i;:::-;24534:23;:44::i;:::-;24509:69;24501:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;24675:21;24684:2;24688:7;24675:8;:21::i;:::-;24370:334;24300:404;;:::o;37396:113::-;37457:7;37484:10;:17;;;;37477:24;;37396:113;:::o;25660:305::-;25821:41;25840:12;:10;:12::i;:::-;25854:7;25821:18;:41::i;:::-;25813:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25929:28;25939:4;25945:2;25949:7;25929:9;:28::i;:::-;25660:305;;;:::o;44397:113::-;44454:7;44495:6;43142:17;44483:18;;;;:::i;:::-;44476:25;;44397:113;;;:::o;37064:256::-;37161:7;37197:23;37214:5;37197:16;:23::i;:::-;37189:5;:31;37181:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37286:12;:19;37299:5;37286:19;;;;;;;;;;;;;;;:26;37306:5;37286:26;;;;;;;;;;;;37279:33;;37064:256;;;;:::o;26036:151::-;26140:39;26157:4;26163:2;26167:7;26140:39;;;;;;;;;;;;:16;:39::i;:::-;26036:151;;;:::o;37586:233::-;37661:7;37697:30;:28;:30::i;:::-;37689:5;:38;37681:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37794:10;37805:5;37794:17;;;;;;;;:::i;:::-;;;;;;;;;;37787:24;;37586:233;;;:::o;44644:102::-;17623:12;:10;:12::i;:::-;17612:23;;:7;:5;:7::i;:::-;:23;;;17604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44731:7:::1;44715:13;:23;;;;;;;;;;;;:::i;:::-;;44644:102:::0;:::o;42923:36::-;42955:4;42923:36;:::o;18303:145::-;18396:3;;;;;;;;;;;18382:17;;:10;:17;;;18374:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18436:4;18430:3;;:10;;;;;;;;;;;;;;;;;;18303:145;:::o;22997:239::-;23069:7;23089:13;23105:7;:16;23113:7;23105:16;;;;;;;;;;;;;;;;;;;;;23089:32;;23157:1;23140:19;;:5;:19;;;;23132:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23223:5;23216:12;;;22997:239;;;:::o;22727:208::-;22799:7;22844:1;22827:19;;:5;:19;;;;22819:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22911:9;:16;22921:5;22911:16;;;;;;;;;;;;;;;;22904:23;;22727:208;;;:::o;18042:148::-;17623:12;:10;:12::i;:::-;17612:23;;:7;:5;:7::i;:::-;:23;;;17604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18149:1:::1;18112:40;;18133:6;;;;;;;;;;;18112:40;;;;;;;;;;;;18180:1;18163:6;;:19;;;;;;;;;;;;;;;;;;18042:148::o:0;43470:519::-;43565:6;;;;;;;;;;;43551:20;;:10;:20;;;:34;;;;43575:10;;;;;;;;;;;43551:34;43543:43;;;;;;42955:4;43633:6;43001:3;43605:12;;:25;;;;:::i;:::-;:34;;;;:::i;:::-;:46;;43597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42955:4;43001:3;43684:12;;:25;;;;:::i;:::-;:36;43676:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;43762:2;43752:6;:12;;43744:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43811:13;43817:6;43811:5;:13::i;:::-;43798:9;:26;;43790:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43869:6;43865:117;43885:6;43881:1;:10;43865:117;;;43912:28;43922:3;43927:12;;43912:9;:28::i;:::-;43956:12;;:14;;;;;;;;;:::i;:::-;;;;;;43893:3;;;;;:::i;:::-;;;;43865:117;;;;43470:519;;:::o;44754:344::-;44815:16;44844:15;44862:17;44872:6;44862:9;:17::i;:::-;44844:35;;44892:25;44934:10;44920:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44892:53;;44960:6;44956:107;44976:10;44972:1;:14;44956:107;;;45021:30;45041:6;45049:1;45021:19;:30::i;:::-;45007:8;45016:1;45007:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44988:3;;;;;:::i;:::-;;;;44956:107;;;;45082:8;45075:15;;;;44754:344;;;:::o;45106:90::-;17623:12;:10;:12::i;:::-;17612:23;;:7;:5;:7::i;:::-;:23;;;17604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45165:14:::1;:12;:14::i;:::-;45106:90::o:0;17392:87::-;17438:7;17465:6;;;;;;;;;;;17458:13;;17392:87;:::o;44008:381::-;17623:12;:10;:12::i;:::-;17612:23;;:7;:5;:7::i;:::-;:23;;;17604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43001:3:::1;44107:6;44091:13;;:22;;;;:::i;:::-;:36;;44083:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43001:3;44160:13;;:26;44152:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44228:2;44218:6;:12;;44210:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;44268:6;44264:118;44284:6;44280:1;:10;44264:118;;;44311:29;44321:3;44326:13;;44311:9;:29::i;:::-;44355:13;;:15;;;;;;;;;:::i;:::-;;;;;;44292:3;;;;;:::i;:::-;;;;44264:118;;;;44008:381:::0;;:::o;23472:104::-;23528:13;23561:7;23554:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23472:104;:::o;25063:295::-;25178:12;:10;:12::i;:::-;25166:24;;:8;:24;;;;25158:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25278:8;25233:18;:32;25252:12;:10;:12::i;:::-;25233:32;;;;;;;;;;;;;;;:42;25266:8;25233:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25331:8;25302:48;;25317:12;:10;:12::i;:::-;25302:48;;;25341:8;25302:48;;;;;;:::i;:::-;;;;;;;;25063:295;;:::o;43239:103::-;17623:12;:10;:12::i;:::-;17612:23;;:7;:5;:7::i;:::-;:23;;;17604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43323:11:::1;43310:10;;:24;;;;;;;;;;;;;;;;;;43239:103:::0;:::o;26258:285::-;26390:41;26409:12;:10;:12::i;:::-;26423:7;26390:18;:41::i;:::-;26382:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26496:39;26510:4;26516:2;26520:7;26529:5;26496:13;:39::i;:::-;26258:285;;;;:::o;43109:50::-;43142:17;43109:50;:::o;23647:360::-;23720:13;23754:16;23762:7;23754;:16::i;:::-;23746:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23835:21;23859:10;:8;:10::i;:::-;23835:34;;23911:1;23893:7;23887:21;:25;:112;;;;;;;;;;;;;;;;;23952:7;23961:18;:7;:16;:18::i;:::-;23935:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23887:112;23880:119;;;23647:360;;;:::o;25429:164::-;25526:4;25550:18;:25;25569:5;25550:25;;;;;;;;;;;;;;;:35;25576:8;25550:35;;;;;;;;;;;;;;;;;;;;;;;;;25543:42;;25429:164;;;;:::o;18898:244::-;17623:12;:10;:12::i;:::-;17612:23;;:7;:5;:7::i;:::-;:23;;;17604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19007:1:::1;18987:22;;:8;:22;;;;18979:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19097:8;19068:38;;19089:6;;;;;;;;;;;19068:38;;;;;;;;;;;;19126:8;19117:6;;:17;;;;;;;;;;;;;;;;;;18898:244:::0;:::o;22371:292::-;22473:4;22512:25;22497:40;;;:11;:40;;;;:105;;;;22569:33;22554:48;;;:11;:48;;;;22497:105;:158;;;;22619:36;22643:11;22619:23;:36::i;:::-;22497:158;22490:165;;22371:292;;;:::o;28010:127::-;28075:4;28127:1;28099:30;;:7;:16;28107:7;28099:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28092:37;;28010:127;;;:::o;8156:98::-;8209:7;8236:10;8229:17;;8156:98;:::o;31894:174::-;31996:2;31969:15;:24;31985:7;31969:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32052:7;32048:2;32014:46;;32023:23;32038:7;32023:14;:23::i;:::-;32014:46;;;;;;;;;;;;31894:174;;:::o;28304:355::-;28397:4;28422:16;28430:7;28422;:16::i;:::-;28414:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28498:13;28514:23;28529:7;28514:14;:23::i;:::-;28498:39;;28567:5;28556:16;;:7;:16;;;:51;;;;28600:7;28576:31;;:20;28588:7;28576:11;:20::i;:::-;:31;;;28556:51;:94;;;;28611:39;28635:5;28642:7;28611:23;:39::i;:::-;28556:94;28548:103;;;28304:355;;;;:::o;31232:544::-;31357:4;31330:31;;:23;31345:7;31330:14;:23::i;:::-;:31;;;31322:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31440:1;31426:16;;:2;:16;;;;31418:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31496:39;31517:4;31523:2;31527:7;31496:20;:39::i;:::-;31600:29;31617:1;31621:7;31600:8;:29::i;:::-;31661:1;31642:9;:15;31652:4;31642:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31690:1;31673:9;:13;31683:2;31673:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31721:2;31702:7;:16;31710:7;31702:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31760:7;31756:2;31741:27;;31750:4;31741:27;;;;;;;;;;;;31232:544;;;:::o;29001:110::-;29077:26;29087:2;29091:7;29077:26;;;;;;;;;;;;:9;:26::i;:::-;29001:110;;:::o;18472:261::-;18524:15;18564:1;18542:21;:23;;;;:::i;:::-;18524:41;;18575:16;18616:7;18594:21;:29;;;;:::i;:::-;18575:48;;18642:3;;;;;;;;;;;18634:21;;:30;18656:7;18634:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18683:12;:10;:12::i;:::-;18675:30;;:40;18706:8;18675:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:219;;18472:261::o;27425:272::-;27539:28;27549:4;27555:2;27559:7;27539:9;:28::i;:::-;27586:48;27609:4;27615:2;27619:7;27628:5;27586:22;:48::i;:::-;27578:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27425:272;;;;:::o;44518:114::-;44578:13;44611;44604:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44518:114;:::o;19375:723::-;19431:13;19661:1;19652:5;:10;19648:53;;;19679:10;;;;;;;;;;;;;;;;;;;;;19648:53;19711:12;19726:5;19711:20;;19742:14;19767:78;19782:1;19774:4;:9;19767:78;;19800:8;;;;;:::i;:::-;;;;19831:2;19823:10;;;;;:::i;:::-;;;19767:78;;;19855:19;19887:6;19877:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19855:39;;19905:154;19921:1;19912:5;:10;19905:154;;19949:1;19939:11;;;;;:::i;:::-;;;20016:2;20008:5;:10;;;;:::i;:::-;19995:2;:24;;;;:::i;:::-;19982:39;;19965:6;19972;19965:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20045:2;20036:11;;;;;:::i;:::-;;;19905:154;;;20083:6;20069:21;;;;;19375:723;;;;:::o;9206:157::-;9291:4;9330:25;9315:40;;;:11;:40;;;;9308:47;;9206:157;;;:::o;38432:555::-;38542:45;38569:4;38575:2;38579:7;38542:26;:45::i;:::-;38620:1;38604:18;;:4;:18;;;38600:187;;;38639:40;38671:7;38639:31;:40::i;:::-;38600:187;;;38709:2;38701:10;;:4;:10;;;38697:90;;38728:47;38761:4;38767:7;38728:32;:47::i;:::-;38697:90;38600:187;38815:1;38801:16;;:2;:16;;;38797:183;;;38834:45;38871:7;38834:36;:45::i;:::-;38797:183;;;38907:4;38901:10;;:2;:10;;;38897:83;;38928:40;38956:2;38960:7;38928:27;:40::i;:::-;38897:83;38797:183;38432:555;;;:::o;29338:250::-;29434:18;29440:2;29444:7;29434:5;:18::i;:::-;29471:54;29502:1;29506:2;29510:7;29519:5;29471:22;:54::i;:::-;29463:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;29338:250;;;:::o;32633:843::-;32754:4;32780:15;:2;:13;;;:15::i;:::-;32776:693;;;32832:2;32816:36;;;32853:12;:10;:12::i;:::-;32867:4;32873:7;32882:5;32816:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32812:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33079:1;33062:6;:13;:18;33058:341;;;33105:60;;;;;;;;;;:::i;:::-;;;;;;;;33058:341;33349:6;33343:13;33334:6;33330:2;33326:15;33319:38;32812:602;32949:45;;;32939:55;;;:6;:55;;;;32932:62;;;;;32776:693;33453:4;33446:11;;32633:843;;;;;;;:::o;34089:93::-;;;;:::o;39710:164::-;39814:10;:17;;;;39787:15;:24;39803:7;39787:24;;;;;;;;;;;:44;;;;39842:10;39858:7;39842:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39710:164;:::o;40501:988::-;40767:22;40817:1;40792:22;40809:4;40792:16;:22::i;:::-;:26;;;;:::i;:::-;40767:51;;40829:18;40850:17;:26;40868:7;40850:26;;;;;;;;;;;;40829:47;;40997:14;40983:10;:28;40979:328;;41028:19;41050:12;:18;41063:4;41050:18;;;;;;;;;;;;;;;:34;41069:14;41050:34;;;;;;;;;;;;41028:56;;41134:11;41101:12;:18;41114:4;41101:18;;;;;;;;;;;;;;;:30;41120:10;41101:30;;;;;;;;;;;:44;;;;41251:10;41218:17;:30;41236:11;41218:30;;;;;;;;;;;:43;;;;41013:294;40979:328;41403:17;:26;41421:7;41403:26;;;;;;;;;;;41396:33;;;41447:12;:18;41460:4;41447:18;;;;;;;;;;;;;;;:34;41466:14;41447:34;;;;;;;;;;;41440:41;;;40582:907;;40501:988;;:::o;41784:1079::-;42037:22;42082:1;42062:10;:17;;;;:21;;;;:::i;:::-;42037:46;;42094:18;42115:15;:24;42131:7;42115:24;;;;;;;;;;;;42094:45;;42466:19;42488:10;42499:14;42488:26;;;;;;;;:::i;:::-;;;;;;;;;;42466:48;;42552:11;42527:10;42538;42527:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42663:10;42632:15;:28;42648:11;42632:28;;;;;;;;;;;:41;;;;42804:15;:24;42820:7;42804:24;;;;;;;;;;;42797:31;;;42839:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41855:1008;;;41784:1079;:::o;39288:221::-;39373:14;39390:20;39407:2;39390:16;:20::i;:::-;39373:37;;39448:7;39421:12;:16;39434:2;39421:16;;;;;;;;;;;;;;;:24;39438:6;39421:24;;;;;;;;;;;:34;;;;39495:6;39466:17;:26;39484:7;39466:26;;;;;;;;;;;:35;;;;39362:147;39288:221;;:::o;29924:382::-;30018:1;30004:16;;:2;:16;;;;29996:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30077:16;30085:7;30077;:16::i;:::-;30076:17;30068:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30139:45;30168:1;30172:2;30176:7;30139:20;:45::i;:::-;30214:1;30197:9;:13;30207:2;30197:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30245:2;30226:7;:16;30234:7;30226:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30290:7;30286:2;30265:33;;30282:1;30265:33;;;;;;;;;;;;29924:382;;:::o;2992:239::-;3052:4;3077:12;3188:7;3176:20;3168:28;;3222:1;3215:4;:8;3208:15;;;2992: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:365::-;12684:3;12705:66;12769:1;12764:3;12705:66;:::i;:::-;12698:73;;12780:93;12869:3;12780:93;:::i;:::-;12898:2;12893:3;12889:12;12882:19;;12688:219;;;:::o;12913:366::-;13055:3;13076:67;13140:2;13135:3;13076:67;:::i;:::-;13069:74;;13152:93;13241:3;13152:93;:::i;:::-;13270:2;13265:3;13261:12;13254:19;;13059:220;;;:::o;13285:366::-;13427:3;13448:67;13512:2;13507:3;13448:67;:::i;:::-;13441:74;;13524:93;13613:3;13524:93;:::i;:::-;13642:2;13637:3;13633:12;13626:19;;13431:220;;;:::o;13657:366::-;13799:3;13820:67;13884:2;13879:3;13820:67;:::i;:::-;13813:74;;13896:93;13985:3;13896:93;:::i;:::-;14014:2;14009:3;14005:12;13998:19;;13803:220;;;:::o;14029:366::-;14171:3;14192:67;14256:2;14251:3;14192:67;:::i;:::-;14185:74;;14268:93;14357:3;14268:93;:::i;:::-;14386:2;14381:3;14377:12;14370:19;;14175:220;;;:::o;14401:366::-;14543:3;14564:67;14628:2;14623:3;14564:67;:::i;:::-;14557:74;;14640:93;14729:3;14640:93;:::i;:::-;14758:2;14753:3;14749:12;14742:19;;14547:220;;;:::o;14773:365::-;14915:3;14936:66;15000:1;14995:3;14936:66;:::i;:::-;14929:73;;15011:93;15100:3;15011:93;:::i;:::-;15129:2;15124:3;15120:12;15113:19;;14919:219;;;:::o;15144:366::-;15286:3;15307:67;15371:2;15366:3;15307:67;:::i;:::-;15300:74;;15383:93;15472:3;15383:93;:::i;:::-;15501:2;15496:3;15492:12;15485:19;;15290:220;;;:::o;15516:366::-;15658:3;15679:67;15743:2;15738:3;15679:67;:::i;:::-;15672:74;;15755:93;15844:3;15755:93;:::i;:::-;15873:2;15868:3;15864:12;15857:19;;15662:220;;;:::o;15888:366::-;16030:3;16051:67;16115:2;16110:3;16051:67;:::i;:::-;16044:74;;16127:93;16216:3;16127:93;:::i;:::-;16245:2;16240:3;16236:12;16229:19;;16034:220;;;:::o;16260:366::-;16402:3;16423:67;16487:2;16482:3;16423:67;:::i;:::-;16416:74;;16499:93;16588:3;16499:93;:::i;:::-;16617:2;16612:3;16608:12;16601:19;;16406:220;;;:::o;16632:366::-;16774:3;16795:67;16859:2;16854:3;16795:67;:::i;:::-;16788:74;;16871:93;16960:3;16871:93;:::i;:::-;16989:2;16984:3;16980:12;16973:19;;16778:220;;;:::o;17004:366::-;17146:3;17167:67;17231:2;17226:3;17167:67;:::i;:::-;17160:74;;17243:93;17332:3;17243:93;:::i;:::-;17361:2;17356:3;17352:12;17345:19;;17150:220;;;:::o;17376:366::-;17518:3;17539:67;17603:2;17598:3;17539:67;:::i;:::-;17532:74;;17615:93;17704:3;17615:93;:::i;:::-;17733:2;17728:3;17724:12;17717:19;;17522:220;;;:::o;17748:366::-;17890:3;17911:67;17975:2;17970:3;17911:67;:::i;:::-;17904:74;;17987:93;18076:3;17987:93;:::i;:::-;18105:2;18100:3;18096:12;18089:19;;17894:220;;;:::o;18120:366::-;18262:3;18283:67;18347:2;18342:3;18283:67;:::i;:::-;18276:74;;18359:93;18448:3;18359:93;:::i;:::-;18477:2;18472:3;18468:12;18461:19;;18266:220;;;:::o;18492:366::-;18634:3;18655:67;18719:2;18714:3;18655:67;:::i;:::-;18648:74;;18731:93;18820:3;18731:93;:::i;:::-;18849:2;18844:3;18840:12;18833:19;;18638:220;;;:::o;18864:108::-;18941:24;18959:5;18941:24;:::i;:::-;18936:3;18929:37;18919:53;;:::o;18978:118::-;19065:24;19083:5;19065:24;:::i;:::-;19060:3;19053:37;19043:53;;:::o;19102:435::-;19282:3;19304:95;19395:3;19386:6;19304:95;:::i;:::-;19297:102;;19416:95;19507:3;19498:6;19416:95;:::i;:::-;19409:102;;19528:3;19521:10;;19286:251;;;;;:::o;19543:222::-;19636:4;19674:2;19663:9;19659:18;19651:26;;19687:71;19755:1;19744:9;19740:17;19731:6;19687:71;:::i;:::-;19641:124;;;;:::o;19771:640::-;19966:4;20004:3;19993:9;19989:19;19981:27;;20018:71;20086:1;20075:9;20071:17;20062:6;20018:71;:::i;:::-;20099:72;20167:2;20156:9;20152:18;20143:6;20099:72;:::i;:::-;20181;20249:2;20238:9;20234:18;20225:6;20181:72;:::i;:::-;20300:9;20294:4;20290:20;20285:2;20274:9;20270:18;20263:48;20328:76;20399:4;20390:6;20328:76;:::i;:::-;20320:84;;19971:440;;;;;;;:::o;20417:373::-;20560:4;20598:2;20587:9;20583:18;20575:26;;20647:9;20641:4;20637:20;20633:1;20622:9;20618:17;20611:47;20675:108;20778:4;20769:6;20675:108;:::i;:::-;20667:116;;20565:225;;;;:::o;20796:210::-;20883:4;20921:2;20910:9;20906:18;20898:26;;20934:65;20996:1;20985:9;20981:17;20972:6;20934:65;:::i;:::-;20888:118;;;;:::o;21012:313::-;21125:4;21163:2;21152:9;21148:18;21140:26;;21212:9;21206:4;21202:20;21198:1;21187:9;21183:17;21176:47;21240:78;21313:4;21304:6;21240:78;:::i;:::-;21232:86;;21130:195;;;;:::o;21331:419::-;21497:4;21535:2;21524:9;21520:18;21512:26;;21584:9;21578:4;21574:20;21570:1;21559:9;21555:17;21548:47;21612:131;21738:4;21612:131;:::i;:::-;21604:139;;21502:248;;;:::o;21756:419::-;21922:4;21960:2;21949:9;21945:18;21937:26;;22009:9;22003:4;21999:20;21995:1;21984:9;21980:17;21973:47;22037:131;22163:4;22037:131;:::i;:::-;22029:139;;21927:248;;;:::o;22181:419::-;22347:4;22385:2;22374:9;22370:18;22362:26;;22434:9;22428:4;22424:20;22420:1;22409:9;22405:17;22398:47;22462:131;22588:4;22462:131;:::i;:::-;22454:139;;22352:248;;;:::o;22606:419::-;22772:4;22810:2;22799:9;22795:18;22787:26;;22859:9;22853:4;22849:20;22845:1;22834:9;22830:17;22823:47;22887:131;23013:4;22887:131;:::i;:::-;22879:139;;22777:248;;;:::o;23031:419::-;23197:4;23235:2;23224:9;23220:18;23212:26;;23284:9;23278:4;23274:20;23270:1;23259:9;23255:17;23248:47;23312:131;23438:4;23312:131;:::i;:::-;23304:139;;23202:248;;;:::o;23456:419::-;23622:4;23660:2;23649:9;23645:18;23637:26;;23709:9;23703:4;23699:20;23695:1;23684:9;23680:17;23673:47;23737:131;23863:4;23737:131;:::i;:::-;23729:139;;23627:248;;;:::o;23881:419::-;24047:4;24085:2;24074:9;24070:18;24062:26;;24134:9;24128:4;24124:20;24120:1;24109:9;24105:17;24098:47;24162:131;24288:4;24162:131;:::i;:::-;24154:139;;24052:248;;;:::o;24306:419::-;24472:4;24510:2;24499:9;24495:18;24487:26;;24559:9;24553:4;24549:20;24545:1;24534:9;24530:17;24523:47;24587:131;24713:4;24587:131;:::i;:::-;24579:139;;24477:248;;;:::o;24731:419::-;24897:4;24935:2;24924:9;24920:18;24912:26;;24984:9;24978:4;24974:20;24970:1;24959:9;24955:17;24948:47;25012:131;25138:4;25012:131;:::i;:::-;25004:139;;24902:248;;;:::o;25156:419::-;25322:4;25360:2;25349:9;25345:18;25337:26;;25409:9;25403:4;25399:20;25395:1;25384:9;25380:17;25373:47;25437:131;25563:4;25437:131;:::i;:::-;25429:139;;25327:248;;;:::o;25581:419::-;25747:4;25785:2;25774:9;25770:18;25762:26;;25834:9;25828:4;25824:20;25820:1;25809:9;25805:17;25798:47;25862:131;25988:4;25862:131;:::i;:::-;25854:139;;25752:248;;;:::o;26006:419::-;26172:4;26210:2;26199:9;26195:18;26187:26;;26259:9;26253:4;26249:20;26245:1;26234:9;26230:17;26223:47;26287:131;26413:4;26287:131;:::i;:::-;26279:139;;26177:248;;;:::o;26431:419::-;26597:4;26635:2;26624:9;26620:18;26612:26;;26684:9;26678:4;26674:20;26670:1;26659:9;26655:17;26648:47;26712:131;26838:4;26712:131;:::i;:::-;26704:139;;26602:248;;;:::o;26856:419::-;27022:4;27060:2;27049:9;27045:18;27037:26;;27109:9;27103:4;27099:20;27095:1;27084:9;27080:17;27073:47;27137:131;27263:4;27137:131;:::i;:::-;27129:139;;27027:248;;;:::o;27281:419::-;27447:4;27485:2;27474:9;27470:18;27462:26;;27534:9;27528:4;27524:20;27520:1;27509:9;27505:17;27498:47;27562:131;27688:4;27562:131;:::i;:::-;27554:139;;27452:248;;;:::o;27706:419::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27959:9;27953:4;27949:20;27945:1;27934:9;27930:17;27923:47;27987:131;28113:4;27987:131;:::i;:::-;27979:139;;27877:248;;;:::o;28131:419::-;28297:4;28335:2;28324:9;28320:18;28312:26;;28384:9;28378:4;28374:20;28370:1;28359:9;28355:17;28348:47;28412:131;28538:4;28412:131;:::i;:::-;28404:139;;28302:248;;;:::o;28556:419::-;28722:4;28760:2;28749:9;28745:18;28737:26;;28809:9;28803:4;28799:20;28795:1;28784:9;28780:17;28773:47;28837:131;28963:4;28837:131;:::i;:::-;28829:139;;28727:248;;;:::o;28981:419::-;29147:4;29185:2;29174:9;29170:18;29162:26;;29234:9;29228:4;29224:20;29220:1;29209:9;29205:17;29198:47;29262:131;29388:4;29262:131;:::i;:::-;29254:139;;29152:248;;;:::o;29406:419::-;29572:4;29610:2;29599:9;29595:18;29587:26;;29659:9;29653:4;29649:20;29645:1;29634:9;29630:17;29623:47;29687:131;29813:4;29687:131;:::i;:::-;29679:139;;29577:248;;;:::o;29831:419::-;29997:4;30035:2;30024:9;30020:18;30012:26;;30084:9;30078:4;30074:20;30070:1;30059:9;30055:17;30048:47;30112:131;30238:4;30112:131;:::i;:::-;30104:139;;30002:248;;;:::o;30256:419::-;30422:4;30460:2;30449:9;30445:18;30437:26;;30509:9;30503:4;30499:20;30495:1;30484:9;30480:17;30473:47;30537:131;30663:4;30537:131;:::i;:::-;30529:139;;30427:248;;;:::o;30681:419::-;30847:4;30885:2;30874:9;30870:18;30862:26;;30934:9;30928:4;30924:20;30920:1;30909:9;30905:17;30898:47;30962:131;31088:4;30962:131;:::i;:::-;30954:139;;30852:248;;;:::o;31106:222::-;31199:4;31237:2;31226:9;31222:18;31214:26;;31250:71;31318:1;31307:9;31303:17;31294:6;31250:71;:::i;:::-;31204:124;;;;:::o;31334:129::-;31368:6;31395:20;;:::i;:::-;31385:30;;31424:33;31452:4;31444:6;31424:33;:::i;:::-;31375:88;;;:::o;31469:75::-;31502:6;31535:2;31529:9;31519:19;;31509:35;:::o;31550:307::-;31611:4;31701:18;31693:6;31690:30;31687:2;;;31723:18;;:::i;:::-;31687:2;31761:29;31783:6;31761:29;:::i;:::-;31753:37;;31845:4;31839;31835:15;31827:23;;31616:241;;;:::o;31863:308::-;31925:4;32015:18;32007:6;32004:30;32001:2;;;32037:18;;:::i;:::-;32001:2;32075:29;32097:6;32075:29;:::i;:::-;32067:37;;32159:4;32153;32149:15;32141:23;;31930:241;;;:::o;32177:132::-;32244:4;32267:3;32259:11;;32297:4;32292:3;32288:14;32280:22;;32249:60;;;:::o;32315:114::-;32382:6;32416:5;32410:12;32400:22;;32389:40;;;:::o;32435:98::-;32486:6;32520:5;32514:12;32504:22;;32493:40;;;:::o;32539:99::-;32591:6;32625:5;32619:12;32609:22;;32598:40;;;:::o;32644:113::-;32714:4;32746;32741:3;32737:14;32729:22;;32719:38;;;:::o;32763:184::-;32862:11;32896:6;32891:3;32884:19;32936:4;32931:3;32927:14;32912:29;;32874:73;;;;:::o;32953:168::-;33036:11;33070:6;33065:3;33058:19;33110:4;33105:3;33101:14;33086:29;;33048:73;;;;:::o;33127:169::-;33211:11;33245:6;33240:3;33233:19;33285:4;33280:3;33276:14;33261:29;;33223:73;;;;:::o;33302:148::-;33404:11;33441:3;33426:18;;33416:34;;;;:::o;33456:305::-;33496:3;33515:20;33533:1;33515:20;:::i;:::-;33510:25;;33549:20;33567:1;33549:20;:::i;:::-;33544:25;;33703:1;33635:66;33631:74;33628:1;33625:81;33622:2;;;33709:18;;:::i;:::-;33622:2;33753:1;33750;33746:9;33739:16;;33500:261;;;;:::o;33767:185::-;33807:1;33824:20;33842:1;33824:20;:::i;:::-;33819:25;;33858:20;33876:1;33858:20;:::i;:::-;33853:25;;33897:1;33887:2;;33902:18;;:::i;:::-;33887:2;33944:1;33941;33937:9;33932:14;;33809:143;;;;:::o;33958:348::-;33998:7;34021:20;34039:1;34021:20;:::i;:::-;34016:25;;34055:20;34073:1;34055:20;:::i;:::-;34050:25;;34243:1;34175:66;34171:74;34168:1;34165:81;34160:1;34153:9;34146:17;34142:105;34139:2;;;34250:18;;:::i;:::-;34139:2;34298:1;34295;34291:9;34280:20;;34006:300;;;;:::o;34312:191::-;34352:4;34372:20;34390:1;34372:20;:::i;:::-;34367:25;;34406:20;34424:1;34406:20;:::i;:::-;34401:25;;34445:1;34442;34439:8;34436:2;;;34450:18;;:::i;:::-;34436:2;34495:1;34492;34488:9;34480:17;;34357:146;;;;:::o;34509:96::-;34546:7;34575:24;34593:5;34575:24;:::i;:::-;34564:35;;34554:51;;;:::o;34611:104::-;34656:7;34685:24;34703:5;34685:24;:::i;:::-;34674:35;;34664:51;;;:::o;34721:90::-;34755:7;34798:5;34791:13;34784:21;34773:32;;34763:48;;;:::o;34817:149::-;34853:7;34893:66;34886:5;34882:78;34871:89;;34861:105;;;:::o;34972:126::-;35009:7;35049:42;35042:5;35038:54;35027:65;;35017:81;;;:::o;35104:77::-;35141:7;35170:5;35159:16;;35149:32;;;:::o;35187:154::-;35271:6;35266:3;35261;35248:30;35333:1;35324:6;35319:3;35315:16;35308:27;35238:103;;;:::o;35347:307::-;35415:1;35425:113;35439:6;35436:1;35433:13;35425:113;;;35524:1;35519:3;35515:11;35509:18;35505:1;35500:3;35496:11;35489:39;35461:2;35458:1;35454:10;35449:15;;35425:113;;;35556:6;35553:1;35550:13;35547:2;;;35636:1;35627:6;35622:3;35618:16;35611:27;35547:2;35396:258;;;;:::o;35660:320::-;35704:6;35741:1;35735:4;35731:12;35721:22;;35788:1;35782:4;35778:12;35809:18;35799:2;;35865:4;35857:6;35853:17;35843:27;;35799:2;35927;35919:6;35916:14;35896:18;35893:38;35890:2;;;35946:18;;:::i;:::-;35890:2;35711:269;;;;:::o;35986:281::-;36069:27;36091:4;36069:27;:::i;:::-;36061:6;36057:40;36199:6;36187:10;36184:22;36163:18;36151:10;36148:34;36145:62;36142:2;;;36210:18;;:::i;:::-;36142:2;36250:10;36246:2;36239:22;36029:238;;;:::o;36273:233::-;36312:3;36335:24;36353:5;36335:24;:::i;:::-;36326:33;;36381:66;36374:5;36371:77;36368:2;;;36451:18;;:::i;:::-;36368:2;36498:1;36491:5;36487:13;36480:20;;36316:190;;;:::o;36512:176::-;36544:1;36561:20;36579:1;36561:20;:::i;:::-;36556:25;;36595:20;36613:1;36595:20;:::i;:::-;36590:25;;36634:1;36624:2;;36639:18;;:::i;:::-;36624:2;36680:1;36677;36673:9;36668:14;;36546:142;;;;:::o;36694:180::-;36742:77;36739:1;36732:88;36839:4;36836:1;36829:15;36863:4;36860:1;36853:15;36880:180;36928:77;36925:1;36918:88;37025:4;37022:1;37015:15;37049:4;37046:1;37039:15;37066:180;37114:77;37111:1;37104:88;37211:4;37208:1;37201:15;37235:4;37232:1;37225:15;37252:180;37300:77;37297:1;37290:88;37397:4;37394:1;37387:15;37421:4;37418:1;37411:15;37438:180;37486:77;37483:1;37476:88;37583:4;37580:1;37573:15;37607:4;37604:1;37597:15;37624:180;37672:77;37669:1;37662:88;37769:4;37766:1;37759:15;37793:4;37790:1;37783:15;37810:117;37919:1;37916;37909:12;37933:117;38042:1;38039;38032:12;38056:117;38165:1;38162;38155:12;38179:117;38288:1;38285;38278:12;38302:102;38343:6;38394:2;38390:7;38385:2;38378:5;38374:14;38370:28;38360:38;;38350:54;;;:::o;38410:230::-;38550:34;38546:1;38538:6;38534:14;38527:58;38619:13;38614:2;38606:6;38602:15;38595:38;38516:124;:::o;38646:237::-;38786:34;38782:1;38774:6;38770:14;38763:58;38855:20;38850:2;38842:6;38838:15;38831:45;38752:131;:::o;38889:225::-;39029:34;39025:1;39017:6;39013:14;39006:58;39098:8;39093:2;39085:6;39081:15;39074:33;38995:119;:::o;39120:178::-;39260:30;39256:1;39248:6;39244:14;39237:54;39226:72;:::o;39304:223::-;39444:34;39440:1;39432:6;39428:14;39421:58;39513:6;39508:2;39500:6;39496:15;39489:31;39410:117;:::o;39533:175::-;39673:27;39669:1;39661:6;39657:14;39650:51;39639:69;:::o;39714:159::-;39854:11;39850:1;39842:6;39838:14;39831:35;39820:53;:::o;39879:231::-;40019:34;40015:1;40007:6;40003:14;39996:58;40088:14;40083:2;40075:6;40071:15;40064:39;39985:125;:::o;40116:243::-;40256:34;40252:1;40244:6;40240:14;40233:58;40325:26;40320:2;40312:6;40308:15;40301:51;40222:137;:::o;40365:229::-;40505:34;40501:1;40493:6;40489:14;40482:58;40574:12;40569:2;40561:6;40557:15;40550:37;40471:123;:::o;40600:228::-;40740:34;40736:1;40728:6;40724:14;40717:58;40809:11;40804:2;40796:6;40792:15;40785:36;40706:122;:::o;40834:182::-;40974:34;40970:1;40962:6;40958:14;40951:58;40940:76;:::o;41022:158::-;41162:10;41158:1;41150:6;41146:14;41139:34;41128:52;:::o;41186:231::-;41326:34;41322:1;41314:6;41310:14;41303:58;41395:14;41390:2;41382:6;41378:15;41371:39;41292:125;:::o;41423:182::-;41563:34;41559:1;41551:6;41547:14;41540:58;41529:76;:::o;41611:228::-;41751:34;41747:1;41739:6;41735:14;41728:58;41820:11;41815:2;41807:6;41803:15;41796:36;41717:122;:::o;41845:234::-;41985:34;41981:1;41973:6;41969:14;41962:58;42054:17;42049:2;42041:6;42037:15;42030:42;41951:128;:::o;42085:167::-;42225:19;42221:1;42213:6;42209:14;42202:43;42191:61;:::o;42258:220::-;42398:34;42394:1;42386:6;42382:14;42375:58;42467:3;42462:2;42454:6;42450:15;42443:28;42364:114;:::o;42484:160::-;42624:12;42620:1;42612:6;42608:14;42601:36;42590:54;:::o;42650:236::-;42790:34;42786:1;42778:6;42774:14;42767:58;42859:19;42854:2;42846:6;42842:15;42835:44;42756:130;:::o;42892:231::-;43032:34;43028:1;43020:6;43016:14;43009:58;43101:14;43096:2;43088:6;43084:15;43077:39;42998:125;:::o;43129:164::-;43269:16;43265:1;43257:6;43253:14;43246:40;43235:58;:::o;43299:122::-;43372:24;43390:5;43372:24;:::i;:::-;43365:5;43362:35;43352:2;;43411:1;43408;43401:12;43352:2;43342:79;:::o;43427:138::-;43508:32;43534:5;43508:32;:::i;:::-;43501:5;43498:43;43488:2;;43555:1;43552;43545:12;43488:2;43478:87;:::o;43571:116::-;43641:21;43656:5;43641:21;:::i;:::-;43634:5;43631:32;43621:2;;43677:1;43674;43667:12;43621:2;43611:76;:::o;43693:120::-;43765:23;43782:5;43765:23;:::i;:::-;43758:5;43755:34;43745:2;;43803:1;43800;43793:12;43745:2;43735:78;:::o;43819:122::-;43892:24;43910:5;43892:24;:::i;:::-;43885:5;43882:35;43872:2;;43931:1;43928;43921:12;43872:2;43862:79;:::o
Swarm Source
ipfs://b8960f3c1f25f47fc7ffc0dfbaf06d011ae573bf19ffcdce6c17c99d9e1facbd
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.