Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
777 MM
Holders
452
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaMaid
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-07 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // 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/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 v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @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 v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @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.5.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 overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _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 || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _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: MetaMaid.sol pragma solidity >= 0.7.0 < 0.9.0; contract MetaMaid is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; // URIs string public uriPrefix = "ipfs://QmUZowxsW1mLEy6KfpbnexH5hH2ytCeLaZQDjjbwvaSF13/"; string public uriSuffix = ".json"; string public hiddenMetadataUri; // Costs uint256 public presaleCost = 0.04 ether; uint256 public publicsaleCost = 0.06 ether; // Supplies uint256 public maxSupply = 777; uint256 public maxSupplyLimit = 777; // Per Address & TX Limits uint256 public nftPresalePerAddressLimit = 3; uint256 public nftPublicsalePerAddressLimit = 10; uint256 public maxMintAmountPerTx = 3; // Stats bool public paused = false; bool public presale = true; bool public onlyWhitelisted = true; bool public revealed = false; // Whitelist Addresses mapping(address => bool) public whitelistedAddressesList; // Minted Balances mapping(address => uint256) public addressPresaleMintedBalance; mapping(address => uint256) public addressPublicsaleMintedBalance; // Constructor constructor() ERC721("Meta Maid", "MM") { setHiddenMetadataUri("ipfs://QmY9ok8dQWuBtoqt5WLhWnuArQZKoTbX35faH6UZjNvxr7/"); } // Mint Compliance modifier mintCompliance(uint256 _mintAmount) { if(presale == true) { if(onlyWhitelisted == true) { require(isInWhiteList(msg.sender), "MSG: User is not whitelisted"); } uint256 ownerMintedCount = addressPresaleMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPresalePerAddressLimit, "MSG: Max NFT per address exceeded for presale"); } else { uint256 ownerMintedCount = addressPublicsaleMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPublicsalePerAddressLimit, "MSG: Max NFT per address exceeded for publicsale"); } require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "MSG: Invalid mint amount"); require(supply.current() + _mintAmount <= maxSupplyLimit, "MSG: Max supply exceeded"); _; } // Total Supply function totalSupply() public view returns (uint256) { return supply.current(); } // Mint function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "MSG: The contract is paused"); if(presale == true) { require(msg.value >= presaleCost * _mintAmount, "MSG: Insufficient funds"); } else { require(msg.value >= publicsaleCost * _mintAmount, "MSG: Insufficient funds"); } _mintLoop(msg.sender, _mintAmount); withdraw(); } // Mint Functions function ownerMint(uint256 _mintAmount) public onlyOwner { require(!paused, "MSG: The contract is paused"); _mintLoop(msg.sender, _mintAmount); } function ownerMintSpecific(uint256 _tokenId) public onlyOwner { require(!paused, "MSG: The contract is paused"); _safeMint(msg.sender, _tokenId); if(presale == true) { addressPublicsaleMintedBalance[msg.sender]++; } else { addressPublicsaleMintedBalance[msg.sender]++; } } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } // Wallet Of Owner function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } // Token URI function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "MSG: URI query for nonexistent token"); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } // Presale Cost function setPresaleCost(uint256 _cost) public onlyOwner { presaleCost = _cost; } // Publicsale Cost function setPublicsaleCost(uint256 _cost) public onlyOwner { publicsaleCost = _cost; } // Set NFT Publicsale Per Address Limit function setNFTPublicsalePerAddressLimit(uint256 _cost) public onlyOwner { nftPublicsalePerAddressLimit = _cost; } // Set NFT Presale Per Address Limit function setNFTPresalePerAddressLimit(uint256 _cost) public onlyOwner { nftPresalePerAddressLimit = _cost; } // Set URI Prefix function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } // Set URI Suffix function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } // Set Hidden Metadata URI function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } // Set Paused function setPaused(bool _state) public onlyOwner { paused = _state; } // Set Presale function setPresale(bool _state) public onlyOwner { presale = _state; } // Set Revealed function setRevealed(bool _state) public onlyOwner { revealed = _state; } // Withdraw function withdraw() public payable { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } // Mint Loop function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); if(presale == true) { addressPresaleMintedBalance[msg.sender]++; } else { addressPublicsaleMintedBalance[msg.sender]++; } } } // Base URI function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } // Set Only Whitelisted function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } // Whitelist Functions function addToWhiteList(address _addr) public onlyOwner { whitelistedAddressesList[_addr] = true; } function addArrayToWhiteList(address[] memory _addrs) public onlyOwner { for (uint256 i = 0;i< _addrs.length; i++) { whitelistedAddressesList[_addrs[i]] = true; } } function removeFromWhiteList(address _addr) public onlyOwner { whitelistedAddressesList[_addr] = false; } function isInWhiteList(address _addr) public view returns (bool) { return whitelistedAddressesList[_addr] || _addr == owner(); } }
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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"addArrayToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressPresaleMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressPublicsaleMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isInWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPresalePerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPublicsalePerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerMintSpecific","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeFromWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setNFTPresalePerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setNFTPublicsalePerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPublicsaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"_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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddressesList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180606001604052806036815260200162005ba6603691396008908051906020019062000035929190620003c2565b506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000083929190620003c2565b50668e1bc9bf040000600b5566d529ae9e860000600c55610309600d55610309600e556003600f55600a60105560036011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055506000601260036101000a81548160ff0219169083151502179055503480156200012e57600080fd5b506040518060400160405280600981526020017f4d657461204d61696400000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d4d0000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001b3929190620003c2565b508060019080519060200190620001cc929190620003c2565b505050620001ef620001e36200021f60201b60201c565b6200022760201b60201c565b6200021960405180606001604052806036815260200162005b7060369139620002ed60201b60201c565b6200055a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002fd6200021f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003236200039860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003739062000499565b60405180910390fd5b80600a908051906020019062000394929190620003c2565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003d090620004cc565b90600052602060002090601f016020900481019282620003f4576000855562000440565b82601f106200040f57805160ff191683800117855562000440565b8280016001018555821562000440579182015b828111156200043f57825182559160200191906001019062000422565b5b5090506200044f919062000453565b5090565b5b808211156200046e57600081600090555060010162000454565b5090565b600062000481602083620004bb565b91506200048e8262000531565b602082019050919050565b60006020820190508181036000830152620004b48162000472565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004e557607f821691505b60208210811415620004fc57620004fb62000502565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615606806200056a6000396000f3fe6080604052600436106103505760003560e01c80638da5cb5b116101c6578063c54e73e3116100f7578063eb95416011610095578063f2fde38b1161006f578063f2fde38b14610c18578063f9d38e9714610c41578063fa65b59214610c7e578063fdea8e0b14610cbb57610350565b8063eb95416014610b9b578063efbd73f414610bc6578063f19e75d414610bef57610350565b8063e08823c5116100d1578063e08823c514610ae3578063e0a8085314610b0c578063e9058c3714610b35578063e985e9c514610b5e57610350565b8063c54e73e314610a52578063c87b56dd14610a7b578063d5abeb0114610ab857610350565b8063a0712d6811610164578063ae1373071161013e578063ae137307146109ac578063b88d4fde146109d5578063b8d988a2146109fe578063c243c6c114610a2957610350565b8063a0712d681461093c578063a22cb46514610958578063a45ba8e71461098157610350565b806394354fd0116101a057806394354fd01461087e57806395d89b41146108a957806396bfc229146108d45780639c70b5121461091157610350565b80638da5cb5b146107ff5780638fdcf9421461082a57806392829d741461085357610350565b806342842e0e116102a057806362b99ad41161023e5780636f636e8b116102185780636f636e8b1461075757806370a0823114610782578063715018a6146107bf5780637ec4a659146107d657610350565b806362b99ad4146106c65780636352211e146106f15780636905b1841461072e57610350565b80634fdd43cb1161027a5780634fdd43cb1461061c57806351830227146106455780635503a0e8146106705780635c975abb1461069b57610350565b806342842e0e1461058d578063438b6300146105b657806347ee0394146105f357610350565b806316ba10e01161030d57806323b872dd116102e757806323b872dd146105065780632a23d07d1461052f5780633c9527641461055a5780633ccfd60b1461058357610350565b806316ba10e01461048957806316c38b3c146104b257806318160ddd146104db57610350565b806301bf66481461035557806301ffc9a71461037e57806306fdde03146103bb57806307b9f56d146103e6578063081812fc14610423578063095ea7b314610460575b600080fd5b34801561036157600080fd5b5061037c60048036038101906103779190613e36565b610ce6565b005b34801561038a57600080fd5b506103a560048036038101906103a0919061406f565b610dbd565b6040516103b2919061476a565b60405180910390f35b3480156103c757600080fd5b506103d0610e9f565b6040516103dd9190614785565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613e36565b610f31565b60405161041a9190614a87565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190614112565b610f49565b60405161045791906146e1565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613fb9565b610fce565b005b34801561049557600080fd5b506104b060048036038101906104ab91906140c9565b6110e6565b005b3480156104be57600080fd5b506104d960048036038101906104d49190614042565b61117c565b005b3480156104e757600080fd5b506104f0611215565b6040516104fd9190614a87565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613ea3565b611226565b005b34801561053b57600080fd5b50610544611286565b6040516105519190614a87565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614042565b61128c565b005b61058b611325565b005b34801561059957600080fd5b506105b460048036038101906105af9190613ea3565b6113a5565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e36565b6113c5565b6040516105ea9190614748565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613e36565b6114d0565b005b34801561062857600080fd5b50610643600480360381019061063e91906140c9565b6115a7565b005b34801561065157600080fd5b5061065a61163d565b604051610667919061476a565b60405180910390f35b34801561067c57600080fd5b50610685611650565b6040516106929190614785565b60405180910390f35b3480156106a757600080fd5b506106b06116de565b6040516106bd919061476a565b60405180910390f35b3480156106d257600080fd5b506106db6116f1565b6040516106e89190614785565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190614112565b61177f565b60405161072591906146e1565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614112565b611831565b005b34801561076357600080fd5b5061076c6118b7565b6040516107799190614a87565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613e36565b6118bd565b6040516107b69190614a87565b60405180910390f35b3480156107cb57600080fd5b506107d4611975565b005b3480156107e257600080fd5b506107fd60048036038101906107f891906140c9565b6119fd565b005b34801561080b57600080fd5b50610814611a93565b60405161082191906146e1565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c9190614112565b611abd565b005b34801561085f57600080fd5b50610868611b43565b6040516108759190614a87565b60405180910390f35b34801561088a57600080fd5b50610893611b49565b6040516108a09190614a87565b60405180910390f35b3480156108b557600080fd5b506108be611b4f565b6040516108cb9190614785565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f69190613e36565b611be1565b604051610908919061476a565b60405180910390f35b34801561091d57600080fd5b50610926611c74565b604051610933919061476a565b60405180910390f35b61095660048036038101906109519190614112565b611c87565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613f79565b61200b565b005b34801561098d57600080fd5b50610996612021565b6040516109a39190614785565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190614112565b6120af565b005b3480156109e157600080fd5b506109fc60048036038101906109f79190613ef6565b612135565b005b348015610a0a57600080fd5b50610a13612197565b604051610a209190614a87565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613ff9565b61219d565b005b348015610a5e57600080fd5b50610a796004803603810190610a749190614042565b6122ae565b005b348015610a8757600080fd5b50610aa26004803603810190610a9d9190614112565b612347565b604051610aaf9190614785565b60405180910390f35b348015610ac457600080fd5b50610acd6124a0565b604051610ada9190614a87565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614112565b6124a6565b005b348015610b1857600080fd5b50610b336004803603810190610b2e9190614042565b61264b565b005b348015610b4157600080fd5b50610b5c6004803603810190610b579190614112565b6126e4565b005b348015610b6a57600080fd5b50610b856004803603810190610b809190613e63565b61276a565b604051610b92919061476a565b60405180910390f35b348015610ba757600080fd5b50610bb06127fe565b604051610bbd9190614a87565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be8919061413f565b612804565b005b348015610bfb57600080fd5b50610c166004803603810190610c119190614112565b612aeb565b005b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190613e36565b612bc4565b005b348015610c4d57600080fd5b50610c686004803603810190610c639190613e36565b612cbc565b604051610c759190614a87565b60405180910390f35b348015610c8a57600080fd5b50610ca56004803603810190610ca09190613e36565b612cd4565b604051610cb2919061476a565b60405180910390f35b348015610cc757600080fd5b50610cd0612cf4565b604051610cdd919061476a565b60405180910390f35b610cee612d07565b73ffffffffffffffffffffffffffffffffffffffff16610d0c611a93565b73ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906149a7565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e8857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e985750610e9782612d0f565b5b9050919050565b606060008054610eae90614dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610eda90614dbc565b8015610f275780601f10610efc57610100808354040283529160200191610f27565b820191906000526020600020905b815481529060010190602001808311610f0a57829003601f168201915b5050505050905090565b60156020528060005260406000206000915090505481565b6000610f5482612d79565b610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90614967565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fd98261177f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561104a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104190614a07565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611069612d07565b73ffffffffffffffffffffffffffffffffffffffff161480611098575061109781611092612d07565b61276a565b5b6110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce906148c7565b60405180910390fd5b6110e18383612de5565b505050565b6110ee612d07565b73ffffffffffffffffffffffffffffffffffffffff1661110c611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611159906149a7565b60405180910390fd5b8060099080519060200190611178929190613bac565b5050565b611184612d07565b73ffffffffffffffffffffffffffffffffffffffff166111a2611a93565b73ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ef906149a7565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60006112216007612e9e565b905090565b611237611231612d07565b82612eac565b611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90614a27565b60405180910390fd5b611281838383612f8a565b505050565b600b5481565b611294612d07565b73ffffffffffffffffffffffffffffffffffffffff166112b2611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff906149a7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b600061132f611a93565b73ffffffffffffffffffffffffffffffffffffffff1647604051611352906146cc565b60006040518083038185875af1925050503d806000811461138f576040519150601f19603f3d011682016040523d82523d6000602084013e611394565b606091505b50509050806113a257600080fd5b50565b6113c083838360405180602001604052806000815250612135565b505050565b606060006113d2836118bd565b905060008167ffffffffffffffff8111156113f0576113ef614f55565b5b60405190808252806020026020018201604052801561141e5781602001602082028036833780820191505090505b50905060006001905060005b838110801561143b5750600d548211155b156114c457600061144b8361177f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b0578284838151811061149557611494614f26565b5b60200260200101818152505081806114ac90614e1f565b9250505b82806114bb90614e1f565b9350505061142a565b82945050505050919050565b6114d8612d07565b73ffffffffffffffffffffffffffffffffffffffff166114f6611a93565b73ffffffffffffffffffffffffffffffffffffffff161461154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906149a7565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115af612d07565b73ffffffffffffffffffffffffffffffffffffffff166115cd611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a906149a7565b60405180910390fd5b80600a9080519060200190611639929190613bac565b5050565b601260039054906101000a900460ff1681565b6009805461165d90614dbc565b80601f016020809104026020016040519081016040528092919081815260200182805461168990614dbc565b80156116d65780601f106116ab576101008083540402835291602001916116d6565b820191906000526020600020905b8154815290600101906020018083116116b957829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600880546116fe90614dbc565b80601f016020809104026020016040519081016040528092919081815260200182805461172a90614dbc565b80156117775780601f1061174c57610100808354040283529160200191611777565b820191906000526020600020905b81548152906001019060200180831161175a57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90614907565b60405180910390fd5b80915050919050565b611839612d07565b73ffffffffffffffffffffffffffffffffffffffff16611857611a93565b73ffffffffffffffffffffffffffffffffffffffff16146118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a4906149a7565b60405180910390fd5b80600c8190555050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906148e7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61197d612d07565b73ffffffffffffffffffffffffffffffffffffffff1661199b611a93565b73ffffffffffffffffffffffffffffffffffffffff16146119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906149a7565b60405180910390fd5b6119fb60006131f1565b565b611a05612d07565b73ffffffffffffffffffffffffffffffffffffffff16611a23611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906149a7565b60405180910390fd5b8060089080519060200190611a8f929190613bac565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ac5612d07565b73ffffffffffffffffffffffffffffffffffffffff16611ae3611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b30906149a7565b60405180910390fd5b80600b8190555050565b600c5481565b60115481565b606060018054611b5e90614dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8a90614dbc565b8015611bd75780601f10611bac57610100808354040283529160200191611bd7565b820191906000526020600020905b815481529060010190602001808311611bba57829003601f168201915b5050505050905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c6d5750611c3e611a93565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b601260029054906101000a900460ff1681565b8060011515601260019054906101000a900460ff1615151415611da35760011515601260029054906101000a900460ff1615151415611d0957611cc933611be1565b611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff906147a7565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282611d5c9190614bf1565b1115611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490614947565b60405180910390fd5b50611e39565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282611df69190614bf1565b1115611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614a47565b60405180910390fd5b505b600081118015611e4b57506011548111155b611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906149c7565b60405180910390fd5b600e5481611e986007612e9e565b611ea29190614bf1565b1115611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90614a67565b60405180910390fd5b601260009054906101000a900460ff1615611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90614847565b60405180910390fd5b60011515601260019054906101000a900460ff1615151415611fa45781600b54611f5d9190614c78565b341015611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614987565b60405180910390fd5b611ff5565b81600c54611fb29190614c78565b341015611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90614987565b60405180910390fd5b5b611fff33836132b7565b612007611325565b5050565b61201d612016612d07565b83836133c3565b5050565b600a805461202e90614dbc565b80601f016020809104026020016040519081016040528092919081815260200182805461205a90614dbc565b80156120a75780601f1061207c576101008083540402835291602001916120a7565b820191906000526020600020905b81548152906001019060200180831161208a57829003601f168201915b505050505081565b6120b7612d07565b73ffffffffffffffffffffffffffffffffffffffff166120d5611a93565b73ffffffffffffffffffffffffffffffffffffffff161461212b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612122906149a7565b60405180910390fd5b8060108190555050565b612146612140612d07565b83612eac565b612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90614a27565b60405180910390fd5b61219184848484613530565b50505050565b60105481565b6121a5612d07565b73ffffffffffffffffffffffffffffffffffffffff166121c3611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612210906149a7565b60405180910390fd5b60005b81518110156122aa5760016013600084848151811061223e5761223d614f26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122a290614e1f565b91505061221c565b5050565b6122b6612d07565b73ffffffffffffffffffffffffffffffffffffffff166122d4611a93565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612321906149a7565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b606061235282612d79565b612391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612388906149e7565b60405180910390fd5b60001515601260039054906101000a900460ff161515141561243f57600a80546123ba90614dbc565b80601f01602080910402602001604051908101604052809291908181526020018280546123e690614dbc565b80156124335780601f1061240857610100808354040283529160200191612433565b820191906000526020600020905b81548152906001019060200180831161241657829003601f168201915b5050505050905061249b565b600061244961358c565b905060008151116124695760405180602001604052806000815250612497565b806124738461361e565b60096040516020016124879392919061469b565b6040516020818303038152906040525b9150505b919050565b600d5481565b6124ae612d07565b73ffffffffffffffffffffffffffffffffffffffff166124cc611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612522576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612519906149a7565b60405180910390fd5b601260009054906101000a900460ff1615612572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256990614847565b60405180910390fd5b61257c338261377f565b60011515601260019054906101000a900460ff16151514156125f257601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906125e890614e1f565b9190505550612648565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061264290614e1f565b91905055505b50565b612653612d07565b73ffffffffffffffffffffffffffffffffffffffff16612671611a93565b73ffffffffffffffffffffffffffffffffffffffff16146126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be906149a7565b60405180910390fd5b80601260036101000a81548160ff02191690831515021790555050565b6126ec612d07565b73ffffffffffffffffffffffffffffffffffffffff1661270a611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906149a7565b60405180910390fd5b80600f8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b8160011515601260019054906101000a900460ff16151514156129205760011515601260029054906101000a900460ff16151514156128865761284633611be1565b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c906147a7565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f5482826128d99190614bf1565b111561291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614947565b60405180910390fd5b506129b6565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105482826129739190614bf1565b11156129b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ab90614a47565b60405180910390fd5b505b6000811180156129c857506011548111155b612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe906149c7565b60405180910390fd5b600e5481612a156007612e9e565b612a1f9190614bf1565b1115612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790614a67565b60405180910390fd5b612a68612d07565b73ffffffffffffffffffffffffffffffffffffffff16612a86611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad3906149a7565b60405180910390fd5b612ae682846132b7565b505050565b612af3612d07565b73ffffffffffffffffffffffffffffffffffffffff16612b11611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e906149a7565b60405180910390fd5b601260009054906101000a900460ff1615612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bae90614847565b60405180910390fd5b612bc133826132b7565b50565b612bcc612d07565b73ffffffffffffffffffffffffffffffffffffffff16612bea611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c37906149a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca7906147e7565b60405180910390fd5b612cb9816131f1565b50565b60146020528060005260406000206000915090505481565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e588361177f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612eb782612d79565b612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed906148a7565b60405180910390fd5b6000612f018361177f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f7057508373ffffffffffffffffffffffffffffffffffffffff16612f5884610f49565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f815750612f80818561276a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612faa8261177f565b73ffffffffffffffffffffffffffffffffffffffff1614613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff790614807565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306790614867565b60405180910390fd5b61307b83838361379d565b613086600082612de5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d69190614cd2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461312d9190614bf1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131ec8383836137a2565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156133be576132cc60076137a7565b6132df836132da6007612e9e565b61377f565b60011515601260019054906101000a900460ff161515141561335557601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061334b90614e1f565b91905055506133ab565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906133a590614e1f565b91905055505b80806133b690614e1f565b9150506132ba565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342990614887565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613523919061476a565b60405180910390a3505050565b61353b848484612f8a565b613547848484846137bd565b613586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357d906147c7565b60405180910390fd5b50505050565b60606008805461359b90614dbc565b80601f01602080910402602001604051908101604052809291908181526020018280546135c790614dbc565b80156136145780601f106135e957610100808354040283529160200191613614565b820191906000526020600020905b8154815290600101906020018083116135f757829003601f168201915b5050505050905090565b60606000821415613666576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061377a565b600082905060005b6000821461369857808061368190614e1f565b915050600a826136919190614c47565b915061366e565b60008167ffffffffffffffff8111156136b4576136b3614f55565b5b6040519080825280601f01601f1916602001820160405280156136e65781602001600182028036833780820191505090505b5090505b60008514613773576001826136ff9190614cd2565b9150600a8561370e9190614e68565b603061371a9190614bf1565b60f81b8183815181106137305761372f614f26565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561376c9190614c47565b94506136ea565b8093505050505b919050565b613799828260405180602001604052806000815250613954565b5050565b505050565b505050565b6001816000016000828254019250508190555050565b60006137de8473ffffffffffffffffffffffffffffffffffffffff166139af565b15613947578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613807612d07565b8786866040518563ffffffff1660e01b815260040161382994939291906146fc565b602060405180830381600087803b15801561384357600080fd5b505af192505050801561387457506040513d601f19601f82011682018060405250810190613871919061409c565b60015b6138f7573d80600081146138a4576040519150601f19603f3d011682016040523d82523d6000602084013e6138a9565b606091505b506000815114156138ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e6906147c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061394c565b600190505b949350505050565b61395e83836139d2565b61396b60008484846137bd565b6139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a1906147c7565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3990614927565b60405180910390fd5b613a4b81612d79565b15613a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8290614827565b60405180910390fd5b613a976000838361379d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ae79190614bf1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613ba8600083836137a2565b5050565b828054613bb890614dbc565b90600052602060002090601f016020900481019282613bda5760008555613c21565b82601f10613bf357805160ff1916838001178555613c21565b82800160010185558215613c21579182015b82811115613c20578251825591602001919060010190613c05565b5b509050613c2e9190613c32565b5090565b5b80821115613c4b576000816000905550600101613c33565b5090565b6000613c62613c5d84614ac7565b614aa2565b90508083825260208201905082856020860282011115613c8557613c84614f89565b5b60005b85811015613cb55781613c9b8882613d43565b845260208401935060208301925050600181019050613c88565b5050509392505050565b6000613cd2613ccd84614af3565b614aa2565b905082815260208101848484011115613cee57613ced614f8e565b5b613cf9848285614d7a565b509392505050565b6000613d14613d0f84614b24565b614aa2565b905082815260208101848484011115613d3057613d2f614f8e565b5b613d3b848285614d7a565b509392505050565b600081359050613d5281615574565b92915050565b600082601f830112613d6d57613d6c614f84565b5b8135613d7d848260208601613c4f565b91505092915050565b600081359050613d958161558b565b92915050565b600081359050613daa816155a2565b92915050565b600081519050613dbf816155a2565b92915050565b600082601f830112613dda57613dd9614f84565b5b8135613dea848260208601613cbf565b91505092915050565b600082601f830112613e0857613e07614f84565b5b8135613e18848260208601613d01565b91505092915050565b600081359050613e30816155b9565b92915050565b600060208284031215613e4c57613e4b614f98565b5b6000613e5a84828501613d43565b91505092915050565b60008060408385031215613e7a57613e79614f98565b5b6000613e8885828601613d43565b9250506020613e9985828601613d43565b9150509250929050565b600080600060608486031215613ebc57613ebb614f98565b5b6000613eca86828701613d43565b9350506020613edb86828701613d43565b9250506040613eec86828701613e21565b9150509250925092565b60008060008060808587031215613f1057613f0f614f98565b5b6000613f1e87828801613d43565b9450506020613f2f87828801613d43565b9350506040613f4087828801613e21565b925050606085013567ffffffffffffffff811115613f6157613f60614f93565b5b613f6d87828801613dc5565b91505092959194509250565b60008060408385031215613f9057613f8f614f98565b5b6000613f9e85828601613d43565b9250506020613faf85828601613d86565b9150509250929050565b60008060408385031215613fd057613fcf614f98565b5b6000613fde85828601613d43565b9250506020613fef85828601613e21565b9150509250929050565b60006020828403121561400f5761400e614f98565b5b600082013567ffffffffffffffff81111561402d5761402c614f93565b5b61403984828501613d58565b91505092915050565b60006020828403121561405857614057614f98565b5b600061406684828501613d86565b91505092915050565b60006020828403121561408557614084614f98565b5b600061409384828501613d9b565b91505092915050565b6000602082840312156140b2576140b1614f98565b5b60006140c084828501613db0565b91505092915050565b6000602082840312156140df576140de614f98565b5b600082013567ffffffffffffffff8111156140fd576140fc614f93565b5b61410984828501613df3565b91505092915050565b60006020828403121561412857614127614f98565b5b600061413684828501613e21565b91505092915050565b6000806040838503121561415657614155614f98565b5b600061416485828601613e21565b925050602061417585828601613d43565b9150509250929050565b600061418b838361467d565b60208301905092915050565b6141a081614d06565b82525050565b60006141b182614b7a565b6141bb8185614ba8565b93506141c683614b55565b8060005b838110156141f75781516141de888261417f565b97506141e983614b9b565b9250506001810190506141ca565b5085935050505092915050565b61420d81614d18565b82525050565b600061421e82614b85565b6142288185614bb9565b9350614238818560208601614d89565b61424181614f9d565b840191505092915050565b600061425782614b90565b6142618185614bd5565b9350614271818560208601614d89565b61427a81614f9d565b840191505092915050565b600061429082614b90565b61429a8185614be6565b93506142aa818560208601614d89565b80840191505092915050565b600081546142c381614dbc565b6142cd8186614be6565b945060018216600081146142e857600181146142f95761432c565b60ff1983168652818601935061432c565b61430285614b65565b60005b8381101561432457815481890152600182019150602081019050614305565b838801955050505b50505092915050565b6000614342601c83614bd5565b915061434d82614fae565b602082019050919050565b6000614365603283614bd5565b915061437082614fd7565b604082019050919050565b6000614388602683614bd5565b915061439382615026565b604082019050919050565b60006143ab602583614bd5565b91506143b682615075565b604082019050919050565b60006143ce601c83614bd5565b91506143d9826150c4565b602082019050919050565b60006143f1601b83614bd5565b91506143fc826150ed565b602082019050919050565b6000614414602483614bd5565b915061441f82615116565b604082019050919050565b6000614437601983614bd5565b915061444282615165565b602082019050919050565b600061445a602c83614bd5565b91506144658261518e565b604082019050919050565b600061447d603883614bd5565b9150614488826151dd565b604082019050919050565b60006144a0602a83614bd5565b91506144ab8261522c565b604082019050919050565b60006144c3602983614bd5565b91506144ce8261527b565b604082019050919050565b60006144e6602083614bd5565b91506144f1826152ca565b602082019050919050565b6000614509602d83614bd5565b9150614514826152f3565b604082019050919050565b600061452c602c83614bd5565b915061453782615342565b604082019050919050565b600061454f601783614bd5565b915061455a82615391565b602082019050919050565b6000614572602083614bd5565b915061457d826153ba565b602082019050919050565b6000614595601883614bd5565b91506145a0826153e3565b602082019050919050565b60006145b8602483614bd5565b91506145c38261540c565b604082019050919050565b60006145db602183614bd5565b91506145e68261545b565b604082019050919050565b60006145fe600083614bca565b9150614609826154aa565b600082019050919050565b6000614621603183614bd5565b915061462c826154ad565b604082019050919050565b6000614644603083614bd5565b915061464f826154fc565b604082019050919050565b6000614667601883614bd5565b91506146728261554b565b602082019050919050565b61468681614d70565b82525050565b61469581614d70565b82525050565b60006146a78286614285565b91506146b38285614285565b91506146bf82846142b6565b9150819050949350505050565b60006146d7826145f1565b9150819050919050565b60006020820190506146f66000830184614197565b92915050565b60006080820190506147116000830187614197565b61471e6020830186614197565b61472b604083018561468c565b818103606083015261473d8184614213565b905095945050505050565b6000602082019050818103600083015261476281846141a6565b905092915050565b600060208201905061477f6000830184614204565b92915050565b6000602082019050818103600083015261479f818461424c565b905092915050565b600060208201905081810360008301526147c081614335565b9050919050565b600060208201905081810360008301526147e081614358565b9050919050565b600060208201905081810360008301526148008161437b565b9050919050565b600060208201905081810360008301526148208161439e565b9050919050565b60006020820190508181036000830152614840816143c1565b9050919050565b60006020820190508181036000830152614860816143e4565b9050919050565b6000602082019050818103600083015261488081614407565b9050919050565b600060208201905081810360008301526148a08161442a565b9050919050565b600060208201905081810360008301526148c08161444d565b9050919050565b600060208201905081810360008301526148e081614470565b9050919050565b6000602082019050818103600083015261490081614493565b9050919050565b60006020820190508181036000830152614920816144b6565b9050919050565b60006020820190508181036000830152614940816144d9565b9050919050565b60006020820190508181036000830152614960816144fc565b9050919050565b600060208201905081810360008301526149808161451f565b9050919050565b600060208201905081810360008301526149a081614542565b9050919050565b600060208201905081810360008301526149c081614565565b9050919050565b600060208201905081810360008301526149e081614588565b9050919050565b60006020820190508181036000830152614a00816145ab565b9050919050565b60006020820190508181036000830152614a20816145ce565b9050919050565b60006020820190508181036000830152614a4081614614565b9050919050565b60006020820190508181036000830152614a6081614637565b9050919050565b60006020820190508181036000830152614a808161465a565b9050919050565b6000602082019050614a9c600083018461468c565b92915050565b6000614aac614abd565b9050614ab88282614dee565b919050565b6000604051905090565b600067ffffffffffffffff821115614ae257614ae1614f55565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b0e57614b0d614f55565b5b614b1782614f9d565b9050602081019050919050565b600067ffffffffffffffff821115614b3f57614b3e614f55565b5b614b4882614f9d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bfc82614d70565b9150614c0783614d70565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3c57614c3b614e99565b5b828201905092915050565b6000614c5282614d70565b9150614c5d83614d70565b925082614c6d57614c6c614ec8565b5b828204905092915050565b6000614c8382614d70565b9150614c8e83614d70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cc757614cc6614e99565b5b828202905092915050565b6000614cdd82614d70565b9150614ce883614d70565b925082821015614cfb57614cfa614e99565b5b828203905092915050565b6000614d1182614d50565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614da7578082015181840152602081019050614d8c565b83811115614db6576000848401525b50505050565b60006002820490506001821680614dd457607f821691505b60208210811415614de857614de7614ef7565b5b50919050565b614df782614f9d565b810181811067ffffffffffffffff82111715614e1657614e15614f55565b5b80604052505050565b6000614e2a82614d70565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e5d57614e5c614e99565b5b600182019050919050565b6000614e7382614d70565b9150614e7e83614d70565b925082614e8e57614e8d614ec8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d53473a2055736572206973206e6f742077686974656c697374656400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d53473a2054686520636f6e7472616374206973207061757365640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f722070726573616c6500000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d53473a20496e73756666696369656e742066756e6473000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d53473a20496e76616c6964206d696e7420616d6f756e740000000000000000600082015250565b7f4d53473a2055524920717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f72207075626c696373616c6500000000000000000000000000000000602082015250565b7f4d53473a204d617820737570706c792065786365656465640000000000000000600082015250565b61557d81614d06565b811461558857600080fd5b50565b61559481614d18565b811461559f57600080fd5b50565b6155ab81614d24565b81146155b657600080fd5b50565b6155c281614d70565b81146155cd57600080fd5b5056fea264697066735822122088ceb42487f17ad6d7e859429f3c3f64992458abf1c58a4223f6131f726bd24a64736f6c63430008070033697066733a2f2f516d59396f6b386451577542746f717435574c68576e754172515a4b6f546258333566614836555a6a4e767872372f697066733a2f2f516d555a6f77787357316d4c4579364b6670626e65784835684832797443654c615a51446a6a62777661534631332f
Deployed Bytecode
0x6080604052600436106103505760003560e01c80638da5cb5b116101c6578063c54e73e3116100f7578063eb95416011610095578063f2fde38b1161006f578063f2fde38b14610c18578063f9d38e9714610c41578063fa65b59214610c7e578063fdea8e0b14610cbb57610350565b8063eb95416014610b9b578063efbd73f414610bc6578063f19e75d414610bef57610350565b8063e08823c5116100d1578063e08823c514610ae3578063e0a8085314610b0c578063e9058c3714610b35578063e985e9c514610b5e57610350565b8063c54e73e314610a52578063c87b56dd14610a7b578063d5abeb0114610ab857610350565b8063a0712d6811610164578063ae1373071161013e578063ae137307146109ac578063b88d4fde146109d5578063b8d988a2146109fe578063c243c6c114610a2957610350565b8063a0712d681461093c578063a22cb46514610958578063a45ba8e71461098157610350565b806394354fd0116101a057806394354fd01461087e57806395d89b41146108a957806396bfc229146108d45780639c70b5121461091157610350565b80638da5cb5b146107ff5780638fdcf9421461082a57806392829d741461085357610350565b806342842e0e116102a057806362b99ad41161023e5780636f636e8b116102185780636f636e8b1461075757806370a0823114610782578063715018a6146107bf5780637ec4a659146107d657610350565b806362b99ad4146106c65780636352211e146106f15780636905b1841461072e57610350565b80634fdd43cb1161027a5780634fdd43cb1461061c57806351830227146106455780635503a0e8146106705780635c975abb1461069b57610350565b806342842e0e1461058d578063438b6300146105b657806347ee0394146105f357610350565b806316ba10e01161030d57806323b872dd116102e757806323b872dd146105065780632a23d07d1461052f5780633c9527641461055a5780633ccfd60b1461058357610350565b806316ba10e01461048957806316c38b3c146104b257806318160ddd146104db57610350565b806301bf66481461035557806301ffc9a71461037e57806306fdde03146103bb57806307b9f56d146103e6578063081812fc14610423578063095ea7b314610460575b600080fd5b34801561036157600080fd5b5061037c60048036038101906103779190613e36565b610ce6565b005b34801561038a57600080fd5b506103a560048036038101906103a0919061406f565b610dbd565b6040516103b2919061476a565b60405180910390f35b3480156103c757600080fd5b506103d0610e9f565b6040516103dd9190614785565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613e36565b610f31565b60405161041a9190614a87565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190614112565b610f49565b60405161045791906146e1565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190613fb9565b610fce565b005b34801561049557600080fd5b506104b060048036038101906104ab91906140c9565b6110e6565b005b3480156104be57600080fd5b506104d960048036038101906104d49190614042565b61117c565b005b3480156104e757600080fd5b506104f0611215565b6040516104fd9190614a87565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613ea3565b611226565b005b34801561053b57600080fd5b50610544611286565b6040516105519190614a87565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614042565b61128c565b005b61058b611325565b005b34801561059957600080fd5b506105b460048036038101906105af9190613ea3565b6113a5565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e36565b6113c5565b6040516105ea9190614748565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613e36565b6114d0565b005b34801561062857600080fd5b50610643600480360381019061063e91906140c9565b6115a7565b005b34801561065157600080fd5b5061065a61163d565b604051610667919061476a565b60405180910390f35b34801561067c57600080fd5b50610685611650565b6040516106929190614785565b60405180910390f35b3480156106a757600080fd5b506106b06116de565b6040516106bd919061476a565b60405180910390f35b3480156106d257600080fd5b506106db6116f1565b6040516106e89190614785565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190614112565b61177f565b60405161072591906146e1565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614112565b611831565b005b34801561076357600080fd5b5061076c6118b7565b6040516107799190614a87565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613e36565b6118bd565b6040516107b69190614a87565b60405180910390f35b3480156107cb57600080fd5b506107d4611975565b005b3480156107e257600080fd5b506107fd60048036038101906107f891906140c9565b6119fd565b005b34801561080b57600080fd5b50610814611a93565b60405161082191906146e1565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c9190614112565b611abd565b005b34801561085f57600080fd5b50610868611b43565b6040516108759190614a87565b60405180910390f35b34801561088a57600080fd5b50610893611b49565b6040516108a09190614a87565b60405180910390f35b3480156108b557600080fd5b506108be611b4f565b6040516108cb9190614785565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f69190613e36565b611be1565b604051610908919061476a565b60405180910390f35b34801561091d57600080fd5b50610926611c74565b604051610933919061476a565b60405180910390f35b61095660048036038101906109519190614112565b611c87565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613f79565b61200b565b005b34801561098d57600080fd5b50610996612021565b6040516109a39190614785565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190614112565b6120af565b005b3480156109e157600080fd5b506109fc60048036038101906109f79190613ef6565b612135565b005b348015610a0a57600080fd5b50610a13612197565b604051610a209190614a87565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613ff9565b61219d565b005b348015610a5e57600080fd5b50610a796004803603810190610a749190614042565b6122ae565b005b348015610a8757600080fd5b50610aa26004803603810190610a9d9190614112565b612347565b604051610aaf9190614785565b60405180910390f35b348015610ac457600080fd5b50610acd6124a0565b604051610ada9190614a87565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614112565b6124a6565b005b348015610b1857600080fd5b50610b336004803603810190610b2e9190614042565b61264b565b005b348015610b4157600080fd5b50610b5c6004803603810190610b579190614112565b6126e4565b005b348015610b6a57600080fd5b50610b856004803603810190610b809190613e63565b61276a565b604051610b92919061476a565b60405180910390f35b348015610ba757600080fd5b50610bb06127fe565b604051610bbd9190614a87565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be8919061413f565b612804565b005b348015610bfb57600080fd5b50610c166004803603810190610c119190614112565b612aeb565b005b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190613e36565b612bc4565b005b348015610c4d57600080fd5b50610c686004803603810190610c639190613e36565b612cbc565b604051610c759190614a87565b60405180910390f35b348015610c8a57600080fd5b50610ca56004803603810190610ca09190613e36565b612cd4565b604051610cb2919061476a565b60405180910390f35b348015610cc757600080fd5b50610cd0612cf4565b604051610cdd919061476a565b60405180910390f35b610cee612d07565b73ffffffffffffffffffffffffffffffffffffffff16610d0c611a93565b73ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906149a7565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e8857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e985750610e9782612d0f565b5b9050919050565b606060008054610eae90614dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610eda90614dbc565b8015610f275780601f10610efc57610100808354040283529160200191610f27565b820191906000526020600020905b815481529060010190602001808311610f0a57829003601f168201915b5050505050905090565b60156020528060005260406000206000915090505481565b6000610f5482612d79565b610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90614967565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fd98261177f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561104a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104190614a07565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611069612d07565b73ffffffffffffffffffffffffffffffffffffffff161480611098575061109781611092612d07565b61276a565b5b6110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce906148c7565b60405180910390fd5b6110e18383612de5565b505050565b6110ee612d07565b73ffffffffffffffffffffffffffffffffffffffff1661110c611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611159906149a7565b60405180910390fd5b8060099080519060200190611178929190613bac565b5050565b611184612d07565b73ffffffffffffffffffffffffffffffffffffffff166111a2611a93565b73ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ef906149a7565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60006112216007612e9e565b905090565b611237611231612d07565b82612eac565b611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90614a27565b60405180910390fd5b611281838383612f8a565b505050565b600b5481565b611294612d07565b73ffffffffffffffffffffffffffffffffffffffff166112b2611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff906149a7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b600061132f611a93565b73ffffffffffffffffffffffffffffffffffffffff1647604051611352906146cc565b60006040518083038185875af1925050503d806000811461138f576040519150601f19603f3d011682016040523d82523d6000602084013e611394565b606091505b50509050806113a257600080fd5b50565b6113c083838360405180602001604052806000815250612135565b505050565b606060006113d2836118bd565b905060008167ffffffffffffffff8111156113f0576113ef614f55565b5b60405190808252806020026020018201604052801561141e5781602001602082028036833780820191505090505b50905060006001905060005b838110801561143b5750600d548211155b156114c457600061144b8361177f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b0578284838151811061149557611494614f26565b5b60200260200101818152505081806114ac90614e1f565b9250505b82806114bb90614e1f565b9350505061142a565b82945050505050919050565b6114d8612d07565b73ffffffffffffffffffffffffffffffffffffffff166114f6611a93565b73ffffffffffffffffffffffffffffffffffffffff161461154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906149a7565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115af612d07565b73ffffffffffffffffffffffffffffffffffffffff166115cd611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a906149a7565b60405180910390fd5b80600a9080519060200190611639929190613bac565b5050565b601260039054906101000a900460ff1681565b6009805461165d90614dbc565b80601f016020809104026020016040519081016040528092919081815260200182805461168990614dbc565b80156116d65780601f106116ab576101008083540402835291602001916116d6565b820191906000526020600020905b8154815290600101906020018083116116b957829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600880546116fe90614dbc565b80601f016020809104026020016040519081016040528092919081815260200182805461172a90614dbc565b80156117775780601f1061174c57610100808354040283529160200191611777565b820191906000526020600020905b81548152906001019060200180831161175a57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90614907565b60405180910390fd5b80915050919050565b611839612d07565b73ffffffffffffffffffffffffffffffffffffffff16611857611a93565b73ffffffffffffffffffffffffffffffffffffffff16146118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a4906149a7565b60405180910390fd5b80600c8190555050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906148e7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61197d612d07565b73ffffffffffffffffffffffffffffffffffffffff1661199b611a93565b73ffffffffffffffffffffffffffffffffffffffff16146119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906149a7565b60405180910390fd5b6119fb60006131f1565b565b611a05612d07565b73ffffffffffffffffffffffffffffffffffffffff16611a23611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906149a7565b60405180910390fd5b8060089080519060200190611a8f929190613bac565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ac5612d07565b73ffffffffffffffffffffffffffffffffffffffff16611ae3611a93565b73ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b30906149a7565b60405180910390fd5b80600b8190555050565b600c5481565b60115481565b606060018054611b5e90614dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8a90614dbc565b8015611bd75780601f10611bac57610100808354040283529160200191611bd7565b820191906000526020600020905b815481529060010190602001808311611bba57829003601f168201915b5050505050905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c6d5750611c3e611a93565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b601260029054906101000a900460ff1681565b8060011515601260019054906101000a900460ff1615151415611da35760011515601260029054906101000a900460ff1615151415611d0957611cc933611be1565b611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff906147a7565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548282611d5c9190614bf1565b1115611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490614947565b60405180910390fd5b50611e39565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548282611df69190614bf1565b1115611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614a47565b60405180910390fd5b505b600081118015611e4b57506011548111155b611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906149c7565b60405180910390fd5b600e5481611e986007612e9e565b611ea29190614bf1565b1115611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90614a67565b60405180910390fd5b601260009054906101000a900460ff1615611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90614847565b60405180910390fd5b60011515601260019054906101000a900460ff1615151415611fa45781600b54611f5d9190614c78565b341015611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614987565b60405180910390fd5b611ff5565b81600c54611fb29190614c78565b341015611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90614987565b60405180910390fd5b5b611fff33836132b7565b612007611325565b5050565b61201d612016612d07565b83836133c3565b5050565b600a805461202e90614dbc565b80601f016020809104026020016040519081016040528092919081815260200182805461205a90614dbc565b80156120a75780601f1061207c576101008083540402835291602001916120a7565b820191906000526020600020905b81548152906001019060200180831161208a57829003601f168201915b505050505081565b6120b7612d07565b73ffffffffffffffffffffffffffffffffffffffff166120d5611a93565b73ffffffffffffffffffffffffffffffffffffffff161461212b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612122906149a7565b60405180910390fd5b8060108190555050565b612146612140612d07565b83612eac565b612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90614a27565b60405180910390fd5b61219184848484613530565b50505050565b60105481565b6121a5612d07565b73ffffffffffffffffffffffffffffffffffffffff166121c3611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612210906149a7565b60405180910390fd5b60005b81518110156122aa5760016013600084848151811061223e5761223d614f26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122a290614e1f565b91505061221c565b5050565b6122b6612d07565b73ffffffffffffffffffffffffffffffffffffffff166122d4611a93565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612321906149a7565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b606061235282612d79565b612391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612388906149e7565b60405180910390fd5b60001515601260039054906101000a900460ff161515141561243f57600a80546123ba90614dbc565b80601f01602080910402602001604051908101604052809291908181526020018280546123e690614dbc565b80156124335780601f1061240857610100808354040283529160200191612433565b820191906000526020600020905b81548152906001019060200180831161241657829003601f168201915b5050505050905061249b565b600061244961358c565b905060008151116124695760405180602001604052806000815250612497565b806124738461361e565b60096040516020016124879392919061469b565b6040516020818303038152906040525b9150505b919050565b600d5481565b6124ae612d07565b73ffffffffffffffffffffffffffffffffffffffff166124cc611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612522576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612519906149a7565b60405180910390fd5b601260009054906101000a900460ff1615612572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256990614847565b60405180910390fd5b61257c338261377f565b60011515601260019054906101000a900460ff16151514156125f257601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906125e890614e1f565b9190505550612648565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061264290614e1f565b91905055505b50565b612653612d07565b73ffffffffffffffffffffffffffffffffffffffff16612671611a93565b73ffffffffffffffffffffffffffffffffffffffff16146126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be906149a7565b60405180910390fd5b80601260036101000a81548160ff02191690831515021790555050565b6126ec612d07565b73ffffffffffffffffffffffffffffffffffffffff1661270a611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906149a7565b60405180910390fd5b80600f8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b8160011515601260019054906101000a900460ff16151514156129205760011515601260029054906101000a900460ff16151514156128865761284633611be1565b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c906147a7565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f5482826128d99190614bf1565b111561291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614947565b60405180910390fd5b506129b6565b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105482826129739190614bf1565b11156129b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ab90614a47565b60405180910390fd5b505b6000811180156129c857506011548111155b612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe906149c7565b60405180910390fd5b600e5481612a156007612e9e565b612a1f9190614bf1565b1115612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790614a67565b60405180910390fd5b612a68612d07565b73ffffffffffffffffffffffffffffffffffffffff16612a86611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad3906149a7565b60405180910390fd5b612ae682846132b7565b505050565b612af3612d07565b73ffffffffffffffffffffffffffffffffffffffff16612b11611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e906149a7565b60405180910390fd5b601260009054906101000a900460ff1615612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bae90614847565b60405180910390fd5b612bc133826132b7565b50565b612bcc612d07565b73ffffffffffffffffffffffffffffffffffffffff16612bea611a93565b73ffffffffffffffffffffffffffffffffffffffff1614612c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c37906149a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca7906147e7565b60405180910390fd5b612cb9816131f1565b50565b60146020528060005260406000206000915090505481565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612e588361177f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612eb782612d79565b612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed906148a7565b60405180910390fd5b6000612f018361177f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f7057508373ffffffffffffffffffffffffffffffffffffffff16612f5884610f49565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f815750612f80818561276a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612faa8261177f565b73ffffffffffffffffffffffffffffffffffffffff1614613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff790614807565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306790614867565b60405180910390fd5b61307b83838361379d565b613086600082612de5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d69190614cd2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461312d9190614bf1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131ec8383836137a2565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156133be576132cc60076137a7565b6132df836132da6007612e9e565b61377f565b60011515601260019054906101000a900460ff161515141561335557601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061334b90614e1f565b91905055506133ab565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906133a590614e1f565b91905055505b80806133b690614e1f565b9150506132ba565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342990614887565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613523919061476a565b60405180910390a3505050565b61353b848484612f8a565b613547848484846137bd565b613586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357d906147c7565b60405180910390fd5b50505050565b60606008805461359b90614dbc565b80601f01602080910402602001604051908101604052809291908181526020018280546135c790614dbc565b80156136145780601f106135e957610100808354040283529160200191613614565b820191906000526020600020905b8154815290600101906020018083116135f757829003601f168201915b5050505050905090565b60606000821415613666576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061377a565b600082905060005b6000821461369857808061368190614e1f565b915050600a826136919190614c47565b915061366e565b60008167ffffffffffffffff8111156136b4576136b3614f55565b5b6040519080825280601f01601f1916602001820160405280156136e65781602001600182028036833780820191505090505b5090505b60008514613773576001826136ff9190614cd2565b9150600a8561370e9190614e68565b603061371a9190614bf1565b60f81b8183815181106137305761372f614f26565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561376c9190614c47565b94506136ea565b8093505050505b919050565b613799828260405180602001604052806000815250613954565b5050565b505050565b505050565b6001816000016000828254019250508190555050565b60006137de8473ffffffffffffffffffffffffffffffffffffffff166139af565b15613947578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613807612d07565b8786866040518563ffffffff1660e01b815260040161382994939291906146fc565b602060405180830381600087803b15801561384357600080fd5b505af192505050801561387457506040513d601f19601f82011682018060405250810190613871919061409c565b60015b6138f7573d80600081146138a4576040519150601f19603f3d011682016040523d82523d6000602084013e6138a9565b606091505b506000815114156138ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e6906147c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061394c565b600190505b949350505050565b61395e83836139d2565b61396b60008484846137bd565b6139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a1906147c7565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3990614927565b60405180910390fd5b613a4b81612d79565b15613a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8290614827565b60405180910390fd5b613a976000838361379d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ae79190614bf1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613ba8600083836137a2565b5050565b828054613bb890614dbc565b90600052602060002090601f016020900481019282613bda5760008555613c21565b82601f10613bf357805160ff1916838001178555613c21565b82800160010185558215613c21579182015b82811115613c20578251825591602001919060010190613c05565b5b509050613c2e9190613c32565b5090565b5b80821115613c4b576000816000905550600101613c33565b5090565b6000613c62613c5d84614ac7565b614aa2565b90508083825260208201905082856020860282011115613c8557613c84614f89565b5b60005b85811015613cb55781613c9b8882613d43565b845260208401935060208301925050600181019050613c88565b5050509392505050565b6000613cd2613ccd84614af3565b614aa2565b905082815260208101848484011115613cee57613ced614f8e565b5b613cf9848285614d7a565b509392505050565b6000613d14613d0f84614b24565b614aa2565b905082815260208101848484011115613d3057613d2f614f8e565b5b613d3b848285614d7a565b509392505050565b600081359050613d5281615574565b92915050565b600082601f830112613d6d57613d6c614f84565b5b8135613d7d848260208601613c4f565b91505092915050565b600081359050613d958161558b565b92915050565b600081359050613daa816155a2565b92915050565b600081519050613dbf816155a2565b92915050565b600082601f830112613dda57613dd9614f84565b5b8135613dea848260208601613cbf565b91505092915050565b600082601f830112613e0857613e07614f84565b5b8135613e18848260208601613d01565b91505092915050565b600081359050613e30816155b9565b92915050565b600060208284031215613e4c57613e4b614f98565b5b6000613e5a84828501613d43565b91505092915050565b60008060408385031215613e7a57613e79614f98565b5b6000613e8885828601613d43565b9250506020613e9985828601613d43565b9150509250929050565b600080600060608486031215613ebc57613ebb614f98565b5b6000613eca86828701613d43565b9350506020613edb86828701613d43565b9250506040613eec86828701613e21565b9150509250925092565b60008060008060808587031215613f1057613f0f614f98565b5b6000613f1e87828801613d43565b9450506020613f2f87828801613d43565b9350506040613f4087828801613e21565b925050606085013567ffffffffffffffff811115613f6157613f60614f93565b5b613f6d87828801613dc5565b91505092959194509250565b60008060408385031215613f9057613f8f614f98565b5b6000613f9e85828601613d43565b9250506020613faf85828601613d86565b9150509250929050565b60008060408385031215613fd057613fcf614f98565b5b6000613fde85828601613d43565b9250506020613fef85828601613e21565b9150509250929050565b60006020828403121561400f5761400e614f98565b5b600082013567ffffffffffffffff81111561402d5761402c614f93565b5b61403984828501613d58565b91505092915050565b60006020828403121561405857614057614f98565b5b600061406684828501613d86565b91505092915050565b60006020828403121561408557614084614f98565b5b600061409384828501613d9b565b91505092915050565b6000602082840312156140b2576140b1614f98565b5b60006140c084828501613db0565b91505092915050565b6000602082840312156140df576140de614f98565b5b600082013567ffffffffffffffff8111156140fd576140fc614f93565b5b61410984828501613df3565b91505092915050565b60006020828403121561412857614127614f98565b5b600061413684828501613e21565b91505092915050565b6000806040838503121561415657614155614f98565b5b600061416485828601613e21565b925050602061417585828601613d43565b9150509250929050565b600061418b838361467d565b60208301905092915050565b6141a081614d06565b82525050565b60006141b182614b7a565b6141bb8185614ba8565b93506141c683614b55565b8060005b838110156141f75781516141de888261417f565b97506141e983614b9b565b9250506001810190506141ca565b5085935050505092915050565b61420d81614d18565b82525050565b600061421e82614b85565b6142288185614bb9565b9350614238818560208601614d89565b61424181614f9d565b840191505092915050565b600061425782614b90565b6142618185614bd5565b9350614271818560208601614d89565b61427a81614f9d565b840191505092915050565b600061429082614b90565b61429a8185614be6565b93506142aa818560208601614d89565b80840191505092915050565b600081546142c381614dbc565b6142cd8186614be6565b945060018216600081146142e857600181146142f95761432c565b60ff1983168652818601935061432c565b61430285614b65565b60005b8381101561432457815481890152600182019150602081019050614305565b838801955050505b50505092915050565b6000614342601c83614bd5565b915061434d82614fae565b602082019050919050565b6000614365603283614bd5565b915061437082614fd7565b604082019050919050565b6000614388602683614bd5565b915061439382615026565b604082019050919050565b60006143ab602583614bd5565b91506143b682615075565b604082019050919050565b60006143ce601c83614bd5565b91506143d9826150c4565b602082019050919050565b60006143f1601b83614bd5565b91506143fc826150ed565b602082019050919050565b6000614414602483614bd5565b915061441f82615116565b604082019050919050565b6000614437601983614bd5565b915061444282615165565b602082019050919050565b600061445a602c83614bd5565b91506144658261518e565b604082019050919050565b600061447d603883614bd5565b9150614488826151dd565b604082019050919050565b60006144a0602a83614bd5565b91506144ab8261522c565b604082019050919050565b60006144c3602983614bd5565b91506144ce8261527b565b604082019050919050565b60006144e6602083614bd5565b91506144f1826152ca565b602082019050919050565b6000614509602d83614bd5565b9150614514826152f3565b604082019050919050565b600061452c602c83614bd5565b915061453782615342565b604082019050919050565b600061454f601783614bd5565b915061455a82615391565b602082019050919050565b6000614572602083614bd5565b915061457d826153ba565b602082019050919050565b6000614595601883614bd5565b91506145a0826153e3565b602082019050919050565b60006145b8602483614bd5565b91506145c38261540c565b604082019050919050565b60006145db602183614bd5565b91506145e68261545b565b604082019050919050565b60006145fe600083614bca565b9150614609826154aa565b600082019050919050565b6000614621603183614bd5565b915061462c826154ad565b604082019050919050565b6000614644603083614bd5565b915061464f826154fc565b604082019050919050565b6000614667601883614bd5565b91506146728261554b565b602082019050919050565b61468681614d70565b82525050565b61469581614d70565b82525050565b60006146a78286614285565b91506146b38285614285565b91506146bf82846142b6565b9150819050949350505050565b60006146d7826145f1565b9150819050919050565b60006020820190506146f66000830184614197565b92915050565b60006080820190506147116000830187614197565b61471e6020830186614197565b61472b604083018561468c565b818103606083015261473d8184614213565b905095945050505050565b6000602082019050818103600083015261476281846141a6565b905092915050565b600060208201905061477f6000830184614204565b92915050565b6000602082019050818103600083015261479f818461424c565b905092915050565b600060208201905081810360008301526147c081614335565b9050919050565b600060208201905081810360008301526147e081614358565b9050919050565b600060208201905081810360008301526148008161437b565b9050919050565b600060208201905081810360008301526148208161439e565b9050919050565b60006020820190508181036000830152614840816143c1565b9050919050565b60006020820190508181036000830152614860816143e4565b9050919050565b6000602082019050818103600083015261488081614407565b9050919050565b600060208201905081810360008301526148a08161442a565b9050919050565b600060208201905081810360008301526148c08161444d565b9050919050565b600060208201905081810360008301526148e081614470565b9050919050565b6000602082019050818103600083015261490081614493565b9050919050565b60006020820190508181036000830152614920816144b6565b9050919050565b60006020820190508181036000830152614940816144d9565b9050919050565b60006020820190508181036000830152614960816144fc565b9050919050565b600060208201905081810360008301526149808161451f565b9050919050565b600060208201905081810360008301526149a081614542565b9050919050565b600060208201905081810360008301526149c081614565565b9050919050565b600060208201905081810360008301526149e081614588565b9050919050565b60006020820190508181036000830152614a00816145ab565b9050919050565b60006020820190508181036000830152614a20816145ce565b9050919050565b60006020820190508181036000830152614a4081614614565b9050919050565b60006020820190508181036000830152614a6081614637565b9050919050565b60006020820190508181036000830152614a808161465a565b9050919050565b6000602082019050614a9c600083018461468c565b92915050565b6000614aac614abd565b9050614ab88282614dee565b919050565b6000604051905090565b600067ffffffffffffffff821115614ae257614ae1614f55565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b0e57614b0d614f55565b5b614b1782614f9d565b9050602081019050919050565b600067ffffffffffffffff821115614b3f57614b3e614f55565b5b614b4882614f9d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bfc82614d70565b9150614c0783614d70565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3c57614c3b614e99565b5b828201905092915050565b6000614c5282614d70565b9150614c5d83614d70565b925082614c6d57614c6c614ec8565b5b828204905092915050565b6000614c8382614d70565b9150614c8e83614d70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cc757614cc6614e99565b5b828202905092915050565b6000614cdd82614d70565b9150614ce883614d70565b925082821015614cfb57614cfa614e99565b5b828203905092915050565b6000614d1182614d50565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614da7578082015181840152602081019050614d8c565b83811115614db6576000848401525b50505050565b60006002820490506001821680614dd457607f821691505b60208210811415614de857614de7614ef7565b5b50919050565b614df782614f9d565b810181811067ffffffffffffffff82111715614e1657614e15614f55565b5b80604052505050565b6000614e2a82614d70565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e5d57614e5c614e99565b5b600182019050919050565b6000614e7382614d70565b9150614e7e83614d70565b925082614e8e57614e8d614ec8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d53473a2055736572206973206e6f742077686974656c697374656400000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d53473a2054686520636f6e7472616374206973207061757365640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f722070726573616c6500000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d53473a20496e73756666696369656e742066756e6473000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d53473a20496e76616c6964206d696e7420616d6f756e740000000000000000600082015250565b7f4d53473a2055524920717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d53473a204d6178204e4654207065722061646472657373206578636565646560008201527f6420666f72207075626c696373616c6500000000000000000000000000000000602082015250565b7f4d53473a204d617820737570706c792065786365656465640000000000000000600082015250565b61557d81614d06565b811461558857600080fd5b50565b61559481614d18565b811461559f57600080fd5b50565b6155ab81614d24565b81146155b657600080fd5b50565b6155c281614d70565b81146155cd57600080fd5b5056fea264697066735822122088ceb42487f17ad6d7e859429f3c3f64992458abf1c58a4223f6131f726bd24a64736f6c63430008070033
Deployed Bytecode Sourcemap
38758:7718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46203:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25574:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39841:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28078:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44316:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44627:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41036:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39118:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45732:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44964:145;;;:::i;:::-;;29238:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42381:687;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45873:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44462:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39618:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39020:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39511:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38931:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26213:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43695:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39345:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;44179:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43569:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39164:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39451:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46330:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39577:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41152:465;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28371:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39060:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43848:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29494:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39396:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45994:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44738:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43094:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39232:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41826:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44852:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44026:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28597:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39269:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42188:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41648:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39772:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39683:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39544:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46203:119;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46309:5:::1;46275:24;:31;46300:5;46275:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46203:119:::0;:::o;25574:305::-;25676:4;25728:25;25713:40;;;:11;:40;;;;:105;;;;25785:33;25770:48;;;:11;:48;;;;25713:105;:158;;;;25835:36;25859:11;25835:23;:36::i;:::-;25713:158;25693:178;;25574:305;;;:::o;26519:100::-;26573:13;26606:5;26599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:100;:::o;39841:65::-;;;;;;;;;;;;;;;;;:::o;28078:221::-;28154:7;28182:16;28190:7;28182;:16::i;:::-;28174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:15;:24;28283:7;28267:24;;;;;;;;;;;;;;;;;;;;;28260:31;;28078:221;;;:::o;27601:411::-;27682:13;27698:23;27713:7;27698:14;:23::i;:::-;27682:39;;27746:5;27740:11;;:2;:11;;;;27732:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:5;27824:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27849:37;27866:5;27873:12;:10;:12::i;:::-;27849:16;:37::i;:::-;27824:62;27802:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:21;27992:2;27996:7;27983:8;:21::i;:::-;27671:341;27601:411;;:::o;44316:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44404:10:::1;44392:9;:22;;;;;;;;;;;;:::i;:::-;;44316:106:::0;:::o;44627:83::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44696:6:::1;44687;;:15;;;;;;;;;;;;;;;;;;44627:83:::0;:::o;41036:95::-;41080:7;41107:16;:6;:14;:16::i;:::-;41100:23;;41036:95;:::o;28828:339::-;29023:41;29042:12;:10;:12::i;:::-;29056:7;29023:18;:41::i;:::-;29015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:28;29141:4;29147:2;29151:7;29131:9;:28::i;:::-;28828:339;;;:::o;39118:39::-;;;;:::o;45732:101::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45819:6:::1;45801:15;;:24;;;;;;;;;;;;;;;;;;45732:101:::0;:::o;44964:145::-;45011:7;45032;:5;:7::i;:::-;45024:21;;45053;45024:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45010:69;;;45098:2;45090:11;;;;;;44999:110;44964:145::o;29238:185::-;29376:39;29393:4;29399:2;29403:7;29376:39;;;;;;;;;;;;:16;:39::i;:::-;29238:185;;;:::o;42381:687::-;42441:16;42470:23;42496:17;42506:6;42496:9;:17::i;:::-;42470:43;;42524:30;42571:15;42557:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42524:63;;42600:22;42625:1;42600:26;;42637:23;42677:351;42702:15;42684;:33;:64;;;;;42739:9;;42721:14;:27;;42684:64;42677:351;;;42765:25;42793:23;42801:14;42793:7;:23::i;:::-;42765:51;;42858:6;42837:27;;:17;:27;;;42833:151;;;42918:14;42885:13;42899:15;42885:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;42951:17;;;;;:::i;:::-;;;;42833:151;43000:16;;;;;:::i;:::-;;;;42750:278;42677:351;;;43047:13;43040:20;;;;;;42381:687;;;:::o;45873:113::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45974:4:::1;45940:24;:31;45965:5;45940:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;45873:113:::0;:::o;44462:138::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44574:18:::1;44554:17;:38;;;;;;;;;;;;:::i;:::-;;44462:138:::0;:::o;39618:28::-;;;;;;;;;;;;;:::o;39020:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39511:26::-;;;;;;;;;;;;;:::o;38931:82::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26213:239::-;26285:7;26305:13;26321:7;:16;26329:7;26321:16;;;;;;;;;;;;;;;;;;;;;26305:32;;26373:1;26356:19;;:5;:19;;;;26348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:5;26432:12;;;26213:239;;;:::o;43695:100::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43782:5:::1;43765:14;:22;;;;43695:100:::0;:::o;39345:44::-;;;;:::o;25943:208::-;26015:7;26060:1;26043:19;;:5;:19;;;;26035:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:9;:16;26137:5;26127:16;;;;;;;;;;;;;;;;26120:23;;25943:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;44179:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44267:10:::1;44255:9;:22;;;;;;;;;;;;:::i;:::-;;44179:106:::0;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;43569:94::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43650:5:::1;43636:11;:19;;;;43569:94:::0;:::o;39164:42::-;;;;:::o;39451:37::-;;;;:::o;26688:104::-;26744:13;26777:7;26770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26688:104;:::o;46330:143::-;46389:4;46413:24;:31;46438:5;46413:31;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46458:7;:5;:7::i;:::-;46449:16;;:5;:16;;;46413:52;46406:59;;46330:143;;;:::o;39577:34::-;;;;;;;;;;;;;:::o;41152:465::-;41217:11;40174:4;40163:15;;:7;;;;;;;;;;;:15;;;40160:630;;;40217:4;40198:23;;:15;;;;;;;;;;;:23;;;40195:129;;;40250:25;40264:10;40250:13;:25::i;:::-;40242:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40195:129;40340:24;40367:27;:39;40395:10;40367:39;;;;;;;;;;;;;;;;40340:66;;40463:25;;40448:11;40429:16;:30;;;;:::i;:::-;:59;;40421:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;40180:370;40160:630;;;40571:24;40598:30;:42;40629:10;40598:42;;;;;;;;;;;;;;;;40571:69;;40697:28;;40682:11;40663:16;:30;;;;:::i;:::-;:62;;40655:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;40556:234;40160:630;40824:1;40810:11;:15;:52;;;;;40844:18;;40829:11;:33;;40810:52;40802:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40944:14;;40929:11;40910:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;40902:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41250:6:::1;;;;;;;;;;;41249:7;41241:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41323:4;41312:15;;:7;;;;;;;;;;;:15;;;41309:231;;;41379:11;41365;;:25;;;;:::i;:::-;41352:9;:38;;41344:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;41309:231;;;41489:11;41472:14;;:28;;;;:::i;:::-;41459:9;:41;;41451:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41309:231;41552:34;41562:10;41574:11;41552:9;:34::i;:::-;41599:10;:8;:10::i;:::-;41152:465:::0;;:::o;28371:155::-;28466:52;28485:12;:10;:12::i;:::-;28499:8;28509;28466:18;:52::i;:::-;28371:155;;:::o;39060:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43848:128::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43963:5:::1;43932:28;:36;;;;43848:128:::0;:::o;29494:328::-;29669:41;29688:12;:10;:12::i;:::-;29702:7;29669:18;:41::i;:::-;29661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29775:39;29789:4;29795:2;29799:7;29808:5;29775:13;:39::i;:::-;29494:328;;;;:::o;39396:48::-;;;;:::o;45994:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46081:9:::1;46076:112;46098:6;:13;46095:1;:16;46076:112;;;46171:4;46133:24;:35;46158:6;46165:1;46158:9;;;;;;;;:::i;:::-;;;;;;;;46133:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;46113:3;;;;;:::i;:::-;;;;46076:112;;;;45994:201:::0;:::o;44738:85::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44809:6:::1;44799:7;;:16;;;;;;;;;;;;;;;;;;44738:85:::0;:::o;43094:446::-;43168:13;43202:17;43210:8;43202:7;:17::i;:::-;43194:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43289:5;43277:17;;:8;;;;;;;;;;;:17;;;43273:74;;;43318:17;43311:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43273:74;43359:28;43390:10;:8;:10::i;:::-;43359:41;;43451:1;43426:14;43420:28;:32;:112;;;;;;;;;;;;;;;;;43479:14;43495:19;:8;:17;:19::i;:::-;43516:9;43462:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43420:112;43413:119;;;43094:446;;;;:::o;39232:30::-;;;;:::o;41826:352::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41908:6:::1;;;;;;;;;;;41907:7;41899:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41959:31;41969:10;41981:8;41959:9;:31::i;:::-;42017:4;42006:15;;:7;;;;;;;;;;;:15;;;42003:168;;;42038:30;:42;42069:10;42038:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;42003:168;;;42115:30;:42;42146:10;42115:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;42003:168;41826:352:::0;:::o;44852:87::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44925:6:::1;44914:8;;:17;;;;;;;;;;;;;;;;;;44852:87:::0;:::o;44026:122::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44135:5:::1;44107:25;:33;;;;44026:122:::0;:::o;28597:164::-;28694:4;28718:18;:25;28737:5;28718:25;;;;;;;;;;;;;;;:35;28744:8;28718:35;;;;;;;;;;;;;;;;;;;;;;;;;28711:42;;28597:164;;;;:::o;39269:35::-;;;;:::o;42188:161::-;42274:11;40174:4;40163:15;;:7;;;;;;;;;;;:15;;;40160:630;;;40217:4;40198:23;;:15;;;;;;;;;;;:23;;;40195:129;;;40250:25;40264:10;40250:13;:25::i;:::-;40242:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40195:129;40340:24;40367:27;:39;40395:10;40367:39;;;;;;;;;;;;;;;;40340:66;;40463:25;;40448:11;40429:16;:30;;;;:::i;:::-;:59;;40421:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;40180:370;40160:630;;;40571:24;40598:30;:42;40629:10;40598:42;;;;;;;;;;;;;;;;40571:69;;40697:28;;40682:11;40663:16;:30;;;;:::i;:::-;:62;;40655:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;40556:234;40160:630;40824:1;40810:11;:15;:52;;;;;40844:18;;40829:11;:33;;40810:52;40802:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40944:14;;40929:11;40910:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;40902:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5775:12:::1;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:33:::2;42318:9;42329:11;42308:9;:33::i;:::-;42188:161:::0;;;:::o;41648:170::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41725:6:::1;;;;;;;;;;;41724:7;41716:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41776:34;41786:10;41798:11;41776:9;:34::i;:::-;41648:170:::0;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;39772:62::-;;;;;;;;;;;;;;;;;:::o;39683:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;39544:26::-;;;;;;;;;;;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;18328:157::-;18413:4;18452:25;18437:40;;;:11;:40;;;;18430:47;;18328:157;;;:::o;31332:127::-;31397:4;31449:1;31421:30;;:7;:16;31429:7;31421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31414:37;;31332:127;;;:::o;35478:174::-;35580:2;35553:15;:24;35569:7;35553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35636:7;35632:2;35598:46;;35607:23;35622:7;35607:14;:23::i;:::-;35598:46;;;;;;;;;;;;35478:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;31626:348::-;31719:4;31744:16;31752:7;31744;:16::i;:::-;31736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:13;31836:23;31851:7;31836:14;:23::i;:::-;31820:39;;31889:5;31878:16;;:7;:16;;;:51;;;;31922:7;31898:31;;:20;31910:7;31898:11;:20::i;:::-;:31;;;31878:51;:87;;;;31933:32;31950:5;31957:7;31933:16;:32::i;:::-;31878:87;31870:96;;;31626:348;;;;:::o;34735:625::-;34894:4;34867:31;;:23;34882:7;34867:14;:23::i;:::-;:31;;;34859:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34959:16;;:2;:16;;;;34951:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:39;35050:4;35056:2;35060:7;35029:20;:39::i;:::-;35133:29;35150:1;35154:7;35133:8;:29::i;:::-;35194:1;35175:9;:15;35185:4;35175:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35223:1;35206:9;:13;35216:2;35206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35254:2;35235:7;:16;35243:7;35235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35293:7;35289:2;35274:27;;35283:4;35274:27;;;;;;;;;;;;35314:38;35334:4;35340:2;35344:7;35314:19;:38::i;:::-;34735:625;;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;45135:425::-;45219:9;45214:339;45238:11;45234:1;:15;45214:339;;;45271:18;:6;:16;:18::i;:::-;45306:38;45316:9;45327:16;:6;:14;:16::i;:::-;45306:9;:38::i;:::-;45375:4;45364:15;;:7;;;;;;;;;;;:15;;;45361:181;;;45400:27;:39;45428:10;45400:39;;;;;;;;;;;;;;;;:41;;;;;;;;;:::i;:::-;;;;;;45361:181;;;45482:30;:42;45513:10;45482:42;;;;;;;;;;;;;;;;:44;;;;;;;;;:::i;:::-;;;;;;45361:181;45251:3;;;;;:::i;:::-;;;;45214:339;;;;45135:425;;:::o;35794:315::-;35949:8;35940:17;;:5;:17;;;;35932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:8;35998:18;:25;36017:5;35998:25;;;;;;;;;;;;;;;:35;36024:8;35998:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36082:8;36060:41;;36075:5;36060:41;;;36092:8;36060:41;;;;;;:::i;:::-;;;;;;;;35794:315;;;:::o;30704:::-;30861:28;30871:4;30877:2;30881:7;30861:9;:28::i;:::-;30908:48;30931:4;30937:2;30941:7;30950:5;30908:22;:48::i;:::-;30900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:315;;;;:::o;45585:110::-;45645:13;45678:9;45671:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45585:110;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;32316:110::-;32392:26;32402:2;32406:7;32392:26;;;;;;;;;;;;:9;:26::i;:::-;32316:110;;:::o;38045:126::-;;;;:::o;38556:125::-;;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;36674:799::-;36829:4;36850:15;:2;:13;;;:15::i;:::-;36846:620;;;36902:2;36886:36;;;36923:12;:10;:12::i;:::-;36937:4;36943:7;36952:5;36886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37145:1;37128:6;:13;:18;37124:272;;;37171:60;;;;;;;;;;:::i;:::-;;;;;;;;37124:272;37346:6;37340:13;37331:6;37327:2;37323:15;37316:38;36882:529;37019:41;;;37009:51;;;:6;:51;;;;37002:58;;;;;36846:620;37450:4;37443:11;;36674:799;;;;;;;:::o;32653:321::-;32783:18;32789:2;32793:7;32783:5;:18::i;:::-;32834:54;32865:1;32869:2;32873:7;32882:5;32834:22;:54::i;:::-;32812:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32653:321;;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;33310:439::-;33404:1;33390:16;;:2;:16;;;;33382:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:16;33471:7;33463;:16::i;:::-;33462:17;33454:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33525:45;33554:1;33558:2;33562:7;33525:20;:45::i;:::-;33600:1;33583:9;:13;33593:2;33583:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33631:2;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33676:7;33672:2;33651:33;;33668:1;33651:33;;;;;;;;;;;;33697:44;33725:1;33729:2;33733:7;33697:19;:44::i;:::-;33310:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:474::-;9238:6;9246;9295:2;9283:9;9274:7;9270:23;9266:32;9263:119;;;9301:79;;:::i;:::-;9263:119;9421:1;9446:53;9491:7;9482:6;9471:9;9467:22;9446:53;:::i;:::-;9436:63;;9392:117;9548:2;9574:53;9619:7;9610:6;9599:9;9595:22;9574:53;:::i;:::-;9564:63;;9519:118;9170:474;;;;;:::o;9650:179::-;9719:10;9740:46;9782:3;9774:6;9740:46;:::i;:::-;9818:4;9813:3;9809:14;9795:28;;9650:179;;;;:::o;9835:118::-;9922:24;9940:5;9922:24;:::i;:::-;9917:3;9910:37;9835:118;;:::o;9989:732::-;10108:3;10137:54;10185:5;10137:54;:::i;:::-;10207:86;10286:6;10281:3;10207:86;:::i;:::-;10200:93;;10317:56;10367:5;10317:56;:::i;:::-;10396:7;10427:1;10412:284;10437:6;10434:1;10431:13;10412:284;;;10513:6;10507:13;10540:63;10599:3;10584:13;10540:63;:::i;:::-;10533:70;;10626:60;10679:6;10626:60;:::i;:::-;10616:70;;10472:224;10459:1;10456;10452:9;10447:14;;10412:284;;;10416:14;10712:3;10705:10;;10113:608;;;9989:732;;;;:::o;10727:109::-;10808:21;10823:5;10808:21;:::i;:::-;10803:3;10796:34;10727:109;;:::o;10842:360::-;10928:3;10956:38;10988:5;10956:38;:::i;:::-;11010:70;11073:6;11068:3;11010:70;:::i;:::-;11003:77;;11089:52;11134:6;11129:3;11122:4;11115:5;11111:16;11089:52;:::i;:::-;11166:29;11188:6;11166:29;:::i;:::-;11161:3;11157:39;11150:46;;10932:270;10842:360;;;;:::o;11208:364::-;11296:3;11324:39;11357:5;11324:39;:::i;:::-;11379:71;11443:6;11438:3;11379:71;:::i;:::-;11372:78;;11459:52;11504:6;11499:3;11492:4;11485:5;11481:16;11459:52;:::i;:::-;11536:29;11558:6;11536:29;:::i;:::-;11531:3;11527:39;11520:46;;11300:272;11208:364;;;;:::o;11578:377::-;11684:3;11712:39;11745:5;11712:39;:::i;:::-;11767:89;11849:6;11844:3;11767:89;:::i;:::-;11760:96;;11865:52;11910:6;11905:3;11898:4;11891:5;11887:16;11865:52;:::i;:::-;11942:6;11937:3;11933:16;11926:23;;11688:267;11578:377;;;;:::o;11985:845::-;12088:3;12125:5;12119:12;12154:36;12180:9;12154:36;:::i;:::-;12206:89;12288:6;12283:3;12206:89;:::i;:::-;12199:96;;12326:1;12315:9;12311:17;12342:1;12337:137;;;;12488:1;12483:341;;;;12304:520;;12337:137;12421:4;12417:9;12406;12402:25;12397:3;12390:38;12457:6;12452:3;12448:16;12441:23;;12337:137;;12483:341;12550:38;12582:5;12550:38;:::i;:::-;12610:1;12624:154;12638:6;12635:1;12632:13;12624:154;;;12712:7;12706:14;12702:1;12697:3;12693:11;12686:35;12762:1;12753:7;12749:15;12738:26;;12660:4;12657:1;12653:12;12648:17;;12624:154;;;12807:6;12802:3;12798:16;12791:23;;12490:334;;12304:520;;12092:738;;11985:845;;;;:::o;12836:366::-;12978:3;12999:67;13063:2;13058:3;12999:67;:::i;:::-;12992:74;;13075:93;13164:3;13075:93;:::i;:::-;13193:2;13188:3;13184:12;13177:19;;12836:366;;;:::o;13208:::-;13350:3;13371:67;13435:2;13430:3;13371:67;:::i;:::-;13364:74;;13447:93;13536:3;13447:93;:::i;:::-;13565:2;13560:3;13556:12;13549:19;;13208:366;;;:::o;13580:::-;13722:3;13743:67;13807:2;13802:3;13743:67;:::i;:::-;13736:74;;13819:93;13908:3;13819:93;:::i;:::-;13937:2;13932:3;13928:12;13921:19;;13580:366;;;:::o;13952:::-;14094:3;14115:67;14179:2;14174:3;14115:67;:::i;:::-;14108:74;;14191:93;14280:3;14191:93;:::i;:::-;14309:2;14304:3;14300:12;14293:19;;13952:366;;;:::o;14324:::-;14466:3;14487:67;14551:2;14546:3;14487:67;:::i;:::-;14480:74;;14563:93;14652:3;14563:93;:::i;:::-;14681:2;14676:3;14672:12;14665:19;;14324:366;;;:::o;14696:::-;14838:3;14859:67;14923:2;14918:3;14859:67;:::i;:::-;14852:74;;14935:93;15024:3;14935:93;:::i;:::-;15053:2;15048:3;15044:12;15037:19;;14696:366;;;:::o;15068:::-;15210:3;15231:67;15295:2;15290:3;15231:67;:::i;:::-;15224:74;;15307:93;15396:3;15307:93;:::i;:::-;15425:2;15420:3;15416:12;15409:19;;15068:366;;;:::o;15440:::-;15582:3;15603:67;15667:2;15662:3;15603:67;:::i;:::-;15596:74;;15679:93;15768:3;15679:93;:::i;:::-;15797:2;15792:3;15788:12;15781:19;;15440:366;;;:::o;15812:::-;15954:3;15975:67;16039:2;16034:3;15975:67;:::i;:::-;15968:74;;16051:93;16140:3;16051:93;:::i;:::-;16169:2;16164:3;16160:12;16153:19;;15812:366;;;:::o;16184:::-;16326:3;16347:67;16411:2;16406:3;16347:67;:::i;:::-;16340:74;;16423:93;16512:3;16423:93;:::i;:::-;16541:2;16536:3;16532:12;16525:19;;16184:366;;;:::o;16556:::-;16698:3;16719:67;16783:2;16778:3;16719:67;:::i;:::-;16712:74;;16795:93;16884:3;16795:93;:::i;:::-;16913:2;16908:3;16904:12;16897:19;;16556:366;;;:::o;16928:::-;17070:3;17091:67;17155:2;17150:3;17091:67;:::i;:::-;17084:74;;17167:93;17256:3;17167:93;:::i;:::-;17285:2;17280:3;17276:12;17269:19;;16928:366;;;:::o;17300:::-;17442:3;17463:67;17527:2;17522:3;17463:67;:::i;:::-;17456:74;;17539:93;17628:3;17539:93;:::i;:::-;17657:2;17652:3;17648:12;17641:19;;17300:366;;;:::o;17672:::-;17814:3;17835:67;17899:2;17894:3;17835:67;:::i;:::-;17828:74;;17911:93;18000:3;17911:93;:::i;:::-;18029:2;18024:3;18020:12;18013:19;;17672:366;;;:::o;18044:::-;18186:3;18207:67;18271:2;18266:3;18207:67;:::i;:::-;18200:74;;18283:93;18372:3;18283:93;:::i;:::-;18401:2;18396:3;18392:12;18385:19;;18044:366;;;:::o;18416:::-;18558:3;18579:67;18643:2;18638:3;18579:67;:::i;:::-;18572:74;;18655:93;18744:3;18655:93;:::i;:::-;18773:2;18768:3;18764:12;18757:19;;18416:366;;;:::o;18788:::-;18930:3;18951:67;19015:2;19010:3;18951:67;:::i;:::-;18944:74;;19027:93;19116:3;19027:93;:::i;:::-;19145:2;19140:3;19136:12;19129:19;;18788:366;;;:::o;19160:::-;19302:3;19323:67;19387:2;19382:3;19323:67;:::i;:::-;19316:74;;19399:93;19488:3;19399:93;:::i;:::-;19517:2;19512:3;19508:12;19501:19;;19160:366;;;:::o;19532:::-;19674:3;19695:67;19759:2;19754:3;19695:67;:::i;:::-;19688:74;;19771:93;19860:3;19771:93;:::i;:::-;19889:2;19884:3;19880:12;19873:19;;19532:366;;;:::o;19904:::-;20046:3;20067:67;20131:2;20126:3;20067:67;:::i;:::-;20060:74;;20143:93;20232:3;20143:93;:::i;:::-;20261:2;20256:3;20252:12;20245:19;;19904:366;;;:::o;20276:398::-;20435:3;20456:83;20537:1;20532:3;20456:83;:::i;:::-;20449:90;;20548:93;20637:3;20548:93;:::i;:::-;20666:1;20661:3;20657:11;20650:18;;20276:398;;;:::o;20680:366::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:::-;21194:3;21215:67;21279:2;21274:3;21215:67;:::i;:::-;21208:74;;21291:93;21380:3;21291:93;:::i;:::-;21409:2;21404:3;21400:12;21393:19;;21052:366;;;:::o;21424:::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:108::-;21873:24;21891:5;21873:24;:::i;:::-;21868:3;21861:37;21796:108;;:::o;21910:118::-;21997:24;22015:5;21997:24;:::i;:::-;21992:3;21985:37;21910:118;;:::o;22034:589::-;22259:3;22281:95;22372:3;22363:6;22281:95;:::i;:::-;22274:102;;22393:95;22484:3;22475:6;22393:95;:::i;:::-;22386:102;;22505:92;22593:3;22584:6;22505:92;:::i;:::-;22498:99;;22614:3;22607:10;;22034:589;;;;;;:::o;22629:379::-;22813:3;22835:147;22978:3;22835:147;:::i;:::-;22828:154;;22999:3;22992:10;;22629:379;;;:::o;23014:222::-;23107:4;23145:2;23134:9;23130:18;23122:26;;23158:71;23226:1;23215:9;23211:17;23202:6;23158:71;:::i;:::-;23014:222;;;;:::o;23242:640::-;23437:4;23475:3;23464:9;23460:19;23452:27;;23489:71;23557:1;23546:9;23542:17;23533:6;23489:71;:::i;:::-;23570:72;23638:2;23627:9;23623:18;23614:6;23570:72;:::i;:::-;23652;23720:2;23709:9;23705:18;23696:6;23652:72;:::i;:::-;23771:9;23765:4;23761:20;23756:2;23745:9;23741:18;23734:48;23799:76;23870:4;23861:6;23799:76;:::i;:::-;23791:84;;23242:640;;;;;;;:::o;23888:373::-;24031:4;24069:2;24058:9;24054:18;24046:26;;24118:9;24112:4;24108:20;24104:1;24093:9;24089:17;24082:47;24146:108;24249:4;24240:6;24146:108;:::i;:::-;24138:116;;23888:373;;;;:::o;24267:210::-;24354:4;24392:2;24381:9;24377:18;24369:26;;24405:65;24467:1;24456:9;24452:17;24443:6;24405:65;:::i;:::-;24267:210;;;;:::o;24483:313::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:78;24784:4;24775:6;24711:78;:::i;:::-;24703:86;;24483:313;;;;:::o;24802:419::-;24968:4;25006:2;24995:9;24991:18;24983:26;;25055:9;25049:4;25045:20;25041:1;25030:9;25026:17;25019:47;25083:131;25209:4;25083:131;:::i;:::-;25075:139;;24802:419;;;:::o;25227:::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:::-;25818:4;25856:2;25845:9;25841:18;25833:26;;25905:9;25899:4;25895:20;25891:1;25880:9;25876:17;25869:47;25933:131;26059:4;25933:131;:::i;:::-;25925:139;;25652:419;;;:::o;26077:::-;26243:4;26281:2;26270:9;26266:18;26258:26;;26330:9;26324:4;26320:20;26316:1;26305:9;26301:17;26294:47;26358:131;26484:4;26358:131;:::i;:::-;26350:139;;26077:419;;;:::o;26502:::-;26668:4;26706:2;26695:9;26691:18;26683:26;;26755:9;26749:4;26745:20;26741:1;26730:9;26726:17;26719:47;26783:131;26909:4;26783:131;:::i;:::-;26775:139;;26502:419;;;:::o;26927:::-;27093:4;27131:2;27120:9;27116:18;27108:26;;27180:9;27174:4;27170:20;27166:1;27155:9;27151:17;27144:47;27208:131;27334:4;27208:131;:::i;:::-;27200:139;;26927:419;;;:::o;27352:::-;27518:4;27556:2;27545:9;27541:18;27533:26;;27605:9;27599:4;27595:20;27591:1;27580:9;27576:17;27569:47;27633:131;27759:4;27633:131;:::i;:::-;27625:139;;27352:419;;;:::o;27777:::-;27943:4;27981:2;27970:9;27966:18;27958:26;;28030:9;28024:4;28020:20;28016:1;28005:9;28001:17;27994:47;28058:131;28184:4;28058:131;:::i;:::-;28050:139;;27777:419;;;:::o;28202:::-;28368:4;28406:2;28395:9;28391:18;28383:26;;28455:9;28449:4;28445:20;28441:1;28430:9;28426:17;28419:47;28483:131;28609:4;28483:131;:::i;:::-;28475:139;;28202:419;;;:::o;28627:::-;28793:4;28831:2;28820:9;28816:18;28808:26;;28880:9;28874:4;28870:20;28866:1;28855:9;28851:17;28844:47;28908:131;29034:4;28908:131;:::i;:::-;28900:139;;28627:419;;;:::o;29052:::-;29218:4;29256:2;29245:9;29241:18;29233:26;;29305:9;29299:4;29295:20;29291:1;29280:9;29276:17;29269:47;29333:131;29459:4;29333:131;:::i;:::-;29325:139;;29052:419;;;:::o;29477:::-;29643:4;29681:2;29670:9;29666:18;29658:26;;29730:9;29724:4;29720:20;29716:1;29705:9;29701:17;29694:47;29758:131;29884:4;29758:131;:::i;:::-;29750:139;;29477:419;;;:::o;29902:::-;30068:4;30106:2;30095:9;30091:18;30083:26;;30155:9;30149:4;30145:20;30141:1;30130:9;30126:17;30119:47;30183:131;30309:4;30183:131;:::i;:::-;30175:139;;29902:419;;;:::o;30327:::-;30493:4;30531:2;30520:9;30516:18;30508:26;;30580:9;30574:4;30570:20;30566:1;30555:9;30551:17;30544:47;30608:131;30734:4;30608:131;:::i;:::-;30600:139;;30327:419;;;:::o;30752:::-;30918:4;30956:2;30945:9;30941:18;30933:26;;31005:9;30999:4;30995:20;30991:1;30980:9;30976:17;30969:47;31033:131;31159:4;31033:131;:::i;:::-;31025:139;;30752:419;;;:::o;31177:::-;31343:4;31381:2;31370:9;31366:18;31358:26;;31430:9;31424:4;31420:20;31416:1;31405:9;31401:17;31394:47;31458:131;31584:4;31458:131;:::i;:::-;31450:139;;31177:419;;;:::o;31602:::-;31768:4;31806:2;31795:9;31791:18;31783:26;;31855:9;31849:4;31845:20;31841:1;31830:9;31826:17;31819:47;31883:131;32009:4;31883:131;:::i;:::-;31875:139;;31602:419;;;:::o;32027:::-;32193:4;32231:2;32220:9;32216:18;32208:26;;32280:9;32274:4;32270:20;32266:1;32255:9;32251:17;32244:47;32308:131;32434:4;32308:131;:::i;:::-;32300:139;;32027:419;;;:::o;32452:::-;32618:4;32656:2;32645:9;32641:18;32633:26;;32705:9;32699:4;32695:20;32691:1;32680:9;32676:17;32669:47;32733:131;32859:4;32733:131;:::i;:::-;32725:139;;32452:419;;;:::o;32877:::-;33043:4;33081:2;33070:9;33066:18;33058:26;;33130:9;33124:4;33120:20;33116:1;33105:9;33101:17;33094:47;33158:131;33284:4;33158:131;:::i;:::-;33150:139;;32877:419;;;:::o;33302:::-;33468:4;33506:2;33495:9;33491:18;33483:26;;33555:9;33549:4;33545:20;33541:1;33530:9;33526:17;33519:47;33583:131;33709:4;33583:131;:::i;:::-;33575:139;;33302:419;;;:::o;33727:::-;33893:4;33931:2;33920:9;33916:18;33908:26;;33980:9;33974:4;33970:20;33966:1;33955:9;33951:17;33944:47;34008:131;34134:4;34008:131;:::i;:::-;34000:139;;33727:419;;;:::o;34152:::-;34318:4;34356:2;34345:9;34341:18;34333:26;;34405:9;34399:4;34395:20;34391:1;34380:9;34376:17;34369:47;34433:131;34559:4;34433:131;:::i;:::-;34425:139;;34152:419;;;:::o;34577:222::-;34670:4;34708:2;34697:9;34693:18;34685:26;;34721:71;34789:1;34778:9;34774:17;34765:6;34721:71;:::i;:::-;34577:222;;;;:::o;34805:129::-;34839:6;34866:20;;:::i;:::-;34856:30;;34895:33;34923:4;34915:6;34895:33;:::i;:::-;34805:129;;;:::o;34940:75::-;34973:6;35006:2;35000:9;34990:19;;34940:75;:::o;35021:311::-;35098:4;35188:18;35180:6;35177:30;35174:56;;;35210:18;;:::i;:::-;35174:56;35260:4;35252:6;35248:17;35240:25;;35320:4;35314;35310:15;35302:23;;35021:311;;;:::o;35338:307::-;35399:4;35489:18;35481:6;35478:30;35475:56;;;35511:18;;:::i;:::-;35475:56;35549:29;35571:6;35549:29;:::i;:::-;35541:37;;35633:4;35627;35623:15;35615:23;;35338:307;;;:::o;35651:308::-;35713:4;35803:18;35795:6;35792:30;35789:56;;;35825:18;;:::i;:::-;35789:56;35863:29;35885:6;35863:29;:::i;:::-;35855:37;;35947:4;35941;35937:15;35929:23;;35651:308;;;:::o;35965:132::-;36032:4;36055:3;36047:11;;36085:4;36080:3;36076:14;36068:22;;35965:132;;;:::o;36103:141::-;36152:4;36175:3;36167:11;;36198:3;36195:1;36188:14;36232:4;36229:1;36219:18;36211:26;;36103:141;;;:::o;36250:114::-;36317:6;36351:5;36345:12;36335:22;;36250:114;;;:::o;36370:98::-;36421:6;36455:5;36449:12;36439:22;;36370:98;;;:::o;36474:99::-;36526:6;36560:5;36554:12;36544:22;;36474:99;;;:::o;36579:113::-;36649:4;36681;36676:3;36672:14;36664:22;;36579:113;;;:::o;36698:184::-;36797:11;36831:6;36826:3;36819:19;36871:4;36866:3;36862:14;36847:29;;36698:184;;;;:::o;36888:168::-;36971:11;37005:6;37000:3;36993:19;37045:4;37040:3;37036:14;37021:29;;36888:168;;;;:::o;37062:147::-;37163:11;37200:3;37185:18;;37062:147;;;;:::o;37215:169::-;37299:11;37333:6;37328:3;37321:19;37373:4;37368:3;37364:14;37349:29;;37215:169;;;;:::o;37390:148::-;37492:11;37529:3;37514:18;;37390:148;;;;:::o;37544:305::-;37584:3;37603:20;37621:1;37603:20;:::i;:::-;37598:25;;37637:20;37655:1;37637:20;:::i;:::-;37632:25;;37791:1;37723:66;37719:74;37716:1;37713:81;37710:107;;;37797:18;;:::i;:::-;37710:107;37841:1;37838;37834:9;37827:16;;37544:305;;;;:::o;37855:185::-;37895:1;37912:20;37930:1;37912:20;:::i;:::-;37907:25;;37946:20;37964:1;37946:20;:::i;:::-;37941:25;;37985:1;37975:35;;37990:18;;:::i;:::-;37975:35;38032:1;38029;38025:9;38020:14;;37855:185;;;;:::o;38046:348::-;38086:7;38109:20;38127:1;38109:20;:::i;:::-;38104:25;;38143:20;38161:1;38143:20;:::i;:::-;38138:25;;38331:1;38263:66;38259:74;38256:1;38253:81;38248:1;38241:9;38234:17;38230:105;38227:131;;;38338:18;;:::i;:::-;38227:131;38386:1;38383;38379:9;38368:20;;38046:348;;;;:::o;38400:191::-;38440:4;38460:20;38478:1;38460:20;:::i;:::-;38455:25;;38494:20;38512:1;38494:20;:::i;:::-;38489:25;;38533:1;38530;38527:8;38524:34;;;38538:18;;:::i;:::-;38524:34;38583:1;38580;38576:9;38568:17;;38400:191;;;;:::o;38597:96::-;38634:7;38663:24;38681:5;38663:24;:::i;:::-;38652:35;;38597:96;;;:::o;38699:90::-;38733:7;38776:5;38769:13;38762:21;38751:32;;38699:90;;;:::o;38795:149::-;38831:7;38871:66;38864:5;38860:78;38849:89;;38795:149;;;:::o;38950:126::-;38987:7;39027:42;39020:5;39016:54;39005:65;;38950:126;;;:::o;39082:77::-;39119:7;39148:5;39137:16;;39082:77;;;:::o;39165:154::-;39249:6;39244:3;39239;39226:30;39311:1;39302:6;39297:3;39293:16;39286:27;39165:154;;;:::o;39325:307::-;39393:1;39403:113;39417:6;39414:1;39411:13;39403:113;;;39502:1;39497:3;39493:11;39487:18;39483:1;39478:3;39474:11;39467:39;39439:2;39436:1;39432:10;39427:15;;39403:113;;;39534:6;39531:1;39528:13;39525:101;;;39614:1;39605:6;39600:3;39596:16;39589:27;39525:101;39374:258;39325:307;;;:::o;39638:320::-;39682:6;39719:1;39713:4;39709:12;39699:22;;39766:1;39760:4;39756:12;39787:18;39777:81;;39843:4;39835:6;39831:17;39821:27;;39777:81;39905:2;39897:6;39894:14;39874:18;39871:38;39868:84;;;39924:18;;:::i;:::-;39868:84;39689:269;39638:320;;;:::o;39964:281::-;40047:27;40069:4;40047:27;:::i;:::-;40039:6;40035:40;40177:6;40165:10;40162:22;40141:18;40129:10;40126:34;40123:62;40120:88;;;40188:18;;:::i;:::-;40120:88;40228:10;40224:2;40217:22;40007:238;39964:281;;:::o;40251:233::-;40290:3;40313:24;40331:5;40313:24;:::i;:::-;40304:33;;40359:66;40352:5;40349:77;40346:103;;;40429:18;;:::i;:::-;40346:103;40476:1;40469:5;40465:13;40458:20;;40251:233;;;:::o;40490:176::-;40522:1;40539:20;40557:1;40539:20;:::i;:::-;40534:25;;40573:20;40591:1;40573:20;:::i;:::-;40568:25;;40612:1;40602:35;;40617:18;;:::i;:::-;40602:35;40658:1;40655;40651:9;40646:14;;40490:176;;;;:::o;40672:180::-;40720:77;40717:1;40710:88;40817:4;40814:1;40807:15;40841:4;40838:1;40831:15;40858:180;40906:77;40903:1;40896:88;41003:4;41000:1;40993:15;41027:4;41024:1;41017:15;41044:180;41092:77;41089:1;41082:88;41189:4;41186:1;41179:15;41213:4;41210:1;41203:15;41230:180;41278:77;41275:1;41268:88;41375:4;41372:1;41365:15;41399:4;41396:1;41389:15;41416:180;41464:77;41461:1;41454:88;41561:4;41558:1;41551:15;41585:4;41582:1;41575:15;41602:117;41711:1;41708;41701:12;41725:117;41834:1;41831;41824:12;41848:117;41957:1;41954;41947:12;41971:117;42080:1;42077;42070:12;42094:117;42203:1;42200;42193:12;42217:102;42258:6;42309:2;42305:7;42300:2;42293:5;42289:14;42285:28;42275:38;;42217:102;;;:::o;42325:178::-;42465:30;42461:1;42453:6;42449:14;42442:54;42325:178;:::o;42509:237::-;42649:34;42645:1;42637:6;42633:14;42626:58;42718:20;42713:2;42705:6;42701:15;42694:45;42509:237;:::o;42752:225::-;42892:34;42888:1;42880:6;42876:14;42869:58;42961:8;42956:2;42948:6;42944:15;42937:33;42752:225;:::o;42983:224::-;43123:34;43119:1;43111:6;43107:14;43100:58;43192:7;43187:2;43179:6;43175:15;43168:32;42983:224;:::o;43213:178::-;43353:30;43349:1;43341:6;43337:14;43330:54;43213:178;:::o;43397:177::-;43537:29;43533:1;43525:6;43521:14;43514:53;43397:177;:::o;43580:223::-;43720:34;43716:1;43708:6;43704:14;43697:58;43789:6;43784:2;43776:6;43772:15;43765:31;43580:223;:::o;43809:175::-;43949:27;43945:1;43937:6;43933:14;43926:51;43809:175;:::o;43990:231::-;44130:34;44126:1;44118:6;44114:14;44107:58;44199:14;44194:2;44186:6;44182:15;44175:39;43990:231;:::o;44227:243::-;44367:34;44363:1;44355:6;44351:14;44344:58;44436:26;44431:2;44423:6;44419:15;44412:51;44227:243;:::o;44476:229::-;44616:34;44612:1;44604:6;44600:14;44593:58;44685:12;44680:2;44672:6;44668:15;44661:37;44476:229;:::o;44711:228::-;44851:34;44847:1;44839:6;44835:14;44828:58;44920:11;44915:2;44907:6;44903:15;44896:36;44711:228;:::o;44945:182::-;45085:34;45081:1;45073:6;45069:14;45062:58;44945:182;:::o;45133:232::-;45273:34;45269:1;45261:6;45257:14;45250:58;45342:15;45337:2;45329:6;45325:15;45318:40;45133:232;:::o;45371:231::-;45511:34;45507:1;45499:6;45495:14;45488:58;45580:14;45575:2;45567:6;45563:15;45556:39;45371:231;:::o;45608:173::-;45748:25;45744:1;45736:6;45732:14;45725:49;45608:173;:::o;45787:182::-;45927:34;45923:1;45915:6;45911:14;45904:58;45787:182;:::o;45975:174::-;46115:26;46111:1;46103:6;46099:14;46092:50;45975:174;:::o;46155:223::-;46295:34;46291:1;46283:6;46279:14;46272:58;46364:6;46359:2;46351:6;46347:15;46340:31;46155:223;:::o;46384:220::-;46524:34;46520:1;46512:6;46508:14;46501:58;46593:3;46588:2;46580:6;46576:15;46569:28;46384:220;:::o;46610:114::-;;:::o;46730:236::-;46870:34;46866:1;46858:6;46854:14;46847:58;46939:19;46934:2;46926:6;46922:15;46915:44;46730:236;:::o;46972:235::-;47112:34;47108:1;47100:6;47096:14;47089:58;47181:18;47176:2;47168:6;47164:15;47157:43;46972:235;:::o;47213:174::-;47353:26;47349:1;47341:6;47337:14;47330:50;47213:174;:::o;47393:122::-;47466:24;47484:5;47466:24;:::i;:::-;47459:5;47456:35;47446:63;;47505:1;47502;47495:12;47446:63;47393:122;:::o;47521:116::-;47591:21;47606:5;47591:21;:::i;:::-;47584:5;47581:32;47571:60;;47627:1;47624;47617:12;47571:60;47521:116;:::o;47643:120::-;47715:23;47732:5;47715:23;:::i;:::-;47708:5;47705:34;47695:62;;47753:1;47750;47743:12;47695:62;47643:120;:::o;47769:122::-;47842:24;47860:5;47842:24;:::i;:::-;47835:5;47832:35;47822:63;;47881:1;47878;47871:12;47822:63;47769:122;:::o
Swarm Source
ipfs://88ceb42487f17ad6d7e859429f3c3f64992458abf1c58a4223f6131f726bd24a
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.