Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
4,166 DRCC NFT
Holders
510
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DurianciClubNFT
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-31 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.13; /** * @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.0 (utils/Context.sol) /** * @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.0 (access/Ownable.sol) /** * @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 v4.4.0 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) /** * @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.0 (utils/introspection/IERC165.sol) /** * @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.0 (utils/introspection/ERC165.sol) /** * @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.0 (token/ERC721/IERC721.sol) /** * @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/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath#mul: OVERFLOW"); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath#div: DIVISION_BY_ZERO"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath#sub: UNDERFLOW"); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath#add: OVERFLOW"); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO"); return a % b; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) /** * @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); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/drcc.sol contract DurianciClubNFT is ERC721Enumerable, Ownable { using Strings for uint256; using SafeMath for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.05 ether; uint256 public maxSupply = 10000; uint256 public phaseSellingLimit1 = 3300; uint256 public phaseSellingLimit2 = 3300; uint256 public phaseSellingLimit3 = 2920; uint256 public totalmint1 = 0; uint256 public totalmint2 = 0; uint256 public totalmint3 = 0; uint256 public presalesMaxToken = 2; bool public paused = false; bool public revealed = false; uint256 private totalReserve = 480; uint256 private reserved = 0; uint256 private sold = 0; uint16 public salesStage = 1; //1-presales1 , 2-presales2 , 3-presales3 , 4-public address payable companyWallet; address private signerAddress = 0xD6321754CdFDd74298F68e79E0c09b93E2dB15d0; mapping(address => uint256) public addressMintedBalance; mapping (uint256 => bool) public reserveNo; mapping(uint256 => uint256) private _presalesPrice; mapping(address => uint256) public presales1minted; // To check how many tokens an address has minted during presales mapping(address => uint256) public presales2minted; // To check how many tokens an address has minted during presales mapping(address => uint256) public presales3minted; // To check how many tokens an address has minted during presales mapping(address => uint256) public presales4minted; // To check how many tokens an address has minted during presales mapping(address => uint256) public minted; // To check how many tokens an address has minted mapping (uint256 => address) public creators; event URI(string _amount, uint256 indexed _id); event CurrentSalesStage(uint indexed _salesstage, uint256 indexed _id); constructor( ) ERC721("Durianci Club NFT", "DRCC NFT") { setBaseURI("https://api.durianci.club/nft/"); setNotRevealedURI("https://api.durianci.club/nft/"); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } /** * @dev Creates a new token type and assigns _initialSupply to an address * NOTE: remove onlyOwner if you want third parties to create new tokens on your contract (which may change your IDs) * @param _initialOwner address of the first owner of the token * @param _initialSupply amount to supply the first owner * @param _uri Optional URI for this token type * @return The newly created token ID */ function reserve( address _initialOwner, uint256 _initialSupply, string memory _uri // bytes memory _data ) public onlyOwner returns (uint256) { require(reserved + _initialSupply <= totalReserve, "Reserve Empty"); sold += _initialSupply; for (uint256 i = 0; i < _initialSupply; i++) { uint256 supply = reserved; reserved++; uint256 _id = reserved; if (bytes(_uri).length > 0) { emit URI(_uri, _id); } creators[_id] = msg.sender; _safeMint(_initialOwner, supply + 1); } return 0; } // Function to receive Ether. msg.data must be empty receive() external payable {} // Fallback function is called when msg.data is not empty fallback() external payable {} function presales( address _initialOwner, uint256 _mintAmount, bytes calldata _sig // bytes calldata _data ) external payable returns (uint256) { require(salesStage == 1 || salesStage == 2 || salesStage == 3, "Presales is closed"); if(salesStage == 1){ require(presales1minted[_initialOwner] + _mintAmount <= presalesMaxToken, "Max 2 Token Per User"); require(totalmint1 + _mintAmount <= phaseSellingLimit1, "phase NFT limit exceeded"); totalmint1 += _mintAmount; }else if(salesStage == 2){ require(presales2minted[_initialOwner] + _mintAmount <= presalesMaxToken, "Max 2 Token Per User"); require(totalmint2 + _mintAmount <= phaseSellingLimit2, "phase NFT limit exceeded"); totalmint2 += _mintAmount; }else if(salesStage == 3){ require(presales3minted[_initialOwner] + _mintAmount <= presalesMaxToken, "Max 2 Token Per User"); require(totalmint3 + _mintAmount <= phaseSellingLimit3, "phase NFT limit exceeded"); totalmint3 += _mintAmount; } uint256 supply = totalSupply().add(totalReserve).sub(reserved); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); require(minted[_initialOwner] + _mintAmount <= maxSupply, "Max Token Per User"); require(isValidData(addressToString(_initialOwner), _sig), addressToString(_initialOwner)); require(msg.value == _mintAmount.mul(cost), "Incorrect msg.value"); sold += _mintAmount; if(salesStage == 1){ presales1minted[_initialOwner] += _mintAmount; }else if(salesStage == 2){ presales2minted[_initialOwner] += _mintAmount; } else if(salesStage == 3){ presales3minted[_initialOwner] += _mintAmount; } minted[_initialOwner] += _mintAmount; for (uint256 i = 0; i < _mintAmount; i++) { uint256 _id = totalSupply().add(totalReserve).add(1).sub(reserved); creators[_id] = _initialOwner; addressMintedBalance[_initialOwner]++; _safeMint(_initialOwner, _id); emit CurrentSalesStage(salesStage, _id); } return 0; } function publicsales( address _initialOwner, uint256 _mintAmount, string calldata _uri // bytes calldata _data ) external payable returns (uint256) { require(salesStage == 4 , "Public Sales Is Closed"); uint256 supply = totalSupply().add(totalReserve).sub(reserved); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); require(presales4minted[_initialOwner] + _mintAmount <= presalesMaxToken, "Max 2 Token Per User"); presales4minted[_initialOwner] += _mintAmount; require(msg.value == _mintAmount.mul(cost), "Incorrect msg.value"); sold += _mintAmount; minted[_initialOwner] += _mintAmount; for (uint256 i = 0; i < _mintAmount; i++) { uint256 _id = totalSupply().add(totalReserve).add(1).sub(reserved); if (bytes(_uri).length > 0) { emit URI(_uri, _id); } creators[_id] = _initialOwner; addressMintedBalance[_initialOwner]++; _safeMint(_initialOwner, _id); emit CurrentSalesStage(salesStage, _id); } return 0; } function setSalesStage( uint16 stage ) public onlyOwner { salesStage = stage; } function setCompanyWallet( address payable newWallet ) public onlyOwner { companyWallet = newWallet; } function ownerMint( address _initialOwner, uint256 _initialSupply, string calldata _uri // bytes calldata _data ) external onlyOwner returns (uint256) { require(sold + _initialSupply <= maxSupply, "Max Token Minted"); sold += _initialSupply; for (uint256 i = 0; i < _initialSupply; i++) { uint256 _id = totalSupply().add(totalReserve).add(1).sub(reserved); if (bytes(_uri).length > 0) { emit URI(_uri, _id); } creators[_id] = msg.sender; addressMintedBalance[_initialOwner]++; _safeMint(_initialOwner, _id); emit CurrentSalesStage(salesStage, _id); } return 0; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner() { revealed = true; } function setPhaseSellingLimit1(uint256 _newAmount) public onlyOwner() { phaseSellingLimit1 = _newAmount; } function setPhaseSellingLimit2(uint256 _newAmount) public onlyOwner() { phaseSellingLimit2 = _newAmount; } function setPhaseSellingLimit3(uint256 _newAmount) public onlyOwner() { phaseSellingLimit3 = _newAmount; } function setNFTPrice(uint256 _newAmount) public onlyOwner() { cost = _newAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } function toBytes(address a) public pure returns (bytes memory b){ assembly { let m := mload(0x40) a := and(a, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) mstore(add(m, 20), xor(0x140000000000000000000000000000000000000000, a)) mstore(0x40, add(m, 52)) b := m } } function addressToString(address _addr) public pure returns(string memory) { bytes32 value = bytes32(uint(uint160(_addr))); bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(42); str[0] = "0"; str[1] = "x"; for (uint i = 0; i < 20; i++) { str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))]; str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))]; } return string(str); } function toAsciiString(address x) public pure returns (string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(x)) / (2**(8*(19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2*i] = char(hi); s[2*i+1] = char(lo); } return string(s); } function char( bytes1 b ) internal pure returns (bytes1 c) { if (uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } function bytes32ToString(bytes32 _bytes32) public pure returns (string memory) { uint8 i = 0; bytes memory bytesArray = new bytes(64); for (i = 0; i < bytesArray.length; i++) { uint8 _f = uint8(_bytes32[i/2] & 0x0f); uint8 _l = uint8(_bytes32[i/2] >> 4); bytesArray[i] = toByte(_f); i = i + 1; bytesArray[i] = toByte(_l); } return string(bytesArray); } function stringToBytes32(string memory source) public pure returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(source); if (tempEmptyStringTest.length == 0) { return 0x0; } assembly { result := mload(add(source, 32)) } } function splitSignature(bytes memory sig) public pure returns (uint8, bytes32, bytes32) { require(sig.length == 65); bytes32 r; bytes32 s; uint8 v; assembly { // first 32 bytes, after the length prefix r := mload(add(sig, 32)) // second 32 bytes s := mload(add(sig, 64)) // final byte (first byte of the next 32 bytes) v := byte(0, mload(add(sig, 96))) } return (v, r, s); } function recoverSigner(bytes32 message, bytes memory sig) public pure returns (address) { uint8 v; bytes32 r; bytes32 s; (v, r, s) = splitSignature(sig); return ecrecover(message, v, r, s); } function isValidData(string memory _word, bytes memory sig) public view returns(bool){ bytes32 message = keccak256(abi.encodePacked(_word)); return (recoverSigner(message, sig) == signerAddress); } function toByte(uint8 _uint8) public pure returns (bytes1) { if(_uint8 < 10) { return bytes1(_uint8 + 48); } else { return bytes1(_uint8 + 87); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_salesstage","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"CurrentSalesStage","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_amount","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addressToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_bytes32","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_word","type":"string"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"isValidData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"ownerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseSellingLimit1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseSellingLimit2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseSellingLimit3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes","name":"_sig","type":"bytes"}],"name":"presales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales1minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales2minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales3minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales4minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalesMaxToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"publicsales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveNo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","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":[],"name":"salesStage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setCompanyWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setNFTPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setPhaseSellingLimit1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setPhaseSellingLimit2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setPhaseSellingLimit3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"stage","type":"uint16"}],"name":"setSalesStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"source","type":"string"}],"name":"stringToBytes32","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"pure","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":"address","name":"x","type":"address"}],"name":"toAsciiString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_uint8","type":"uint8"}],"name":"toByte","outputs":[{"internalType":"bytes1","name":"","type":"bytes1"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"toBytes","outputs":[{"internalType":"bytes","name":"b","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalmint1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalmint2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalmint3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c9190620002e9565b5066b1a2bc2ec50000600e55612710600f55610ce46010819055601155610b68601255600060138190556014819055601581905560026016556017805461ffff199081169091556101e06018556019829055601a91909155601b80549091166001179055601c80546001600160a01b03191673d6321754cdfdd74298f68e79e0c09b93e2db15d0179055348015620000bf57600080fd5b506040805180820182526011815270111d5c9a585b98da4810db1d5888139195607a1b602080830191825283518085019094526008845267111490d0c813919560c21b9084015281519192916200011991600091620002e9565b5080516200012f906001906020840190620002e9565b5050506200014c62000146620001d060201b60201c565b620001d4565b60408051808201909152601e81527f68747470733a2f2f6170692e64757269616e63692e636c75622f6e66742f000060208201526200018b9062000226565b60408051808201909152601e81527f68747470733a2f2f6170692e64757269616e63692e636c75622f6e66742f00006020820152620001ca906200028e565b620003cb565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620002755760405162461bcd60e51b815260206004820181905260248201526000805160206200459383398151915260448201526064015b60405180910390fd5b80516200028a90600b906020840190620002e9565b5050565b600a546001600160a01b03163314620002d95760405162461bcd60e51b815260206004820181905260248201526000805160206200459383398151915260448201526064016200026c565b80516200028a90600d9060208401905b828054620002f7906200038f565b90600052602060002090601f0160209004810192826200031b576000855562000366565b82601f106200033657805160ff191683800117855562000366565b8280016001018555821562000366579182015b828111156200036657825182559160200191906001019062000349565b506200037492915062000378565b5090565b5b8082111562000374576000815560010162000379565b600181811c90821680620003a457607f821691505b602082108103620003c557634e487b7160e01b600052602260045260246000fd5b50919050565b6141b880620003db6000396000f3fe6080604052600436106103c35760003560e01c80636c0360eb116101f0578063ae5733c41161010c578063d4e218e4116100a5578063e985e9c511610077578063e985e9c514610c00578063f2c4ce1e14610c49578063f2fde38b14610c69578063f7debfa014610c89578063fdcfa5d714610c9f57005b8063d4e218e414610b9e578063d5abeb0114610bb4578063d64a3c7c14610bca578063da3ef23f14610be057005b8063c6682862116100de578063c668286214610b13578063c87b56dd14610b28578063cd53d08e14610b48578063cfb5192814610b7e57005b8063ae5733c414610a79578063afef3ea014610aa6578063b88d4fde14610ac6578063bcc7eae914610ae657005b806397aba7f911610189578063a475b5dd1161015b578063a475b5dd146109b6578063a4dcdb16146109cb578063a7bb5803146109e1578063a86b73f014610a20578063adb41f7514610a5957005b806397aba7f9146109405780639d447672146109605780639ffdb39f14610980578063a22cb4651461099657005b806385e578c4116101c257806385e578c4146108cd5780638da5cb5b146108ed5780639201de551461090b57806395d89b411461092b57005b80636c0360eb1461086357806370a0823114610878578063715018a61461089857806381530b68146108ad57005b80632f745c59116102df5780634f6ccce711610278578063593b79fe1161024a578063593b79fe1461079e5780635c975abb146107dd5780635e57966d146107f75780636352211e146108175780636b941a9b1461083757005b80634f6ccce71461071f5780634fda42941461073f578063518302271461075f57806355f804b31461077e57005b80633fffa7e9116102b15780633fffa7e91461069c57806340259dad146106b257806342842e0e146106d2578063438b6300146106f257005b80632f745c59146106415780633c45d3d7146106615780633ccfd60b146106815780633ee8d8101461068957005b80630cd1635d1161035c57806318cae2691161032e57806318cae269146105875780631e7269c5146105b457806323b872dd146105e157806328831187146106015780632c6e75981461062157005b80630cd1635d146104fe5780630f48c6f71461052c57806313faede61461055c57806318160ddd1461057257005b8063081c8c4411610395578063081c8c441461047b5780630823713414610490578063095ea7b3146104cb5780630b8f16f9146104eb57005b806301ffc9a7146103cc57806302329a291461040157806306fdde0314610421578063081812fc1461044357005b366103ca57005b005b3480156103d857600080fd5b506103ec6103e73660046136db565b610cb5565b60405190151581526020015b60405180910390f35b34801561040d57600080fd5b506103ca61041c366004613708565b610ce0565b34801561042d57600080fd5b50610436610d26565b6040516103f8919061377b565b34801561044f57600080fd5b5061046361045e36600461378e565b610db8565b6040516001600160a01b0390911681526020016103f8565b34801561048757600080fd5b50610436610e4d565b34801561049c57600080fd5b506104bd6104ab3660046137bc565b60226020526000908152604090205481565b6040519081526020016103f8565b3480156104d757600080fd5b506103ca6104e63660046137d9565b610edb565b6104bd6104f936600461384e565b610ff0565b34801561050a57600080fd5b50601b546105199061ffff1681565b60405161ffff90911681526020016103f8565b34801561053857600080fd5b506103ec61054736600461378e565b601e6020526000908152604090205460ff1681565b34801561056857600080fd5b506104bd600e5481565b34801561057e57600080fd5b506008546104bd565b34801561059357600080fd5b506104bd6105a23660046137bc565b601d6020526000908152604090205481565b3480156105c057600080fd5b506104bd6105cf3660046137bc565b60246020526000908152604090205481565b3480156105ed57600080fd5b506103ca6105fc3660046138aa565b6115e8565b34801561060d57600080fd5b506103ca61061c3660046137bc565b611619565b34801561062d57600080fd5b5061043661063c3660046137bc565b61166d565b34801561064d57600080fd5b506104bd61065c3660046137d9565b6117b4565b34801561066d57600080fd5b506104bd61067c36600461398e565b61184a565b6103ca611995565b6104bd61069736600461384e565b611a17565b3480156106a857600080fd5b506104bd60145481565b3480156106be57600080fd5b506103ca6106cd3660046139e7565b611d30565b3480156106de57600080fd5b506103ca6106ed3660046138aa565b611d72565b3480156106fe57600080fd5b5061071261070d3660046137bc565b611d8d565b6040516103f89190613a0b565b34801561072b57600080fd5b506104bd61073a36600461378e565b611e2f565b34801561074b57600080fd5b506104bd61075a36600461384e565b611ec2565b34801561076b57600080fd5b506017546103ec90610100900460ff1681565b34801561078a57600080fd5b506103ca610799366004613a4f565b612064565b3480156107aa57600080fd5b506104366107b93660046137bc565b604080516001600160a01b0392909216600560a21b18601483015260348201905290565b3480156107e957600080fd5b506017546103ec9060ff1681565b34801561080357600080fd5b506104366108123660046137bc565b6120a5565b34801561082357600080fd5b5061046361083236600461378e565b612290565b34801561084357600080fd5b506104bd6108523660046137bc565b602080526000908152604090205481565b34801561086f57600080fd5b50610436612307565b34801561088457600080fd5b506104bd6108933660046137bc565b612314565b3480156108a457600080fd5b506103ca61239b565b3480156108b957600080fd5b506103ca6108c836600461378e565b6123d1565b3480156108d957600080fd5b506103ca6108e836600461378e565b612400565b3480156108f957600080fd5b50600a546001600160a01b0316610463565b34801561091757600080fd5b5061043661092636600461378e565b61242f565b34801561093757600080fd5b50610436612555565b34801561094c57600080fd5b5061046361095b366004613a84565b612564565b34801561096c57600080fd5b506103ca61097b36600461378e565b6125e3565b34801561098c57600080fd5b506104bd60105481565b3480156109a257600080fd5b506103ca6109b1366004613acb565b612612565b3480156109c257600080fd5b506103ca61261d565b3480156109d757600080fd5b506104bd60165481565b3480156109ed57600080fd5b50610a016109fc366004613a4f565b612658565b6040805160ff90941684526020840192909252908201526060016103f8565b348015610a2c57600080fd5b50610a40610a3b366004613b00565b612687565b6040516001600160f81b031990911681526020016103f8565b348015610a6557600080fd5b506103ec610a74366004613b23565b6126b9565b348015610a8557600080fd5b506104bd610a943660046137bc565b60236020526000908152604090205481565b348015610ab257600080fd5b506103ca610ac136600461378e565b612710565b348015610ad257600080fd5b506103ca610ae1366004613b7d565b61273f565b348015610af257600080fd5b506104bd610b013660046137bc565b60216020526000908152604090205481565b348015610b1f57600080fd5b50610436612777565b348015610b3457600080fd5b50610436610b4336600461378e565b612784565b348015610b5457600080fd5b50610463610b6336600461378e565b6025602052600090815260409020546001600160a01b031681565b348015610b8a57600080fd5b506104bd610b99366004613a4f565b612907565b348015610baa57600080fd5b506104bd60135481565b348015610bc057600080fd5b506104bd600f5481565b348015610bd657600080fd5b506104bd60155481565b348015610bec57600080fd5b506103ca610bfb366004613a4f565b612926565b348015610c0c57600080fd5b506103ec610c1b366004613be9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610c5557600080fd5b506103ca610c64366004613a4f565b612963565b348015610c7557600080fd5b506103ca610c843660046137bc565b6129a0565b348015610c9557600080fd5b506104bd60115481565b348015610cab57600080fd5b506104bd60125481565b60006001600160e01b0319821663780e9d6360e01b1480610cda5750610cda82612a38565b92915050565b600a546001600160a01b03163314610d135760405162461bcd60e51b8152600401610d0a90613c22565b60405180910390fd5b6017805460ff1916911515919091179055565b606060008054610d3590613c57565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6190613c57565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610e315760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d0a565b506000908152600460205260409020546001600160a01b031690565b600d8054610e5a90613c57565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690613c57565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505081565b6000610ee682612290565b9050806001600160a01b0316836001600160a01b031603610f535760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610d0a565b336001600160a01b0382161480610f6f5750610f6f8133610c1b565b610fe15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610d0a565b610feb8383612a88565b505050565b601b5460009061ffff166001148061100e5750601b5461ffff166002145b8061101f5750601b5461ffff166003145b6110605760405162461bcd60e51b8152602060048201526012602482015271141c995cd85b195cc81a5cc818db1bdcd95960721b6044820152606401610d0a565b601b5461ffff166001036110fe576016546001600160a01b0386166000908152602080526040902054611094908690613ca7565b11156110b25760405162461bcd60e51b8152600401610d0a90613cbf565b601054846013546110c39190613ca7565b11156110e15760405162461bcd60e51b8152600401610d0a90613ced565b83601360008282546110f39190613ca7565b9091555061122c9050565b601b5461ffff16600203611192576016546001600160a01b038616600090815260216020526040902054611133908690613ca7565b11156111515760405162461bcd60e51b8152600401610d0a90613cbf565b601154846014546111629190613ca7565b11156111805760405162461bcd60e51b8152600401610d0a90613ced565b83601460008282546110f39190613ca7565b601b5461ffff1660030361122c576016546001600160a01b0386166000908152602260205260409020546111c7908690613ca7565b11156111e55760405162461bcd60e51b8152600401610d0a90613cbf565b601254846015546111f69190613ca7565b11156112145760405162461bcd60e51b8152600401610d0a90613ced565b83601560008282546112269190613ca7565b90915550505b600061124f60195461124960185461124360085490565b90612af6565b90612b4e565b9050600085116112a15760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610d0a565b600f546112ae8683613ca7565b11156112f55760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610d0a565b600f546001600160a01b03871660009081526024602052604090205461131c908790613ca7565b111561135f5760405162461bcd60e51b815260206004820152601260248201527126b0bc102a37b5b2b7102832b9102ab9b2b960711b6044820152606401610d0a565b6113a761136b876120a5565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126b992505050565b6113b0876120a5565b906113ce5760405162461bcd60e51b8152600401610d0a919061377b565b50600e546113dd908690612bac565b34146114215760405162461bcd60e51b8152602060048201526013602482015272496e636f7272656374206d73672e76616c756560681b6044820152606401610d0a565b84601a60008282546114339190613ca7565b9091555050601b5461ffff16600103611478576001600160a01b03861660009081526020805260408120805487929061146d908490613ca7565b909155506114ea9050565b601b5461ffff166002036114ae576001600160a01b0386166000908152602160205260408120805487929061146d908490613ca7565b601b5461ffff166003036114ea576001600160a01b038616600090815260226020526040812080548792906114e4908490613ca7565b90915550505b6001600160a01b03861660009081526024602052604081208054879290611512908490613ca7565b90915550600090505b858110156115d957600061153f601954611249600161124360185461124360085490565b600081815260256020908152604080832080546001600160a01b0319166001600160a01b038e169081179091558352601d909152812080549293509061158483613d24565b91905055506115938882612c1d565b601b54604051829161ffff16907f722f4a735796e453d35b380f398f80c99d902434d3f8056dd7abff89510dbc5590600090a350806115d181613d24565b91505061151b565b5060009150505b949350505050565b6115f23382612c37565b61160e5760405162461bcd60e51b8152600401610d0a90613d3d565b610feb838383612d2a565b600a546001600160a01b031633146116435760405162461bcd60e51b8152600401610d0a90613c22565b601b80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156117ad5760006116aa826013613d8e565b6116b5906008613da5565b6116c0906002613ea8565b6116d3906001600160a01b038716613eca565b60f81b9050600060108260f81c6116ea9190613ede565b60f81b905060008160f81c60106117019190613f00565b8360f81c61170f9190613f21565b60f81b905061171d82612ed5565b85611729866002613da5565b8151811061173957611739613f44565b60200101906001600160f81b031916908160001a90535061175981612ed5565b85611765866002613da5565b611770906001613ca7565b8151811061178057611780613f44565b60200101906001600160f81b031916908160001a90535050505080806117a590613d24565b915050611694565b5092915050565b60006117bf83612314565b82106118215760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610d0a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546000906001600160a01b031633146118775760405162461bcd60e51b8152600401610d0a90613c22565b601854836019546118889190613ca7565b11156118c65760405162461bcd60e51b815260206004820152600d60248201526c5265736572766520456d70747960981b6044820152606401610d0a565b82601a60008282546118d89190613ca7565b90915550600090505b8381101561198a576019805490819060006118fb83613d24565b909155505060195484511561194357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8660405161193a919061377b565b60405180910390a25b600081815260256020526040902080546001600160a01b0319163317905561197587611970846001613ca7565b612c1d565b5050808061198290613d24565b9150506118e1565b506000949350505050565b600a546001600160a01b031633146119bf5760405162461bcd60e51b8152600401610d0a90613c22565b604051600090339047908381818185875af1925050503d8060008114611a01576040519150601f19603f3d011682016040523d82523d6000602084013e611a06565b606091505b5050905080611a1457600080fd5b50565b601b5460009061ffff16600414611a695760405162461bcd60e51b8152602060048201526016602482015275141d589b1a58c814d85b195cc8125cc810db1bdcd95960521b6044820152606401610d0a565b6000611a8060195461124960185461124360085490565b905060008511611ad25760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610d0a565b600f54611adf8683613ca7565b1115611b265760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610d0a565b6016546001600160a01b038716600090815260236020526040902054611b4d908790613ca7565b1115611b6b5760405162461bcd60e51b8152600401610d0a90613cbf565b6001600160a01b03861660009081526023602052604081208054879290611b93908490613ca7565b9091555050600e54611ba6908690612bac565b3414611bea5760405162461bcd60e51b8152602060048201526013602482015272496e636f7272656374206d73672e76616c756560681b6044820152606401610d0a565b84601a6000828254611bfc9190613ca7565b90915550506001600160a01b03861660009081526024602052604081208054879290611c29908490613ca7565b90915550600090505b858110156115d9576000611c56601954611249600161124360185461124360085490565b90508415611c9957807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8787604051611c90929190613f5a565b60405180910390a25b600081815260256020908152604080832080546001600160a01b0319166001600160a01b038d169081179091558352601d9091528120805491611cdb83613d24565b9190505550611cea8882612c1d565b601b54604051829161ffff16907f722f4a735796e453d35b380f398f80c99d902434d3f8056dd7abff89510dbc5590600090a35080611d2881613d24565b915050611c32565b600a546001600160a01b03163314611d5a5760405162461bcd60e51b8152600401610d0a90613c22565b601b805461ffff191661ffff92909216919091179055565b610feb8383836040518060200160405280600081525061273f565b60606000611d9a83612314565b905060008167ffffffffffffffff811115611db757611db76138eb565b604051908082528060200260200182016040528015611de0578160200160208202803683370190505b50905060005b82811015611e2757611df885826117b4565b828281518110611e0a57611e0a613f44565b602090810291909101015280611e1f81613d24565b915050611de6565b509392505050565b6000611e3a60085490565b8210611e9d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610d0a565b60088281548110611eb057611eb0613f44565b90600052602060002001549050919050565b600a546000906001600160a01b03163314611eef5760405162461bcd60e51b8152600401610d0a90613c22565b600f5484601a54611f009190613ca7565b1115611f415760405162461bcd60e51b815260206004820152601060248201526f13585e08151bdad95b88135a5b9d195960821b6044820152606401610d0a565b83601a6000828254611f539190613ca7565b90915550600090505b84811015612058576000611f80601954611249600161124360185461124360085490565b90508315611fc357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8686604051611fba929190613f5a565b60405180910390a25b600081815260256020908152604080832080546001600160a01b031916331790556001600160a01b038a168352601d909152812080549161200383613d24565b91905055506120128782612c1d565b601b54604051829161ffff16907f722f4a735796e453d35b380f398f80c99d902434d3f8056dd7abff89510dbc5590600090a3508061205081613d24565b915050611f5c565b50600095945050505050565b600a546001600160a01b0316331461208e5760405162461bcd60e51b8152600401610d0a90613c22565b80516120a190600b90602084019061362c565b5050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b8160008151811061211057612110613f44565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061213f5761213f613f44565b60200101906001600160f81b031916908160001a90535060005b6014811015612287578260048561217184600c613ca7565b6020811061218157612181613f44565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106121a7576121a7613f44565b01602001516001600160f81b031916826121c2836002613da5565b6121cd906002613ca7565b815181106121dd576121dd613f44565b60200101906001600160f81b031916908160001a905350828461220183600c613ca7565b6020811061221157612211613f44565b825191901a600f1690811061222857612228613f44565b01602001516001600160f81b03191682612243836002613da5565b61224e906003613ca7565b8151811061225e5761225e613f44565b60200101906001600160f81b031916908160001a9053508061227f81613d24565b915050612159565b50949350505050565b6000818152600260205260408120546001600160a01b031680610cda5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610d0a565b600b8054610e5a90613c57565b60006001600160a01b03821661237f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610d0a565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146123c55760405162461bcd60e51b8152600401610d0a90613c22565b6123cf6000612f02565b565b600a546001600160a01b031633146123fb5760405162461bcd60e51b8152600401610d0a90613c22565b600e55565b600a546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610d0a90613c22565b601255565b6040805181815260608181018352916000918291602082018180368337019050509050600091505b80518260ff16101561254e57600084612471600285613ede565b60ff166020811061248457612484613f44565b1a600f169050600060048661249a600287613ede565b60ff16602081106124ad576124ad613f44565b1a60f81b6001600160f81b031916901c60f81c90506124cb82612687565b838560ff16815181106124e0576124e0613f44565b60200101906001600160f81b031916908160001a905350612502846001613f89565b935061250d81612687565b838560ff168151811061252257612522613f44565b60200101906001600160f81b031916908160001a9053505050818061254690613fae565b925050612457565b9392505050565b606060018054610d3590613c57565b60008060008061257385612658565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa1580156125ce573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600a546001600160a01b0316331461260d5760405162461bcd60e51b8152600401610d0a90613c22565b601155565b6120a1338383612f54565b600a546001600160a01b031633146126475760405162461bcd60e51b8152600401610d0a90613c22565b6017805461ff001916610100179055565b6000806000835160411461266b57600080fd5b5050506020810151604082015160609092015160001a92909190565b6000600a8260ff1610156126a9576126a0826030613f89565b60f81b92915050565b6126a0826057613f89565b919050565b600080836040516020016126cd9190613fcd565b60408051601f198184030181529190528051602090910120601c549091506001600160a01b03166126fe8285612564565b6001600160a01b031614949350505050565b600a546001600160a01b0316331461273a5760405162461bcd60e51b8152600401610d0a90613c22565b601055565b6127493383612c37565b6127655760405162461bcd60e51b8152600401610d0a90613d3d565b61277184848484613022565b50505050565b600c8054610e5a90613c57565b6000818152600260205260409020546060906001600160a01b03166128035760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610d0a565b601754610100900460ff1615156000036128a957600d805461282490613c57565b80601f016020809104026020016040519081016040528092919081815260200182805461285090613c57565b801561289d5780601f106128725761010080835404028352916020019161289d565b820191906000526020600020905b81548152906001019060200180831161288057829003601f168201915b50505050509050919050565b60006128b3613055565b905060008151116128d3576040518060200160405280600081525061254e565b806128dd84613064565b600c6040516020016128f193929190613fe9565b6040516020818303038152906040529392505050565b80516000908290820361291d5750600092915050565b50506020015190565b600a546001600160a01b031633146129505760405162461bcd60e51b8152600401610d0a90613c22565b80516120a190600c90602084019061362c565b600a546001600160a01b0316331461298d5760405162461bcd60e51b8152600401610d0a90613c22565b80516120a190600d90602084019061362c565b600a546001600160a01b031633146129ca5760405162461bcd60e51b8152600401610d0a90613c22565b6001600160a01b038116612a2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0a565b611a1481612f02565b60006001600160e01b031982166380ac58cd60e01b1480612a6957506001600160e01b03198216635b5e139f60e01b145b80610cda57506301ffc9a760e01b6001600160e01b0319831614610cda565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612abd82612290565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612b038385613ca7565b90508381101561254e5760405162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b6044820152606401610d0a565b600082821115612ba05760405162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f570000000000000000006044820152606401610d0a565b60006115e08385613d8e565b600082600003612bbe57506000610cda565b6000612bca8385613da5565b905082612bd78583613eca565b1461254e5760405162461bcd60e51b8152602060048201526016602482015275536166654d617468236d756c3a204f564552464c4f5760501b6044820152606401610d0a565b6120a1828260405180602001604052806000815250613165565b6000818152600260205260408120546001600160a01b0316612cb05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d0a565b6000612cbb83612290565b9050806001600160a01b0316846001600160a01b03161480612cf65750836001600160a01b0316612ceb84610db8565b6001600160a01b0316145b806115e057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166115e0565b826001600160a01b0316612d3d82612290565b6001600160a01b031614612da55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610d0a565b6001600160a01b038216612e075760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0a565b612e12838383613198565b612e1d600082612a88565b6001600160a01b0383166000908152600360205260408120805460019290612e46908490613d8e565b90915550506001600160a01b0382166000908152600360205260408120805460019290612e74908490613ca7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000600a60f883901c1015612ef3576126a060f883901c6030613f89565b6126a060f883901c6057613f89565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612fb55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d0a565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61302d848484612d2a565b61303984848484613250565b6127715760405162461bcd60e51b8152600401610d0a906140ac565b6060600b8054610d3590613c57565b60608160000361308b5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156130b5578061309f81613d24565b91506130ae9050600a83613eca565b915061308f565b60008167ffffffffffffffff8111156130d0576130d06138eb565b6040519080825280601f01601f1916602001820160405280156130fa576020820181803683370190505b5090505b84156115e05761310f600183613d8e565b915061311c600a866140fe565b613127906030613ca7565b60f81b81838151811061313c5761313c613f44565b60200101906001600160f81b031916908160001a90535061315e600a86613eca565b94506130fe565b61316f838361334e565b61317c6000848484613250565b610feb5760405162461bcd60e51b8152600401610d0a906140ac565b6001600160a01b0383166131f3576131ee81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b613216565b816001600160a01b0316836001600160a01b03161461321657613216838261349c565b6001600160a01b03821661322d57610feb81613539565b826001600160a01b0316826001600160a01b031614610feb57610feb82826135e8565b60006001600160a01b0384163b1561334657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613294903390899088908890600401614112565b6020604051808303816000875af19250505080156132cf575060408051601f3d908101601f191682019092526132cc9181019061414f565b60015b61332c573d8080156132fd576040519150601f19603f3d011682016040523d82523d6000602084013e613302565b606091505b5080516000036133245760405162461bcd60e51b8152600401610d0a906140ac565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115e0565b5060016115e0565b6001600160a01b0382166133a45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d0a565b6000818152600260205260409020546001600160a01b0316156134095760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d0a565b61341560008383613198565b6001600160a01b038216600090815260036020526040812080546001929061343e908490613ca7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016134a984612314565b6134b39190613d8e565b600083815260076020526040902054909150808214613506576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061354b90600190613d8e565b6000838152600960205260408120546008805493945090928490811061357357613573613f44565b90600052602060002001549050806008838154811061359457613594613f44565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806135cc576135cc61416c565b6001900381819060005260206000200160009055905550505050565b60006135f383612314565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461363890613c57565b90600052602060002090601f01602090048101928261365a57600085556136a0565b82601f1061367357805160ff19168380011785556136a0565b828001600101855582156136a0579182015b828111156136a0578251825591602001919060010190613685565b506136ac9291506136b0565b5090565b5b808211156136ac57600081556001016136b1565b6001600160e01b031981168114611a1457600080fd5b6000602082840312156136ed57600080fd5b813561254e816136c5565b803580151581146126b457600080fd5b60006020828403121561371a57600080fd5b61254e826136f8565b60005b8381101561373e578181015183820152602001613726565b838111156127715750506000910152565b60008151808452613767816020860160208601613723565b601f01601f19169290920160200192915050565b60208152600061254e602083018461374f565b6000602082840312156137a057600080fd5b5035919050565b6001600160a01b0381168114611a1457600080fd5b6000602082840312156137ce57600080fd5b813561254e816137a7565b600080604083850312156137ec57600080fd5b82356137f7816137a7565b946020939093013593505050565b60008083601f84011261381757600080fd5b50813567ffffffffffffffff81111561382f57600080fd5b60208301915083602082850101111561384757600080fd5b9250929050565b6000806000806060858703121561386457600080fd5b843561386f816137a7565b935060208501359250604085013567ffffffffffffffff81111561389257600080fd5b61389e87828801613805565b95989497509550505050565b6000806000606084860312156138bf57600080fd5b83356138ca816137a7565b925060208401356138da816137a7565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261391257600080fd5b813567ffffffffffffffff8082111561392d5761392d6138eb565b604051601f8301601f19908116603f01168101908282118183101715613955576139556138eb565b8160405283815286602085880101111561396e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156139a357600080fd5b83356139ae816137a7565b925060208401359150604084013567ffffffffffffffff8111156139d157600080fd5b6139dd86828701613901565b9150509250925092565b6000602082840312156139f957600080fd5b813561ffff8116811461254e57600080fd5b6020808252825182820181905260009190848201906040850190845b81811015613a4357835183529284019291840191600101613a27565b50909695505050505050565b600060208284031215613a6157600080fd5b813567ffffffffffffffff811115613a7857600080fd5b6115e084828501613901565b60008060408385031215613a9757600080fd5b82359150602083013567ffffffffffffffff811115613ab557600080fd5b613ac185828601613901565b9150509250929050565b60008060408385031215613ade57600080fd5b8235613ae9816137a7565b9150613af7602084016136f8565b90509250929050565b600060208284031215613b1257600080fd5b813560ff8116811461254e57600080fd5b60008060408385031215613b3657600080fd5b823567ffffffffffffffff80821115613b4e57600080fd5b613b5a86838701613901565b93506020850135915080821115613b7057600080fd5b50613ac185828601613901565b60008060008060808587031215613b9357600080fd5b8435613b9e816137a7565b93506020850135613bae816137a7565b925060408501359150606085013567ffffffffffffffff811115613bd157600080fd5b613bdd87828801613901565b91505092959194509250565b60008060408385031215613bfc57600080fd5b8235613c07816137a7565b91506020830135613c17816137a7565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680613c6b57607f821691505b602082108103613c8b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613cba57613cba613c91565b500190565b60208082526014908201527326b0bc1019102a37b5b2b7102832b9102ab9b2b960611b604082015260600190565b60208082526018908201527f7068617365204e4654206c696d69742065786365656465640000000000000000604082015260600190565b600060018201613d3657613d36613c91565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082821015613da057613da0613c91565b500390565b6000816000190483118215151615613dbf57613dbf613c91565b500290565b600181815b80851115613dff578160001904821115613de557613de5613c91565b80851615613df257918102915b93841c9390800290613dc9565b509250929050565b600082613e1657506001610cda565b81613e2357506000610cda565b8160018114613e395760028114613e4357613e5f565b6001915050610cda565b60ff841115613e5457613e54613c91565b50506001821b610cda565b5060208310610133831016604e8410600b8410161715613e82575081810a610cda565b613e8c8383613dc4565b8060001904821115613ea057613ea0613c91565b029392505050565b600061254e8383613e07565b634e487b7160e01b600052601260045260246000fd5b600082613ed957613ed9613eb4565b500490565b600060ff831680613ef157613ef1613eb4565b8060ff84160491505092915050565b600060ff821660ff84168160ff0481118215151615613ea057613ea0613c91565b600060ff821660ff841680821015613f3b57613f3b613c91565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060ff821660ff84168060ff03821115613fa657613fa6613c91565b019392505050565b600060ff821660ff8103613fc457613fc4613c91565b60010192915050565b60008251613fdf818460208701613723565b9190910192915050565b600084516020613ffc8285838a01613723565b85519184019161400f8184848a01613723565b8554920191600090600181811c908083168061402c57607f831692505b858310810361404957634e487b7160e01b85526022600452602485fd5b80801561405d576001811461406e5761409b565b60ff1985168852838801955061409b565b60008b81526020902060005b858110156140935781548a82015290840190880161407a565b505083880195505b50939b9a5050505050505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261410d5761410d613eb4565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906141459083018461374f565b9695505050505050565b60006020828403121561416157600080fd5b815161254e816136c5565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220cfb948e93818b3d757b5f04670c204f8842420c249c4bba8d7ac332470f01ab364736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103c35760003560e01c80636c0360eb116101f0578063ae5733c41161010c578063d4e218e4116100a5578063e985e9c511610077578063e985e9c514610c00578063f2c4ce1e14610c49578063f2fde38b14610c69578063f7debfa014610c89578063fdcfa5d714610c9f57005b8063d4e218e414610b9e578063d5abeb0114610bb4578063d64a3c7c14610bca578063da3ef23f14610be057005b8063c6682862116100de578063c668286214610b13578063c87b56dd14610b28578063cd53d08e14610b48578063cfb5192814610b7e57005b8063ae5733c414610a79578063afef3ea014610aa6578063b88d4fde14610ac6578063bcc7eae914610ae657005b806397aba7f911610189578063a475b5dd1161015b578063a475b5dd146109b6578063a4dcdb16146109cb578063a7bb5803146109e1578063a86b73f014610a20578063adb41f7514610a5957005b806397aba7f9146109405780639d447672146109605780639ffdb39f14610980578063a22cb4651461099657005b806385e578c4116101c257806385e578c4146108cd5780638da5cb5b146108ed5780639201de551461090b57806395d89b411461092b57005b80636c0360eb1461086357806370a0823114610878578063715018a61461089857806381530b68146108ad57005b80632f745c59116102df5780634f6ccce711610278578063593b79fe1161024a578063593b79fe1461079e5780635c975abb146107dd5780635e57966d146107f75780636352211e146108175780636b941a9b1461083757005b80634f6ccce71461071f5780634fda42941461073f578063518302271461075f57806355f804b31461077e57005b80633fffa7e9116102b15780633fffa7e91461069c57806340259dad146106b257806342842e0e146106d2578063438b6300146106f257005b80632f745c59146106415780633c45d3d7146106615780633ccfd60b146106815780633ee8d8101461068957005b80630cd1635d1161035c57806318cae2691161032e57806318cae269146105875780631e7269c5146105b457806323b872dd146105e157806328831187146106015780632c6e75981461062157005b80630cd1635d146104fe5780630f48c6f71461052c57806313faede61461055c57806318160ddd1461057257005b8063081c8c4411610395578063081c8c441461047b5780630823713414610490578063095ea7b3146104cb5780630b8f16f9146104eb57005b806301ffc9a7146103cc57806302329a291461040157806306fdde0314610421578063081812fc1461044357005b366103ca57005b005b3480156103d857600080fd5b506103ec6103e73660046136db565b610cb5565b60405190151581526020015b60405180910390f35b34801561040d57600080fd5b506103ca61041c366004613708565b610ce0565b34801561042d57600080fd5b50610436610d26565b6040516103f8919061377b565b34801561044f57600080fd5b5061046361045e36600461378e565b610db8565b6040516001600160a01b0390911681526020016103f8565b34801561048757600080fd5b50610436610e4d565b34801561049c57600080fd5b506104bd6104ab3660046137bc565b60226020526000908152604090205481565b6040519081526020016103f8565b3480156104d757600080fd5b506103ca6104e63660046137d9565b610edb565b6104bd6104f936600461384e565b610ff0565b34801561050a57600080fd5b50601b546105199061ffff1681565b60405161ffff90911681526020016103f8565b34801561053857600080fd5b506103ec61054736600461378e565b601e6020526000908152604090205460ff1681565b34801561056857600080fd5b506104bd600e5481565b34801561057e57600080fd5b506008546104bd565b34801561059357600080fd5b506104bd6105a23660046137bc565b601d6020526000908152604090205481565b3480156105c057600080fd5b506104bd6105cf3660046137bc565b60246020526000908152604090205481565b3480156105ed57600080fd5b506103ca6105fc3660046138aa565b6115e8565b34801561060d57600080fd5b506103ca61061c3660046137bc565b611619565b34801561062d57600080fd5b5061043661063c3660046137bc565b61166d565b34801561064d57600080fd5b506104bd61065c3660046137d9565b6117b4565b34801561066d57600080fd5b506104bd61067c36600461398e565b61184a565b6103ca611995565b6104bd61069736600461384e565b611a17565b3480156106a857600080fd5b506104bd60145481565b3480156106be57600080fd5b506103ca6106cd3660046139e7565b611d30565b3480156106de57600080fd5b506103ca6106ed3660046138aa565b611d72565b3480156106fe57600080fd5b5061071261070d3660046137bc565b611d8d565b6040516103f89190613a0b565b34801561072b57600080fd5b506104bd61073a36600461378e565b611e2f565b34801561074b57600080fd5b506104bd61075a36600461384e565b611ec2565b34801561076b57600080fd5b506017546103ec90610100900460ff1681565b34801561078a57600080fd5b506103ca610799366004613a4f565b612064565b3480156107aa57600080fd5b506104366107b93660046137bc565b604080516001600160a01b0392909216600560a21b18601483015260348201905290565b3480156107e957600080fd5b506017546103ec9060ff1681565b34801561080357600080fd5b506104366108123660046137bc565b6120a5565b34801561082357600080fd5b5061046361083236600461378e565b612290565b34801561084357600080fd5b506104bd6108523660046137bc565b602080526000908152604090205481565b34801561086f57600080fd5b50610436612307565b34801561088457600080fd5b506104bd6108933660046137bc565b612314565b3480156108a457600080fd5b506103ca61239b565b3480156108b957600080fd5b506103ca6108c836600461378e565b6123d1565b3480156108d957600080fd5b506103ca6108e836600461378e565b612400565b3480156108f957600080fd5b50600a546001600160a01b0316610463565b34801561091757600080fd5b5061043661092636600461378e565b61242f565b34801561093757600080fd5b50610436612555565b34801561094c57600080fd5b5061046361095b366004613a84565b612564565b34801561096c57600080fd5b506103ca61097b36600461378e565b6125e3565b34801561098c57600080fd5b506104bd60105481565b3480156109a257600080fd5b506103ca6109b1366004613acb565b612612565b3480156109c257600080fd5b506103ca61261d565b3480156109d757600080fd5b506104bd60165481565b3480156109ed57600080fd5b50610a016109fc366004613a4f565b612658565b6040805160ff90941684526020840192909252908201526060016103f8565b348015610a2c57600080fd5b50610a40610a3b366004613b00565b612687565b6040516001600160f81b031990911681526020016103f8565b348015610a6557600080fd5b506103ec610a74366004613b23565b6126b9565b348015610a8557600080fd5b506104bd610a943660046137bc565b60236020526000908152604090205481565b348015610ab257600080fd5b506103ca610ac136600461378e565b612710565b348015610ad257600080fd5b506103ca610ae1366004613b7d565b61273f565b348015610af257600080fd5b506104bd610b013660046137bc565b60216020526000908152604090205481565b348015610b1f57600080fd5b50610436612777565b348015610b3457600080fd5b50610436610b4336600461378e565b612784565b348015610b5457600080fd5b50610463610b6336600461378e565b6025602052600090815260409020546001600160a01b031681565b348015610b8a57600080fd5b506104bd610b99366004613a4f565b612907565b348015610baa57600080fd5b506104bd60135481565b348015610bc057600080fd5b506104bd600f5481565b348015610bd657600080fd5b506104bd60155481565b348015610bec57600080fd5b506103ca610bfb366004613a4f565b612926565b348015610c0c57600080fd5b506103ec610c1b366004613be9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610c5557600080fd5b506103ca610c64366004613a4f565b612963565b348015610c7557600080fd5b506103ca610c843660046137bc565b6129a0565b348015610c9557600080fd5b506104bd60115481565b348015610cab57600080fd5b506104bd60125481565b60006001600160e01b0319821663780e9d6360e01b1480610cda5750610cda82612a38565b92915050565b600a546001600160a01b03163314610d135760405162461bcd60e51b8152600401610d0a90613c22565b60405180910390fd5b6017805460ff1916911515919091179055565b606060008054610d3590613c57565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6190613c57565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610e315760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d0a565b506000908152600460205260409020546001600160a01b031690565b600d8054610e5a90613c57565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690613c57565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505081565b6000610ee682612290565b9050806001600160a01b0316836001600160a01b031603610f535760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610d0a565b336001600160a01b0382161480610f6f5750610f6f8133610c1b565b610fe15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610d0a565b610feb8383612a88565b505050565b601b5460009061ffff166001148061100e5750601b5461ffff166002145b8061101f5750601b5461ffff166003145b6110605760405162461bcd60e51b8152602060048201526012602482015271141c995cd85b195cc81a5cc818db1bdcd95960721b6044820152606401610d0a565b601b5461ffff166001036110fe576016546001600160a01b0386166000908152602080526040902054611094908690613ca7565b11156110b25760405162461bcd60e51b8152600401610d0a90613cbf565b601054846013546110c39190613ca7565b11156110e15760405162461bcd60e51b8152600401610d0a90613ced565b83601360008282546110f39190613ca7565b9091555061122c9050565b601b5461ffff16600203611192576016546001600160a01b038616600090815260216020526040902054611133908690613ca7565b11156111515760405162461bcd60e51b8152600401610d0a90613cbf565b601154846014546111629190613ca7565b11156111805760405162461bcd60e51b8152600401610d0a90613ced565b83601460008282546110f39190613ca7565b601b5461ffff1660030361122c576016546001600160a01b0386166000908152602260205260409020546111c7908690613ca7565b11156111e55760405162461bcd60e51b8152600401610d0a90613cbf565b601254846015546111f69190613ca7565b11156112145760405162461bcd60e51b8152600401610d0a90613ced565b83601560008282546112269190613ca7565b90915550505b600061124f60195461124960185461124360085490565b90612af6565b90612b4e565b9050600085116112a15760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610d0a565b600f546112ae8683613ca7565b11156112f55760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610d0a565b600f546001600160a01b03871660009081526024602052604090205461131c908790613ca7565b111561135f5760405162461bcd60e51b815260206004820152601260248201527126b0bc102a37b5b2b7102832b9102ab9b2b960711b6044820152606401610d0a565b6113a761136b876120a5565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126b992505050565b6113b0876120a5565b906113ce5760405162461bcd60e51b8152600401610d0a919061377b565b50600e546113dd908690612bac565b34146114215760405162461bcd60e51b8152602060048201526013602482015272496e636f7272656374206d73672e76616c756560681b6044820152606401610d0a565b84601a60008282546114339190613ca7565b9091555050601b5461ffff16600103611478576001600160a01b03861660009081526020805260408120805487929061146d908490613ca7565b909155506114ea9050565b601b5461ffff166002036114ae576001600160a01b0386166000908152602160205260408120805487929061146d908490613ca7565b601b5461ffff166003036114ea576001600160a01b038616600090815260226020526040812080548792906114e4908490613ca7565b90915550505b6001600160a01b03861660009081526024602052604081208054879290611512908490613ca7565b90915550600090505b858110156115d957600061153f601954611249600161124360185461124360085490565b600081815260256020908152604080832080546001600160a01b0319166001600160a01b038e169081179091558352601d909152812080549293509061158483613d24565b91905055506115938882612c1d565b601b54604051829161ffff16907f722f4a735796e453d35b380f398f80c99d902434d3f8056dd7abff89510dbc5590600090a350806115d181613d24565b91505061151b565b5060009150505b949350505050565b6115f23382612c37565b61160e5760405162461bcd60e51b8152600401610d0a90613d3d565b610feb838383612d2a565b600a546001600160a01b031633146116435760405162461bcd60e51b8152600401610d0a90613c22565b601b80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156117ad5760006116aa826013613d8e565b6116b5906008613da5565b6116c0906002613ea8565b6116d3906001600160a01b038716613eca565b60f81b9050600060108260f81c6116ea9190613ede565b60f81b905060008160f81c60106117019190613f00565b8360f81c61170f9190613f21565b60f81b905061171d82612ed5565b85611729866002613da5565b8151811061173957611739613f44565b60200101906001600160f81b031916908160001a90535061175981612ed5565b85611765866002613da5565b611770906001613ca7565b8151811061178057611780613f44565b60200101906001600160f81b031916908160001a90535050505080806117a590613d24565b915050611694565b5092915050565b60006117bf83612314565b82106118215760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610d0a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546000906001600160a01b031633146118775760405162461bcd60e51b8152600401610d0a90613c22565b601854836019546118889190613ca7565b11156118c65760405162461bcd60e51b815260206004820152600d60248201526c5265736572766520456d70747960981b6044820152606401610d0a565b82601a60008282546118d89190613ca7565b90915550600090505b8381101561198a576019805490819060006118fb83613d24565b909155505060195484511561194357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8660405161193a919061377b565b60405180910390a25b600081815260256020526040902080546001600160a01b0319163317905561197587611970846001613ca7565b612c1d565b5050808061198290613d24565b9150506118e1565b506000949350505050565b600a546001600160a01b031633146119bf5760405162461bcd60e51b8152600401610d0a90613c22565b604051600090339047908381818185875af1925050503d8060008114611a01576040519150601f19603f3d011682016040523d82523d6000602084013e611a06565b606091505b5050905080611a1457600080fd5b50565b601b5460009061ffff16600414611a695760405162461bcd60e51b8152602060048201526016602482015275141d589b1a58c814d85b195cc8125cc810db1bdcd95960521b6044820152606401610d0a565b6000611a8060195461124960185461124360085490565b905060008511611ad25760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610d0a565b600f54611adf8683613ca7565b1115611b265760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610d0a565b6016546001600160a01b038716600090815260236020526040902054611b4d908790613ca7565b1115611b6b5760405162461bcd60e51b8152600401610d0a90613cbf565b6001600160a01b03861660009081526023602052604081208054879290611b93908490613ca7565b9091555050600e54611ba6908690612bac565b3414611bea5760405162461bcd60e51b8152602060048201526013602482015272496e636f7272656374206d73672e76616c756560681b6044820152606401610d0a565b84601a6000828254611bfc9190613ca7565b90915550506001600160a01b03861660009081526024602052604081208054879290611c29908490613ca7565b90915550600090505b858110156115d9576000611c56601954611249600161124360185461124360085490565b90508415611c9957807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8787604051611c90929190613f5a565b60405180910390a25b600081815260256020908152604080832080546001600160a01b0319166001600160a01b038d169081179091558352601d9091528120805491611cdb83613d24565b9190505550611cea8882612c1d565b601b54604051829161ffff16907f722f4a735796e453d35b380f398f80c99d902434d3f8056dd7abff89510dbc5590600090a35080611d2881613d24565b915050611c32565b600a546001600160a01b03163314611d5a5760405162461bcd60e51b8152600401610d0a90613c22565b601b805461ffff191661ffff92909216919091179055565b610feb8383836040518060200160405280600081525061273f565b60606000611d9a83612314565b905060008167ffffffffffffffff811115611db757611db76138eb565b604051908082528060200260200182016040528015611de0578160200160208202803683370190505b50905060005b82811015611e2757611df885826117b4565b828281518110611e0a57611e0a613f44565b602090810291909101015280611e1f81613d24565b915050611de6565b509392505050565b6000611e3a60085490565b8210611e9d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610d0a565b60088281548110611eb057611eb0613f44565b90600052602060002001549050919050565b600a546000906001600160a01b03163314611eef5760405162461bcd60e51b8152600401610d0a90613c22565b600f5484601a54611f009190613ca7565b1115611f415760405162461bcd60e51b815260206004820152601060248201526f13585e08151bdad95b88135a5b9d195960821b6044820152606401610d0a565b83601a6000828254611f539190613ca7565b90915550600090505b84811015612058576000611f80601954611249600161124360185461124360085490565b90508315611fc357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8686604051611fba929190613f5a565b60405180910390a25b600081815260256020908152604080832080546001600160a01b031916331790556001600160a01b038a168352601d909152812080549161200383613d24565b91905055506120128782612c1d565b601b54604051829161ffff16907f722f4a735796e453d35b380f398f80c99d902434d3f8056dd7abff89510dbc5590600090a3508061205081613d24565b915050611f5c565b50600095945050505050565b600a546001600160a01b0316331461208e5760405162461bcd60e51b8152600401610d0a90613c22565b80516120a190600b90602084019061362c565b5050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b8160008151811061211057612110613f44565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061213f5761213f613f44565b60200101906001600160f81b031916908160001a90535060005b6014811015612287578260048561217184600c613ca7565b6020811061218157612181613f44565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106121a7576121a7613f44565b01602001516001600160f81b031916826121c2836002613da5565b6121cd906002613ca7565b815181106121dd576121dd613f44565b60200101906001600160f81b031916908160001a905350828461220183600c613ca7565b6020811061221157612211613f44565b825191901a600f1690811061222857612228613f44565b01602001516001600160f81b03191682612243836002613da5565b61224e906003613ca7565b8151811061225e5761225e613f44565b60200101906001600160f81b031916908160001a9053508061227f81613d24565b915050612159565b50949350505050565b6000818152600260205260408120546001600160a01b031680610cda5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610d0a565b600b8054610e5a90613c57565b60006001600160a01b03821661237f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610d0a565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146123c55760405162461bcd60e51b8152600401610d0a90613c22565b6123cf6000612f02565b565b600a546001600160a01b031633146123fb5760405162461bcd60e51b8152600401610d0a90613c22565b600e55565b600a546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610d0a90613c22565b601255565b6040805181815260608181018352916000918291602082018180368337019050509050600091505b80518260ff16101561254e57600084612471600285613ede565b60ff166020811061248457612484613f44565b1a600f169050600060048661249a600287613ede565b60ff16602081106124ad576124ad613f44565b1a60f81b6001600160f81b031916901c60f81c90506124cb82612687565b838560ff16815181106124e0576124e0613f44565b60200101906001600160f81b031916908160001a905350612502846001613f89565b935061250d81612687565b838560ff168151811061252257612522613f44565b60200101906001600160f81b031916908160001a9053505050818061254690613fae565b925050612457565b9392505050565b606060018054610d3590613c57565b60008060008061257385612658565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa1580156125ce573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600a546001600160a01b0316331461260d5760405162461bcd60e51b8152600401610d0a90613c22565b601155565b6120a1338383612f54565b600a546001600160a01b031633146126475760405162461bcd60e51b8152600401610d0a90613c22565b6017805461ff001916610100179055565b6000806000835160411461266b57600080fd5b5050506020810151604082015160609092015160001a92909190565b6000600a8260ff1610156126a9576126a0826030613f89565b60f81b92915050565b6126a0826057613f89565b919050565b600080836040516020016126cd9190613fcd565b60408051601f198184030181529190528051602090910120601c549091506001600160a01b03166126fe8285612564565b6001600160a01b031614949350505050565b600a546001600160a01b0316331461273a5760405162461bcd60e51b8152600401610d0a90613c22565b601055565b6127493383612c37565b6127655760405162461bcd60e51b8152600401610d0a90613d3d565b61277184848484613022565b50505050565b600c8054610e5a90613c57565b6000818152600260205260409020546060906001600160a01b03166128035760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610d0a565b601754610100900460ff1615156000036128a957600d805461282490613c57565b80601f016020809104026020016040519081016040528092919081815260200182805461285090613c57565b801561289d5780601f106128725761010080835404028352916020019161289d565b820191906000526020600020905b81548152906001019060200180831161288057829003601f168201915b50505050509050919050565b60006128b3613055565b905060008151116128d3576040518060200160405280600081525061254e565b806128dd84613064565b600c6040516020016128f193929190613fe9565b6040516020818303038152906040529392505050565b80516000908290820361291d5750600092915050565b50506020015190565b600a546001600160a01b031633146129505760405162461bcd60e51b8152600401610d0a90613c22565b80516120a190600c90602084019061362c565b600a546001600160a01b0316331461298d5760405162461bcd60e51b8152600401610d0a90613c22565b80516120a190600d90602084019061362c565b600a546001600160a01b031633146129ca5760405162461bcd60e51b8152600401610d0a90613c22565b6001600160a01b038116612a2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0a565b611a1481612f02565b60006001600160e01b031982166380ac58cd60e01b1480612a6957506001600160e01b03198216635b5e139f60e01b145b80610cda57506301ffc9a760e01b6001600160e01b0319831614610cda565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612abd82612290565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612b038385613ca7565b90508381101561254e5760405162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b6044820152606401610d0a565b600082821115612ba05760405162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f570000000000000000006044820152606401610d0a565b60006115e08385613d8e565b600082600003612bbe57506000610cda565b6000612bca8385613da5565b905082612bd78583613eca565b1461254e5760405162461bcd60e51b8152602060048201526016602482015275536166654d617468236d756c3a204f564552464c4f5760501b6044820152606401610d0a565b6120a1828260405180602001604052806000815250613165565b6000818152600260205260408120546001600160a01b0316612cb05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d0a565b6000612cbb83612290565b9050806001600160a01b0316846001600160a01b03161480612cf65750836001600160a01b0316612ceb84610db8565b6001600160a01b0316145b806115e057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166115e0565b826001600160a01b0316612d3d82612290565b6001600160a01b031614612da55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610d0a565b6001600160a01b038216612e075760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0a565b612e12838383613198565b612e1d600082612a88565b6001600160a01b0383166000908152600360205260408120805460019290612e46908490613d8e565b90915550506001600160a01b0382166000908152600360205260408120805460019290612e74908490613ca7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000600a60f883901c1015612ef3576126a060f883901c6030613f89565b6126a060f883901c6057613f89565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612fb55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d0a565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61302d848484612d2a565b61303984848484613250565b6127715760405162461bcd60e51b8152600401610d0a906140ac565b6060600b8054610d3590613c57565b60608160000361308b5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156130b5578061309f81613d24565b91506130ae9050600a83613eca565b915061308f565b60008167ffffffffffffffff8111156130d0576130d06138eb565b6040519080825280601f01601f1916602001820160405280156130fa576020820181803683370190505b5090505b84156115e05761310f600183613d8e565b915061311c600a866140fe565b613127906030613ca7565b60f81b81838151811061313c5761313c613f44565b60200101906001600160f81b031916908160001a90535061315e600a86613eca565b94506130fe565b61316f838361334e565b61317c6000848484613250565b610feb5760405162461bcd60e51b8152600401610d0a906140ac565b6001600160a01b0383166131f3576131ee81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b613216565b816001600160a01b0316836001600160a01b03161461321657613216838261349c565b6001600160a01b03821661322d57610feb81613539565b826001600160a01b0316826001600160a01b031614610feb57610feb82826135e8565b60006001600160a01b0384163b1561334657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613294903390899088908890600401614112565b6020604051808303816000875af19250505080156132cf575060408051601f3d908101601f191682019092526132cc9181019061414f565b60015b61332c573d8080156132fd576040519150601f19603f3d011682016040523d82523d6000602084013e613302565b606091505b5080516000036133245760405162461bcd60e51b8152600401610d0a906140ac565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115e0565b5060016115e0565b6001600160a01b0382166133a45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d0a565b6000818152600260205260409020546001600160a01b0316156134095760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d0a565b61341560008383613198565b6001600160a01b038216600090815260036020526040812080546001929061343e908490613ca7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016134a984612314565b6134b39190613d8e565b600083815260076020526040902054909150808214613506576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061354b90600190613d8e565b6000838152600960205260408120546008805493945090928490811061357357613573613f44565b90600052602060002001549050806008838154811061359457613594613f44565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806135cc576135cc61416c565b6001900381819060005260206000200160009055905550505050565b60006135f383612314565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461363890613c57565b90600052602060002090601f01602090048101928261365a57600085556136a0565b82601f1061367357805160ff19168380011785556136a0565b828001600101855582156136a0579182015b828111156136a0578251825591602001919060010190613685565b506136ac9291506136b0565b5090565b5b808211156136ac57600081556001016136b1565b6001600160e01b031981168114611a1457600080fd5b6000602082840312156136ed57600080fd5b813561254e816136c5565b803580151581146126b457600080fd5b60006020828403121561371a57600080fd5b61254e826136f8565b60005b8381101561373e578181015183820152602001613726565b838111156127715750506000910152565b60008151808452613767816020860160208601613723565b601f01601f19169290920160200192915050565b60208152600061254e602083018461374f565b6000602082840312156137a057600080fd5b5035919050565b6001600160a01b0381168114611a1457600080fd5b6000602082840312156137ce57600080fd5b813561254e816137a7565b600080604083850312156137ec57600080fd5b82356137f7816137a7565b946020939093013593505050565b60008083601f84011261381757600080fd5b50813567ffffffffffffffff81111561382f57600080fd5b60208301915083602082850101111561384757600080fd5b9250929050565b6000806000806060858703121561386457600080fd5b843561386f816137a7565b935060208501359250604085013567ffffffffffffffff81111561389257600080fd5b61389e87828801613805565b95989497509550505050565b6000806000606084860312156138bf57600080fd5b83356138ca816137a7565b925060208401356138da816137a7565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261391257600080fd5b813567ffffffffffffffff8082111561392d5761392d6138eb565b604051601f8301601f19908116603f01168101908282118183101715613955576139556138eb565b8160405283815286602085880101111561396e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156139a357600080fd5b83356139ae816137a7565b925060208401359150604084013567ffffffffffffffff8111156139d157600080fd5b6139dd86828701613901565b9150509250925092565b6000602082840312156139f957600080fd5b813561ffff8116811461254e57600080fd5b6020808252825182820181905260009190848201906040850190845b81811015613a4357835183529284019291840191600101613a27565b50909695505050505050565b600060208284031215613a6157600080fd5b813567ffffffffffffffff811115613a7857600080fd5b6115e084828501613901565b60008060408385031215613a9757600080fd5b82359150602083013567ffffffffffffffff811115613ab557600080fd5b613ac185828601613901565b9150509250929050565b60008060408385031215613ade57600080fd5b8235613ae9816137a7565b9150613af7602084016136f8565b90509250929050565b600060208284031215613b1257600080fd5b813560ff8116811461254e57600080fd5b60008060408385031215613b3657600080fd5b823567ffffffffffffffff80821115613b4e57600080fd5b613b5a86838701613901565b93506020850135915080821115613b7057600080fd5b50613ac185828601613901565b60008060008060808587031215613b9357600080fd5b8435613b9e816137a7565b93506020850135613bae816137a7565b925060408501359150606085013567ffffffffffffffff811115613bd157600080fd5b613bdd87828801613901565b91505092959194509250565b60008060408385031215613bfc57600080fd5b8235613c07816137a7565b91506020830135613c17816137a7565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680613c6b57607f821691505b602082108103613c8b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613cba57613cba613c91565b500190565b60208082526014908201527326b0bc1019102a37b5b2b7102832b9102ab9b2b960611b604082015260600190565b60208082526018908201527f7068617365204e4654206c696d69742065786365656465640000000000000000604082015260600190565b600060018201613d3657613d36613c91565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082821015613da057613da0613c91565b500390565b6000816000190483118215151615613dbf57613dbf613c91565b500290565b600181815b80851115613dff578160001904821115613de557613de5613c91565b80851615613df257918102915b93841c9390800290613dc9565b509250929050565b600082613e1657506001610cda565b81613e2357506000610cda565b8160018114613e395760028114613e4357613e5f565b6001915050610cda565b60ff841115613e5457613e54613c91565b50506001821b610cda565b5060208310610133831016604e8410600b8410161715613e82575081810a610cda565b613e8c8383613dc4565b8060001904821115613ea057613ea0613c91565b029392505050565b600061254e8383613e07565b634e487b7160e01b600052601260045260246000fd5b600082613ed957613ed9613eb4565b500490565b600060ff831680613ef157613ef1613eb4565b8060ff84160491505092915050565b600060ff821660ff84168160ff0481118215151615613ea057613ea0613c91565b600060ff821660ff841680821015613f3b57613f3b613c91565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060ff821660ff84168060ff03821115613fa657613fa6613c91565b019392505050565b600060ff821660ff8103613fc457613fc4613c91565b60010192915050565b60008251613fdf818460208701613723565b9190910192915050565b600084516020613ffc8285838a01613723565b85519184019161400f8184848a01613723565b8554920191600090600181811c908083168061402c57607f831692505b858310810361404957634e487b7160e01b85526022600452602485fd5b80801561405d576001811461406e5761409b565b60ff1985168852838801955061409b565b60008b81526020902060005b858110156140935781548a82015290840190880161407a565b505083880195505b50939b9a5050505050505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261410d5761410d613eb4565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906141459083018461374f565b9695505050505050565b60006020828403121561416157600080fd5b815161254e816136c5565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220cfb948e93818b3d757b5f04670c204f8842420c249c4bba8d7ac332470f01ab364736f6c634300080d0033
Deployed Bytecode Sourcemap
46091:14127:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39908:224;;;;;;;;;;-1:-1:-1;39908:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;39908:224:0;;;;;;;;56333:79;;;;;;;;;;-1:-1:-1;56333:79:0;;;;;:::i;:::-;;:::i;27429:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28988:221::-;;;;;;;;;;-1:-1:-1;28988:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2042:32:1;;;2024:51;;2012:2;1997:18;28988:221:0;1878:203:1;46291:28:0;;;;;;;;;;;;;:::i;47489:50::-;;;;;;;;;;-1:-1:-1;47489:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2620:25:1;;;2608:2;2593:18;47489:50:0;2474:177:1;28511:411:0;;;;;;;;;;-1:-1:-1;28511:411:0;;;;;:::i;:::-;;:::i;49691:2403::-;;;;;;:::i;:::-;;:::i;46870:28::-;;;;;;;;;;-1:-1:-1;46870:28:0;;;;;;;;;;;4119:6:1;4107:19;;;4089:38;;4077:2;4062:18;46870:28:0;3945:188:1;47137:42:0;;;;;;;;;;-1:-1:-1;47137:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46326:32;;;;;;;;;;;;;;;;40548:113;;;;;;;;;;-1:-1:-1;40636:10:0;:17;40548:113;;47075:55;;;;;;;;;;-1:-1:-1;47075:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;47735:41;;;;;;;;;;-1:-1:-1;47735:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;29738:339;;;;;;;;;;-1:-1:-1;29738:339:0;;;;;:::i;:::-;;:::i;53484:130::-;;;;;;;;;;-1:-1:-1;53484:130:0;;;;;:::i;:::-;;:::i;57446:461::-;;;;;;;;;;-1:-1:-1;57446:461:0;;;;;:::i;:::-;;:::i;40216:256::-;;;;;;;;;;-1:-1:-1;40216:256:0;;;;;:::i;:::-;;:::i;48791:695::-;;;;;;;;;;-1:-1:-1;48791:695:0;;;;;:::i;:::-;;:::i;56424:168::-;;;:::i;52102:1259::-;;;;;;:::i;:::-;;:::i;46581:29::-;;;;;;;;;;;;;;;;53369:107;;;;;;;;;;-1:-1:-1;53369:107:0;;;;;:::i;:::-;;:::i;30148:185::-;;;;;;;;;;-1:-1:-1;30148:185:0;;;;;:::i;:::-;;:::i;54389:386::-;;;;;;;;;;-1:-1:-1;54389:386:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40738:233::-;;;;;;;;;;-1:-1:-1;40738:233:0;;;;;:::i;:::-;;:::i;53626:749::-;;;;;;;;;;-1:-1:-1;53626:749:0;;;;;:::i;:::-;;:::i;46728:28::-;;;;;;;;;;-1:-1:-1;46728:28:0;;;;;;;;;;;55947:104;;;;;;;;;;-1:-1:-1;55947:104:0;;;;;:::i;:::-;;:::i;56600:326::-;;;;;;;;;;-1:-1:-1;56600:326:0;;;;;:::i;:::-;56706:4;56700:11;;-1:-1:-1;;;;;56726:50:0;;;;-1:-1:-1;;;56805:52:0;56800:2;56793:10;;56786:72;56888:2;56881:10;;56868:24;;56700:11;56600:326;46695:26;;;;;;;;;;-1:-1:-1;46695:26:0;;;;;;;;56934:504;;;;;;;;;;-1:-1:-1;56934:504:0;;;;;:::i;:::-;;:::i;27123:239::-;;;;;;;;;;-1:-1:-1;27123:239:0;;;;;:::i;:::-;;:::i;47243:50::-;;;;;;;;;;-1:-1:-1;47243:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;46219:21;;;;;;;;;;;;;:::i;26853:208::-;;;;;;;;;;-1:-1:-1;26853:208:0;;;;;:::i;:::-;;:::i;4706:103::-;;;;;;;;;;;;;:::i;55843:96::-;;;;;;;;;;-1:-1:-1;55843:96:0;;;;;:::i;:::-;;:::i;55715:120::-;;;;;;;;;;-1:-1:-1;55715:120:0;;;;;:::i;:::-;;:::i;4055:87::-;;;;;;;;;;-1:-1:-1;4128:6:0;;-1:-1:-1;;;;;4128:6:0;4055:87;;58116:471;;;;;;;;;;-1:-1:-1;58116:471:0;;;;;:::i;:::-;;:::i;27598:104::-;;;;;;;;;;;;;:::i;59491:279::-;;;;;;;;;;-1:-1:-1;59491:279:0;;;;;:::i;:::-;;:::i;55587:120::-;;;;;;;;;;-1:-1:-1;55587:120:0;;;;;:::i;:::-;;:::i;46404:40::-;;;;;;;;;;;;;;;;29281:155;;;;;;;;;;-1:-1:-1;29281:155:0;;;;;:::i;:::-;;:::i;55376:71::-;;;;;;;;;;;;;:::i;46653:35::-;;;;;;;;;;;;;;;;58917:566;;;;;;;;;;-1:-1:-1;58917:566:0;;;;;:::i;:::-;;:::i;:::-;;;;9780:4:1;9768:17;;;9750:36;;9817:2;9802:18;;9795:34;;;;9845:18;;;9838:34;9738:2;9723:18;58917:566:0;9552:326:1;60010:205:0;;;;;;;;;;-1:-1:-1;60010:205:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;10319:26:1;;;10301:45;;10289:2;10274:18;60010:205:0;10157:195:1;59780:220:0;;;;;;;;;;-1:-1:-1;59780:220:0;;;;;:::i;:::-;;:::i;47612:50::-;;;;;;;;;;-1:-1:-1;47612:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;55459:120;;;;;;;;;;-1:-1:-1;55459:120:0;;;;;:::i;:::-;;:::i;30404:328::-;;;;;;;;;;-1:-1:-1;30404:328:0;;;;;:::i;:::-;;:::i;47366:50::-;;;;;;;;;;-1:-1:-1;47366:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;46247:37;;;;;;;;;;;;;:::i;54785:565::-;;;;;;;;;;-1:-1:-1;54785:565:0;;;;;:::i;:::-;;:::i;47833:44::-;;;;;;;;;;-1:-1:-1;47833:44:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;47833:44:0;;;58595:314;;;;;;;;;;-1:-1:-1;58595:314:0;;;;;:::i;:::-;;:::i;46545:29::-;;;;;;;;;;;;;;;;46365:32;;;;;;;;;;;;;;;;46617:29;;;;;;;;;;;;;;;;56059:128;;;;;;;;;;-1:-1:-1;56059:128:0;;;;;:::i;:::-;;:::i;29507:164::-;;;;;;;;;;-1:-1:-1;29507:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;29628:25:0;;;29604:4;29628:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29507:164;56199:126;;;;;;;;;;-1:-1:-1;56199:126:0;;;;;:::i;:::-;;:::i;4964:201::-;;;;;;;;;;-1:-1:-1;4964:201:0;;;;;:::i;:::-;;:::i;46451:40::-;;;;;;;;;;;;;;;;46498;;;;;;;;;;;;;;;;39908:224;40010:4;-1:-1:-1;;;;;;40034:50:0;;-1:-1:-1;;;40034:50:0;;:90;;;40088:36;40112:11;40088:23;:36::i;:::-;40027:97;39908:224;-1:-1:-1;;39908:224:0:o;56333:79::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;;;;;;;;;56389:6:::1;:15:::0;;-1:-1:-1;;56389:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;56333:79::o;27429:100::-;27483:13;27516:5;27509:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27429:100;:::o;28988:221::-;29064:7;32331:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32331:16:0;29084:73;;;;-1:-1:-1;;;29084:73:0;;13098:2:1;29084:73:0;;;13080:21:1;13137:2;13117:18;;;13110:30;13176:34;13156:18;;;13149:62;-1:-1:-1;;;13227:18:1;;;13220:42;13279:19;;29084:73:0;12896:408:1;29084:73:0;-1:-1:-1;29177:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29177:24:0;;28988:221::o;46291:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28511:411::-;28592:13;28608:23;28623:7;28608:14;:23::i;:::-;28592:39;;28656:5;-1:-1:-1;;;;;28650:11:0;:2;-1:-1:-1;;;;;28650:11:0;;28642:57;;;;-1:-1:-1;;;28642:57:0;;13511:2:1;28642:57:0;;;13493:21:1;13550:2;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;-1:-1:-1;;;13640:18:1;;;13633:31;13681:19;;28642:57:0;13309:397:1;28642:57:0;2886:10;-1:-1:-1;;;;;28734:21:0;;;;:62;;-1:-1:-1;28759:37:0;28776:5;2886:10;29507:164;:::i;28759:37::-;28712:168;;;;-1:-1:-1;;;28712:168:0;;13913:2:1;28712:168:0;;;13895:21:1;13952:2;13932:18;;;13925:30;13991:34;13971:18;;;13964:62;14062:26;14042:18;;;14035:54;14106:19;;28712:168:0;13711:420:1;28712:168:0;28893:21;28902:2;28906:7;28893:8;:21::i;:::-;28581:341;28511:411;;:::o;49691:2403::-;49905:10;;49867:7;;49905:10;;;:15;;:34;;-1:-1:-1;49924:10:0;;;;49938:1;49924:15;49905:34;:53;;;-1:-1:-1;49943:10:0;;;;49957:1;49943:15;49905:53;49897:84;;;;-1:-1:-1;;;49897:84:0;;14338:2:1;49897:84:0;;;14320:21:1;14377:2;14357:18;;;14350:30;-1:-1:-1;;;14396:18:1;;;14389:48;14454:18;;49897:84:0;14136:342:1;49897:84:0;49995:10;;;;;:15;49992:853;;50082:16;;-1:-1:-1;;;;;50034:30:0;;;;;;:15;:30;;;;;;:44;;50067:11;;50034:44;:::i;:::-;:64;;50026:97;;;;-1:-1:-1;;;50026:97:0;;;;;;;:::i;:::-;50174:18;;50159:11;50146:10;;:24;;;;:::i;:::-;:46;;50138:83;;;;-1:-1:-1;;;50138:83:0;;;;;;;:::i;:::-;50250:11;50236:10;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;49992:853:0;;-1:-1:-1;49992:853:0;;50281:10;;;;50295:1;50281:15;50278:567;;50368:16;;-1:-1:-1;;;;;50320:30:0;;;;;;:15;:30;;;;;;:44;;50353:11;;50320:44;:::i;:::-;:64;;50312:97;;;;-1:-1:-1;;;50312:97:0;;;;;;;:::i;:::-;50460:18;;50445:11;50432:10;;:24;;;;:::i;:::-;:46;;50424:83;;;;-1:-1:-1;;;50424:83:0;;;;;;;:::i;:::-;50536:11;50522:10;;:25;;;;;;;:::i;50278:567::-;50567:10;;;;50581:1;50567:15;50564:281;;50654:16;;-1:-1:-1;;;;;50606:30:0;;;;;;:15;:30;;;;;;:44;;50639:11;;50606:44;:::i;:::-;:64;;50598:97;;;;-1:-1:-1;;;50598:97:0;;;;;;;:::i;:::-;50746:18;;50731:11;50718:10;;:24;;;;:::i;:::-;:46;;50710:83;;;;-1:-1:-1;;;50710:83:0;;;;;;;:::i;:::-;50822:11;50808:10;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;50564:281:0;50855:14;50872:45;50908:8;;50872:31;50890:12;;50872:13;40636:10;:17;;40548:113;50872:13;:17;;:31::i;:::-;:35;;:45::i;:::-;50855:62;;50950:1;50936:11;:15;50928:55;;;;-1:-1:-1;;;50928:55:0;;15652:2:1;50928:55:0;;;15634:21:1;15691:2;15671:18;;;15664:30;15730:29;15710:18;;;15703:57;15777:18;;50928:55:0;15450:351:1;50928:55:0;51026:9;;51002:20;51011:11;51002:6;:20;:::i;:::-;:33;;50994:68;;;;-1:-1:-1;;;50994:68:0;;16008:2:1;50994:68:0;;;15990:21:1;16047:2;16027:18;;;16020:30;-1:-1:-1;;;16066:18:1;;;16059:52;16128:18;;50994:68:0;15806:346:1;50994:68:0;51120:9;;-1:-1:-1;;;;;51081:21:0;;;;;;:6;:21;;;;;;:35;;51105:11;;51081:35;:::i;:::-;:48;;51073:79;;;;-1:-1:-1;;;51073:79:0;;16359:2:1;51073:79:0;;;16341:21:1;16398:2;16378:18;;;16371:30;-1:-1:-1;;;16417:18:1;;;16410:48;16475:18;;51073:79:0;16157:342:1;51073:79:0;51171:49;51183:30;51199:13;51183:15;:30::i;:::-;51215:4;;51171:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51171:11:0;;-1:-1:-1;;;51171:49:0:i;:::-;51222:30;51238:13;51222:15;:30::i;:::-;51163:90;;;;;-1:-1:-1;;;51163:90:0;;;;;;;;:::i;:::-;-1:-1:-1;51311:4:0;;51295:21;;:11;;:15;:21::i;:::-;51282:9;:34;51274:66;;;;-1:-1:-1;;;51274:66:0;;16706:2:1;51274:66:0;;;16688:21:1;16745:2;16725:18;;;16718:30;-1:-1:-1;;;16764:18:1;;;16757:49;16823:18;;51274:66:0;16504:343:1;51274:66:0;51361:11;51353:4;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;51388:10:0;;;;;:15;51385:293;;-1:-1:-1;;;;;51419:30:0;;;;;;:15;:30;;;;;:45;;51453:11;;51419:30;:45;;51453:11;;51419:45;:::i;:::-;;;;-1:-1:-1;51385:293:0;;-1:-1:-1;51385:293:0;;51484:10;;;;51498:1;51484:15;51481:197;;-1:-1:-1;;;;;51515:30:0;;;;;;:15;:30;;;;;:45;;51549:11;;51515:30;:45;;51549:11;;51515:45;:::i;51481:197::-;51590:10;;;;51604:1;51590:15;51587:91;;-1:-1:-1;;;;;51621:30:0;;;;;;:15;:30;;;;;:45;;51655:11;;51621:30;:45;;51655:11;;51621:45;:::i;:::-;;;;-1:-1:-1;;51587:91:0;-1:-1:-1;;;;;51688:21:0;;;;;;:6;:21;;;;;:36;;51713:11;;51688:21;:36;;51713:11;;51688:36;:::i;:::-;;;;-1:-1:-1;51742:9:0;;-1:-1:-1;51737:329:0;51761:11;51757:1;:15;51737:329;;;51794:11;51808:52;51851:8;;51808:38;51844:1;51808:31;51826:12;;51808:13;40636:10;:17;;40548:113;51808:52;51875:13;;;;:8;:13;;;;;;;;:29;;-1:-1:-1;;;;;;51875:29:0;-1:-1:-1;;;;;51875:29:0;;;;;;;;51919:35;;:20;:35;;;;;:37;;51875:13;;-1:-1:-1;51919:35:0;:37;;;:::i;:::-;;;;;;51971:29;51981:13;51996:3;51971:9;:29::i;:::-;52038:10;;52020:34;;52050:3;;52038:10;;;52020:34;;52038:10;;52020:34;-1:-1:-1;51774:3:0;;;;:::i;:::-;;;;51737:329;;;;52085:1;52078:8;;;49691:2403;;;;;;;:::o;29738:339::-;29933:41;2886:10;29966:7;29933:18;:41::i;:::-;29925:103;;;;-1:-1:-1;;;29925:103:0;;;;;;;:::i;:::-;30041:28;30051:4;30057:2;30061:7;30041:9;:28::i;53484:130::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;53581:13:::1;:25:::0;;-1:-1:-1;;;;;53581:25:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;53581:25:0;;::::1;::::0;;;::::1;::::0;;53484:130::o;57446:461::-;57544:13;;;57554:2;57544:13;;;57501;57544;;;;;;57527:14;;57544:13;;;;;;;;;;;-1:-1:-1;57544:13:0;57527:30;;57573:6;57568:305;57589:2;57585:1;:6;57568:305;;;57613:8;57664:6;57669:1;57664:2;:6;:::i;:::-;57661:10;;:1;:10;:::i;:::-;57657:15;;:1;:15;:::i;:::-;57637:36;;-1:-1:-1;;;;;57637:16:0;;:36;:::i;:::-;57624:51;;57613:62;;57690:9;57720:2;57715:1;57709:8;;:13;;;;:::i;:::-;57702:21;;57690:33;;57738:9;57779:2;57773:9;;57768:2;:14;;;;:::i;:::-;57763:1;57757:8;;:25;;;;:::i;:::-;57750:33;;57738:45;;57807:8;57812:2;57807:4;:8::i;:::-;57798:1;57800:3;57802:1;57800;:3;:::i;:::-;57798:6;;;;;;;;:::i;:::-;;;;:17;-1:-1:-1;;;;;57798:17:0;;;;;;;;;57841:8;57846:2;57841:4;:8::i;:::-;57830:1;57832:3;57834:1;57832;:3;:::i;:::-;:5;;57836:1;57832:5;:::i;:::-;57830:8;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;57830:19:0;;;;;;;;;57598:275;;;57593:3;;;;;:::i;:::-;;;;57568:305;;;-1:-1:-1;57897:1:0;57446:461;-1:-1:-1;;57446:461:0:o;40216:256::-;40313:7;40349:23;40366:5;40349:16;:23::i;:::-;40341:5;:31;40333:87;;;;-1:-1:-1;;;40333:87:0;;20291:2:1;40333:87:0;;;20273:21:1;20330:2;20310:18;;;20303:30;20369:34;20349:18;;;20342:62;-1:-1:-1;;;20420:18:1;;;20413:41;20471:19;;40333:87:0;20089:407:1;40333:87:0;-1:-1:-1;;;;;;40438:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;40216:256::o;48791:695::-;4128:6;;48966:7;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;49023:12:::1;;49005:14;48994:8;;:25;;;;:::i;:::-;:41;;48986:67;;;::::0;-1:-1:-1;;;48986:67:0;;20703:2:1;48986:67:0::1;::::0;::::1;20685:21:1::0;20742:2;20722:18;;;20715:30;-1:-1:-1;;;20761:18:1;;;20754:43;20814:18;;48986:67:0::1;20501:337:1::0;48986:67:0::1;49074:14;49066:4;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;49114:9:0::1;::::0;-1:-1:-1;49109:351:0::1;49133:14;49129:1;:18;49109:351;;;49186:8;::::0;;;;;49169:14:::1;49209:10;49186:8:::0;49209:10:::1;:::i;:::-;::::0;;;-1:-1:-1;;49248:8:0::1;::::0;49277:18;;:22;49273:82:::1;;49335:3;49325:14;49329:4;49325:14;;;;;;:::i;:::-;;;;;;;;49273:82;49371:13;::::0;;;:8:::1;:13;::::0;;;;:26;;-1:-1:-1;;;;;;49371:26:0::1;49387:10;49371:26;::::0;;49412:36:::1;49422:13:::0;49437:10:::1;:6:::0;49371:26;49437:10:::1;:::i;:::-;49412:9;:36::i;:::-;49154:306;;49149:3;;;;;:::i;:::-;;;;49109:351;;;-1:-1:-1::0;49477:1:0::1;::::0;48791:695;-1:-1:-1;;;;48791:695:0:o;56424:168::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;56499:58:::1;::::0;56481:12:::1;::::0;56507:10:::1;::::0;56531:21:::1;::::0;56481:12;56499:58;56481:12;56499:58;56531:21;56507:10;56499:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56480:77;;;56576:7;56568:16;;;::::0;::::1;;56469:123;56424:168::o:0;52102:1259::-;52310:10;;52282:7;;52310:10;;52324:1;52310:15;52302:51;;;;-1:-1:-1;;;52302:51:0;;21255:2:1;52302:51:0;;;21237:21:1;21294:2;21274:18;;;21267:30;-1:-1:-1;;;21313:18:1;;;21306:52;21375:18;;52302:51:0;21053:346:1;52302:51:0;52364:14;52381:45;52417:8;;52381:31;52399:12;;52381:13;40636:10;:17;;40548:113;52381:45;52364:62;;52459:1;52445:11;:15;52437:55;;;;-1:-1:-1;;;52437:55:0;;15652:2:1;52437:55:0;;;15634:21:1;15691:2;15671:18;;;15664:30;15730:29;15710:18;;;15703:57;15777:18;;52437:55:0;15450:351:1;52437:55:0;52535:9;;52511:20;52520:11;52511:6;:20;:::i;:::-;:33;;52503:68;;;;-1:-1:-1;;;52503:68:0;;16008:2:1;52503:68:0;;;15990:21:1;16047:2;16027:18;;;16020:30;-1:-1:-1;;;16066:18:1;;;16059:52;16128:18;;52503:68:0;15806:346:1;52503:68:0;52638:16;;-1:-1:-1;;;;;52590:30:0;;;;;;:15;:30;;;;;;:44;;52623:11;;52590:44;:::i;:::-;:64;;52582:97;;;;-1:-1:-1;;;52582:97:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52690:30:0;;;;;;:15;:30;;;;;:45;;52724:11;;52690:30;:45;;52724:11;;52690:45;:::i;:::-;;;;-1:-1:-1;;52783:4:0;;52767:21;;:11;;:15;:21::i;:::-;52754:9;:34;52746:66;;;;-1:-1:-1;;;52746:66:0;;16706:2:1;52746:66:0;;;16688:21:1;16745:2;16725:18;;;16718:30;-1:-1:-1;;;16764:18:1;;;16757:49;16823:18;;52746:66:0;16504:343:1;52746:66:0;52835:11;52827:4;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;52857:21:0;;;;;;:6;:21;;;;;:36;;52882:11;;52857:21;:36;;52882:11;;52857:36;:::i;:::-;;;;-1:-1:-1;52911:9:0;;-1:-1:-1;52906:429:0;52930:11;52926:1;:15;52906:429;;;52963:11;52977:52;53020:8;;52977:38;53013:1;52977:31;52995:12;;52977:13;40636:10;:17;;40548:113;52977:52;52963:66;-1:-1:-1;53050:22:0;;53046:82;;53108:3;53098:14;53102:4;;53098:14;;;;;;;:::i;:::-;;;;;;;;53046:82;53144:13;;;;:8;:13;;;;;;;;:29;;-1:-1:-1;;;;;;53144:29:0;-1:-1:-1;;;;;53144:29:0;;;;;;;;53188:35;;:20;:35;;;;;:37;;;;;;:::i;:::-;;;;;;53240:29;53250:13;53265:3;53240:9;:29::i;:::-;53307:10;;53289:34;;53319:3;;53307:10;;;53289:34;;53307:10;;53289:34;-1:-1:-1;52943:3:0;;;;:::i;:::-;;;;52906:429;;53369:107;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;53450:10:::1;:18:::0;;-1:-1:-1;;53450:18:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;53369:107::o;30148:185::-;30286:39;30303:4;30309:2;30313:7;30286:39;;;;;;;;;;;;:16;:39::i;54389:386::-;54476:16;54510:23;54536:17;54546:6;54536:9;:17::i;:::-;54510:43;;54564:25;54606:15;54592:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54592:30:0;;54564:58;;54638:9;54633:109;54653:15;54649:1;:19;54633:109;;;54700:30;54720:6;54728:1;54700:19;:30::i;:::-;54686:8;54695:1;54686:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;54670:3;;;;:::i;:::-;;;;54633:109;;;-1:-1:-1;54759:8:0;54389:386;-1:-1:-1;;;54389:386:0:o;40738:233::-;40813:7;40849:30;40636:10;:17;;40548:113;40849:30;40841:5;:38;40833:95;;;;-1:-1:-1;;;40833:95:0;;22001:2:1;40833:95:0;;;21983:21:1;22040:2;22020:18;;;22013:30;22079:34;22059:18;;;22052:62;-1:-1:-1;;;22130:18:1;;;22123:42;22182:19;;40833:95:0;21799:408:1;40833:95:0;40946:10;40957:5;40946:17;;;;;;;;:::i;:::-;;;;;;;;;40939:24;;40738:233;;;:::o;53626:749::-;4128:6;;53809:7;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;53862:9:::1;;53844:14;53837:4;;:21;;;;:::i;:::-;:34;;53829:63;;;::::0;-1:-1:-1;;;53829:63:0;;22414:2:1;53829:63:0::1;::::0;::::1;22396:21:1::0;22453:2;22433:18;;;22426:30;-1:-1:-1;;;22472:18:1;;;22465:46;22528:18;;53829:63:0::1;22212:340:1::0;53829:63:0::1;53913:14;53905:4;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;53953:9:0::1;::::0;-1:-1:-1;53948:401:0::1;53972:14;53968:1;:18;53948:401;;;54008:11;54022:52;54065:8;;54022:38;54058:1;54022:31;54040:12;;54022:13;40636:10:::0;:17;;40548:113;54022:52:::1;54008:66:::0;-1:-1:-1;54091:22:0;;54087:74:::1;;54145:3;54135:14;54139:4;;54135:14;;;;;;;:::i;:::-;;;;;;;;54087:74;54173:13;::::0;;;:8:::1;:13;::::0;;;;;;;:26;;-1:-1:-1;;;;;;54173:26:0::1;54189:10;54173:26;::::0;;-1:-1:-1;;;;;54210:35:0;::::1;::::0;;:20:::1;:35:::0;;;;;:37;;;::::1;::::0;::::1;:::i;:::-;;;;;;54258:29;54268:13;54283:3;54258:9;:29::i;:::-;54321:10;::::0;54303:34:::1;::::0;54333:3;;54321:10:::1;;::::0;54303:34:::1;::::0;54321:10:::1;::::0;54303:34:::1;-1:-1:-1::0;53988:3:0;::::1;::::0;::::1;:::i;:::-;;;;53948:401;;;-1:-1:-1::0;54366:1:0::1;::::0;53626:749;-1:-1:-1;;;;;53626:749:0:o;55947:104::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;56022:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;55947:104:::0;:::o;56934:504::-;57076:42;;;;;;;;;;;-1:-1:-1;;;57076:42:0;;;;57150:13;;57160:2;57150:13;;;56994;57150;;;;;;-1:-1:-1;;;;;57044:20:0;;;57076:42;-1:-1:-1;;57150:13:0;;;;;;;;;;-1:-1:-1;57150:13:0;57131:32;;-1:-1:-1;;;57174:3:0;57178:1;57174:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;57174:12:0;;;;;;;;;-1:-1:-1;;;57197:3:0;57201:1;57197:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;57197:12:0;;;;;;;;;57225:6;57220:182;57241:2;57237:1;:6;57220:182;;;57278:8;57315:1;57298:5;57304:6;:1;57308:2;57304:6;:::i;:::-;57298:13;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;57298:18:0;;;;57292:25;;57287:31;;57278:41;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;57278:41:0;57265:3;57271;:1;57273;57271:3;:::i;:::-;57269:5;;:1;:5;:::i;:::-;57265:10;;;;;;;;:::i;:::-;;;;:54;-1:-1:-1;;;;;57265:54:0;;;;;;;;-1:-1:-1;57347:8:0;57367:5;57373:6;:1;57377:2;57373:6;:::i;:::-;57367:13;;;;;;;:::i;:::-;57347:43;;57367:13;;;57383:4;57361:27;;57347:43;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;57347:43:0;57334:3;57340;:1;57342;57340:3;:::i;:::-;57338:5;;:1;:5;:::i;:::-;57334:10;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;57334:56:0;;;;;;;;-1:-1:-1;57245:3:0;;;;:::i;:::-;;;;57220:182;;;-1:-1:-1;57426:3:0;56934:504;-1:-1:-1;;;;56934:504:0:o;27123:239::-;27195:7;27231:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27231:16:0;;27258:73;;;;-1:-1:-1;;;27258:73:0;;22759:2:1;27258:73:0;;;22741:21:1;22798:2;22778:18;;;22771:30;22837:34;22817:18;;;22810:62;-1:-1:-1;;;22888:18:1;;;22881:39;22937:19;;27258:73:0;22557:405:1;46219:21:0;;;;;;;:::i;26853:208::-;26925:7;-1:-1:-1;;;;;26953:19:0;;26945:74;;;;-1:-1:-1;;;26945:74:0;;23169:2:1;26945:74:0;;;23151:21:1;23208:2;23188:18;;;23181:30;23247:34;23227:18;;;23220:62;-1:-1:-1;;;23298:18:1;;;23291:40;23348:19;;26945:74:0;22967:406:1;26945:74:0;-1:-1:-1;;;;;;27037:16:0;;;;;:9;:16;;;;;;;26853:208::o;4706:103::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;4771:30:::1;4798:1;4771:18;:30::i;:::-;4706:103::o:0;55843:96::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;55914:4:::1;:17:::0;55843:96::o;55715:120::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;55796:18:::1;:31:::0;55715:120::o;58116:471::-;58264:2;58254:13;;;;;58180;58254;;;;;58180;58206:7;;;;58254:13;;;;;;;;;;-1:-1:-1;58254:13:0;58228:39;;58287:1;58283:5;;58278:266;58294:10;:17;58290:1;:21;;;58278:266;;;58335:8;58352;58361:3;58363:1;58361;:3;:::i;:::-;58352:13;;;;;;;;;:::i;:::-;;58368:4;58346:27;;-1:-1:-1;58388:8:0;58422:1;58405:8;58414:3;58416:1;58414;:3;:::i;:::-;58405:13;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;58405:18:0;;;;58399:25;;58388:36;;58457:10;58464:2;58457:6;:10::i;:::-;58441;58452:1;58441:13;;;;;;;;;;:::i;:::-;;;;:26;-1:-1:-1;;;;;58441:26:0;;;;;;;;-1:-1:-1;58486:5:0;:1;58490;58486:5;:::i;:::-;58482:9;;58522:10;58529:2;58522:6;:10::i;:::-;58506;58517:1;58506:13;;;;;;;;;;:::i;:::-;;;;:26;-1:-1:-1;;;;;58506:26:0;;;;;;;;;58318:226;;58313:3;;;;;:::i;:::-;;;;58278:266;;;58568:10;58116:471;-1:-1:-1;;;58116:471:0:o;27598:104::-;27654:13;27687:7;27680:14;;;;;:::i;59491:279::-;59597:7;59626;59644:9;59664;59698:19;59713:3;59698:14;:19::i;:::-;59735:27;;;;;;;;;;;;23994:25:1;;;24067:4;24055:17;;24035:18;;;24028:45;;;;24089:18;;;24082:34;;;24132:18;;;24125:34;;;59686:31:0;;-1:-1:-1;59686:31:0;;-1:-1:-1;59686:31:0;-1:-1:-1;59735:27:0;;23966:19:1;;59735:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;59735:27:0;;-1:-1:-1;;59735:27:0;;;59491:279;-1:-1:-1;;;;;;;59491:279:0:o;55587:120::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;55668:18:::1;:31:::0;55587:120::o;29281:155::-;29376:52;2886:10;29409:8;29419;29376:18;:52::i;55376:71::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;55424:8:::1;:15:::0;;-1:-1:-1;;55424:15:0::1;;;::::0;;55376:71::o;58917:566::-;59007:5;59014:7;59023;59056:3;:10;59070:2;59056:16;59048:25;;;;;;-1:-1:-1;;;59246:2:0;59237:12;;59231:19;59316:2;59307:12;;59301:19;59423:2;59414:12;;;59408:19;59086:9;59400:28;;59231:19;;59301;58917:566::o;60010:205::-;60061:6;60092:2;60083:6;:11;;;60080:128;;;60125:11;:6;60134:2;60125:11;:::i;:::-;60118:19;;;60010:205;-1:-1:-1;;60010:205:0:o;60080:128::-;60184:11;:6;60193:2;60184:11;:::i;60080:128::-;60010:205;;;:::o;59780:220::-;59860:4;59876:15;59921:5;59904:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;59904:23:0;;;;;;;;;59894:34;;59904:23;59894:34;;;;59978:13;;59894:34;;-1:-1:-1;;;;;;59978:13:0;59947:27;59894:34;59970:3;59947:13;:27::i;:::-;-1:-1:-1;;;;;59947:44:0;;;59780:220;-1:-1:-1;;;;59780:220:0:o;55459:120::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;55540:18:::1;:31:::0;55459:120::o;30404:328::-;30579:41;2886:10;30612:7;30579:18;:41::i;:::-;30571:103;;;;-1:-1:-1;;;30571:103:0;;;;;;;:::i;:::-;30685:39;30699:4;30705:2;30709:7;30718:5;30685:13;:39::i;:::-;30404:328;;;;:::o;46247:37::-;;;;;;;:::i;54785:565::-;32307:4;32331:16;;;:7;:16;;;;;;54903:13;;-1:-1:-1;;;;;32331:16:0;54934:105;;;;-1:-1:-1;;;54934:105:0;;24653:2:1;54934:105:0;;;24635:21:1;24692:2;24672:18;;;24665:30;24731:34;24711:18;;;24704:62;-1:-1:-1;;;24782:18:1;;;24775:45;24837:19;;54934:105:0;24451:411:1;54934:105:0;55063:8;;;;;;;:17;;55075:5;55063:17;55060:70;;55104:14;55097:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54785:565;;;:::o;55060:70::-;55142:28;55173:10;:8;:10::i;:::-;55142:41;;55232:1;55207:14;55201:28;:32;:141;;;;;;;;;;;;;;;;;55273:14;55289:18;:7;:16;:18::i;:::-;55309:13;55256:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55194:148;54785:565;-1:-1:-1;;;54785:565:0:o;58595:314::-;58753:26;;58663:14;;58731:6;;58753:31;;58749:74;;-1:-1:-1;58808:3:0;;58595:314;-1:-1:-1;;58595:314:0:o;58749:74::-;-1:-1:-1;;58887:2:0;58875:15;58869:22;;58595:314::o;56059:128::-;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;56146:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;56199:126::-:0;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;56285:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;4964:201::-:0;4128:6;;-1:-1:-1;;;;;4128:6:0;2886:10;4275:23;4267:68;;;;-1:-1:-1;;;4267:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5053:22:0;::::1;5045:73;;;::::0;-1:-1:-1;;;5045:73:0;;26727:2:1;5045:73:0::1;::::0;::::1;26709:21:1::0;26766:2;26746:18;;;26739:30;26805:34;26785:18;;;26778:62;-1:-1:-1;;;26856:18:1;;;26849:36;26902:19;;5045:73:0::1;26525:402:1::0;5045:73:0::1;5129:28;5148:8;5129:18;:28::i;26484:305::-:0;26586:4;-1:-1:-1;;;;;;26623:40:0;;-1:-1:-1;;;26623:40:0;;:105;;-1:-1:-1;;;;;;;26680:48:0;;-1:-1:-1;;;26680:48:0;26623:105;:158;;;-1:-1:-1;;;;;;;;;;16488:40:0;;;26745:36;16379:157;36224:174;36299:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36299:29:0;-1:-1:-1;;;;;36299:29:0;;;;;;;;:24;;36353:23;36299:24;36353:14;:23::i;:::-;-1:-1:-1;;;;;36344:46:0;;;;;;;;;;;36224:174;;:::o;24650:163::-;24708:7;;24736:5;24740:1;24736;:5;:::i;:::-;24724:17;;24761:1;24756;:6;;24748:41;;;;-1:-1:-1;;;24748:41:0;;27134:2:1;24748:41:0;;;27116:21:1;27173:2;27153:18;;;27146:30;-1:-1:-1;;;27192:18:1;;;27185:52;27254:18;;24748:41:0;26932:346:1;24407:163:0;24465:7;24494:1;24489;:6;;24481:42;;;;-1:-1:-1;;;24481:42:0;;27485:2:1;24481:42:0;;;27467:21:1;27524:2;27504:18;;;27497:30;27563:25;27543:18;;;27536:53;27606:18;;24481:42:0;27283:347:1;24481:42:0;24530:9;24542:5;24546:1;24542;:5;:::i;23416:419::-;23474:7;23702:1;23707;23702:6;23698:37;;-1:-1:-1;23726:1:0;23719:8;;23698:37;23743:9;23755:5;23759:1;23755;:5;:::i;:::-;23743:17;-1:-1:-1;23784:1:0;23775:5;23779:1;23743:17;23775:5;:::i;:::-;:10;23767:45;;;;-1:-1:-1;;;23767:45:0;;27837:2:1;23767:45:0;;;27819:21:1;27876:2;27856:18;;;27849:30;-1:-1:-1;;;27895:18:1;;;27888:52;27957:18;;23767:45:0;27635:346:1;33226:110:0;33302:26;33312:2;33316:7;33302:26;;;;;;;;;;;;:9;:26::i;32536:348::-;32629:4;32331:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32331:16:0;32646:73;;;;-1:-1:-1;;;32646:73:0;;28188:2:1;32646:73:0;;;28170:21:1;28227:2;28207:18;;;28200:30;28266:34;28246:18;;;28239:62;-1:-1:-1;;;28317:18:1;;;28310:42;28369:19;;32646:73:0;27986:408:1;32646:73:0;32730:13;32746:23;32761:7;32746:14;:23::i;:::-;32730:39;;32799:5;-1:-1:-1;;;;;32788:16:0;:7;-1:-1:-1;;;;;32788:16:0;;:51;;;;32832:7;-1:-1:-1;;;;;32808:31:0;:20;32820:7;32808:11;:20::i;:::-;-1:-1:-1;;;;;32808:31:0;;32788:51;:87;;;-1:-1:-1;;;;;;29628:25:0;;;29604:4;29628:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;32843:32;29507:164;35528:578;35687:4;-1:-1:-1;;;;;35660:31:0;:23;35675:7;35660:14;:23::i;:::-;-1:-1:-1;;;;;35660:31:0;;35652:85;;;;-1:-1:-1;;;35652:85:0;;28601:2:1;35652:85:0;;;28583:21:1;28640:2;28620:18;;;28613:30;28679:34;28659:18;;;28652:62;-1:-1:-1;;;28730:18:1;;;28723:39;28779:19;;35652:85:0;28399:405:1;35652:85:0;-1:-1:-1;;;;;35756:16:0;;35748:65;;;;-1:-1:-1;;;35748:65:0;;29011:2:1;35748:65:0;;;28993:21:1;29050:2;29030:18;;;29023:30;29089:34;29069:18;;;29062:62;-1:-1:-1;;;29140:18:1;;;29133:34;29184:19;;35748:65:0;28809:400:1;35748:65:0;35826:39;35847:4;35853:2;35857:7;35826:20;:39::i;:::-;35930:29;35947:1;35951:7;35930:8;:29::i;:::-;-1:-1:-1;;;;;35972:15:0;;;;;;:9;:15;;;;;:20;;35991:1;;35972:15;:20;;35991:1;;35972:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36003:13:0;;;;;;:9;:13;;;;;:18;;36020:1;;36003:13;:18;;36020:1;;36003:18;:::i;:::-;;;;-1:-1:-1;;36032:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36032:21:0;-1:-1:-1;;;;;36032:21:0;;;;;;;;;36071:27;;36032:16;;36071:27;;;;;;;35528:578;;;:::o;57917:191::-;57984:8;58020:2;58009:8;;;;:13;58005:95;;;58038:15;:8;;;;58049:4;58038:15;:::i;58005:95::-;58084:15;:8;;;;58095:4;58084:15;:::i;5325:191::-;5418:6;;;-1:-1:-1;;;;;5435:17:0;;;-1:-1:-1;;;;;;5435:17:0;;;;;;;5468:40;;5418:6;;;5435:17;5418:6;;5468:40;;5399:16;;5468:40;5388:128;5325:191;:::o;36540:315::-;36695:8;-1:-1:-1;;;;;36686:17:0;:5;-1:-1:-1;;;;;36686:17:0;;36678:55;;;;-1:-1:-1;;;36678:55:0;;29416:2:1;36678:55:0;;;29398:21:1;29455:2;29435:18;;;29428:30;29494:27;29474:18;;;29467:55;29539:18;;36678:55:0;29214:349:1;36678:55:0;-1:-1:-1;;;;;36744:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36744:46:0;;;;;;;;;;36806:41;;540::1;;;36806::0;;513:18:1;36806:41:0;;;;;;;36540:315;;;:::o;31614:::-;31771:28;31781:4;31787:2;31791:7;31771:9;:28::i;:::-;31818:48;31841:4;31847:2;31851:7;31860:5;31818:22;:48::i;:::-;31810:111;;;;-1:-1:-1;;;31810:111:0;;;;;;;:::i;48234:108::-;48294:13;48327:7;48320:14;;;;;:::i;399:723::-;455:13;676:5;685:1;676:10;672:53;;-1:-1:-1;;703:10:0;;;;;;;;;;;;-1:-1:-1;;;703:10:0;;;;;399:723::o;672:53::-;750:5;735:12;791:78;798:9;;791:78;;824:8;;;;:::i;:::-;;-1:-1:-1;847:10:0;;-1:-1:-1;855:2:0;847:10;;:::i;:::-;;;791:78;;;879:19;911:6;901:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;901:17:0;;879:39;;929:154;936:10;;929:154;;963:11;973:1;963:11;;:::i;:::-;;-1:-1:-1;1032:10:0;1040:2;1032:5;:10;:::i;:::-;1019:24;;:2;:24;:::i;:::-;1006:39;;989:6;996;989:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;989:56:0;;;;;;;;-1:-1:-1;1060:11:0;1069:2;1060:11;;:::i;:::-;;;929:154;;33563:321;33693:18;33699:2;33703:7;33693:5;:18::i;:::-;33744:54;33775:1;33779:2;33783:7;33792:5;33744:22;:54::i;:::-;33722:154;;;;-1:-1:-1;;;33722:154:0;;;;;;;:::i;41584:589::-;-1:-1:-1;;;;;41790:18:0;;41786:187;;41825:40;41857:7;43000:10;:17;;42973:24;;;;:15;:24;;;;;:44;;;43028:24;;;;;;;;;;;;42896:164;41825:40;41786:187;;;41895:2;-1:-1:-1;;;;;41887:10:0;:4;-1:-1:-1;;;;;41887:10:0;;41883:90;;41914:47;41947:4;41953:7;41914:32;:47::i;:::-;-1:-1:-1;;;;;41987:16:0;;41983:183;;42020:45;42057:7;42020:36;:45::i;41983:183::-;42093:4;-1:-1:-1;;;;;42087:10:0;:2;-1:-1:-1;;;;;42087:10:0;;42083:83;;42114:40;42142:2;42146:7;42114:27;:40::i;37420:799::-;37575:4;-1:-1:-1;;;;;37596:13:0;;6639:20;6687:8;37592:620;;37632:72;;-1:-1:-1;;;37632:72:0;;-1:-1:-1;;;;;37632:36:0;;;;;:72;;2886:10;;37683:4;;37689:7;;37698:5;;37632:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37632:72:0;;;;;;;;-1:-1:-1;;37632:72:0;;;;;;;;;;;;:::i;:::-;;;37628:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37874:6;:13;37891:1;37874:18;37870:272;;37917:60;;-1:-1:-1;;;37917:60:0;;;;;;;:::i;37870:272::-;38092:6;38086:13;38077:6;38073:2;38069:15;38062:38;37628:529;-1:-1:-1;;;;;;37755:51:0;-1:-1:-1;;;37755:51:0;;-1:-1:-1;37748:58:0;;37592:620;-1:-1:-1;38196:4:0;38189:11;;34220:382;-1:-1:-1;;;;;34300:16:0;;34292:61;;;;-1:-1:-1;;;34292:61:0;;31054:2:1;34292:61:0;;;31036:21:1;;;31073:18;;;31066:30;31132:34;31112:18;;;31105:62;31184:18;;34292:61:0;30852:356:1;34292:61:0;32307:4;32331:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32331:16:0;:30;34364:58;;;;-1:-1:-1;;;34364:58:0;;31415:2:1;34364:58:0;;;31397:21:1;31454:2;31434:18;;;31427:30;31493;31473:18;;;31466:58;31541:18;;34364:58:0;31213:352:1;34364:58:0;34435:45;34464:1;34468:2;34472:7;34435:20;:45::i;:::-;-1:-1:-1;;;;;34493:13:0;;;;;;:9;:13;;;;;:18;;34510:1;;34493:13;:18;;34510:1;;34493:18;:::i;:::-;;;;-1:-1:-1;;34522:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34522:21:0;-1:-1:-1;;;;;34522:21:0;;;;;;;;34561:33;;34522:16;;;34561:33;;34522:16;;34561:33;34220:382;;:::o;43687:988::-;43953:22;44003:1;43978:22;43995:4;43978:16;:22::i;:::-;:26;;;;:::i;:::-;44015:18;44036:26;;;:17;:26;;;;;;43953:51;;-1:-1:-1;44169:28:0;;;44165:328;;-1:-1:-1;;;;;44236:18:0;;44214:19;44236:18;;;:12;:18;;;;;;;;:34;;;;;;;;;44287:30;;;;;;:44;;;44404:30;;:17;:30;;;;;:43;;;44165:328;-1:-1:-1;44589:26:0;;;;:17;:26;;;;;;;;44582:33;;;-1:-1:-1;;;;;44633:18:0;;;;;:12;:18;;;;;:34;;;;;;;44626:41;43687:988::o;44970:1079::-;45248:10;:17;45223:22;;45248:21;;45268:1;;45248:21;:::i;:::-;45280:18;45301:24;;;:15;:24;;;;;;45674:10;:26;;45223:46;;-1:-1:-1;45301:24:0;;45223:46;;45674:26;;;;;;:::i;:::-;;;;;;;;;45652:48;;45738:11;45713:10;45724;45713:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;45818:28;;;:15;:28;;;;;;;:41;;;45990:24;;;;;45983:31;46025:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;45041:1008;;;44970:1079;:::o;42474:221::-;42559:14;42576:20;42593:2;42576:16;:20::i;:::-;-1:-1:-1;;;;;42607:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;42652:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;42474:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;757:180;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:258::-;1014:1;1024:113;1038:6;1035:1;1032:13;1024:113;;;1114:11;;;1108:18;1095:11;;;1088:39;1060:2;1053:10;1024:113;;;1155:6;1152:1;1149:13;1146:48;;;-1:-1:-1;;1190:1:1;1172:16;;1165:27;942:258::o;1205:::-;1247:3;1285:5;1279:12;1312:6;1307:3;1300:19;1328:63;1384:6;1377:4;1372:3;1368:14;1361:4;1354:5;1350:16;1328:63;:::i;:::-;1445:2;1424:15;-1:-1:-1;;1420:29:1;1411:39;;;;1452:4;1407:50;;1205:258;-1:-1:-1;;1205:258:1:o;1468:220::-;1617:2;1606:9;1599:21;1580:4;1637:45;1678:2;1667:9;1663:18;1655:6;1637:45;:::i;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:1;;1693:180;-1:-1:-1;1693:180:1:o;2086:131::-;-1:-1:-1;;;;;2161:31:1;;2151:42;;2141:70;;2207:1;2204;2197:12;2222:247;2281:6;2334:2;2322:9;2313:7;2309:23;2305:32;2302:52;;;2350:1;2347;2340:12;2302:52;2389:9;2376:23;2408:31;2433:5;2408:31;:::i;2656:315::-;2724:6;2732;2785:2;2773:9;2764:7;2760:23;2756:32;2753:52;;;2801:1;2798;2791:12;2753:52;2840:9;2827:23;2859:31;2884:5;2859:31;:::i;:::-;2909:5;2961:2;2946:18;;;;2933:32;;-1:-1:-1;;;2656:315:1:o;2976:347::-;3027:8;3037:6;3091:3;3084:4;3076:6;3072:17;3068:27;3058:55;;3109:1;3106;3099:12;3058:55;-1:-1:-1;3132:20:1;;3175:18;3164:30;;3161:50;;;3207:1;3204;3197:12;3161:50;3244:4;3236:6;3232:17;3220:29;;3296:3;3289:4;3280:6;3272;3268:19;3264:30;3261:39;3258:59;;;3313:1;3310;3303:12;3258:59;2976:347;;;;;:::o;3328:612::-;3416:6;3424;3432;3440;3493:2;3481:9;3472:7;3468:23;3464:32;3461:52;;;3509:1;3506;3499:12;3461:52;3548:9;3535:23;3567:31;3592:5;3567:31;:::i;:::-;3617:5;-1:-1:-1;3669:2:1;3654:18;;3641:32;;-1:-1:-1;3724:2:1;3709:18;;3696:32;3751:18;3740:30;;3737:50;;;3783:1;3780;3773:12;3737:50;3822:58;3872:7;3863:6;3852:9;3848:22;3822:58;:::i;:::-;3328:612;;;;-1:-1:-1;3899:8:1;-1:-1:-1;;;;3328:612:1:o;4138:456::-;4215:6;4223;4231;4284:2;4272:9;4263:7;4259:23;4255:32;4252:52;;;4300:1;4297;4290:12;4252:52;4339:9;4326:23;4358:31;4383:5;4358:31;:::i;:::-;4408:5;-1:-1:-1;4465:2:1;4450:18;;4437:32;4478:33;4437:32;4478:33;:::i;:::-;4138:456;;4530:7;;-1:-1:-1;;;4584:2:1;4569:18;;;;4556:32;;4138:456::o;4859:127::-;4920:10;4915:3;4911:20;4908:1;4901:31;4951:4;4948:1;4941:15;4975:4;4972:1;4965:15;4991:719;5034:5;5087:3;5080:4;5072:6;5068:17;5064:27;5054:55;;5105:1;5102;5095:12;5054:55;5141:6;5128:20;5167:18;5204:2;5200;5197:10;5194:36;;;5210:18;;:::i;:::-;5285:2;5279:9;5253:2;5339:13;;-1:-1:-1;;5335:22:1;;;5359:2;5331:31;5327:40;5315:53;;;5383:18;;;5403:22;;;5380:46;5377:72;;;5429:18;;:::i;:::-;5469:10;5465:2;5458:22;5504:2;5496:6;5489:18;5550:3;5543:4;5538:2;5530:6;5526:15;5522:26;5519:35;5516:55;;;5567:1;5564;5557:12;5516:55;5631:2;5624:4;5616:6;5612:17;5605:4;5597:6;5593:17;5580:54;5678:1;5671:4;5666:2;5658:6;5654:15;5650:26;5643:37;5698:6;5689:15;;;;;;4991:719;;;;:::o;5715:525::-;5802:6;5810;5818;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;5926:9;5913:23;5945:31;5970:5;5945:31;:::i;:::-;5995:5;-1:-1:-1;6047:2:1;6032:18;;6019:32;;-1:-1:-1;6102:2:1;6087:18;;6074:32;6129:18;6118:30;;6115:50;;;6161:1;6158;6151:12;6115:50;6184;6226:7;6217:6;6206:9;6202:22;6184:50;:::i;:::-;6174:60;;;5715:525;;;;;:::o;6863:272::-;6921:6;6974:2;6962:9;6953:7;6949:23;6945:32;6942:52;;;6990:1;6987;6980:12;6942:52;7029:9;7016:23;7079:6;7072:5;7068:18;7061:5;7058:29;7048:57;;7101:1;7098;7091:12;7140:632;7311:2;7363:21;;;7433:13;;7336:18;;;7455:22;;;7282:4;;7311:2;7534:15;;;;7508:2;7493:18;;;7282:4;7577:169;7591:6;7588:1;7585:13;7577:169;;;7652:13;;7640:26;;7721:15;;;;7686:12;;;;7613:1;7606:9;7577:169;;;-1:-1:-1;7763:3:1;;7140:632;-1:-1:-1;;;;;;7140:632:1:o;7777:322::-;7846:6;7899:2;7887:9;7878:7;7874:23;7870:32;7867:52;;;7915:1;7912;7905:12;7867:52;7955:9;7942:23;7988:18;7980:6;7977:30;7974:50;;;8020:1;8017;8010:12;7974:50;8043;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;8512:389::-;8589:6;8597;8650:2;8638:9;8629:7;8625:23;8621:32;8618:52;;;8666:1;8663;8656:12;8618:52;8702:9;8689:23;8679:33;;8763:2;8752:9;8748:18;8735:32;8790:18;8782:6;8779:30;8776:50;;;8822:1;8819;8812:12;8776:50;8845;8887:7;8878:6;8867:9;8863:22;8845:50;:::i;:::-;8835:60;;;8512:389;;;;;:::o;8906:315::-;8971:6;8979;9032:2;9020:9;9011:7;9007:23;9003:32;9000:52;;;9048:1;9045;9038:12;9000:52;9087:9;9074:23;9106:31;9131:5;9106:31;:::i;:::-;9156:5;-1:-1:-1;9180:35:1;9211:2;9196:18;;9180:35;:::i;:::-;9170:45;;8906:315;;;;;:::o;9883:269::-;9940:6;9993:2;9981:9;9972:7;9968:23;9964:32;9961:52;;;10009:1;10006;9999:12;9961:52;10048:9;10035:23;10098:4;10091:5;10087:16;10080:5;10077:27;10067:55;;10118:1;10115;10108:12;10357:542;10444:6;10452;10505:2;10493:9;10484:7;10480:23;10476:32;10473:52;;;10521:1;10518;10511:12;10473:52;10561:9;10548:23;10590:18;10631:2;10623:6;10620:14;10617:34;;;10647:1;10644;10637:12;10617:34;10670:50;10712:7;10703:6;10692:9;10688:22;10670:50;:::i;:::-;10660:60;;10773:2;10762:9;10758:18;10745:32;10729:48;;10802:2;10792:8;10789:16;10786:36;;;10818:1;10815;10808:12;10786:36;;10841:52;10885:7;10874:8;10863:9;10859:24;10841:52;:::i;10904:666::-;10999:6;11007;11015;11023;11076:3;11064:9;11055:7;11051:23;11047:33;11044:53;;;11093:1;11090;11083:12;11044:53;11132:9;11119:23;11151:31;11176:5;11151:31;:::i;:::-;11201:5;-1:-1:-1;11258:2:1;11243:18;;11230:32;11271:33;11230:32;11271:33;:::i;:::-;11323:7;-1:-1:-1;11377:2:1;11362:18;;11349:32;;-1:-1:-1;11432:2:1;11417:18;;11404:32;11459:18;11448:30;;11445:50;;;11491:1;11488;11481:12;11445:50;11514;11556:7;11547:6;11536:9;11532:22;11514:50;:::i;:::-;11504:60;;;10904:666;;;;;;;:::o;11757:388::-;11825:6;11833;11886:2;11874:9;11865:7;11861:23;11857:32;11854:52;;;11902:1;11899;11892:12;11854:52;11941:9;11928:23;11960:31;11985:5;11960:31;:::i;:::-;12010:5;-1:-1:-1;12067:2:1;12052:18;;12039:32;12080:33;12039:32;12080:33;:::i;:::-;12132:7;12122:17;;;11757:388;;;;;:::o;12150:356::-;12352:2;12334:21;;;12371:18;;;12364:30;12430:34;12425:2;12410:18;;12403:62;12497:2;12482:18;;12150:356::o;12511:380::-;12590:1;12586:12;;;;12633;;;12654:61;;12708:4;12700:6;12696:17;12686:27;;12654:61;12761:2;12753:6;12750:14;12730:18;12727:38;12724:161;;12807:10;12802:3;12798:20;12795:1;12788:31;12842:4;12839:1;12832:15;12870:4;12867:1;12860:15;12724:161;;12511:380;;;:::o;14483:127::-;14544:10;14539:3;14535:20;14532:1;14525:31;14575:4;14572:1;14565:15;14599:4;14596:1;14589:15;14615:128;14655:3;14686:1;14682:6;14679:1;14676:13;14673:39;;;14692:18;;:::i;:::-;-1:-1:-1;14728:9:1;;14615:128::o;14748:344::-;14950:2;14932:21;;;14989:2;14969:18;;;14962:30;-1:-1:-1;;;15023:2:1;15008:18;;15001:50;15083:2;15068:18;;14748:344::o;15097:348::-;15299:2;15281:21;;;15338:2;15318:18;;;15311:30;15377:26;15372:2;15357:18;;15350:54;15436:2;15421:18;;15097:348::o;16852:135::-;16891:3;16912:17;;;16909:43;;16932:18;;:::i;:::-;-1:-1:-1;16979:1:1;16968:13;;16852:135::o;16992:413::-;17194:2;17176:21;;;17233:2;17213:18;;;17206:30;17272:34;17267:2;17252:18;;17245:62;-1:-1:-1;;;17338:2:1;17323:18;;17316:47;17395:3;17380:19;;16992:413::o;17410:125::-;17450:4;17478:1;17475;17472:8;17469:34;;;17483:18;;:::i;:::-;-1:-1:-1;17520:9:1;;17410:125::o;17540:168::-;17580:7;17646:1;17642;17638:6;17634:14;17631:1;17628:21;17623:1;17616:9;17609:17;17605:45;17602:71;;;17653:18;;:::i;:::-;-1:-1:-1;17693:9:1;;17540:168::o;17713:422::-;17802:1;17845:5;17802:1;17859:270;17880:7;17870:8;17867:21;17859:270;;;17939:4;17935:1;17931:6;17927:17;17921:4;17918:27;17915:53;;;17948:18;;:::i;:::-;17998:7;17988:8;17984:22;17981:55;;;18018:16;;;;17981:55;18097:22;;;;18057:15;;;;17859:270;;;17863:3;17713:422;;;;;:::o;18140:806::-;18189:5;18219:8;18209:80;;-1:-1:-1;18260:1:1;18274:5;;18209:80;18308:4;18298:76;;-1:-1:-1;18345:1:1;18359:5;;18298:76;18390:4;18408:1;18403:59;;;;18476:1;18471:130;;;;18383:218;;18403:59;18433:1;18424:10;;18447:5;;;18471:130;18508:3;18498:8;18495:17;18492:43;;;18515:18;;:::i;:::-;-1:-1:-1;;18571:1:1;18557:16;;18586:5;;18383:218;;18685:2;18675:8;18672:16;18666:3;18660:4;18657:13;18653:36;18647:2;18637:8;18634:16;18629:2;18623:4;18620:12;18616:35;18613:77;18610:159;;;-1:-1:-1;18722:19:1;;;18754:5;;18610:159;18801:34;18826:8;18820:4;18801:34;:::i;:::-;18871:6;18867:1;18863:6;18859:19;18850:7;18847:32;18844:58;;;18882:18;;:::i;:::-;18920:20;;18140:806;-1:-1:-1;;;18140:806:1:o;18951:131::-;19011:5;19040:36;19067:8;19061:4;19040:36;:::i;19087:127::-;19148:10;19143:3;19139:20;19136:1;19129:31;19179:4;19176:1;19169:15;19203:4;19200:1;19193:15;19219:120;19259:1;19285;19275:35;;19290:18;;:::i;:::-;-1:-1:-1;19324:9:1;;19219:120::o;19344:165::-;19382:1;19416:4;19413:1;19409:12;19440:3;19430:37;;19447:18;;:::i;:::-;19499:3;19492:4;19489:1;19485:12;19481:22;19476:27;;;19344:165;;;;:::o;19514:238::-;19552:7;19592:4;19589:1;19585:12;19624:4;19621:1;19617:12;19684:3;19678:4;19674:14;19669:3;19666:23;19659:3;19652:11;19645:19;19641:49;19638:75;;;19693:18;;:::i;19757:195::-;19795:4;19832;19829:1;19825:12;19864:4;19861:1;19857:12;19889:3;19884;19881:12;19878:38;;;19896:18;;:::i;:::-;19933:13;;;19757:195;-1:-1:-1;;;19757:195:1:o;19957:127::-;20018:10;20013:3;20009:20;20006:1;19999:31;20049:4;20046:1;20039:15;20073:4;20070:1;20063:15;21404:390;21563:2;21552:9;21545:21;21602:6;21597:2;21586:9;21582:18;21575:34;21659:6;21651;21646:2;21635:9;21631:18;21618:48;21715:1;21686:22;;;21710:2;21682:31;;;21675:42;;;;21778:2;21757:15;;;-1:-1:-1;;21753:29:1;21738:45;21734:54;;21404:390;-1:-1:-1;21404:390:1:o;23378:204::-;23416:3;23452:4;23449:1;23445:12;23484:4;23481:1;23477:12;23519:3;23513:4;23509:14;23504:3;23501:23;23498:49;;;23527:18;;:::i;:::-;23563:13;;23378:204;-1:-1:-1;;;23378:204:1:o;23587:175::-;23624:3;23668:4;23661:5;23657:16;23697:4;23688:7;23685:17;23682:43;;23705:18;;:::i;:::-;23754:1;23741:15;;23587:175;-1:-1:-1;;23587:175:1:o;24170:276::-;24301:3;24339:6;24333:13;24355:53;24401:6;24396:3;24389:4;24381:6;24377:17;24355:53;:::i;:::-;24424:16;;;;;24170:276;-1:-1:-1;;24170:276:1:o;24993:1527::-;25217:3;25255:6;25249:13;25281:4;25294:51;25338:6;25333:3;25328:2;25320:6;25316:15;25294:51;:::i;:::-;25408:13;;25367:16;;;;25430:55;25408:13;25367:16;25452:15;;;25430:55;:::i;:::-;25574:13;;25507:20;;;25547:1;;25634;25656:18;;;;25709;;;;25736:93;;25814:4;25804:8;25800:19;25788:31;;25736:93;25877:2;25867:8;25864:16;25844:18;25841:40;25838:167;;-1:-1:-1;;;25904:33:1;;25960:4;25957:1;25950:15;25990:4;25911:3;25978:17;25838:167;26021:18;26048:110;;;;26172:1;26167:328;;;;26014:481;;26048:110;-1:-1:-1;;26083:24:1;;26069:39;;26128:20;;;;-1:-1:-1;26048:110:1;;26167:328;24940:1;24933:14;;;24977:4;24964:18;;26262:1;26276:169;26290:8;26287:1;26284:15;26276:169;;;26372:14;;26357:13;;;26350:37;26415:16;;;;26307:10;;26276:169;;;26280:3;;26476:8;26469:5;26465:20;26458:27;;26014:481;-1:-1:-1;26511:3:1;;24993:1527;-1:-1:-1;;;;;;;;;;;24993:1527:1:o;29568:414::-;29770:2;29752:21;;;29809:2;29789:18;;;29782:30;29848:34;29843:2;29828:18;;29821:62;-1:-1:-1;;;29914:2:1;29899:18;;29892:48;29972:3;29957:19;;29568:414::o;29987:112::-;30019:1;30045;30035:35;;30050:18;;:::i;:::-;-1:-1:-1;30084:9:1;;29987:112::o;30104:489::-;-1:-1:-1;;;;;30373:15:1;;;30355:34;;30425:15;;30420:2;30405:18;;30398:43;30472:2;30457:18;;30450:34;;;30520:3;30515:2;30500:18;;30493:31;;;30298:4;;30541:46;;30567:19;;30559:6;30541:46;:::i;:::-;30533:54;30104:489;-1:-1:-1;;;;;;30104:489:1:o;30598:249::-;30667:6;30720:2;30708:9;30699:7;30695:23;30691:32;30688:52;;;30736:1;30733;30726:12;30688:52;30768:9;30762:16;30787:30;30811:5;30787:30;:::i;31570:127::-;31631:10;31626:3;31622:20;31619:1;31612:31;31662:4;31659:1;31652:15;31686:4;31683:1;31676:15
Swarm Source
ipfs://cfb948e93818b3d757b5f04670c204f8842420c249c4bba8d7ac332470f01ab3
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.