Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
486 SKYWALKERZ
Holders
304
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 SKYWALKERZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SKYWALKERZ_NFT
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-10 */ // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/NFT.sol /* IhKIU2X5P1 K2Ks :5SS i51SKXSZ :X2P iIKQi uISY U1Uu17: iPQBd7 :BBBBBBQBQB .BBBX QBQB BBBBBBBB BBBB uBBBK rBQBJ .BBBBBBBB BBBBBBBB .Yi1BBBdiv IBQB BBBS BBBL:ii. BBBj hBBB: BBBB 2BBB.:BBBB 2BBB QBQi :BBB BBBB .BBB. :BBB BBB:bBBQ BBBB BQB5 LQBB BQBB BBB BBBB BBBE bBBB DBBB .: vBBBBQBQ .BBB7 BBB: 7BBB .BBBB BBBr rBBBBBBBBBd BBBBBBB BBBBQBB PBBQ rBBB BBBB BBBQi vBBB BBBBBQBBBQ: :BBBQQB: BQBBBQB. BBBB BQBB QBB2 7BBBY BQBB BBBI PBBB gBBB iBBB BBBB BBBY BBQ7 rBBB sJY JQBB BBQ7 iBBB BBBQ BBBY RBBB :BBBr 7BBB. :BQB BBBB BBB BBB: vBBB BBBB :BBQ7 .BBBBBBBr BQB5 BBBB BBBB BBBBIKBBBB BBBX gBBB BBBB .BBBb MBBB. QBBBBBBB: rBBQ: :BBBB .BBBB BBBBBBBBQ LQBBBBBBv r::. i:i :i:: ::::.::i .i:i :::7 ::i. :.::::. iYYv: EBBQ ... BQBZ BQBd BBBQ 7QBB: BQBg LBBBBBBB 5BBB .BBBBBZv BBBB :QBP gBBB. rBBBv .BBBu BBBB :QBBu BBBBBBBB rBBBB. MBBBBBBQB BBBP BBB1 BBBL QBBB 2BBQ BBBS 5BBB BBQ: BBBBB. QBB1 .BBBK BBBr IBBBr gBBB BQBB BBQB :QBB. BBBQ :BBB BBBBBB. BBB BBBQ BBB BBBB. BQB. .BBB7 BBBr PBBB BBBr ZBBBrYU IBQJvBQ: vBBB BBQE BBB.BBBBBrbQBU KBBB rBBB BBBD rBBB BBBBBBB .BBB vBBi BBQM BBBr BBQBBB BBBBBB BBBB BBBB :BBBi BBBB :BQBj7Y. BQB. KBBv BQBi rBBB. BBBBB. BBQBB. BBBJ BBB1 2BBB BBBj MBBB 2BBBs:BBBL 7BBB BBQB BBBBP BBBBM vBBB. iBBB. BBBB iBBB. BBBK .BBQBBBQBBu BBBQ 2BBB. .BBBB BBBB BBBB BBBBBBBB .BBBBBBB: BBBBBBBQ .BBBBBBBr BBBB.::BBBP BBBBBBBBB1 :BBBi BBBL .BBQB BQBBBBBv hBBBBBBB BBQBQBBL PBBBBBBB MBBB. QBBB 7BBBBBBBB: */ pragma solidity >=0.8.0 <0.9.0; contract SKYWALKERZ_NFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = .01 ether; uint256 public maxSupply = 4060; // How many NFTs can be purchasable (via the minting site or directly from this smart contract) uint256 public maxNumberPurchasable = 2030; uint256 public maxMintAmountPerSession = 10; uint256 public nftPerAddressLimit = 30; // How many NFTs were bought (via the minting site or directly via this smart contract) uint256 public totalNftsBoughtFromContract = 0; bool public paused = false; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { uint256 ownerTokenCount = balanceOf(msg.sender); require(ownerTokenCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); require(_mintAmount <= maxMintAmountPerSession, "max mint amount per session exceeded"); require(msg.value >= cost * _mintAmount, "insufficient funds"); require(totalNftsBoughtFromContract + _mintAmount <= maxNumberPurchasable, "max number of purchasable NFTs exceeded"); totalNftsBoughtFromContract = totalNftsBoughtFromContract + _mintAmount; } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } // onlyOwner function mintToAddress(address to, uint256 _mintAmount) public onlyOwner() { uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner() { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setMaxMintAmountPerSession(uint256 _newMaxMintAmountPerSession) public onlyOwner() { maxMintAmountPerSession = _newMaxMintAmountPerSession; } function setMaxNumberPurchasable(uint256 _newMaxNumberPurchasable) public onlyOwner() { maxNumberPurchasable = _newMaxNumberPurchasable; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerSession","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNumberPurchasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmountPerSession","type":"uint256"}],"name":"setMaxMintAmountPerSession","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxNumberPurchasable","type":"uint256"}],"name":"setMaxNumberPurchasable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNftsBoughtFromContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620002d9565b50662386f26fc10000600d55610fdc600e556107ee600f55600a601055601e60115560006012556000601360006101000a81548160ff021916908315150217905550348015620000a057600080fd5b5060405162005103380380620051038339818101604052810190620000c6919062000526565b82828160009080519060200190620000e0929190620002d9565b508060019080519060200190620000f9929190620002d9565b5050506200011c620001106200013660201b60201c565b6200013e60201b60201c565b6200012d816200020460201b60201c565b505050620006c7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002146200013660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023a620002af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000293576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028a9062000640565b60405180910390fd5b80600b9080519060200190620002ab929190620002d9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002e79062000691565b90600052602060002090601f0160209004810192826200030b576000855562000357565b82601f106200032657805160ff191683800117855562000357565b8280016001018555821562000357579182015b828111156200035657825182559160200191906001019062000339565b5b5090506200036691906200036a565b5090565b5b80821115620003855760008160009055506001016200036b565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003f282620003a7565b810181811067ffffffffffffffff82111715620004145762000413620003b8565b5b80604052505050565b60006200042962000389565b9050620004378282620003e7565b919050565b600067ffffffffffffffff8211156200045a5762000459620003b8565b5b6200046582620003a7565b9050602081019050919050565b60005b838110156200049257808201518184015260208101905062000475565b83811115620004a2576000848401525b50505050565b6000620004bf620004b9846200043c565b6200041d565b905082815260208101848484011115620004de57620004dd620003a2565b5b620004eb84828562000472565b509392505050565b600082601f8301126200050b576200050a6200039d565b5b81516200051d848260208601620004a8565b91505092915050565b60008060006060848603121562000542576200054162000393565b5b600084015167ffffffffffffffff81111562000563576200056262000398565b5b6200057186828701620004f3565b935050602084015167ffffffffffffffff81111562000595576200059462000398565b5b620005a386828701620004f3565b925050604084015167ffffffffffffffff811115620005c757620005c662000398565b5b620005d586828701620004f3565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000628602083620005df565b91506200063582620005f0565b602082019050919050565b600060208201905081810360008301526200065b8162000619565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006aa57607f821691505b60208210811415620006c157620006c062000662565b5b50919050565b614a2c80620006d76000396000f3fe6080604052600436106102305760003560e01c80636c0360eb1161012e578063c40f596a116100ab578063d5abeb011161006f578063d5abeb011461081f578063da3ef23f1461084a578063e985e9c514610873578063f2fde38b146108b0578063fefd2eb2146108d957610230565b8063c40f596a1461073a578063c668286214610765578063c87b56dd14610790578063d0eb26b0146107cd578063d4fa7494146107f657610230565b806395d89b41116100f257806395d89b4114610676578063a0712d68146106a1578063a22cb465146106bd578063b88d4fde146106e6578063ba7d2c761461070f57610230565b80636c0360eb146105a357806370a08231146105ce578063715018a61461060b578063800ea6df146106225780638da5cb5b1461064b57610230565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104aa57806355f804b3146104e75780635c975abb146105105780636352211e1461053b57806367022d3b1461057857610230565b80632f745c59146103d45780633ccfd60b1461041157806342842e0e1461041b578063438b63001461044457806344a0d68a1461048157610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd1461035757806321ca42361461038257806323b872dd146103ab57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906130e6565b610904565b604051610269919061312e565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613175565b61097e565b005b3480156102a757600080fd5b506102b0610a17565b6040516102bd919061323b565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613293565b610aa9565b6040516102fa9190613301565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613348565b610b2e565b005b34801561033857600080fd5b50610341610c46565b60405161034e9190613397565b60405180910390f35b34801561036357600080fd5b5061036c610c4c565b6040516103799190613397565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613348565b610c59565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906133b2565b610db0565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613348565b610e10565b6040516104089190613397565b60405180910390f35b610419610eb5565b005b34801561042757600080fd5b50610442600480360381019061043d91906133b2565b610faa565b005b34801561045057600080fd5b5061046b60048036038101906104669190613405565b610fca565b60405161047891906134f0565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613293565b611078565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613293565b6110fe565b6040516104de9190613397565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613647565b61116f565b005b34801561051c57600080fd5b50610525611205565b604051610532919061312e565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613293565b611218565b60405161056f9190613301565b60405180910390f35b34801561058457600080fd5b5061058d6112ca565b60405161059a9190613397565b60405180910390f35b3480156105af57600080fd5b506105b86112d0565b6040516105c5919061323b565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190613405565b61135e565b6040516106029190613397565b60405180910390f35b34801561061757600080fd5b50610620611416565b005b34801561062e57600080fd5b5061064960048036038101906106449190613293565b61149e565b005b34801561065757600080fd5b50610660611524565b60405161066d9190613301565b60405180910390f35b34801561068257600080fd5b5061068b61154e565b604051610698919061323b565b60405180910390f35b6106bb60048036038101906106b69190613293565b6115e0565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613690565b61189e565b005b3480156106f257600080fd5b5061070d60048036038101906107089190613771565b611a1f565b005b34801561071b57600080fd5b50610724611a81565b6040516107319190613397565b60405180910390f35b34801561074657600080fd5b5061074f611a87565b60405161075c9190613397565b60405180910390f35b34801561077157600080fd5b5061077a611a8d565b604051610787919061323b565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190613293565b611b1b565b6040516107c4919061323b565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190613293565b611bc5565b005b34801561080257600080fd5b5061081d60048036038101906108189190613293565b611c4b565b005b34801561082b57600080fd5b50610834611cd1565b6040516108419190613397565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c9190613647565b611cd7565b005b34801561087f57600080fd5b5061089a600480360381019061089591906137f4565b611d6d565b6040516108a7919061312e565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190613405565b611e01565b005b3480156108e557600080fd5b506108ee611ef9565b6040516108fb9190613397565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610977575061097682611eff565b5b9050919050565b610986611fe1565b73ffffffffffffffffffffffffffffffffffffffff166109a4611524565b73ffffffffffffffffffffffffffffffffffffffff16146109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190613880565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b606060008054610a26906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610a52906138cf565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610ab482611fe9565b610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613973565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3982611218565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190613a05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bc9611fe1565b73ffffffffffffffffffffffffffffffffffffffff161480610bf85750610bf781610bf2611fe1565b611d6d565b5b610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613a97565b60405180910390fd5b610c418383612055565b505050565b600d5481565b6000600880549050905090565b610c61611fe1565b73ffffffffffffffffffffffffffffffffffffffff16610c7f611524565b73ffffffffffffffffffffffffffffffffffffffff1614610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613880565b60405180910390fd5b6000610cdf610c4c565b905060008211610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613b03565b60405180910390fd5b600e548282610d339190613b52565b1115610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613bf4565b60405180910390fd5b6000600190505b828111610daa57610d97848284610d929190613b52565b61210e565b8080610da290613c14565b915050610d7b565b50505050565b610dc1610dbb611fe1565b8261212c565b610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790613ccf565b60405180910390fd5b610e0b83838361220a565b505050565b6000610e1b8361135e565b8210610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613d61565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ebd611fe1565b73ffffffffffffffffffffffffffffffffffffffff16610edb611524565b73ffffffffffffffffffffffffffffffffffffffff1614610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890613880565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f5790613db2565b60006040518083038185875af1925050503d8060008114610f94576040519150601f19603f3d011682016040523d82523d6000602084013e610f99565b606091505b5050905080610fa757600080fd5b50565b610fc583838360405180602001604052806000815250611a1f565b505050565b60606000610fd78361135e565b905060008167ffffffffffffffff811115610ff557610ff461351c565b5b6040519080825280602002602001820160405280156110235781602001602082028036833780820191505090505b50905060005b8281101561106d5761103b8582610e10565b82828151811061104e5761104d613dc7565b5b602002602001018181525050808061106590613c14565b915050611029565b508092505050919050565b611080611fe1565b73ffffffffffffffffffffffffffffffffffffffff1661109e611524565b73ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90613880565b60405180910390fd5b80600d8190555050565b6000611108610c4c565b8210611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090613e68565b60405180910390fd5b6008828154811061115d5761115c613dc7565b5b90600052602060002001549050919050565b611177611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611195611524565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613880565b60405180910390fd5b80600b9080519060200190611201929190612fd7565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613efa565b60405180910390fd5b80915050919050565b60125481565b600b80546112dd906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611309906138cf565b80156113565780601f1061132b57610100808354040283529160200191611356565b820191906000526020600020905b81548152906001019060200180831161133957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613f8c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141e611fe1565b73ffffffffffffffffffffffffffffffffffffffff1661143c611524565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990613880565b60405180910390fd5b61149c6000612466565b565b6114a6611fe1565b73ffffffffffffffffffffffffffffffffffffffff166114c4611524565b73ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190613880565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461155d906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611589906138cf565b80156115d65780601f106115ab576101008083540402835291602001916115d6565b820191906000526020600020905b8154815290600101906020018083116115b957829003601f168201915b5050505050905090565b601360009054906101000a900460ff1615611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613ff8565b60405180910390fd5b600061163a610c4c565b90506000821161167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613b03565b60405180910390fd5b600e54828261168e9190613b52565b11156116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690613bf4565b60405180910390fd5b6116d7611524565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118635760006117143361135e565b905060115483826117259190613b52565b1115611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90614064565b60405180910390fd5b6010548311156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906140f6565b60405180910390fd5b82600d546117b99190614116565b3410156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f2906141bc565b60405180910390fd5b600f548360125461180c9190613b52565b111561184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118449061424e565b60405180910390fd5b8260125461185b9190613b52565b601281905550505b6000600190505b828111611899576118863382846118819190613b52565b61210e565b808061189190613c14565b91505061186a565b505050565b6118a6611fe1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b906142ba565b60405180910390fd5b8060056000611921611fe1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119ce611fe1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a13919061312e565b60405180910390a35050565b611a30611a2a611fe1565b8361212c565b611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613ccf565b60405180910390fd5b611a7b8484848461252c565b50505050565b60115481565b60105481565b600c8054611a9a906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac6906138cf565b8015611b135780601f10611ae857610100808354040283529160200191611b13565b820191906000526020600020905b815481529060010190602001808311611af657829003601f168201915b505050505081565b6060611b2682611fe9565b611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061434c565b60405180910390fd5b6000611b6f612588565b90506000815111611b8f5760405180602001604052806000815250611bbd565b80611b998461261a565b600c604051602001611bad9392919061443c565b6040516020818303038152906040525b915050919050565b611bcd611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611beb611524565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613880565b60405180910390fd5b8060118190555050565b611c53611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611c71611524565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613880565b60405180910390fd5b8060108190555050565b600e5481565b611cdf611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611524565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613880565b60405180910390fd5b80600c9080519060200190611d69929190612fd7565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e09611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611e27611524565b73ffffffffffffffffffffffffffffffffffffffff1614611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490613880565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906144df565b60405180910390fd5b611ef681612466565b50565b600f5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fca57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fda5750611fd98261277b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120c883611218565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121288282604051806020016040528060008152506127e5565b5050565b600061213782611fe9565b612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614571565b60405180910390fd5b600061218183611218565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121f057508373ffffffffffffffffffffffffffffffffffffffff166121d884610aa9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220157506122008185611d6d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661222a82611218565b73ffffffffffffffffffffffffffffffffffffffff1614612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227790614603565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614695565b60405180910390fd5b6122fb838383612840565b612306600082612055565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235691906146b5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ad9190613b52565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61253784848461220a565b61254384848484612954565b612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125799061475b565b60405180910390fd5b50505050565b6060600b8054612597906138cf565b80601f01602080910402602001604051908101604052809291908181526020018280546125c3906138cf565b80156126105780601f106125e557610100808354040283529160200191612610565b820191906000526020600020905b8154815290600101906020018083116125f357829003601f168201915b5050505050905090565b60606000821415612662576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612776565b600082905060005b6000821461269457808061267d90613c14565b915050600a8261268d91906147aa565b915061266a565b60008167ffffffffffffffff8111156126b0576126af61351c565b5b6040519080825280601f01601f1916602001820160405280156126e25781602001600182028036833780820191505090505b5090505b6000851461276f576001826126fb91906146b5565b9150600a8561270a91906147db565b60306127169190613b52565b60f81b81838151811061272c5761272b613dc7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561276891906147aa565b94506126e6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127ef8383612aeb565b6127fc6000848484612954565b61283b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128329061475b565b60405180910390fd5b505050565b61284b838383612cb9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561288e5761288981612cbe565b6128cd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128cc576128cb8382612d07565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129105761290b81612e74565b61294f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461294e5761294d8282612f45565b5b5b505050565b60006129758473ffffffffffffffffffffffffffffffffffffffff16612fc4565b15612ade578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261299e611fe1565b8786866040518563ffffffff1660e01b81526004016129c09493929190614861565b602060405180830381600087803b1580156129da57600080fd5b505af1925050508015612a0b57506040513d601f19601f82011682018060405250810190612a0891906148c2565b60015b612a8e573d8060008114612a3b576040519150601f19603f3d011682016040523d82523d6000602084013e612a40565b606091505b50600081511415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d9061475b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ae3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529061493b565b60405180910390fd5b612b6481611fe9565b15612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b906149a7565b60405180910390fd5b612bb060008383612840565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c009190613b52565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d148461135e565b612d1e91906146b5565b9050600060076000848152602001908152602001600020549050818114612e03576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e8891906146b5565b9050600060096000848152602001908152602001600020549050600060088381548110612eb857612eb7613dc7565b5b906000526020600020015490508060088381548110612eda57612ed9613dc7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f2957612f286149c7565b5b6001900381819060005260206000200160009055905550505050565b6000612f508361135e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612fe3906138cf565b90600052602060002090601f016020900481019282613005576000855561304c565b82601f1061301e57805160ff191683800117855561304c565b8280016001018555821561304c579182015b8281111561304b578251825591602001919060010190613030565b5b509050613059919061305d565b5090565b5b8082111561307657600081600090555060010161305e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130c38161308e565b81146130ce57600080fd5b50565b6000813590506130e0816130ba565b92915050565b6000602082840312156130fc576130fb613084565b5b600061310a848285016130d1565b91505092915050565b60008115159050919050565b61312881613113565b82525050565b6000602082019050613143600083018461311f565b92915050565b61315281613113565b811461315d57600080fd5b50565b60008135905061316f81613149565b92915050565b60006020828403121561318b5761318a613084565b5b600061319984828501613160565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131dc5780820151818401526020810190506131c1565b838111156131eb576000848401525b50505050565b6000601f19601f8301169050919050565b600061320d826131a2565b61321781856131ad565b93506132278185602086016131be565b613230816131f1565b840191505092915050565b600060208201905081810360008301526132558184613202565b905092915050565b6000819050919050565b6132708161325d565b811461327b57600080fd5b50565b60008135905061328d81613267565b92915050565b6000602082840312156132a9576132a8613084565b5b60006132b78482850161327e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132eb826132c0565b9050919050565b6132fb816132e0565b82525050565b600060208201905061331660008301846132f2565b92915050565b613325816132e0565b811461333057600080fd5b50565b6000813590506133428161331c565b92915050565b6000806040838503121561335f5761335e613084565b5b600061336d85828601613333565b925050602061337e8582860161327e565b9150509250929050565b6133918161325d565b82525050565b60006020820190506133ac6000830184613388565b92915050565b6000806000606084860312156133cb576133ca613084565b5b60006133d986828701613333565b93505060206133ea86828701613333565b92505060406133fb8682870161327e565b9150509250925092565b60006020828403121561341b5761341a613084565b5b600061342984828501613333565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134678161325d565b82525050565b6000613479838361345e565b60208301905092915050565b6000602082019050919050565b600061349d82613432565b6134a7818561343d565b93506134b28361344e565b8060005b838110156134e35781516134ca888261346d565b97506134d583613485565b9250506001810190506134b6565b5085935050505092915050565b6000602082019050818103600083015261350a8184613492565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613554826131f1565b810181811067ffffffffffffffff821117156135735761357261351c565b5b80604052505050565b600061358661307a565b9050613592828261354b565b919050565b600067ffffffffffffffff8211156135b2576135b161351c565b5b6135bb826131f1565b9050602081019050919050565b82818337600083830152505050565b60006135ea6135e584613597565b61357c565b90508281526020810184848401111561360657613605613517565b5b6136118482856135c8565b509392505050565b600082601f83011261362e5761362d613512565b5b813561363e8482602086016135d7565b91505092915050565b60006020828403121561365d5761365c613084565b5b600082013567ffffffffffffffff81111561367b5761367a613089565b5b61368784828501613619565b91505092915050565b600080604083850312156136a7576136a6613084565b5b60006136b585828601613333565b92505060206136c685828601613160565b9150509250929050565b600067ffffffffffffffff8211156136eb576136ea61351c565b5b6136f4826131f1565b9050602081019050919050565b600061371461370f846136d0565b61357c565b9050828152602081018484840111156137305761372f613517565b5b61373b8482856135c8565b509392505050565b600082601f83011261375857613757613512565b5b8135613768848260208601613701565b91505092915050565b6000806000806080858703121561378b5761378a613084565b5b600061379987828801613333565b94505060206137aa87828801613333565b93505060406137bb8782880161327e565b925050606085013567ffffffffffffffff8111156137dc576137db613089565b5b6137e887828801613743565b91505092959194509250565b6000806040838503121561380b5761380a613084565b5b600061381985828601613333565b925050602061382a85828601613333565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061386a6020836131ad565b915061387582613834565b602082019050919050565b600060208201905081810360008301526138998161385d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138e757607f821691505b602082108114156138fb576138fa6138a0565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061395d602c836131ad565b915061396882613901565b604082019050919050565b6000602082019050818103600083015261398c81613950565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139ef6021836131ad565b91506139fa82613993565b604082019050919050565b60006020820190508181036000830152613a1e816139e2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a816038836131ad565b9150613a8c82613a25565b604082019050919050565b60006020820190508181036000830152613ab081613a74565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6000613aed601b836131ad565b9150613af882613ab7565b602082019050919050565b60006020820190508181036000830152613b1c81613ae0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b5d8261325d565b9150613b688361325d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9d57613b9c613b23565b5b828201905092915050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b6000613bde6016836131ad565b9150613be982613ba8565b602082019050919050565b60006020820190508181036000830152613c0d81613bd1565b9050919050565b6000613c1f8261325d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c5257613c51613b23565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613cb96031836131ad565b9150613cc482613c5d565b604082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613d4b602b836131ad565b9150613d5682613cef565b604082019050919050565b60006020820190508181036000830152613d7a81613d3e565b9050919050565b600081905092915050565b50565b6000613d9c600083613d81565b9150613da782613d8c565b600082019050919050565b6000613dbd82613d8f565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613e52602c836131ad565b9150613e5d82613df6565b604082019050919050565b60006020820190508181036000830152613e8181613e45565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ee46029836131ad565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f76602a836131ad565b9150613f8182613f1a565b604082019050919050565b60006020820190508181036000830152613fa581613f69565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b6000613fe26016836131ad565b9150613fed82613fac565b602082019050919050565b6000602082019050818103600083015261401181613fd5565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b600061404e601c836131ad565b915061405982614018565b602082019050919050565b6000602082019050818103600083015261407d81614041565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b60006140e06024836131ad565b91506140eb82614084565b604082019050919050565b6000602082019050818103600083015261410f816140d3565b9050919050565b60006141218261325d565b915061412c8361325d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561416557614164613b23565b5b828202905092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b60006141a66012836131ad565b91506141b182614170565b602082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f6d6178206e756d626572206f66207075726368617361626c65204e465473206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b60006142386027836131ad565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006142a46019836131ad565b91506142af8261426e565b602082019050919050565b600060208201905081810360008301526142d381614297565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614336602f836131ad565b9150614341826142da565b604082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b600081905092915050565b6000614382826131a2565b61438c818561436c565b935061439c8185602086016131be565b80840191505092915050565b60008190508160005260206000209050919050565b600081546143ca816138cf565b6143d4818661436c565b945060018216600081146143ef576001811461440057614433565b60ff19831686528186019350614433565b614409856143a8565b60005b8381101561442b5781548189015260018201915060208101905061440c565b838801955050505b50505092915050565b60006144488286614377565b91506144548285614377565b915061446082846143bd565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c96026836131ad565b91506144d48261446d565b604082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061455b602c836131ad565b9150614566826144ff565b604082019050919050565b6000602082019050818103600083015261458a8161454e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006145ed6029836131ad565b91506145f882614591565b604082019050919050565b6000602082019050818103600083015261461c816145e0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061467f6024836131ad565b915061468a82614623565b604082019050919050565b600060208201905081810360008301526146ae81614672565b9050919050565b60006146c08261325d565b91506146cb8361325d565b9250828210156146de576146dd613b23565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147456032836131ad565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b58261325d565b91506147c08361325d565b9250826147d0576147cf61477b565b5b828204905092915050565b60006147e68261325d565b91506147f18361325d565b9250826148015761480061477b565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006148338261480c565b61483d8185614817565b935061484d8185602086016131be565b614856816131f1565b840191505092915050565b600060808201905061487660008301876132f2565b61488360208301866132f2565b6148906040830185613388565b81810360608301526148a28184614828565b905095945050505050565b6000815190506148bc816130ba565b92915050565b6000602082840312156148d8576148d7613084565b5b60006148e6848285016148ad565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149256020836131ad565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614991601c836131ad565b915061499c8261495b565b602082019050919050565b600060208201905081810360008301526149c081614984565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212209a451d50ecfad30747ce5797ccd2a479f9685ed4def7293756ed631d73619e2664736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a536b7977616c6b65725a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a534b5957414c4b45525a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e636976696373756e706c75676765642e6f72672f736b7977616c6b65727a2f000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c80636c0360eb1161012e578063c40f596a116100ab578063d5abeb011161006f578063d5abeb011461081f578063da3ef23f1461084a578063e985e9c514610873578063f2fde38b146108b0578063fefd2eb2146108d957610230565b8063c40f596a1461073a578063c668286214610765578063c87b56dd14610790578063d0eb26b0146107cd578063d4fa7494146107f657610230565b806395d89b41116100f257806395d89b4114610676578063a0712d68146106a1578063a22cb465146106bd578063b88d4fde146106e6578063ba7d2c761461070f57610230565b80636c0360eb146105a357806370a08231146105ce578063715018a61461060b578063800ea6df146106225780638da5cb5b1461064b57610230565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104aa57806355f804b3146104e75780635c975abb146105105780636352211e1461053b57806367022d3b1461057857610230565b80632f745c59146103d45780633ccfd60b1461041157806342842e0e1461041b578063438b63001461044457806344a0d68a1461048157610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd1461035757806321ca42361461038257806323b872dd146103ab57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906130e6565b610904565b604051610269919061312e565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613175565b61097e565b005b3480156102a757600080fd5b506102b0610a17565b6040516102bd919061323b565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613293565b610aa9565b6040516102fa9190613301565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613348565b610b2e565b005b34801561033857600080fd5b50610341610c46565b60405161034e9190613397565b60405180910390f35b34801561036357600080fd5b5061036c610c4c565b6040516103799190613397565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613348565b610c59565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906133b2565b610db0565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613348565b610e10565b6040516104089190613397565b60405180910390f35b610419610eb5565b005b34801561042757600080fd5b50610442600480360381019061043d91906133b2565b610faa565b005b34801561045057600080fd5b5061046b60048036038101906104669190613405565b610fca565b60405161047891906134f0565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613293565b611078565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613293565b6110fe565b6040516104de9190613397565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613647565b61116f565b005b34801561051c57600080fd5b50610525611205565b604051610532919061312e565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613293565b611218565b60405161056f9190613301565b60405180910390f35b34801561058457600080fd5b5061058d6112ca565b60405161059a9190613397565b60405180910390f35b3480156105af57600080fd5b506105b86112d0565b6040516105c5919061323b565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190613405565b61135e565b6040516106029190613397565b60405180910390f35b34801561061757600080fd5b50610620611416565b005b34801561062e57600080fd5b5061064960048036038101906106449190613293565b61149e565b005b34801561065757600080fd5b50610660611524565b60405161066d9190613301565b60405180910390f35b34801561068257600080fd5b5061068b61154e565b604051610698919061323b565b60405180910390f35b6106bb60048036038101906106b69190613293565b6115e0565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613690565b61189e565b005b3480156106f257600080fd5b5061070d60048036038101906107089190613771565b611a1f565b005b34801561071b57600080fd5b50610724611a81565b6040516107319190613397565b60405180910390f35b34801561074657600080fd5b5061074f611a87565b60405161075c9190613397565b60405180910390f35b34801561077157600080fd5b5061077a611a8d565b604051610787919061323b565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190613293565b611b1b565b6040516107c4919061323b565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190613293565b611bc5565b005b34801561080257600080fd5b5061081d60048036038101906108189190613293565b611c4b565b005b34801561082b57600080fd5b50610834611cd1565b6040516108419190613397565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c9190613647565b611cd7565b005b34801561087f57600080fd5b5061089a600480360381019061089591906137f4565b611d6d565b6040516108a7919061312e565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190613405565b611e01565b005b3480156108e557600080fd5b506108ee611ef9565b6040516108fb9190613397565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610977575061097682611eff565b5b9050919050565b610986611fe1565b73ffffffffffffffffffffffffffffffffffffffff166109a4611524565b73ffffffffffffffffffffffffffffffffffffffff16146109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190613880565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b606060008054610a26906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610a52906138cf565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610ab482611fe9565b610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613973565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3982611218565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190613a05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bc9611fe1565b73ffffffffffffffffffffffffffffffffffffffff161480610bf85750610bf781610bf2611fe1565b611d6d565b5b610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613a97565b60405180910390fd5b610c418383612055565b505050565b600d5481565b6000600880549050905090565b610c61611fe1565b73ffffffffffffffffffffffffffffffffffffffff16610c7f611524565b73ffffffffffffffffffffffffffffffffffffffff1614610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613880565b60405180910390fd5b6000610cdf610c4c565b905060008211610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613b03565b60405180910390fd5b600e548282610d339190613b52565b1115610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613bf4565b60405180910390fd5b6000600190505b828111610daa57610d97848284610d929190613b52565b61210e565b8080610da290613c14565b915050610d7b565b50505050565b610dc1610dbb611fe1565b8261212c565b610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790613ccf565b60405180910390fd5b610e0b83838361220a565b505050565b6000610e1b8361135e565b8210610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613d61565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ebd611fe1565b73ffffffffffffffffffffffffffffffffffffffff16610edb611524565b73ffffffffffffffffffffffffffffffffffffffff1614610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890613880565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f5790613db2565b60006040518083038185875af1925050503d8060008114610f94576040519150601f19603f3d011682016040523d82523d6000602084013e610f99565b606091505b5050905080610fa757600080fd5b50565b610fc583838360405180602001604052806000815250611a1f565b505050565b60606000610fd78361135e565b905060008167ffffffffffffffff811115610ff557610ff461351c565b5b6040519080825280602002602001820160405280156110235781602001602082028036833780820191505090505b50905060005b8281101561106d5761103b8582610e10565b82828151811061104e5761104d613dc7565b5b602002602001018181525050808061106590613c14565b915050611029565b508092505050919050565b611080611fe1565b73ffffffffffffffffffffffffffffffffffffffff1661109e611524565b73ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90613880565b60405180910390fd5b80600d8190555050565b6000611108610c4c565b8210611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090613e68565b60405180910390fd5b6008828154811061115d5761115c613dc7565b5b90600052602060002001549050919050565b611177611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611195611524565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613880565b60405180910390fd5b80600b9080519060200190611201929190612fd7565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613efa565b60405180910390fd5b80915050919050565b60125481565b600b80546112dd906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611309906138cf565b80156113565780601f1061132b57610100808354040283529160200191611356565b820191906000526020600020905b81548152906001019060200180831161133957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613f8c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141e611fe1565b73ffffffffffffffffffffffffffffffffffffffff1661143c611524565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990613880565b60405180910390fd5b61149c6000612466565b565b6114a6611fe1565b73ffffffffffffffffffffffffffffffffffffffff166114c4611524565b73ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190613880565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461155d906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611589906138cf565b80156115d65780601f106115ab576101008083540402835291602001916115d6565b820191906000526020600020905b8154815290600101906020018083116115b957829003601f168201915b5050505050905090565b601360009054906101000a900460ff1615611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613ff8565b60405180910390fd5b600061163a610c4c565b90506000821161167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613b03565b60405180910390fd5b600e54828261168e9190613b52565b11156116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690613bf4565b60405180910390fd5b6116d7611524565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118635760006117143361135e565b905060115483826117259190613b52565b1115611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90614064565b60405180910390fd5b6010548311156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906140f6565b60405180910390fd5b82600d546117b99190614116565b3410156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f2906141bc565b60405180910390fd5b600f548360125461180c9190613b52565b111561184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118449061424e565b60405180910390fd5b8260125461185b9190613b52565b601281905550505b6000600190505b828111611899576118863382846118819190613b52565b61210e565b808061189190613c14565b91505061186a565b505050565b6118a6611fe1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b906142ba565b60405180910390fd5b8060056000611921611fe1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119ce611fe1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a13919061312e565b60405180910390a35050565b611a30611a2a611fe1565b8361212c565b611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613ccf565b60405180910390fd5b611a7b8484848461252c565b50505050565b60115481565b60105481565b600c8054611a9a906138cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac6906138cf565b8015611b135780601f10611ae857610100808354040283529160200191611b13565b820191906000526020600020905b815481529060010190602001808311611af657829003601f168201915b505050505081565b6060611b2682611fe9565b611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061434c565b60405180910390fd5b6000611b6f612588565b90506000815111611b8f5760405180602001604052806000815250611bbd565b80611b998461261a565b600c604051602001611bad9392919061443c565b6040516020818303038152906040525b915050919050565b611bcd611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611beb611524565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613880565b60405180910390fd5b8060118190555050565b611c53611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611c71611524565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613880565b60405180910390fd5b8060108190555050565b600e5481565b611cdf611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611524565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613880565b60405180910390fd5b80600c9080519060200190611d69929190612fd7565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e09611fe1565b73ffffffffffffffffffffffffffffffffffffffff16611e27611524565b73ffffffffffffffffffffffffffffffffffffffff1614611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490613880565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906144df565b60405180910390fd5b611ef681612466565b50565b600f5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fca57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fda5750611fd98261277b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120c883611218565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121288282604051806020016040528060008152506127e5565b5050565b600061213782611fe9565b612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614571565b60405180910390fd5b600061218183611218565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121f057508373ffffffffffffffffffffffffffffffffffffffff166121d884610aa9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220157506122008185611d6d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661222a82611218565b73ffffffffffffffffffffffffffffffffffffffff1614612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227790614603565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614695565b60405180910390fd5b6122fb838383612840565b612306600082612055565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235691906146b5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ad9190613b52565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61253784848461220a565b61254384848484612954565b612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125799061475b565b60405180910390fd5b50505050565b6060600b8054612597906138cf565b80601f01602080910402602001604051908101604052809291908181526020018280546125c3906138cf565b80156126105780601f106125e557610100808354040283529160200191612610565b820191906000526020600020905b8154815290600101906020018083116125f357829003601f168201915b5050505050905090565b60606000821415612662576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612776565b600082905060005b6000821461269457808061267d90613c14565b915050600a8261268d91906147aa565b915061266a565b60008167ffffffffffffffff8111156126b0576126af61351c565b5b6040519080825280601f01601f1916602001820160405280156126e25781602001600182028036833780820191505090505b5090505b6000851461276f576001826126fb91906146b5565b9150600a8561270a91906147db565b60306127169190613b52565b60f81b81838151811061272c5761272b613dc7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561276891906147aa565b94506126e6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127ef8383612aeb565b6127fc6000848484612954565b61283b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128329061475b565b60405180910390fd5b505050565b61284b838383612cb9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561288e5761288981612cbe565b6128cd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128cc576128cb8382612d07565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129105761290b81612e74565b61294f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461294e5761294d8282612f45565b5b5b505050565b60006129758473ffffffffffffffffffffffffffffffffffffffff16612fc4565b15612ade578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261299e611fe1565b8786866040518563ffffffff1660e01b81526004016129c09493929190614861565b602060405180830381600087803b1580156129da57600080fd5b505af1925050508015612a0b57506040513d601f19601f82011682018060405250810190612a0891906148c2565b60015b612a8e573d8060008114612a3b576040519150601f19603f3d011682016040523d82523d6000602084013e612a40565b606091505b50600081511415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d9061475b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ae3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529061493b565b60405180910390fd5b612b6481611fe9565b15612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b906149a7565b60405180910390fd5b612bb060008383612840565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c009190613b52565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d148461135e565b612d1e91906146b5565b9050600060076000848152602001908152602001600020549050818114612e03576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e8891906146b5565b9050600060096000848152602001908152602001600020549050600060088381548110612eb857612eb7613dc7565b5b906000526020600020015490508060088381548110612eda57612ed9613dc7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f2957612f286149c7565b5b6001900381819060005260206000200160009055905550505050565b6000612f508361135e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612fe3906138cf565b90600052602060002090601f016020900481019282613005576000855561304c565b82601f1061301e57805160ff191683800117855561304c565b8280016001018555821561304c579182015b8281111561304b578251825591602001919060010190613030565b5b509050613059919061305d565b5090565b5b8082111561307657600081600090555060010161305e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130c38161308e565b81146130ce57600080fd5b50565b6000813590506130e0816130ba565b92915050565b6000602082840312156130fc576130fb613084565b5b600061310a848285016130d1565b91505092915050565b60008115159050919050565b61312881613113565b82525050565b6000602082019050613143600083018461311f565b92915050565b61315281613113565b811461315d57600080fd5b50565b60008135905061316f81613149565b92915050565b60006020828403121561318b5761318a613084565b5b600061319984828501613160565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131dc5780820151818401526020810190506131c1565b838111156131eb576000848401525b50505050565b6000601f19601f8301169050919050565b600061320d826131a2565b61321781856131ad565b93506132278185602086016131be565b613230816131f1565b840191505092915050565b600060208201905081810360008301526132558184613202565b905092915050565b6000819050919050565b6132708161325d565b811461327b57600080fd5b50565b60008135905061328d81613267565b92915050565b6000602082840312156132a9576132a8613084565b5b60006132b78482850161327e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132eb826132c0565b9050919050565b6132fb816132e0565b82525050565b600060208201905061331660008301846132f2565b92915050565b613325816132e0565b811461333057600080fd5b50565b6000813590506133428161331c565b92915050565b6000806040838503121561335f5761335e613084565b5b600061336d85828601613333565b925050602061337e8582860161327e565b9150509250929050565b6133918161325d565b82525050565b60006020820190506133ac6000830184613388565b92915050565b6000806000606084860312156133cb576133ca613084565b5b60006133d986828701613333565b93505060206133ea86828701613333565b92505060406133fb8682870161327e565b9150509250925092565b60006020828403121561341b5761341a613084565b5b600061342984828501613333565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134678161325d565b82525050565b6000613479838361345e565b60208301905092915050565b6000602082019050919050565b600061349d82613432565b6134a7818561343d565b93506134b28361344e565b8060005b838110156134e35781516134ca888261346d565b97506134d583613485565b9250506001810190506134b6565b5085935050505092915050565b6000602082019050818103600083015261350a8184613492565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613554826131f1565b810181811067ffffffffffffffff821117156135735761357261351c565b5b80604052505050565b600061358661307a565b9050613592828261354b565b919050565b600067ffffffffffffffff8211156135b2576135b161351c565b5b6135bb826131f1565b9050602081019050919050565b82818337600083830152505050565b60006135ea6135e584613597565b61357c565b90508281526020810184848401111561360657613605613517565b5b6136118482856135c8565b509392505050565b600082601f83011261362e5761362d613512565b5b813561363e8482602086016135d7565b91505092915050565b60006020828403121561365d5761365c613084565b5b600082013567ffffffffffffffff81111561367b5761367a613089565b5b61368784828501613619565b91505092915050565b600080604083850312156136a7576136a6613084565b5b60006136b585828601613333565b92505060206136c685828601613160565b9150509250929050565b600067ffffffffffffffff8211156136eb576136ea61351c565b5b6136f4826131f1565b9050602081019050919050565b600061371461370f846136d0565b61357c565b9050828152602081018484840111156137305761372f613517565b5b61373b8482856135c8565b509392505050565b600082601f83011261375857613757613512565b5b8135613768848260208601613701565b91505092915050565b6000806000806080858703121561378b5761378a613084565b5b600061379987828801613333565b94505060206137aa87828801613333565b93505060406137bb8782880161327e565b925050606085013567ffffffffffffffff8111156137dc576137db613089565b5b6137e887828801613743565b91505092959194509250565b6000806040838503121561380b5761380a613084565b5b600061381985828601613333565b925050602061382a85828601613333565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061386a6020836131ad565b915061387582613834565b602082019050919050565b600060208201905081810360008301526138998161385d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138e757607f821691505b602082108114156138fb576138fa6138a0565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061395d602c836131ad565b915061396882613901565b604082019050919050565b6000602082019050818103600083015261398c81613950565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139ef6021836131ad565b91506139fa82613993565b604082019050919050565b60006020820190508181036000830152613a1e816139e2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a816038836131ad565b9150613a8c82613a25565b604082019050919050565b60006020820190508181036000830152613ab081613a74565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6000613aed601b836131ad565b9150613af882613ab7565b602082019050919050565b60006020820190508181036000830152613b1c81613ae0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b5d8261325d565b9150613b688361325d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9d57613b9c613b23565b5b828201905092915050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b6000613bde6016836131ad565b9150613be982613ba8565b602082019050919050565b60006020820190508181036000830152613c0d81613bd1565b9050919050565b6000613c1f8261325d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c5257613c51613b23565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613cb96031836131ad565b9150613cc482613c5d565b604082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613d4b602b836131ad565b9150613d5682613cef565b604082019050919050565b60006020820190508181036000830152613d7a81613d3e565b9050919050565b600081905092915050565b50565b6000613d9c600083613d81565b9150613da782613d8c565b600082019050919050565b6000613dbd82613d8f565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613e52602c836131ad565b9150613e5d82613df6565b604082019050919050565b60006020820190508181036000830152613e8181613e45565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ee46029836131ad565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f76602a836131ad565b9150613f8182613f1a565b604082019050919050565b60006020820190508181036000830152613fa581613f69565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b6000613fe26016836131ad565b9150613fed82613fac565b602082019050919050565b6000602082019050818103600083015261401181613fd5565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b600061404e601c836131ad565b915061405982614018565b602082019050919050565b6000602082019050818103600083015261407d81614041565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b60006140e06024836131ad565b91506140eb82614084565b604082019050919050565b6000602082019050818103600083015261410f816140d3565b9050919050565b60006141218261325d565b915061412c8361325d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561416557614164613b23565b5b828202905092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b60006141a66012836131ad565b91506141b182614170565b602082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f6d6178206e756d626572206f66207075726368617361626c65204e465473206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b60006142386027836131ad565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006142a46019836131ad565b91506142af8261426e565b602082019050919050565b600060208201905081810360008301526142d381614297565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614336602f836131ad565b9150614341826142da565b604082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b600081905092915050565b6000614382826131a2565b61438c818561436c565b935061439c8185602086016131be565b80840191505092915050565b60008190508160005260206000209050919050565b600081546143ca816138cf565b6143d4818661436c565b945060018216600081146143ef576001811461440057614433565b60ff19831686528186019350614433565b614409856143a8565b60005b8381101561442b5781548189015260018201915060208101905061440c565b838801955050505b50505092915050565b60006144488286614377565b91506144548285614377565b915061446082846143bd565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c96026836131ad565b91506144d48261446d565b604082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061455b602c836131ad565b9150614566826144ff565b604082019050919050565b6000602082019050818103600083015261458a8161454e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006145ed6029836131ad565b91506145f882614591565b604082019050919050565b6000602082019050818103600083015261461c816145e0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061467f6024836131ad565b915061468a82614623565b604082019050919050565b600060208201905081810360008301526146ae81614672565b9050919050565b60006146c08261325d565b91506146cb8361325d565b9250828210156146de576146dd613b23565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147456032836131ad565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b58261325d565b91506147c08361325d565b9250826147d0576147cf61477b565b5b828204905092915050565b60006147e68261325d565b91506147f18361325d565b9250826148015761480061477b565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006148338261480c565b61483d8185614817565b935061484d8185602086016131be565b614856816131f1565b840191505092915050565b600060808201905061487660008301876132f2565b61488360208301866132f2565b6148906040830185613388565b81810360608301526148a28184614828565b905095945050505050565b6000815190506148bc816130ba565b92915050565b6000602082840312156148d8576148d7613084565b5b60006148e6848285016148ad565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149256020836131ad565b9150614930826148ef565b602082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614991601c836131ad565b915061499c8261495b565b602082019050919050565b600060208201905081810360008301526149c081614984565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212209a451d50ecfad30747ce5797ccd2a479f9685ed4def7293756ed631d73619e2664736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a536b7977616c6b65725a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a534b5957414c4b45525a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e636976696373756e706c75676765642e6f72672f736b7977616c6b65727a2f000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): SkywalkerZ
Arg [1] : _symbol (string): SKYWALKERZ
Arg [2] : _initBaseURI (string): https://api.civicsunplugged.org/skywalkerz/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 536b7977616c6b65725a00000000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 534b5957414c4b45525a00000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [8] : 68747470733a2f2f6170692e636976696373756e706c75676765642e6f72672f
Arg [9] : 736b7977616c6b65727a2f000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47847:4067:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36967:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51673:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24859:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26418:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25941:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48005:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37607:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49784:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27308:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37275:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51753:158;;;:::i;:::-;;27718:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50138:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51037:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37797:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51441:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48456:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48405:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47937:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24283:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4558:94;;;;;;;;;;;;;:::i;:::-;;51289:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3907:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25028:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48795:965;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26711:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27974:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48271:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48223:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47963:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50492:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50923:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51125:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48041:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51545:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27077:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4807:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48176:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36967:224;37069:4;37108:35;37093:50;;;:11;:50;;;;:90;;;;37147:36;37171:11;37147:23;:36::i;:::-;37093:90;37086:97;;36967:224;;;:::o;51673:73::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51734:6:::1;51725;;:15;;;;;;;;;;;;;;;;;;51673:73:::0;:::o;24859:100::-;24913:13;24946:5;24939:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:100;:::o;26418:221::-;26494:7;26522:16;26530:7;26522;:16::i;:::-;26514:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26607:15;:24;26623:7;26607:24;;;;;;;;;;;;;;;;;;;;;26600:31;;26418:221;;;:::o;25941:411::-;26022:13;26038:23;26053:7;26038:14;:23::i;:::-;26022:39;;26086:5;26080:11;;:2;:11;;;;26072:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26180:5;26164:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26189:37;26206:5;26213:12;:10;:12::i;:::-;26189:16;:37::i;:::-;26164:62;26142:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26323:21;26332:2;26336:7;26323:8;:21::i;:::-;26011:341;25941:411;;:::o;48005:31::-;;;;:::o;37607:113::-;37668:7;37695:10;:17;;;;37688:24;;37607:113;:::o;49784:346::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49866:14:::1;49883:13;:11;:13::i;:::-;49866:30;;49925:1;49911:11;:15;49903:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49997:9;;49982:11;49973:6;:20;;;;:::i;:::-;:33;;49965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50045:9;50057:1;50045:13;;50040:85;50065:11;50060:1;:16;50040:85;;50092:25;50102:2;50115:1;50106:6;:10;;;;:::i;:::-;50092:9;:25::i;:::-;50078:3;;;;;:::i;:::-;;;;50040:85;;;;49859:271;49784:346:::0;;:::o;27308:339::-;27503:41;27522:12;:10;:12::i;:::-;27536:7;27503:18;:41::i;:::-;27495:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27611:28;27621:4;27627:2;27631:7;27611:9;:28::i;:::-;27308:339;;;:::o;37275:256::-;37372:7;37408:23;37425:5;37408:16;:23::i;:::-;37400:5;:31;37392:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37497:12;:19;37510:5;37497:19;;;;;;;;;;;;;;;:26;37517:5;37497:26;;;;;;;;;;;;37490:33;;37275:256;;;;:::o;51753:158::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51806:12:::1;51832:10;51824:24;;51856:21;51824:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51805:77;;;51897:7;51889:16;;;::::0;::::1;;51798:113;51753:158::o:0;27718:185::-;27856:39;27873:4;27879:2;27883:7;27856:39;;;;;;;;;;;;:16;:39::i;:::-;27718:185;;;:::o;50138:348::-;50213:16;50241:23;50267:17;50277:6;50267:9;:17::i;:::-;50241:43;;50291:25;50333:15;50319:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50291:58;;50361:9;50356:103;50376:15;50372:1;:19;50356:103;;;50421:30;50441:6;50449:1;50421:19;:30::i;:::-;50407:8;50416:1;50407:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;50393:3;;;;;:::i;:::-;;;;50356:103;;;;50472:8;50465:15;;;;50138:348;;;:::o;51037:82::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51105:8:::1;51098:4;:15;;;;51037:82:::0;:::o;37797:233::-;37872:7;37908:30;:28;:30::i;:::-;37900:5;:38;37892:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38005:10;38016:5;38005:17;;;;;;;;:::i;:::-;;;;;;;;;;37998:24;;37797:233;;;:::o;51441:98::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51522:11:::1;51512:7;:21;;;;;;;;;;;;:::i;:::-;;51441:98:::0;:::o;48456:26::-;;;;;;;;;;;;;:::o;24553:239::-;24625:7;24645:13;24661:7;:16;24669:7;24661:16;;;;;;;;;;;;;;;;;;;;;24645:32;;24713:1;24696:19;;:5;:19;;;;24688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24779:5;24772:12;;;24553:239;;;:::o;48405:46::-;;;;:::o;47937:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24283:208::-;24355:7;24400:1;24383:19;;:5;:19;;;;24375:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24467:9;:16;24477:5;24467:16;;;;;;;;;;;;;;;;24460:23;;24283:208;;;:::o;4558:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;51289:146::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51405:24:::1;51382:20;:47;;;;51289:146:::0;:::o;3907:87::-;3953:7;3980:6;;;;;;;;;;;3973:13;;3907:87;:::o;25028:104::-;25084:13;25117:7;25110:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25028:104;:::o;48795:965::-;48861:6;;;;;;;;;;;48860:7;48852:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;48901:14;48918:13;:11;:13::i;:::-;48901:30;;48960:1;48946:11;:15;48938:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49032:9;;49017:11;49008:6;:20;;;;:::i;:::-;:33;;49000:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49095:7;:5;:7::i;:::-;49081:21;;:10;:21;;;49077:577;;49115:23;49141:21;49151:10;49141:9;:21::i;:::-;49115:47;;49214:18;;49199:11;49181:15;:29;;;;:::i;:::-;:51;;49173:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;49299:23;;49284:11;:38;;49276:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;49402:11;49395:4;;:18;;;;:::i;:::-;49382:9;:31;;49374:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49500:20;;49485:11;49455:27;;:41;;;;:::i;:::-;:65;;49447:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;49635:11;49605:27;;:41;;;;:::i;:::-;49575:27;:71;;;;49104:550;49077:577;49667:9;49679:1;49667:13;;49662:93;49687:11;49682:1;:16;49662:93;;49714:33;49724:10;49745:1;49736:6;:10;;;;:::i;:::-;49714:9;:33::i;:::-;49700:3;;;;;:::i;:::-;;;;49662:93;;;;48845:915;48795:965;:::o;26711:295::-;26826:12;:10;:12::i;:::-;26814:24;;:8;:24;;;;26806:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26926:8;26881:18;:32;26900:12;:10;:12::i;:::-;26881:32;;;;;;;;;;;;;;;:42;26914:8;26881:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26979:8;26950:48;;26965:12;:10;:12::i;:::-;26950:48;;;26989:8;26950:48;;;;;;:::i;:::-;;;;;;;;26711:295;;:::o;27974:328::-;28149:41;28168:12;:10;:12::i;:::-;28182:7;28149:18;:41::i;:::-;28141:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28255:39;28269:4;28275:2;28279:7;28288:5;28255:13;:39::i;:::-;27974:328;;;;:::o;48271:38::-;;;;:::o;48223:43::-;;;;:::o;47963:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50492:423::-;50590:13;50631:16;50639:7;50631;:16::i;:::-;50615:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;50721:28;50752:10;:8;:10::i;:::-;50721:41;;50807:1;50782:14;50776:28;:32;:133;;;;;;;;;;;;;;;;;50844:14;50860:18;:7;:16;:18::i;:::-;50880:13;50827:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50776:133;50769:140;;;50492:423;;;:::o;50923:106::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51017:6:::1;50996:18;:27;;;;50923:106:::0;:::o;51125:158::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51250:27:::1;51224:23;:53;;;;51125:158:::0;:::o;48041:31::-;;;;:::o;51545:122::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51644:17:::1;51628:13;:33;;;;;;;;;;;;:::i;:::-;;51545:122:::0;:::o;27077:164::-;27174:4;27198:18;:25;27217:5;27198:25;;;;;;;;;;;;;;;:35;27224:8;27198:35;;;;;;;;;;;;;;;;;;;;;;;;;27191:42;;27077:164;;;;:::o;4807:192::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4916:1:::1;4896:22;;:8;:22;;;;4888:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4972:19;4982:8;4972:9;:19::i;:::-;4807:192:::0;:::o;48176:42::-;;;;:::o;23914:305::-;24016:4;24068:25;24053:40;;;:11;:40;;;;:105;;;;24125:33;24110:48;;;:11;:48;;;;24053:105;:158;;;;24175:36;24199:11;24175:23;:36::i;:::-;24053:158;24033:178;;23914:305;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;29812:127::-;29877:4;29929:1;29901:30;;:7;:16;29909:7;29901:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29894:37;;29812:127;;;:::o;33794:174::-;33896:2;33869:15;:24;33885:7;33869:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33952:7;33948:2;33914:46;;33923:23;33938:7;33923:14;:23::i;:::-;33914:46;;;;;;;;;;;;33794:174;;:::o;30796:110::-;30872:26;30882:2;30886:7;30872:26;;;;;;;;;;;;:9;:26::i;:::-;30796:110;;:::o;30106:348::-;30199:4;30224:16;30232:7;30224;:16::i;:::-;30216:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30300:13;30316:23;30331:7;30316:14;:23::i;:::-;30300:39;;30369:5;30358:16;;:7;:16;;;:51;;;;30402:7;30378:31;;:20;30390:7;30378:11;:20::i;:::-;:31;;;30358:51;:87;;;;30413:32;30430:5;30437:7;30413:16;:32::i;:::-;30358:87;30350:96;;;30106:348;;;;:::o;33098:578::-;33257:4;33230:31;;:23;33245:7;33230:14;:23::i;:::-;:31;;;33222:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:1;33326:16;;:2;:16;;;;33318:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33396:39;33417:4;33423:2;33427:7;33396:20;:39::i;:::-;33500:29;33517:1;33521:7;33500:8;:29::i;:::-;33561:1;33542:9;:15;33552:4;33542:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33590:1;33573:9;:13;33583:2;33573:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33621:2;33602:7;:16;33610:7;33602:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33660:7;33656:2;33641:27;;33650:4;33641:27;;;;;;;;;;;;33098:578;;;:::o;5007:173::-;5063:16;5082:6;;;;;;;;;;;5063:25;;5108:8;5099:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5052:128;5007:173;:::o;29184:315::-;29341:28;29351:4;29357:2;29361:7;29341:9;:28::i;:::-;29388:48;29411:4;29417:2;29421:7;29430:5;29388:22;:48::i;:::-;29380:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:315;;;;:::o;48674:102::-;48734:13;48763:7;48756:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48674:102;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;15893:157::-;15978:4;16017:25;16002:40;;;:11;:40;;;;15995:47;;15893:157;;;:::o;31133:321::-;31263:18;31269:2;31273:7;31263:5;:18::i;:::-;31314:54;31345:1;31349:2;31353:7;31362:5;31314:22;:54::i;:::-;31292:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31133:321;;;:::o;38643:589::-;38787:45;38814:4;38820:2;38824:7;38787:26;:45::i;:::-;38865:1;38849:18;;:4;:18;;;38845:187;;;38884:40;38916:7;38884:31;:40::i;:::-;38845:187;;;38954:2;38946:10;;:4;:10;;;38942:90;;38973:47;39006:4;39012:7;38973:32;:47::i;:::-;38942:90;38845:187;39060:1;39046:16;;:2;:16;;;39042:183;;;39079:45;39116:7;39079:36;:45::i;:::-;39042:183;;;39152:4;39146:10;;:2;:10;;;39142:83;;39173:40;39201:2;39205:7;39173:27;:40::i;:::-;39142:83;39042:183;38643:589;;;:::o;34533:799::-;34688:4;34709:15;:2;:13;;;:15::i;:::-;34705:620;;;34761:2;34745:36;;;34782:12;:10;:12::i;:::-;34796:4;34802:7;34811:5;34745:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34741:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35004:1;34987:6;:13;:18;34983:272;;;35030:60;;;;;;;;;;:::i;:::-;;;;;;;;34983:272;35205:6;35199:13;35190:6;35186:2;35182:15;35175:38;34741:529;34878:41;;;34868:51;;;:6;:51;;;;34861:58;;;;;34705:620;35309:4;35302:11;;34533:799;;;;;;;:::o;31790:382::-;31884:1;31870:16;;:2;:16;;;;31862:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31943:16;31951:7;31943;:16::i;:::-;31942:17;31934:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32005:45;32034:1;32038:2;32042:7;32005:20;:45::i;:::-;32080:1;32063:9;:13;32073:2;32063:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32111:2;32092:7;:16;32100:7;32092:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32156:7;32152:2;32131:33;;32148:1;32131:33;;;;;;;;;;;;31790:382;;:::o;35904:126::-;;;;:::o;39955:164::-;40059:10;:17;;;;40032:15;:24;40048:7;40032:24;;;;;;;;;;;:44;;;;40087:10;40103:7;40087:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39955:164;:::o;40746:988::-;41012:22;41062:1;41037:22;41054:4;41037:16;:22::i;:::-;:26;;;;:::i;:::-;41012:51;;41074:18;41095:17;:26;41113:7;41095:26;;;;;;;;;;;;41074:47;;41242:14;41228:10;:28;41224:328;;41273:19;41295:12;:18;41308:4;41295:18;;;;;;;;;;;;;;;:34;41314:14;41295:34;;;;;;;;;;;;41273:56;;41379:11;41346:12;:18;41359:4;41346:18;;;;;;;;;;;;;;;:30;41365:10;41346:30;;;;;;;;;;;:44;;;;41496:10;41463:17;:30;41481:11;41463:30;;;;;;;;;;;:43;;;;41258:294;41224:328;41648:17;:26;41666:7;41648:26;;;;;;;;;;;41641:33;;;41692:12;:18;41705:4;41692:18;;;;;;;;;;;;;;;:34;41711:14;41692:34;;;;;;;;;;;41685:41;;;40827:907;;40746:988;;:::o;42029:1079::-;42282:22;42327:1;42307:10;:17;;;;:21;;;;:::i;:::-;42282:46;;42339:18;42360:15;:24;42376:7;42360:24;;;;;;;;;;;;42339:45;;42711:19;42733:10;42744:14;42733:26;;;;;;;;:::i;:::-;;;;;;;;;;42711:48;;42797:11;42772:10;42783;42772:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42908:10;42877:15;:28;42893:11;42877:28;;;;;;;;;;;:41;;;;43049:15;:24;43065:7;43049:24;;;;;;;;;;;43042:31;;;43084:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42100:1008;;;42029:1079;:::o;39533:221::-;39618:14;39635:20;39652:2;39635:16;:20::i;:::-;39618:37;;39693:7;39666:12;:16;39679:2;39666:16;;;;;;;;;;;;;;;:24;39683:6;39666:24;;;;;;;;;;;:34;;;;39740:6;39711:17;:26;39729:7;39711:26;;;;;;;;;;;:35;;;;39607:147;39533:221;;:::o;5953:387::-;6013:4;6221:12;6288:7;6276:20;6268:28;;6331:1;6324:4;:8;6317:15;;;5953:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:231::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:14;16164:2;16156:6;16152:15;16145:39;15960:231;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:419::-;16735:4;16773:2;16762:9;16758:18;16750:26;;16822:9;16816:4;16812:20;16808:1;16797:9;16793:17;16786:47;16850:131;16976:4;16850:131;:::i;:::-;16842:139;;16569:419;;;:::o;16994:220::-;17134:34;17130:1;17122:6;17118:14;17111:58;17203:3;17198:2;17190:6;17186:15;17179:28;16994:220;:::o;17220:366::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:419::-;17758:4;17796:2;17785:9;17781:18;17773:26;;17845:9;17839:4;17835:20;17831:1;17820:9;17816:17;17809:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17592:419;;;:::o;18017:243::-;18157:34;18153:1;18145:6;18141:14;18134:58;18226:26;18221:2;18213:6;18209:15;18202:51;18017:243;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:419::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:177::-;19203:29;19199:1;19191:6;19187:14;19180:53;19063:177;:::o;19246:366::-;19388:3;19409:67;19473:2;19468:3;19409:67;:::i;:::-;19402:74;;19485:93;19574:3;19485:93;:::i;:::-;19603:2;19598:3;19594:12;19587:19;;19246:366;;;:::o;19618:419::-;19784:4;19822:2;19811:9;19807:18;19799:26;;19871:9;19865:4;19861:20;19857:1;19846:9;19842:17;19835:47;19899:131;20025:4;19899:131;:::i;:::-;19891:139;;19618:419;;;:::o;20043:180::-;20091:77;20088:1;20081:88;20188:4;20185:1;20178:15;20212:4;20209:1;20202:15;20229:305;20269:3;20288:20;20306:1;20288:20;:::i;:::-;20283:25;;20322:20;20340:1;20322:20;:::i;:::-;20317:25;;20476:1;20408:66;20404:74;20401:1;20398:81;20395:107;;;20482:18;;:::i;:::-;20395:107;20526:1;20523;20519:9;20512:16;;20229:305;;;;:::o;20540:172::-;20680:24;20676:1;20668:6;20664:14;20657:48;20540:172;:::o;20718:366::-;20860:3;20881:67;20945:2;20940:3;20881:67;:::i;:::-;20874:74;;20957:93;21046:3;20957:93;:::i;:::-;21075:2;21070:3;21066:12;21059:19;;20718:366;;;:::o;21090:419::-;21256:4;21294:2;21283:9;21279:18;21271:26;;21343:9;21337:4;21333:20;21329:1;21318:9;21314:17;21307:47;21371:131;21497:4;21371:131;:::i;:::-;21363:139;;21090:419;;;:::o;21515:233::-;21554:3;21577:24;21595:5;21577:24;:::i;:::-;21568:33;;21623:66;21616:5;21613:77;21610:103;;;21693:18;;:::i;:::-;21610:103;21740:1;21733:5;21729:13;21722:20;;21515:233;;;:::o;21754:236::-;21894:34;21890:1;21882:6;21878:14;21871:58;21963:19;21958:2;21950:6;21946:15;21939:44;21754:236;:::o;21996:366::-;22138:3;22159:67;22223:2;22218:3;22159:67;:::i;:::-;22152:74;;22235:93;22324:3;22235:93;:::i;:::-;22353:2;22348:3;22344:12;22337:19;;21996:366;;;:::o;22368:419::-;22534:4;22572:2;22561:9;22557:18;22549:26;;22621:9;22615:4;22611:20;22607:1;22596:9;22592:17;22585:47;22649:131;22775:4;22649:131;:::i;:::-;22641:139;;22368:419;;;:::o;22793:230::-;22933:34;22929:1;22921:6;22917:14;22910:58;23002:13;22997:2;22989:6;22985:15;22978:38;22793:230;:::o;23029:366::-;23171:3;23192:67;23256:2;23251:3;23192:67;:::i;:::-;23185:74;;23268:93;23357:3;23268:93;:::i;:::-;23386:2;23381:3;23377:12;23370:19;;23029:366;;;:::o;23401:419::-;23567:4;23605:2;23594:9;23590:18;23582:26;;23654:9;23648:4;23644:20;23640:1;23629:9;23625:17;23618:47;23682:131;23808:4;23682:131;:::i;:::-;23674:139;;23401:419;;;:::o;23826:147::-;23927:11;23964:3;23949:18;;23826:147;;;;:::o;23979:114::-;;:::o;24099:398::-;24258:3;24279:83;24360:1;24355:3;24279:83;:::i;:::-;24272:90;;24371:93;24460:3;24371:93;:::i;:::-;24489:1;24484:3;24480:11;24473:18;;24099:398;;;:::o;24503:379::-;24687:3;24709:147;24852:3;24709:147;:::i;:::-;24702:154;;24873:3;24866:10;;24503:379;;;:::o;24888:180::-;24936:77;24933:1;24926:88;25033:4;25030:1;25023:15;25057:4;25054:1;25047:15;25074:231;25214:34;25210:1;25202:6;25198:14;25191:58;25283:14;25278:2;25270:6;25266:15;25259:39;25074:231;:::o;25311:366::-;25453:3;25474:67;25538:2;25533:3;25474:67;:::i;:::-;25467:74;;25550:93;25639:3;25550:93;:::i;:::-;25668:2;25663:3;25659:12;25652:19;;25311:366;;;:::o;25683:419::-;25849:4;25887:2;25876:9;25872:18;25864:26;;25936:9;25930:4;25926:20;25922:1;25911:9;25907:17;25900:47;25964:131;26090:4;25964:131;:::i;:::-;25956:139;;25683:419;;;:::o;26108:228::-;26248:34;26244:1;26236:6;26232:14;26225:58;26317:11;26312:2;26304:6;26300:15;26293:36;26108:228;:::o;26342:366::-;26484:3;26505:67;26569:2;26564:3;26505:67;:::i;:::-;26498:74;;26581:93;26670:3;26581:93;:::i;:::-;26699:2;26694:3;26690:12;26683:19;;26342:366;;;:::o;26714:419::-;26880:4;26918:2;26907:9;26903:18;26895:26;;26967:9;26961:4;26957:20;26953:1;26942:9;26938:17;26931:47;26995:131;27121:4;26995:131;:::i;:::-;26987:139;;26714:419;;;:::o;27139:229::-;27279:34;27275:1;27267:6;27263:14;27256:58;27348:12;27343:2;27335:6;27331:15;27324:37;27139:229;:::o;27374:366::-;27516:3;27537:67;27601:2;27596:3;27537:67;:::i;:::-;27530:74;;27613:93;27702:3;27613:93;:::i;:::-;27731:2;27726:3;27722:12;27715:19;;27374:366;;;:::o;27746:419::-;27912:4;27950:2;27939:9;27935:18;27927:26;;27999:9;27993:4;27989:20;27985:1;27974:9;27970:17;27963:47;28027:131;28153:4;28027:131;:::i;:::-;28019:139;;27746:419;;;:::o;28171:172::-;28311:24;28307:1;28299:6;28295:14;28288:48;28171:172;:::o;28349:366::-;28491:3;28512:67;28576:2;28571:3;28512:67;:::i;:::-;28505:74;;28588:93;28677:3;28588:93;:::i;:::-;28706:2;28701:3;28697:12;28690:19;;28349:366;;;:::o;28721:419::-;28887:4;28925:2;28914:9;28910:18;28902:26;;28974:9;28968:4;28964:20;28960:1;28949:9;28945:17;28938:47;29002:131;29128:4;29002:131;:::i;:::-;28994:139;;28721:419;;;:::o;29146:178::-;29286:30;29282:1;29274:6;29270:14;29263:54;29146:178;:::o;29330:366::-;29472:3;29493:67;29557:2;29552:3;29493:67;:::i;:::-;29486:74;;29569:93;29658:3;29569:93;:::i;:::-;29687:2;29682:3;29678:12;29671:19;;29330:366;;;:::o;29702:419::-;29868:4;29906:2;29895:9;29891:18;29883:26;;29955:9;29949:4;29945:20;29941:1;29930:9;29926:17;29919:47;29983:131;30109:4;29983:131;:::i;:::-;29975:139;;29702:419;;;:::o;30127:223::-;30267:34;30263:1;30255:6;30251:14;30244:58;30336:6;30331:2;30323:6;30319:15;30312:31;30127:223;:::o;30356:366::-;30498:3;30519:67;30583:2;30578:3;30519:67;:::i;:::-;30512:74;;30595:93;30684:3;30595:93;:::i;:::-;30713:2;30708:3;30704:12;30697:19;;30356:366;;;:::o;30728:419::-;30894:4;30932:2;30921:9;30917:18;30909:26;;30981:9;30975:4;30971:20;30967:1;30956:9;30952:17;30945:47;31009:131;31135:4;31009:131;:::i;:::-;31001:139;;30728:419;;;:::o;31153:348::-;31193:7;31216:20;31234:1;31216:20;:::i;:::-;31211:25;;31250:20;31268:1;31250:20;:::i;:::-;31245:25;;31438:1;31370:66;31366:74;31363:1;31360:81;31355:1;31348:9;31341:17;31337:105;31334:131;;;31445:18;;:::i;:::-;31334:131;31493:1;31490;31486:9;31475:20;;31153:348;;;;:::o;31507:168::-;31647:20;31643:1;31635:6;31631:14;31624:44;31507:168;:::o;31681:366::-;31823:3;31844:67;31908:2;31903:3;31844:67;:::i;:::-;31837:74;;31920:93;32009:3;31920:93;:::i;:::-;32038:2;32033:3;32029:12;32022:19;;31681:366;;;:::o;32053:419::-;32219:4;32257:2;32246:9;32242:18;32234:26;;32306:9;32300:4;32296:20;32292:1;32281:9;32277:17;32270:47;32334:131;32460:4;32334:131;:::i;:::-;32326:139;;32053:419;;;:::o;32478:226::-;32618:34;32614:1;32606:6;32602:14;32595:58;32687:9;32682:2;32674:6;32670:15;32663:34;32478:226;:::o;32710:366::-;32852:3;32873:67;32937:2;32932:3;32873:67;:::i;:::-;32866:74;;32949:93;33038:3;32949:93;:::i;:::-;33067:2;33062:3;33058:12;33051:19;;32710:366;;;:::o;33082:419::-;33248:4;33286:2;33275:9;33271:18;33263:26;;33335:9;33329:4;33325:20;33321:1;33310:9;33306:17;33299:47;33363:131;33489:4;33363:131;:::i;:::-;33355:139;;33082:419;;;:::o;33507:175::-;33647:27;33643:1;33635:6;33631:14;33624:51;33507:175;:::o;33688:366::-;33830:3;33851:67;33915:2;33910:3;33851:67;:::i;:::-;33844:74;;33927:93;34016:3;33927:93;:::i;:::-;34045:2;34040:3;34036:12;34029:19;;33688:366;;;:::o;34060:419::-;34226:4;34264:2;34253:9;34249:18;34241:26;;34313:9;34307:4;34303:20;34299:1;34288:9;34284:17;34277:47;34341:131;34467:4;34341:131;:::i;:::-;34333:139;;34060:419;;;:::o;34485:234::-;34625:34;34621:1;34613:6;34609:14;34602:58;34694:17;34689:2;34681:6;34677:15;34670:42;34485:234;:::o;34725:366::-;34867:3;34888:67;34952:2;34947:3;34888:67;:::i;:::-;34881:74;;34964:93;35053:3;34964:93;:::i;:::-;35082:2;35077:3;35073:12;35066:19;;34725:366;;;:::o;35097:419::-;35263:4;35301:2;35290:9;35286:18;35278:26;;35350:9;35344:4;35340:20;35336:1;35325:9;35321:17;35314:47;35378:131;35504:4;35378:131;:::i;:::-;35370:139;;35097:419;;;:::o;35522:148::-;35624:11;35661:3;35646:18;;35522:148;;;;:::o;35676:377::-;35782:3;35810:39;35843:5;35810:39;:::i;:::-;35865:89;35947:6;35942:3;35865:89;:::i;:::-;35858:96;;35963:52;36008:6;36003:3;35996:4;35989:5;35985:16;35963:52;:::i;:::-;36040:6;36035:3;36031:16;36024:23;;35786:267;35676:377;;;;:::o;36059:141::-;36108:4;36131:3;36123:11;;36154:3;36151:1;36144:14;36188:4;36185:1;36175:18;36167:26;;36059:141;;;:::o;36230:845::-;36333:3;36370:5;36364:12;36399:36;36425:9;36399:36;:::i;:::-;36451:89;36533:6;36528:3;36451:89;:::i;:::-;36444:96;;36571:1;36560:9;36556:17;36587:1;36582:137;;;;36733:1;36728:341;;;;36549:520;;36582:137;36666:4;36662:9;36651;36647:25;36642:3;36635:38;36702:6;36697:3;36693:16;36686:23;;36582:137;;36728:341;36795:38;36827:5;36795:38;:::i;:::-;36855:1;36869:154;36883:6;36880:1;36877:13;36869:154;;;36957:7;36951:14;36947:1;36942:3;36938:11;36931:35;37007:1;36998:7;36994:15;36983:26;;36905:4;36902:1;36898:12;36893:17;;36869:154;;;37052:6;37047:3;37043:16;37036:23;;36735:334;;36549:520;;36337:738;;36230:845;;;;:::o;37081:589::-;37306:3;37328:95;37419:3;37410:6;37328:95;:::i;:::-;37321:102;;37440:95;37531:3;37522:6;37440:95;:::i;:::-;37433:102;;37552:92;37640:3;37631:6;37552:92;:::i;:::-;37545:99;;37661:3;37654:10;;37081:589;;;;;;:::o;37676:225::-;37816:34;37812:1;37804:6;37800:14;37793:58;37885:8;37880:2;37872:6;37868:15;37861:33;37676:225;:::o;37907:366::-;38049:3;38070:67;38134:2;38129:3;38070:67;:::i;:::-;38063:74;;38146:93;38235:3;38146:93;:::i;:::-;38264:2;38259:3;38255:12;38248:19;;37907:366;;;:::o;38279:419::-;38445:4;38483:2;38472:9;38468:18;38460:26;;38532:9;38526:4;38522:20;38518:1;38507:9;38503:17;38496:47;38560:131;38686:4;38560:131;:::i;:::-;38552:139;;38279:419;;;:::o;38704:231::-;38844:34;38840:1;38832:6;38828:14;38821:58;38913:14;38908:2;38900:6;38896:15;38889:39;38704:231;:::o;38941:366::-;39083:3;39104:67;39168:2;39163:3;39104:67;:::i;:::-;39097:74;;39180:93;39269:3;39180:93;:::i;:::-;39298:2;39293:3;39289:12;39282:19;;38941:366;;;:::o;39313:419::-;39479:4;39517:2;39506:9;39502:18;39494:26;;39566:9;39560:4;39556:20;39552:1;39541:9;39537:17;39530:47;39594:131;39720:4;39594:131;:::i;:::-;39586:139;;39313:419;;;:::o;39738:228::-;39878:34;39874:1;39866:6;39862:14;39855:58;39947:11;39942:2;39934:6;39930:15;39923:36;39738:228;:::o;39972:366::-;40114:3;40135:67;40199:2;40194:3;40135:67;:::i;:::-;40128:74;;40211:93;40300:3;40211:93;:::i;:::-;40329:2;40324:3;40320:12;40313:19;;39972:366;;;:::o;40344:419::-;40510:4;40548:2;40537:9;40533:18;40525:26;;40597:9;40591:4;40587:20;40583:1;40572:9;40568:17;40561:47;40625:131;40751:4;40625:131;:::i;:::-;40617:139;;40344:419;;;:::o;40769:223::-;40909:34;40905:1;40897:6;40893:14;40886:58;40978:6;40973:2;40965:6;40961:15;40954:31;40769:223;:::o;40998:366::-;41140:3;41161:67;41225:2;41220:3;41161:67;:::i;:::-;41154:74;;41237:93;41326:3;41237:93;:::i;:::-;41355:2;41350:3;41346:12;41339:19;;40998:366;;;:::o;41370:419::-;41536:4;41574:2;41563:9;41559:18;41551:26;;41623:9;41617:4;41613:20;41609:1;41598:9;41594:17;41587:47;41651:131;41777:4;41651:131;:::i;:::-;41643:139;;41370:419;;;:::o;41795:191::-;41835:4;41855:20;41873:1;41855:20;:::i;:::-;41850:25;;41889:20;41907:1;41889:20;:::i;:::-;41884:25;;41928:1;41925;41922:8;41919:34;;;41933:18;;:::i;:::-;41919:34;41978:1;41975;41971:9;41963:17;;41795:191;;;;:::o;41992:237::-;42132:34;42128:1;42120:6;42116:14;42109:58;42201:20;42196:2;42188:6;42184:15;42177:45;41992:237;:::o;42235:366::-;42377:3;42398:67;42462:2;42457:3;42398:67;:::i;:::-;42391:74;;42474:93;42563:3;42474:93;:::i;:::-;42592:2;42587:3;42583:12;42576:19;;42235:366;;;:::o;42607:419::-;42773:4;42811:2;42800:9;42796:18;42788:26;;42860:9;42854:4;42850:20;42846:1;42835:9;42831:17;42824:47;42888:131;43014:4;42888:131;:::i;:::-;42880:139;;42607:419;;;:::o;43032:180::-;43080:77;43077:1;43070:88;43177:4;43174:1;43167:15;43201:4;43198:1;43191:15;43218:185;43258:1;43275:20;43293:1;43275:20;:::i;:::-;43270:25;;43309:20;43327:1;43309:20;:::i;:::-;43304:25;;43348:1;43338:35;;43353:18;;:::i;:::-;43338:35;43395:1;43392;43388:9;43383:14;;43218:185;;;;:::o;43409:176::-;43441:1;43458:20;43476:1;43458:20;:::i;:::-;43453:25;;43492:20;43510:1;43492:20;:::i;:::-;43487:25;;43531:1;43521:35;;43536:18;;:::i;:::-;43521:35;43577:1;43574;43570:9;43565:14;;43409:176;;;;:::o;43591:98::-;43642:6;43676:5;43670:12;43660:22;;43591:98;;;:::o;43695:168::-;43778:11;43812:6;43807:3;43800:19;43852:4;43847:3;43843:14;43828:29;;43695:168;;;;:::o;43869:360::-;43955:3;43983:38;44015:5;43983:38;:::i;:::-;44037:70;44100:6;44095:3;44037:70;:::i;:::-;44030:77;;44116:52;44161:6;44156:3;44149:4;44142:5;44138:16;44116:52;:::i;:::-;44193:29;44215:6;44193:29;:::i;:::-;44188:3;44184:39;44177:46;;43959:270;43869:360;;;;:::o;44235:640::-;44430:4;44468:3;44457:9;44453:19;44445:27;;44482:71;44550:1;44539:9;44535:17;44526:6;44482:71;:::i;:::-;44563:72;44631:2;44620:9;44616:18;44607:6;44563:72;:::i;:::-;44645;44713:2;44702:9;44698:18;44689:6;44645:72;:::i;:::-;44764:9;44758:4;44754:20;44749:2;44738:9;44734:18;44727:48;44792:76;44863:4;44854:6;44792:76;:::i;:::-;44784:84;;44235:640;;;;;;;:::o;44881:141::-;44937:5;44968:6;44962:13;44953:22;;44984:32;45010:5;44984:32;:::i;:::-;44881:141;;;;:::o;45028:349::-;45097:6;45146:2;45134:9;45125:7;45121:23;45117:32;45114:119;;;45152:79;;:::i;:::-;45114:119;45272:1;45297:63;45352:7;45343:6;45332:9;45328:22;45297:63;:::i;:::-;45287:73;;45243:127;45028:349;;;;:::o;45383:182::-;45523:34;45519:1;45511:6;45507:14;45500:58;45383:182;:::o;45571:366::-;45713:3;45734:67;45798:2;45793:3;45734:67;:::i;:::-;45727:74;;45810:93;45899:3;45810:93;:::i;:::-;45928:2;45923:3;45919:12;45912:19;;45571:366;;;:::o;45943:419::-;46109:4;46147:2;46136:9;46132:18;46124:26;;46196:9;46190:4;46186:20;46182:1;46171:9;46167:17;46160:47;46224:131;46350:4;46224:131;:::i;:::-;46216:139;;45943:419;;;:::o;46368:178::-;46508:30;46504:1;46496:6;46492:14;46485:54;46368:178;:::o;46552:366::-;46694:3;46715:67;46779:2;46774:3;46715:67;:::i;:::-;46708:74;;46791:93;46880:3;46791:93;:::i;:::-;46909:2;46904:3;46900:12;46893:19;;46552:366;;;:::o;46924:419::-;47090:4;47128:2;47117:9;47113:18;47105:26;;47177:9;47171:4;47167:20;47163:1;47152:9;47148:17;47141:47;47205:131;47331:4;47205:131;:::i;:::-;47197:139;;46924:419;;;:::o;47349:180::-;47397:77;47394:1;47387:88;47494:4;47491:1;47484:15;47518:4;47515:1;47508:15
Swarm Source
ipfs://9a451d50ecfad30747ce5797ccd2a479f9685ed4def7293756ed631d73619e26
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.