Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
71 WCCE
Holders
38
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 WCCELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WorldCupCollectorsEditions
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-21 */ // File: contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "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] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/access/Ownable.sol 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); } } // File: contracts/utils/Address.sol 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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); } } } } // File: contracts/token/ERC721/IERC721Receiver.sol 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); } // File: contracts/utils/introspection/IERC165.sol 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); } // File: contracts/utils/introspection/ERC165.sol 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; } } // File: contracts/token/ERC721/IERC721.sol 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; } // File: contracts/token/ERC721/extensions/IERC721Enumerable.sol 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); } // File: contracts/token/ERC721/extensions/IERC721Metadata.sol 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); } // File: contracts/token/ERC721/ERC721.sol 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}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. 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 Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/token/ERC721/extensions/ERC721Enumerable.sol 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(); } } // File: worldcup.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract WorldCupCollectorsEditions is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.013 ether; uint256 public presaleCost = 0.03 ether; uint256 public maxSupply = 422; uint256 public maxMintAmount = 20; bool public paused = false; mapping(address => bool) public whitelisted; mapping(address => bool) public presaleWallets; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); mint(msg.sender, 20); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if (whitelisted[msg.sender] != true) { if (presaleWallets[msg.sender] != true) { //general public require(msg.value >= cost * _mintAmount); } else { //presale require(msg.value >= presaleCost * _mintAmount); } } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setPresaleCost(uint256 _newCost) public onlyOwner { presaleCost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function addPresaleUser(address _user) public onlyOwner { presaleWallets[_user] = true; } function add100PresaleUsers(address[100] memory _users) public onlyOwner { for (uint256 i = 0; i < 2; i++) { presaleWallets[_users[i]] = true; } } function removePresaleUser(address _user) public onlyOwner { presaleWallets[_user] = false; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[100]","name":"_users","type":"address[100]"}],"name":"add100PresaleUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a919062001111565b50662e2f6e5e148000600d55666a94d74f430000600e556101a6600f5560146010556000601160006101000a81548160ff0219169083151502179055503480156200009457600080fd5b506040516200659b3803806200659b8339818101604052810190620000ba91906200135c565b82828160009081620000cd919062001111565b508060019081620000df919062001111565b50505062000102620000f66200012f60201b60201c565b6200013760201b60201c565b6200011381620001fd60201b60201c565b62000126336014620002a160201b60201c565b505050620019dd565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200020d6200012f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002336200048d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200028c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002839062001476565b60405180910390fd5b80600b90816200029d919062001111565b5050565b6000620002b3620004b760201b60201c565b9050601160009054906101000a900460ff1615620002d057600080fd5b60008211620002de57600080fd5b601054821115620002ee57600080fd5b600f548282620002ff9190620014c7565b11156200030b57600080fd5b6200031b6200048d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004435760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620004425760011515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620004235781600d5462000410919062001502565b3410156200041d57600080fd5b62000441565b81600e5462000433919062001502565b3410156200044057600080fd5b5b5b5b6000600190505b828111620004875762000471848284620004659190620014c7565b620004c460201b60201c565b80806200047e906200154d565b9150506200044a565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620004e6828260405180602001604052806000815250620004ea60201b60201c565b5050565b620004fc83836200055860201b60201c565b6200051160008484846200073d60201b60201c565b62000553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054a9062001610565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620005ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c19062001682565b60405180910390fd5b620005db81620008e660201b60201c565b156200061e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200061590620016f4565b60405180910390fd5b62000632600083836200095260201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006849190620014c7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200076b8473ffffffffffffffffffffffffffffffffffffffff1662000a9760201b6200216d1760201c565b15620008d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200079d6200012f60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007c19493929190620017c9565b6020604051808303816000875af19250505080156200080057506040513d601f19601f82011682018060405250810190620007fd91906200187a565b60015b62000888573d806000811462000833576040519150601f19603f3d011682016040523d82523d6000602084013e62000838565b606091505b50600081510362000880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008779062001610565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008de565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200096a83838362000aaa60201b620021801760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620009b657620009b08162000aaf60201b60201c565b620009fe565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009fd57620009fc838262000af860201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a4a5762000a448162000c7560201b60201c565b62000a92565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a915762000a90828262000d5160201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b128462000ddd60201b6200175e1760201c565b62000b1e9190620018ac565b905060006007600084815260200190815260200160002054905081811462000c04576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c8b9190620018ac565b905060006009600084815260200190815260200160002054905060006008838154811062000cbe5762000cbd620018e7565b5b90600052602060002001549050806008838154811062000ce35762000ce2620018e7565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d355762000d3462001916565b5b6001900381819060005260206000200160009055905550505050565b600062000d698362000ddd60201b6200175e1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e4790620019bb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f1957607f821691505b60208210810362000f2f5762000f2e62000ed1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f5a565b62000fa5868362000f5a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ff262000fec62000fe68462000fbd565b62000fc7565b62000fbd565b9050919050565b6000819050919050565b6200100e8362000fd1565b620010266200101d8262000ff9565b84845462000f67565b825550505050565b600090565b6200103d6200102e565b6200104a81848462001003565b505050565b5b8181101562001072576200106660008262001033565b60018101905062001050565b5050565b601f821115620010c1576200108b8162000f35565b620010968462000f4a565b81016020851015620010a6578190505b620010be620010b58562000f4a565b8301826200104f565b50505b505050565b600082821c905092915050565b6000620010e660001984600802620010c6565b1980831691505092915050565b6000620011018383620010d3565b9150826002028217905092915050565b6200111c8262000e97565b67ffffffffffffffff81111562001138576200113762000ea2565b5b62001144825462000f00565b6200115182828562001076565b600060209050601f83116001811462001189576000841562001174578287015190505b620011808582620010f3565b865550620011f0565b601f198416620011998662000f35565b60005b82811015620011c3578489015182556001820191506020850194506020810190506200119c565b86831015620011e35784890151620011df601f891682620010d3565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620012328262001216565b810181811067ffffffffffffffff8211171562001254576200125362000ea2565b5b80604052505050565b600062001269620011f8565b905062001277828262001227565b919050565b600067ffffffffffffffff8211156200129a576200129962000ea2565b5b620012a58262001216565b9050602081019050919050565b60005b83811015620012d2578082015181840152602081019050620012b5565b60008484015250505050565b6000620012f5620012ef846200127c565b6200125d565b90508281526020810184848401111562001314576200131362001211565b5b62001321848285620012b2565b509392505050565b600082601f8301126200134157620013406200120c565b5b815162001353848260208601620012de565b91505092915050565b60008060006060848603121562001378576200137762001202565b5b600084015167ffffffffffffffff81111562001399576200139862001207565b5b620013a78682870162001329565b935050602084015167ffffffffffffffff811115620013cb57620013ca62001207565b5b620013d98682870162001329565b925050604084015167ffffffffffffffff811115620013fd57620013fc62001207565b5b6200140b8682870162001329565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200145e60208362001415565b91506200146b8262001426565b602082019050919050565b6000602082019050818103600083015262001491816200144f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620014d48262000fbd565b9150620014e18362000fbd565b9250828201905080821115620014fc57620014fb62001498565b5b92915050565b60006200150f8262000fbd565b91506200151c8362000fbd565b92508282026200152c8162000fbd565b9150828204841483151762001546576200154562001498565b5b5092915050565b60006200155a8262000fbd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200158f576200158e62001498565b5b600182019050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000620015f860328362001415565b915062001605826200159a565b604082019050919050565b600060208201905081810360008301526200162b81620015e9565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200166a60208362001415565b9150620016778262001632565b602082019050919050565b600060208201905081810360008301526200169d816200165b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620016dc601c8362001415565b9150620016e982620016a4565b602082019050919050565b600060208201905081810360008301526200170f81620016cd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620017438262001716565b9050919050565b620017558162001736565b82525050565b620017668162000fbd565b82525050565b600081519050919050565b600082825260208201905092915050565b600062001795826200176c565b620017a1818562001777565b9350620017b3818560208601620012b2565b620017be8162001216565b840191505092915050565b6000608082019050620017e060008301876200174a565b620017ef60208301866200174a565b620017fe60408301856200175b565b818103606083015262001812818462001788565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001854816200181d565b81146200186057600080fd5b50565b600081519050620018748162001849565b92915050565b60006020828403121562001893576200189262001202565b5b6000620018a38482850162001863565b91505092915050565b6000620018b98262000fbd565b9150620018c68362000fbd565b9250828203905081811115620018e157620018e062001498565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000620019a3602a8362001415565b9150620019b08262001945565b604082019050919050565b60006020820190508181036000830152620019d68162001994565b9050919050565b614bae80620019ed6000396000f3fe6080604052600436106102515760003560e01c806355f804b311610139578063a22cb465116100b6578063d5abeb011161007a578063d5abeb01146108a4578063d936547e146108cf578063da3ef23f1461090c578063e985e9c514610935578063ed931e1714610972578063f2fde38b1461099b57610251565b8063a22cb465146107c1578063b2f3e85e146107ea578063b88d4fde14610813578063c66828621461083c578063c87b56dd1461086757610251565b8063715018a6116100fd578063715018a6146107025780637f00c7a6146107195780638da5cb5b146107425780638fdcf9421461076d57806395d89b411461079657610251565b806355f804b3146106095780635c975abb146106325780636352211e1461065d5780636c0360eb1461069a57806370a08231146106c557610251565b80632f745c59116101d257806342842e0e1161019657806342842e0e146104eb578063438b63001461051457806344a0d68a146105515780634a4c560d1461057a5780634f6ccce7146105a3578063546857c7146105e057610251565b80632f745c591461042257806330b2264e1461045f57806330cc7ae01461049c5780633ccfd60b146104c557806340c10f19146104cf57610251565b806313faede61161021957806313faede61461034d57806318160ddd14610378578063239c70ae146103a357806323b872dd146103ce5780632a23d07d146103f757610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063095ea7b314610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061329c565b6109c4565b60405161028a91906132e4565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061332b565b610a3e565b005b3480156102c857600080fd5b506102d1610ad7565b6040516102de91906133e8565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613440565b610b69565b60405161031b91906134ae565b60405180910390f35b34801561033057600080fd5b5061034b600480360381019061034691906134f5565b610bee565b005b34801561035957600080fd5b50610362610d05565b60405161036f9190613544565b60405180910390f35b34801561038457600080fd5b5061038d610d0b565b60405161039a9190613544565b60405180910390f35b3480156103af57600080fd5b506103b8610d18565b6040516103c59190613544565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f0919061355f565b610d1e565b005b34801561040357600080fd5b5061040c610d7e565b6040516104199190613544565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906134f5565b610d84565b6040516104569190613544565b60405180910390f35b34801561046b57600080fd5b50610486600480360381019061048191906135b2565b610e29565b60405161049391906132e4565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906135b2565b610e49565b005b6104cd610f20565b005b6104e960048036038101906104e491906134f5565b611015565b005b3480156104f757600080fd5b50610512600480360381019061050d919061355f565b6111d3565b005b34801561052057600080fd5b5061053b600480360381019061053691906135b2565b6111f3565b604051610548919061369d565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613440565b6112a1565b005b34801561058657600080fd5b506105a1600480360381019061059c91906135b2565b611327565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190613440565b6113fe565b6040516105d79190613544565b60405180910390f35b3480156105ec57600080fd5b50610607600480360381019061060291906137f5565b61146f565b005b34801561061557600080fd5b50610630600480360381019061062b91906138d8565b61157d565b005b34801561063e57600080fd5b5061064761160c565b60405161065491906132e4565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613440565b61161f565b60405161069191906134ae565b60405180910390f35b3480156106a657600080fd5b506106af6116d0565b6040516106bc91906133e8565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906135b2565b61175e565b6040516106f99190613544565b60405180910390f35b34801561070e57600080fd5b50610717611815565b005b34801561072557600080fd5b50610740600480360381019061073b9190613440565b61189d565b005b34801561074e57600080fd5b50610757611923565b60405161076491906134ae565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f9190613440565b61194d565b005b3480156107a257600080fd5b506107ab6119d3565b6040516107b891906133e8565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190613921565b611a65565b005b3480156107f657600080fd5b50610811600480360381019061080c91906135b2565b611be5565b005b34801561081f57600080fd5b5061083a60048036038101906108359190613a02565b611cbc565b005b34801561084857600080fd5b50610851611d1e565b60405161085e91906133e8565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613440565b611dac565b60405161089b91906133e8565b60405180910390f35b3480156108b057600080fd5b506108b9611e56565b6040516108c69190613544565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f191906135b2565b611e5c565b60405161090391906132e4565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e91906138d8565b611e7c565b005b34801561094157600080fd5b5061095c60048036038101906109579190613a85565b611f0b565b60405161096991906132e4565b60405180910390f35b34801561097e57600080fd5b50610999600480360381019061099491906135b2565b611f9f565b005b3480156109a757600080fd5b506109c260048036038101906109bd91906135b2565b612076565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a375750610a3682612185565b5b9050919050565b610a46612267565b73ffffffffffffffffffffffffffffffffffffffff16610a64611923565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190613b11565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610ae690613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1290613b60565b8015610b5f5780601f10610b3457610100808354040283529160200191610b5f565b820191906000526020600020905b815481529060010190602001808311610b4257829003601f168201915b5050505050905090565b6000610b748261226f565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90613c03565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf98261161f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090613c95565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c88612267565b73ffffffffffffffffffffffffffffffffffffffff161480610cb75750610cb681610cb1612267565b611f0b565b5b610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613d27565b60405180910390fd5b610d0083836122db565b505050565b600d5481565b6000600880549050905090565b60105481565b610d2f610d29612267565b82612394565b610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590613db9565b60405180910390fd5b610d79838383612472565b505050565b600e5481565b6000610d8f8361175e565b8210610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790613e4b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610e51612267565b73ffffffffffffffffffffffffffffffffffffffff16610e6f611923565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90613b11565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f28612267565b73ffffffffffffffffffffffffffffffffffffffff16610f46611923565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613b11565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610fc290613e9c565b60006040518083038185875af1925050503d8060008114610fff576040519150601f19603f3d011682016040523d82523d6000602084013e611004565b606091505b505090508061101257600080fd5b50565b600061101f610d0b565b9050601160009054906101000a900460ff161561103b57600080fd5b6000821161104857600080fd5b60105482111561105757600080fd5b600f5482826110669190613ee0565b111561107157600080fd5b611079611923565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111975760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111965760011515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461117a5781600d546111699190613f14565b34101561117557600080fd5b611195565b81600e546111889190613f14565b34101561119457600080fd5b5b5b5b6000600190505b8281116111cd576111ba8482846111b59190613ee0565b6126cd565b80806111c590613f56565b91505061119e565b50505050565b6111ee83838360405180602001604052806000815250611cbc565b505050565b606060006112008361175e565b905060008167ffffffffffffffff81111561121e5761121d6136c4565b5b60405190808252806020026020018201604052801561124c5781602001602082028036833780820191505090505b50905060005b82811015611296576112648582610d84565b82828151811061127757611276613f9e565b5b602002602001018181525050808061128e90613f56565b915050611252565b508092505050919050565b6112a9612267565b73ffffffffffffffffffffffffffffffffffffffff166112c7611923565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613b11565b60405180910390fd5b80600d8190555050565b61132f612267565b73ffffffffffffffffffffffffffffffffffffffff1661134d611923565b73ffffffffffffffffffffffffffffffffffffffff16146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613b11565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611408610d0b565b8210611449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114409061403f565b60405180910390fd5b6008828154811061145d5761145c613f9e565b5b90600052602060002001549050919050565b611477612267565b73ffffffffffffffffffffffffffffffffffffffff16611495611923565b73ffffffffffffffffffffffffffffffffffffffff16146114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290613b11565b60405180910390fd5b60005b6002811015611579576001601360008484606481106115105761150f613f9e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061157190613f56565b9150506114ee565b5050565b611585612267565b73ffffffffffffffffffffffffffffffffffffffff166115a3611923565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613b11565b60405180910390fd5b80600b9081611608919061420b565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be9061434f565b60405180910390fd5b80915050919050565b600b80546116dd90613b60565b80601f016020809104026020016040519081016040528092919081815260200182805461170990613b60565b80156117565780601f1061172b57610100808354040283529160200191611756565b820191906000526020600020905b81548152906001019060200180831161173957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c5906143e1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61181d612267565b73ffffffffffffffffffffffffffffffffffffffff1661183b611923565b73ffffffffffffffffffffffffffffffffffffffff1614611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613b11565b60405180910390fd5b61189b60006126eb565b565b6118a5612267565b73ffffffffffffffffffffffffffffffffffffffff166118c3611923565b73ffffffffffffffffffffffffffffffffffffffff1614611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090613b11565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611955612267565b73ffffffffffffffffffffffffffffffffffffffff16611973611923565b73ffffffffffffffffffffffffffffffffffffffff16146119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613b11565b60405180910390fd5b80600e8190555050565b6060600180546119e290613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0e90613b60565b8015611a5b5780601f10611a3057610100808354040283529160200191611a5b565b820191906000526020600020905b815481529060010190602001808311611a3e57829003601f168201915b5050505050905090565b611a6d612267565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad19061444d565b60405180910390fd5b8060056000611ae7612267565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b94612267565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bd991906132e4565b60405180910390a35050565b611bed612267565b73ffffffffffffffffffffffffffffffffffffffff16611c0b611923565b73ffffffffffffffffffffffffffffffffffffffff1614611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613b11565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ccd611cc7612267565b83612394565b611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390613db9565b60405180910390fd5b611d18848484846127b1565b50505050565b600c8054611d2b90613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5790613b60565b8015611da45780601f10611d7957610100808354040283529160200191611da4565b820191906000526020600020905b815481529060010190602001808311611d8757829003601f168201915b505050505081565b6060611db78261226f565b611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906144df565b60405180910390fd5b6000611e0061280d565b90506000815111611e205760405180602001604052806000815250611e4e565b80611e2a8461289f565b600c604051602001611e3e939291906145be565b6040516020818303038152906040525b915050919050565b600f5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611e84612267565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611923565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613b11565b60405180910390fd5b80600c9081611f07919061420b565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fa7612267565b73ffffffffffffffffffffffffffffffffffffffff16611fc5611923565b73ffffffffffffffffffffffffffffffffffffffff161461201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613b11565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61207e612267565b73ffffffffffffffffffffffffffffffffffffffff1661209c611923565b73ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613b11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614661565b60405180910390fd5b61216a816126eb565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061225057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612260575061225f826129ff565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661234e8361161f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061239f8261226f565b6123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906146f3565b60405180910390fd5b60006123e98361161f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061245857508373ffffffffffffffffffffffffffffffffffffffff1661244084610b69565b73ffffffffffffffffffffffffffffffffffffffff16145b8061246957506124688185611f0b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124928261161f565b73ffffffffffffffffffffffffffffffffffffffff16146124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e90614817565b60405180910390fd5b612562838383612a69565b61256d6000826122db565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125bd9190614837565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126149190613ee0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126e7828260405180602001604052806000815250612b7b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127bc848484612472565b6127c884848484612bd6565b612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe906148dd565b60405180910390fd5b50505050565b6060600b805461281c90613b60565b80601f016020809104026020016040519081016040528092919081815260200182805461284890613b60565b80156128955780601f1061286a57610100808354040283529160200191612895565b820191906000526020600020905b81548152906001019060200180831161287857829003601f168201915b5050505050905090565b6060600082036128e6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129fa565b600082905060005b6000821461291857808061290190613f56565b915050600a82612911919061492c565b91506128ee565b60008167ffffffffffffffff811115612934576129336136c4565b5b6040519080825280601f01601f1916602001820160405280156129665781602001600182028036833780820191505090505b5090505b600085146129f35760018261297f9190614837565b9150600a8561298e919061495d565b603061299a9190613ee0565b60f81b8183815181106129b0576129af613f9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129ec919061492c565b945061296a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a74838383612180565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab657612ab181612d5d565b612af5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612af457612af38382612da6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b3757612b3281612f13565b612b76565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b7557612b748282612fe4565b5b5b505050565b612b858383613063565b612b926000848484612bd6565b612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc8906148dd565b60405180910390fd5b505050565b6000612bf78473ffffffffffffffffffffffffffffffffffffffff1661216d565b15612d50578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c20612267565b8786866040518563ffffffff1660e01b8152600401612c4294939291906149e3565b6020604051808303816000875af1925050508015612c7e57506040513d601f19601f82011682018060405250810190612c7b9190614a44565b60015b612d00573d8060008114612cae576040519150601f19603f3d011682016040523d82523d6000602084013e612cb3565b606091505b506000815103612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef906148dd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d55565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612db38461175e565b612dbd9190614837565b9050600060076000848152602001908152602001600020549050818114612ea2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f279190614837565b9050600060096000848152602001908152602001600020549050600060088381548110612f5757612f56613f9e565b5b906000526020600020015490508060088381548110612f7957612f78613f9e565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fc857612fc7614a71565b5b6001900381819060005260206000200160009055905550505050565b6000612fef8361175e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c990614aec565b60405180910390fd5b6130db8161226f565b1561311b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311290614b58565b60405180910390fd5b61312760008383612a69565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131779190613ee0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61327981613244565b811461328457600080fd5b50565b60008135905061329681613270565b92915050565b6000602082840312156132b2576132b161323a565b5b60006132c084828501613287565b91505092915050565b60008115159050919050565b6132de816132c9565b82525050565b60006020820190506132f960008301846132d5565b92915050565b613308816132c9565b811461331357600080fd5b50565b600081359050613325816132ff565b92915050565b6000602082840312156133415761334061323a565b5b600061334f84828501613316565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613392578082015181840152602081019050613377565b60008484015250505050565b6000601f19601f8301169050919050565b60006133ba82613358565b6133c48185613363565b93506133d4818560208601613374565b6133dd8161339e565b840191505092915050565b6000602082019050818103600083015261340281846133af565b905092915050565b6000819050919050565b61341d8161340a565b811461342857600080fd5b50565b60008135905061343a81613414565b92915050565b6000602082840312156134565761345561323a565b5b60006134648482850161342b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134988261346d565b9050919050565b6134a88161348d565b82525050565b60006020820190506134c3600083018461349f565b92915050565b6134d28161348d565b81146134dd57600080fd5b50565b6000813590506134ef816134c9565b92915050565b6000806040838503121561350c5761350b61323a565b5b600061351a858286016134e0565b925050602061352b8582860161342b565b9150509250929050565b61353e8161340a565b82525050565b60006020820190506135596000830184613535565b92915050565b6000806000606084860312156135785761357761323a565b5b6000613586868287016134e0565b9350506020613597868287016134e0565b92505060406135a88682870161342b565b9150509250925092565b6000602082840312156135c8576135c761323a565b5b60006135d6848285016134e0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136148161340a565b82525050565b6000613626838361360b565b60208301905092915050565b6000602082019050919050565b600061364a826135df565b61365481856135ea565b935061365f836135fb565b8060005b83811015613690578151613677888261361a565b975061368283613632565b925050600181019050613663565b5085935050505092915050565b600060208201905081810360008301526136b7818461363f565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136fc8261339e565b810181811067ffffffffffffffff8211171561371b5761371a6136c4565b5b80604052505050565b600061372e613230565b905061373a82826136f3565b919050565b600067ffffffffffffffff82111561375a576137596136c4565b5b602082029050919050565b600080fd5b600061377d6137788461373f565b613724565b9050806020840283018581111561379757613796613765565b5b835b818110156137c057806137ac88826134e0565b845260208401935050602081019050613799565b5050509392505050565b600082601f8301126137df576137de6136bf565b5b60646137ec84828561376a565b91505092915050565b6000610c80828403121561380c5761380b61323a565b5b600061381a848285016137ca565b91505092915050565b600080fd5b600067ffffffffffffffff821115613843576138426136c4565b5b61384c8261339e565b9050602081019050919050565b82818337600083830152505050565b600061387b61387684613828565b613724565b90508281526020810184848401111561389757613896613823565b5b6138a2848285613859565b509392505050565b600082601f8301126138bf576138be6136bf565b5b81356138cf848260208601613868565b91505092915050565b6000602082840312156138ee576138ed61323a565b5b600082013567ffffffffffffffff81111561390c5761390b61323f565b5b613918848285016138aa565b91505092915050565b600080604083850312156139385761393761323a565b5b6000613946858286016134e0565b925050602061395785828601613316565b9150509250929050565b600067ffffffffffffffff82111561397c5761397b6136c4565b5b6139858261339e565b9050602081019050919050565b60006139a56139a084613961565b613724565b9050828152602081018484840111156139c1576139c0613823565b5b6139cc848285613859565b509392505050565b600082601f8301126139e9576139e86136bf565b5b81356139f9848260208601613992565b91505092915050565b60008060008060808587031215613a1c57613a1b61323a565b5b6000613a2a878288016134e0565b9450506020613a3b878288016134e0565b9350506040613a4c8782880161342b565b925050606085013567ffffffffffffffff811115613a6d57613a6c61323f565b5b613a79878288016139d4565b91505092959194509250565b60008060408385031215613a9c57613a9b61323a565b5b6000613aaa858286016134e0565b9250506020613abb858286016134e0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613afb602083613363565b9150613b0682613ac5565b602082019050919050565b60006020820190508181036000830152613b2a81613aee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b7857607f821691505b602082108103613b8b57613b8a613b31565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613bed602c83613363565b9150613bf882613b91565b604082019050919050565b60006020820190508181036000830152613c1c81613be0565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7f602183613363565b9150613c8a82613c23565b604082019050919050565b60006020820190508181036000830152613cae81613c72565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d11603883613363565b9150613d1c82613cb5565b604082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613da3603183613363565b9150613dae82613d47565b604082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e35602b83613363565b9150613e4082613dd9565b604082019050919050565b60006020820190508181036000830152613e6481613e28565b9050919050565b600081905092915050565b50565b6000613e86600083613e6b565b9150613e9182613e76565b600082019050919050565b6000613ea782613e79565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eeb8261340a565b9150613ef68361340a565b9250828201905080821115613f0e57613f0d613eb1565b5b92915050565b6000613f1f8261340a565b9150613f2a8361340a565b9250828202613f388161340a565b91508282048414831517613f4f57613f4e613eb1565b5b5092915050565b6000613f618261340a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9357613f92613eb1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614029602c83613363565b915061403482613fcd565b604082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614084565b6140cb8683614084565b95508019841693508086168417925050509392505050565b6000819050919050565b60006141086141036140fe8461340a565b6140e3565b61340a565b9050919050565b6000819050919050565b614122836140ed565b61413661412e8261410f565b848454614091565b825550505050565b600090565b61414b61413e565b614156818484614119565b505050565b5b8181101561417a5761416f600082614143565b60018101905061415c565b5050565b601f8211156141bf576141908161405f565b61419984614074565b810160208510156141a8578190505b6141bc6141b485614074565b83018261415b565b50505b505050565b600082821c905092915050565b60006141e2600019846008026141c4565b1980831691505092915050565b60006141fb83836141d1565b9150826002028217905092915050565b61421482613358565b67ffffffffffffffff81111561422d5761422c6136c4565b5b6142378254613b60565b61424282828561417e565b600060209050601f8311600181146142755760008415614263578287015190505b61426d85826141ef565b8655506142d5565b601f1984166142838661405f565b60005b828110156142ab57848901518255600182019150602085019450602081019050614286565b868310156142c857848901516142c4601f8916826141d1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614339602983613363565b9150614344826142dd565b604082019050919050565b600060208201905081810360008301526143688161432c565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006143cb602a83613363565b91506143d68261436f565b604082019050919050565b600060208201905081810360008301526143fa816143be565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614437601983613363565b915061444282614401565b602082019050919050565b600060208201905081810360008301526144668161442a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144c9602f83613363565b91506144d48261446d565b604082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b600081905092915050565b600061451582613358565b61451f81856144ff565b935061452f818560208601613374565b80840191505092915050565b6000815461454881613b60565b61455281866144ff565b9450600182166000811461456d5760018114614582576145b5565b60ff19831686528115158202860193506145b5565b61458b8561405f565b60005b838110156145ad5781548189015260018201915060208101905061458e565b838801955050505b50505092915050565b60006145ca828661450a565b91506145d6828561450a565b91506145e2828461453b565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061464b602683613363565b9150614656826145ef565b604082019050919050565b6000602082019050818103600083015261467a8161463e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146dd602c83613363565b91506146e882614681565b604082019050919050565b6000602082019050818103600083015261470c816146d0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061476f602983613363565b915061477a82614713565b604082019050919050565b6000602082019050818103600083015261479e81614762565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614801602483613363565b915061480c826147a5565b604082019050919050565b60006020820190508181036000830152614830816147f4565b9050919050565b60006148428261340a565b915061484d8361340a565b925082820390508181111561486557614864613eb1565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148c7603283613363565b91506148d28261486b565b604082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149378261340a565b91506149428361340a565b925082614952576149516148fd565b5b828204905092915050565b60006149688261340a565b91506149738361340a565b925082614983576149826148fd565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149b58261498e565b6149bf8185614999565b93506149cf818560208601613374565b6149d88161339e565b840191505092915050565b60006080820190506149f8600083018761349f565b614a05602083018661349f565b614a126040830185613535565b8181036060830152614a2481846149aa565b905095945050505050565b600081519050614a3e81613270565b92915050565b600060208284031215614a5a57614a5961323a565b5b6000614a6884828501614a2f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ad6602083613363565b9150614ae182614aa0565b602082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b42601c83613363565b9150614b4d82614b0c565b602082019050919050565b60006020820190508181036000830152614b7181614b35565b905091905056fea2646970667358221220e96adb4a60e3719dd5fd08101cc71c80d155f606856140abd98292d84838614d64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001d576f726c642043757020436f6c6c6563746f72732045646974696f6e73000000000000000000000000000000000000000000000000000000000000000000000457434345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656968326e666671686a703262617267793433363475326a6d37367232787465697334347578626a79613636787067696f67747435652f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c806355f804b311610139578063a22cb465116100b6578063d5abeb011161007a578063d5abeb01146108a4578063d936547e146108cf578063da3ef23f1461090c578063e985e9c514610935578063ed931e1714610972578063f2fde38b1461099b57610251565b8063a22cb465146107c1578063b2f3e85e146107ea578063b88d4fde14610813578063c66828621461083c578063c87b56dd1461086757610251565b8063715018a6116100fd578063715018a6146107025780637f00c7a6146107195780638da5cb5b146107425780638fdcf9421461076d57806395d89b411461079657610251565b806355f804b3146106095780635c975abb146106325780636352211e1461065d5780636c0360eb1461069a57806370a08231146106c557610251565b80632f745c59116101d257806342842e0e1161019657806342842e0e146104eb578063438b63001461051457806344a0d68a146105515780634a4c560d1461057a5780634f6ccce7146105a3578063546857c7146105e057610251565b80632f745c591461042257806330b2264e1461045f57806330cc7ae01461049c5780633ccfd60b146104c557806340c10f19146104cf57610251565b806313faede61161021957806313faede61461034d57806318160ddd14610378578063239c70ae146103a357806323b872dd146103ce5780632a23d07d146103f757610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063095ea7b314610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061329c565b6109c4565b60405161028a91906132e4565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061332b565b610a3e565b005b3480156102c857600080fd5b506102d1610ad7565b6040516102de91906133e8565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613440565b610b69565b60405161031b91906134ae565b60405180910390f35b34801561033057600080fd5b5061034b600480360381019061034691906134f5565b610bee565b005b34801561035957600080fd5b50610362610d05565b60405161036f9190613544565b60405180910390f35b34801561038457600080fd5b5061038d610d0b565b60405161039a9190613544565b60405180910390f35b3480156103af57600080fd5b506103b8610d18565b6040516103c59190613544565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f0919061355f565b610d1e565b005b34801561040357600080fd5b5061040c610d7e565b6040516104199190613544565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906134f5565b610d84565b6040516104569190613544565b60405180910390f35b34801561046b57600080fd5b50610486600480360381019061048191906135b2565b610e29565b60405161049391906132e4565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906135b2565b610e49565b005b6104cd610f20565b005b6104e960048036038101906104e491906134f5565b611015565b005b3480156104f757600080fd5b50610512600480360381019061050d919061355f565b6111d3565b005b34801561052057600080fd5b5061053b600480360381019061053691906135b2565b6111f3565b604051610548919061369d565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613440565b6112a1565b005b34801561058657600080fd5b506105a1600480360381019061059c91906135b2565b611327565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190613440565b6113fe565b6040516105d79190613544565b60405180910390f35b3480156105ec57600080fd5b50610607600480360381019061060291906137f5565b61146f565b005b34801561061557600080fd5b50610630600480360381019061062b91906138d8565b61157d565b005b34801561063e57600080fd5b5061064761160c565b60405161065491906132e4565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613440565b61161f565b60405161069191906134ae565b60405180910390f35b3480156106a657600080fd5b506106af6116d0565b6040516106bc91906133e8565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906135b2565b61175e565b6040516106f99190613544565b60405180910390f35b34801561070e57600080fd5b50610717611815565b005b34801561072557600080fd5b50610740600480360381019061073b9190613440565b61189d565b005b34801561074e57600080fd5b50610757611923565b60405161076491906134ae565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f9190613440565b61194d565b005b3480156107a257600080fd5b506107ab6119d3565b6040516107b891906133e8565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190613921565b611a65565b005b3480156107f657600080fd5b50610811600480360381019061080c91906135b2565b611be5565b005b34801561081f57600080fd5b5061083a60048036038101906108359190613a02565b611cbc565b005b34801561084857600080fd5b50610851611d1e565b60405161085e91906133e8565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613440565b611dac565b60405161089b91906133e8565b60405180910390f35b3480156108b057600080fd5b506108b9611e56565b6040516108c69190613544565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f191906135b2565b611e5c565b60405161090391906132e4565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e91906138d8565b611e7c565b005b34801561094157600080fd5b5061095c60048036038101906109579190613a85565b611f0b565b60405161096991906132e4565b60405180910390f35b34801561097e57600080fd5b50610999600480360381019061099491906135b2565b611f9f565b005b3480156109a757600080fd5b506109c260048036038101906109bd91906135b2565b612076565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a375750610a3682612185565b5b9050919050565b610a46612267565b73ffffffffffffffffffffffffffffffffffffffff16610a64611923565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190613b11565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610ae690613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1290613b60565b8015610b5f5780601f10610b3457610100808354040283529160200191610b5f565b820191906000526020600020905b815481529060010190602001808311610b4257829003601f168201915b5050505050905090565b6000610b748261226f565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90613c03565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf98261161f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090613c95565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c88612267565b73ffffffffffffffffffffffffffffffffffffffff161480610cb75750610cb681610cb1612267565b611f0b565b5b610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613d27565b60405180910390fd5b610d0083836122db565b505050565b600d5481565b6000600880549050905090565b60105481565b610d2f610d29612267565b82612394565b610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590613db9565b60405180910390fd5b610d79838383612472565b505050565b600e5481565b6000610d8f8361175e565b8210610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790613e4b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610e51612267565b73ffffffffffffffffffffffffffffffffffffffff16610e6f611923565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90613b11565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f28612267565b73ffffffffffffffffffffffffffffffffffffffff16610f46611923565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613b11565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610fc290613e9c565b60006040518083038185875af1925050503d8060008114610fff576040519150601f19603f3d011682016040523d82523d6000602084013e611004565b606091505b505090508061101257600080fd5b50565b600061101f610d0b565b9050601160009054906101000a900460ff161561103b57600080fd5b6000821161104857600080fd5b60105482111561105757600080fd5b600f5482826110669190613ee0565b111561107157600080fd5b611079611923565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111975760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111965760011515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461117a5781600d546111699190613f14565b34101561117557600080fd5b611195565b81600e546111889190613f14565b34101561119457600080fd5b5b5b5b6000600190505b8281116111cd576111ba8482846111b59190613ee0565b6126cd565b80806111c590613f56565b91505061119e565b50505050565b6111ee83838360405180602001604052806000815250611cbc565b505050565b606060006112008361175e565b905060008167ffffffffffffffff81111561121e5761121d6136c4565b5b60405190808252806020026020018201604052801561124c5781602001602082028036833780820191505090505b50905060005b82811015611296576112648582610d84565b82828151811061127757611276613f9e565b5b602002602001018181525050808061128e90613f56565b915050611252565b508092505050919050565b6112a9612267565b73ffffffffffffffffffffffffffffffffffffffff166112c7611923565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613b11565b60405180910390fd5b80600d8190555050565b61132f612267565b73ffffffffffffffffffffffffffffffffffffffff1661134d611923565b73ffffffffffffffffffffffffffffffffffffffff16146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613b11565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611408610d0b565b8210611449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114409061403f565b60405180910390fd5b6008828154811061145d5761145c613f9e565b5b90600052602060002001549050919050565b611477612267565b73ffffffffffffffffffffffffffffffffffffffff16611495611923565b73ffffffffffffffffffffffffffffffffffffffff16146114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290613b11565b60405180910390fd5b60005b6002811015611579576001601360008484606481106115105761150f613f9e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061157190613f56565b9150506114ee565b5050565b611585612267565b73ffffffffffffffffffffffffffffffffffffffff166115a3611923565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613b11565b60405180910390fd5b80600b9081611608919061420b565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be9061434f565b60405180910390fd5b80915050919050565b600b80546116dd90613b60565b80601f016020809104026020016040519081016040528092919081815260200182805461170990613b60565b80156117565780601f1061172b57610100808354040283529160200191611756565b820191906000526020600020905b81548152906001019060200180831161173957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c5906143e1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61181d612267565b73ffffffffffffffffffffffffffffffffffffffff1661183b611923565b73ffffffffffffffffffffffffffffffffffffffff1614611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613b11565b60405180910390fd5b61189b60006126eb565b565b6118a5612267565b73ffffffffffffffffffffffffffffffffffffffff166118c3611923565b73ffffffffffffffffffffffffffffffffffffffff1614611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090613b11565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611955612267565b73ffffffffffffffffffffffffffffffffffffffff16611973611923565b73ffffffffffffffffffffffffffffffffffffffff16146119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613b11565b60405180910390fd5b80600e8190555050565b6060600180546119e290613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0e90613b60565b8015611a5b5780601f10611a3057610100808354040283529160200191611a5b565b820191906000526020600020905b815481529060010190602001808311611a3e57829003601f168201915b5050505050905090565b611a6d612267565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad19061444d565b60405180910390fd5b8060056000611ae7612267565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b94612267565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bd991906132e4565b60405180910390a35050565b611bed612267565b73ffffffffffffffffffffffffffffffffffffffff16611c0b611923565b73ffffffffffffffffffffffffffffffffffffffff1614611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613b11565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ccd611cc7612267565b83612394565b611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390613db9565b60405180910390fd5b611d18848484846127b1565b50505050565b600c8054611d2b90613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5790613b60565b8015611da45780601f10611d7957610100808354040283529160200191611da4565b820191906000526020600020905b815481529060010190602001808311611d8757829003601f168201915b505050505081565b6060611db78261226f565b611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906144df565b60405180910390fd5b6000611e0061280d565b90506000815111611e205760405180602001604052806000815250611e4e565b80611e2a8461289f565b600c604051602001611e3e939291906145be565b6040516020818303038152906040525b915050919050565b600f5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611e84612267565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611923565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613b11565b60405180910390fd5b80600c9081611f07919061420b565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fa7612267565b73ffffffffffffffffffffffffffffffffffffffff16611fc5611923565b73ffffffffffffffffffffffffffffffffffffffff161461201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613b11565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61207e612267565b73ffffffffffffffffffffffffffffffffffffffff1661209c611923565b73ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613b11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614661565b60405180910390fd5b61216a816126eb565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061225057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612260575061225f826129ff565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661234e8361161f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061239f8261226f565b6123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906146f3565b60405180910390fd5b60006123e98361161f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061245857508373ffffffffffffffffffffffffffffffffffffffff1661244084610b69565b73ffffffffffffffffffffffffffffffffffffffff16145b8061246957506124688185611f0b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124928261161f565b73ffffffffffffffffffffffffffffffffffffffff16146124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e90614817565b60405180910390fd5b612562838383612a69565b61256d6000826122db565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125bd9190614837565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126149190613ee0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126e7828260405180602001604052806000815250612b7b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127bc848484612472565b6127c884848484612bd6565b612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe906148dd565b60405180910390fd5b50505050565b6060600b805461281c90613b60565b80601f016020809104026020016040519081016040528092919081815260200182805461284890613b60565b80156128955780601f1061286a57610100808354040283529160200191612895565b820191906000526020600020905b81548152906001019060200180831161287857829003601f168201915b5050505050905090565b6060600082036128e6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129fa565b600082905060005b6000821461291857808061290190613f56565b915050600a82612911919061492c565b91506128ee565b60008167ffffffffffffffff811115612934576129336136c4565b5b6040519080825280601f01601f1916602001820160405280156129665781602001600182028036833780820191505090505b5090505b600085146129f35760018261297f9190614837565b9150600a8561298e919061495d565b603061299a9190613ee0565b60f81b8183815181106129b0576129af613f9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129ec919061492c565b945061296a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a74838383612180565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab657612ab181612d5d565b612af5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612af457612af38382612da6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b3757612b3281612f13565b612b76565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b7557612b748282612fe4565b5b5b505050565b612b858383613063565b612b926000848484612bd6565b612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc8906148dd565b60405180910390fd5b505050565b6000612bf78473ffffffffffffffffffffffffffffffffffffffff1661216d565b15612d50578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c20612267565b8786866040518563ffffffff1660e01b8152600401612c4294939291906149e3565b6020604051808303816000875af1925050508015612c7e57506040513d601f19601f82011682018060405250810190612c7b9190614a44565b60015b612d00573d8060008114612cae576040519150601f19603f3d011682016040523d82523d6000602084013e612cb3565b606091505b506000815103612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef906148dd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d55565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612db38461175e565b612dbd9190614837565b9050600060076000848152602001908152602001600020549050818114612ea2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f279190614837565b9050600060096000848152602001908152602001600020549050600060088381548110612f5757612f56613f9e565b5b906000526020600020015490508060088381548110612f7957612f78613f9e565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fc857612fc7614a71565b5b6001900381819060005260206000200160009055905550505050565b6000612fef8361175e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c990614aec565b60405180910390fd5b6130db8161226f565b1561311b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311290614b58565b60405180910390fd5b61312760008383612a69565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131779190613ee0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61327981613244565b811461328457600080fd5b50565b60008135905061329681613270565b92915050565b6000602082840312156132b2576132b161323a565b5b60006132c084828501613287565b91505092915050565b60008115159050919050565b6132de816132c9565b82525050565b60006020820190506132f960008301846132d5565b92915050565b613308816132c9565b811461331357600080fd5b50565b600081359050613325816132ff565b92915050565b6000602082840312156133415761334061323a565b5b600061334f84828501613316565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613392578082015181840152602081019050613377565b60008484015250505050565b6000601f19601f8301169050919050565b60006133ba82613358565b6133c48185613363565b93506133d4818560208601613374565b6133dd8161339e565b840191505092915050565b6000602082019050818103600083015261340281846133af565b905092915050565b6000819050919050565b61341d8161340a565b811461342857600080fd5b50565b60008135905061343a81613414565b92915050565b6000602082840312156134565761345561323a565b5b60006134648482850161342b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134988261346d565b9050919050565b6134a88161348d565b82525050565b60006020820190506134c3600083018461349f565b92915050565b6134d28161348d565b81146134dd57600080fd5b50565b6000813590506134ef816134c9565b92915050565b6000806040838503121561350c5761350b61323a565b5b600061351a858286016134e0565b925050602061352b8582860161342b565b9150509250929050565b61353e8161340a565b82525050565b60006020820190506135596000830184613535565b92915050565b6000806000606084860312156135785761357761323a565b5b6000613586868287016134e0565b9350506020613597868287016134e0565b92505060406135a88682870161342b565b9150509250925092565b6000602082840312156135c8576135c761323a565b5b60006135d6848285016134e0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136148161340a565b82525050565b6000613626838361360b565b60208301905092915050565b6000602082019050919050565b600061364a826135df565b61365481856135ea565b935061365f836135fb565b8060005b83811015613690578151613677888261361a565b975061368283613632565b925050600181019050613663565b5085935050505092915050565b600060208201905081810360008301526136b7818461363f565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136fc8261339e565b810181811067ffffffffffffffff8211171561371b5761371a6136c4565b5b80604052505050565b600061372e613230565b905061373a82826136f3565b919050565b600067ffffffffffffffff82111561375a576137596136c4565b5b602082029050919050565b600080fd5b600061377d6137788461373f565b613724565b9050806020840283018581111561379757613796613765565b5b835b818110156137c057806137ac88826134e0565b845260208401935050602081019050613799565b5050509392505050565b600082601f8301126137df576137de6136bf565b5b60646137ec84828561376a565b91505092915050565b6000610c80828403121561380c5761380b61323a565b5b600061381a848285016137ca565b91505092915050565b600080fd5b600067ffffffffffffffff821115613843576138426136c4565b5b61384c8261339e565b9050602081019050919050565b82818337600083830152505050565b600061387b61387684613828565b613724565b90508281526020810184848401111561389757613896613823565b5b6138a2848285613859565b509392505050565b600082601f8301126138bf576138be6136bf565b5b81356138cf848260208601613868565b91505092915050565b6000602082840312156138ee576138ed61323a565b5b600082013567ffffffffffffffff81111561390c5761390b61323f565b5b613918848285016138aa565b91505092915050565b600080604083850312156139385761393761323a565b5b6000613946858286016134e0565b925050602061395785828601613316565b9150509250929050565b600067ffffffffffffffff82111561397c5761397b6136c4565b5b6139858261339e565b9050602081019050919050565b60006139a56139a084613961565b613724565b9050828152602081018484840111156139c1576139c0613823565b5b6139cc848285613859565b509392505050565b600082601f8301126139e9576139e86136bf565b5b81356139f9848260208601613992565b91505092915050565b60008060008060808587031215613a1c57613a1b61323a565b5b6000613a2a878288016134e0565b9450506020613a3b878288016134e0565b9350506040613a4c8782880161342b565b925050606085013567ffffffffffffffff811115613a6d57613a6c61323f565b5b613a79878288016139d4565b91505092959194509250565b60008060408385031215613a9c57613a9b61323a565b5b6000613aaa858286016134e0565b9250506020613abb858286016134e0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613afb602083613363565b9150613b0682613ac5565b602082019050919050565b60006020820190508181036000830152613b2a81613aee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b7857607f821691505b602082108103613b8b57613b8a613b31565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613bed602c83613363565b9150613bf882613b91565b604082019050919050565b60006020820190508181036000830152613c1c81613be0565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7f602183613363565b9150613c8a82613c23565b604082019050919050565b60006020820190508181036000830152613cae81613c72565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d11603883613363565b9150613d1c82613cb5565b604082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613da3603183613363565b9150613dae82613d47565b604082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e35602b83613363565b9150613e4082613dd9565b604082019050919050565b60006020820190508181036000830152613e6481613e28565b9050919050565b600081905092915050565b50565b6000613e86600083613e6b565b9150613e9182613e76565b600082019050919050565b6000613ea782613e79565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eeb8261340a565b9150613ef68361340a565b9250828201905080821115613f0e57613f0d613eb1565b5b92915050565b6000613f1f8261340a565b9150613f2a8361340a565b9250828202613f388161340a565b91508282048414831517613f4f57613f4e613eb1565b5b5092915050565b6000613f618261340a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9357613f92613eb1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614029602c83613363565b915061403482613fcd565b604082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614084565b6140cb8683614084565b95508019841693508086168417925050509392505050565b6000819050919050565b60006141086141036140fe8461340a565b6140e3565b61340a565b9050919050565b6000819050919050565b614122836140ed565b61413661412e8261410f565b848454614091565b825550505050565b600090565b61414b61413e565b614156818484614119565b505050565b5b8181101561417a5761416f600082614143565b60018101905061415c565b5050565b601f8211156141bf576141908161405f565b61419984614074565b810160208510156141a8578190505b6141bc6141b485614074565b83018261415b565b50505b505050565b600082821c905092915050565b60006141e2600019846008026141c4565b1980831691505092915050565b60006141fb83836141d1565b9150826002028217905092915050565b61421482613358565b67ffffffffffffffff81111561422d5761422c6136c4565b5b6142378254613b60565b61424282828561417e565b600060209050601f8311600181146142755760008415614263578287015190505b61426d85826141ef565b8655506142d5565b601f1984166142838661405f565b60005b828110156142ab57848901518255600182019150602085019450602081019050614286565b868310156142c857848901516142c4601f8916826141d1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614339602983613363565b9150614344826142dd565b604082019050919050565b600060208201905081810360008301526143688161432c565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006143cb602a83613363565b91506143d68261436f565b604082019050919050565b600060208201905081810360008301526143fa816143be565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614437601983613363565b915061444282614401565b602082019050919050565b600060208201905081810360008301526144668161442a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144c9602f83613363565b91506144d48261446d565b604082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b600081905092915050565b600061451582613358565b61451f81856144ff565b935061452f818560208601613374565b80840191505092915050565b6000815461454881613b60565b61455281866144ff565b9450600182166000811461456d5760018114614582576145b5565b60ff19831686528115158202860193506145b5565b61458b8561405f565b60005b838110156145ad5781548189015260018201915060208101905061458e565b838801955050505b50505092915050565b60006145ca828661450a565b91506145d6828561450a565b91506145e2828461453b565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061464b602683613363565b9150614656826145ef565b604082019050919050565b6000602082019050818103600083015261467a8161463e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146dd602c83613363565b91506146e882614681565b604082019050919050565b6000602082019050818103600083015261470c816146d0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061476f602983613363565b915061477a82614713565b604082019050919050565b6000602082019050818103600083015261479e81614762565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614801602483613363565b915061480c826147a5565b604082019050919050565b60006020820190508181036000830152614830816147f4565b9050919050565b60006148428261340a565b915061484d8361340a565b925082820390508181111561486557614864613eb1565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148c7603283613363565b91506148d28261486b565b604082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149378261340a565b91506149428361340a565b925082614952576149516148fd565b5b828204905092915050565b60006149688261340a565b91506149738361340a565b925082614983576149826148fd565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149b58261498e565b6149bf8185614999565b93506149cf818560208601613374565b6149d88161339e565b840191505092915050565b60006080820190506149f8600083018761349f565b614a05602083018661349f565b614a126040830185613535565b8181036060830152614a2481846149aa565b905095945050505050565b600081519050614a3e81613270565b92915050565b600060208284031215614a5a57614a5961323a565b5b6000614a6884828501614a2f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ad6602083613363565b9150614ae182614aa0565b602082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b42601c83613363565b9150614b4d82614b0c565b602082019050919050565b60006020820190508181036000830152614b7181614b35565b905091905056fea2646970667358221220e96adb4a60e3719dd5fd08101cc71c80d155f606856140abd98292d84838614d64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001d576f726c642043757020436f6c6c6563746f72732045646974696f6e73000000000000000000000000000000000000000000000000000000000000000000000457434345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656968326e666671686a703262617267793433363475326a6d37367232787465697334347578626a79613636787067696f67747435652f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): World Cup Collectors Editions
Arg [1] : _symbol (string): WCCE
Arg [2] : _initBaseURI (string): ipfs://bafybeih2nffqhjp2bargy4364u2jm76r2xteis44uxbjya66xpgiogtt5e/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001d
Arg [4] : 576f726c642043757020436f6c6c6563746f72732045646974696f6e73000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 5743434500000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [8] : 697066733a2f2f6261667962656968326e666671686a70326261726779343336
Arg [9] : 3475326a6d37367232787465697334347578626a79613636787067696f677474
Arg [10] : 35652f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
45055:4253:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38553:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48389:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26939:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45233:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39356:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45356:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28475:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45273:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38937:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45479:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48583:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49113:192;;;:::i;:::-;;45905:807;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28922:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46720:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47786:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48476:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39546:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48808:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48118:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45396:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25330:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45161:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24973:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4573:94;;;;;;;;;;;;;:::i;:::-;;47988:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3922:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47880:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25892:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27796:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48697:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29178:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45189:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47118:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45319:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45429:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48230:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28194:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48998:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4822:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38553:300;38700:4;38757:35;38742:50;;;:11;:50;;;;:103;;;;38809:36;38833:11;38809:23;:36::i;:::-;38742:103;38722:123;;38553:300;;;:::o;48389:79::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48454:6:::1;48445;;:15;;;;;;;;;;;;;;;;;;48389:79:::0;:::o;25723:100::-;25777:13;25810:5;25803:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25723:100;:::o;27416:308::-;27537:7;27584:16;27592:7;27584;:16::i;:::-;27562:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27692:15;:24;27708:7;27692:24;;;;;;;;;;;;;;;;;;;;;27685:31;;27416:308;;;:::o;26939:411::-;27020:13;27036:23;27051:7;27036:14;:23::i;:::-;27020:39;;27084:5;27078:11;;:2;:11;;;27070:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27178:5;27162:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27187:37;27204:5;27211:12;:10;:12::i;:::-;27187:16;:37::i;:::-;27162:62;27140:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27321:21;27330:2;27334:7;27321:8;:21::i;:::-;27009:341;26939:411;;:::o;45233:33::-;;;;:::o;39356:113::-;39417:7;39444:10;:17;;;;39437:24;;39356:113;:::o;45356:33::-;;;;:::o;28475:376::-;28684:41;28703:12;:10;:12::i;:::-;28717:7;28684:18;:41::i;:::-;28662:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28815:28;28825:4;28831:2;28835:7;28815:9;:28::i;:::-;28475:376;;;:::o;45273:39::-;;;;:::o;38937:343::-;39079:7;39134:23;39151:5;39134:16;:23::i;:::-;39126:5;:31;39104:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39246:12;:19;39259:5;39246:19;;;;;;;;;;;;;;;:26;39266:5;39246:26;;;;;;;;;;;;39239:33;;38937:343;;;;:::o;45479:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;48583:106::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48676:5:::1;48655:11;:18;48667:5;48655:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;48583:106:::0;:::o;49113:192::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49170:12:::1;49196:10;49188:24;;49234:21;49188:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49169:101;;;49289:7;49281:16;;;::::0;::::1;;49158:147;49113:192::o:0;45905:807::-;45979:14;45996:13;:11;:13::i;:::-;45979:30;;46029:6;;;;;;;;;;;46028:7;46020:16;;;;;;46069:1;46055:11;:15;46047:24;;;;;;46105:13;;46090:11;:28;;46082:37;;;;;;46162:9;;46147:11;46138:6;:20;;;;:::i;:::-;:33;;46130:42;;;;;;46203:7;:5;:7::i;:::-;46189:21;;:10;:21;;;46185:412;;46258:4;46231:31;;:11;:23;46243:10;46231:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;46227:359;;46317:4;46287:34;;:14;:26;46302:10;46287:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;46283:288;;46412:11;46405:4;;:18;;;;:::i;:::-;46392:9;:31;;46384:40;;;;;;46283:288;;;46539:11;46525;;:25;;;;:::i;:::-;46512:9;:38;;46504:47;;;;;;46283:288;46227:359;46185:412;46614:9;46626:1;46614:13;;46609:96;46634:11;46629:1;:16;46609:96;;46667:26;46677:3;46691:1;46682:6;:10;;;;:::i;:::-;46667:9;:26::i;:::-;46647:3;;;;;:::i;:::-;;;;46609:96;;;;45968:744;45905:807;;:::o;28922:185::-;29060:39;29077:4;29083:2;29087:7;29060:39;;;;;;;;;;;;:16;:39::i;:::-;28922:185;;;:::o;46720:390::-;46807:16;46841:23;46867:17;46877:6;46867:9;:17::i;:::-;46841:43;;46895:25;46937:15;46923:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46895:58;;46969:9;46964:113;46984:15;46980:1;:19;46964:113;;;47035:30;47055:6;47063:1;47035:19;:30::i;:::-;47021:8;47030:1;47021:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47001:3;;;;;:::i;:::-;;;;46964:113;;;;47094:8;47087:15;;;;46720:390;;;:::o;47786:86::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47856:8:::1;47849:4;:15;;;;47786:86:::0;:::o;48476:99::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48563:4:::1;48542:11;:18;48554:5;48542:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;48476:99:::0;:::o;39546:320::-;39666:7;39721:30;:28;:30::i;:::-;39713:5;:38;39691:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39841:10;39852:5;39841:17;;;;;;;;:::i;:::-;;;;;;;;;;39834:24;;39546:320;;;:::o;48808:182::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48897:9:::1;48892:91;48916:1;48912;:5;48892:91;;;48967:4;48939:14;:25;48954:6;48961:1;48954:9;;;;;;;:::i;:::-;;;;;;48939:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;48919:3;;;;;:::i;:::-;;;;48892:91;;;;48808:182:::0;:::o;48118:104::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48203:11:::1;48193:7;:21;;;;;;:::i;:::-;;48118:104:::0;:::o;45396:26::-;;;;;;;;;;;;;:::o;25330:326::-;25447:7;25472:13;25488:7;:16;25496:7;25488:16;;;;;;;;;;;;;;;;;;;;;25472:32;;25554:1;25537:19;;:5;:19;;;25515:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25643:5;25636:12;;;25330:326;;;:::o;45161:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24973:295::-;25090:7;25154:1;25137:19;;:5;:19;;;25115:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25244:9;:16;25254:5;25244:16;;;;;;;;;;;;;;;;25237:23;;24973:295;;;:::o;4573:94::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4638:21:::1;4656:1;4638:9;:21::i;:::-;4573:94::o:0;47988:122::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48085:17:::1;48069:13;:33;;;;47988:122:::0;:::o;3922:87::-;3968:7;3995:6;;;;;;;;;;;3988:13;;3922:87;:::o;47880:100::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47964:8:::1;47950:11;:22;;;;47880:100:::0;:::o;25892:104::-;25948:13;25981:7;25974:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25892:104;:::o;27796:327::-;27943:12;:10;:12::i;:::-;27931:24;;:8;:24;;;27923:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28043:8;27998:18;:32;28017:12;:10;:12::i;:::-;27998:32;;;;;;;;;;;;;;;:42;28031:8;27998:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28096:8;28067:48;;28082:12;:10;:12::i;:::-;28067:48;;;28106:8;28067:48;;;;;;:::i;:::-;;;;;;;;27796:327;;:::o;48697:103::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48788:4:::1;48764:14;:21;48779:5;48764:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;48697:103:::0;:::o;29178:365::-;29367:41;29386:12;:10;:12::i;:::-;29400:7;29367:18;:41::i;:::-;29345:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29496:39;29510:4;29516:2;29520:7;29529:5;29496:13;:39::i;:::-;29178:365;;;;:::o;45189:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47118:642::-;47236:13;47289:16;47297:7;47289;:16::i;:::-;47267:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47393:28;47424:10;:8;:10::i;:::-;47393:41;;47496:1;47471:14;47465:28;:32;:287;;;;;;;;;;;;;;;;;47589:14;47630:18;:7;:16;:18::i;:::-;47675:13;47546:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47465:287;47445:307;;;47118:642;;;:::o;45319:30::-;;;;:::o;45429:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;48230:151::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48356:17:::1;48340:13;:33;;;;;;:::i;:::-;;48230:151:::0;:::o;28194:214::-;28336:4;28365:18;:25;28384:5;28365:25;;;;;;;;;;;;;;;:35;28391:8;28365:35;;;;;;;;;;;;;;;;;;;;;;;;;28358:42;;28194:214;;;;:::o;48998:107::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49092:5:::1;49068:14;:21;49083:5;49068:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;48998:107:::0;:::o;4822:229::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4945:1:::1;4925:22;;:8;:22;;::::0;4903:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5024:19;5034:8;5024:9;:19::i;:::-;4822:229:::0;:::o;5991:387::-;6051:4;6259:12;6326:7;6314:20;6306:28;;6369:1;6362:4;:8;6355:15;;;5991:387;;;:::o;37504:126::-;;;;:::o;24554:355::-;24701:4;24758:25;24743:40;;;:11;:40;;;;:105;;;;24815:33;24800:48;;;:11;:48;;;;24743:105;:158;;;;24865:36;24889:11;24865:23;:36::i;:::-;24743:158;24723:178;;24554:355;;;:::o;2699:98::-;2752:7;2779:10;2772:17;;2699:98;:::o;31090:127::-;31155:4;31207:1;31179:30;;:7;:16;31187:7;31179:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31172:37;;31090:127;;;:::o;35213:174::-;35315:2;35288:15;:24;35304:7;35288:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35371:7;35367:2;35333:46;;35342:23;35357:7;35342:14;:23::i;:::-;35333:46;;;;;;;;;;;;35213:174;;:::o;31384:452::-;31513:4;31557:16;31565:7;31557;:16::i;:::-;31535:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31656:13;31672:23;31687:7;31672:14;:23::i;:::-;31656:39;;31725:5;31714:16;;:7;:16;;;:64;;;;31771:7;31747:31;;:20;31759:7;31747:11;:20::i;:::-;:31;;;31714:64;:113;;;;31795:32;31812:5;31819:7;31795:16;:32::i;:::-;31714:113;31706:122;;;31384:452;;;;:::o;34480:615::-;34653:4;34626:31;;:23;34641:7;34626:14;:23::i;:::-;:31;;;34604:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34759:1;34745:16;;:2;:16;;;34737:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34815:39;34836:4;34842:2;34846:7;34815:20;:39::i;:::-;34919:29;34936:1;34940:7;34919:8;:29::i;:::-;34980:1;34961:9;:15;34971:4;34961:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35009:1;34992:9;:13;35002:2;34992:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35040:2;35021:7;:16;35029:7;35021:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35079:7;35075:2;35060:27;;35069:4;35060:27;;;;;;;;;;;;34480:615;;;:::o;32178:110::-;32254:26;32264:2;32268:7;32254:26;;;;;;;;;;;;:9;:26::i;:::-;32178:110;;:::o;5059:173::-;5115:16;5134:6;;;;;;;;;;;5115:25;;5160:8;5151:6;;:17;;;;;;;;;;;;;;;;;;5215:8;5184:40;;5205:8;5184:40;;;;;;;;;;;;5104:128;5059:173;:::o;30425:352::-;30582:28;30592:4;30598:2;30602:7;30582:9;:28::i;:::-;30643:48;30666:4;30672:2;30676:7;30685:5;30643:22;:48::i;:::-;30621:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;30425:352;;;;:::o;45774:108::-;45834:13;45867:7;45860:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45774:108;:::o;297:723::-;353:13;583:1;574:5;:10;570:53;;601:10;;;;;;;;;;;;;;;;;;;;;570:53;633:12;648:5;633:20;;664:14;689:78;704:1;696:4;:9;689:78;;722:8;;;;;:::i;:::-;;;;753:2;745:10;;;;;:::i;:::-;;;689:78;;;777:19;809:6;799:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;777:39;;827:154;843:1;834:5;:10;827:154;;871:1;861:11;;;;;:::i;:::-;;;938:2;930:5;:10;;;;:::i;:::-;917:2;:24;;;;:::i;:::-;904:39;;887:6;894;887:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;967:2;958:11;;;;;:::i;:::-;;;827:154;;;1005:6;991:21;;;;;297:723;;;;:::o;16356:207::-;16486:4;16530:25;16515:40;;;:11;:40;;;;16508:47;;16356:207;;;:::o;40479:589::-;40623:45;40650:4;40656:2;40660:7;40623:26;:45::i;:::-;40701:1;40685:18;;:4;:18;;;40681:187;;40720:40;40752:7;40720:31;:40::i;:::-;40681:187;;;40790:2;40782:10;;:4;:10;;;40778:90;;40809:47;40842:4;40848:7;40809:32;:47::i;:::-;40778:90;40681:187;40896:1;40882:16;;:2;:16;;;40878:183;;40915:45;40952:7;40915:36;:45::i;:::-;40878:183;;;40988:4;40982:10;;:2;:10;;;40978:83;;41009:40;41037:2;41041:7;41009:27;:40::i;:::-;40978:83;40878:183;40479:589;;;:::o;32515:321::-;32645:18;32651:2;32655:7;32645:5;:18::i;:::-;32696:54;32727:1;32731:2;32735:7;32744:5;32696:22;:54::i;:::-;32674:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32515:321;;;:::o;35952:980::-;36107:4;36128:15;:2;:13;;;:15::i;:::-;36124:801;;;36197:2;36181:36;;;36240:12;:10;:12::i;:::-;36275:4;36302:7;36332:5;36181:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36160:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36556:1;36539:6;:13;:18;36535:320;;36582:108;;;;;;;;;;:::i;:::-;;;;;;;;36535:320;36805:6;36799:13;36790:6;36786:2;36782:15;36775:38;36160:710;36430:41;;;36420:51;;;:6;:51;;;;36413:58;;;;;36124:801;36909:4;36902:11;;35952:980;;;;;;;:::o;41791:164::-;41895:10;:17;;;;41868:15;:24;41884:7;41868:24;;;;;;;;;;;:44;;;;41923:10;41939:7;41923:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41791:164;:::o;42582:1002::-;42862:22;42912:1;42887:22;42904:4;42887:16;:22::i;:::-;:26;;;;:::i;:::-;42862:51;;42924:18;42945:17;:26;42963:7;42945:26;;;;;;;;;;;;42924:47;;43092:14;43078:10;:28;43074:328;;43123:19;43145:12;:18;43158:4;43145:18;;;;;;;;;;;;;;;:34;43164:14;43145:34;;;;;;;;;;;;43123:56;;43229:11;43196:12;:18;43209:4;43196:18;;;;;;;;;;;;;;;:30;43215:10;43196:30;;;;;;;;;;;:44;;;;43346:10;43313:17;:30;43331:11;43313:30;;;;;;;;;;;:43;;;;43108:294;43074:328;43498:17;:26;43516:7;43498:26;;;;;;;;;;;43491:33;;;43542:12;:18;43555:4;43542:18;;;;;;;;;;;;;;;:34;43561:14;43542:34;;;;;;;;;;;43535:41;;;42677:907;;42582:1002;;:::o;43879:1079::-;44132:22;44177:1;44157:10;:17;;;;:21;;;;:::i;:::-;44132:46;;44189:18;44210:15;:24;44226:7;44210:24;;;;;;;;;;;;44189:45;;44561:19;44583:10;44594:14;44583:26;;;;;;;;:::i;:::-;;;;;;;;;;44561:48;;44647:11;44622:10;44633;44622:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44758:10;44727:15;:28;44743:11;44727:28;;;;;;;;;;;:41;;;;44899:15;:24;44915:7;44899:24;;;;;;;;;;;44892:31;;;44934:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43950:1008;;;43879:1079;:::o;41369:221::-;41454:14;41471:20;41488:2;41471:16;:20::i;:::-;41454:37;;41529:7;41502:12;:16;41515:2;41502:16;;;;;;;;;;;;;;;:24;41519:6;41502:24;;;;;;;;;;;:34;;;;41576:6;41547:17;:26;41565:7;41547:26;;;;;;;;;;;:35;;;;41443:147;41369:221;;:::o;33172:382::-;33266:1;33252:16;;:2;:16;;;33244:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33325:16;33333:7;33325;:16::i;:::-;33324:17;33316:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33387:45;33416:1;33420:2;33424:7;33387:20;:45::i;:::-;33462:1;33445:9;:13;33455:2;33445:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33493:2;33474:7;:16;33482:7;33474:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33538:7;33534:2;33513:33;;33530:1;33513:33;;;;;;;;;;;;33172:382;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:329::-;6516:6;6565:2;6553:9;6544:7;6540:23;6536:32;6533:119;;;6571:79;;:::i;:::-;6533:119;6691:1;6716:53;6761:7;6752:6;6741:9;6737:22;6716:53;:::i;:::-;6706:63;;6662:117;6457:329;;;;:::o;6792:114::-;6859:6;6893:5;6887:12;6877:22;;6792:114;;;:::o;6912:184::-;7011:11;7045:6;7040:3;7033:19;7085:4;7080:3;7076:14;7061:29;;6912:184;;;;:::o;7102:132::-;7169:4;7192:3;7184:11;;7222:4;7217:3;7213:14;7205:22;;7102:132;;;:::o;7240:108::-;7317:24;7335:5;7317:24;:::i;:::-;7312:3;7305:37;7240:108;;:::o;7354:179::-;7423:10;7444:46;7486:3;7478:6;7444:46;:::i;:::-;7522:4;7517:3;7513:14;7499:28;;7354:179;;;;:::o;7539:113::-;7609:4;7641;7636:3;7632:14;7624:22;;7539:113;;;:::o;7688:732::-;7807:3;7836:54;7884:5;7836:54;:::i;:::-;7906:86;7985:6;7980:3;7906:86;:::i;:::-;7899:93;;8016:56;8066:5;8016:56;:::i;:::-;8095:7;8126:1;8111:284;8136:6;8133:1;8130:13;8111:284;;;8212:6;8206:13;8239:63;8298:3;8283:13;8239:63;:::i;:::-;8232:70;;8325:60;8378:6;8325:60;:::i;:::-;8315:70;;8171:224;8158:1;8155;8151:9;8146:14;;8111:284;;;8115:14;8411:3;8404:10;;7812:608;;;7688:732;;;;:::o;8426:373::-;8569:4;8607:2;8596:9;8592:18;8584:26;;8656:9;8650:4;8646:20;8642:1;8631:9;8627:17;8620:47;8684:108;8787:4;8778:6;8684:108;:::i;:::-;8676:116;;8426:373;;;;:::o;8805:117::-;8914:1;8911;8904:12;8928:180;8976:77;8973:1;8966:88;9073:4;9070:1;9063:15;9097:4;9094:1;9087:15;9114:281;9197:27;9219:4;9197:27;:::i;:::-;9189:6;9185:40;9327:6;9315:10;9312:22;9291:18;9279:10;9276:34;9273:62;9270:88;;;9338:18;;:::i;:::-;9270:88;9378:10;9374:2;9367:22;9157:238;9114:281;;:::o;9401:129::-;9435:6;9462:20;;:::i;:::-;9452:30;;9491:33;9519:4;9511:6;9491:33;:::i;:::-;9401:129;;;:::o;9536:251::-;9613:4;9703:18;9695:6;9692:30;9689:56;;;9725:18;;:::i;:::-;9689:56;9775:4;9767:6;9763:17;9755:25;;9536:251;;;:::o;9793:117::-;9902:1;9899;9892:12;9936:647;10032:5;10057:81;10073:64;10130:6;10073:64;:::i;:::-;10057:81;:::i;:::-;10048:90;;10158:5;10211:4;10203:6;10199:17;10191:6;10187:30;10240:3;10232:6;10229:15;10226:122;;;10259:79;;:::i;:::-;10226:122;10374:6;10357:220;10391:6;10386:3;10383:15;10357:220;;;10466:3;10495:37;10528:3;10516:10;10495:37;:::i;:::-;10490:3;10483:50;10562:4;10557:3;10553:14;10546:21;;10433:144;10417:4;10412:3;10408:14;10401:21;;10357:220;;;10361:21;10038:545;;9936:647;;;;;:::o;10609:343::-;10680:5;10729:3;10722:4;10714:6;10710:17;10706:27;10696:122;;10737:79;;:::i;:::-;10696:122;10841:4;10863:83;10942:3;10934:6;10926;10863:83;:::i;:::-;10854:92;;10686:266;10609:343;;;;:::o;10958:381::-;11042:6;11091:4;11079:9;11070:7;11066:23;11062:34;11059:121;;;11099:79;;:::i;:::-;11059:121;11219:1;11244:78;11314:7;11305:6;11294:9;11290:22;11244:78;:::i;:::-;11234:88;;11190:142;10958:381;;;;:::o;11345:117::-;11454:1;11451;11444:12;11468:308;11530:4;11620:18;11612:6;11609:30;11606:56;;;11642:18;;:::i;:::-;11606:56;11680:29;11702:6;11680:29;:::i;:::-;11672:37;;11764:4;11758;11754:15;11746:23;;11468:308;;;:::o;11782:146::-;11879:6;11874:3;11869;11856:30;11920:1;11911:6;11906:3;11902:16;11895:27;11782:146;;;:::o;11934:425::-;12012:5;12037:66;12053:49;12095:6;12053:49;:::i;:::-;12037:66;:::i;:::-;12028:75;;12126:6;12119:5;12112:21;12164:4;12157:5;12153:16;12202:3;12193:6;12188:3;12184:16;12181:25;12178:112;;;12209:79;;:::i;:::-;12178:112;12299:54;12346:6;12341:3;12336;12299:54;:::i;:::-;12018:341;11934:425;;;;;:::o;12379:340::-;12435:5;12484:3;12477:4;12469:6;12465:17;12461:27;12451:122;;12492:79;;:::i;:::-;12451:122;12609:6;12596:20;12634:79;12709:3;12701:6;12694:4;12686:6;12682:17;12634:79;:::i;:::-;12625:88;;12441:278;12379:340;;;;:::o;12725:509::-;12794:6;12843:2;12831:9;12822:7;12818:23;12814:32;12811:119;;;12849:79;;:::i;:::-;12811:119;12997:1;12986:9;12982:17;12969:31;13027:18;13019:6;13016:30;13013:117;;;13049:79;;:::i;:::-;13013:117;13154:63;13209:7;13200:6;13189:9;13185:22;13154:63;:::i;:::-;13144:73;;12940:287;12725:509;;;;:::o;13240:468::-;13305:6;13313;13362:2;13350:9;13341:7;13337:23;13333:32;13330:119;;;13368:79;;:::i;:::-;13330:119;13488:1;13513:53;13558:7;13549:6;13538:9;13534:22;13513:53;:::i;:::-;13503:63;;13459:117;13615:2;13641:50;13683:7;13674:6;13663:9;13659:22;13641:50;:::i;:::-;13631:60;;13586:115;13240:468;;;;;:::o;13714:307::-;13775:4;13865:18;13857:6;13854:30;13851:56;;;13887:18;;:::i;:::-;13851:56;13925:29;13947:6;13925:29;:::i;:::-;13917:37;;14009:4;14003;13999:15;13991:23;;13714:307;;;:::o;14027:423::-;14104:5;14129:65;14145:48;14186:6;14145:48;:::i;:::-;14129:65;:::i;:::-;14120:74;;14217:6;14210:5;14203:21;14255:4;14248:5;14244:16;14293:3;14284:6;14279:3;14275:16;14272:25;14269:112;;;14300:79;;:::i;:::-;14269:112;14390:54;14437:6;14432:3;14427;14390:54;:::i;:::-;14110:340;14027:423;;;;;:::o;14469:338::-;14524:5;14573:3;14566:4;14558:6;14554:17;14550:27;14540:122;;14581:79;;:::i;:::-;14540:122;14698:6;14685:20;14723:78;14797:3;14789:6;14782:4;14774:6;14770:17;14723:78;:::i;:::-;14714:87;;14530:277;14469:338;;;;:::o;14813:943::-;14908:6;14916;14924;14932;14981:3;14969:9;14960:7;14956:23;14952:33;14949:120;;;14988:79;;:::i;:::-;14949:120;15108:1;15133:53;15178:7;15169:6;15158:9;15154:22;15133:53;:::i;:::-;15123:63;;15079:117;15235:2;15261:53;15306:7;15297:6;15286:9;15282:22;15261:53;:::i;:::-;15251:63;;15206:118;15363:2;15389:53;15434:7;15425:6;15414:9;15410:22;15389:53;:::i;:::-;15379:63;;15334:118;15519:2;15508:9;15504:18;15491:32;15550:18;15542:6;15539:30;15536:117;;;15572:79;;:::i;:::-;15536:117;15677:62;15731:7;15722:6;15711:9;15707:22;15677:62;:::i;:::-;15667:72;;15462:287;14813:943;;;;;;;:::o;15762:474::-;15830:6;15838;15887:2;15875:9;15866:7;15862:23;15858:32;15855:119;;;15893:79;;:::i;:::-;15855:119;16013:1;16038:53;16083:7;16074:6;16063:9;16059:22;16038:53;:::i;:::-;16028:63;;15984:117;16140:2;16166:53;16211:7;16202:6;16191:9;16187:22;16166:53;:::i;:::-;16156:63;;16111:118;15762:474;;;;;:::o;16242:182::-;16382:34;16378:1;16370:6;16366:14;16359:58;16242:182;:::o;16430:366::-;16572:3;16593:67;16657:2;16652:3;16593:67;:::i;:::-;16586:74;;16669:93;16758:3;16669:93;:::i;:::-;16787:2;16782:3;16778:12;16771:19;;16430:366;;;:::o;16802:419::-;16968:4;17006:2;16995:9;16991:18;16983:26;;17055:9;17049:4;17045:20;17041:1;17030:9;17026:17;17019:47;17083:131;17209:4;17083:131;:::i;:::-;17075:139;;16802:419;;;:::o;17227:180::-;17275:77;17272:1;17265:88;17372:4;17369:1;17362:15;17396:4;17393:1;17386:15;17413:320;17457:6;17494:1;17488:4;17484:12;17474:22;;17541:1;17535:4;17531:12;17562:18;17552:81;;17618:4;17610:6;17606:17;17596:27;;17552:81;17680:2;17672:6;17669:14;17649:18;17646:38;17643:84;;17699:18;;:::i;:::-;17643:84;17464:269;17413:320;;;:::o;17739:231::-;17879:34;17875:1;17867:6;17863:14;17856:58;17948:14;17943:2;17935:6;17931:15;17924:39;17739:231;:::o;17976:366::-;18118:3;18139:67;18203:2;18198:3;18139:67;:::i;:::-;18132:74;;18215:93;18304:3;18215:93;:::i;:::-;18333:2;18328:3;18324:12;18317:19;;17976:366;;;:::o;18348:419::-;18514:4;18552:2;18541:9;18537:18;18529:26;;18601:9;18595:4;18591:20;18587:1;18576:9;18572:17;18565:47;18629:131;18755:4;18629:131;:::i;:::-;18621:139;;18348:419;;;:::o;18773:220::-;18913:34;18909:1;18901:6;18897:14;18890:58;18982:3;18977:2;18969:6;18965:15;18958:28;18773:220;:::o;18999:366::-;19141:3;19162:67;19226:2;19221:3;19162:67;:::i;:::-;19155:74;;19238:93;19327:3;19238:93;:::i;:::-;19356:2;19351:3;19347:12;19340:19;;18999:366;;;:::o;19371:419::-;19537:4;19575:2;19564:9;19560:18;19552:26;;19624:9;19618:4;19614:20;19610:1;19599:9;19595:17;19588:47;19652:131;19778:4;19652:131;:::i;:::-;19644:139;;19371:419;;;:::o;19796:243::-;19936:34;19932:1;19924:6;19920:14;19913:58;20005:26;20000:2;19992:6;19988:15;19981:51;19796:243;:::o;20045:366::-;20187:3;20208:67;20272:2;20267:3;20208:67;:::i;:::-;20201:74;;20284:93;20373:3;20284:93;:::i;:::-;20402:2;20397:3;20393:12;20386:19;;20045:366;;;:::o;20417:419::-;20583:4;20621:2;20610:9;20606:18;20598:26;;20670:9;20664:4;20660:20;20656:1;20645:9;20641:17;20634:47;20698:131;20824:4;20698:131;:::i;:::-;20690:139;;20417:419;;;:::o;20842:236::-;20982:34;20978:1;20970:6;20966:14;20959:58;21051:19;21046:2;21038:6;21034:15;21027:44;20842:236;:::o;21084:366::-;21226:3;21247:67;21311:2;21306:3;21247:67;:::i;:::-;21240:74;;21323:93;21412:3;21323:93;:::i;:::-;21441:2;21436:3;21432:12;21425:19;;21084:366;;;:::o;21456:419::-;21622:4;21660:2;21649:9;21645:18;21637:26;;21709:9;21703:4;21699:20;21695:1;21684:9;21680:17;21673:47;21737:131;21863:4;21737:131;:::i;:::-;21729:139;;21456:419;;;:::o;21881:230::-;22021:34;22017:1;22009:6;22005:14;21998:58;22090:13;22085:2;22077:6;22073:15;22066:38;21881:230;:::o;22117:366::-;22259:3;22280:67;22344:2;22339:3;22280:67;:::i;:::-;22273:74;;22356:93;22445:3;22356:93;:::i;:::-;22474:2;22469:3;22465:12;22458:19;;22117:366;;;:::o;22489:419::-;22655:4;22693:2;22682:9;22678:18;22670:26;;22742:9;22736:4;22732:20;22728:1;22717:9;22713:17;22706:47;22770:131;22896:4;22770:131;:::i;:::-;22762:139;;22489:419;;;:::o;22914:147::-;23015:11;23052:3;23037:18;;22914:147;;;;:::o;23067:114::-;;:::o;23187:398::-;23346:3;23367:83;23448:1;23443:3;23367:83;:::i;:::-;23360:90;;23459:93;23548:3;23459:93;:::i;:::-;23577:1;23572:3;23568:11;23561:18;;23187:398;;;:::o;23591:379::-;23775:3;23797:147;23940:3;23797:147;:::i;:::-;23790:154;;23961:3;23954:10;;23591:379;;;:::o;23976:180::-;24024:77;24021:1;24014:88;24121:4;24118:1;24111:15;24145:4;24142:1;24135:15;24162:191;24202:3;24221:20;24239:1;24221:20;:::i;:::-;24216:25;;24255:20;24273:1;24255:20;:::i;:::-;24250:25;;24298:1;24295;24291:9;24284:16;;24319:3;24316:1;24313:10;24310:36;;;24326:18;;:::i;:::-;24310:36;24162:191;;;;:::o;24359:410::-;24399:7;24422:20;24440:1;24422:20;:::i;:::-;24417:25;;24456:20;24474:1;24456:20;:::i;:::-;24451:25;;24511:1;24508;24504:9;24533:30;24551:11;24533:30;:::i;:::-;24522:41;;24712:1;24703:7;24699:15;24696:1;24693:22;24673:1;24666:9;24646:83;24623:139;;24742:18;;:::i;:::-;24623:139;24407:362;24359:410;;;;:::o;24775:233::-;24814:3;24837:24;24855:5;24837:24;:::i;:::-;24828:33;;24883:66;24876:5;24873:77;24870:103;;24953:18;;:::i;:::-;24870:103;25000:1;24993:5;24989:13;24982:20;;24775:233;;;:::o;25014:180::-;25062:77;25059:1;25052:88;25159:4;25156:1;25149:15;25183:4;25180:1;25173:15;25200:231;25340:34;25336:1;25328:6;25324:14;25317:58;25409:14;25404:2;25396:6;25392:15;25385:39;25200:231;:::o;25437:366::-;25579:3;25600:67;25664:2;25659:3;25600:67;:::i;:::-;25593:74;;25676:93;25765:3;25676:93;:::i;:::-;25794:2;25789:3;25785:12;25778:19;;25437:366;;;:::o;25809:419::-;25975:4;26013:2;26002:9;25998:18;25990:26;;26062:9;26056:4;26052:20;26048:1;26037:9;26033:17;26026:47;26090:131;26216:4;26090:131;:::i;:::-;26082:139;;25809:419;;;:::o;26234:141::-;26283:4;26306:3;26298:11;;26329:3;26326:1;26319:14;26363:4;26360:1;26350:18;26342:26;;26234:141;;;:::o;26381:93::-;26418:6;26465:2;26460;26453:5;26449:14;26445:23;26435:33;;26381:93;;;:::o;26480:107::-;26524:8;26574:5;26568:4;26564:16;26543:37;;26480:107;;;;:::o;26593:393::-;26662:6;26712:1;26700:10;26696:18;26735:97;26765:66;26754:9;26735:97;:::i;:::-;26853:39;26883:8;26872:9;26853:39;:::i;:::-;26841:51;;26925:4;26921:9;26914:5;26910:21;26901:30;;26974:4;26964:8;26960:19;26953:5;26950:30;26940:40;;26669:317;;26593:393;;;;;:::o;26992:60::-;27020:3;27041:5;27034:12;;26992:60;;;:::o;27058:142::-;27108:9;27141:53;27159:34;27168:24;27186:5;27168:24;:::i;:::-;27159:34;:::i;:::-;27141:53;:::i;:::-;27128:66;;27058:142;;;:::o;27206:75::-;27249:3;27270:5;27263:12;;27206:75;;;:::o;27287:269::-;27397:39;27428:7;27397:39;:::i;:::-;27458:91;27507:41;27531:16;27507:41;:::i;:::-;27499:6;27492:4;27486:11;27458:91;:::i;:::-;27452:4;27445:105;27363:193;27287:269;;;:::o;27562:73::-;27607:3;27562:73;:::o;27641:189::-;27718:32;;:::i;:::-;27759:65;27817:6;27809;27803:4;27759:65;:::i;:::-;27694:136;27641:189;;:::o;27836:186::-;27896:120;27913:3;27906:5;27903:14;27896:120;;;27967:39;28004:1;27997:5;27967:39;:::i;:::-;27940:1;27933:5;27929:13;27920:22;;27896:120;;;27836:186;;:::o;28028:543::-;28129:2;28124:3;28121:11;28118:446;;;28163:38;28195:5;28163:38;:::i;:::-;28247:29;28265:10;28247:29;:::i;:::-;28237:8;28233:44;28430:2;28418:10;28415:18;28412:49;;;28451:8;28436:23;;28412:49;28474:80;28530:22;28548:3;28530:22;:::i;:::-;28520:8;28516:37;28503:11;28474:80;:::i;:::-;28133:431;;28118:446;28028:543;;;:::o;28577:117::-;28631:8;28681:5;28675:4;28671:16;28650:37;;28577:117;;;;:::o;28700:169::-;28744:6;28777:51;28825:1;28821:6;28813:5;28810:1;28806:13;28777:51;:::i;:::-;28773:56;28858:4;28852;28848:15;28838:25;;28751:118;28700:169;;;;:::o;28874:295::-;28950:4;29096:29;29121:3;29115:4;29096:29;:::i;:::-;29088:37;;29158:3;29155:1;29151:11;29145:4;29142:21;29134:29;;28874:295;;;;:::o;29174:1395::-;29291:37;29324:3;29291:37;:::i;:::-;29393:18;29385:6;29382:30;29379:56;;;29415:18;;:::i;:::-;29379:56;29459:38;29491:4;29485:11;29459:38;:::i;:::-;29544:67;29604:6;29596;29590:4;29544:67;:::i;:::-;29638:1;29662:4;29649:17;;29694:2;29686:6;29683:14;29711:1;29706:618;;;;30368:1;30385:6;30382:77;;;30434:9;30429:3;30425:19;30419:26;30410:35;;30382:77;30485:67;30545:6;30538:5;30485:67;:::i;:::-;30479:4;30472:81;30341:222;29676:887;;29706:618;29758:4;29754:9;29746:6;29742:22;29792:37;29824:4;29792:37;:::i;:::-;29851:1;29865:208;29879:7;29876:1;29873:14;29865:208;;;29958:9;29953:3;29949:19;29943:26;29935:6;29928:42;30009:1;30001:6;29997:14;29987:24;;30056:2;30045:9;30041:18;30028:31;;29902:4;29899:1;29895:12;29890:17;;29865:208;;;30101:6;30092:7;30089:19;30086:179;;;30159:9;30154:3;30150:19;30144:26;30202:48;30244:4;30236:6;30232:17;30221:9;30202:48;:::i;:::-;30194:6;30187:64;30109:156;30086:179;30311:1;30307;30299:6;30295:14;30291:22;30285:4;30278:36;29713:611;;;29676:887;;29266:1303;;;29174:1395;;:::o;30575:228::-;30715:34;30711:1;30703:6;30699:14;30692:58;30784:11;30779:2;30771:6;30767:15;30760:36;30575:228;:::o;30809:366::-;30951:3;30972:67;31036:2;31031:3;30972:67;:::i;:::-;30965:74;;31048:93;31137:3;31048:93;:::i;:::-;31166:2;31161:3;31157:12;31150:19;;30809:366;;;:::o;31181:419::-;31347:4;31385:2;31374:9;31370:18;31362:26;;31434:9;31428:4;31424:20;31420:1;31409:9;31405:17;31398:47;31462:131;31588:4;31462:131;:::i;:::-;31454:139;;31181:419;;;:::o;31606:229::-;31746:34;31742:1;31734:6;31730:14;31723:58;31815:12;31810:2;31802:6;31798:15;31791:37;31606:229;:::o;31841:366::-;31983:3;32004:67;32068:2;32063:3;32004:67;:::i;:::-;31997:74;;32080:93;32169:3;32080:93;:::i;:::-;32198:2;32193:3;32189:12;32182:19;;31841:366;;;:::o;32213:419::-;32379:4;32417:2;32406:9;32402:18;32394:26;;32466:9;32460:4;32456:20;32452:1;32441:9;32437:17;32430:47;32494:131;32620:4;32494:131;:::i;:::-;32486:139;;32213:419;;;:::o;32638:175::-;32778:27;32774:1;32766:6;32762:14;32755:51;32638:175;:::o;32819:366::-;32961:3;32982:67;33046:2;33041:3;32982:67;:::i;:::-;32975:74;;33058:93;33147:3;33058:93;:::i;:::-;33176:2;33171:3;33167:12;33160:19;;32819:366;;;:::o;33191:419::-;33357:4;33395:2;33384:9;33380:18;33372:26;;33444:9;33438:4;33434:20;33430:1;33419:9;33415:17;33408:47;33472:131;33598:4;33472:131;:::i;:::-;33464:139;;33191:419;;;:::o;33616:234::-;33756:34;33752:1;33744:6;33740:14;33733:58;33825:17;33820:2;33812:6;33808:15;33801:42;33616:234;:::o;33856:366::-;33998:3;34019:67;34083:2;34078:3;34019:67;:::i;:::-;34012:74;;34095:93;34184:3;34095:93;:::i;:::-;34213:2;34208:3;34204:12;34197:19;;33856:366;;;:::o;34228:419::-;34394:4;34432:2;34421:9;34417:18;34409:26;;34481:9;34475:4;34471:20;34467:1;34456:9;34452:17;34445:47;34509:131;34635:4;34509:131;:::i;:::-;34501:139;;34228:419;;;:::o;34653:148::-;34755:11;34792:3;34777:18;;34653:148;;;;:::o;34807:390::-;34913:3;34941:39;34974:5;34941:39;:::i;:::-;34996:89;35078:6;35073:3;34996:89;:::i;:::-;34989:96;;35094:65;35152:6;35147:3;35140:4;35133:5;35129:16;35094:65;:::i;:::-;35184:6;35179:3;35175:16;35168:23;;34917:280;34807:390;;;;:::o;35227:874::-;35330:3;35367:5;35361:12;35396:36;35422:9;35396:36;:::i;:::-;35448:89;35530:6;35525:3;35448:89;:::i;:::-;35441:96;;35568:1;35557:9;35553:17;35584:1;35579:166;;;;35759:1;35754:341;;;;35546:549;;35579:166;35663:4;35659:9;35648;35644:25;35639:3;35632:38;35725:6;35718:14;35711:22;35703:6;35699:35;35694:3;35690:45;35683:52;;35579:166;;35754:341;35821:38;35853:5;35821:38;:::i;:::-;35881:1;35895:154;35909:6;35906:1;35903:13;35895:154;;;35983:7;35977:14;35973:1;35968:3;35964:11;35957:35;36033:1;36024:7;36020:15;36009:26;;35931:4;35928:1;35924:12;35919:17;;35895:154;;;36078:6;36073:3;36069:16;36062:23;;35761:334;;35546:549;;35334:767;;35227:874;;;;:::o;36107:589::-;36332:3;36354:95;36445:3;36436:6;36354:95;:::i;:::-;36347:102;;36466:95;36557:3;36548:6;36466:95;:::i;:::-;36459:102;;36578:92;36666:3;36657:6;36578:92;:::i;:::-;36571:99;;36687:3;36680:10;;36107:589;;;;;;:::o;36702:225::-;36842:34;36838:1;36830:6;36826:14;36819:58;36911:8;36906:2;36898:6;36894:15;36887:33;36702:225;:::o;36933:366::-;37075:3;37096:67;37160:2;37155:3;37096:67;:::i;:::-;37089:74;;37172:93;37261:3;37172:93;:::i;:::-;37290:2;37285:3;37281:12;37274:19;;36933:366;;;:::o;37305:419::-;37471:4;37509:2;37498:9;37494:18;37486:26;;37558:9;37552:4;37548:20;37544:1;37533:9;37529:17;37522:47;37586:131;37712:4;37586:131;:::i;:::-;37578:139;;37305:419;;;:::o;37730:231::-;37870:34;37866:1;37858:6;37854:14;37847:58;37939:14;37934:2;37926:6;37922:15;37915:39;37730:231;:::o;37967:366::-;38109:3;38130:67;38194:2;38189:3;38130:67;:::i;:::-;38123:74;;38206:93;38295:3;38206:93;:::i;:::-;38324:2;38319:3;38315:12;38308:19;;37967:366;;;:::o;38339:419::-;38505:4;38543:2;38532:9;38528:18;38520:26;;38592:9;38586:4;38582:20;38578:1;38567:9;38563:17;38556:47;38620:131;38746:4;38620:131;:::i;:::-;38612:139;;38339:419;;;:::o;38764:228::-;38904:34;38900:1;38892:6;38888:14;38881:58;38973:11;38968:2;38960:6;38956:15;38949:36;38764:228;:::o;38998:366::-;39140:3;39161:67;39225:2;39220:3;39161:67;:::i;:::-;39154:74;;39237:93;39326:3;39237:93;:::i;:::-;39355:2;39350:3;39346:12;39339:19;;38998:366;;;:::o;39370:419::-;39536:4;39574:2;39563:9;39559:18;39551:26;;39623:9;39617:4;39613:20;39609:1;39598:9;39594:17;39587:47;39651:131;39777:4;39651:131;:::i;:::-;39643:139;;39370:419;;;:::o;39795:223::-;39935:34;39931:1;39923:6;39919:14;39912:58;40004:6;39999:2;39991:6;39987:15;39980:31;39795:223;:::o;40024:366::-;40166:3;40187:67;40251:2;40246:3;40187:67;:::i;:::-;40180:74;;40263:93;40352:3;40263:93;:::i;:::-;40381:2;40376:3;40372:12;40365:19;;40024:366;;;:::o;40396:419::-;40562:4;40600:2;40589:9;40585:18;40577:26;;40649:9;40643:4;40639:20;40635:1;40624:9;40620:17;40613:47;40677:131;40803:4;40677:131;:::i;:::-;40669:139;;40396:419;;;:::o;40821:194::-;40861:4;40881:20;40899:1;40881:20;:::i;:::-;40876:25;;40915:20;40933:1;40915:20;:::i;:::-;40910:25;;40959:1;40956;40952:9;40944:17;;40983:1;40977:4;40974:11;40971:37;;;40988:18;;:::i;:::-;40971:37;40821:194;;;;:::o;41021:237::-;41161:34;41157:1;41149:6;41145:14;41138:58;41230:20;41225:2;41217:6;41213:15;41206:45;41021:237;:::o;41264:366::-;41406:3;41427:67;41491:2;41486:3;41427:67;:::i;:::-;41420:74;;41503:93;41592:3;41503:93;:::i;:::-;41621:2;41616:3;41612:12;41605:19;;41264:366;;;:::o;41636:419::-;41802:4;41840:2;41829:9;41825:18;41817:26;;41889:9;41883:4;41879:20;41875:1;41864:9;41860:17;41853:47;41917:131;42043:4;41917:131;:::i;:::-;41909:139;;41636:419;;;:::o;42061:180::-;42109:77;42106:1;42099:88;42206:4;42203:1;42196:15;42230:4;42227:1;42220:15;42247:185;42287:1;42304:20;42322:1;42304:20;:::i;:::-;42299:25;;42338:20;42356:1;42338:20;:::i;:::-;42333:25;;42377:1;42367:35;;42382:18;;:::i;:::-;42367:35;42424:1;42421;42417:9;42412:14;;42247:185;;;;:::o;42438:176::-;42470:1;42487:20;42505:1;42487:20;:::i;:::-;42482:25;;42521:20;42539:1;42521:20;:::i;:::-;42516:25;;42560:1;42550:35;;42565:18;;:::i;:::-;42550:35;42606:1;42603;42599:9;42594:14;;42438:176;;;;:::o;42620:98::-;42671:6;42705:5;42699:12;42689:22;;42620:98;;;:::o;42724:168::-;42807:11;42841:6;42836:3;42829:19;42881:4;42876:3;42872:14;42857:29;;42724:168;;;;:::o;42898:373::-;42984:3;43012:38;43044:5;43012:38;:::i;:::-;43066:70;43129:6;43124:3;43066:70;:::i;:::-;43059:77;;43145:65;43203:6;43198:3;43191:4;43184:5;43180:16;43145:65;:::i;:::-;43235:29;43257:6;43235:29;:::i;:::-;43230:3;43226:39;43219:46;;42988:283;42898:373;;;;:::o;43277:640::-;43472:4;43510:3;43499:9;43495:19;43487:27;;43524:71;43592:1;43581:9;43577:17;43568:6;43524:71;:::i;:::-;43605:72;43673:2;43662:9;43658:18;43649:6;43605:72;:::i;:::-;43687;43755:2;43744:9;43740:18;43731:6;43687:72;:::i;:::-;43806:9;43800:4;43796:20;43791:2;43780:9;43776:18;43769:48;43834:76;43905:4;43896:6;43834:76;:::i;:::-;43826:84;;43277:640;;;;;;;:::o;43923:141::-;43979:5;44010:6;44004:13;43995:22;;44026:32;44052:5;44026:32;:::i;:::-;43923:141;;;;:::o;44070:349::-;44139:6;44188:2;44176:9;44167:7;44163:23;44159:32;44156:119;;;44194:79;;:::i;:::-;44156:119;44314:1;44339:63;44394:7;44385:6;44374:9;44370:22;44339:63;:::i;:::-;44329:73;;44285:127;44070:349;;;;:::o;44425:180::-;44473:77;44470:1;44463:88;44570:4;44567:1;44560:15;44594:4;44591:1;44584:15;44611:182;44751:34;44747:1;44739:6;44735:14;44728:58;44611:182;:::o;44799:366::-;44941:3;44962:67;45026:2;45021:3;44962:67;:::i;:::-;44955:74;;45038:93;45127:3;45038:93;:::i;:::-;45156:2;45151:3;45147:12;45140:19;;44799:366;;;:::o;45171:419::-;45337:4;45375:2;45364:9;45360:18;45352:26;;45424:9;45418:4;45414:20;45410:1;45399:9;45395:17;45388:47;45452:131;45578:4;45452:131;:::i;:::-;45444:139;;45171:419;;;:::o;45596:178::-;45736:30;45732:1;45724:6;45720:14;45713:54;45596:178;:::o;45780:366::-;45922:3;45943:67;46007:2;46002:3;45943:67;:::i;:::-;45936:74;;46019:93;46108:3;46019:93;:::i;:::-;46137:2;46132:3;46128:12;46121:19;;45780:366;;;:::o;46152:419::-;46318:4;46356:2;46345:9;46341:18;46333:26;;46405:9;46399:4;46395:20;46391:1;46380:9;46376:17;46369:47;46433:131;46559:4;46433:131;:::i;:::-;46425:139;;46152:419;;;:::o
Swarm Source
ipfs://e96adb4a60e3719dd5fd08101cc71c80d155f606856140abd98292d84838614d
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.