ERC-721
Overview
Max Total Supply
934 RUGGED
Holders
393
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RUGGEDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RUGGED
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-29 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 overridden 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 { _setApprovalForAll(_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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (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: contracts/Rugged.sol pragma solidity ^0.8.4; contract RUGGED is ERC721, Pausable, ERC721Enumerable, Ownable{ constructor() ERC721("RUGGED", "RUGGED") {} function _baseURI() internal pure override returns (string memory) { return "https://nevergoingtoreveal.com"; } using Strings for uint256; uint256 private _reserved = 200; uint256 private _price = 0.00 ether; bool public _paused = false; function mint(uint256 num) public payable { uint256 supply = totalSupply(); require( !_paused, "Sale paused" ); require( num < 6, "Max mint is 5 asshole!" ); require( supply + num < 3200 - _reserved, "Exceeds maximum supply ser" ); require( msg.value >= _price * num, "Ether sent is not correct! Count they shillings and try again" ); for(uint256 i; i < num; i++){ _safeMint( msg.sender, supply + i ); } } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function getPrice() public view returns (uint256){ return _price; } function giveAway(address _to, uint256 _amount) external onlyOwner() { require( _amount <= _reserved, "Giveaway limit reached" ); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _reserved -= _amount; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260c8600c556000600d556000600e60006101000a81548160ff0219169083151502179055503480156200003657600080fd5b506040518060400160405280600681526020017f52554747454400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f52554747454400000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620001e6565b508060019080519060200190620000d4929190620001e6565b5050506000600660006101000a81548160ff02191690831515021790555062000112620001066200011860201b60201c565b6200012060201b60201c565b620002fb565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f49062000296565b90600052602060002090601f01602090048101928262000218576000855562000264565b82601f106200023357805160ff191683800117855562000264565b8280016001018555821562000264579182015b828111156200026357825182559160200191906001019062000246565b5b50905062000273919062000277565b5090565b5b808211156200029257600081600090555060010162000278565b5090565b60006002820490506001821680620002af57607f821691505b60208210811415620002c657620002c5620002cc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614144806200030b6000396000f3fe6080604052600436106101b75760003560e01c80636352211e116100ec578063a0712d681161008a578063c87b56dd11610064578063c87b56dd146105d9578063ca80014414610616578063e985e9c51461063f578063f2fde38b1461067c576101b7565b8063a0712d681461056b578063a22cb46514610587578063b88d4fde146105b0576101b7565b80638456cb59116100c65780638456cb59146104d35780638da5cb5b146104ea57806395d89b411461051557806398d5fdca14610540576101b7565b80636352211e1461044257806370a082311461047f578063715018a6146104bc576101b7565b80632f745c591161015957806342842e0e1161013357806342842e0e14610374578063438b63001461039d5780634f6ccce7146103da5780635c975abb14610417576101b7565b80632f745c59146103095780633ccfd60b146103465780633f4ba83a1461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806316c61ccc1461028a57806318160ddd146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612cd0565b6106a5565b6040516101f091906132b8565b60405180910390f35b34801561020557600080fd5b5061020e6106b7565b60405161021b91906132d3565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612d22565b610749565b604051610258919061322f565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612c94565b6107ce565b005b34801561029657600080fd5b5061029f6108e6565b6040516102ac91906132b8565b60405180910390f35b3480156102c157600080fd5b506102ca6108f9565b6040516102d79190613615565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612b8e565b610906565b005b34801561031557600080fd5b50610330600480360381019061032b9190612c94565b610966565b60405161033d9190613615565b60405180910390f35b34801561035257600080fd5b5061035b610a0b565b005b34801561036957600080fd5b50610372610ad6565b005b34801561038057600080fd5b5061039b60048036038101906103969190612b8e565b610b5c565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612b29565b610b7c565b6040516103d19190613296565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190612d22565b610c76565b60405161040e9190613615565b60405180910390f35b34801561042357600080fd5b5061042c610d0d565b60405161043991906132b8565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190612d22565b610d24565b604051610476919061322f565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190612b29565b610dd6565b6040516104b39190613615565b60405180910390f35b3480156104c857600080fd5b506104d1610e8e565b005b3480156104df57600080fd5b506104e8610f16565b005b3480156104f657600080fd5b506104ff610f9c565b60405161050c919061322f565b60405180910390f35b34801561052157600080fd5b5061052a610fc6565b60405161053791906132d3565b60405180910390f35b34801561054c57600080fd5b50610555611058565b6040516105629190613615565b60405180910390f35b61058560048036038101906105809190612d22565b611062565b005b34801561059357600080fd5b506105ae60048036038101906105a99190612c58565b6111e5565b005b3480156105bc57600080fd5b506105d760048036038101906105d29190612bdd565b6111fb565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190612d22565b61125d565b60405161060d91906132d3565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190612c94565b611304565b005b34801561064b57600080fd5b5061066660048036038101906106619190612b52565b611423565b60405161067391906132b8565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612b29565b6114b7565b005b60006106b0826115af565b9050919050565b6060600080546106c6906138cd565b80601f01602080910402602001604051908101604052809291908181526020018280546106f2906138cd565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600061075482611629565b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a90613515565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107d982610d24565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190613595565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610869611695565b73ffffffffffffffffffffffffffffffffffffffff161480610898575061089781610892611695565b611423565b5b6108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90613495565b60405180910390fd5b6108e1838361169d565b505050565b600e60009054906101000a900460ff1681565b6000600980549050905090565b610917610911611695565b82611756565b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d906135b5565b60405180910390fd5b610961838383611834565b505050565b600061097183610dd6565b82106109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a990613355565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a13611695565b73ffffffffffffffffffffffffffffffffffffffff16610a31610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e90613535565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad2573d6000803e3d6000fd5b5050565b610ade611695565b73ffffffffffffffffffffffffffffffffffffffff16610afc610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990613535565b60405180910390fd5b610b5a611a9b565b565b610b77838383604051806020016040528060008152506111fb565b505050565b60606000610b8983610dd6565b905060008167ffffffffffffffff811115610bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bfb5781602001602082028036833780820191505090505b50905060005b82811015610c6b57610c138582610966565b828281518110610c4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c6390613930565b915050610c01565b508092505050919050565b6000610c806108f9565b8210610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb8906135f5565b60405180910390fd5b60098281548110610cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc4906134d5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906134b5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e96611695565b73ffffffffffffffffffffffffffffffffffffffff16610eb4610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613535565b60405180910390fd5b610f146000611b3d565b565b610f1e611695565b73ffffffffffffffffffffffffffffffffffffffff16610f3c610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990613535565b60405180910390fd5b610f9a611c03565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fd5906138cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611001906138cd565b801561104e5780601f106110235761010080835404028352916020019161104e565b820191906000526020600020905b81548152906001019060200180831161103157829003601f168201915b5050505050905090565b6000600d54905090565b600061106c6108f9565b9050600e60009054906101000a900460ff16156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906132f5565b60405180910390fd5b60068210611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613575565b60405180910390fd5b600c54610c8061111191906137e3565b828261111d9190613702565b1061115d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611154906133d5565b60405180910390fd5b81600d5461116b9190613789565b3410156111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a4906135d5565b60405180910390fd5b60005b828110156111e0576111cd3382846111c89190613702565b611ca6565b80806111d890613930565b9150506111b0565b505050565b6111f76111f0611695565b8383611cc4565b5050565b61120c611206611695565b83611756565b61124b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611242906135b5565b60405180910390fd5b61125784848484611e31565b50505050565b606061126882611629565b6112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90613555565b60405180910390fd5b60006112b1611e8d565b905060008151116112d157604051806020016040528060008152506112fc565b806112db84611eca565b6040516020016112ec92919061320b565b6040516020818303038152906040525b915050919050565b61130c611695565b73ffffffffffffffffffffffffffffffffffffffff1661132a610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613535565b60405180910390fd5b600c548111156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613315565b60405180910390fd5b60006113cf6108f9565b905060005b82811015611404576113f18482846113ec9190613702565b611ca6565b80806113fc90613930565b9150506113d4565b5081600c600082825461141791906137e3565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114bf611695565b73ffffffffffffffffffffffffffffffffffffffff166114dd610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a90613535565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613395565b60405180910390fd5b6115ac81611b3d565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611622575061162182612077565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661171083610d24565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061176182611629565b6117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790613455565b60405180910390fd5b60006117ab83610d24565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117ed57506117ec8185611423565b5b8061182b57508373ffffffffffffffffffffffffffffffffffffffff1661181384610749565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661185482610d24565b73ffffffffffffffffffffffffffffffffffffffff16146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a1906133b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191190613415565b60405180910390fd5b611925838383612159565b61193060008261169d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461198091906137e3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d79190613702565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a96838383612169565b505050565b611aa3610d0d565b611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613335565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b26611695565b604051611b33919061322f565b60405180910390a1565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c0b610d0d565b15611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290613475565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c8f611695565b604051611c9c919061322f565b60405180910390a1565b611cc082826040518060200160405280600081525061216e565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613435565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e2491906132b8565b60405180910390a3505050565b611e3c848484611834565b611e48848484846121c9565b611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90613375565b60405180910390fd5b50505050565b60606040518060400160405280601e81526020017f68747470733a2f2f6e65766572676f696e67746f72657665616c2e636f6d0000815250905090565b60606000821415611f12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612072565b600082905060005b60008214611f44578080611f2d90613930565b915050600a82611f3d9190613758565b9150611f1a565b60008167ffffffffffffffff811115611f86577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fb85781602001600182028036833780820191505090505b5090505b6000851461206b57600182611fd191906137e3565b9150600a85611fe09190613979565b6030611fec9190613702565b60f81b818381518110612028577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120649190613758565b9450611fbc565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612152575061215182612360565b5b9050919050565b6121648383836123ca565b505050565b505050565b61217883836124de565b61218560008484846121c9565b6121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613375565b60405180910390fd5b505050565b60006121ea8473ffffffffffffffffffffffffffffffffffffffff166126b8565b15612353578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612213611695565b8786866040518563ffffffff1660e01b8152600401612235949392919061324a565b602060405180830381600087803b15801561224f57600080fd5b505af192505050801561228057506040513d601f19601f8201168201806040525081019061227d9190612cf9565b60015b612303573d80600081146122b0576040519150601f19603f3d011682016040523d82523d6000602084013e6122b5565b606091505b506000815114156122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f290613375565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612358565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123d58383836126db565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561241857612413816126e0565b612457565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612456576124558382612729565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561249a5761249581612896565b6124d9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124d8576124d782826129d9565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561254e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612545906134f5565b60405180910390fd5b61255781611629565b15612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e906133f5565b60405180910390fd5b6125a360008383612159565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f39190613702565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126b460008383612169565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161273684610dd6565b61274091906137e3565b9050600060086000848152602001908152602001600020549050818114612825576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506128aa91906137e3565b90506000600a6000848152602001908152602001600020549050600060098381548110612900577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612948577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806129bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006129e483610dd6565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6000612a6b612a6684613655565b613630565b905082815260208101848484011115612a8357600080fd5b612a8e84828561388b565b509392505050565b600081359050612aa5816140b2565b92915050565b600081359050612aba816140c9565b92915050565b600081359050612acf816140e0565b92915050565b600081519050612ae4816140e0565b92915050565b600082601f830112612afb57600080fd5b8135612b0b848260208601612a58565b91505092915050565b600081359050612b23816140f7565b92915050565b600060208284031215612b3b57600080fd5b6000612b4984828501612a96565b91505092915050565b60008060408385031215612b6557600080fd5b6000612b7385828601612a96565b9250506020612b8485828601612a96565b9150509250929050565b600080600060608486031215612ba357600080fd5b6000612bb186828701612a96565b9350506020612bc286828701612a96565b9250506040612bd386828701612b14565b9150509250925092565b60008060008060808587031215612bf357600080fd5b6000612c0187828801612a96565b9450506020612c1287828801612a96565b9350506040612c2387828801612b14565b925050606085013567ffffffffffffffff811115612c4057600080fd5b612c4c87828801612aea565b91505092959194509250565b60008060408385031215612c6b57600080fd5b6000612c7985828601612a96565b9250506020612c8a85828601612aab565b9150509250929050565b60008060408385031215612ca757600080fd5b6000612cb585828601612a96565b9250506020612cc685828601612b14565b9150509250929050565b600060208284031215612ce257600080fd5b6000612cf084828501612ac0565b91505092915050565b600060208284031215612d0b57600080fd5b6000612d1984828501612ad5565b91505092915050565b600060208284031215612d3457600080fd5b6000612d4284828501612b14565b91505092915050565b6000612d5783836131ed565b60208301905092915050565b612d6c81613817565b82525050565b6000612d7d82613696565b612d8781856136c4565b9350612d9283613686565b8060005b83811015612dc3578151612daa8882612d4b565b9750612db5836136b7565b925050600181019050612d96565b5085935050505092915050565b612dd981613829565b82525050565b6000612dea826136a1565b612df481856136d5565b9350612e0481856020860161389a565b612e0d81613a66565b840191505092915050565b6000612e23826136ac565b612e2d81856136e6565b9350612e3d81856020860161389a565b612e4681613a66565b840191505092915050565b6000612e5c826136ac565b612e6681856136f7565b9350612e7681856020860161389a565b80840191505092915050565b6000612e8f600b836136e6565b9150612e9a82613a77565b602082019050919050565b6000612eb26016836136e6565b9150612ebd82613aa0565b602082019050919050565b6000612ed56014836136e6565b9150612ee082613ac9565b602082019050919050565b6000612ef8602b836136e6565b9150612f0382613af2565b604082019050919050565b6000612f1b6032836136e6565b9150612f2682613b41565b604082019050919050565b6000612f3e6026836136e6565b9150612f4982613b90565b604082019050919050565b6000612f616025836136e6565b9150612f6c82613bdf565b604082019050919050565b6000612f84601a836136e6565b9150612f8f82613c2e565b602082019050919050565b6000612fa7601c836136e6565b9150612fb282613c57565b602082019050919050565b6000612fca6024836136e6565b9150612fd582613c80565b604082019050919050565b6000612fed6019836136e6565b9150612ff882613ccf565b602082019050919050565b6000613010602c836136e6565b915061301b82613cf8565b604082019050919050565b60006130336010836136e6565b915061303e82613d47565b602082019050919050565b60006130566038836136e6565b915061306182613d70565b604082019050919050565b6000613079602a836136e6565b915061308482613dbf565b604082019050919050565b600061309c6029836136e6565b91506130a782613e0e565b604082019050919050565b60006130bf6020836136e6565b91506130ca82613e5d565b602082019050919050565b60006130e2602c836136e6565b91506130ed82613e86565b604082019050919050565b60006131056020836136e6565b915061311082613ed5565b602082019050919050565b6000613128602f836136e6565b915061313382613efe565b604082019050919050565b600061314b6016836136e6565b915061315682613f4d565b602082019050919050565b600061316e6021836136e6565b915061317982613f76565b604082019050919050565b60006131916031836136e6565b915061319c82613fc5565b604082019050919050565b60006131b4603d836136e6565b91506131bf82614014565b604082019050919050565b60006131d7602c836136e6565b91506131e282614063565b604082019050919050565b6131f681613881565b82525050565b61320581613881565b82525050565b60006132178285612e51565b91506132238284612e51565b91508190509392505050565b60006020820190506132446000830184612d63565b92915050565b600060808201905061325f6000830187612d63565b61326c6020830186612d63565b61327960408301856131fc565b818103606083015261328b8184612ddf565b905095945050505050565b600060208201905081810360008301526132b08184612d72565b905092915050565b60006020820190506132cd6000830184612dd0565b92915050565b600060208201905081810360008301526132ed8184612e18565b905092915050565b6000602082019050818103600083015261330e81612e82565b9050919050565b6000602082019050818103600083015261332e81612ea5565b9050919050565b6000602082019050818103600083015261334e81612ec8565b9050919050565b6000602082019050818103600083015261336e81612eeb565b9050919050565b6000602082019050818103600083015261338e81612f0e565b9050919050565b600060208201905081810360008301526133ae81612f31565b9050919050565b600060208201905081810360008301526133ce81612f54565b9050919050565b600060208201905081810360008301526133ee81612f77565b9050919050565b6000602082019050818103600083015261340e81612f9a565b9050919050565b6000602082019050818103600083015261342e81612fbd565b9050919050565b6000602082019050818103600083015261344e81612fe0565b9050919050565b6000602082019050818103600083015261346e81613003565b9050919050565b6000602082019050818103600083015261348e81613026565b9050919050565b600060208201905081810360008301526134ae81613049565b9050919050565b600060208201905081810360008301526134ce8161306c565b9050919050565b600060208201905081810360008301526134ee8161308f565b9050919050565b6000602082019050818103600083015261350e816130b2565b9050919050565b6000602082019050818103600083015261352e816130d5565b9050919050565b6000602082019050818103600083015261354e816130f8565b9050919050565b6000602082019050818103600083015261356e8161311b565b9050919050565b6000602082019050818103600083015261358e8161313e565b9050919050565b600060208201905081810360008301526135ae81613161565b9050919050565b600060208201905081810360008301526135ce81613184565b9050919050565b600060208201905081810360008301526135ee816131a7565b9050919050565b6000602082019050818103600083015261360e816131ca565b9050919050565b600060208201905061362a60008301846131fc565b92915050565b600061363a61364b565b905061364682826138ff565b919050565b6000604051905090565b600067ffffffffffffffff8211156136705761366f613a37565b5b61367982613a66565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061370d82613881565b915061371883613881565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561374d5761374c6139aa565b5b828201905092915050565b600061376382613881565b915061376e83613881565b92508261377e5761377d6139d9565b5b828204905092915050565b600061379482613881565b915061379f83613881565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137d8576137d76139aa565b5b828202905092915050565b60006137ee82613881565b91506137f983613881565b92508282101561380c5761380b6139aa565b5b828203905092915050565b600061382282613861565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138b857808201518184015260208101905061389d565b838111156138c7576000848401525b50505050565b600060028204905060018216806138e557607f821691505b602082108114156138f9576138f8613a08565b5b50919050565b61390882613a66565b810181811067ffffffffffffffff8211171561392757613926613a37565b5b80604052505050565b600061393b82613881565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561396e5761396d6139aa565b5b600182019050919050565b600061398482613881565b915061398f83613881565b92508261399f5761399e6139d9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f4769766561776179206c696d6974207265616368656400000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7920736572000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178206d696e74206973203520617373686f6c652100000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f72726563742120436f756e7460008201527f2074686579207368696c6c696e677320616e642074727920616761696e000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6140bb81613817565b81146140c657600080fd5b50565b6140d281613829565b81146140dd57600080fd5b50565b6140e981613835565b81146140f457600080fd5b50565b61410081613881565b811461410b57600080fd5b5056fea2646970667358221220598e5bd1422311da548bed30333bfc0fc1be8173b044491cc619a81992afe7ab64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101b75760003560e01c80636352211e116100ec578063a0712d681161008a578063c87b56dd11610064578063c87b56dd146105d9578063ca80014414610616578063e985e9c51461063f578063f2fde38b1461067c576101b7565b8063a0712d681461056b578063a22cb46514610587578063b88d4fde146105b0576101b7565b80638456cb59116100c65780638456cb59146104d35780638da5cb5b146104ea57806395d89b411461051557806398d5fdca14610540576101b7565b80636352211e1461044257806370a082311461047f578063715018a6146104bc576101b7565b80632f745c591161015957806342842e0e1161013357806342842e0e14610374578063438b63001461039d5780634f6ccce7146103da5780635c975abb14610417576101b7565b80632f745c59146103095780633ccfd60b146103465780633f4ba83a1461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806316c61ccc1461028a57806318160ddd146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612cd0565b6106a5565b6040516101f091906132b8565b60405180910390f35b34801561020557600080fd5b5061020e6106b7565b60405161021b91906132d3565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612d22565b610749565b604051610258919061322f565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612c94565b6107ce565b005b34801561029657600080fd5b5061029f6108e6565b6040516102ac91906132b8565b60405180910390f35b3480156102c157600080fd5b506102ca6108f9565b6040516102d79190613615565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612b8e565b610906565b005b34801561031557600080fd5b50610330600480360381019061032b9190612c94565b610966565b60405161033d9190613615565b60405180910390f35b34801561035257600080fd5b5061035b610a0b565b005b34801561036957600080fd5b50610372610ad6565b005b34801561038057600080fd5b5061039b60048036038101906103969190612b8e565b610b5c565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612b29565b610b7c565b6040516103d19190613296565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190612d22565b610c76565b60405161040e9190613615565b60405180910390f35b34801561042357600080fd5b5061042c610d0d565b60405161043991906132b8565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190612d22565b610d24565b604051610476919061322f565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190612b29565b610dd6565b6040516104b39190613615565b60405180910390f35b3480156104c857600080fd5b506104d1610e8e565b005b3480156104df57600080fd5b506104e8610f16565b005b3480156104f657600080fd5b506104ff610f9c565b60405161050c919061322f565b60405180910390f35b34801561052157600080fd5b5061052a610fc6565b60405161053791906132d3565b60405180910390f35b34801561054c57600080fd5b50610555611058565b6040516105629190613615565b60405180910390f35b61058560048036038101906105809190612d22565b611062565b005b34801561059357600080fd5b506105ae60048036038101906105a99190612c58565b6111e5565b005b3480156105bc57600080fd5b506105d760048036038101906105d29190612bdd565b6111fb565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190612d22565b61125d565b60405161060d91906132d3565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190612c94565b611304565b005b34801561064b57600080fd5b5061066660048036038101906106619190612b52565b611423565b60405161067391906132b8565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612b29565b6114b7565b005b60006106b0826115af565b9050919050565b6060600080546106c6906138cd565b80601f01602080910402602001604051908101604052809291908181526020018280546106f2906138cd565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600061075482611629565b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a90613515565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107d982610d24565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190613595565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610869611695565b73ffffffffffffffffffffffffffffffffffffffff161480610898575061089781610892611695565b611423565b5b6108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90613495565b60405180910390fd5b6108e1838361169d565b505050565b600e60009054906101000a900460ff1681565b6000600980549050905090565b610917610911611695565b82611756565b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d906135b5565b60405180910390fd5b610961838383611834565b505050565b600061097183610dd6565b82106109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a990613355565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a13611695565b73ffffffffffffffffffffffffffffffffffffffff16610a31610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e90613535565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ad2573d6000803e3d6000fd5b5050565b610ade611695565b73ffffffffffffffffffffffffffffffffffffffff16610afc610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990613535565b60405180910390fd5b610b5a611a9b565b565b610b77838383604051806020016040528060008152506111fb565b505050565b60606000610b8983610dd6565b905060008167ffffffffffffffff811115610bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bfb5781602001602082028036833780820191505090505b50905060005b82811015610c6b57610c138582610966565b828281518110610c4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c6390613930565b915050610c01565b508092505050919050565b6000610c806108f9565b8210610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb8906135f5565b60405180910390fd5b60098281548110610cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc4906134d5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906134b5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e96611695565b73ffffffffffffffffffffffffffffffffffffffff16610eb4610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613535565b60405180910390fd5b610f146000611b3d565b565b610f1e611695565b73ffffffffffffffffffffffffffffffffffffffff16610f3c610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990613535565b60405180910390fd5b610f9a611c03565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fd5906138cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611001906138cd565b801561104e5780601f106110235761010080835404028352916020019161104e565b820191906000526020600020905b81548152906001019060200180831161103157829003601f168201915b5050505050905090565b6000600d54905090565b600061106c6108f9565b9050600e60009054906101000a900460ff16156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906132f5565b60405180910390fd5b60068210611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613575565b60405180910390fd5b600c54610c8061111191906137e3565b828261111d9190613702565b1061115d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611154906133d5565b60405180910390fd5b81600d5461116b9190613789565b3410156111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a4906135d5565b60405180910390fd5b60005b828110156111e0576111cd3382846111c89190613702565b611ca6565b80806111d890613930565b9150506111b0565b505050565b6111f76111f0611695565b8383611cc4565b5050565b61120c611206611695565b83611756565b61124b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611242906135b5565b60405180910390fd5b61125784848484611e31565b50505050565b606061126882611629565b6112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90613555565b60405180910390fd5b60006112b1611e8d565b905060008151116112d157604051806020016040528060008152506112fc565b806112db84611eca565b6040516020016112ec92919061320b565b6040516020818303038152906040525b915050919050565b61130c611695565b73ffffffffffffffffffffffffffffffffffffffff1661132a610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613535565b60405180910390fd5b600c548111156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613315565b60405180910390fd5b60006113cf6108f9565b905060005b82811015611404576113f18482846113ec9190613702565b611ca6565b80806113fc90613930565b9150506113d4565b5081600c600082825461141791906137e3565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114bf611695565b73ffffffffffffffffffffffffffffffffffffffff166114dd610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a90613535565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613395565b60405180910390fd5b6115ac81611b3d565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611622575061162182612077565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661171083610d24565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061176182611629565b6117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790613455565b60405180910390fd5b60006117ab83610d24565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117ed57506117ec8185611423565b5b8061182b57508373ffffffffffffffffffffffffffffffffffffffff1661181384610749565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661185482610d24565b73ffffffffffffffffffffffffffffffffffffffff16146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a1906133b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191190613415565b60405180910390fd5b611925838383612159565b61193060008261169d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461198091906137e3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d79190613702565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a96838383612169565b505050565b611aa3610d0d565b611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613335565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b26611695565b604051611b33919061322f565b60405180910390a1565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c0b610d0d565b15611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290613475565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c8f611695565b604051611c9c919061322f565b60405180910390a1565b611cc082826040518060200160405280600081525061216e565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613435565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e2491906132b8565b60405180910390a3505050565b611e3c848484611834565b611e48848484846121c9565b611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90613375565b60405180910390fd5b50505050565b60606040518060400160405280601e81526020017f68747470733a2f2f6e65766572676f696e67746f72657665616c2e636f6d0000815250905090565b60606000821415611f12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612072565b600082905060005b60008214611f44578080611f2d90613930565b915050600a82611f3d9190613758565b9150611f1a565b60008167ffffffffffffffff811115611f86577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fb85781602001600182028036833780820191505090505b5090505b6000851461206b57600182611fd191906137e3565b9150600a85611fe09190613979565b6030611fec9190613702565b60f81b818381518110612028577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120649190613758565b9450611fbc565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612152575061215182612360565b5b9050919050565b6121648383836123ca565b505050565b505050565b61217883836124de565b61218560008484846121c9565b6121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613375565b60405180910390fd5b505050565b60006121ea8473ffffffffffffffffffffffffffffffffffffffff166126b8565b15612353578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612213611695565b8786866040518563ffffffff1660e01b8152600401612235949392919061324a565b602060405180830381600087803b15801561224f57600080fd5b505af192505050801561228057506040513d601f19601f8201168201806040525081019061227d9190612cf9565b60015b612303573d80600081146122b0576040519150601f19603f3d011682016040523d82523d6000602084013e6122b5565b606091505b506000815114156122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f290613375565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612358565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123d58383836126db565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561241857612413816126e0565b612457565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612456576124558382612729565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561249a5761249581612896565b6124d9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124d8576124d782826129d9565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561254e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612545906134f5565b60405180910390fd5b61255781611629565b15612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e906133f5565b60405180910390fd5b6125a360008383612159565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f39190613702565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126b460008383612169565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161273684610dd6565b61274091906137e3565b9050600060086000848152602001908152602001600020549050818114612825576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506128aa91906137e3565b90506000600a6000848152602001908152602001600020549050600060098381548110612900577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612948577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806129bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006129e483610dd6565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6000612a6b612a6684613655565b613630565b905082815260208101848484011115612a8357600080fd5b612a8e84828561388b565b509392505050565b600081359050612aa5816140b2565b92915050565b600081359050612aba816140c9565b92915050565b600081359050612acf816140e0565b92915050565b600081519050612ae4816140e0565b92915050565b600082601f830112612afb57600080fd5b8135612b0b848260208601612a58565b91505092915050565b600081359050612b23816140f7565b92915050565b600060208284031215612b3b57600080fd5b6000612b4984828501612a96565b91505092915050565b60008060408385031215612b6557600080fd5b6000612b7385828601612a96565b9250506020612b8485828601612a96565b9150509250929050565b600080600060608486031215612ba357600080fd5b6000612bb186828701612a96565b9350506020612bc286828701612a96565b9250506040612bd386828701612b14565b9150509250925092565b60008060008060808587031215612bf357600080fd5b6000612c0187828801612a96565b9450506020612c1287828801612a96565b9350506040612c2387828801612b14565b925050606085013567ffffffffffffffff811115612c4057600080fd5b612c4c87828801612aea565b91505092959194509250565b60008060408385031215612c6b57600080fd5b6000612c7985828601612a96565b9250506020612c8a85828601612aab565b9150509250929050565b60008060408385031215612ca757600080fd5b6000612cb585828601612a96565b9250506020612cc685828601612b14565b9150509250929050565b600060208284031215612ce257600080fd5b6000612cf084828501612ac0565b91505092915050565b600060208284031215612d0b57600080fd5b6000612d1984828501612ad5565b91505092915050565b600060208284031215612d3457600080fd5b6000612d4284828501612b14565b91505092915050565b6000612d5783836131ed565b60208301905092915050565b612d6c81613817565b82525050565b6000612d7d82613696565b612d8781856136c4565b9350612d9283613686565b8060005b83811015612dc3578151612daa8882612d4b565b9750612db5836136b7565b925050600181019050612d96565b5085935050505092915050565b612dd981613829565b82525050565b6000612dea826136a1565b612df481856136d5565b9350612e0481856020860161389a565b612e0d81613a66565b840191505092915050565b6000612e23826136ac565b612e2d81856136e6565b9350612e3d81856020860161389a565b612e4681613a66565b840191505092915050565b6000612e5c826136ac565b612e6681856136f7565b9350612e7681856020860161389a565b80840191505092915050565b6000612e8f600b836136e6565b9150612e9a82613a77565b602082019050919050565b6000612eb26016836136e6565b9150612ebd82613aa0565b602082019050919050565b6000612ed56014836136e6565b9150612ee082613ac9565b602082019050919050565b6000612ef8602b836136e6565b9150612f0382613af2565b604082019050919050565b6000612f1b6032836136e6565b9150612f2682613b41565b604082019050919050565b6000612f3e6026836136e6565b9150612f4982613b90565b604082019050919050565b6000612f616025836136e6565b9150612f6c82613bdf565b604082019050919050565b6000612f84601a836136e6565b9150612f8f82613c2e565b602082019050919050565b6000612fa7601c836136e6565b9150612fb282613c57565b602082019050919050565b6000612fca6024836136e6565b9150612fd582613c80565b604082019050919050565b6000612fed6019836136e6565b9150612ff882613ccf565b602082019050919050565b6000613010602c836136e6565b915061301b82613cf8565b604082019050919050565b60006130336010836136e6565b915061303e82613d47565b602082019050919050565b60006130566038836136e6565b915061306182613d70565b604082019050919050565b6000613079602a836136e6565b915061308482613dbf565b604082019050919050565b600061309c6029836136e6565b91506130a782613e0e565b604082019050919050565b60006130bf6020836136e6565b91506130ca82613e5d565b602082019050919050565b60006130e2602c836136e6565b91506130ed82613e86565b604082019050919050565b60006131056020836136e6565b915061311082613ed5565b602082019050919050565b6000613128602f836136e6565b915061313382613efe565b604082019050919050565b600061314b6016836136e6565b915061315682613f4d565b602082019050919050565b600061316e6021836136e6565b915061317982613f76565b604082019050919050565b60006131916031836136e6565b915061319c82613fc5565b604082019050919050565b60006131b4603d836136e6565b91506131bf82614014565b604082019050919050565b60006131d7602c836136e6565b91506131e282614063565b604082019050919050565b6131f681613881565b82525050565b61320581613881565b82525050565b60006132178285612e51565b91506132238284612e51565b91508190509392505050565b60006020820190506132446000830184612d63565b92915050565b600060808201905061325f6000830187612d63565b61326c6020830186612d63565b61327960408301856131fc565b818103606083015261328b8184612ddf565b905095945050505050565b600060208201905081810360008301526132b08184612d72565b905092915050565b60006020820190506132cd6000830184612dd0565b92915050565b600060208201905081810360008301526132ed8184612e18565b905092915050565b6000602082019050818103600083015261330e81612e82565b9050919050565b6000602082019050818103600083015261332e81612ea5565b9050919050565b6000602082019050818103600083015261334e81612ec8565b9050919050565b6000602082019050818103600083015261336e81612eeb565b9050919050565b6000602082019050818103600083015261338e81612f0e565b9050919050565b600060208201905081810360008301526133ae81612f31565b9050919050565b600060208201905081810360008301526133ce81612f54565b9050919050565b600060208201905081810360008301526133ee81612f77565b9050919050565b6000602082019050818103600083015261340e81612f9a565b9050919050565b6000602082019050818103600083015261342e81612fbd565b9050919050565b6000602082019050818103600083015261344e81612fe0565b9050919050565b6000602082019050818103600083015261346e81613003565b9050919050565b6000602082019050818103600083015261348e81613026565b9050919050565b600060208201905081810360008301526134ae81613049565b9050919050565b600060208201905081810360008301526134ce8161306c565b9050919050565b600060208201905081810360008301526134ee8161308f565b9050919050565b6000602082019050818103600083015261350e816130b2565b9050919050565b6000602082019050818103600083015261352e816130d5565b9050919050565b6000602082019050818103600083015261354e816130f8565b9050919050565b6000602082019050818103600083015261356e8161311b565b9050919050565b6000602082019050818103600083015261358e8161313e565b9050919050565b600060208201905081810360008301526135ae81613161565b9050919050565b600060208201905081810360008301526135ce81613184565b9050919050565b600060208201905081810360008301526135ee816131a7565b9050919050565b6000602082019050818103600083015261360e816131ca565b9050919050565b600060208201905061362a60008301846131fc565b92915050565b600061363a61364b565b905061364682826138ff565b919050565b6000604051905090565b600067ffffffffffffffff8211156136705761366f613a37565b5b61367982613a66565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061370d82613881565b915061371883613881565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561374d5761374c6139aa565b5b828201905092915050565b600061376382613881565b915061376e83613881565b92508261377e5761377d6139d9565b5b828204905092915050565b600061379482613881565b915061379f83613881565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137d8576137d76139aa565b5b828202905092915050565b60006137ee82613881565b91506137f983613881565b92508282101561380c5761380b6139aa565b5b828203905092915050565b600061382282613861565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138b857808201518184015260208101905061389d565b838111156138c7576000848401525b50505050565b600060028204905060018216806138e557607f821691505b602082108114156138f9576138f8613a08565b5b50919050565b61390882613a66565b810181811067ffffffffffffffff8211171561392757613926613a37565b5b80604052505050565b600061393b82613881565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561396e5761396d6139aa565b5b600182019050919050565b600061398482613881565b915061398f83613881565b92508261399f5761399e6139d9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f4769766561776179206c696d6974207265616368656400000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7920736572000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178206d696e74206973203520617373686f6c652100000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f72726563742120436f756e7460008201527f2074686579207368696c6c696e677320616e642074727920616761696e000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6140bb81613817565b81146140c657600080fd5b50565b6140d281613829565b81146140dd57600080fd5b50565b6140e981613835565b81146140f457600080fd5b50565b61410081613881565b811461410b57600080fd5b5056fea2646970667358221220598e5bd1422311da548bed30333bfc0fc1be8173b044491cc619a81992afe7ab64736f6c63430008040033
Deployed Bytecode Sourcemap
47891:2543:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50218:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28490:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30050:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29573:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48259:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42311:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30800:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41979:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49638:145;;;;;;;;;;;;;:::i;:::-;;49861:65;;;;;;;;;;;;;:::i;:::-;;31210:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48866:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42501:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6679:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28184:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27914:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;49792:61;;;;;;;;;;;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28659:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49218:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48295:563;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30343:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31466:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28834:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49307:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30569:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50218:212;50357:4;50386:36;50410:11;50386:23;:36::i;:::-;50379:43;;50218:212;;;:::o;28490:100::-;28544:13;28577:5;28570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28490:100;:::o;30050:221::-;30126:7;30154:16;30162:7;30154;:16::i;:::-;30146:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30239:15;:24;30255:7;30239:24;;;;;;;;;;;;;;;;;;;;;30232:31;;30050:221;;;:::o;29573:411::-;29654:13;29670:23;29685:7;29670:14;:23::i;:::-;29654:39;;29718:5;29712:11;;:2;:11;;;;29704:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29812:5;29796:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29821:37;29838:5;29845:12;:10;:12::i;:::-;29821:16;:37::i;:::-;29796:62;29774:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29955:21;29964:2;29968:7;29955:8;:21::i;:::-;29573:411;;;:::o;48259:27::-;;;;;;;;;;;;;:::o;42311:113::-;42372:7;42399:10;:17;;;;42392:24;;42311:113;:::o;30800:339::-;30995:41;31014:12;:10;:12::i;:::-;31028:7;30995:18;:41::i;:::-;30987:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31103:28;31113:4;31119:2;31123:7;31103:9;:28::i;:::-;30800:339;;;:::o;41979:256::-;42076:7;42112:23;42129:5;42112:16;:23::i;:::-;42104:5;:31;42096:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42201:12;:19;42214:5;42201:19;;;;;;;;;;;;;;;:26;42221:5;42201:26;;;;;;;;;;;;42194:33;;41979:256;;;;:::o;49638:145::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49688:15:::1;49706:21;49688:39;;49746:10;49738:28;;:37;49767:7;49738:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4370:1;49638:145::o:0;49861:65::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49908:10:::1;:8;:10::i;:::-;49861:65::o:0;31210:185::-;31348:39;31365:4;31371:2;31375:7;31348:39;;;;;;;;;;;;:16;:39::i;:::-;31210:185;;;:::o;48866:342::-;48925:16;48954:18;48975:17;48985:6;48975:9;:17::i;:::-;48954:38;;49005:25;49047:10;49033:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49005:53;;49073:9;49069:106;49088:10;49084:1;:14;49069:106;;;49133:30;49153:6;49161:1;49133:19;:30::i;:::-;49119:8;49128:1;49119:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;49100:3;;;;;:::i;:::-;;;;49069:106;;;;49192:8;49185:15;;;;48866:342;;;:::o;42501:233::-;42576:7;42612:30;:28;:30::i;:::-;42604:5;:38;42596:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42709:10;42720:5;42709:17;;;;;;;;;;;;;;;;;;;;;;;;42702:24;;42501:233;;;:::o;6679:86::-;6726:4;6750:7;;;;;;;;;;;6743:14;;6679:86;:::o;28184:239::-;28256:7;28276:13;28292:7;:16;28300:7;28292:16;;;;;;;;;;;;;;;;;;;;;28276:32;;28344:1;28327:19;;:5;:19;;;;28319:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28410:5;28403:12;;;28184:239;;;:::o;27914:208::-;27986:7;28031:1;28014:19;;:5;:19;;;;28006:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28098:9;:16;28108:5;28098:16;;;;;;;;;;;;;;;;28091:23;;27914:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;49792:61::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49837:8:::1;:6;:8::i;:::-;49792:61::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;28659:104::-;28715:13;28748:7;28741:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28659:104;:::o;49218:81::-;49259:7;49285:6;;49278:13;;49218:81;:::o;48295:563::-;48348:14;48365:13;:11;:13::i;:::-;48348:30;;48399:7;;;;;;;;;;;48398:8;48389:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;48478:1;48472:3;:7;48463:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48578:9;;48571:4;:16;;;;:::i;:::-;48565:3;48556:6;:12;;;;:::i;:::-;:31;48547:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48666:3;48657:6;;:12;;;;:::i;:::-;48644:9;:25;;48635:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48765:9;48761:90;48780:3;48776:1;:7;48761:90;;;48804:35;48815:10;48836:1;48827:6;:10;;;;:::i;:::-;48804:9;:35::i;:::-;48785:3;;;;;:::i;:::-;;;;48761:90;;;;48295:563;;:::o;30343:155::-;30438:52;30457:12;:10;:12::i;:::-;30471:8;30481;30438:18;:52::i;:::-;30343:155;;:::o;31466:328::-;31641:41;31660:12;:10;:12::i;:::-;31674:7;31641:18;:41::i;:::-;31633:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31747:39;31761:4;31767:2;31771:7;31780:5;31747:13;:39::i;:::-;31466:328;;;;:::o;28834:334::-;28907:13;28941:16;28949:7;28941;:16::i;:::-;28933:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29022:21;29046:10;:8;:10::i;:::-;29022:34;;29098:1;29080:7;29074:21;:25;:86;;;;;;;;;;;;;;;;;29126:7;29135:18;:7;:16;:18::i;:::-;29109:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29074:86;29067:93;;;28834:334;;;:::o;49307:318::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49407:9:::1;;49396:7;:20;;49387:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;49457:14;49474:13;:11;:13::i;:::-;49457:30;;49502:9;49498:87;49517:7;49513:1;:11;49498:87;;;49545:28;49556:3;49570:1;49561:6;:10;;;;:::i;:::-;49545:9;:28::i;:::-;49526:3;;;;;:::i;:::-;;;;49498:87;;;;49610:7;49597:9;;:20;;;;;;;:::i;:::-;;;;;;;;4370:1;49307:318:::0;;:::o;30569:164::-;30666:4;30690:18;:25;30709:5;30690:25;;;;;;;;;;;;;;;:35;30716:8;30690:35;;;;;;;;;;;;;;;;;;;;;;;;;30683:42;;30569:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;41671:224::-;41773:4;41812:35;41797:50;;;:11;:50;;;;:90;;;;41851:36;41875:11;41851:23;:36::i;:::-;41797:90;41790:97;;41671:224;;;:::o;33304:127::-;33369:4;33421:1;33393:30;;:7;:16;33401:7;33393:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33386:37;;33304:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;37450:174::-;37552:2;37525:15;:24;37541:7;37525:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37608:7;37604:2;37570:46;;37579:23;37594:7;37579:14;:23::i;:::-;37570:46;;;;;;;;;;;;37450:174;;:::o;33598:348::-;33691:4;33716:16;33724:7;33716;:16::i;:::-;33708:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33792:13;33808:23;33823:7;33808:14;:23::i;:::-;33792:39;;33861:5;33850:16;;:7;:16;;;:52;;;;33870:32;33887:5;33894:7;33870:16;:32::i;:::-;33850:52;:87;;;;33930:7;33906:31;;:20;33918:7;33906:11;:20::i;:::-;:31;;;33850:87;33842:96;;;33598:348;;;;:::o;36707:625::-;36866:4;36839:31;;:23;36854:7;36839:14;:23::i;:::-;:31;;;36831:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36945:1;36931:16;;:2;:16;;;;36923:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37001:39;37022:4;37028:2;37032:7;37001:20;:39::i;:::-;37105:29;37122:1;37126:7;37105:8;:29::i;:::-;37166:1;37147:9;:15;37157:4;37147:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37195:1;37178:9;:13;37188:2;37178:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37226:2;37207:7;:16;37215:7;37207:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37265:7;37261:2;37246:27;;37255:4;37246:27;;;;;;;;;;;;37286:38;37306:4;37312:2;37316:7;37286:19;:38::i;:::-;36707:625;;;:::o;7738:120::-;7282:8;:6;:8::i;:::-;7274:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7807:5:::1;7797:7;;:15;;;;;;;;;;;;;;;;;;7828:22;7837:12;:10;:12::i;:::-;7828:22;;;;;;:::i;:::-;;;;;;;;7738:120::o:0;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5349:191;;:::o;7479:118::-;7005:8;:6;:8::i;:::-;7004:9;6996:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7549:4:::1;7539:7;;:14;;;;;;;;;;;;;;;;;;7569:20;7576:12;:10;:12::i;:::-;7569:20;;;;;;:::i;:::-;;;;;;;;7479:118::o:0;34288:110::-;34364:26;34374:2;34378:7;34364:26;;;;;;;;;;;;:9;:26::i;:::-;34288:110;;:::o;37766:315::-;37921:8;37912:17;;:5;:17;;;;37904:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38008:8;37970:18;:25;37989:5;37970:25;;;;;;;;;;;;;;;:35;37996:8;37970:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38054:8;38032:41;;38047:5;38032:41;;;38064:8;38032:41;;;;;;:::i;:::-;;;;;;;;37766:315;;;:::o;32676:::-;32833:28;32843:4;32849:2;32853:7;32833:9;:28::i;:::-;32880:48;32903:4;32909:2;32913:7;32922:5;32880:22;:48::i;:::-;32872:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32676:315;;;;:::o;48011:125::-;48063:13;48089:39;;;;;;;;;;;;;;;;;;;48011:125;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;27545:305::-;27647:4;27699:25;27684:40;;;:11;:40;;;;:105;;;;27756:33;27741:48;;;:11;:48;;;;27684:105;:158;;;;27806:36;27830:11;27806:23;:36::i;:::-;27684:158;27664:178;;27545:305;;;:::o;50006:204::-;50157:45;50184:4;50190:2;50194:7;50157:26;:45::i;:::-;50006:204;;;:::o;40528:125::-;;;;:::o;34625:321::-;34755:18;34761:2;34765:7;34755:5;:18::i;:::-;34806:54;34837:1;34841:2;34845:7;34854:5;34806:22;:54::i;:::-;34784:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34625:321;;;:::o;38646:799::-;38801:4;38822:15;:2;:13;;;:15::i;:::-;38818:620;;;38874:2;38858:36;;;38895:12;:10;:12::i;:::-;38909:4;38915:7;38924:5;38858:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38854:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39117:1;39100:6;:13;:18;39096:272;;;39143:60;;;;;;;;;;:::i;:::-;;;;;;;;39096:272;39318:6;39312:13;39303:6;39299:2;39295:15;39288:38;38854:529;38991:41;;;38981:51;;;:6;:51;;;;38974:58;;;;;38818:620;39422:4;39415:11;;38646:799;;;;;;;:::o;19204:157::-;19289:4;19328:25;19313:40;;;:11;:40;;;;19306:47;;19204:157;;;:::o;43347:589::-;43491:45;43518:4;43524:2;43528:7;43491:26;:45::i;:::-;43569:1;43553:18;;:4;:18;;;43549:187;;;43588:40;43620:7;43588:31;:40::i;:::-;43549:187;;;43658:2;43650:10;;:4;:10;;;43646:90;;43677:47;43710:4;43716:7;43677:32;:47::i;:::-;43646:90;43549:187;43764:1;43750:16;;:2;:16;;;43746:183;;;43783:45;43820:7;43783:36;:45::i;:::-;43746:183;;;43856:4;43850:10;;:2;:10;;;43846:83;;43877:40;43905:2;43909:7;43877:27;:40::i;:::-;43846:83;43746:183;43347:589;;;:::o;35282:439::-;35376:1;35362:16;;:2;:16;;;;35354:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35435:16;35443:7;35435;:16::i;:::-;35434:17;35426:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35497:45;35526:1;35530:2;35534:7;35497:20;:45::i;:::-;35572:1;35555:9;:13;35565:2;35555:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35603:2;35584:7;:16;35592:7;35584:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35648:7;35644:2;35623:33;;35640:1;35623:33;;;;;;;;;;;;35669:44;35697:1;35701:2;35705:7;35669:19;:44::i;:::-;35282:439;;:::o;9098:326::-;9158:4;9415:1;9393:7;:19;;;:23;9386:30;;9098:326;;;:::o;40017:126::-;;;;:::o;44659:164::-;44763:10;:17;;;;44736:15;:24;44752:7;44736:24;;;;;;;;;;;:44;;;;44791:10;44807:7;44791:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44659:164;:::o;45450:988::-;45716:22;45766:1;45741:22;45758:4;45741:16;:22::i;:::-;:26;;;;:::i;:::-;45716:51;;45778:18;45799:17;:26;45817:7;45799:26;;;;;;;;;;;;45778:47;;45946:14;45932:10;:28;45928:328;;45977:19;45999:12;:18;46012:4;45999:18;;;;;;;;;;;;;;;:34;46018:14;45999:34;;;;;;;;;;;;45977:56;;46083:11;46050:12;:18;46063:4;46050:18;;;;;;;;;;;;;;;:30;46069:10;46050:30;;;;;;;;;;;:44;;;;46200:10;46167:17;:30;46185:11;46167:30;;;;;;;;;;;:43;;;;45928:328;;46352:17;:26;46370:7;46352:26;;;;;;;;;;;46345:33;;;46396:12;:18;46409:4;46396:18;;;;;;;;;;;;;;;:34;46415:14;46396:34;;;;;;;;;;;46389:41;;;45450:988;;;;:::o;46733:1079::-;46986:22;47031:1;47011:10;:17;;;;:21;;;;:::i;:::-;46986:46;;47043:18;47064:15;:24;47080:7;47064:24;;;;;;;;;;;;47043:45;;47415:19;47437:10;47448:14;47437:26;;;;;;;;;;;;;;;;;;;;;;;;47415:48;;47501:11;47476:10;47487;47476:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;47612:10;47581:15;:28;47597:11;47581:28;;;;;;;;;;;:41;;;;47753:15;:24;47769:7;47753:24;;;;;;;;;;;47746:31;;;47788:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46733:1079;;;;:::o;44237:221::-;44322:14;44339:20;44356:2;44339:16;:20::i;:::-;44322:37;;44397:7;44370:12;:16;44383:2;44370:16;;;;;;;;;;;;;;;:24;44387:6;44370:24;;;;;;;;;;;:34;;;;44444:6;44415:17;:26;44433:7;44415:26;;;;;;;;;;;:35;;;;44237:221;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1220:139::-;1266:5;1304:6;1291:20;1282:29;;1320:33;1347:5;1320:33;:::i;:::-;1272:87;;;;:::o;1365:262::-;1424:6;1473:2;1461:9;1452:7;1448:23;1444:32;1441:2;;;1489:1;1486;1479:12;1441:2;1532:1;1557:53;1602:7;1593:6;1582:9;1578:22;1557:53;:::i;:::-;1547:63;;1503:117;1431:196;;;;:::o;1633:407::-;1701:6;1709;1758:2;1746:9;1737:7;1733:23;1729:32;1726:2;;;1774:1;1771;1764:12;1726:2;1817:1;1842:53;1887:7;1878:6;1867:9;1863:22;1842:53;:::i;:::-;1832:63;;1788:117;1944:2;1970:53;2015:7;2006:6;1995:9;1991:22;1970:53;:::i;:::-;1960:63;;1915:118;1716:324;;;;;:::o;2046:552::-;2123:6;2131;2139;2188:2;2176:9;2167:7;2163:23;2159:32;2156:2;;;2204:1;2201;2194:12;2156:2;2247:1;2272:53;2317:7;2308:6;2297:9;2293:22;2272:53;:::i;:::-;2262:63;;2218:117;2374:2;2400:53;2445:7;2436:6;2425:9;2421:22;2400:53;:::i;:::-;2390:63;;2345:118;2502:2;2528:53;2573:7;2564:6;2553:9;2549:22;2528:53;:::i;:::-;2518:63;;2473:118;2146:452;;;;;:::o;2604:809::-;2699:6;2707;2715;2723;2772:3;2760:9;2751:7;2747:23;2743:33;2740:2;;;2789:1;2786;2779:12;2740:2;2832:1;2857:53;2902:7;2893:6;2882:9;2878:22;2857:53;:::i;:::-;2847:63;;2803:117;2959:2;2985:53;3030:7;3021:6;3010:9;3006:22;2985:53;:::i;:::-;2975:63;;2930:118;3087:2;3113:53;3158:7;3149:6;3138:9;3134:22;3113:53;:::i;:::-;3103:63;;3058:118;3243:2;3232:9;3228:18;3215:32;3274:18;3266:6;3263:30;3260:2;;;3306:1;3303;3296:12;3260:2;3334:62;3388:7;3379:6;3368:9;3364:22;3334:62;:::i;:::-;3324:72;;3186:220;2730:683;;;;;;;:::o;3419:401::-;3484:6;3492;3541:2;3529:9;3520:7;3516:23;3512:32;3509:2;;;3557:1;3554;3547:12;3509:2;3600:1;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3571:117;3727:2;3753:50;3795:7;3786:6;3775:9;3771:22;3753:50;:::i;:::-;3743:60;;3698:115;3499:321;;;;;:::o;3826:407::-;3894:6;3902;3951:2;3939:9;3930:7;3926:23;3922:32;3919:2;;;3967:1;3964;3957:12;3919:2;4010:1;4035:53;4080:7;4071:6;4060:9;4056:22;4035:53;:::i;:::-;4025:63;;3981:117;4137:2;4163:53;4208:7;4199:6;4188:9;4184:22;4163:53;:::i;:::-;4153:63;;4108:118;3909:324;;;;;:::o;4239:260::-;4297:6;4346:2;4334:9;4325:7;4321:23;4317:32;4314:2;;;4362:1;4359;4352:12;4314:2;4405:1;4430:52;4474:7;4465:6;4454:9;4450:22;4430:52;:::i;:::-;4420:62;;4376:116;4304:195;;;;:::o;4505:282::-;4574:6;4623:2;4611:9;4602:7;4598:23;4594:32;4591:2;;;4639:1;4636;4629:12;4591:2;4682:1;4707:63;4762:7;4753:6;4742:9;4738:22;4707:63;:::i;:::-;4697:73;;4653:127;4581:206;;;;:::o;4793:262::-;4852:6;4901:2;4889:9;4880:7;4876:23;4872:32;4869:2;;;4917:1;4914;4907:12;4869:2;4960:1;4985:53;5030:7;5021:6;5010:9;5006:22;4985:53;:::i;:::-;4975:63;;4931:117;4859:196;;;;:::o;5061:179::-;5130:10;5151:46;5193:3;5185:6;5151:46;:::i;:::-;5229:4;5224:3;5220:14;5206:28;;5141:99;;;;:::o;5246:118::-;5333:24;5351:5;5333:24;:::i;:::-;5328:3;5321:37;5311:53;;:::o;5400:732::-;5519:3;5548:54;5596:5;5548:54;:::i;:::-;5618:86;5697:6;5692:3;5618:86;:::i;:::-;5611:93;;5728:56;5778:5;5728:56;:::i;:::-;5807:7;5838:1;5823:284;5848:6;5845:1;5842:13;5823:284;;;5924:6;5918:13;5951:63;6010:3;5995:13;5951:63;:::i;:::-;5944:70;;6037:60;6090:6;6037:60;:::i;:::-;6027:70;;5883:224;5870:1;5867;5863:9;5858:14;;5823:284;;;5827:14;6123:3;6116:10;;5524:608;;;;;;;:::o;6138:109::-;6219:21;6234:5;6219:21;:::i;:::-;6214:3;6207:34;6197:50;;:::o;6253:360::-;6339:3;6367:38;6399:5;6367:38;:::i;:::-;6421:70;6484:6;6479:3;6421:70;:::i;:::-;6414:77;;6500:52;6545:6;6540:3;6533:4;6526:5;6522:16;6500:52;:::i;:::-;6577:29;6599:6;6577:29;:::i;:::-;6572:3;6568:39;6561:46;;6343:270;;;;;:::o;6619:364::-;6707:3;6735:39;6768:5;6735:39;:::i;:::-;6790:71;6854:6;6849:3;6790:71;:::i;:::-;6783:78;;6870:52;6915:6;6910:3;6903:4;6896:5;6892:16;6870:52;:::i;:::-;6947:29;6969:6;6947:29;:::i;:::-;6942:3;6938:39;6931:46;;6711:272;;;;;:::o;6989:377::-;7095:3;7123:39;7156:5;7123:39;:::i;:::-;7178:89;7260:6;7255:3;7178:89;:::i;:::-;7171:96;;7276:52;7321:6;7316:3;7309:4;7302:5;7298:16;7276:52;:::i;:::-;7353:6;7348:3;7344:16;7337:23;;7099:267;;;;;:::o;7372:366::-;7514:3;7535:67;7599:2;7594:3;7535:67;:::i;:::-;7528:74;;7611:93;7700:3;7611:93;:::i;:::-;7729:2;7724:3;7720:12;7713:19;;7518:220;;;:::o;7744:366::-;7886:3;7907:67;7971:2;7966:3;7907:67;:::i;:::-;7900:74;;7983:93;8072:3;7983:93;:::i;:::-;8101:2;8096:3;8092:12;8085:19;;7890:220;;;:::o;8116:366::-;8258:3;8279:67;8343:2;8338:3;8279:67;:::i;:::-;8272:74;;8355:93;8444:3;8355:93;:::i;:::-;8473:2;8468:3;8464:12;8457:19;;8262:220;;;:::o;8488:366::-;8630:3;8651:67;8715:2;8710:3;8651:67;:::i;:::-;8644:74;;8727:93;8816:3;8727:93;:::i;:::-;8845:2;8840:3;8836:12;8829:19;;8634:220;;;:::o;8860:366::-;9002:3;9023:67;9087:2;9082:3;9023:67;:::i;:::-;9016:74;;9099:93;9188:3;9099:93;:::i;:::-;9217:2;9212:3;9208:12;9201:19;;9006:220;;;:::o;9232:366::-;9374:3;9395:67;9459:2;9454:3;9395:67;:::i;:::-;9388:74;;9471:93;9560:3;9471:93;:::i;:::-;9589:2;9584:3;9580:12;9573:19;;9378:220;;;:::o;9604:366::-;9746:3;9767:67;9831:2;9826:3;9767:67;:::i;:::-;9760:74;;9843:93;9932:3;9843:93;:::i;:::-;9961:2;9956:3;9952:12;9945:19;;9750:220;;;:::o;9976:366::-;10118:3;10139:67;10203:2;10198:3;10139:67;:::i;:::-;10132:74;;10215:93;10304:3;10215:93;:::i;:::-;10333:2;10328:3;10324:12;10317:19;;10122:220;;;:::o;10348:366::-;10490:3;10511:67;10575:2;10570:3;10511:67;:::i;:::-;10504:74;;10587:93;10676:3;10587:93;:::i;:::-;10705:2;10700:3;10696:12;10689:19;;10494:220;;;:::o;10720:366::-;10862:3;10883:67;10947:2;10942:3;10883:67;:::i;:::-;10876:74;;10959:93;11048:3;10959:93;:::i;:::-;11077:2;11072:3;11068:12;11061:19;;10866:220;;;:::o;11092:366::-;11234:3;11255:67;11319:2;11314:3;11255:67;:::i;:::-;11248:74;;11331:93;11420:3;11331:93;:::i;:::-;11449:2;11444:3;11440:12;11433:19;;11238:220;;;:::o;11464:366::-;11606:3;11627:67;11691:2;11686:3;11627:67;:::i;:::-;11620:74;;11703:93;11792:3;11703:93;:::i;:::-;11821:2;11816:3;11812:12;11805:19;;11610:220;;;:::o;11836:366::-;11978:3;11999:67;12063:2;12058:3;11999:67;:::i;:::-;11992:74;;12075:93;12164:3;12075:93;:::i;:::-;12193:2;12188:3;12184:12;12177:19;;11982:220;;;:::o;12208:366::-;12350:3;12371:67;12435:2;12430:3;12371:67;:::i;:::-;12364:74;;12447:93;12536:3;12447:93;:::i;:::-;12565:2;12560:3;12556:12;12549:19;;12354:220;;;:::o;12580:366::-;12722:3;12743:67;12807:2;12802:3;12743:67;:::i;:::-;12736:74;;12819:93;12908:3;12819:93;:::i;:::-;12937:2;12932:3;12928:12;12921:19;;12726:220;;;:::o;12952:366::-;13094:3;13115:67;13179:2;13174:3;13115:67;:::i;:::-;13108:74;;13191:93;13280:3;13191:93;:::i;:::-;13309:2;13304:3;13300:12;13293:19;;13098:220;;;:::o;13324:366::-;13466:3;13487:67;13551:2;13546:3;13487:67;:::i;:::-;13480:74;;13563:93;13652:3;13563:93;:::i;:::-;13681:2;13676:3;13672:12;13665:19;;13470:220;;;:::o;13696:366::-;13838:3;13859:67;13923:2;13918:3;13859:67;:::i;:::-;13852:74;;13935:93;14024:3;13935:93;:::i;:::-;14053:2;14048:3;14044:12;14037:19;;13842:220;;;:::o;14068:366::-;14210:3;14231:67;14295:2;14290:3;14231:67;:::i;:::-;14224:74;;14307:93;14396:3;14307:93;:::i;:::-;14425:2;14420:3;14416:12;14409:19;;14214:220;;;:::o;14440:366::-;14582:3;14603:67;14667:2;14662:3;14603:67;:::i;:::-;14596:74;;14679:93;14768:3;14679:93;:::i;:::-;14797:2;14792:3;14788:12;14781:19;;14586:220;;;:::o;14812:366::-;14954:3;14975:67;15039:2;15034:3;14975:67;:::i;:::-;14968:74;;15051:93;15140:3;15051:93;:::i;:::-;15169:2;15164:3;15160:12;15153:19;;14958:220;;;:::o;15184:366::-;15326:3;15347:67;15411:2;15406:3;15347:67;:::i;:::-;15340:74;;15423:93;15512:3;15423:93;:::i;:::-;15541:2;15536:3;15532:12;15525:19;;15330:220;;;:::o;15556:366::-;15698:3;15719:67;15783:2;15778:3;15719:67;:::i;:::-;15712:74;;15795:93;15884:3;15795:93;:::i;:::-;15913:2;15908:3;15904:12;15897:19;;15702:220;;;:::o;15928:366::-;16070:3;16091:67;16155:2;16150:3;16091:67;:::i;:::-;16084:74;;16167:93;16256:3;16167:93;:::i;:::-;16285:2;16280:3;16276:12;16269:19;;16074:220;;;:::o;16300:366::-;16442:3;16463:67;16527:2;16522:3;16463:67;:::i;:::-;16456:74;;16539:93;16628:3;16539:93;:::i;:::-;16657:2;16652:3;16648:12;16641:19;;16446:220;;;:::o;16672:108::-;16749:24;16767:5;16749:24;:::i;:::-;16744:3;16737:37;16727:53;;:::o;16786:118::-;16873:24;16891:5;16873:24;:::i;:::-;16868:3;16861:37;16851:53;;:::o;16910:435::-;17090:3;17112:95;17203:3;17194:6;17112:95;:::i;:::-;17105:102;;17224:95;17315:3;17306:6;17224:95;:::i;:::-;17217:102;;17336:3;17329:10;;17094:251;;;;;:::o;17351:222::-;17444:4;17482:2;17471:9;17467:18;17459:26;;17495:71;17563:1;17552:9;17548:17;17539:6;17495:71;:::i;:::-;17449:124;;;;:::o;17579:640::-;17774:4;17812:3;17801:9;17797:19;17789:27;;17826:71;17894:1;17883:9;17879:17;17870:6;17826:71;:::i;:::-;17907:72;17975:2;17964:9;17960:18;17951:6;17907:72;:::i;:::-;17989;18057:2;18046:9;18042:18;18033:6;17989:72;:::i;:::-;18108:9;18102:4;18098:20;18093:2;18082:9;18078:18;18071:48;18136:76;18207:4;18198:6;18136:76;:::i;:::-;18128:84;;17779:440;;;;;;;:::o;18225:373::-;18368:4;18406:2;18395:9;18391:18;18383:26;;18455:9;18449:4;18445:20;18441:1;18430:9;18426:17;18419:47;18483:108;18586:4;18577:6;18483:108;:::i;:::-;18475:116;;18373:225;;;;:::o;18604:210::-;18691:4;18729:2;18718:9;18714:18;18706:26;;18742:65;18804:1;18793:9;18789:17;18780:6;18742:65;:::i;:::-;18696:118;;;;:::o;18820:313::-;18933:4;18971:2;18960:9;18956:18;18948:26;;19020:9;19014:4;19010:20;19006:1;18995:9;18991:17;18984:47;19048:78;19121:4;19112:6;19048:78;:::i;:::-;19040:86;;18938:195;;;;:::o;19139:419::-;19305:4;19343:2;19332:9;19328:18;19320:26;;19392:9;19386:4;19382:20;19378:1;19367:9;19363:17;19356:47;19420:131;19546:4;19420:131;:::i;:::-;19412:139;;19310:248;;;:::o;19564:419::-;19730:4;19768:2;19757:9;19753:18;19745:26;;19817:9;19811:4;19807:20;19803:1;19792:9;19788:17;19781:47;19845:131;19971:4;19845:131;:::i;:::-;19837:139;;19735:248;;;:::o;19989:419::-;20155:4;20193:2;20182:9;20178:18;20170:26;;20242:9;20236:4;20232:20;20228:1;20217:9;20213:17;20206:47;20270:131;20396:4;20270:131;:::i;:::-;20262:139;;20160:248;;;:::o;20414:419::-;20580:4;20618:2;20607:9;20603:18;20595:26;;20667:9;20661:4;20657:20;20653:1;20642:9;20638:17;20631:47;20695:131;20821:4;20695:131;:::i;:::-;20687:139;;20585:248;;;:::o;20839:419::-;21005:4;21043:2;21032:9;21028:18;21020:26;;21092:9;21086:4;21082:20;21078:1;21067:9;21063:17;21056:47;21120:131;21246:4;21120:131;:::i;:::-;21112:139;;21010:248;;;:::o;21264:419::-;21430:4;21468:2;21457:9;21453:18;21445:26;;21517:9;21511:4;21507:20;21503:1;21492:9;21488:17;21481:47;21545:131;21671:4;21545:131;:::i;:::-;21537:139;;21435:248;;;:::o;21689:419::-;21855:4;21893:2;21882:9;21878:18;21870:26;;21942:9;21936:4;21932:20;21928:1;21917:9;21913:17;21906:47;21970:131;22096:4;21970:131;:::i;:::-;21962:139;;21860:248;;;:::o;22114:419::-;22280:4;22318:2;22307:9;22303:18;22295:26;;22367:9;22361:4;22357:20;22353:1;22342:9;22338:17;22331:47;22395:131;22521:4;22395:131;:::i;:::-;22387:139;;22285:248;;;:::o;22539:419::-;22705:4;22743:2;22732:9;22728:18;22720:26;;22792:9;22786:4;22782:20;22778:1;22767:9;22763:17;22756:47;22820:131;22946:4;22820:131;:::i;:::-;22812:139;;22710:248;;;:::o;22964:419::-;23130:4;23168:2;23157:9;23153:18;23145:26;;23217:9;23211:4;23207:20;23203:1;23192:9;23188:17;23181:47;23245:131;23371:4;23245:131;:::i;:::-;23237:139;;23135:248;;;:::o;23389:419::-;23555:4;23593:2;23582:9;23578:18;23570:26;;23642:9;23636:4;23632:20;23628:1;23617:9;23613:17;23606:47;23670:131;23796:4;23670:131;:::i;:::-;23662:139;;23560:248;;;:::o;23814:419::-;23980:4;24018:2;24007:9;24003:18;23995:26;;24067:9;24061:4;24057:20;24053:1;24042:9;24038:17;24031:47;24095:131;24221:4;24095:131;:::i;:::-;24087:139;;23985:248;;;:::o;24239:419::-;24405:4;24443:2;24432:9;24428:18;24420:26;;24492:9;24486:4;24482:20;24478:1;24467:9;24463:17;24456:47;24520:131;24646:4;24520:131;:::i;:::-;24512:139;;24410:248;;;:::o;24664:419::-;24830:4;24868:2;24857:9;24853:18;24845:26;;24917:9;24911:4;24907:20;24903:1;24892:9;24888:17;24881:47;24945:131;25071:4;24945:131;:::i;:::-;24937:139;;24835:248;;;:::o;25089:419::-;25255:4;25293:2;25282:9;25278:18;25270:26;;25342:9;25336:4;25332:20;25328:1;25317:9;25313:17;25306:47;25370:131;25496:4;25370:131;:::i;:::-;25362:139;;25260:248;;;:::o;25514:419::-;25680:4;25718:2;25707:9;25703:18;25695:26;;25767:9;25761:4;25757:20;25753:1;25742:9;25738:17;25731:47;25795:131;25921:4;25795:131;:::i;:::-;25787:139;;25685:248;;;:::o;25939:419::-;26105:4;26143:2;26132:9;26128:18;26120:26;;26192:9;26186:4;26182:20;26178:1;26167:9;26163:17;26156:47;26220:131;26346:4;26220:131;:::i;:::-;26212:139;;26110:248;;;:::o;26364:419::-;26530:4;26568:2;26557:9;26553:18;26545:26;;26617:9;26611:4;26607:20;26603:1;26592:9;26588:17;26581:47;26645:131;26771:4;26645:131;:::i;:::-;26637:139;;26535:248;;;:::o;26789:419::-;26955:4;26993:2;26982:9;26978:18;26970:26;;27042:9;27036:4;27032:20;27028:1;27017:9;27013:17;27006:47;27070:131;27196:4;27070:131;:::i;:::-;27062:139;;26960:248;;;:::o;27214:419::-;27380:4;27418:2;27407:9;27403:18;27395:26;;27467:9;27461:4;27457:20;27453:1;27442:9;27438:17;27431:47;27495:131;27621:4;27495:131;:::i;:::-;27487:139;;27385:248;;;:::o;27639:419::-;27805:4;27843:2;27832:9;27828:18;27820:26;;27892:9;27886:4;27882:20;27878:1;27867:9;27863:17;27856:47;27920:131;28046:4;27920:131;:::i;:::-;27912:139;;27810:248;;;:::o;28064:419::-;28230:4;28268:2;28257:9;28253:18;28245:26;;28317:9;28311:4;28307:20;28303:1;28292:9;28288:17;28281:47;28345:131;28471:4;28345:131;:::i;:::-;28337:139;;28235:248;;;:::o;28489:419::-;28655:4;28693:2;28682:9;28678:18;28670:26;;28742:9;28736:4;28732:20;28728:1;28717:9;28713:17;28706:47;28770:131;28896:4;28770:131;:::i;:::-;28762:139;;28660:248;;;:::o;28914:419::-;29080:4;29118:2;29107:9;29103:18;29095:26;;29167:9;29161:4;29157:20;29153:1;29142:9;29138:17;29131:47;29195:131;29321:4;29195:131;:::i;:::-;29187:139;;29085:248;;;:::o;29339:419::-;29505:4;29543:2;29532:9;29528:18;29520:26;;29592:9;29586:4;29582:20;29578:1;29567:9;29563:17;29556:47;29620:131;29746:4;29620:131;:::i;:::-;29612:139;;29510:248;;;:::o;29764:222::-;29857:4;29895:2;29884:9;29880:18;29872:26;;29908:71;29976:1;29965:9;29961:17;29952:6;29908:71;:::i;:::-;29862:124;;;;:::o;29992:129::-;30026:6;30053:20;;:::i;:::-;30043:30;;30082:33;30110:4;30102:6;30082:33;:::i;:::-;30033:88;;;:::o;30127:75::-;30160:6;30193:2;30187:9;30177:19;;30167:35;:::o;30208:307::-;30269:4;30359:18;30351:6;30348:30;30345:2;;;30381:18;;:::i;:::-;30345:2;30419:29;30441:6;30419:29;:::i;:::-;30411:37;;30503:4;30497;30493:15;30485:23;;30274:241;;;:::o;30521:132::-;30588:4;30611:3;30603:11;;30641:4;30636:3;30632:14;30624:22;;30593:60;;;:::o;30659:114::-;30726:6;30760:5;30754:12;30744:22;;30733:40;;;:::o;30779:98::-;30830:6;30864:5;30858:12;30848:22;;30837:40;;;:::o;30883:99::-;30935:6;30969:5;30963:12;30953:22;;30942:40;;;:::o;30988:113::-;31058:4;31090;31085:3;31081:14;31073:22;;31063:38;;;:::o;31107:184::-;31206:11;31240:6;31235:3;31228:19;31280:4;31275:3;31271:14;31256:29;;31218:73;;;;:::o;31297:168::-;31380:11;31414:6;31409:3;31402:19;31454:4;31449:3;31445:14;31430:29;;31392:73;;;;:::o;31471:169::-;31555:11;31589:6;31584:3;31577:19;31629:4;31624:3;31620:14;31605:29;;31567:73;;;;:::o;31646:148::-;31748:11;31785:3;31770:18;;31760:34;;;;:::o;31800:305::-;31840:3;31859:20;31877:1;31859:20;:::i;:::-;31854:25;;31893:20;31911:1;31893:20;:::i;:::-;31888:25;;32047:1;31979:66;31975:74;31972:1;31969:81;31966:2;;;32053:18;;:::i;:::-;31966:2;32097:1;32094;32090:9;32083:16;;31844:261;;;;:::o;32111:185::-;32151:1;32168:20;32186:1;32168:20;:::i;:::-;32163:25;;32202:20;32220:1;32202:20;:::i;:::-;32197:25;;32241:1;32231:2;;32246:18;;:::i;:::-;32231:2;32288:1;32285;32281:9;32276:14;;32153:143;;;;:::o;32302:348::-;32342:7;32365:20;32383:1;32365:20;:::i;:::-;32360:25;;32399:20;32417:1;32399:20;:::i;:::-;32394:25;;32587:1;32519:66;32515:74;32512:1;32509:81;32504:1;32497:9;32490:17;32486:105;32483:2;;;32594:18;;:::i;:::-;32483:2;32642:1;32639;32635:9;32624:20;;32350:300;;;;:::o;32656:191::-;32696:4;32716:20;32734:1;32716:20;:::i;:::-;32711:25;;32750:20;32768:1;32750:20;:::i;:::-;32745:25;;32789:1;32786;32783:8;32780:2;;;32794:18;;:::i;:::-;32780:2;32839:1;32836;32832:9;32824:17;;32701:146;;;;:::o;32853:96::-;32890:7;32919:24;32937:5;32919:24;:::i;:::-;32908:35;;32898:51;;;:::o;32955:90::-;32989:7;33032:5;33025:13;33018:21;33007:32;;32997:48;;;:::o;33051:149::-;33087:7;33127:66;33120:5;33116:78;33105:89;;33095:105;;;:::o;33206:126::-;33243:7;33283:42;33276:5;33272:54;33261:65;;33251:81;;;:::o;33338:77::-;33375:7;33404:5;33393:16;;33383:32;;;:::o;33421:154::-;33505:6;33500:3;33495;33482:30;33567:1;33558:6;33553:3;33549:16;33542:27;33472:103;;;:::o;33581:307::-;33649:1;33659:113;33673:6;33670:1;33667:13;33659:113;;;33758:1;33753:3;33749:11;33743:18;33739:1;33734:3;33730:11;33723:39;33695:2;33692:1;33688:10;33683:15;;33659:113;;;33790:6;33787:1;33784:13;33781:2;;;33870:1;33861:6;33856:3;33852:16;33845:27;33781:2;33630:258;;;;:::o;33894:320::-;33938:6;33975:1;33969:4;33965:12;33955:22;;34022:1;34016:4;34012:12;34043:18;34033:2;;34099:4;34091:6;34087:17;34077:27;;34033:2;34161;34153:6;34150:14;34130:18;34127:38;34124:2;;;34180:18;;:::i;:::-;34124:2;33945:269;;;;:::o;34220:281::-;34303:27;34325:4;34303:27;:::i;:::-;34295:6;34291:40;34433:6;34421:10;34418:22;34397:18;34385:10;34382:34;34379:62;34376:2;;;34444:18;;:::i;:::-;34376:2;34484:10;34480:2;34473:22;34263:238;;;:::o;34507:233::-;34546:3;34569:24;34587:5;34569:24;:::i;:::-;34560:33;;34615:66;34608:5;34605:77;34602:2;;;34685:18;;:::i;:::-;34602:2;34732:1;34725:5;34721:13;34714:20;;34550:190;;;:::o;34746:176::-;34778:1;34795:20;34813:1;34795:20;:::i;:::-;34790:25;;34829:20;34847:1;34829:20;:::i;:::-;34824:25;;34868:1;34858:2;;34873:18;;:::i;:::-;34858:2;34914:1;34911;34907:9;34902:14;;34780:142;;;;:::o;34928:180::-;34976:77;34973:1;34966:88;35073:4;35070:1;35063:15;35097:4;35094:1;35087:15;35114:180;35162:77;35159:1;35152:88;35259:4;35256:1;35249:15;35283:4;35280:1;35273:15;35300:180;35348:77;35345:1;35338:88;35445:4;35442:1;35435:15;35469:4;35466:1;35459:15;35486:180;35534:77;35531:1;35524:88;35631:4;35628:1;35621:15;35655:4;35652:1;35645:15;35672:102;35713:6;35764:2;35760:7;35755:2;35748:5;35744:14;35740:28;35730:38;;35720:54;;;:::o;35780:161::-;35920:13;35916:1;35908:6;35904:14;35897:37;35886:55;:::o;35947:172::-;36087:24;36083:1;36075:6;36071:14;36064:48;36053:66;:::o;36125:170::-;36265:22;36261:1;36253:6;36249:14;36242:46;36231:64;:::o;36301:230::-;36441:34;36437:1;36429:6;36425:14;36418:58;36510:13;36505:2;36497:6;36493:15;36486:38;36407:124;:::o;36537:237::-;36677:34;36673:1;36665:6;36661:14;36654:58;36746:20;36741:2;36733:6;36729:15;36722:45;36643:131;:::o;36780:225::-;36920:34;36916:1;36908:6;36904:14;36897:58;36989:8;36984:2;36976:6;36972:15;36965:33;36886:119;:::o;37011:224::-;37151:34;37147:1;37139:6;37135:14;37128:58;37220:7;37215:2;37207:6;37203:15;37196:32;37117:118;:::o;37241:176::-;37381:28;37377:1;37369:6;37365:14;37358:52;37347:70;:::o;37423:178::-;37563:30;37559:1;37551:6;37547:14;37540:54;37529:72;:::o;37607:223::-;37747:34;37743:1;37735:6;37731:14;37724:58;37816:6;37811:2;37803:6;37799:15;37792:31;37713:117;:::o;37836:175::-;37976:27;37972:1;37964:6;37960:14;37953:51;37942:69;:::o;38017:231::-;38157:34;38153:1;38145:6;38141:14;38134:58;38226:14;38221:2;38213:6;38209:15;38202:39;38123:125;:::o;38254:166::-;38394:18;38390:1;38382:6;38378:14;38371:42;38360:60;:::o;38426:243::-;38566:34;38562:1;38554:6;38550:14;38543:58;38635:26;38630:2;38622:6;38618:15;38611:51;38532:137;:::o;38675:229::-;38815:34;38811:1;38803:6;38799:14;38792:58;38884:12;38879:2;38871:6;38867:15;38860:37;38781:123;:::o;38910:228::-;39050:34;39046:1;39038:6;39034:14;39027:58;39119:11;39114:2;39106:6;39102:15;39095:36;39016:122;:::o;39144:182::-;39284:34;39280:1;39272:6;39268:14;39261:58;39250:76;:::o;39332:231::-;39472:34;39468:1;39460:6;39456:14;39449:58;39541:14;39536:2;39528:6;39524:15;39517:39;39438:125;:::o;39569:182::-;39709:34;39705:1;39697:6;39693:14;39686:58;39675:76;:::o;39757:234::-;39897:34;39893:1;39885:6;39881:14;39874:58;39966:17;39961:2;39953:6;39949:15;39942:42;39863:128;:::o;39997:172::-;40137:24;40133:1;40125:6;40121:14;40114:48;40103:66;:::o;40175:220::-;40315:34;40311:1;40303:6;40299:14;40292:58;40384:3;40379:2;40371:6;40367:15;40360:28;40281:114;:::o;40401:236::-;40541:34;40537:1;40529:6;40525:14;40518:58;40610:19;40605:2;40597:6;40593:15;40586:44;40507:130;:::o;40643:248::-;40783:34;40779:1;40771:6;40767:14;40760:58;40852:31;40847:2;40839:6;40835:15;40828:56;40749:142;:::o;40897:231::-;41037:34;41033:1;41025:6;41021:14;41014:58;41106:14;41101:2;41093:6;41089:15;41082:39;41003:125;:::o;41134:122::-;41207:24;41225:5;41207:24;:::i;:::-;41200:5;41197:35;41187:2;;41246:1;41243;41236:12;41187:2;41177:79;:::o;41262:116::-;41332:21;41347:5;41332:21;:::i;:::-;41325:5;41322:32;41312:2;;41368:1;41365;41358:12;41312:2;41302:76;:::o;41384:120::-;41456:23;41473:5;41456:23;:::i;:::-;41449:5;41446:34;41436:2;;41494:1;41491;41484:12;41436:2;41426:78;:::o;41510:122::-;41583:24;41601:5;41583:24;:::i;:::-;41576:5;41573:35;41563:2;;41622:1;41619;41612:12;41563:2;41553:79;:::o
Swarm Source
ipfs://598e5bd1422311da548bed30333bfc0fc1be8173b044491cc619a81992afe7ab
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.