Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
911 NUDE
Holders
316
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 NUDELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NUDEMENFT
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-16 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } } 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); } } } } 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); } } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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); } 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; } 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); } 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 {} } 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); } 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(); } } library Base64 { string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; bytes internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000" hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000" hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000" hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE_ENCODE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { // read 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // write 4 characters mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F)))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } function decode(string memory _data) internal pure returns (bytes memory) { bytes memory data = bytes(_data); if (data.length == 0) return new bytes(0); require(data.length % 4 == 0, "invalid base64 decoder input"); // load the table into memory bytes memory table = TABLE_DECODE; // every 4 characters represent 3 bytes uint256 decodedLen = (data.length / 4) * 3; // add some extra buffer at the end required for the writing bytes memory result = new bytes(decodedLen + 32); assembly { // padding with '=' let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length mstore(result, decodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 4 characters at a time for {} lt(dataPtr, endPtr) {} { // read 4 characters dataPtr := add(dataPtr, 4) let input := mload(dataPtr) // write 3 bytes let output := add( add( shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)), shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))), add( shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)), and(mload(add(tablePtr, and( input , 0xFF))), 0xFF) ) ) mstore(resultPtr, shl(232, output)) resultPtr := add(resultPtr, 3) } } return result; } } contract NUDEMENFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI="https://nudemenft.com"; string public baseAniURI = "ipfs://QmPa8NwWB2cHXNwFLPbfhcQy9PTF3HmgDorjRxPACXiDjT"; uint256 public cost = 0.05 ether; uint256 public maxSupply = 9999; uint256 public maxMintAmount = 10; bool public paused = false; mapping(uint256 => uint256) public seeds; constructor() ERC721("NUDEMENFT", "NUDE") { mintNudemen(msg.sender, 10); } function mintNudemen(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused,"Minting Paused"); require(_mintAmount > 0, "At least 1 NFT to be minted"); require(_mintAmount <= maxMintAmount,"Max mint per TX exceeded"); require(supply + _mintAmount <= maxSupply,"Max NFT supply exceeded"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount,"Insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { uint256 tid = supply + i; _safeMint(_to, tid); seeds[tid] = uint256(keccak256(abi.encodePacked(uint256(bytes32(blockhash(block.number - 1))), tid))); } } 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 walletDetailsOfOwner(address _owner) public view returns (uint256[] memory, uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); uint256[] memory s = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); s[i] = seeds[tokenIds[i]]; } return (tokenIds, s); } function contractURI() public view returns (string memory) { return string(abi.encodePacked(baseURI, "/metadata.json")); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); return(formatTokenURI(tokenId,seeds[tokenId])); } function tokenAniURI(uint256 tokenId) public view returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); return string(abi.encodePacked(baseAniURI,'/?s=',seeds[tokenId].toString())); } function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setMaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseAniURI(string memory _newBaseAniURI) public onlyOwner { baseAniURI = _newBaseAniURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } function substring(string memory str, uint startIndex, uint endIndex) private pure returns (string memory) { bytes memory strBytes = bytes(str); bytes memory result = new bytes(endIndex-startIndex); for(uint i = startIndex; i < endIndex; i++) { result[i-startIndex] = strBytes[i]; } return string(result); } function strToUint(string memory _str) private pure returns(uint256 res) { for (uint256 i = 0; i < bytes(_str).length; i++) { res += (uint8(bytes(_str)[i]) - 48) * 10**(bytes(_str).length - i - 1); } return (res); } function formatTokenURI(uint256 tid, uint256 seed) private view returns (string memory) { string memory seedStr = seed.toString(); string memory attrA = substring(seedStr,1,11); string memory attrD = substring(seedStr,11,21); string memory attrU = substring(seedStr,21,31); string memory attrL = substring(seedStr,31,41); string memory attrT = substring(seedStr,41,51); string memory attrS = substring(seedStr,51,61); string memory attrP = substring(seedStr,61,71); string memory extURL = string(abi.encodePacked('"external_url":"',baseURI,'/?s=',seed.toString(),'",')); string memory aniURL = string(abi.encodePacked('"animation_url":"',baseURI,'/?s=',seed.toString(),'",')); string memory imgURL = string(abi.encodePacked('"image":"',baseURI,'/img/',tid.toString(),'.png"')); string memory name =string(abi.encodePacked('"name":"Nudemen #',tid.toString())); uint256 num; num = strToUint(attrA); if (num>1000000000) attrA= (num%102).toString(); else attrA= (102+num%18).toString(); num = strToUint(attrD); if (num>1000000000) attrD="0"; else attrD="1"; num = strToUint(attrU); attrU= (num%101).toString(); num = strToUint(attrL); if (num>7000000000) attrL= "100"; else attrL= (num%100).toString(); num = strToUint(attrT); attrT= (num%10001).toString(); num = strToUint(attrS); if (num>7000000000) attrS= "100"; else attrS= (num%100).toString(); num = strToUint(attrP); if (num>7000000000) attrP= "4"; else attrP= (5+num%5).toString(); return string( abi.encodePacked( "data:application/json;base64,", Base64.encode( bytes( abi.encodePacked( '{',name,'","description":"The NudemeNFT is a collection of 9,999 unique interactive arts living on the Ethereum blockchain.","attributes":[{"trait_type":"A","value":"', attrA,'"},{"trait_type":"D","value":"', attrD,'"},{"trait_type":"U","value":"', attrU,'"},{"trait_type":"L","value":"', attrL,'"},{"trait_type":"T","value":"', attrT,'"},{"trait_type":"S","value":"', attrS,'"},{"trait_type":"P","value":"', attrP,'"}],',extURL,aniURL,imgURL,'}' ) ) ) ) ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"baseAniURI","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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintNudemen","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"","type":"uint256"}],"name":"seeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseAniURI","type":"string"}],"name":"setBaseAniURI","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":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenAniURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletDetailsOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","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
60806040526040518060400160405280601581526020017f68747470733a2f2f6e7564656d656e66742e636f6d0000000000000000000000815250600b90805190602001906200005192919062000f7f565b50604051806060016040528060358152602001620071b560359139600c90805190602001906200008392919062000f7f565b5066b1a2bc2ec50000600d5561270f600e55600a600f556000601060006101000a81548160ff021916908315150217905550348015620000c257600080fd5b506040518060400160405280600981526020017f4e5544454d454e465400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e5544450000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014792919062000f7f565b5080600190805190602001906200016092919062000f7f565b50505062000183620001776200019c60201b60201c565b620001a460201b60201c565b6200019633600a6200026a60201b60201c565b62001821565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006200027c620004f460201b60201c565b9050601060009054906101000a900460ff1615620002d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c89062001522565b60405180910390fd5b6000821162000317576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030e9062001478565b60405180910390fd5b600f548211156200035f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035690620014bc565b60405180910390fd5b600e54828262000370919062001571565b1115620003b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ab9062001412565b60405180910390fd5b620003c46200050160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200044d5781600d54620004079190620015ce565b3410156200044c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000443906200149a565b60405180910390fd5b5b6000600190505b828111620004ee57600081836200046c919062001571565b90506200048085826200052b60201b60201c565b6001436200048f91906200162f565b4060001c81604051602001620004a79291906200138e565b6040516020818303038152906040528051906020012060001c6011600083815260200190815260200160002081905550508080620004e59062001740565b91505062000454565b50505050565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200054d8282604051806020016040528060008152506200055160201b60201c565b5050565b620005638383620005bf60201b60201c565b620005786000848484620007a560201b60201c565b620005ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b19062001434565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000632576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006299062001500565b60405180910390fd5b62000643816200095f60201b60201c565b1562000686576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067d9062001456565b60405180910390fd5b6200069a60008383620009cb60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006ec919062001571565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620007d38473ffffffffffffffffffffffffffffffffffffffff1662000b1260201b62001f011760201c565b1562000952578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008056200019c60201b60201c565b8786866040518563ffffffff1660e01b8152600401620008299493929190620013be565b602060405180830381600087803b1580156200084457600080fd5b505af19250505080156200087857506040513d601f19601f8201168201806040525081019062000875919062001046565b60015b62000901573d8060008114620008ab576040519150601f19603f3d011682016040523d82523d6000602084013e620008b0565b606091505b50600081511415620008f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f09062001434565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000957565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620009e383838362000b2560201b62001f141760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a305762000a2a8162000b2a60201b60201c565b62000a78565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000a775762000a76838262000b7360201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ac55762000abf8162000cf060201b60201c565b62000b0d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000b0c5762000b0b828262000e3860201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b8d8462000ec460201b620018531760201c565b62000b9991906200162f565b905060006007600084815260200190815260200160002054905081811462000c7f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000d0691906200162f565b905060006009600084815260200190815260200160002054905060006008838154811062000d5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000da6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000e1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000e508362000ec460201b620018531760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f2f90620014de565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000f8d906200170a565b90600052602060002090601f01602090048101928262000fb1576000855562000ffd565b82601f1062000fcc57805160ff191683800117855562000ffd565b8280016001018555821562000ffd579182015b8281111562000ffc57825182559160200191906001019062000fdf565b5b5090506200100c919062001010565b5090565b5b808211156200102b57600081600090555060010162001011565b5090565b600081519050620010408162001807565b92915050565b6000602082840312156200105957600080fd5b600062001069848285016200102f565b91505092915050565b6200107d816200166a565b82525050565b6000620010908262001544565b6200109c81856200154f565b9350620010ae818560208601620016d4565b620010b981620017f6565b840191505092915050565b6000620010d360178362001560565b91507f4d6178204e465420737570706c792065786365656465640000000000000000006000830152602082019050919050565b60006200111560328362001560565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006200117d601c8362001560565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000620011bf601b8362001560565b91507f4174206c656173742031204e465420746f206265206d696e74656400000000006000830152602082019050919050565b60006200120160128362001560565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006200124360188362001560565b91507f4d6178206d696e742070657220545820657863656564656400000000000000006000830152602082019050919050565b600062001285602a8362001560565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000620012ed60208362001560565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006200132f600e8362001560565b91507f4d696e74696e67205061757365640000000000000000000000000000000000006000830152602082019050919050565b6200136d81620016ca565b82525050565b620013886200138282620016ca565b6200178e565b82525050565b60006200139c828562001373565b602082019150620013ae828462001373565b6020820191508190509392505050565b6000608082019050620013d5600083018762001072565b620013e4602083018662001072565b620013f3604083018562001362565b818103606083015262001407818462001083565b905095945050505050565b600060208201905081810360008301526200142d81620010c4565b9050919050565b600060208201905081810360008301526200144f8162001106565b9050919050565b6000602082019050818103600083015262001471816200116e565b9050919050565b600060208201905081810360008301526200149381620011b0565b9050919050565b60006020820190508181036000830152620014b581620011f2565b9050919050565b60006020820190508181036000830152620014d78162001234565b9050919050565b60006020820190508181036000830152620014f98162001276565b9050919050565b600060208201905081810360008301526200151b81620012de565b9050919050565b600060208201905081810360008301526200153d8162001320565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200157e82620016ca565b91506200158b83620016ca565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015c357620015c262001798565b5b828201905092915050565b6000620015db82620016ca565b9150620015e883620016ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001624576200162362001798565b5b828202905092915050565b60006200163c82620016ca565b91506200164983620016ca565b9250828210156200165f576200165e62001798565b5b828203905092915050565b60006200167782620016aa565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620016f4578082015181840152602081019050620016d7565b8381111562001704576000848401525b50505050565b600060028204905060018216806200172357607f821691505b602082108114156200173a5762001739620017c7565b5b50919050565b60006200174d82620016ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001783576200178262001798565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b62001812816200167e565b81146200181e57600080fd5b50565b61598480620018316000396000f3fe60806040526004361061021a5760003560e01c806355f804b31161012357806395d89b41116100ab578063e8a3d4851161006f578063e8a3d485146107ca578063e985e9c5146107f5578063f0503e8014610832578063f2fde38b1461086f578063f3f2032a146108985761021a565b806395d89b41146106e5578063a22cb46514610710578063b88d4fde14610739578063c87b56dd14610762578063d5abeb011461079f5761021a565b806364eed1c2116100f257806364eed1c2146106125780636c0360eb1461063b57806370a0823114610666578063715018a6146106a35780638da5cb5b146106ba5761021a565b806355f804b31461055657806357b9aee41461057f5780635c975abb146105aa5780636352211e146105d55761021a565b8063239c70ae116101a65780633ccfd60b116101755780633ccfd60b1461048057806342842e0e1461048a578063438b6300146104b357806344a0d68a146104f05780634f6ccce7146105195761021a565b8063239c70ae146103d357806323b872dd146103fe5780632b3d1bb8146104275780632f745c59146104435761021a565b8063088a4ed0116101ed578063088a4ed0146102ed578063095ea7b31461031657806313faede61461033f57806318160ddd1461036a5780632236c495146103955761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613ba7565b6108d5565b6040516102539190614f40565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190613b7e565b61094f565b005b34801561029157600080fd5b5061029a6109e8565b6040516102a79190614f5b565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190613c3a565b610a7a565b6040516102e49190614e80565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613c3a565b610aff565b005b34801561032257600080fd5b5061033d60048036038101906103389190613b42565b610b85565b005b34801561034b57600080fd5b50610354610c9d565b604051610361919061525d565b60405180910390f35b34801561037657600080fd5b5061037f610ca3565b60405161038c919061525d565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906139d7565b610cb0565b6040516103ca929190614f09565b60405180910390f35b3480156103df57600080fd5b506103e8610ebb565b6040516103f5919061525d565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190613a3c565b610ec1565b005b610441600480360381019061043c9190613b42565b610f21565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613b42565b611175565b604051610477919061525d565b60405180910390f35b61048861121a565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613a3c565b61130f565b005b3480156104bf57600080fd5b506104da60048036038101906104d591906139d7565b61132f565b6040516104e79190614ee7565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613c3a565b611429565b005b34801561052557600080fd5b50610540600480360381019061053b9190613c3a565b6114af565b60405161054d919061525d565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190613bf9565b611546565b005b34801561058b57600080fd5b506105946115dc565b6040516105a19190614f5b565b60405180910390f35b3480156105b657600080fd5b506105bf61166a565b6040516105cc9190614f40565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613c3a565b61167d565b6040516106099190614e80565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613bf9565b61172f565b005b34801561064757600080fd5b506106506117c5565b60405161065d9190614f5b565b60405180910390f35b34801561067257600080fd5b5061068d600480360381019061068891906139d7565b611853565b60405161069a919061525d565b60405180910390f35b3480156106af57600080fd5b506106b861190b565b005b3480156106c657600080fd5b506106cf611993565b6040516106dc9190614e80565b60405180910390f35b3480156106f157600080fd5b506106fa6119bd565b6040516107079190614f5b565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613b06565b611a4f565b005b34801561074557600080fd5b50610760600480360381019061075b9190613a8b565b611bd0565b005b34801561076e57600080fd5b5061078960048036038101906107849190613c3a565b611c32565b6040516107969190614f5b565b60405180910390f35b3480156107ab57600080fd5b506107b4611ca0565b6040516107c1919061525d565b60405180910390f35b3480156107d657600080fd5b506107df611ca6565b6040516107ec9190614f5b565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613a00565b611cce565b6040516108299190614f40565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613c3a565b611d62565b604051610866919061525d565b60405180910390f35b34801561087b57600080fd5b50610896600480360381019061089191906139d7565b611d7a565b005b3480156108a457600080fd5b506108bf60048036038101906108ba9190613c3a565b611e72565b6040516108cc9190614f5b565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610948575061094782611f19565b5b9050919050565b610957611ffb565b73ffffffffffffffffffffffffffffffffffffffff16610975611993565b73ffffffffffffffffffffffffffffffffffffffff16146109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c29061517d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109f790615722565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2390615722565b8015610a705780601f10610a4557610100808354040283529160200191610a70565b820191906000526020600020905b815481529060010190602001808311610a5357829003601f168201915b5050505050905090565b6000610a8582612003565b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb9061515d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b07611ffb565b73ffffffffffffffffffffffffffffffffffffffff16610b25611993565b73ffffffffffffffffffffffffffffffffffffffff1614610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b729061517d565b60405180910390fd5b80600f8190555050565b6000610b908261167d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf8906151fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c20611ffb565b73ffffffffffffffffffffffffffffffffffffffff161480610c4f5750610c4e81610c49611ffb565b611cce565b5b610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c85906150bd565b60405180910390fd5b610c98838361206f565b505050565b600d5481565b6000600880549050905090565b6060806000610cbe84611853565b905060008167ffffffffffffffff811115610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d305781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115610d75577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610da35781602001602082028036833780820191505090505b50905060005b83811015610eac57610dbb8782611175565b838281518110610df4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505060116000848381518110610e3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002054828281518110610e8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ea490615754565b915050610da9565b50818194509450505050915091565b600f5481565b610ed2610ecc611ffb565b82612128565b610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f089061521d565b60405180910390fd5b610f1c838383612206565b505050565b6000610f2b610ca3565b9050601060009054906101000a900460ff1615610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f74906151dd565b60405180910390fd5b60008211610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb79061505d565b60405180910390fd5b600f54821115611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc906150dd565b60405180910390fd5b600e54828261101491906153a5565b1115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90614f7d565b60405180910390fd5b61105d611993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e05781600d5461109d919061559d565b3410156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d69061509d565b60405180910390fd5b5b6000600190505b82811161116f57600081836110fc91906153a5565b90506111088582612462565b60014361111591906155f7565b4060001c8160405160200161112b929190614e54565b6040516020818303038152906040528051906020012060001c601160008381526020019081526020016000208190555050808061116790615754565b9150506110e7565b50505050565b600061118083611853565b82106111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890614f9d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611222611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611240611993565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d9061517d565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112bc90614e3f565b60006040518083038185875af1925050503d80600081146112f9576040519150601f19603f3d011682016040523d82523d6000602084013e6112fe565b606091505b505090508061130c57600080fd5b50565b61132a83838360405180602001604052806000815250611bd0565b505050565b6060600061133c83611853565b905060008167ffffffffffffffff811115611380577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113ae5781602001602082028036833780820191505090505b50905060005b8281101561141e576113c68582611175565b8282815181106113ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061141690615754565b9150506113b4565b508092505050919050565b611431611ffb565b73ffffffffffffffffffffffffffffffffffffffff1661144f611993565b73ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c9061517d565b60405180910390fd5b80600d8190555050565b60006114b9610ca3565b82106114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f19061523d565b60405180910390fd5b60088281548110611534577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61154e611ffb565b73ffffffffffffffffffffffffffffffffffffffff1661156c611993565b73ffffffffffffffffffffffffffffffffffffffff16146115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b99061517d565b60405180910390fd5b80600b90805190602001906115d89291906137fb565b5050565b600c80546115e990615722565b80601f016020809104026020016040519081016040528092919081815260200182805461161590615722565b80156116625780601f1061163757610100808354040283529160200191611662565b820191906000526020600020905b81548152906001019060200180831161164557829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d9061511d565b60405180910390fd5b80915050919050565b611737611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611755611993565b73ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a29061517d565b60405180910390fd5b80600c90805190602001906117c19291906137fb565b5050565b600b80546117d290615722565b80601f01602080910402602001604051908101604052809291908181526020018280546117fe90615722565b801561184b5780601f106118205761010080835404028352916020019161184b565b820191906000526020600020905b81548152906001019060200180831161182e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb906150fd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611913611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611931611993565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e9061517d565b60405180910390fd5b6119916000612480565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119cc90615722565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890615722565b8015611a455780601f10611a1a57610100808354040283529160200191611a45565b820191906000526020600020905b815481529060010190602001808311611a2857829003601f168201915b5050505050905090565b611a57611ffb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061503d565b60405180910390fd5b8060056000611ad2611ffb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7f611ffb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc49190614f40565b60405180910390a35050565b611be1611bdb611ffb565b83612128565b611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061521d565b60405180910390fd5b611c2c84848484612546565b50505050565b6060611c3d82612003565b611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906151bd565b60405180910390fd5b611c998260116000858152602001908152602001600020546125a2565b9050919050565b600e5481565b6060600b604051602001611cba9190614c03565b604051602081830303815290604052905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b611d82611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611da0611993565b73ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded9061517d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614fdd565b60405180910390fd5b611e6f81612480565b50565b6060611e7d82612003565b611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb3906151bd565b60405180910390fd5b600c611eda60116000858152602001908152602001600020546129cf565b604051602001611eeb929190614bd4565b6040516020818303038152906040529050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fe457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ff45750611ff382612b7c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120e28361167d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061213382612003565b612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061507d565b60405180910390fd5b600061217d8361167d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121ec57508373ffffffffffffffffffffffffffffffffffffffff166121d484610a7a565b73ffffffffffffffffffffffffffffffffffffffff16145b806121fd57506121fc8185611cce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122268261167d565b73ffffffffffffffffffffffffffffffffffffffff161461227c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122739061519d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e39061501d565b60405180910390fd5b6122f7838383612be6565b61230260008261206f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235291906155f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123a991906153a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61247c828260405180602001604052806000815250612cfa565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612551848484612206565b61255d84848484612d55565b61259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390614fbd565b60405180910390fd5b50505050565b606060006125af836129cf565b905060006125c0826001600b612eec565b905060006125d183600b6015612eec565b905060006125e2846015601f612eec565b905060006125f385601f6029612eec565b905060006126048660296033612eec565b90506000612615876033603d612eec565b9050600061262688603d6047612eec565b90506000600b6126358c6129cf565b604051602001612646929190614c25565b60405160208183030381529060405290506000600b6126648d6129cf565b604051602001612675929190614c8c565b60405160208183030381529060405290506000600b6126938f6129cf565b6040516020016126a4929190614cd1565b604051602081830303815290604052905060006126c08f6129cf565b6040516020016126d09190614c6a565b604051602081830303815290604052905060006126ec8c61305a565b9050633b9aca008111156127165761270f60668261270a91906157a7565b6129cf565b9b5061273a565b61273760128261272691906157a7565b606661273291906153a5565b6129cf565b9b505b6127438b61305a565b9050633b9aca0081111561278e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509a506127c7565b6040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152509a505b6127d08a61305a565b90506127e76065826127e291906157a7565b6129cf565b99506127f28961305a565b90506401a13b860081111561283e576040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152509850612856565b61285360648261284e91906157a7565b6129cf565b98505b61285f8861305a565b90506128776127118261287291906157a7565b6129cf565b97506128828761305a565b90506401a13b86008111156128ce576040518060400160405280600381526020017f313030000000000000000000000000000000000000000000000000000000000081525096506128e6565b6128e36064826128de91906157a7565b6129cf565b96505b6128ef8661305a565b90506401a13b860081111561293b576040518060400160405280600181526020017f3400000000000000000000000000000000000000000000000000000000000000815250955061295f565b61295c60058261294b91906157a7565b600561295791906153a5565b6129cf565b95505b61299b828d8d8d8d8d8d8d8d8d8d6040516020016129879b9a99989796959493929190614d16565b604051602081830303815290604052613116565b6040516020016129ab9190614e1d565b6040516020818303038152906040529d505050505050505050505050505092915050565b60606000821415612a17576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b77565b600082905060005b60008214612a49578080612a3290615754565b915050600a82612a4291906153fb565b9150612a1f565b60008167ffffffffffffffff811115612a8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612abd5781602001600182028036833780820191505090505b5090505b60008514612b7057600182612ad691906155f7565b9150600a85612ae591906157a7565b6030612af191906153a5565b60f81b818381518110612b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b6991906153fb565b9450612ac1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bf1838383611f14565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3457612c2f816132b5565b612c73565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c7257612c7183826132fe565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb657612cb18161346b565b612cf5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cf457612cf382826135ae565b5b5b505050565b612d04838361362d565b612d116000848484612d55565b612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790614fbd565b60405180910390fd5b505050565b6000612d768473ffffffffffffffffffffffffffffffffffffffff16611f01565b15612edf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d9f611ffb565b8786866040518563ffffffff1660e01b8152600401612dc19493929190614e9b565b602060405180830381600087803b158015612ddb57600080fd5b505af1925050508015612e0c57506040513d601f19601f82011682018060405250810190612e099190613bd0565b60015b612e8f573d8060008114612e3c576040519150601f19603f3d011682016040523d82523d6000602084013e612e41565b606091505b50600081511415612e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7e90614fbd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ee4565b600190505b949350505050565b6060600084905060008484612f0191906155f7565b67ffffffffffffffff811115612f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612f725781602001600182028036833780820191505090505b50905060008590505b8481101561304d57828181518110612fbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b828783612fd491906155f7565b8151811061300b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061304590615754565b915050612f7b565b5080925050509392505050565b600080600090505b825181101561311057600181845161307a91906155f7565b61308491906155f7565b600a613090919061547f565b60308483815181106130cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c6130e3919061562b565b60ff166130f0919061559d565b826130fb91906153a5565b9150808061310890615754565b915050613062565b50919050565b6060600082511415613139576040518060200160405280600081525090506132b0565b600060405180606001604052806040815260200161590f604091399050600060036002855161316891906153a5565b61317291906153fb565b600461317e919061559d565b9050600060208261318f91906153a5565b67ffffffffffffffff8111156131ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132005781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561326f576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050613214565b6003895106600181146132895760028114613299576132a4565b613d3d60f01b60028303526132a4565b603d60f81b60018303525b50505050508093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161330b84611853565b61331591906155f7565b90506000600760008481526020019081526020016000205490508181146133fa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061347f91906155f7565b90506000600960008481526020019081526020016000205490506000600883815481106134d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061351d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613592577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135b983611853565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561369d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136949061513d565b60405180910390fd5b6136a681612003565b156136e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136dd90614ffd565b60405180910390fd5b6136f260008383612be6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461374291906153a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461380790615722565b90600052602060002090601f0160209004810192826138295760008555613870565b82601f1061384257805160ff1916838001178555613870565b82800160010185558215613870579182015b8281111561386f578251825591602001919060010190613854565b5b50905061387d9190613881565b5090565b5b8082111561389a576000816000905550600101613882565b5090565b60006138b16138ac846152a9565b615278565b9050828152602081018484840111156138c957600080fd5b6138d48482856156e0565b509392505050565b60006138ef6138ea846152d9565b615278565b90508281526020810184848401111561390757600080fd5b6139128482856156e0565b509392505050565b600081359050613929816158b2565b92915050565b60008135905061393e816158c9565b92915050565b600081359050613953816158e0565b92915050565b600081519050613968816158e0565b92915050565b600082601f83011261397f57600080fd5b813561398f84826020860161389e565b91505092915050565b600082601f8301126139a957600080fd5b81356139b98482602086016138dc565b91505092915050565b6000813590506139d1816158f7565b92915050565b6000602082840312156139e957600080fd5b60006139f78482850161391a565b91505092915050565b60008060408385031215613a1357600080fd5b6000613a218582860161391a565b9250506020613a328582860161391a565b9150509250929050565b600080600060608486031215613a5157600080fd5b6000613a5f8682870161391a565b9350506020613a708682870161391a565b9250506040613a81868287016139c2565b9150509250925092565b60008060008060808587031215613aa157600080fd5b6000613aaf8782880161391a565b9450506020613ac08782880161391a565b9350506040613ad1878288016139c2565b925050606085013567ffffffffffffffff811115613aee57600080fd5b613afa8782880161396e565b91505092959194509250565b60008060408385031215613b1957600080fd5b6000613b278582860161391a565b9250506020613b388582860161392f565b9150509250929050565b60008060408385031215613b5557600080fd5b6000613b638582860161391a565b9250506020613b74858286016139c2565b9150509250929050565b600060208284031215613b9057600080fd5b6000613b9e8482850161392f565b91505092915050565b600060208284031215613bb957600080fd5b6000613bc784828501613944565b91505092915050565b600060208284031215613be257600080fd5b6000613bf084828501613959565b91505092915050565b600060208284031215613c0b57600080fd5b600082013567ffffffffffffffff811115613c2557600080fd5b613c3184828501613998565b91505092915050565b600060208284031215613c4c57600080fd5b6000613c5a848285016139c2565b91505092915050565b6000613c6f8383614b9f565b60208301905092915050565b613c848161565f565b82525050565b6000613c958261532e565b613c9f818561535c565b9350613caa83615309565b8060005b83811015613cdb578151613cc28882613c63565b9750613ccd8361534f565b925050600181019050613cae565b5085935050505092915050565b613cf181615671565b82525050565b6000613d0282615339565b613d0c818561536d565b9350613d1c8185602086016156ef565b613d2581615894565b840191505092915050565b6000613d3b82615344565b613d458185615389565b9350613d558185602086016156ef565b613d5e81615894565b840191505092915050565b6000613d7482615344565b613d7e818561539a565b9350613d8e8185602086016156ef565b80840191505092915050565b60008154613da781615722565b613db1818661539a565b94506001821660008114613dcc5760018114613ddd57613e10565b60ff19831686528186019350613e10565b613de685615319565b60005b83811015613e0857815481890152600182019150602081019050613de9565b838801955050505b50505092915050565b6000613e2660108361539a565b91507f2265787465726e616c5f75726c223a22000000000000000000000000000000006000830152601082019050919050565b6000613e66601783615389565b91507f4d6178204e465420737570706c792065786365656465640000000000000000006000830152602082019050919050565b6000613ea6602b83615389565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613f0c603283615389565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613f72602683615389565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fd860028361539a565b91507f222c0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061401860048361539a565b91507f2f3f733d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614058601c83615389565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061409860118361539a565b91507f226e616d65223a224e7564656d656e20230000000000000000000000000000006000830152601182019050919050565b60006140d860058361539a565b91507f2f696d672f0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000614118600e8361539a565b91507f2f6d657461646174612e6a736f6e0000000000000000000000000000000000006000830152600e82019050919050565b6000614158602483615389565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141be601983615389565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006141fe60118361539a565b91507f22616e696d6174696f6e5f75726c223a220000000000000000000000000000006000830152601182019050919050565b600061423e601b83615389565b91507f4174206c656173742031204e465420746f206265206d696e74656400000000006000830152602082019050919050565b600061427e602c83615389565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006142e4601e8361539a565b91507f227d2c7b2274726169745f74797065223a224c222c2276616c7565223a2200006000830152601e82019050919050565b6000614324601e8361539a565b91507f227d2c7b2274726169745f74797065223a2253222c2276616c7565223a2200006000830152601e82019050919050565b6000614364601283615389565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006143a4603883615389565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061440a601883615389565b91507f4d6178206d696e742070657220545820657863656564656400000000000000006000830152602082019050919050565b600061444a601e8361539a565b91507f227d2c7b2274726169745f74797065223a2255222c2276616c7565223a2200006000830152601e82019050919050565b600061448a602a83615389565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006144f0602983615389565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061455660048361539a565b91507f227d5d2c000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614596601e8361539a565b91507f227d2c7b2274726169745f74797065223a2244222c2276616c7565223a2200006000830152601e82019050919050565b60006145d660098361539a565b91507f22696d616765223a2200000000000000000000000000000000000000000000006000830152600982019050919050565b6000614616601e8361539a565b91507f227d2c7b2274726169745f74797065223a2254222c2276616c7565223a2200006000830152601e82019050919050565b6000614656602083615389565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061469660018361539a565b91507f7d000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006146d6602c83615389565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061473c602083615389565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061477c601e8361539a565b91507f227d2c7b2274726169745f74797065223a2250222c2276616c7565223a2200006000830152601e82019050919050565b60006147bc602983615389565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614822602f83615389565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061488860058361539a565b91507f2e706e67220000000000000000000000000000000000000000000000000000006000830152600582019050919050565b60006148c860018361539a565b91507f7b000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614908600e83615389565b91507f4d696e74696e67205061757365640000000000000000000000000000000000006000830152602082019050919050565b6000614948602183615389565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149ae601d8361539a565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b60006149ee60008361537e565b9150600082019050919050565b6000614a08603183615389565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614a6e602c83615389565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614ad4609d8361539a565b91507f222c226465736372697074696f6e223a22546865204e7564656d654e4654206960008301527f73206120636f6c6c656374696f6e206f6620392c39393920756e69717565206960208301527f6e7465726163746976652061727473206c6976696e67206f6e2074686520457460408301527f68657265756d20626c6f636b636861696e2e222c22617474726962757465732260608301527f3a5b7b2274726169745f74797065223a2241222c2276616c7565223a220000006080830152609d82019050919050565b614ba8816156c9565b82525050565b614bb7816156c9565b82525050565b614bce614bc9826156c9565b61579d565b82525050565b6000614be08285613d9a565b9150614beb8261400b565b9150614bf78284613d69565b91508190509392505050565b6000614c0f8284613d9a565b9150614c1a8261410b565b915081905092915050565b6000614c3082613e19565b9150614c3c8285613d9a565b9150614c478261400b565b9150614c538284613d69565b9150614c5e82613fcb565b91508190509392505050565b6000614c758261408b565b9150614c818284613d69565b915081905092915050565b6000614c97826141f1565b9150614ca38285613d9a565b9150614cae8261400b565b9150614cba8284613d69565b9150614cc582613fcb565b91508190509392505050565b6000614cdc826145c9565b9150614ce88285613d9a565b9150614cf3826140cb565b9150614cff8284613d69565b9150614d0a8261487b565b91508190509392505050565b6000614d21826148bb565b9150614d2d828e613d69565b9150614d3882614ac7565b9150614d44828d613d69565b9150614d4f82614589565b9150614d5b828c613d69565b9150614d668261443d565b9150614d72828b613d69565b9150614d7d826142d7565b9150614d89828a613d69565b9150614d9482614609565b9150614da08289613d69565b9150614dab82614317565b9150614db78288613d69565b9150614dc28261476f565b9150614dce8287613d69565b9150614dd982614549565b9150614de58286613d69565b9150614df18285613d69565b9150614dfd8284613d69565b9150614e0882614689565b91508190509c9b505050505050505050505050565b6000614e28826149a1565b9150614e348284613d69565b915081905092915050565b6000614e4a826149e1565b9150819050919050565b6000614e608285614bbd565b602082019150614e708284614bbd565b6020820191508190509392505050565b6000602082019050614e956000830184613c7b565b92915050565b6000608082019050614eb06000830187613c7b565b614ebd6020830186613c7b565b614eca6040830185614bae565b8181036060830152614edc8184613cf7565b905095945050505050565b60006020820190508181036000830152614f018184613c8a565b905092915050565b60006040820190508181036000830152614f238185613c8a565b90508181036020830152614f378184613c8a565b90509392505050565b6000602082019050614f556000830184613ce8565b92915050565b60006020820190508181036000830152614f758184613d30565b905092915050565b60006020820190508181036000830152614f9681613e59565b9050919050565b60006020820190508181036000830152614fb681613e99565b9050919050565b60006020820190508181036000830152614fd681613eff565b9050919050565b60006020820190508181036000830152614ff681613f65565b9050919050565b600060208201905081810360008301526150168161404b565b9050919050565b600060208201905081810360008301526150368161414b565b9050919050565b60006020820190508181036000830152615056816141b1565b9050919050565b6000602082019050818103600083015261507681614231565b9050919050565b6000602082019050818103600083015261509681614271565b9050919050565b600060208201905081810360008301526150b681614357565b9050919050565b600060208201905081810360008301526150d681614397565b9050919050565b600060208201905081810360008301526150f6816143fd565b9050919050565b600060208201905081810360008301526151168161447d565b9050919050565b60006020820190508181036000830152615136816144e3565b9050919050565b6000602082019050818103600083015261515681614649565b9050919050565b60006020820190508181036000830152615176816146c9565b9050919050565b600060208201905081810360008301526151968161472f565b9050919050565b600060208201905081810360008301526151b6816147af565b9050919050565b600060208201905081810360008301526151d681614815565b9050919050565b600060208201905081810360008301526151f6816148fb565b9050919050565b600060208201905081810360008301526152168161493b565b9050919050565b60006020820190508181036000830152615236816149fb565b9050919050565b6000602082019050818103600083015261525681614a61565b9050919050565b60006020820190506152726000830184614bae565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561529f5761529e615865565b5b8060405250919050565b600067ffffffffffffffff8211156152c4576152c3615865565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156152f4576152f3615865565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006153b0826156c9565b91506153bb836156c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153f0576153ef6157d8565b5b828201905092915050565b6000615406826156c9565b9150615411836156c9565b92508261542157615420615807565b5b828204905092915050565b6000808291508390505b600185111561547657808604811115615452576154516157d8565b5b60018516156154615780820291505b808102905061546f856158a5565b9450615436565b94509492505050565b600061548a826156c9565b9150615495836156c9565b92506154c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846154ca565b905092915050565b6000826154da5760019050615596565b816154e85760009050615596565b81600181146154fe576002811461550857615537565b6001915050615596565b60ff84111561551a576155196157d8565b5b8360020a915084821115615531576155306157d8565b5b50615596565b5060208310610133831016604e8410600b841016171561556c5782820a905083811115615567576155666157d8565b5b615596565b615579848484600161542c565b925090508184048111156155905761558f6157d8565b5b81810290505b9392505050565b60006155a8826156c9565b91506155b3836156c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156155ec576155eb6157d8565b5b828202905092915050565b6000615602826156c9565b915061560d836156c9565b9250828210156156205761561f6157d8565b5b828203905092915050565b6000615636826156d3565b9150615641836156d3565b925082821015615654576156536157d8565b5b828203905092915050565b600061566a826156a9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561570d5780820151818401526020810190506156f2565b8381111561571c576000848401525b50505050565b6000600282049050600182168061573a57607f821691505b6020821081141561574e5761574d615836565b5b50919050565b600061575f826156c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615792576157916157d8565b5b600182019050919050565b6000819050919050565b60006157b2826156c9565b91506157bd836156c9565b9250826157cd576157cc615807565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6158bb8161565f565b81146158c657600080fd5b50565b6158d281615671565b81146158dd57600080fd5b50565b6158e98161567d565b81146158f457600080fd5b50565b615900816156c9565b811461590b57600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220043616e9edb5415929844e388ac1063aa40fcdf2e972b897c081b34120c8082b64736f6c63430008000033697066733a2f2f516d5061384e775742326348584e77464c506266686351793950544633486d67446f726a52785041435869446a54
Deployed Bytecode
0x60806040526004361061021a5760003560e01c806355f804b31161012357806395d89b41116100ab578063e8a3d4851161006f578063e8a3d485146107ca578063e985e9c5146107f5578063f0503e8014610832578063f2fde38b1461086f578063f3f2032a146108985761021a565b806395d89b41146106e5578063a22cb46514610710578063b88d4fde14610739578063c87b56dd14610762578063d5abeb011461079f5761021a565b806364eed1c2116100f257806364eed1c2146106125780636c0360eb1461063b57806370a0823114610666578063715018a6146106a35780638da5cb5b146106ba5761021a565b806355f804b31461055657806357b9aee41461057f5780635c975abb146105aa5780636352211e146105d55761021a565b8063239c70ae116101a65780633ccfd60b116101755780633ccfd60b1461048057806342842e0e1461048a578063438b6300146104b357806344a0d68a146104f05780634f6ccce7146105195761021a565b8063239c70ae146103d357806323b872dd146103fe5780632b3d1bb8146104275780632f745c59146104435761021a565b8063088a4ed0116101ed578063088a4ed0146102ed578063095ea7b31461031657806313faede61461033f57806318160ddd1461036a5780632236c495146103955761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613ba7565b6108d5565b6040516102539190614f40565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190613b7e565b61094f565b005b34801561029157600080fd5b5061029a6109e8565b6040516102a79190614f5b565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190613c3a565b610a7a565b6040516102e49190614e80565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613c3a565b610aff565b005b34801561032257600080fd5b5061033d60048036038101906103389190613b42565b610b85565b005b34801561034b57600080fd5b50610354610c9d565b604051610361919061525d565b60405180910390f35b34801561037657600080fd5b5061037f610ca3565b60405161038c919061525d565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906139d7565b610cb0565b6040516103ca929190614f09565b60405180910390f35b3480156103df57600080fd5b506103e8610ebb565b6040516103f5919061525d565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190613a3c565b610ec1565b005b610441600480360381019061043c9190613b42565b610f21565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613b42565b611175565b604051610477919061525d565b60405180910390f35b61048861121a565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613a3c565b61130f565b005b3480156104bf57600080fd5b506104da60048036038101906104d591906139d7565b61132f565b6040516104e79190614ee7565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613c3a565b611429565b005b34801561052557600080fd5b50610540600480360381019061053b9190613c3a565b6114af565b60405161054d919061525d565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190613bf9565b611546565b005b34801561058b57600080fd5b506105946115dc565b6040516105a19190614f5b565b60405180910390f35b3480156105b657600080fd5b506105bf61166a565b6040516105cc9190614f40565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613c3a565b61167d565b6040516106099190614e80565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613bf9565b61172f565b005b34801561064757600080fd5b506106506117c5565b60405161065d9190614f5b565b60405180910390f35b34801561067257600080fd5b5061068d600480360381019061068891906139d7565b611853565b60405161069a919061525d565b60405180910390f35b3480156106af57600080fd5b506106b861190b565b005b3480156106c657600080fd5b506106cf611993565b6040516106dc9190614e80565b60405180910390f35b3480156106f157600080fd5b506106fa6119bd565b6040516107079190614f5b565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613b06565b611a4f565b005b34801561074557600080fd5b50610760600480360381019061075b9190613a8b565b611bd0565b005b34801561076e57600080fd5b5061078960048036038101906107849190613c3a565b611c32565b6040516107969190614f5b565b60405180910390f35b3480156107ab57600080fd5b506107b4611ca0565b6040516107c1919061525d565b60405180910390f35b3480156107d657600080fd5b506107df611ca6565b6040516107ec9190614f5b565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613a00565b611cce565b6040516108299190614f40565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613c3a565b611d62565b604051610866919061525d565b60405180910390f35b34801561087b57600080fd5b50610896600480360381019061089191906139d7565b611d7a565b005b3480156108a457600080fd5b506108bf60048036038101906108ba9190613c3a565b611e72565b6040516108cc9190614f5b565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610948575061094782611f19565b5b9050919050565b610957611ffb565b73ffffffffffffffffffffffffffffffffffffffff16610975611993565b73ffffffffffffffffffffffffffffffffffffffff16146109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c29061517d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109f790615722565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2390615722565b8015610a705780601f10610a4557610100808354040283529160200191610a70565b820191906000526020600020905b815481529060010190602001808311610a5357829003601f168201915b5050505050905090565b6000610a8582612003565b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb9061515d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b07611ffb565b73ffffffffffffffffffffffffffffffffffffffff16610b25611993565b73ffffffffffffffffffffffffffffffffffffffff1614610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b729061517d565b60405180910390fd5b80600f8190555050565b6000610b908261167d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf8906151fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c20611ffb565b73ffffffffffffffffffffffffffffffffffffffff161480610c4f5750610c4e81610c49611ffb565b611cce565b5b610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c85906150bd565b60405180910390fd5b610c98838361206f565b505050565b600d5481565b6000600880549050905090565b6060806000610cbe84611853565b905060008167ffffffffffffffff811115610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d305781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115610d75577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610da35781602001602082028036833780820191505090505b50905060005b83811015610eac57610dbb8782611175565b838281518110610df4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505060116000848381518110610e3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002054828281518110610e8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ea490615754565b915050610da9565b50818194509450505050915091565b600f5481565b610ed2610ecc611ffb565b82612128565b610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f089061521d565b60405180910390fd5b610f1c838383612206565b505050565b6000610f2b610ca3565b9050601060009054906101000a900460ff1615610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f74906151dd565b60405180910390fd5b60008211610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb79061505d565b60405180910390fd5b600f54821115611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc906150dd565b60405180910390fd5b600e54828261101491906153a5565b1115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90614f7d565b60405180910390fd5b61105d611993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e05781600d5461109d919061559d565b3410156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d69061509d565b60405180910390fd5b5b6000600190505b82811161116f57600081836110fc91906153a5565b90506111088582612462565b60014361111591906155f7565b4060001c8160405160200161112b929190614e54565b6040516020818303038152906040528051906020012060001c601160008381526020019081526020016000208190555050808061116790615754565b9150506110e7565b50505050565b600061118083611853565b82106111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890614f9d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611222611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611240611993565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d9061517d565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112bc90614e3f565b60006040518083038185875af1925050503d80600081146112f9576040519150601f19603f3d011682016040523d82523d6000602084013e6112fe565b606091505b505090508061130c57600080fd5b50565b61132a83838360405180602001604052806000815250611bd0565b505050565b6060600061133c83611853565b905060008167ffffffffffffffff811115611380577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113ae5781602001602082028036833780820191505090505b50905060005b8281101561141e576113c68582611175565b8282815181106113ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061141690615754565b9150506113b4565b508092505050919050565b611431611ffb565b73ffffffffffffffffffffffffffffffffffffffff1661144f611993565b73ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c9061517d565b60405180910390fd5b80600d8190555050565b60006114b9610ca3565b82106114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f19061523d565b60405180910390fd5b60088281548110611534577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61154e611ffb565b73ffffffffffffffffffffffffffffffffffffffff1661156c611993565b73ffffffffffffffffffffffffffffffffffffffff16146115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b99061517d565b60405180910390fd5b80600b90805190602001906115d89291906137fb565b5050565b600c80546115e990615722565b80601f016020809104026020016040519081016040528092919081815260200182805461161590615722565b80156116625780601f1061163757610100808354040283529160200191611662565b820191906000526020600020905b81548152906001019060200180831161164557829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d9061511d565b60405180910390fd5b80915050919050565b611737611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611755611993565b73ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a29061517d565b60405180910390fd5b80600c90805190602001906117c19291906137fb565b5050565b600b80546117d290615722565b80601f01602080910402602001604051908101604052809291908181526020018280546117fe90615722565b801561184b5780601f106118205761010080835404028352916020019161184b565b820191906000526020600020905b81548152906001019060200180831161182e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb906150fd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611913611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611931611993565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e9061517d565b60405180910390fd5b6119916000612480565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119cc90615722565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890615722565b8015611a455780601f10611a1a57610100808354040283529160200191611a45565b820191906000526020600020905b815481529060010190602001808311611a2857829003601f168201915b5050505050905090565b611a57611ffb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061503d565b60405180910390fd5b8060056000611ad2611ffb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7f611ffb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc49190614f40565b60405180910390a35050565b611be1611bdb611ffb565b83612128565b611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061521d565b60405180910390fd5b611c2c84848484612546565b50505050565b6060611c3d82612003565b611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906151bd565b60405180910390fd5b611c998260116000858152602001908152602001600020546125a2565b9050919050565b600e5481565b6060600b604051602001611cba9190614c03565b604051602081830303815290604052905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b611d82611ffb565b73ffffffffffffffffffffffffffffffffffffffff16611da0611993565b73ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded9061517d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614fdd565b60405180910390fd5b611e6f81612480565b50565b6060611e7d82612003565b611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb3906151bd565b60405180910390fd5b600c611eda60116000858152602001908152602001600020546129cf565b604051602001611eeb929190614bd4565b6040516020818303038152906040529050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fe457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ff45750611ff382612b7c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120e28361167d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061213382612003565b612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061507d565b60405180910390fd5b600061217d8361167d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121ec57508373ffffffffffffffffffffffffffffffffffffffff166121d484610a7a565b73ffffffffffffffffffffffffffffffffffffffff16145b806121fd57506121fc8185611cce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122268261167d565b73ffffffffffffffffffffffffffffffffffffffff161461227c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122739061519d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e39061501d565b60405180910390fd5b6122f7838383612be6565b61230260008261206f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235291906155f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123a991906153a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61247c828260405180602001604052806000815250612cfa565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612551848484612206565b61255d84848484612d55565b61259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390614fbd565b60405180910390fd5b50505050565b606060006125af836129cf565b905060006125c0826001600b612eec565b905060006125d183600b6015612eec565b905060006125e2846015601f612eec565b905060006125f385601f6029612eec565b905060006126048660296033612eec565b90506000612615876033603d612eec565b9050600061262688603d6047612eec565b90506000600b6126358c6129cf565b604051602001612646929190614c25565b60405160208183030381529060405290506000600b6126648d6129cf565b604051602001612675929190614c8c565b60405160208183030381529060405290506000600b6126938f6129cf565b6040516020016126a4929190614cd1565b604051602081830303815290604052905060006126c08f6129cf565b6040516020016126d09190614c6a565b604051602081830303815290604052905060006126ec8c61305a565b9050633b9aca008111156127165761270f60668261270a91906157a7565b6129cf565b9b5061273a565b61273760128261272691906157a7565b606661273291906153a5565b6129cf565b9b505b6127438b61305a565b9050633b9aca0081111561278e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509a506127c7565b6040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152509a505b6127d08a61305a565b90506127e76065826127e291906157a7565b6129cf565b99506127f28961305a565b90506401a13b860081111561283e576040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152509850612856565b61285360648261284e91906157a7565b6129cf565b98505b61285f8861305a565b90506128776127118261287291906157a7565b6129cf565b97506128828761305a565b90506401a13b86008111156128ce576040518060400160405280600381526020017f313030000000000000000000000000000000000000000000000000000000000081525096506128e6565b6128e36064826128de91906157a7565b6129cf565b96505b6128ef8661305a565b90506401a13b860081111561293b576040518060400160405280600181526020017f3400000000000000000000000000000000000000000000000000000000000000815250955061295f565b61295c60058261294b91906157a7565b600561295791906153a5565b6129cf565b95505b61299b828d8d8d8d8d8d8d8d8d8d6040516020016129879b9a99989796959493929190614d16565b604051602081830303815290604052613116565b6040516020016129ab9190614e1d565b6040516020818303038152906040529d505050505050505050505050505092915050565b60606000821415612a17576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b77565b600082905060005b60008214612a49578080612a3290615754565b915050600a82612a4291906153fb565b9150612a1f565b60008167ffffffffffffffff811115612a8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612abd5781602001600182028036833780820191505090505b5090505b60008514612b7057600182612ad691906155f7565b9150600a85612ae591906157a7565b6030612af191906153a5565b60f81b818381518110612b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b6991906153fb565b9450612ac1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bf1838383611f14565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3457612c2f816132b5565b612c73565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c7257612c7183826132fe565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb657612cb18161346b565b612cf5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cf457612cf382826135ae565b5b5b505050565b612d04838361362d565b612d116000848484612d55565b612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790614fbd565b60405180910390fd5b505050565b6000612d768473ffffffffffffffffffffffffffffffffffffffff16611f01565b15612edf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d9f611ffb565b8786866040518563ffffffff1660e01b8152600401612dc19493929190614e9b565b602060405180830381600087803b158015612ddb57600080fd5b505af1925050508015612e0c57506040513d601f19601f82011682018060405250810190612e099190613bd0565b60015b612e8f573d8060008114612e3c576040519150601f19603f3d011682016040523d82523d6000602084013e612e41565b606091505b50600081511415612e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7e90614fbd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ee4565b600190505b949350505050565b6060600084905060008484612f0191906155f7565b67ffffffffffffffff811115612f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612f725781602001600182028036833780820191505090505b50905060008590505b8481101561304d57828181518110612fbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b828783612fd491906155f7565b8151811061300b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061304590615754565b915050612f7b565b5080925050509392505050565b600080600090505b825181101561311057600181845161307a91906155f7565b61308491906155f7565b600a613090919061547f565b60308483815181106130cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c6130e3919061562b565b60ff166130f0919061559d565b826130fb91906153a5565b9150808061310890615754565b915050613062565b50919050565b6060600082511415613139576040518060200160405280600081525090506132b0565b600060405180606001604052806040815260200161590f604091399050600060036002855161316891906153a5565b61317291906153fb565b600461317e919061559d565b9050600060208261318f91906153a5565b67ffffffffffffffff8111156131ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132005781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561326f576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050613214565b6003895106600181146132895760028114613299576132a4565b613d3d60f01b60028303526132a4565b603d60f81b60018303525b50505050508093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161330b84611853565b61331591906155f7565b90506000600760008481526020019081526020016000205490508181146133fa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061347f91906155f7565b90506000600960008481526020019081526020016000205490506000600883815481106134d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061351d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613592577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135b983611853565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561369d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136949061513d565b60405180910390fd5b6136a681612003565b156136e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136dd90614ffd565b60405180910390fd5b6136f260008383612be6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461374291906153a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461380790615722565b90600052602060002090601f0160209004810192826138295760008555613870565b82601f1061384257805160ff1916838001178555613870565b82800160010185558215613870579182015b8281111561386f578251825591602001919060010190613854565b5b50905061387d9190613881565b5090565b5b8082111561389a576000816000905550600101613882565b5090565b60006138b16138ac846152a9565b615278565b9050828152602081018484840111156138c957600080fd5b6138d48482856156e0565b509392505050565b60006138ef6138ea846152d9565b615278565b90508281526020810184848401111561390757600080fd5b6139128482856156e0565b509392505050565b600081359050613929816158b2565b92915050565b60008135905061393e816158c9565b92915050565b600081359050613953816158e0565b92915050565b600081519050613968816158e0565b92915050565b600082601f83011261397f57600080fd5b813561398f84826020860161389e565b91505092915050565b600082601f8301126139a957600080fd5b81356139b98482602086016138dc565b91505092915050565b6000813590506139d1816158f7565b92915050565b6000602082840312156139e957600080fd5b60006139f78482850161391a565b91505092915050565b60008060408385031215613a1357600080fd5b6000613a218582860161391a565b9250506020613a328582860161391a565b9150509250929050565b600080600060608486031215613a5157600080fd5b6000613a5f8682870161391a565b9350506020613a708682870161391a565b9250506040613a81868287016139c2565b9150509250925092565b60008060008060808587031215613aa157600080fd5b6000613aaf8782880161391a565b9450506020613ac08782880161391a565b9350506040613ad1878288016139c2565b925050606085013567ffffffffffffffff811115613aee57600080fd5b613afa8782880161396e565b91505092959194509250565b60008060408385031215613b1957600080fd5b6000613b278582860161391a565b9250506020613b388582860161392f565b9150509250929050565b60008060408385031215613b5557600080fd5b6000613b638582860161391a565b9250506020613b74858286016139c2565b9150509250929050565b600060208284031215613b9057600080fd5b6000613b9e8482850161392f565b91505092915050565b600060208284031215613bb957600080fd5b6000613bc784828501613944565b91505092915050565b600060208284031215613be257600080fd5b6000613bf084828501613959565b91505092915050565b600060208284031215613c0b57600080fd5b600082013567ffffffffffffffff811115613c2557600080fd5b613c3184828501613998565b91505092915050565b600060208284031215613c4c57600080fd5b6000613c5a848285016139c2565b91505092915050565b6000613c6f8383614b9f565b60208301905092915050565b613c848161565f565b82525050565b6000613c958261532e565b613c9f818561535c565b9350613caa83615309565b8060005b83811015613cdb578151613cc28882613c63565b9750613ccd8361534f565b925050600181019050613cae565b5085935050505092915050565b613cf181615671565b82525050565b6000613d0282615339565b613d0c818561536d565b9350613d1c8185602086016156ef565b613d2581615894565b840191505092915050565b6000613d3b82615344565b613d458185615389565b9350613d558185602086016156ef565b613d5e81615894565b840191505092915050565b6000613d7482615344565b613d7e818561539a565b9350613d8e8185602086016156ef565b80840191505092915050565b60008154613da781615722565b613db1818661539a565b94506001821660008114613dcc5760018114613ddd57613e10565b60ff19831686528186019350613e10565b613de685615319565b60005b83811015613e0857815481890152600182019150602081019050613de9565b838801955050505b50505092915050565b6000613e2660108361539a565b91507f2265787465726e616c5f75726c223a22000000000000000000000000000000006000830152601082019050919050565b6000613e66601783615389565b91507f4d6178204e465420737570706c792065786365656465640000000000000000006000830152602082019050919050565b6000613ea6602b83615389565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613f0c603283615389565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613f72602683615389565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fd860028361539a565b91507f222c0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061401860048361539a565b91507f2f3f733d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614058601c83615389565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061409860118361539a565b91507f226e616d65223a224e7564656d656e20230000000000000000000000000000006000830152601182019050919050565b60006140d860058361539a565b91507f2f696d672f0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000614118600e8361539a565b91507f2f6d657461646174612e6a736f6e0000000000000000000000000000000000006000830152600e82019050919050565b6000614158602483615389565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141be601983615389565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006141fe60118361539a565b91507f22616e696d6174696f6e5f75726c223a220000000000000000000000000000006000830152601182019050919050565b600061423e601b83615389565b91507f4174206c656173742031204e465420746f206265206d696e74656400000000006000830152602082019050919050565b600061427e602c83615389565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006142e4601e8361539a565b91507f227d2c7b2274726169745f74797065223a224c222c2276616c7565223a2200006000830152601e82019050919050565b6000614324601e8361539a565b91507f227d2c7b2274726169745f74797065223a2253222c2276616c7565223a2200006000830152601e82019050919050565b6000614364601283615389565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006143a4603883615389565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061440a601883615389565b91507f4d6178206d696e742070657220545820657863656564656400000000000000006000830152602082019050919050565b600061444a601e8361539a565b91507f227d2c7b2274726169745f74797065223a2255222c2276616c7565223a2200006000830152601e82019050919050565b600061448a602a83615389565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006144f0602983615389565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061455660048361539a565b91507f227d5d2c000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614596601e8361539a565b91507f227d2c7b2274726169745f74797065223a2244222c2276616c7565223a2200006000830152601e82019050919050565b60006145d660098361539a565b91507f22696d616765223a2200000000000000000000000000000000000000000000006000830152600982019050919050565b6000614616601e8361539a565b91507f227d2c7b2274726169745f74797065223a2254222c2276616c7565223a2200006000830152601e82019050919050565b6000614656602083615389565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061469660018361539a565b91507f7d000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006146d6602c83615389565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061473c602083615389565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061477c601e8361539a565b91507f227d2c7b2274726169745f74797065223a2250222c2276616c7565223a2200006000830152601e82019050919050565b60006147bc602983615389565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614822602f83615389565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061488860058361539a565b91507f2e706e67220000000000000000000000000000000000000000000000000000006000830152600582019050919050565b60006148c860018361539a565b91507f7b000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614908600e83615389565b91507f4d696e74696e67205061757365640000000000000000000000000000000000006000830152602082019050919050565b6000614948602183615389565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149ae601d8361539a565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b60006149ee60008361537e565b9150600082019050919050565b6000614a08603183615389565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614a6e602c83615389565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614ad4609d8361539a565b91507f222c226465736372697074696f6e223a22546865204e7564656d654e4654206960008301527f73206120636f6c6c656374696f6e206f6620392c39393920756e69717565206960208301527f6e7465726163746976652061727473206c6976696e67206f6e2074686520457460408301527f68657265756d20626c6f636b636861696e2e222c22617474726962757465732260608301527f3a5b7b2274726169745f74797065223a2241222c2276616c7565223a220000006080830152609d82019050919050565b614ba8816156c9565b82525050565b614bb7816156c9565b82525050565b614bce614bc9826156c9565b61579d565b82525050565b6000614be08285613d9a565b9150614beb8261400b565b9150614bf78284613d69565b91508190509392505050565b6000614c0f8284613d9a565b9150614c1a8261410b565b915081905092915050565b6000614c3082613e19565b9150614c3c8285613d9a565b9150614c478261400b565b9150614c538284613d69565b9150614c5e82613fcb565b91508190509392505050565b6000614c758261408b565b9150614c818284613d69565b915081905092915050565b6000614c97826141f1565b9150614ca38285613d9a565b9150614cae8261400b565b9150614cba8284613d69565b9150614cc582613fcb565b91508190509392505050565b6000614cdc826145c9565b9150614ce88285613d9a565b9150614cf3826140cb565b9150614cff8284613d69565b9150614d0a8261487b565b91508190509392505050565b6000614d21826148bb565b9150614d2d828e613d69565b9150614d3882614ac7565b9150614d44828d613d69565b9150614d4f82614589565b9150614d5b828c613d69565b9150614d668261443d565b9150614d72828b613d69565b9150614d7d826142d7565b9150614d89828a613d69565b9150614d9482614609565b9150614da08289613d69565b9150614dab82614317565b9150614db78288613d69565b9150614dc28261476f565b9150614dce8287613d69565b9150614dd982614549565b9150614de58286613d69565b9150614df18285613d69565b9150614dfd8284613d69565b9150614e0882614689565b91508190509c9b505050505050505050505050565b6000614e28826149a1565b9150614e348284613d69565b915081905092915050565b6000614e4a826149e1565b9150819050919050565b6000614e608285614bbd565b602082019150614e708284614bbd565b6020820191508190509392505050565b6000602082019050614e956000830184613c7b565b92915050565b6000608082019050614eb06000830187613c7b565b614ebd6020830186613c7b565b614eca6040830185614bae565b8181036060830152614edc8184613cf7565b905095945050505050565b60006020820190508181036000830152614f018184613c8a565b905092915050565b60006040820190508181036000830152614f238185613c8a565b90508181036020830152614f378184613c8a565b90509392505050565b6000602082019050614f556000830184613ce8565b92915050565b60006020820190508181036000830152614f758184613d30565b905092915050565b60006020820190508181036000830152614f9681613e59565b9050919050565b60006020820190508181036000830152614fb681613e99565b9050919050565b60006020820190508181036000830152614fd681613eff565b9050919050565b60006020820190508181036000830152614ff681613f65565b9050919050565b600060208201905081810360008301526150168161404b565b9050919050565b600060208201905081810360008301526150368161414b565b9050919050565b60006020820190508181036000830152615056816141b1565b9050919050565b6000602082019050818103600083015261507681614231565b9050919050565b6000602082019050818103600083015261509681614271565b9050919050565b600060208201905081810360008301526150b681614357565b9050919050565b600060208201905081810360008301526150d681614397565b9050919050565b600060208201905081810360008301526150f6816143fd565b9050919050565b600060208201905081810360008301526151168161447d565b9050919050565b60006020820190508181036000830152615136816144e3565b9050919050565b6000602082019050818103600083015261515681614649565b9050919050565b60006020820190508181036000830152615176816146c9565b9050919050565b600060208201905081810360008301526151968161472f565b9050919050565b600060208201905081810360008301526151b6816147af565b9050919050565b600060208201905081810360008301526151d681614815565b9050919050565b600060208201905081810360008301526151f6816148fb565b9050919050565b600060208201905081810360008301526152168161493b565b9050919050565b60006020820190508181036000830152615236816149fb565b9050919050565b6000602082019050818103600083015261525681614a61565b9050919050565b60006020820190506152726000830184614bae565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561529f5761529e615865565b5b8060405250919050565b600067ffffffffffffffff8211156152c4576152c3615865565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156152f4576152f3615865565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006153b0826156c9565b91506153bb836156c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153f0576153ef6157d8565b5b828201905092915050565b6000615406826156c9565b9150615411836156c9565b92508261542157615420615807565b5b828204905092915050565b6000808291508390505b600185111561547657808604811115615452576154516157d8565b5b60018516156154615780820291505b808102905061546f856158a5565b9450615436565b94509492505050565b600061548a826156c9565b9150615495836156c9565b92506154c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846154ca565b905092915050565b6000826154da5760019050615596565b816154e85760009050615596565b81600181146154fe576002811461550857615537565b6001915050615596565b60ff84111561551a576155196157d8565b5b8360020a915084821115615531576155306157d8565b5b50615596565b5060208310610133831016604e8410600b841016171561556c5782820a905083811115615567576155666157d8565b5b615596565b615579848484600161542c565b925090508184048111156155905761558f6157d8565b5b81810290505b9392505050565b60006155a8826156c9565b91506155b3836156c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156155ec576155eb6157d8565b5b828202905092915050565b6000615602826156c9565b915061560d836156c9565b9250828210156156205761561f6157d8565b5b828203905092915050565b6000615636826156d3565b9150615641836156d3565b925082821015615654576156536157d8565b5b828203905092915050565b600061566a826156a9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561570d5780820151818401526020810190506156f2565b8381111561571c576000848401525b50505050565b6000600282049050600182168061573a57607f821691505b6020821081141561574e5761574d615836565b5b50919050565b600061575f826156c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615792576157916157d8565b5b600182019050919050565b6000819050919050565b60006157b2826156c9565b91506157bd836156c9565b9250826157cd576157cc615807565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6158bb8161565f565b81146158c657600080fd5b50565b6158d281615671565b81146158dd57600080fd5b50565b6158e98161567d565b81146158f457600080fd5b50565b615900816156c9565b811461590b57600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220043616e9edb5415929844e388ac1063aa40fcdf2e972b897c081b34120c8082b64736f6c63430008000033
Deployed Bytecode Sourcemap
43812:6897:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32892:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47020:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20364:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21923:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46676:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21446:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44032:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33532:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45381:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44105:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22813:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44307:708;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33200:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47099:158;;;:::i;:::-;;23223:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45025:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46588:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33722:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46800:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43945:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44143:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20058:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46904:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43895:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19788:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11249:94;;;;;;;;;;;;;:::i;:::-;;10598:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20533:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22216:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23479:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45999:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44069:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45859:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22582:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44174:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11498:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46290:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32892:224;32994:4;33033:35;33018:50;;;:11;:50;;;;:90;;;;33072:36;33096:11;33072:23;:36::i;:::-;33018:90;33011:97;;32892:224;;;:::o;47020:73::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47081:6:::1;47072;;:15;;;;;;;;;;;;;;;;;;47020:73:::0;:::o;20364:100::-;20418:13;20451:5;20444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20364:100;:::o;21923:221::-;21999:7;22027:16;22035:7;22027;:16::i;:::-;22019:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22112:15;:24;22128:7;22112:24;;;;;;;;;;;;;;;;;;;;;22105:31;;21923:221;;;:::o;46676:118::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46771:17:::1;46755:13;:33;;;;46676:118:::0;:::o;21446:411::-;21527:13;21543:23;21558:7;21543:14;:23::i;:::-;21527:39;;21591:5;21585:11;;:2;:11;;;;21577:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21685:5;21669:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21694:37;21711:5;21718:12;:10;:12::i;:::-;21694:16;:37::i;:::-;21669:62;21647:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;21828:21;21837:2;21841:7;21828:8;:21::i;:::-;21446:411;;;:::o;44032:32::-;;;;:::o;33532:113::-;33593:7;33620:10;:17;;;;33613:24;;33532:113;:::o;45381:470::-;45463:16;45481;45509:23;45535:17;45545:6;45535:9;:17::i;:::-;45509:43;;45559:25;45601:15;45587:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45559:58;;45624:18;45659:15;45645:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45624:51;;45687:9;45682:137;45702:15;45698:1;:19;45682:137;;;45747:30;45767:6;45775:1;45747:19;:30::i;:::-;45733:8;45742:1;45733:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45793:5;:18;45799:8;45808:1;45799:11;;;;;;;;;;;;;;;;;;;;;;45793:18;;;;;;;;;;;;45786:1;45788;45786:4;;;;;;;;;;;;;;;;;;;;;:25;;;;;45719:3;;;;;:::i;:::-;;;;45682:137;;;;45833:8;45843:1;45825:20;;;;;;;45381:470;;;:::o;44105:33::-;;;;:::o;22813:339::-;23008:41;23027:12;:10;:12::i;:::-;23041:7;23008:18;:41::i;:::-;23000:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23116:28;23126:4;23132:2;23136:7;23116:9;:28::i;:::-;22813:339;;;:::o;44307:708::-;44384:14;44401:13;:11;:13::i;:::-;44384:30;;44430:6;;;;;;;;;;;44429:7;44421:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;44483:1;44469:11;:15;44461:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44546:13;;44531:11;:28;;44523:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44626:9;;44611:11;44602:6;:20;;;;:::i;:::-;:33;;44594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44689:7;:5;:7::i;:::-;44675:21;;:10;:21;;;44671:109;;44739:11;44732:4;;:18;;;;:::i;:::-;44719:9;:31;;44711:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44671:109;44793:9;44805:1;44793:13;;44788:222;44813:11;44808:1;:16;44788:222;;44840:11;44863:1;44854:6;:10;;;;:::i;:::-;44840:24;;44873:19;44883:3;44888;44873:9;:19::i;:::-;44990:1;44975:12;:16;;;;:::i;:::-;44965:27;44949:45;;44996:3;44932:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44922:79;;;;;;44914:88;;44901:5;:10;44907:3;44901:10;;;;;;;;;;;:101;;;;44788:222;44826:3;;;;;:::i;:::-;;;;44788:222;;;;44307:708;;;:::o;33200:256::-;33297:7;33333:23;33350:5;33333:16;:23::i;:::-;33325:5;:31;33317:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33422:12;:19;33435:5;33422:19;;;;;;;;;;;;;;;:26;33442:5;33422:26;;;;;;;;;;;;33415:33;;33200:256;;;;:::o;47099:158::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47152:12:::1;47178:10;47170:24;;47202:21;47170:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47151:77;;;47243:7;47235:16;;;::::0;::::1;;10889:1;47099:158::o:0;23223:185::-;23361:39;23378:4;23384:2;23388:7;23361:39;;;;;;;;;;;;:16;:39::i;:::-;23223:185;;;:::o;45025:348::-;45100:16;45128:23;45154:17;45164:6;45154:9;:17::i;:::-;45128:43;;45178:25;45220:15;45206:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45178:58;;45248:9;45243:103;45263:15;45259:1;:19;45243:103;;;45308:30;45328:6;45336:1;45308:19;:30::i;:::-;45294:8;45303:1;45294:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45280:3;;;;;:::i;:::-;;;;45243:103;;;;45359:8;45352:15;;;;45025:348;;;:::o;46588:82::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46656:8:::1;46649:4;:15;;;;46588:82:::0;:::o;33722:233::-;33797:7;33833:30;:28;:30::i;:::-;33825:5;:38;33817:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33930:10;33941:5;33930:17;;;;;;;;;;;;;;;;;;;;;;;;33923:24;;33722:233;;;:::o;46800:98::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46881:11:::1;46871:7;:21;;;;;;;;;;;;:::i;:::-;;46800:98:::0;:::o;43945:82::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44143:26::-;;;;;;;;;;;;;:::o;20058:239::-;20130:7;20150:13;20166:7;:16;20174:7;20166:16;;;;;;;;;;;;;;;;;;;;;20150:32;;20218:1;20201:19;;:5;:19;;;;20193:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20284:5;20277:12;;;20058:239;;;:::o;46904:110::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46994:14:::1;46981:10;:27;;;;;;;;;;;;:::i;:::-;;46904:110:::0;:::o;43895:45::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19788:208::-;19860:7;19905:1;19888:19;;:5;:19;;;;19880:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19972:9;:16;19982:5;19972:16;;;;;;;;;;;;;;;;19965:23;;19788:208;;;:::o;11249:94::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11314:21:::1;11332:1;11314:9;:21::i;:::-;11249:94::o:0;10598:87::-;10644:7;10671:6;;;;;;;;;;;10664:13;;10598:87;:::o;20533:104::-;20589:13;20622:7;20615:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20533:104;:::o;22216:295::-;22331:12;:10;:12::i;:::-;22319:24;;:8;:24;;;;22311:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22431:8;22386:18;:32;22405:12;:10;:12::i;:::-;22386:32;;;;;;;;;;;;;;;:42;22419:8;22386:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22484:8;22455:48;;22470:12;:10;:12::i;:::-;22455:48;;;22494:8;22455:48;;;;;;:::i;:::-;;;;;;;;22216:295;;:::o;23479:328::-;23654:41;23673:12;:10;:12::i;:::-;23687:7;23654:18;:41::i;:::-;23646:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23760:39;23774:4;23780:2;23784:7;23793:5;23760:13;:39::i;:::-;23479:328;;;;:::o;45999:283::-;46097:13;46138:16;46146:7;46138;:16::i;:::-;46122:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46235:38;46250:7;46258:5;:14;46264:7;46258:14;;;;;;;;;;;;46235;:38::i;:::-;46228:46;;45999:283;;;:::o;44069:31::-;;;;:::o;45859:134::-;45903:13;45960:7;45943:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;45929:58;;45859:134;:::o;22582:164::-;22679:4;22703:18;:25;22722:5;22703:25;;;;;;;;;;;;;;;:35;22729:8;22703:35;;;;;;;;;;;;;;;;;;;;;;;;;22696:42;;22582:164;;;;:::o;44174:40::-;;;;;;;;;;;;;;;;;:::o;11498:192::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11607:1:::1;11587:22;;:8;:22;;;;11579:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11663:19;11673:8;11663:9;:19::i;:::-;11498:192:::0;:::o;46290:289::-;46364:13;46405:16;46413:7;46405;:16::i;:::-;46389:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46526:10;46544:25;:5;:14;46550:7;46544:14;;;;;;;;;;;;:23;:25::i;:::-;46509:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46495:76;;46290:289;;;:::o;2864:387::-;2924:4;3132:12;3199:7;3187:20;3179:28;;3242:1;3235:4;:8;3228:15;;;2864:387;;;:::o;31409:126::-;;;;:::o;19419:305::-;19521:4;19573:25;19558:40;;;:11;:40;;;;:105;;;;19630:33;19615:48;;;:11;:48;;;;19558:105;:158;;;;19680:36;19704:11;19680:23;:36::i;:::-;19558:158;19538:178;;19419:305;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;25317:127::-;25382:4;25434:1;25406:30;;:7;:16;25414:7;25406:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25399:37;;25317:127;;;:::o;29299:174::-;29401:2;29374:15;:24;29390:7;29374:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29457:7;29453:2;29419:46;;29428:23;29443:7;29428:14;:23::i;:::-;29419:46;;;;;;;;;;;;29299:174;;:::o;25611:348::-;25704:4;25729:16;25737:7;25729;:16::i;:::-;25721:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25805:13;25821:23;25836:7;25821:14;:23::i;:::-;25805:39;;25874:5;25863:16;;:7;:16;;;:51;;;;25907:7;25883:31;;:20;25895:7;25883:11;:20::i;:::-;:31;;;25863:51;:87;;;;25918:32;25935:5;25942:7;25918:16;:32::i;:::-;25863:87;25855:96;;;25611:348;;;;:::o;28603:578::-;28762:4;28735:31;;:23;28750:7;28735:14;:23::i;:::-;:31;;;28727:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28845:1;28831:16;;:2;:16;;;;28823:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28901:39;28922:4;28928:2;28932:7;28901:20;:39::i;:::-;29005:29;29022:1;29026:7;29005:8;:29::i;:::-;29066:1;29047:9;:15;29057:4;29047:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29095:1;29078:9;:13;29088:2;29078:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29126:2;29107:7;:16;29115:7;29107:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29165:7;29161:2;29146:27;;29155:4;29146:27;;;;;;;;;;;;28603:578;;;:::o;26301:110::-;26377:26;26387:2;26391:7;26377:26;;;;;;;;;;;;:9;:26::i;:::-;26301:110;;:::o;11698:173::-;11754:16;11773:6;;;;;;;;;;;11754:25;;11799:8;11790:6;;:17;;;;;;;;;;;;;;;;;;11854:8;11823:40;;11844:8;11823:40;;;;;;;;;;;;11698:173;;:::o;24689:315::-;24846:28;24856:4;24862:2;24866:7;24846:9;:28::i;:::-;24893:48;24916:4;24922:2;24926:7;24935:5;24893:22;:48::i;:::-;24885:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24689:315;;;;:::o;47875:2831::-;47948:13;47974:21;47998:15;:4;:13;:15::i;:::-;47974:39;;48024:19;48046:23;48056:7;48064:1;48066:2;48046:9;:23::i;:::-;48024:45;;48080:19;48102:24;48112:7;48120:2;48123;48102:9;:24::i;:::-;48080:46;;48137:19;48159:24;48169:7;48177:2;48180;48159:9;:24::i;:::-;48137:46;;48194:19;48216:24;48226:7;48234:2;48237;48216:9;:24::i;:::-;48194:46;;48251:19;48273:24;48283:7;48291:2;48294;48273:9;:24::i;:::-;48251:46;;48308:19;48330:24;48340:7;48348:2;48351;48330:9;:24::i;:::-;48308:46;;48365:19;48387:24;48397:7;48405:2;48408;48387:9;:24::i;:::-;48365:46;;48422:20;48488:7;48503:15;:4;:13;:15::i;:::-;48452:72;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48422:103;;48536:20;48603:7;48618:15;:4;:13;:15::i;:::-;48566:73;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48536:104;;48651:20;48710:7;48726:14;:3;:12;:14::i;:::-;48681:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48651:99;;48761:18;48825:14;:3;:12;:14::i;:::-;48788:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;48761:80;;48854:11;48892:16;48902:5;48892:9;:16::i;:::-;48886:22;;48927:10;48923:3;:14;48919:93;;;48946:20;48951:3;48947;:7;;;;:::i;:::-;48946:18;:20::i;:::-;48939:27;;48919:93;;;48989:23;48998:2;48994:3;:6;;;;:::i;:::-;48990:3;:10;;;;:::i;:::-;48989:21;:23::i;:::-;48982:30;;48919:93;49039:16;49049:5;49039:9;:16::i;:::-;49033:22;;49074:10;49070:3;:14;49066:54;;;49086:9;;;;;;;;;;;;;;;;;;;49066:54;;;49111:9;;;;;;;;;;;;;;;;;;;49066:54;49147:16;49157:5;49147:9;:16::i;:::-;49141:22;;49181:20;49186:3;49182;:7;;;;:::i;:::-;49181:18;:20::i;:::-;49174:27;;49228:16;49238:5;49228:9;:16::i;:::-;49222:22;;49263:10;49259:3;:14;49255:75;;;49275:12;;;;;;;;;;;;;;;;;;;49255:75;;;49310:20;49315:3;49311;:7;;;;:::i;:::-;49310:18;:20::i;:::-;49303:27;;49255:75;49358:16;49368:5;49358:9;:16::i;:::-;49352:22;;49392;49397:5;49393:3;:9;;;;:::i;:::-;49392:20;:22::i;:::-;49385:29;;49433:16;49443:5;49433:9;:16::i;:::-;49427:22;;49468:10;49464:3;:14;49460:75;;;49480:12;;;;;;;;;;;;;;;;;;;49460:75;;;49515:20;49520:3;49516;:7;;;;:::i;:::-;49515:18;:20::i;:::-;49508:27;;49460:75;49562:16;49572:5;49562:9;:16::i;:::-;49556:22;;49597:10;49593:3;:14;49589:73;;;49609:10;;;;;;;;;;;;;;;;;;;49589:73;;;49642:20;49649:1;49645:3;:5;;;;:::i;:::-;49643:1;:7;;;;:::i;:::-;49642:18;:20::i;:::-;49635:27;;49589:73;49810:854;49937:4;50132:5;50201;50270;50339;50408;50477;50546;50559:6;50566;50573;49886:728;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49810:13;:854::i;:::-;49717:966;;;;;;;;:::i;:::-;;;;;;;;;;;;;49685:1013;;;;;;;;;;;;;;;47875:2831;;;;:::o;495:723::-;551:13;781:1;772:5;:10;768:53;;;799:10;;;;;;;;;;;;;;;;;;;;;768:53;831:12;846:5;831:20;;862:14;887:78;902:1;894:4;:9;887:78;;920:8;;;;;:::i;:::-;;;;951:2;943:10;;;;;:::i;:::-;;;887:78;;;975:19;1007:6;997:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:39;;1025:154;1041:1;1032:5;:10;1025:154;;1069:1;1059:11;;;;;:::i;:::-;;;1136:2;1128:5;:10;;;;:::i;:::-;1115:2;:24;;;;:::i;:::-;1102:39;;1085:6;1092;1085:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1165:2;1156:11;;;;;:::i;:::-;;;1025:154;;;1203:6;1189:21;;;;;495:723;;;;:::o;12452:157::-;12537:4;12576:25;12561:40;;;:11;:40;;;;12554:47;;12452:157;;;:::o;34568:589::-;34712:45;34739:4;34745:2;34749:7;34712:26;:45::i;:::-;34790:1;34774:18;;:4;:18;;;34770:187;;;34809:40;34841:7;34809:31;:40::i;:::-;34770:187;;;34879:2;34871:10;;:4;:10;;;34867:90;;34898:47;34931:4;34937:7;34898:32;:47::i;:::-;34867:90;34770:187;34985:1;34971:16;;:2;:16;;;34967:183;;;35004:45;35041:7;35004:36;:45::i;:::-;34967:183;;;35077:4;35071:10;;:2;:10;;;35067:83;;35098:40;35126:2;35130:7;35098:27;:40::i;:::-;35067:83;34967:183;34568:589;;;:::o;26638:321::-;26768:18;26774:2;26778:7;26768:5;:18::i;:::-;26819:54;26850:1;26854:2;26858:7;26867:5;26819:22;:54::i;:::-;26797:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26638:321;;;:::o;30038:799::-;30193:4;30214:15;:2;:13;;;:15::i;:::-;30210:620;;;30266:2;30250:36;;;30287:12;:10;:12::i;:::-;30301:4;30307:7;30316:5;30250:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30246:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30509:1;30492:6;:13;:18;30488:272;;;30535:60;;;;;;;;;;:::i;:::-;;;;;;;;30488:272;30710:6;30704:13;30695:6;30691:2;30687:15;30680:38;30246:529;30383:41;;;30373:51;;;:6;:51;;;;30366:58;;;;;30210:620;30814:4;30807:11;;30038:799;;;;;;;:::o;47265:344::-;47357:13;47379:21;47409:3;47379:34;;47420:19;47461:10;47452:8;:19;;;;:::i;:::-;47442:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47420:52;;47483:6;47492:10;47483:19;;47479:97;47508:8;47504:1;:12;47479:97;;;47557:8;47566:1;47557:11;;;;;;;;;;;;;;;;;;;;;;;;47534:6;47543:10;47541:1;:12;;;;:::i;:::-;47534:20;;;;;;;;;;;;;;;;;;;:34;;;;;;;;;;;47518:3;;;;;:::i;:::-;;;;47479:97;;;;47596:6;47582:21;;;;47265:344;;;;;:::o;47625:242::-;47685:11;47710:9;47722:1;47710:13;;47705:138;47735:4;47729:18;47725:1;:22;47705:138;;;47833:1;47829;47814:4;47808:18;:22;;;;:::i;:::-;:26;;;;:::i;:::-;47803:2;:32;;;;:::i;:::-;47797:2;47785:4;47791:1;47779:14;;;;;;;;;;;;;;;;;;;;;;;;47773:21;;:26;;;;:::i;:::-;47772:63;;;;;;:::i;:::-;47765:70;;;;;:::i;:::-;;;47749:3;;;;;:::i;:::-;;;;47705:138;;;;47625:242;;;:::o;39646:1912::-;39704:13;39749:1;39734:4;:11;:16;39730:31;;;39752:9;;;;;;;;;;;;;;;;39730:31;39813:19;39835:12;;;;;;;;;;;;;;;;;39813:34;;39899:18;39945:1;39940;39926:4;:11;:15;;;;:::i;:::-;39925:21;;;;:::i;:::-;39920:1;:27;;;;:::i;:::-;39899:48;;40030:20;40077:2;40064:10;:15;;;;:::i;:::-;40053:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40030:50;;40177:10;40169:6;40162:26;40272:1;40265:5;40261:13;40331:4;40382;40376:11;40367:7;40363:25;40478:2;40470:6;40466:15;40551:754;40570:6;40561:7;40558:19;40551:754;;;40670:1;40661:7;40657:15;40646:26;;40709:7;40703:14;40835:4;40827:5;40823:2;40819:14;40815:25;40805:8;40801:40;40795:47;40784:9;40776:67;40889:1;40878:9;40874:17;40861:30;;40968:4;40960:5;40956:2;40952:14;40948:25;40938:8;40934:40;40928:47;40917:9;40909:67;41022:1;41011:9;41007:17;40994:30;;41101:4;41093:5;41090:1;41085:14;41081:25;41071:8;41067:40;41061:47;41050:9;41042:67;41155:1;41144:9;41140:17;41127:30;;41234:4;41226:5;41214:25;41204:8;41200:40;41194:47;41183:9;41175:67;41288:1;41277:9;41273:17;41260:30;;40594:711;40551:754;;;41378:1;41371:4;41365:11;41361:19;41399:1;41394:54;;;;41467:1;41462:52;;;;41354:160;;41394:54;41438:6;41433:3;41429:16;41425:1;41414:9;41410:17;41403:43;41394:54;;41462:52;41506:4;41501:3;41497:14;41493:1;41482:9;41478:17;41471:41;41354:160;;40102:1423;;;;41544:6;41537:13;;;;;39646:1912;;;;:::o;35880:164::-;35984:10;:17;;;;35957:15;:24;35973:7;35957:24;;;;;;;;;;;:44;;;;36012:10;36028:7;36012:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35880:164;:::o;36671:988::-;36937:22;36987:1;36962:22;36979:4;36962:16;:22::i;:::-;:26;;;;:::i;:::-;36937:51;;36999:18;37020:17;:26;37038:7;37020:26;;;;;;;;;;;;36999:47;;37167:14;37153:10;:28;37149:328;;37198:19;37220:12;:18;37233:4;37220:18;;;;;;;;;;;;;;;:34;37239:14;37220:34;;;;;;;;;;;;37198:56;;37304:11;37271:12;:18;37284:4;37271:18;;;;;;;;;;;;;;;:30;37290:10;37271:30;;;;;;;;;;;:44;;;;37421:10;37388:17;:30;37406:11;37388:30;;;;;;;;;;;:43;;;;37149:328;;37573:17;:26;37591:7;37573:26;;;;;;;;;;;37566:33;;;37617:12;:18;37630:4;37617:18;;;;;;;;;;;;;;;:34;37636:14;37617:34;;;;;;;;;;;37610:41;;;36671:988;;;;:::o;37954:1079::-;38207:22;38252:1;38232:10;:17;;;;:21;;;;:::i;:::-;38207:46;;38264:18;38285:15;:24;38301:7;38285:24;;;;;;;;;;;;38264:45;;38636:19;38658:10;38669:14;38658:26;;;;;;;;;;;;;;;;;;;;;;;;38636:48;;38722:11;38697:10;38708;38697:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;38833:10;38802:15;:28;38818:11;38802:28;;;;;;;;;;;:41;;;;38974:15;:24;38990:7;38974:24;;;;;;;;;;;38967:31;;;39009:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37954:1079;;;;:::o;35458:221::-;35543:14;35560:20;35577:2;35560:16;:20::i;:::-;35543:37;;35618:7;35591:12;:16;35604:2;35591:16;;;;;;;;;;;;;;;:24;35608:6;35591:24;;;;;;;;;;;:34;;;;35665:6;35636:17;:26;35654:7;35636:26;;;;;;;;;;;:35;;;;35458:221;;;:::o;27295:382::-;27389:1;27375:16;;:2;:16;;;;27367:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27448:16;27456:7;27448;:16::i;:::-;27447:17;27439:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27510:45;27539:1;27543:2;27547:7;27510:20;:45::i;:::-;27585:1;27568:9;:13;27578:2;27568:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27616:2;27597:7;:16;27605:7;27597:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27661:7;27657:2;27636:33;;27653:1;27636:33;;;;;;;;;;;;27295:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8681:845::-;;8821:5;8815:12;8850:36;8876:9;8850:36;:::i;:::-;8902:89;8984:6;8979:3;8902:89;:::i;:::-;8895:96;;9022:1;9011:9;9007:17;9038:1;9033:137;;;;9184:1;9179:341;;;;9000:520;;9033:137;9117:4;9113:9;9102;9098:25;9093:3;9086:38;9153:6;9148:3;9144:16;9137:23;;9033:137;;9179:341;9246:38;9278:5;9246:38;:::i;:::-;9306:1;9320:154;9334:6;9331:1;9328:13;9320:154;;;9408:7;9402:14;9398:1;9393:3;9389:11;9382:35;9458:1;9449:7;9445:15;9434:26;;9356:4;9353:1;9349:12;9344:17;;9320:154;;;9503:6;9498:3;9494:16;9487:23;;9186:334;;9000:520;;8788:738;;;;;;:::o;9532:398::-;;9713:85;9795:2;9790:3;9713:85;:::i;:::-;9706:92;;9828:66;9824:1;9819:3;9815:11;9808:87;9921:2;9916:3;9912:12;9905:19;;9696:234;;;:::o;9936:321::-;;10099:67;10163:2;10158:3;10099:67;:::i;:::-;10092:74;;10196:25;10192:1;10187:3;10183:11;10176:46;10248:2;10243:3;10239:12;10232:19;;10082:175;;;:::o;10263:375::-;;10426:67;10490:2;10485:3;10426:67;:::i;:::-;10419:74;;10523:34;10519:1;10514:3;10510:11;10503:55;10589:13;10584:2;10579:3;10575:12;10568:35;10629:2;10624:3;10620:12;10613:19;;10409:229;;;:::o;10644:382::-;;10807:67;10871:2;10866:3;10807:67;:::i;:::-;10800:74;;10904:34;10900:1;10895:3;10891:11;10884:55;10970:20;10965:2;10960:3;10956:12;10949:42;11017:2;11012:3;11008:12;11001:19;;10790:236;;;:::o;11032:370::-;;11195:67;11259:2;11254:3;11195:67;:::i;:::-;11188:74;;11292:34;11288:1;11283:3;11279:11;11272:55;11358:8;11353:2;11348:3;11344:12;11337:30;11393:2;11388:3;11384:12;11377:19;;11178:224;;;:::o;11408:396::-;;11589:84;11671:1;11666:3;11589:84;:::i;:::-;11582:91;;11703:66;11699:1;11694:3;11690:11;11683:87;11796:1;11791:3;11787:11;11780:18;;11572:232;;;:::o;11810:336::-;;11991:84;12073:1;12068:3;11991:84;:::i;:::-;11984:91;;12105:6;12101:1;12096:3;12092:11;12085:27;12138:1;12133:3;12129:11;12122:18;;11974:172;;;:::o;12152:326::-;;12315:67;12379:2;12374:3;12315:67;:::i;:::-;12308:74;;12412:30;12408:1;12403:3;12399:11;12392:51;12469:2;12464:3;12460:12;12453:19;;12298:180;;;:::o;12484:398::-;;12665:85;12747:2;12742:3;12665:85;:::i;:::-;12658:92;;12780:66;12776:1;12771:3;12767:11;12760:87;12873:2;12868:3;12864:12;12857:19;;12648:234;;;:::o;12888:337::-;;13069:84;13151:1;13146:3;13069:84;:::i;:::-;13062:91;;13183:7;13179:1;13174:3;13170:11;13163:28;13217:1;13212:3;13208:11;13201:18;;13052:173;;;:::o;13231:348::-;;13412:85;13494:2;13489:3;13412:85;:::i;:::-;13405:92;;13527:16;13523:1;13518:3;13514:11;13507:37;13570:2;13565:3;13561:12;13554:19;;13395:184;;;:::o;13585:368::-;;13748:67;13812:2;13807:3;13748:67;:::i;:::-;13741:74;;13845:34;13841:1;13836:3;13832:11;13825:55;13911:6;13906:2;13901:3;13897:12;13890:28;13944:2;13939:3;13935:12;13928:19;;13731:222;;;:::o;13959:323::-;;14122:67;14186:2;14181:3;14122:67;:::i;:::-;14115:74;;14219:27;14215:1;14210:3;14206:11;14199:48;14273:2;14268:3;14264:12;14257:19;;14105:177;;;:::o;14288:398::-;;14469:85;14551:2;14546:3;14469:85;:::i;:::-;14462:92;;14584:66;14580:1;14575:3;14571:11;14564:87;14677:2;14672:3;14668:12;14661:19;;14452:234;;;:::o;14692:325::-;;14855:67;14919:2;14914:3;14855:67;:::i;:::-;14848:74;;14952:29;14948:1;14943:3;14939:11;14932:50;15008:2;15003:3;14999:12;14992:19;;14838:179;;;:::o;15023:376::-;;15186:67;15250:2;15245:3;15186:67;:::i;:::-;15179:74;;15283:34;15279:1;15274:3;15270:11;15263:55;15349:14;15344:2;15339:3;15335:12;15328:36;15390:2;15385:3;15381:12;15374:19;;15169:230;;;:::o;15405:398::-;;15586:85;15668:2;15663:3;15586:85;:::i;:::-;15579:92;;15701:66;15697:1;15692:3;15688:11;15681:87;15794:2;15789:3;15785:12;15778:19;;15569:234;;;:::o;15809:398::-;;15990:85;16072:2;16067:3;15990:85;:::i;:::-;15983:92;;16105:66;16101:1;16096:3;16092:11;16085:87;16198:2;16193:3;16189:12;16182:19;;15973:234;;;:::o;16213:316::-;;16376:67;16440:2;16435:3;16376:67;:::i;:::-;16369:74;;16473:20;16469:1;16464:3;16460:11;16453:41;16520:2;16515:3;16511:12;16504:19;;16359:170;;;:::o;16535:388::-;;16698:67;16762:2;16757:3;16698:67;:::i;:::-;16691:74;;16795:34;16791:1;16786:3;16782:11;16775:55;16861:26;16856:2;16851:3;16847:12;16840:48;16914:2;16909:3;16905:12;16898:19;;16681:242;;;:::o;16929:322::-;;17092:67;17156:2;17151:3;17092:67;:::i;:::-;17085:74;;17189:26;17185:1;17180:3;17176:11;17169:47;17242:2;17237:3;17233:12;17226:19;;17075:176;;;:::o;17257:398::-;;17438:85;17520:2;17515:3;17438:85;:::i;:::-;17431:92;;17553:66;17549:1;17544:3;17540:11;17533:87;17646:2;17641:3;17637:12;17630:19;;17421:234;;;:::o;17661:374::-;;17824:67;17888:2;17883:3;17824:67;:::i;:::-;17817:74;;17921:34;17917:1;17912:3;17908:11;17901:55;17987:12;17982:2;17977:3;17973:12;17966:34;18026:2;18021:3;18017:12;18010:19;;17807:228;;;:::o;18041:373::-;;18204:67;18268:2;18263:3;18204:67;:::i;:::-;18197:74;;18301:34;18297:1;18292:3;18288:11;18281:55;18367:11;18362:2;18357:3;18353:12;18346:33;18405:2;18400:3;18396:12;18389:19;;18187:227;;;:::o;18420:396::-;;18601:84;18683:1;18678:3;18601:84;:::i;:::-;18594:91;;18715:66;18711:1;18706:3;18702:11;18695:87;18808:1;18803:3;18799:11;18792:18;;18584:232;;;:::o;18822:398::-;;19003:85;19085:2;19080:3;19003:85;:::i;:::-;18996:92;;19118:66;19114:1;19109:3;19105:11;19098:87;19211:2;19206:3;19202:12;19195:19;;18986:234;;;:::o;19226:396::-;;19407:84;19489:1;19484:3;19407:84;:::i;:::-;19400:91;;19521:66;19517:1;19512:3;19508:11;19501:87;19614:1;19609:3;19605:11;19598:18;;19390:232;;;:::o;19628:398::-;;19809:85;19891:2;19886:3;19809:85;:::i;:::-;19802:92;;19924:66;19920:1;19915:3;19911:11;19904:87;20017:2;20012:3;20008:12;20001:19;;19792:234;;;:::o;20032:330::-;;20195:67;20259:2;20254:3;20195:67;:::i;:::-;20188:74;;20292:34;20288:1;20283:3;20279:11;20272:55;20353:2;20348:3;20344:12;20337:19;;20178:184;;;:::o;20368:321::-;;20549:84;20631:1;20626:3;20549:84;:::i;:::-;20542:91;;20659:3;20655:1;20650:3;20646:11;20639:24;20685:1;20680:3;20676:11;20669:18;;20532:157;;;:::o;20691:356::-;;20850:67;20914:2;20909:3;20850:67;:::i;:::-;20843:74;;20943:34;20939:1;20934:3;20930:11;20923:55;21005:14;21000:2;20995:3;20991:12;20984:36;21042:2;21037:3;21033:12;21026:19;;20837:210;;;:::o;21049:314::-;;21208:67;21272:2;21267:3;21208:67;:::i;:::-;21201:74;;21301:34;21297:1;21292:3;21288:11;21281:55;21358:2;21353:3;21349:12;21342:19;;21195:168;;;:::o;21365:382::-;;21542:85;21624:2;21619:3;21542:85;:::i;:::-;21535:92;;21653:66;21649:1;21644:3;21640:11;21633:87;21742:2;21737:3;21733:12;21726:19;;21529:218;;;:::o;21749:353::-;;21908:67;21972:2;21967:3;21908:67;:::i;:::-;21901:74;;22001:34;21997:1;21992:3;21988:11;21981:55;22063:11;22058:2;22053:3;22049:12;22042:33;22097:2;22092:3;22088:12;22081:19;;21895:207;;;:::o;22104:359::-;;22263:67;22327:2;22322:3;22263:67;:::i;:::-;22256:74;;22356:34;22352:1;22347:3;22343:11;22336:55;22418:17;22413:2;22408:3;22404:12;22397:39;22458:2;22453:3;22449:12;22442:19;;22250:213;;;:::o;22465:380::-;;22642:84;22724:1;22719:3;22642:84;:::i;:::-;22635:91;;22752:66;22748:1;22743:3;22739:11;22732:87;22841:1;22836:3;22832:11;22825:18;;22629:216;;;:::o;22847:325::-;;23024:84;23106:1;23101:3;23024:84;:::i;:::-;23017:91;;23134:3;23130:1;23125:3;23121:11;23114:24;23164:1;23159:3;23155:11;23148:18;;23011:161;;;:::o;23178:312::-;;23341:67;23405:2;23400:3;23341:67;:::i;:::-;23334:74;;23438:16;23434:1;23429:3;23425:11;23418:37;23481:2;23476:3;23472:12;23465:19;;23324:166;;;:::o;23496:365::-;;23659:67;23723:2;23718:3;23659:67;:::i;:::-;23652:74;;23756:34;23752:1;23747:3;23743:11;23736:55;23822:3;23817:2;23812:3;23808:12;23801:25;23852:2;23847:3;23843:12;23836:19;;23642:219;;;:::o;23867:363::-;;24048:85;24130:2;24125:3;24048:85;:::i;:::-;24041:92;;24163:31;24159:1;24154:3;24150:11;24143:52;24221:2;24216:3;24212:12;24205:19;;24031:199;;;:::o;24236:297::-;;24416:83;24497:1;24492:3;24416:83;:::i;:::-;24409:90;;24525:1;24520:3;24516:11;24509:18;;24399:134;;;:::o;24539:381::-;;24702:67;24766:2;24761:3;24702:67;:::i;:::-;24695:74;;24799:34;24795:1;24790:3;24786:11;24779:55;24865:19;24860:2;24855:3;24851:12;24844:41;24911:2;24906:3;24902:12;24895:19;;24685:235;;;:::o;24926:376::-;;25089:67;25153:2;25148:3;25089:67;:::i;:::-;25082:74;;25186:34;25182:1;25177:3;25173:11;25166:55;25252:14;25247:2;25242:3;25238:12;25231:36;25293:2;25288:3;25284:12;25277:19;;25072:230;;;:::o;25308:729::-;;25489:86;25571:3;25566;25489:86;:::i;:::-;25482:93;;25605:66;25601:1;25596:3;25592:11;25585:87;25703:34;25698:2;25693:3;25689:12;25682:56;25769:34;25764:2;25759:3;25755:12;25748:56;25835:66;25830:2;25825:3;25821:12;25814:88;25934:66;25928:3;25923;25919:13;25912:89;26027:3;26022;26018:13;26011:20;;25472:565;;;:::o;26043:108::-;26120:24;26138:5;26120:24;:::i;:::-;26115:3;26108:37;26098:53;;:::o;26157:118::-;26244:24;26262:5;26244:24;:::i;:::-;26239:3;26232:37;26222:53;;:::o;26281:157::-;26386:45;26406:24;26424:5;26406:24;:::i;:::-;26386:45;:::i;:::-;26381:3;26374:58;26364:74;;:::o;26444:695::-;;26744:92;26832:3;26823:6;26744:92;:::i;:::-;26737:99;;26853:148;26997:3;26853:148;:::i;:::-;26846:155;;27018:95;27109:3;27100:6;27018:95;:::i;:::-;27011:102;;27130:3;27123:10;;26726:413;;;;;:::o;27145:535::-;;27397:92;27485:3;27476:6;27397:92;:::i;:::-;27390:99;;27506:148;27650:3;27506:148;:::i;:::-;27499:155;;27671:3;27664:10;;27379:301;;;;:::o;27686:1227::-;;28188:148;28332:3;28188:148;:::i;:::-;28181:155;;28353:92;28441:3;28432:6;28353:92;:::i;:::-;28346:99;;28462:148;28606:3;28462:148;:::i;:::-;28455:155;;28627:95;28718:3;28709:6;28627:95;:::i;:::-;28620:102;;28739:148;28883:3;28739:148;:::i;:::-;28732:155;;28904:3;28897:10;;28170:743;;;;;:::o;28919:541::-;;29174:148;29318:3;29174:148;:::i;:::-;29167:155;;29339:95;29430:3;29421:6;29339:95;:::i;:::-;29332:102;;29451:3;29444:10;;29156:304;;;;:::o;29466:1227::-;;29968:148;30112:3;29968:148;:::i;:::-;29961:155;;30133:92;30221:3;30212:6;30133:92;:::i;:::-;30126:99;;30242:148;30386:3;30242:148;:::i;:::-;30235:155;;30407:95;30498:3;30489:6;30407:95;:::i;:::-;30400:102;;30519:148;30663:3;30519:148;:::i;:::-;30512:155;;30684:3;30677:10;;29950:743;;;;;:::o;30699:1227::-;;31201:148;31345:3;31201:148;:::i;:::-;31194:155;;31366:92;31454:3;31445:6;31366:92;:::i;:::-;31359:99;;31475:148;31619:3;31475:148;:::i;:::-;31468:155;;31640:95;31731:3;31722:6;31640:95;:::i;:::-;31633:102;;31752:148;31896:3;31752:148;:::i;:::-;31745:155;;31917:3;31910:10;;31183:743;;;;;:::o;31932:4537::-;;33577:148;33721:3;33577:148;:::i;:::-;33570:155;;33742:95;33833:3;33824:6;33742:95;:::i;:::-;33735:102;;33854:148;33998:3;33854:148;:::i;:::-;33847:155;;34019:95;34110:3;34101:6;34019:95;:::i;:::-;34012:102;;34131:148;34275:3;34131:148;:::i;:::-;34124:155;;34296:95;34387:3;34378:6;34296:95;:::i;:::-;34289:102;;34408:148;34552:3;34408:148;:::i;:::-;34401:155;;34573:95;34664:3;34655:6;34573:95;:::i;:::-;34566:102;;34685:148;34829:3;34685:148;:::i;:::-;34678:155;;34850:95;34941:3;34932:6;34850:95;:::i;:::-;34843:102;;34962:148;35106:3;34962:148;:::i;:::-;34955:155;;35127:95;35218:3;35209:6;35127:95;:::i;:::-;35120:102;;35239:148;35383:3;35239:148;:::i;:::-;35232:155;;35404:95;35495:3;35486:6;35404:95;:::i;:::-;35397:102;;35516:148;35660:3;35516:148;:::i;:::-;35509:155;;35681:95;35772:3;35763:6;35681:95;:::i;:::-;35674:102;;35793:148;35937:3;35793:148;:::i;:::-;35786:155;;35958:95;36049:3;36040:6;35958:95;:::i;:::-;35951:102;;36070:95;36161:3;36152:6;36070:95;:::i;:::-;36063:102;;36182:96;36274:3;36264:7;36182:96;:::i;:::-;36175:103;;36295:148;36439:3;36295:148;:::i;:::-;36288:155;;36460:3;36453:10;;33559:2910;;;;;;;;;;;;;;:::o;36475:541::-;;36730:148;36874:3;36730:148;:::i;:::-;36723:155;;36895:95;36986:3;36977:6;36895:95;:::i;:::-;36888:102;;37007:3;37000:10;;36712:304;;;;:::o;37022:379::-;;37228:147;37371:3;37228:147;:::i;:::-;37221:154;;37392:3;37385:10;;37210:191;;;:::o;37407:397::-;;37562:75;37633:3;37624:6;37562:75;:::i;:::-;37662:2;37657:3;37653:12;37646:19;;37675:75;37746:3;37737:6;37675:75;:::i;:::-;37775:2;37770:3;37766:12;37759:19;;37795:3;37788:10;;37551:253;;;;;:::o;37810:222::-;;37941:2;37930:9;37926:18;37918:26;;37954:71;38022:1;38011:9;38007:17;37998:6;37954:71;:::i;:::-;37908:124;;;;:::o;38038:640::-;;38271:3;38260:9;38256:19;38248:27;;38285:71;38353:1;38342:9;38338:17;38329:6;38285:71;:::i;:::-;38366:72;38434:2;38423:9;38419:18;38410:6;38366:72;:::i;:::-;38448;38516:2;38505:9;38501:18;38492:6;38448:72;:::i;:::-;38567:9;38561:4;38557:20;38552:2;38541:9;38537:18;38530:48;38595:76;38666:4;38657:6;38595:76;:::i;:::-;38587:84;;38238:440;;;;;;;:::o;38684:373::-;;38865:2;38854:9;38850:18;38842:26;;38914:9;38908:4;38904:20;38900:1;38889:9;38885:17;38878:47;38942:108;39045:4;39036:6;38942:108;:::i;:::-;38934:116;;38832:225;;;;:::o;39063:634::-;;39322:2;39311:9;39307:18;39299:26;;39371:9;39365:4;39361:20;39357:1;39346:9;39342:17;39335:47;39399:108;39502:4;39493:6;39399:108;:::i;:::-;39391:116;;39554:9;39548:4;39544:20;39539:2;39528:9;39524:18;39517:48;39582:108;39685:4;39676:6;39582:108;:::i;:::-;39574:116;;39289:408;;;;;:::o;39703:210::-;;39828:2;39817:9;39813:18;39805:26;;39841:65;39903:1;39892:9;39888:17;39879:6;39841:65;:::i;:::-;39795:118;;;;:::o;39919:313::-;;40070:2;40059:9;40055:18;40047:26;;40119:9;40113:4;40109:20;40105:1;40094:9;40090:17;40083:47;40147:78;40220:4;40211:6;40147:78;:::i;:::-;40139:86;;40037:195;;;;:::o;40238:419::-;;40442:2;40431:9;40427:18;40419:26;;40491:9;40485:4;40481:20;40477:1;40466:9;40462:17;40455:47;40519:131;40645:4;40519:131;:::i;:::-;40511:139;;40409:248;;;:::o;40663:419::-;;40867:2;40856:9;40852:18;40844:26;;40916:9;40910:4;40906:20;40902:1;40891:9;40887:17;40880:47;40944:131;41070:4;40944:131;:::i;:::-;40936:139;;40834:248;;;:::o;41088:419::-;;41292:2;41281:9;41277:18;41269:26;;41341:9;41335:4;41331:20;41327:1;41316:9;41312:17;41305:47;41369:131;41495:4;41369:131;:::i;:::-;41361:139;;41259:248;;;:::o;41513:419::-;;41717:2;41706:9;41702:18;41694:26;;41766:9;41760:4;41756:20;41752:1;41741:9;41737:17;41730:47;41794:131;41920:4;41794:131;:::i;:::-;41786:139;;41684:248;;;:::o;41938:419::-;;42142:2;42131:9;42127:18;42119:26;;42191:9;42185:4;42181:20;42177:1;42166:9;42162:17;42155:47;42219:131;42345:4;42219:131;:::i;:::-;42211:139;;42109:248;;;:::o;42363:419::-;;42567:2;42556:9;42552:18;42544:26;;42616:9;42610:4;42606:20;42602:1;42591:9;42587:17;42580:47;42644:131;42770:4;42644:131;:::i;:::-;42636:139;;42534:248;;;:::o;42788:419::-;;42992:2;42981:9;42977:18;42969:26;;43041:9;43035:4;43031:20;43027:1;43016:9;43012:17;43005:47;43069:131;43195:4;43069:131;:::i;:::-;43061:139;;42959:248;;;:::o;43213:419::-;;43417:2;43406:9;43402:18;43394:26;;43466:9;43460:4;43456:20;43452:1;43441:9;43437:17;43430:47;43494:131;43620:4;43494:131;:::i;:::-;43486:139;;43384:248;;;:::o;43638:419::-;;43842:2;43831:9;43827:18;43819:26;;43891:9;43885:4;43881:20;43877:1;43866:9;43862:17;43855:47;43919:131;44045:4;43919:131;:::i;:::-;43911:139;;43809:248;;;:::o;44063:419::-;;44267:2;44256:9;44252:18;44244:26;;44316:9;44310:4;44306:20;44302:1;44291:9;44287:17;44280:47;44344:131;44470:4;44344:131;:::i;:::-;44336:139;;44234:248;;;:::o;44488:419::-;;44692:2;44681:9;44677:18;44669:26;;44741:9;44735:4;44731:20;44727:1;44716:9;44712:17;44705:47;44769:131;44895:4;44769:131;:::i;:::-;44761:139;;44659:248;;;:::o;44913:419::-;;45117:2;45106:9;45102:18;45094:26;;45166:9;45160:4;45156:20;45152:1;45141:9;45137:17;45130:47;45194:131;45320:4;45194:131;:::i;:::-;45186:139;;45084:248;;;:::o;45338:419::-;;45542:2;45531:9;45527:18;45519:26;;45591:9;45585:4;45581:20;45577:1;45566:9;45562:17;45555:47;45619:131;45745:4;45619:131;:::i;:::-;45611:139;;45509:248;;;:::o;45763:419::-;;45967:2;45956:9;45952:18;45944:26;;46016:9;46010:4;46006:20;46002:1;45991:9;45987:17;45980:47;46044:131;46170:4;46044:131;:::i;:::-;46036:139;;45934:248;;;:::o;46188:419::-;;46392:2;46381:9;46377:18;46369:26;;46441:9;46435:4;46431:20;46427:1;46416:9;46412:17;46405:47;46469:131;46595:4;46469:131;:::i;:::-;46461:139;;46359:248;;;:::o;46613:419::-;;46817:2;46806:9;46802:18;46794:26;;46866:9;46860:4;46856:20;46852:1;46841:9;46837:17;46830:47;46894:131;47020:4;46894:131;:::i;:::-;46886:139;;46784:248;;;:::o;47038:419::-;;47242:2;47231:9;47227:18;47219:26;;47291:9;47285:4;47281:20;47277:1;47266:9;47262:17;47255:47;47319:131;47445:4;47319:131;:::i;:::-;47311:139;;47209:248;;;:::o;47463:419::-;;47667:2;47656:9;47652:18;47644:26;;47716:9;47710:4;47706:20;47702:1;47691:9;47687:17;47680:47;47744:131;47870:4;47744:131;:::i;:::-;47736:139;;47634:248;;;:::o;47888:419::-;;48092:2;48081:9;48077:18;48069:26;;48141:9;48135:4;48131:20;48127:1;48116:9;48112:17;48105:47;48169:131;48295:4;48169:131;:::i;:::-;48161:139;;48059:248;;;:::o;48313:419::-;;48517:2;48506:9;48502:18;48494:26;;48566:9;48560:4;48556:20;48552:1;48541:9;48537:17;48530:47;48594:131;48720:4;48594:131;:::i;:::-;48586:139;;48484:248;;;:::o;48738:419::-;;48942:2;48931:9;48927:18;48919:26;;48991:9;48985:4;48981:20;48977:1;48966:9;48962:17;48955:47;49019:131;49145:4;49019:131;:::i;:::-;49011:139;;48909:248;;;:::o;49163:419::-;;49367:2;49356:9;49352:18;49344:26;;49416:9;49410:4;49406:20;49402:1;49391:9;49387:17;49380:47;49444:131;49570:4;49444:131;:::i;:::-;49436:139;;49334:248;;;:::o;49588:419::-;;49792:2;49781:9;49777:18;49769:26;;49841:9;49835:4;49831:20;49827:1;49816:9;49812:17;49805:47;49869:131;49995:4;49869:131;:::i;:::-;49861:139;;49759:248;;;:::o;50013:222::-;;50144:2;50133:9;50129:18;50121:26;;50157:71;50225:1;50214:9;50210:17;50201:6;50157:71;:::i;:::-;50111:124;;;;:::o;50241:283::-;;50307:2;50301:9;50291:19;;50349:4;50341:6;50337:17;50456:6;50444:10;50441:22;50420:18;50408:10;50405:34;50402:62;50399:2;;;50467:18;;:::i;:::-;50399:2;50507:10;50503:2;50496:22;50281:243;;;;:::o;50530:331::-;;50681:18;50673:6;50670:30;50667:2;;;50703:18;;:::i;:::-;50667:2;50788:4;50784:9;50777:4;50769:6;50765:17;50761:33;50753:41;;50849:4;50843;50839:15;50831:23;;50596:265;;;:::o;50867:332::-;;51019:18;51011:6;51008:30;51005:2;;;51041:18;;:::i;:::-;51005:2;51126:4;51122:9;51115:4;51107:6;51103:17;51099:33;51091:41;;51187:4;51181;51177:15;51169:23;;50934:265;;;:::o;51205:132::-;;51295:3;51287:11;;51325:4;51320:3;51316:14;51308:22;;51277:60;;;:::o;51343:141::-;;51415:3;51407:11;;51438:3;51435:1;51428:14;51472:4;51469:1;51459:18;51451:26;;51397:87;;;:::o;51490:114::-;;51591:5;51585:12;51575:22;;51564:40;;;:::o;51610:98::-;;51695:5;51689:12;51679:22;;51668:40;;;:::o;51714:99::-;;51800:5;51794:12;51784:22;;51773:40;;;:::o;51819:113::-;;51921:4;51916:3;51912:14;51904:22;;51894:38;;;:::o;51938:184::-;;52071:6;52066:3;52059:19;52111:4;52106:3;52102:14;52087:29;;52049:73;;;;:::o;52128:168::-;;52245:6;52240:3;52233:19;52285:4;52280:3;52276:14;52261:29;;52223:73;;;;:::o;52302:147::-;;52440:3;52425:18;;52415:34;;;;:::o;52455:169::-;;52573:6;52568:3;52561:19;52613:4;52608:3;52604:14;52589:29;;52551:73;;;;:::o;52630:148::-;;52769:3;52754:18;;52744:34;;;;:::o;52784:305::-;;52843:20;52861:1;52843:20;:::i;:::-;52838:25;;52877:20;52895:1;52877:20;:::i;:::-;52872:25;;53031:1;52963:66;52959:74;52956:1;52953:81;52950:2;;;53037:18;;:::i;:::-;52950:2;53081:1;53078;53074:9;53067:16;;52828:261;;;;:::o;53095:185::-;;53152:20;53170:1;53152:20;:::i;:::-;53147:25;;53186:20;53204:1;53186:20;:::i;:::-;53181:25;;53225:1;53215:2;;53230:18;;:::i;:::-;53215:2;53272:1;53269;53265:9;53260:14;;53137:143;;;;:::o;53286:848::-;;;53378:6;53369:15;;53402:5;53393:14;;53416:712;53437:1;53427:8;53424:15;53416:712;;;53532:4;53527:3;53523:14;53517:4;53514:24;53511:2;;;53541:18;;:::i;:::-;53511:2;53591:1;53581:8;53577:16;53574:2;;;54006:4;53999:5;53995:16;53986:25;;53574:2;54056:4;54050;54046:15;54038:23;;54086:32;54109:8;54086:32;:::i;:::-;54074:44;;53416:712;;;53359:775;;;;;;;:::o;54140:285::-;;54224:23;54242:4;54224:23;:::i;:::-;54216:31;;54268:27;54286:8;54268:27;:::i;:::-;54256:39;;54314:104;54351:66;54341:8;54335:4;54314:104;:::i;:::-;54305:113;;54206:219;;;;:::o;54431:1073::-;;54676:8;54666:2;;54697:1;54688:10;;54699:5;;54666:2;54725:4;54715:2;;54742:1;54733:10;;54744:5;;54715:2;54811:4;54859:1;54854:27;;;;54895:1;54890:191;;;;54804:277;;54854:27;54872:1;54863:10;;54874:5;;;54890:191;54935:3;54925:8;54922:17;54919:2;;;54942:18;;:::i;:::-;54919:2;54991:8;54988:1;54984:16;54975:25;;55026:3;55019:5;55016:14;55013:2;;;55033:18;;:::i;:::-;55013:2;55066:5;;;54804:277;;55190:2;55180:8;55177:16;55171:3;55165:4;55162:13;55158:36;55140:2;55130:8;55127:16;55122:2;55116:4;55113:12;55109:35;55093:111;55090:2;;;55246:8;55240:4;55236:19;55227:28;;55281:3;55274:5;55271:14;55268:2;;;55288:18;;:::i;:::-;55268:2;55321:5;;55090:2;55361:42;55399:3;55389:8;55383:4;55380:1;55361:42;:::i;:::-;55346:57;;;;55435:4;55430:3;55426:14;55419:5;55416:25;55413:2;;;55444:18;;:::i;:::-;55413:2;55493:4;55486:5;55482:16;55473:25;;54491:1013;;;;;;:::o;55510:348::-;;55573:20;55591:1;55573:20;:::i;:::-;55568:25;;55607:20;55625:1;55607:20;:::i;:::-;55602:25;;55795:1;55727:66;55723:74;55720:1;55717:81;55712:1;55705:9;55698:17;55694:105;55691:2;;;55802:18;;:::i;:::-;55691:2;55850:1;55847;55843:9;55832:20;;55558:300;;;;:::o;55864:191::-;;55924:20;55942:1;55924:20;:::i;:::-;55919:25;;55958:20;55976:1;55958:20;:::i;:::-;55953:25;;55997:1;55994;55991:8;55988:2;;;56002:18;;:::i;:::-;55988:2;56047:1;56044;56040:9;56032:17;;55909:146;;;;:::o;56061:185::-;;56119:18;56135:1;56119:18;:::i;:::-;56114:23;;56151:18;56167:1;56151:18;:::i;:::-;56146:23;;56188:1;56185;56182:8;56179:2;;;56193:18;;:::i;:::-;56179:2;56238:1;56235;56231:9;56223:17;;56104:142;;;;:::o;56252:96::-;;56318:24;56336:5;56318:24;:::i;:::-;56307:35;;56297:51;;;:::o;56354:90::-;;56431:5;56424:13;56417:21;56406:32;;56396:48;;;:::o;56450:149::-;;56526:66;56519:5;56515:78;56504:89;;56494:105;;;:::o;56605:126::-;;56682:42;56675:5;56671:54;56660:65;;56650:81;;;:::o;56737:77::-;;56803:5;56792:16;;56782:32;;;:::o;56820:86::-;;56895:4;56888:5;56884:16;56873:27;;56863:43;;;:::o;56912:154::-;56996:6;56991:3;56986;56973:30;57058:1;57049:6;57044:3;57040:16;57033:27;56963:103;;;:::o;57072:307::-;57140:1;57150:113;57164:6;57161:1;57158:13;57150:113;;;57249:1;57244:3;57240:11;57234:18;57230:1;57225:3;57221:11;57214:39;57186:2;57183:1;57179:10;57174:15;;57150:113;;;57281:6;57278:1;57275:13;57272:2;;;57361:1;57352:6;57347:3;57343:16;57336:27;57272:2;57121:258;;;;:::o;57385:320::-;;57466:1;57460:4;57456:12;57446:22;;57513:1;57507:4;57503:12;57534:18;57524:2;;57590:4;57582:6;57578:17;57568:27;;57524:2;57652;57644:6;57641:14;57621:18;57618:38;57615:2;;;57671:18;;:::i;:::-;57615:2;57436:269;;;;:::o;57711:233::-;;57773:24;57791:5;57773:24;:::i;:::-;57764:33;;57819:66;57812:5;57809:77;57806:2;;;57889:18;;:::i;:::-;57806:2;57936:1;57929:5;57925:13;57918:20;;57754:190;;;:::o;57950:79::-;;58018:5;58007:16;;57997:32;;;:::o;58035:176::-;;58084:20;58102:1;58084:20;:::i;:::-;58079:25;;58118:20;58136:1;58118:20;:::i;:::-;58113:25;;58157:1;58147:2;;58162:18;;:::i;:::-;58147:2;58203:1;58200;58196:9;58191:14;;58069:142;;;;:::o;58217:180::-;58265:77;58262:1;58255:88;58362:4;58359:1;58352:15;58386:4;58383:1;58376:15;58403:180;58451:77;58448:1;58441:88;58548:4;58545:1;58538:15;58572:4;58569:1;58562:15;58589:180;58637:77;58634:1;58627:88;58734:4;58731:1;58724:15;58758:4;58755:1;58748:15;58775:180;58823:77;58820:1;58813:88;58920:4;58917:1;58910:15;58944:4;58941:1;58934:15;58961:102;;59053:2;59049:7;59044:2;59037:5;59033:14;59029:28;59019:38;;59009:54;;;:::o;59069:102::-;;59158:5;59155:1;59151:13;59130:34;;59120:51;;;:::o;59177:122::-;59250:24;59268:5;59250:24;:::i;:::-;59243:5;59240:35;59230:2;;59289:1;59286;59279:12;59230:2;59220:79;:::o;59305:116::-;59375:21;59390:5;59375:21;:::i;:::-;59368:5;59365:32;59355:2;;59411:1;59408;59401:12;59355:2;59345:76;:::o;59427:120::-;59499:23;59516:5;59499:23;:::i;:::-;59492:5;59489:34;59479:2;;59537:1;59534;59527:12;59479:2;59469:78;:::o;59553:122::-;59626:24;59644:5;59626:24;:::i;:::-;59619:5;59616:35;59606:2;;59665:1;59662;59655:12;59606:2;59596:79;:::o
Swarm Source
ipfs://043616e9edb5415929844e388ac1063aa40fcdf2e972b897c081b34120c8082b
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.