ERC-721
NFT
Overview
Max Total Supply
9,999 CKID
Holders
2,242
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CKIDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CosmicKids
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-02 */ // SPDX-License-Identifier: MIT // // // // CKID & Osiris DAO tokens ,, ,, ,, // .g8"""bgd db `7MMF' `YMM' db `7MM // .dP' `M MM .M' MM // dM' ` ,pW"Wq. ,pP"Ybd `7MMpMMMb.pMMMb. `7MM ,p6"bo MM .d" `7MM ,M""bMM ,pP"Ybd // MM 6W' `Wb 8I `" MM MM MM MM 6M' OO MMMMM. MM ,AP MM 8I `" // MM. 8M M8 `YMMMa. MM MM MM MM 8M MM VMA MM 8MI MM `YMMMa. // `Mb. ,'YA. ,A9 L. I8 MM MM MM MM YM. , MM `MM. MM `Mb MM L. I8 // `"bmmmd' `Ybmd9' M9mmmP' .JMML JMML JMML..JMML.YMbmd'.JMML. MMb..JMML.`Wbmd"MML.M9mmmP' // CKID & Osiris DAO tokens pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } } pragma solidity ^0.8.0; /** * @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); } pragma solidity ^0.8.0; /** * @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; } pragma solidity ^0.8.0; /** * @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); } pragma solidity ^0.8.0; /** * @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); } pragma solidity ^0.8.0; /** * @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); } pragma solidity ^0.8.0; /** * @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; } } pragma solidity ^0.8.0; /** * @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 || 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 || isApprovedForAll(owner, spender)); } /** * @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 {} } pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved" ); _burn(tokenId); } } pragma solidity ^0.8.0; /** * @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(); } } pragma solidity ^0.8.0; /** * @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 private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @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); } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; contract CosmicKids is Context, ERC721Enumerable, ERC721Burnable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdTracker; string private _baseTokenURI; uint256 private constant maxKids = 10000; uint256 private constant mintPrice = 25000000000000000; bool private paused = true; event CreateCosmicKid(uint256 indexed id); //mapping(uint256 => uint256) private daoCoins; //uint256 public totalDaoCoins = 0; constructor() ERC721("Osiris: Cosmic Kids", "CKID") { _baseTokenURI = "https://www.OsirisMetaverse.com/kid/"; // mint initial token mint(); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) external onlyOwner { _baseTokenURI = baseURI; } function mint() public payable { require(!paused || msg.sender == owner()); if (msg.sender != owner()) { require( msg.value == mintPrice || msg.sender == owner(), "It costs 0.025 ETH to mint a Cosmic Kid." ); } require( totalSupply() + 1 < maxKids, "There can only be 10000 Cosmic Kids!" ); _tokenIdTracker.increment(); mintCosmic(_tokenIdTracker.current()); } function mintCosmic(uint256 id) private { _mint(msg.sender, id); emit CreateCosmicKid(id); } function currentBalance(address person) public view returns (uint256) { uint256 total = 0; for (uint256 i = 0; i < balanceOf(person); i++) { total = tokenOfOwnerByIndex(person, i); } return total; } function pause() public virtual onlyOwner { paused = true; } function unpause() public virtual onlyOwner { paused = false; } function withdraw() external onlyOwner { //uint256 balance = address(this).balance; //payable(ceoAddress).transfer(balance); payable(msg.sender).transfer(address(this).balance); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"CreateCosmicKid","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"person","type":"address"}],"name":"currentBalance","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":[],"name":"mint","outputs":[],"stateMutability":"payable","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":[],"name":"pause","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":"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":[],"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600d60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280601381526020017f4f73697269733a20436f736d6963204b696473000000000000000000000000008152506040518060400160405280600481526020017f434b4944000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000b192919062000c1f565b508060019080519060200190620000ca92919062000c1f565b505050620000ed620000e16200013560201b60201c565b6200013d60201b60201c565b60405180606001604052806024815260200162004f6b60249139600c90805190602001906200011e92919062000c1f565b506200012f6200020360201b60201c565b62001120565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600d60009054906101000a900460ff1615806200025a57506200022b620003de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6200026457600080fd5b62000274620003de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200033a576658d15e17628000341480620002f75750620002c8620003de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b62000339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003309062000e1a565b60405180910390fd5b5b61271060016200034f6200040860201b60201c565b6200035b919062000e4d565b106200039e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003959062000db4565b60405180910390fd5b620003b5600b6200041560201b620015661760201c565b620003dc620003d0600b6200042b60201b6200157c1760201c565b6200043960201b60201c565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b6200044b33826200047b60201b60201c565b807f744260e004051a3813fb259667dd844b98bd86a7a6a2943265ab5392512e9d4960405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e59062000df8565b60405180910390fd5b620004ff816200066160201b60201c565b1562000542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005399062000d92565b60405180910390fd5b6200055660008383620006cd60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005a8919062000e4d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620006e5838383620006ea60201b6200158a1760201c565b505050565b620007028383836200083160201b6200169e1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200074f5762000749816200083660201b60201c565b62000797565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000796576200079583826200087f60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007e457620007de81620009fc60201b60201c565b6200082c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200082b576200082a828262000ad860201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620008998462000b6460201b62000e781760201c565b620008a5919062000eaa565b90506000600760008481526020019081526020016000205490508181146200098b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000a12919062000eaa565b905060006009600084815260200190815260200160002054905060006008838154811062000a455762000a4462000fb2565b5b90600052602060002001549050806008838154811062000a6a5762000a6962000fb2565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000abc5762000abb62000f83565b5b6001900381819060005260206000200160009055905550505050565b600062000af08362000b6460201b62000e781760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bcf9062000dd6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000c2d9062000eef565b90600052602060002090601f01602090048101928262000c51576000855562000c9d565b82601f1062000c6c57805160ff191683800117855562000c9d565b8280016001018555821562000c9d579182015b8281111562000c9c57825182559160200191906001019062000c7f565b5b50905062000cac919062000cb0565b5090565b5b8082111562000ccb57600081600090555060010162000cb1565b5090565b600062000cde601c8362000e3c565b915062000ceb8262000fe1565b602082019050919050565b600062000d0560248362000e3c565b915062000d12826200100a565b604082019050919050565b600062000d2c602a8362000e3c565b915062000d398262001059565b604082019050919050565b600062000d5360208362000e3c565b915062000d6082620010a8565b602082019050919050565b600062000d7a60288362000e3c565b915062000d8782620010d1565b604082019050919050565b6000602082019050818103600083015262000dad8162000ccf565b9050919050565b6000602082019050818103600083015262000dcf8162000cf6565b9050919050565b6000602082019050818103600083015262000df18162000d1d565b9050919050565b6000602082019050818103600083015262000e138162000d44565b9050919050565b6000602082019050818103600083015262000e358162000d6b565b9050919050565b600082825260208201905092915050565b600062000e5a8262000ee5565b915062000e678362000ee5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e9f5762000e9e62000f25565b5b828201905092915050565b600062000eb78262000ee5565b915062000ec48362000ee5565b92508282101562000eda5762000ed962000f25565b5b828203905092915050565b6000819050919050565b6000600282049050600182168062000f0857607f821691505b6020821081141562000f1f5762000f1e62000f54565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686572652063616e206f6e6c7920626520313030303020436f736d6963204b60008201527f6964732100000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f497420636f73747320302e3032352045544820746f206d696e74206120436f7360008201527f6d6963204b69642e000000000000000000000000000000000000000000000000602082015250565b613e3b80620011306000396000f3fe6080604052600436106101815760003560e01c806355f804b3116100d157806395d89b411161008a578063b88d4fde11610064578063b88d4fde14610539578063c87b56dd14610562578063e985e9c51461059f578063f2fde38b146105dc57610181565b806395d89b41146104a85780639e546c38146104d3578063a22cb4651461051057610181565b806355f804b3146103ac5780636352211e146103d557806370a0823114610412578063715018a61461044f5780638456cb59146104665780638da5cb5b1461047d57610181565b806323b872dd1161013e5780633f4ba83a116101185780633f4ba83a1461030657806342842e0e1461031d57806342966c68146103465780634f6ccce71461036f57610181565b806323b872dd146102895780632f745c59146102b25780633ccfd60b146102ef57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b5780631249c58b1461025457806318160ddd1461025e575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612b6d565b610605565b6040516101ba9190613077565b60405180910390f35b3480156101cf57600080fd5b506101d8610617565b6040516101e59190613092565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190612c10565b6106a9565b6040516102229190613010565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190612b2d565b61072e565b005b61025c610846565b005b34801561026a57600080fd5b506102736109d3565b6040516102809190613354565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612a17565b6109e0565b005b3480156102be57600080fd5b506102d960048036038101906102d49190612b2d565b610a40565b6040516102e69190613354565b60405180910390f35b3480156102fb57600080fd5b50610304610ae5565b005b34801561031257600080fd5b5061031b610baa565b005b34801561032957600080fd5b50610344600480360381019061033f9190612a17565b610c43565b005b34801561035257600080fd5b5061036d60048036038101906103689190612c10565b610c63565b005b34801561037b57600080fd5b5061039660048036038101906103919190612c10565b610cbf565b6040516103a39190613354565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612bc7565b610d30565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612c10565b610dc6565b6040516104099190613010565b60405180910390f35b34801561041e57600080fd5b50610439600480360381019061043491906129aa565b610e78565b6040516104469190613354565b60405180910390f35b34801561045b57600080fd5b50610464610f30565b005b34801561047257600080fd5b5061047b610fb8565b005b34801561048957600080fd5b50610492611051565b60405161049f9190613010565b60405180910390f35b3480156104b457600080fd5b506104bd61107b565b6040516104ca9190613092565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f591906129aa565b61110d565b6040516105079190613354565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190612aed565b611150565b005b34801561054557600080fd5b50610560600480360381019061055b9190612a6a565b6112d1565b005b34801561056e57600080fd5b5061058960048036038101906105849190612c10565b611333565b6040516105969190613092565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c191906129d7565b6113da565b6040516105d39190613077565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe91906129aa565b61146e565b005b6000610610826116a3565b9050919050565b606060008054610626906135aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610652906135aa565b801561069f5780601f106106745761010080835404028352916020019161069f565b820191906000526020600020905b81548152906001019060200180831161068257829003601f168201915b5050505050905090565b60006106b48261171d565b6106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea90613234565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073982610dc6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a1906132d4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c9611789565b73ffffffffffffffffffffffffffffffffffffffff1614806107f857506107f7816107f2611789565b6113da565b5b610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e906131b4565b60405180910390fd5b6108418383611791565b505050565b600d60009054906101000a900460ff1615806108945750610865611051565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61089d57600080fd5b6108a5611051565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095e576658d15e1762800034148061091e57506108ef611051565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095490613274565b60405180910390fd5b5b612710600161096b6109d3565b6109759190613439565b106109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90613194565b60405180910390fd5b6109bf600b611566565b6109d16109cc600b61157c565b61184a565b565b6000600880549050905090565b6109f16109eb611789565b82611884565b610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a27906132f4565b60405180910390fd5b610a3b838383611962565b505050565b6000610a4b83610e78565b8210610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906130b4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610aed611789565b73ffffffffffffffffffffffffffffffffffffffff16610b0b611051565b73ffffffffffffffffffffffffffffffffffffffff1614610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890613254565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ba7573d6000803e3d6000fd5b50565b610bb2611789565b73ffffffffffffffffffffffffffffffffffffffff16610bd0611051565b73ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90613254565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b610c5e838383604051806020016040528060008152506112d1565b505050565b610c74610c6e611789565b82611884565b610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613334565b60405180910390fd5b610cbc81611bbe565b50565b6000610cc96109d3565b8210610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190613314565b60405180910390fd5b60088281548110610d1e57610d1d613743565b5b90600052602060002001549050919050565b610d38611789565b73ffffffffffffffffffffffffffffffffffffffff16610d56611051565b73ffffffffffffffffffffffffffffffffffffffff1614610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390613254565b60405180910390fd5b80600c9080519060200190610dc29291906127be565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906131f4565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906131d4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f38611789565b73ffffffffffffffffffffffffffffffffffffffff16610f56611051565b73ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390613254565b60405180910390fd5b610fb66000611ccf565b565b610fc0611789565b73ffffffffffffffffffffffffffffffffffffffff16610fde611051565b73ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613254565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461108a906135aa565b80601f01602080910402602001604051908101604052809291908181526020018280546110b6906135aa565b80156111035780601f106110d857610100808354040283529160200191611103565b820191906000526020600020905b8154815290600101906020018083116110e657829003601f168201915b5050505050905090565b6000806000905060005b61112084610e78565b811015611146576111318482610a40565b9150808061113e9061360d565b915050611117565b5080915050919050565b611158611789565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613154565b60405180910390fd5b80600560006111d3611789565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611280611789565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112c59190613077565b60405180910390a35050565b6112e26112dc611789565b83611884565b611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906132f4565b60405180910390fd5b61132d84848484611d95565b50505050565b606061133e8261171d565b61137d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611374906132b4565b60405180910390fd5b6000611387611df1565b905060008151116113a757604051806020016040528060008152506113d2565b806113b184611e83565b6040516020016113c2929190612fec565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611476611789565b73ffffffffffffffffffffffffffffffffffffffff16611494611051565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190613254565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561155a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611551906130f4565b60405180910390fd5b61156381611ccf565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b61159583838361169e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115d8576115d381611fe4565b611617565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461161657611615838261202d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165a576116558161219a565b611699565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461169857611697828261226b565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117165750611715826122ea565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661180483610dc6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61185433826123cc565b807f744260e004051a3813fb259667dd844b98bd86a7a6a2943265ab5392512e9d4960405160405180910390a250565b600061188f8261171d565b6118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613174565b60405180910390fd5b60006118d983610dc6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061194857508373ffffffffffffffffffffffffffffffffffffffff16611930846106a9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611959575061195881856113da565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661198282610dc6565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613294565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613134565b60405180910390fd5b611a5383838361259a565b611a5e600082611791565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aae91906134c0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b059190613439565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611bc982610dc6565b9050611bd78160008461259a565b611be2600083611791565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3291906134c0565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611da0848484611962565b611dac848484846125aa565b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de2906130d4565b60405180910390fd5b50505050565b6060600c8054611e00906135aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2c906135aa565b8015611e795780601f10611e4e57610100808354040283529160200191611e79565b820191906000526020600020905b815481529060010190602001808311611e5c57829003601f168201915b5050505050905090565b60606000821415611ecb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fdf565b600082905060005b60008214611efd578080611ee69061360d565b915050600a82611ef6919061348f565b9150611ed3565b60008167ffffffffffffffff811115611f1957611f18613772565b5b6040519080825280601f01601f191660200182016040528015611f4b5781602001600182028036833780820191505090505b5090505b60008514611fd857600182611f6491906134c0565b9150600a85611f739190613656565b6030611f7f9190613439565b60f81b818381518110611f9557611f94613743565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fd1919061348f565b9450611f4f565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161203a84610e78565b61204491906134c0565b9050600060076000848152602001908152602001600020549050818114612129576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506121ae91906134c0565b90506000600960008481526020019081526020016000205490506000600883815481106121de576121dd613743565b5b906000526020600020015490508060088381548110612200576121ff613743565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061224f5761224e613714565b5b6001900381819060005260206000200160009055905550505050565b600061227683610e78565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123b557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123c557506123c482612741565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390613214565b60405180910390fd5b6124458161171d565b15612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90613114565b60405180910390fd5b6124916000838361259a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e19190613439565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6125a583838361158a565b505050565b60006125cb8473ffffffffffffffffffffffffffffffffffffffff166127ab565b15612734578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f4611789565b8786866040518563ffffffff1660e01b8152600401612616949392919061302b565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e9190612b9a565b60015b6126e4573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d3906130d4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612739565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b8280546127ca906135aa565b90600052602060002090601f0160209004810192826127ec5760008555612833565b82601f1061280557805160ff1916838001178555612833565b82800160010185558215612833579182015b82811115612832578251825591602001919060010190612817565b5b5090506128409190612844565b5090565b5b8082111561285d576000816000905550600101612845565b5090565b600061287461286f84613394565b61336f565b9050828152602081018484840111156128905761288f6137a6565b5b61289b848285613568565b509392505050565b60006128b66128b1846133c5565b61336f565b9050828152602081018484840111156128d2576128d16137a6565b5b6128dd848285613568565b509392505050565b6000813590506128f481613da9565b92915050565b60008135905061290981613dc0565b92915050565b60008135905061291e81613dd7565b92915050565b60008151905061293381613dd7565b92915050565b600082601f83011261294e5761294d6137a1565b5b813561295e848260208601612861565b91505092915050565b600082601f83011261297c5761297b6137a1565b5b813561298c8482602086016128a3565b91505092915050565b6000813590506129a481613dee565b92915050565b6000602082840312156129c0576129bf6137b0565b5b60006129ce848285016128e5565b91505092915050565b600080604083850312156129ee576129ed6137b0565b5b60006129fc858286016128e5565b9250506020612a0d858286016128e5565b9150509250929050565b600080600060608486031215612a3057612a2f6137b0565b5b6000612a3e868287016128e5565b9350506020612a4f868287016128e5565b9250506040612a6086828701612995565b9150509250925092565b60008060008060808587031215612a8457612a836137b0565b5b6000612a92878288016128e5565b9450506020612aa3878288016128e5565b9350506040612ab487828801612995565b925050606085013567ffffffffffffffff811115612ad557612ad46137ab565b5b612ae187828801612939565b91505092959194509250565b60008060408385031215612b0457612b036137b0565b5b6000612b12858286016128e5565b9250506020612b23858286016128fa565b9150509250929050565b60008060408385031215612b4457612b436137b0565b5b6000612b52858286016128e5565b9250506020612b6385828601612995565b9150509250929050565b600060208284031215612b8357612b826137b0565b5b6000612b918482850161290f565b91505092915050565b600060208284031215612bb057612baf6137b0565b5b6000612bbe84828501612924565b91505092915050565b600060208284031215612bdd57612bdc6137b0565b5b600082013567ffffffffffffffff811115612bfb57612bfa6137ab565b5b612c0784828501612967565b91505092915050565b600060208284031215612c2657612c256137b0565b5b6000612c3484828501612995565b91505092915050565b612c46816134f4565b82525050565b612c5581613506565b82525050565b6000612c66826133f6565b612c70818561340c565b9350612c80818560208601613577565b612c89816137b5565b840191505092915050565b6000612c9f82613401565b612ca9818561341d565b9350612cb9818560208601613577565b612cc2816137b5565b840191505092915050565b6000612cd882613401565b612ce2818561342e565b9350612cf2818560208601613577565b80840191505092915050565b6000612d0b602b8361341d565b9150612d16826137c6565b604082019050919050565b6000612d2e60328361341d565b9150612d3982613815565b604082019050919050565b6000612d5160268361341d565b9150612d5c82613864565b604082019050919050565b6000612d74601c8361341d565b9150612d7f826138b3565b602082019050919050565b6000612d9760248361341d565b9150612da2826138dc565b604082019050919050565b6000612dba60198361341d565b9150612dc58261392b565b602082019050919050565b6000612ddd602c8361341d565b9150612de882613954565b604082019050919050565b6000612e0060248361341d565b9150612e0b826139a3565b604082019050919050565b6000612e2360388361341d565b9150612e2e826139f2565b604082019050919050565b6000612e46602a8361341d565b9150612e5182613a41565b604082019050919050565b6000612e6960298361341d565b9150612e7482613a90565b604082019050919050565b6000612e8c60208361341d565b9150612e9782613adf565b602082019050919050565b6000612eaf602c8361341d565b9150612eba82613b08565b604082019050919050565b6000612ed260208361341d565b9150612edd82613b57565b602082019050919050565b6000612ef560288361341d565b9150612f0082613b80565b604082019050919050565b6000612f1860298361341d565b9150612f2382613bcf565b604082019050919050565b6000612f3b602f8361341d565b9150612f4682613c1e565b604082019050919050565b6000612f5e60218361341d565b9150612f6982613c6d565b604082019050919050565b6000612f8160318361341d565b9150612f8c82613cbc565b604082019050919050565b6000612fa4602c8361341d565b9150612faf82613d0b565b604082019050919050565b6000612fc760308361341d565b9150612fd282613d5a565b604082019050919050565b612fe68161355e565b82525050565b6000612ff88285612ccd565b91506130048284612ccd565b91508190509392505050565b60006020820190506130256000830184612c3d565b92915050565b60006080820190506130406000830187612c3d565b61304d6020830186612c3d565b61305a6040830185612fdd565b818103606083015261306c8184612c5b565b905095945050505050565b600060208201905061308c6000830184612c4c565b92915050565b600060208201905081810360008301526130ac8184612c94565b905092915050565b600060208201905081810360008301526130cd81612cfe565b9050919050565b600060208201905081810360008301526130ed81612d21565b9050919050565b6000602082019050818103600083015261310d81612d44565b9050919050565b6000602082019050818103600083015261312d81612d67565b9050919050565b6000602082019050818103600083015261314d81612d8a565b9050919050565b6000602082019050818103600083015261316d81612dad565b9050919050565b6000602082019050818103600083015261318d81612dd0565b9050919050565b600060208201905081810360008301526131ad81612df3565b9050919050565b600060208201905081810360008301526131cd81612e16565b9050919050565b600060208201905081810360008301526131ed81612e39565b9050919050565b6000602082019050818103600083015261320d81612e5c565b9050919050565b6000602082019050818103600083015261322d81612e7f565b9050919050565b6000602082019050818103600083015261324d81612ea2565b9050919050565b6000602082019050818103600083015261326d81612ec5565b9050919050565b6000602082019050818103600083015261328d81612ee8565b9050919050565b600060208201905081810360008301526132ad81612f0b565b9050919050565b600060208201905081810360008301526132cd81612f2e565b9050919050565b600060208201905081810360008301526132ed81612f51565b9050919050565b6000602082019050818103600083015261330d81612f74565b9050919050565b6000602082019050818103600083015261332d81612f97565b9050919050565b6000602082019050818103600083015261334d81612fba565b9050919050565b60006020820190506133696000830184612fdd565b92915050565b600061337961338a565b905061338582826135dc565b919050565b6000604051905090565b600067ffffffffffffffff8211156133af576133ae613772565b5b6133b8826137b5565b9050602081019050919050565b600067ffffffffffffffff8211156133e0576133df613772565b5b6133e9826137b5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006134448261355e565b915061344f8361355e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561348457613483613687565b5b828201905092915050565b600061349a8261355e565b91506134a58361355e565b9250826134b5576134b46136b6565b5b828204905092915050565b60006134cb8261355e565b91506134d68361355e565b9250828210156134e9576134e8613687565b5b828203905092915050565b60006134ff8261353e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561359557808201518184015260208101905061357a565b838111156135a4576000848401525b50505050565b600060028204905060018216806135c257607f821691505b602082108114156135d6576135d56136e5565b5b50919050565b6135e5826137b5565b810181811067ffffffffffffffff8211171561360457613603613772565b5b80604052505050565b60006136188261355e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561364b5761364a613687565b5b600182019050919050565b60006136618261355e565b915061366c8361355e565b92508261367c5761367b6136b6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686572652063616e206f6e6c7920626520313030303020436f736d6963204b60008201527f6964732100000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f497420636f73747320302e3032352045544820746f206d696e74206120436f7360008201527f6d6963204b69642e000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b613db2816134f4565b8114613dbd57600080fd5b50565b613dc981613506565b8114613dd457600080fd5b50565b613de081613512565b8114613deb57600080fd5b50565b613df78161355e565b8114613e0257600080fd5b5056fea26469706673582212206acc55f9aafa8b501ae3cc960db3df95405af230840e12d113801dcd76bc0afd64736f6c6343000806003368747470733a2f2f7777772e4f73697269734d65746176657273652e636f6d2f6b69642f
Deployed Bytecode
0x6080604052600436106101815760003560e01c806355f804b3116100d157806395d89b411161008a578063b88d4fde11610064578063b88d4fde14610539578063c87b56dd14610562578063e985e9c51461059f578063f2fde38b146105dc57610181565b806395d89b41146104a85780639e546c38146104d3578063a22cb4651461051057610181565b806355f804b3146103ac5780636352211e146103d557806370a0823114610412578063715018a61461044f5780638456cb59146104665780638da5cb5b1461047d57610181565b806323b872dd1161013e5780633f4ba83a116101185780633f4ba83a1461030657806342842e0e1461031d57806342966c68146103465780634f6ccce71461036f57610181565b806323b872dd146102895780632f745c59146102b25780633ccfd60b146102ef57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b5780631249c58b1461025457806318160ddd1461025e575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612b6d565b610605565b6040516101ba9190613077565b60405180910390f35b3480156101cf57600080fd5b506101d8610617565b6040516101e59190613092565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190612c10565b6106a9565b6040516102229190613010565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190612b2d565b61072e565b005b61025c610846565b005b34801561026a57600080fd5b506102736109d3565b6040516102809190613354565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612a17565b6109e0565b005b3480156102be57600080fd5b506102d960048036038101906102d49190612b2d565b610a40565b6040516102e69190613354565b60405180910390f35b3480156102fb57600080fd5b50610304610ae5565b005b34801561031257600080fd5b5061031b610baa565b005b34801561032957600080fd5b50610344600480360381019061033f9190612a17565b610c43565b005b34801561035257600080fd5b5061036d60048036038101906103689190612c10565b610c63565b005b34801561037b57600080fd5b5061039660048036038101906103919190612c10565b610cbf565b6040516103a39190613354565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612bc7565b610d30565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612c10565b610dc6565b6040516104099190613010565b60405180910390f35b34801561041e57600080fd5b50610439600480360381019061043491906129aa565b610e78565b6040516104469190613354565b60405180910390f35b34801561045b57600080fd5b50610464610f30565b005b34801561047257600080fd5b5061047b610fb8565b005b34801561048957600080fd5b50610492611051565b60405161049f9190613010565b60405180910390f35b3480156104b457600080fd5b506104bd61107b565b6040516104ca9190613092565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f591906129aa565b61110d565b6040516105079190613354565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190612aed565b611150565b005b34801561054557600080fd5b50610560600480360381019061055b9190612a6a565b6112d1565b005b34801561056e57600080fd5b5061058960048036038101906105849190612c10565b611333565b6040516105969190613092565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c191906129d7565b6113da565b6040516105d39190613077565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe91906129aa565b61146e565b005b6000610610826116a3565b9050919050565b606060008054610626906135aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610652906135aa565b801561069f5780601f106106745761010080835404028352916020019161069f565b820191906000526020600020905b81548152906001019060200180831161068257829003601f168201915b5050505050905090565b60006106b48261171d565b6106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea90613234565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073982610dc6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a1906132d4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c9611789565b73ffffffffffffffffffffffffffffffffffffffff1614806107f857506107f7816107f2611789565b6113da565b5b610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e906131b4565b60405180910390fd5b6108418383611791565b505050565b600d60009054906101000a900460ff1615806108945750610865611051565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61089d57600080fd5b6108a5611051565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095e576658d15e1762800034148061091e57506108ef611051565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095490613274565b60405180910390fd5b5b612710600161096b6109d3565b6109759190613439565b106109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90613194565b60405180910390fd5b6109bf600b611566565b6109d16109cc600b61157c565b61184a565b565b6000600880549050905090565b6109f16109eb611789565b82611884565b610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a27906132f4565b60405180910390fd5b610a3b838383611962565b505050565b6000610a4b83610e78565b8210610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906130b4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610aed611789565b73ffffffffffffffffffffffffffffffffffffffff16610b0b611051565b73ffffffffffffffffffffffffffffffffffffffff1614610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890613254565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ba7573d6000803e3d6000fd5b50565b610bb2611789565b73ffffffffffffffffffffffffffffffffffffffff16610bd0611051565b73ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90613254565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b610c5e838383604051806020016040528060008152506112d1565b505050565b610c74610c6e611789565b82611884565b610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613334565b60405180910390fd5b610cbc81611bbe565b50565b6000610cc96109d3565b8210610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190613314565b60405180910390fd5b60088281548110610d1e57610d1d613743565b5b90600052602060002001549050919050565b610d38611789565b73ffffffffffffffffffffffffffffffffffffffff16610d56611051565b73ffffffffffffffffffffffffffffffffffffffff1614610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390613254565b60405180910390fd5b80600c9080519060200190610dc29291906127be565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906131f4565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906131d4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f38611789565b73ffffffffffffffffffffffffffffffffffffffff16610f56611051565b73ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390613254565b60405180910390fd5b610fb66000611ccf565b565b610fc0611789565b73ffffffffffffffffffffffffffffffffffffffff16610fde611051565b73ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613254565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461108a906135aa565b80601f01602080910402602001604051908101604052809291908181526020018280546110b6906135aa565b80156111035780601f106110d857610100808354040283529160200191611103565b820191906000526020600020905b8154815290600101906020018083116110e657829003601f168201915b5050505050905090565b6000806000905060005b61112084610e78565b811015611146576111318482610a40565b9150808061113e9061360d565b915050611117565b5080915050919050565b611158611789565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613154565b60405180910390fd5b80600560006111d3611789565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611280611789565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112c59190613077565b60405180910390a35050565b6112e26112dc611789565b83611884565b611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906132f4565b60405180910390fd5b61132d84848484611d95565b50505050565b606061133e8261171d565b61137d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611374906132b4565b60405180910390fd5b6000611387611df1565b905060008151116113a757604051806020016040528060008152506113d2565b806113b184611e83565b6040516020016113c2929190612fec565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611476611789565b73ffffffffffffffffffffffffffffffffffffffff16611494611051565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190613254565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561155a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611551906130f4565b60405180910390fd5b61156381611ccf565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b61159583838361169e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115d8576115d381611fe4565b611617565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461161657611615838261202d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165a576116558161219a565b611699565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461169857611697828261226b565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117165750611715826122ea565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661180483610dc6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61185433826123cc565b807f744260e004051a3813fb259667dd844b98bd86a7a6a2943265ab5392512e9d4960405160405180910390a250565b600061188f8261171d565b6118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613174565b60405180910390fd5b60006118d983610dc6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061194857508373ffffffffffffffffffffffffffffffffffffffff16611930846106a9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611959575061195881856113da565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661198282610dc6565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613294565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613134565b60405180910390fd5b611a5383838361259a565b611a5e600082611791565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aae91906134c0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b059190613439565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611bc982610dc6565b9050611bd78160008461259a565b611be2600083611791565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3291906134c0565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611da0848484611962565b611dac848484846125aa565b611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de2906130d4565b60405180910390fd5b50505050565b6060600c8054611e00906135aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2c906135aa565b8015611e795780601f10611e4e57610100808354040283529160200191611e79565b820191906000526020600020905b815481529060010190602001808311611e5c57829003601f168201915b5050505050905090565b60606000821415611ecb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fdf565b600082905060005b60008214611efd578080611ee69061360d565b915050600a82611ef6919061348f565b9150611ed3565b60008167ffffffffffffffff811115611f1957611f18613772565b5b6040519080825280601f01601f191660200182016040528015611f4b5781602001600182028036833780820191505090505b5090505b60008514611fd857600182611f6491906134c0565b9150600a85611f739190613656565b6030611f7f9190613439565b60f81b818381518110611f9557611f94613743565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fd1919061348f565b9450611f4f565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161203a84610e78565b61204491906134c0565b9050600060076000848152602001908152602001600020549050818114612129576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506121ae91906134c0565b90506000600960008481526020019081526020016000205490506000600883815481106121de576121dd613743565b5b906000526020600020015490508060088381548110612200576121ff613743565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061224f5761224e613714565b5b6001900381819060005260206000200160009055905550505050565b600061227683610e78565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123b557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123c557506123c482612741565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390613214565b60405180910390fd5b6124458161171d565b15612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90613114565b60405180910390fd5b6124916000838361259a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e19190613439565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6125a583838361158a565b505050565b60006125cb8473ffffffffffffffffffffffffffffffffffffffff166127ab565b15612734578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f4611789565b8786866040518563ffffffff1660e01b8152600401612616949392919061302b565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e9190612b9a565b60015b6126e4573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d3906130d4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612739565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b8280546127ca906135aa565b90600052602060002090601f0160209004810192826127ec5760008555612833565b82601f1061280557805160ff1916838001178555612833565b82800160010185558215612833579182015b82811115612832578251825591602001919060010190612817565b5b5090506128409190612844565b5090565b5b8082111561285d576000816000905550600101612845565b5090565b600061287461286f84613394565b61336f565b9050828152602081018484840111156128905761288f6137a6565b5b61289b848285613568565b509392505050565b60006128b66128b1846133c5565b61336f565b9050828152602081018484840111156128d2576128d16137a6565b5b6128dd848285613568565b509392505050565b6000813590506128f481613da9565b92915050565b60008135905061290981613dc0565b92915050565b60008135905061291e81613dd7565b92915050565b60008151905061293381613dd7565b92915050565b600082601f83011261294e5761294d6137a1565b5b813561295e848260208601612861565b91505092915050565b600082601f83011261297c5761297b6137a1565b5b813561298c8482602086016128a3565b91505092915050565b6000813590506129a481613dee565b92915050565b6000602082840312156129c0576129bf6137b0565b5b60006129ce848285016128e5565b91505092915050565b600080604083850312156129ee576129ed6137b0565b5b60006129fc858286016128e5565b9250506020612a0d858286016128e5565b9150509250929050565b600080600060608486031215612a3057612a2f6137b0565b5b6000612a3e868287016128e5565b9350506020612a4f868287016128e5565b9250506040612a6086828701612995565b9150509250925092565b60008060008060808587031215612a8457612a836137b0565b5b6000612a92878288016128e5565b9450506020612aa3878288016128e5565b9350506040612ab487828801612995565b925050606085013567ffffffffffffffff811115612ad557612ad46137ab565b5b612ae187828801612939565b91505092959194509250565b60008060408385031215612b0457612b036137b0565b5b6000612b12858286016128e5565b9250506020612b23858286016128fa565b9150509250929050565b60008060408385031215612b4457612b436137b0565b5b6000612b52858286016128e5565b9250506020612b6385828601612995565b9150509250929050565b600060208284031215612b8357612b826137b0565b5b6000612b918482850161290f565b91505092915050565b600060208284031215612bb057612baf6137b0565b5b6000612bbe84828501612924565b91505092915050565b600060208284031215612bdd57612bdc6137b0565b5b600082013567ffffffffffffffff811115612bfb57612bfa6137ab565b5b612c0784828501612967565b91505092915050565b600060208284031215612c2657612c256137b0565b5b6000612c3484828501612995565b91505092915050565b612c46816134f4565b82525050565b612c5581613506565b82525050565b6000612c66826133f6565b612c70818561340c565b9350612c80818560208601613577565b612c89816137b5565b840191505092915050565b6000612c9f82613401565b612ca9818561341d565b9350612cb9818560208601613577565b612cc2816137b5565b840191505092915050565b6000612cd882613401565b612ce2818561342e565b9350612cf2818560208601613577565b80840191505092915050565b6000612d0b602b8361341d565b9150612d16826137c6565b604082019050919050565b6000612d2e60328361341d565b9150612d3982613815565b604082019050919050565b6000612d5160268361341d565b9150612d5c82613864565b604082019050919050565b6000612d74601c8361341d565b9150612d7f826138b3565b602082019050919050565b6000612d9760248361341d565b9150612da2826138dc565b604082019050919050565b6000612dba60198361341d565b9150612dc58261392b565b602082019050919050565b6000612ddd602c8361341d565b9150612de882613954565b604082019050919050565b6000612e0060248361341d565b9150612e0b826139a3565b604082019050919050565b6000612e2360388361341d565b9150612e2e826139f2565b604082019050919050565b6000612e46602a8361341d565b9150612e5182613a41565b604082019050919050565b6000612e6960298361341d565b9150612e7482613a90565b604082019050919050565b6000612e8c60208361341d565b9150612e9782613adf565b602082019050919050565b6000612eaf602c8361341d565b9150612eba82613b08565b604082019050919050565b6000612ed260208361341d565b9150612edd82613b57565b602082019050919050565b6000612ef560288361341d565b9150612f0082613b80565b604082019050919050565b6000612f1860298361341d565b9150612f2382613bcf565b604082019050919050565b6000612f3b602f8361341d565b9150612f4682613c1e565b604082019050919050565b6000612f5e60218361341d565b9150612f6982613c6d565b604082019050919050565b6000612f8160318361341d565b9150612f8c82613cbc565b604082019050919050565b6000612fa4602c8361341d565b9150612faf82613d0b565b604082019050919050565b6000612fc760308361341d565b9150612fd282613d5a565b604082019050919050565b612fe68161355e565b82525050565b6000612ff88285612ccd565b91506130048284612ccd565b91508190509392505050565b60006020820190506130256000830184612c3d565b92915050565b60006080820190506130406000830187612c3d565b61304d6020830186612c3d565b61305a6040830185612fdd565b818103606083015261306c8184612c5b565b905095945050505050565b600060208201905061308c6000830184612c4c565b92915050565b600060208201905081810360008301526130ac8184612c94565b905092915050565b600060208201905081810360008301526130cd81612cfe565b9050919050565b600060208201905081810360008301526130ed81612d21565b9050919050565b6000602082019050818103600083015261310d81612d44565b9050919050565b6000602082019050818103600083015261312d81612d67565b9050919050565b6000602082019050818103600083015261314d81612d8a565b9050919050565b6000602082019050818103600083015261316d81612dad565b9050919050565b6000602082019050818103600083015261318d81612dd0565b9050919050565b600060208201905081810360008301526131ad81612df3565b9050919050565b600060208201905081810360008301526131cd81612e16565b9050919050565b600060208201905081810360008301526131ed81612e39565b9050919050565b6000602082019050818103600083015261320d81612e5c565b9050919050565b6000602082019050818103600083015261322d81612e7f565b9050919050565b6000602082019050818103600083015261324d81612ea2565b9050919050565b6000602082019050818103600083015261326d81612ec5565b9050919050565b6000602082019050818103600083015261328d81612ee8565b9050919050565b600060208201905081810360008301526132ad81612f0b565b9050919050565b600060208201905081810360008301526132cd81612f2e565b9050919050565b600060208201905081810360008301526132ed81612f51565b9050919050565b6000602082019050818103600083015261330d81612f74565b9050919050565b6000602082019050818103600083015261332d81612f97565b9050919050565b6000602082019050818103600083015261334d81612fba565b9050919050565b60006020820190506133696000830184612fdd565b92915050565b600061337961338a565b905061338582826135dc565b919050565b6000604051905090565b600067ffffffffffffffff8211156133af576133ae613772565b5b6133b8826137b5565b9050602081019050919050565b600067ffffffffffffffff8211156133e0576133df613772565b5b6133e9826137b5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006134448261355e565b915061344f8361355e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561348457613483613687565b5b828201905092915050565b600061349a8261355e565b91506134a58361355e565b9250826134b5576134b46136b6565b5b828204905092915050565b60006134cb8261355e565b91506134d68361355e565b9250828210156134e9576134e8613687565b5b828203905092915050565b60006134ff8261353e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561359557808201518184015260208101905061357a565b838111156135a4576000848401525b50505050565b600060028204905060018216806135c257607f821691505b602082108114156135d6576135d56136e5565b5b50919050565b6135e5826137b5565b810181811067ffffffffffffffff8211171561360457613603613772565b5b80604052505050565b60006136188261355e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561364b5761364a613687565b5b600182019050919050565b60006136618261355e565b915061366c8361355e565b92508261367c5761367b6136b6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686572652063616e206f6e6c7920626520313030303020436f736d6963204b60008201527f6964732100000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f497420636f73747320302e3032352045544820746f206d696e74206120436f7360008201527f6d6963204b69642e000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b613db2816134f4565b8114613dbd57600080fd5b50565b613dc981613506565b8114613dd457600080fd5b50565b613de081613512565b8114613deb57600080fd5b50565b613df78161355e565b8114613e0257600080fd5b5056fea26469706673582212206acc55f9aafa8b501ae3cc960db3df95405af230840e12d113801dcd76bc0afd64736f6c63430008060033
Deployed Bytecode Sourcemap
45484:2777:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48029:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14022:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15604:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15127:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46399:542;;;:::i;:::-;;27244:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16663:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26825:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47511:211;;;;;;;;;;;;;:::i;:::-;;47424:77;;;;;;;;;;;;;:::i;:::-;;17110:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25311:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27434:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46287:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13629:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13272:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34466:94;;;;;;;;;;;;;:::i;:::-;;47340:74;;;;;;;;;;;;;:::i;:::-;;33815:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14191:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47074:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15984:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17366:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14366:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16382:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34715:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48029;48185:4;48214:36;48238:11;48214:23;:36::i;:::-;48207:43;;48029:229;;;:::o;14022:100::-;14076:13;14109:5;14102:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14022:100;:::o;15604:308::-;15725:7;15772:16;15780:7;15772;:16::i;:::-;15750:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;15880:15;:24;15896:7;15880:24;;;;;;;;;;;;;;;;;;;;;15873:31;;15604:308;;;:::o;15127:411::-;15208:13;15224:23;15239:7;15224:14;:23::i;:::-;15208:39;;15272:5;15266:11;;:2;:11;;;;15258:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15366:5;15350:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;15375:37;15392:5;15399:12;:10;:12::i;:::-;15375:16;:37::i;:::-;15350:62;15328:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;15509:21;15518:2;15522:7;15509:8;:21::i;:::-;15197:341;15127:411;;:::o;46399:542::-;46460:6;;;;;;;;;;;46459:7;:32;;;;46484:7;:5;:7::i;:::-;46470:21;;:10;:21;;;46459:32;46451:41;;;;;;46523:7;:5;:7::i;:::-;46509:21;;:10;:21;;;46505:205;;45779:17;46575:9;:22;:47;;;;46615:7;:5;:7::i;:::-;46601:21;;:10;:21;;;46575:47;46549:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;46505:205;45730:5;46760:1;46744:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:27;46722:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46848:27;:15;:25;:27::i;:::-;46886:37;46897:25;:15;:23;:25::i;:::-;46886:10;:37::i;:::-;46399:542::o;27244:113::-;27305:7;27332:10;:17;;;;27325:24;;27244:113;:::o;16663:376::-;16872:41;16891:12;:10;:12::i;:::-;16905:7;16872:18;:41::i;:::-;16850:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;17003:28;17013:4;17019:2;17023:7;17003:9;:28::i;:::-;16663:376;;;:::o;26825:343::-;26967:7;27022:23;27039:5;27022:16;:23::i;:::-;27014:5;:31;26992:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;27134:12;:19;27147:5;27134:19;;;;;;;;;;;;;;;:26;27154:5;27134:26;;;;;;;;;;;;27127:33;;26825:343;;;;:::o;47511:211::-;34046:12;:10;:12::i;:::-;34035:23;;:7;:5;:7::i;:::-;:23;;;34027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47671:10:::1;47663:28;;:51;47692:21;47663:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47511:211::o:0;47424:77::-;34046:12;:10;:12::i;:::-;34035:23;;:7;:5;:7::i;:::-;:23;;;34027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47488:5:::1;47479:6;;:14;;;;;;;;;;;;;;;;;;47424:77::o:0;17110:185::-;17248:39;17265:4;17271:2;17275:7;17248:39;;;;;;;;;;;;:16;:39::i;:::-;17110:185;;;:::o;25311:282::-;25443:41;25462:12;:10;:12::i;:::-;25476:7;25443:18;:41::i;:::-;25421:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25571:14;25577:7;25571:5;:14::i;:::-;25311:282;:::o;27434:320::-;27554:7;27609:30;:28;:30::i;:::-;27601:5;:38;27579:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;27729:10;27740:5;27729:17;;;;;;;;:::i;:::-;;;;;;;;;;27722:24;;27434:320;;;:::o;46287:104::-;34046:12;:10;:12::i;:::-;34035:23;;:7;:5;:7::i;:::-;:23;;;34027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46376:7:::1;46360:13;:23;;;;;;;;;;;;:::i;:::-;;46287:104:::0;:::o;13629:326::-;13746:7;13771:13;13787:7;:16;13795:7;13787:16;;;;;;;;;;;;;;;;;;;;;13771:32;;13853:1;13836:19;;:5;:19;;;;13814:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;13942:5;13935:12;;;13629:326;;;:::o;13272:295::-;13389:7;13453:1;13436:19;;:5;:19;;;;13414:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;13543:9;:16;13553:5;13543:16;;;;;;;;;;;;;;;;13536:23;;13272:295;;;:::o;34466:94::-;34046:12;:10;:12::i;:::-;34035:23;;:7;:5;:7::i;:::-;:23;;;34027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34531:21:::1;34549:1;34531:9;:21::i;:::-;34466:94::o:0;47340:74::-;34046:12;:10;:12::i;:::-;34035:23;;:7;:5;:7::i;:::-;:23;;;34027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47402:4:::1;47393:6;;:13;;;;;;;;;;;;;;;;;;47340:74::o:0;33815:87::-;33861:7;33888:6;;;;;;;;;;;33881:13;;33815:87;:::o;14191:104::-;14247:13;14280:7;14273:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14191:104;:::o;47074:256::-;47135:7;47155:13;47171:1;47155:17;;47190:9;47185:113;47209:17;47219:6;47209:9;:17::i;:::-;47205:1;:21;47185:113;;;47256:30;47276:6;47284:1;47256:19;:30::i;:::-;47248:38;;47228:3;;;;;:::i;:::-;;;;47185:113;;;;47317:5;47310:12;;;47074:256;;;:::o;15984:327::-;16131:12;:10;:12::i;:::-;16119:24;;:8;:24;;;;16111:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16231:8;16186:18;:32;16205:12;:10;:12::i;:::-;16186:32;;;;;;;;;;;;;;;:42;16219:8;16186:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16284:8;16255:48;;16270:12;:10;:12::i;:::-;16255:48;;;16294:8;16255:48;;;;;;:::i;:::-;;;;;;;;15984:327;;:::o;17366:365::-;17555:41;17574:12;:10;:12::i;:::-;17588:7;17555:18;:41::i;:::-;17533:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;17684:39;17698:4;17704:2;17708:7;17717:5;17684:13;:39::i;:::-;17366:365;;;;:::o;14366:468::-;14484:13;14537:16;14545:7;14537;:16::i;:::-;14515:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;14641:21;14665:10;:8;:10::i;:::-;14641:34;;14730:1;14712:7;14706:21;:25;:120;;;;;;;;;;;;;;;;;14775:7;14784:18;:7;:16;:18::i;:::-;14758:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14706:120;14686:140;;;14366:468;;;:::o;16382:214::-;16524:4;16553:18;:25;16572:5;16553:25;;;;;;;;;;;;;;;:35;16579:8;16553:35;;;;;;;;;;;;;;;;;;;;;;;;;16546:42;;16382:214;;;;:::o;34715:229::-;34046:12;:10;:12::i;:::-;34035:23;;:7;:5;:7::i;:::-;:23;;;34027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34838:1:::1;34818:22;;:8;:22;;;;34796:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34917:19;34927:8;34917:9;:19::i;:::-;34715:229:::0;:::o;2134:127::-;2241:1;2223:7;:14;;;:19;;;;;;;;;;;2134:127;:::o;2012:114::-;2077:7;2104;:14;;;2097:21;;2012:114;;;:::o;28367:589::-;28511:45;28538:4;28544:2;28548:7;28511:26;:45::i;:::-;28589:1;28573:18;;:4;:18;;;28569:187;;;28608:40;28640:7;28608:31;:40::i;:::-;28569:187;;;28678:2;28670:10;;:4;:10;;;28666:90;;28697:47;28730:4;28736:7;28697:32;:47::i;:::-;28666:90;28569:187;28784:1;28770:16;;:2;:16;;;28766:183;;;28803:45;28840:7;28803:36;:45::i;:::-;28766:183;;;28876:4;28870:10;;:2;:10;;;28866:83;;28897:40;28925:2;28929:7;28897:27;:40::i;:::-;28866:83;28766:183;28367:589;;;:::o;24808:126::-;;;;:::o;26441:300::-;26588:4;26645:35;26630:50;;;:11;:50;;;;:103;;;;26697:36;26721:11;26697:23;:36::i;:::-;26630:103;26610:123;;26441:300;;;:::o;19278:127::-;19343:4;19395:1;19367:30;;:7;:16;19375:7;19367:16;;;;;;;;;;;;;;;;;;;;;:30;;;;19360:37;;19278:127;;;:::o;906:98::-;959:7;986:10;979:17;;906:98;:::o;22403:174::-;22505:2;22478:15;:24;22494:7;22478:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22561:7;22557:2;22523:46;;22532:23;22547:7;22532:14;:23::i;:::-;22523:46;;;;;;;;;;;;22403:174;;:::o;46949:117::-;47000:21;47006:10;47018:2;47000:5;:21::i;:::-;47055:2;47039:19;;;;;;;;;;46949:117;:::o;19574:452::-;19703:4;19747:16;19755:7;19747;:16::i;:::-;19725:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;19846:13;19862:23;19877:7;19862:14;:23::i;:::-;19846:39;;19915:5;19904:16;;:7;:16;;;:64;;;;19961:7;19937:31;;:20;19949:7;19937:11;:20::i;:::-;:31;;;19904:64;:113;;;;19985:32;20002:5;20009:7;19985:16;:32::i;:::-;19904:113;19896:122;;;19574:452;;;;:::o;21670:615::-;21843:4;21816:31;;:23;21831:7;21816:14;:23::i;:::-;:31;;;21794:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;21949:1;21935:16;;:2;:16;;;;21927:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22005:39;22026:4;22032:2;22036:7;22005:20;:39::i;:::-;22109:29;22126:1;22130:7;22109:8;:29::i;:::-;22170:1;22151:9;:15;22161:4;22151:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;22199:1;22182:9;:13;22192:2;22182:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;22230:2;22211:7;:16;22219:7;22211:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;22269:7;22265:2;22250:27;;22259:4;22250:27;;;;;;;;;;;;21670:615;;;:::o;20973:360::-;21033:13;21049:23;21064:7;21049:14;:23::i;:::-;21033:39;;21085:48;21106:5;21121:1;21125:7;21085:20;:48::i;:::-;21174:29;21191:1;21195:7;21174:8;:29::i;:::-;21236:1;21216:9;:16;21226:5;21216:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;21255:7;:16;21263:7;21255:16;;;;;;;;;;;;21248:23;;;;;;;;;;;21317:7;21313:1;21289:36;;21298:5;21289:36;;;;;;;;;;;;21022:311;20973:360;:::o;34952:173::-;35008:16;35027:6;;;;;;;;;;;35008:25;;35053:8;35044:6;;:17;;;;;;;;;;;;;;;;;;35108:8;35077:40;;35098:8;35077:40;;;;;;;;;;;;34997:128;34952:173;:::o;18613:352::-;18770:28;18780:4;18786:2;18790:7;18770:9;:28::i;:::-;18831:48;18854:4;18860:2;18864:7;18873:5;18831:22;:48::i;:::-;18809:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;18613:352;;;;:::o;46165:114::-;46225:13;46258;46251:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46165:114;:::o;35381:723::-;35437:13;35667:1;35658:5;:10;35654:53;;;35685:10;;;;;;;;;;;;;;;;;;;;;35654:53;35717:12;35732:5;35717:20;;35748:14;35773:78;35788:1;35780:4;:9;35773:78;;35806:8;;;;;:::i;:::-;;;;35837:2;35829:10;;;;;:::i;:::-;;;35773:78;;;35861:19;35893:6;35883:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35861:39;;35911:154;35927:1;35918:5;:10;35911:154;;35955:1;35945:11;;;;;:::i;:::-;;;36022:2;36014:5;:10;;;;:::i;:::-;36001:2;:24;;;;:::i;:::-;35988:39;;35971:6;35978;35971:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;36051:2;36042:11;;;;;:::i;:::-;;;35911:154;;;36089:6;36075:21;;;;;35381:723;;;;:::o;29679:164::-;29783:10;:17;;;;29756:15;:24;29772:7;29756:24;;;;;;;;;;;:44;;;;29811:10;29827:7;29811:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29679:164;:::o;30470:1002::-;30750:22;30800:1;30775:22;30792:4;30775:16;:22::i;:::-;:26;;;;:::i;:::-;30750:51;;30812:18;30833:17;:26;30851:7;30833:26;;;;;;;;;;;;30812:47;;30980:14;30966:10;:28;30962:328;;31011:19;31033:12;:18;31046:4;31033:18;;;;;;;;;;;;;;;:34;31052:14;31033:34;;;;;;;;;;;;31011:56;;31117:11;31084:12;:18;31097:4;31084:18;;;;;;;;;;;;;;;:30;31103:10;31084:30;;;;;;;;;;;:44;;;;31234:10;31201:17;:30;31219:11;31201:30;;;;;;;;;;;:43;;;;30996:294;30962:328;31386:17;:26;31404:7;31386:26;;;;;;;;;;;31379:33;;;31430:12;:18;31443:4;31430:18;;;;;;;;;;;;;;;:34;31449:14;31430:34;;;;;;;;;;;31423:41;;;30565:907;;30470:1002;;:::o;31767:1079::-;32020:22;32065:1;32045:10;:17;;;;:21;;;;:::i;:::-;32020:46;;32077:18;32098:15;:24;32114:7;32098:24;;;;;;;;;;;;32077:45;;32449:19;32471:10;32482:14;32471:26;;;;;;;;:::i;:::-;;;;;;;;;;32449:48;;32535:11;32510:10;32521;32510:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;32646:10;32615:15;:28;32631:11;32615:28;;;;;;;;;;;:41;;;;32787:15;:24;32803:7;32787:24;;;;;;;;;;;32780:31;;;32822:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31838:1008;;;31767:1079;:::o;29257:221::-;29342:14;29359:20;29376:2;29359:16;:20::i;:::-;29342:37;;29417:7;29390:12;:16;29403:2;29390:16;;;;;;;;;;;;;;;:24;29407:6;29390:24;;;;;;;;;;;:34;;;;29464:6;29435:17;:26;29453:7;29435:26;;;;;;;;;;;:35;;;;29331:147;29257:221;;:::o;12853:355::-;13000:4;13057:25;13042:40;;;:11;:40;;;;:105;;;;13114:33;13099:48;;;:11;:48;;;;13042:105;:158;;;;13164:36;13188:11;13164:23;:36::i;:::-;13042:158;13022:178;;12853:355;;;:::o;20362:382::-;20456:1;20442:16;;:2;:16;;;;20434:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20515:16;20523:7;20515;:16::i;:::-;20514:17;20506:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20577:45;20606:1;20610:2;20614:7;20577:20;:45::i;:::-;20652:1;20635:9;:13;20645:2;20635:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;20683:2;20664:7;:16;20672:7;20664:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20728:7;20724:2;20703:33;;20720:1;20703:33;;;;;;;;;;;;20362:382;;:::o;47732:223::-;47902:45;47929:4;47935:2;47939:7;47902:26;:45::i;:::-;47732:223;;;:::o;23142:1053::-;23297:4;23318:15;:2;:13;;;:15::i;:::-;23314:874;;;23387:2;23371:36;;;23430:12;:10;:12::i;:::-;23465:4;23492:7;23522:5;23371:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23350:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23750:1;23733:6;:13;:18;23729:389;;;23776:108;;;;;;;;;;:::i;:::-;;;;;;;;23729:389;24068:6;24062:13;24053:6;24049:2;24045:15;24038:38;23350:783;23620:45;;;23610:55;;;:6;:55;;;;23603:62;;;;;23314:874;24172:4;24165:11;;23142:1053;;;;;;;:::o;11381:207::-;11511:4;11555:25;11540:40;;;:11;:40;;;;11533:47;;11381:207;;;:::o;37876:387::-;37936:4;38144:12;38211:7;38199:20;38191:28;;38254:1;38247:4;:8;38240:15;;;37876:387;;;:::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:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5733:79;;:::i;:::-;5695:2;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5685:262;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6077:79;;:::i;:::-;6039:2;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;6029:273;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:2;;;6432:79;;:::i;:::-;6394:2;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:2;;;6632:79;;:::i;:::-;6596:2;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6384:433;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:2;;;6937:79;;:::i;:::-;6899:2;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6889:263;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7223:53;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7341:50;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8662:220;;;:::o;8888:366::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;9034:220;;;:::o;9260:366::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9406:220;;;:::o;9632:366::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9778:220;;;:::o;10004:366::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10150:220;;;:::o;10376:366::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10522:220;;;:::o;10748:366::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10894:220;;;:::o;11120:366::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11266:220;;;:::o;11492:366::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11638:220;;;:::o;11864:366::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;12010:220;;;:::o;12236:366::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12382:220;;;:::o;12608:366::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12754:220;;;:::o;12980:366::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;13126:220;;;:::o;13352:366::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13498:220;;;:::o;13724:366::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13870:220;;;:::o;14096:366::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14242:220;;;:::o;14468:366::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14614:220;;;:::o;14840:366::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14986:220;;;:::o;15212:366::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15358:220;;;:::o;15584:366::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15730:220;;;:::o;15956:366::-;16098:3;16119:67;16183:2;16178:3;16119:67;:::i;:::-;16112:74;;16195:93;16284:3;16195:93;:::i;:::-;16313:2;16308:3;16304:12;16297:19;;16102:220;;;:::o;16328:118::-;16415:24;16433:5;16415:24;:::i;:::-;16410:3;16403:37;16393:53;;:::o;16452:435::-;16632:3;16654:95;16745:3;16736:6;16654:95;:::i;:::-;16647:102;;16766:95;16857:3;16848:6;16766:95;:::i;:::-;16759:102;;16878:3;16871:10;;16636:251;;;;;:::o;16893:222::-;16986:4;17024:2;17013:9;17009:18;17001:26;;17037:71;17105:1;17094:9;17090:17;17081:6;17037:71;:::i;:::-;16991:124;;;;:::o;17121:640::-;17316:4;17354:3;17343:9;17339:19;17331:27;;17368:71;17436:1;17425:9;17421:17;17412:6;17368:71;:::i;:::-;17449:72;17517:2;17506:9;17502:18;17493:6;17449:72;:::i;:::-;17531;17599:2;17588:9;17584:18;17575:6;17531:72;:::i;:::-;17650:9;17644:4;17640:20;17635:2;17624:9;17620:18;17613:48;17678:76;17749:4;17740:6;17678:76;:::i;:::-;17670:84;;17321:440;;;;;;;:::o;17767:210::-;17854:4;17892:2;17881:9;17877:18;17869:26;;17905:65;17967:1;17956:9;17952:17;17943:6;17905:65;:::i;:::-;17859:118;;;;:::o;17983:313::-;18096:4;18134:2;18123:9;18119:18;18111:26;;18183:9;18177:4;18173:20;18169:1;18158:9;18154:17;18147:47;18211:78;18284:4;18275:6;18211:78;:::i;:::-;18203:86;;18101:195;;;;:::o;18302:419::-;18468:4;18506:2;18495:9;18491:18;18483:26;;18555:9;18549:4;18545:20;18541:1;18530:9;18526:17;18519:47;18583:131;18709:4;18583:131;:::i;:::-;18575:139;;18473:248;;;:::o;18727:419::-;18893:4;18931:2;18920:9;18916:18;18908:26;;18980:9;18974:4;18970:20;18966:1;18955:9;18951:17;18944:47;19008:131;19134:4;19008:131;:::i;:::-;19000:139;;18898:248;;;:::o;19152:419::-;19318:4;19356:2;19345:9;19341:18;19333:26;;19405:9;19399:4;19395:20;19391:1;19380:9;19376:17;19369:47;19433:131;19559:4;19433:131;:::i;:::-;19425:139;;19323:248;;;:::o;19577:419::-;19743:4;19781:2;19770:9;19766:18;19758:26;;19830:9;19824:4;19820:20;19816:1;19805:9;19801:17;19794:47;19858:131;19984:4;19858:131;:::i;:::-;19850:139;;19748:248;;;:::o;20002:419::-;20168:4;20206:2;20195:9;20191:18;20183:26;;20255:9;20249:4;20245:20;20241:1;20230:9;20226:17;20219:47;20283:131;20409:4;20283:131;:::i;:::-;20275:139;;20173:248;;;:::o;20427:419::-;20593:4;20631:2;20620:9;20616:18;20608:26;;20680:9;20674:4;20670:20;20666:1;20655:9;20651:17;20644:47;20708:131;20834:4;20708:131;:::i;:::-;20700:139;;20598:248;;;:::o;20852:419::-;21018:4;21056:2;21045:9;21041:18;21033:26;;21105:9;21099:4;21095:20;21091:1;21080:9;21076:17;21069:47;21133:131;21259:4;21133:131;:::i;:::-;21125:139;;21023:248;;;:::o;21277:419::-;21443:4;21481:2;21470:9;21466:18;21458:26;;21530:9;21524:4;21520:20;21516:1;21505:9;21501:17;21494:47;21558:131;21684:4;21558:131;:::i;:::-;21550:139;;21448:248;;;:::o;21702:419::-;21868:4;21906:2;21895:9;21891:18;21883:26;;21955:9;21949:4;21945:20;21941:1;21930:9;21926:17;21919:47;21983:131;22109:4;21983:131;:::i;:::-;21975:139;;21873:248;;;:::o;22127:419::-;22293:4;22331:2;22320:9;22316:18;22308:26;;22380:9;22374:4;22370:20;22366:1;22355:9;22351:17;22344:47;22408:131;22534:4;22408:131;:::i;:::-;22400:139;;22298:248;;;:::o;22552:419::-;22718:4;22756:2;22745:9;22741:18;22733:26;;22805:9;22799:4;22795:20;22791:1;22780:9;22776:17;22769:47;22833:131;22959:4;22833:131;:::i;:::-;22825:139;;22723:248;;;:::o;22977:419::-;23143:4;23181:2;23170:9;23166:18;23158:26;;23230:9;23224:4;23220:20;23216:1;23205:9;23201:17;23194:47;23258:131;23384:4;23258:131;:::i;:::-;23250:139;;23148:248;;;:::o;23402:419::-;23568:4;23606:2;23595:9;23591:18;23583:26;;23655:9;23649:4;23645:20;23641:1;23630:9;23626:17;23619:47;23683:131;23809:4;23683:131;:::i;:::-;23675:139;;23573:248;;;:::o;23827:419::-;23993:4;24031:2;24020:9;24016:18;24008:26;;24080:9;24074:4;24070:20;24066:1;24055:9;24051:17;24044:47;24108:131;24234:4;24108:131;:::i;:::-;24100:139;;23998:248;;;:::o;24252:419::-;24418:4;24456:2;24445:9;24441:18;24433:26;;24505:9;24499:4;24495:20;24491:1;24480:9;24476:17;24469:47;24533:131;24659:4;24533:131;:::i;:::-;24525:139;;24423:248;;;:::o;24677:419::-;24843:4;24881:2;24870:9;24866:18;24858:26;;24930:9;24924:4;24920:20;24916:1;24905:9;24901:17;24894:47;24958:131;25084:4;24958:131;:::i;:::-;24950:139;;24848:248;;;:::o;25102:419::-;25268:4;25306:2;25295:9;25291:18;25283:26;;25355:9;25349:4;25345:20;25341:1;25330:9;25326:17;25319:47;25383:131;25509:4;25383:131;:::i;:::-;25375:139;;25273:248;;;:::o;25527:419::-;25693:4;25731:2;25720:9;25716:18;25708:26;;25780:9;25774:4;25770:20;25766:1;25755:9;25751:17;25744:47;25808:131;25934:4;25808:131;:::i;:::-;25800:139;;25698:248;;;:::o;25952:419::-;26118:4;26156:2;26145:9;26141:18;26133:26;;26205:9;26199:4;26195:20;26191:1;26180:9;26176:17;26169:47;26233:131;26359:4;26233:131;:::i;:::-;26225:139;;26123:248;;;:::o;26377:419::-;26543:4;26581:2;26570:9;26566:18;26558:26;;26630:9;26624:4;26620:20;26616:1;26605:9;26601:17;26594:47;26658:131;26784:4;26658:131;:::i;:::-;26650:139;;26548:248;;;:::o;26802:419::-;26968:4;27006:2;26995:9;26991:18;26983:26;;27055:9;27049:4;27045:20;27041:1;27030:9;27026:17;27019:47;27083:131;27209:4;27083:131;:::i;:::-;27075:139;;26973:248;;;:::o;27227:222::-;27320:4;27358:2;27347:9;27343:18;27335:26;;27371:71;27439:1;27428:9;27424:17;27415:6;27371:71;:::i;:::-;27325:124;;;;:::o;27455:129::-;27489:6;27516:20;;:::i;:::-;27506:30;;27545:33;27573:4;27565:6;27545:33;:::i;:::-;27496:88;;;:::o;27590:75::-;27623:6;27656:2;27650:9;27640:19;;27630:35;:::o;27671:307::-;27732:4;27822:18;27814:6;27811:30;27808:2;;;27844:18;;:::i;:::-;27808:2;27882:29;27904:6;27882:29;:::i;:::-;27874:37;;27966:4;27960;27956:15;27948:23;;27737:241;;;:::o;27984:308::-;28046:4;28136:18;28128:6;28125:30;28122:2;;;28158:18;;:::i;:::-;28122:2;28196:29;28218:6;28196:29;:::i;:::-;28188:37;;28280:4;28274;28270:15;28262:23;;28051:241;;;:::o;28298:98::-;28349:6;28383:5;28377:12;28367:22;;28356:40;;;:::o;28402:99::-;28454:6;28488:5;28482:12;28472:22;;28461:40;;;:::o;28507:168::-;28590:11;28624:6;28619:3;28612:19;28664:4;28659:3;28655:14;28640:29;;28602:73;;;;:::o;28681:169::-;28765:11;28799:6;28794:3;28787:19;28839:4;28834:3;28830:14;28815:29;;28777:73;;;;:::o;28856:148::-;28958:11;28995:3;28980:18;;28970:34;;;;:::o;29010:305::-;29050:3;29069:20;29087:1;29069:20;:::i;:::-;29064:25;;29103:20;29121:1;29103:20;:::i;:::-;29098:25;;29257:1;29189:66;29185:74;29182:1;29179:81;29176:2;;;29263:18;;:::i;:::-;29176:2;29307:1;29304;29300:9;29293:16;;29054:261;;;;:::o;29321:185::-;29361:1;29378:20;29396:1;29378:20;:::i;:::-;29373:25;;29412:20;29430:1;29412:20;:::i;:::-;29407:25;;29451:1;29441:2;;29456:18;;:::i;:::-;29441:2;29498:1;29495;29491:9;29486:14;;29363:143;;;;:::o;29512:191::-;29552:4;29572:20;29590:1;29572:20;:::i;:::-;29567:25;;29606:20;29624:1;29606:20;:::i;:::-;29601:25;;29645:1;29642;29639:8;29636:2;;;29650:18;;:::i;:::-;29636:2;29695:1;29692;29688:9;29680:17;;29557:146;;;;:::o;29709:96::-;29746:7;29775:24;29793:5;29775:24;:::i;:::-;29764:35;;29754:51;;;:::o;29811:90::-;29845:7;29888:5;29881:13;29874:21;29863:32;;29853:48;;;:::o;29907:149::-;29943:7;29983:66;29976:5;29972:78;29961:89;;29951:105;;;:::o;30062:126::-;30099:7;30139:42;30132:5;30128:54;30117:65;;30107:81;;;:::o;30194:77::-;30231:7;30260:5;30249:16;;30239:32;;;:::o;30277:154::-;30361:6;30356:3;30351;30338:30;30423:1;30414:6;30409:3;30405:16;30398:27;30328:103;;;:::o;30437:307::-;30505:1;30515:113;30529:6;30526:1;30523:13;30515:113;;;30614:1;30609:3;30605:11;30599:18;30595:1;30590:3;30586:11;30579:39;30551:2;30548:1;30544:10;30539:15;;30515:113;;;30646:6;30643:1;30640:13;30637:2;;;30726:1;30717:6;30712:3;30708:16;30701:27;30637:2;30486:258;;;;:::o;30750:320::-;30794:6;30831:1;30825:4;30821:12;30811:22;;30878:1;30872:4;30868:12;30899:18;30889:2;;30955:4;30947:6;30943:17;30933:27;;30889:2;31017;31009:6;31006:14;30986:18;30983:38;30980:2;;;31036:18;;:::i;:::-;30980:2;30801:269;;;;:::o;31076:281::-;31159:27;31181:4;31159:27;:::i;:::-;31151:6;31147:40;31289:6;31277:10;31274:22;31253:18;31241:10;31238:34;31235:62;31232:2;;;31300:18;;:::i;:::-;31232:2;31340:10;31336:2;31329:22;31119:238;;;:::o;31363:233::-;31402:3;31425:24;31443:5;31425:24;:::i;:::-;31416:33;;31471:66;31464:5;31461:77;31458:2;;;31541:18;;:::i;:::-;31458:2;31588:1;31581:5;31577:13;31570:20;;31406:190;;;:::o;31602:176::-;31634:1;31651:20;31669:1;31651:20;:::i;:::-;31646:25;;31685:20;31703:1;31685:20;:::i;:::-;31680:25;;31724:1;31714:2;;31729:18;;:::i;:::-;31714:2;31770:1;31767;31763:9;31758:14;;31636:142;;;;:::o;31784:180::-;31832:77;31829:1;31822:88;31929:4;31926:1;31919:15;31953:4;31950:1;31943:15;31970:180;32018:77;32015:1;32008:88;32115:4;32112:1;32105:15;32139:4;32136:1;32129:15;32156:180;32204:77;32201:1;32194:88;32301:4;32298:1;32291:15;32325:4;32322:1;32315:15;32342:180;32390:77;32387:1;32380:88;32487:4;32484:1;32477:15;32511:4;32508:1;32501:15;32528:180;32576:77;32573:1;32566:88;32673:4;32670:1;32663:15;32697:4;32694:1;32687:15;32714:180;32762:77;32759:1;32752:88;32859:4;32856:1;32849:15;32883:4;32880:1;32873:15;32900:117;33009:1;33006;32999:12;33023:117;33132:1;33129;33122:12;33146:117;33255:1;33252;33245:12;33269:117;33378:1;33375;33368:12;33392:102;33433:6;33484:2;33480:7;33475:2;33468:5;33464:14;33460:28;33450:38;;33440:54;;;:::o;33500:230::-;33640:34;33636:1;33628:6;33624:14;33617:58;33709:13;33704:2;33696:6;33692:15;33685:38;33606:124;:::o;33736:237::-;33876:34;33872:1;33864:6;33860:14;33853:58;33945:20;33940:2;33932:6;33928:15;33921:45;33842:131;:::o;33979:225::-;34119:34;34115:1;34107:6;34103:14;34096:58;34188:8;34183:2;34175:6;34171:15;34164:33;34085:119;:::o;34210:178::-;34350:30;34346:1;34338:6;34334:14;34327:54;34316:72;:::o;34394:223::-;34534:34;34530:1;34522:6;34518:14;34511:58;34603:6;34598:2;34590:6;34586:15;34579:31;34500:117;:::o;34623:175::-;34763:27;34759:1;34751:6;34747:14;34740:51;34729:69;:::o;34804:231::-;34944:34;34940:1;34932:6;34928:14;34921:58;35013:14;35008:2;35000:6;34996:15;34989:39;34910:125;:::o;35041:223::-;35181:34;35177:1;35169:6;35165:14;35158:58;35250:6;35245:2;35237:6;35233:15;35226:31;35147:117;:::o;35270:243::-;35410:34;35406:1;35398:6;35394:14;35387:58;35479:26;35474:2;35466:6;35462:15;35455:51;35376:137;:::o;35519:229::-;35659:34;35655:1;35647:6;35643:14;35636:58;35728:12;35723:2;35715:6;35711:15;35704:37;35625:123;:::o;35754:228::-;35894:34;35890:1;35882:6;35878:14;35871:58;35963:11;35958:2;35950:6;35946:15;35939:36;35860:122;:::o;35988:182::-;36128:34;36124:1;36116:6;36112:14;36105:58;36094:76;:::o;36176:231::-;36316:34;36312:1;36304:6;36300:14;36293:58;36385:14;36380:2;36372:6;36368:15;36361:39;36282:125;:::o;36413:182::-;36553:34;36549:1;36541:6;36537:14;36530:58;36519:76;:::o;36601:227::-;36741:34;36737:1;36729:6;36725:14;36718:58;36810:10;36805:2;36797:6;36793:15;36786:35;36707:121;:::o;36834:228::-;36974:34;36970:1;36962:6;36958:14;36951:58;37043:11;37038:2;37030:6;37026:15;37019:36;36940:122;:::o;37068:234::-;37208:34;37204:1;37196:6;37192:14;37185:58;37277:17;37272:2;37264:6;37260:15;37253:42;37174:128;:::o;37308:220::-;37448:34;37444:1;37436:6;37432:14;37425:58;37517:3;37512:2;37504:6;37500:15;37493:28;37414:114;:::o;37534:236::-;37674:34;37670:1;37662:6;37658:14;37651:58;37743:19;37738:2;37730:6;37726:15;37719:44;37640:130;:::o;37776:231::-;37916:34;37912:1;37904:6;37900:14;37893:58;37985:14;37980:2;37972:6;37968:15;37961:39;37882:125;:::o;38013:235::-;38153:34;38149:1;38141:6;38137:14;38130:58;38222:18;38217:2;38209:6;38205:15;38198:43;38119:129;:::o;38254:122::-;38327:24;38345:5;38327:24;:::i;:::-;38320:5;38317:35;38307:2;;38366:1;38363;38356:12;38307:2;38297:79;:::o;38382:116::-;38452:21;38467:5;38452:21;:::i;:::-;38445:5;38442:32;38432:2;;38488:1;38485;38478:12;38432:2;38422:76;:::o;38504:120::-;38576:23;38593:5;38576:23;:::i;:::-;38569:5;38566:34;38556:2;;38614:1;38611;38604:12;38556:2;38546:78;:::o;38630:122::-;38703:24;38721:5;38703:24;:::i;:::-;38696:5;38693:35;38683:2;;38742:1;38739;38732:12;38683:2;38673:79;:::o
Swarm Source
ipfs://6acc55f9aafa8b501ae3cc960db3df95405af230840e12d113801dcd76bc0afd
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.